从十六进制pyModBus中删除尾随位

时间:2018-09-27 03:08:21

标签: pyserial pymodbus3 pymodbus

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

问题1

[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)

还有一个问题,这是做事的正确方法吗?

0 个答案:

没有答案