0

我想构建一个函数,将请求从 ModBus 发送到十六进制的串行。我或多或少有一个工作功能,但有两个问题。

第一期

[b'\x06', b'\x1c', b'\x00!', b'\r', b'\x1e', b'\x1d\xd3', b'\r', b'\n', b'\x1e', b'\x1d']

我无法使用.split('\r \n')方法删除这部分 b'\r', b'\n' ,因为它不是字符串。

问题 2 从持有寄存器 40 (33) 获取值时,我尝试使用.to_bytes()方法,我不断得到 b'\x00!', b'\r' 并且我期待 b'\x21'

r = client.read_holding_registers(40)
re = r.registers[0]
req = re.to_bytes(2, 'big')

我的功能是生成我的请求并通过 pyserial 发送。

def scanned_code():
    code = client.read_holding_registers(0)
    # code2= client.re
    r = code.registers[0]
    return r

def send_request(data):
    """ Takes input from create_request() and sends data to serial port"""
    try:

        for i in range(data):
            serial_client.write(data[i])
            # serial_client.writelines(data[i])


    except:
        print('no se pudo enviar el paquete <<<--------------------')


def create_request(job):

    """ Request type is 33  looks for job

        [06]
        [1c]
            req=33[0d][0a]
            job=30925[0d][0a][1e]
        [1d]
    """
    r = client.read_holding_registers(40)
    re = r.registers[0]
    req = re.to_bytes(2, 'big')


    num = job.to_bytes(2, 'big')
    data = [
        b'\x06',
        b'\x1C',
        req,
        b'\x0D',
        b'\x1E',
        num,
        b'\x0D',
        b'\x0A',
        b'\x1E',
        b'\x1D'
    ]

    print(data)


while True:
    # verify order_trigger() is True.

    while order_trigger() != False:

        print('inside while loop')

        # set flag coil back to 0
        reset_trigger()

        # get Job no.
        job = scanned_code()

        # check for JOB No. dif. than 0
        if job != 0:

            print(scanned_code())

            send_request(create_request(job))


            # send job request to host to get job data
            # send_request()





            # if TRUE  send job request by serial to DVI client
            #           get job request data
            #           translate job request data to modbus
            #           send data to plc


        else:

            print(' no scanned code')
            break

        time.sleep(INTERNAL_SLEEP_TIME)

    print('outside loop')
    time.sleep(EXTERNAL_SLEEP_TIME)

作为一个额外的问题,这是正确的做事方式吗?

4

0 回答 0