Remove trailing bits from hex pyModBus

96 views Asked by At

I want to built a function that sends a request from ModBus to serial in hex. I more o less have a working function but have two issues.

Issue 1

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

I cant remove this part b'\r', b'\n', using the .split('\r \n') method since It's not a string.

Issue 2 When getting a value from holding register 40 (33) and i try to use the .to_bytes() method I keep getting b'\x00!', b'\r' and I'm expecting b'\x21'

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

My functions to generate my request and to send trough 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)

As an additional question is this the proper way of doing things?

0

There are 0 answers