Удалить завершающие биты из шестнадцатеричного pyModBus - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу построить функцию, которая отправляет запрос от ModBus на последовательный в шестнадцатеричном виде.У меня более или менее есть рабочая функция, но есть две проблемы.

Проблема 1

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

Я не могу удалить эту часть b '\ r',b '\ n' , используя метод .split ('\ r \ n') , поскольку это не строка.

Выпуск 2 При получениизначение из регистра хранения 40 (33), и я пытаюсь использовать метод .to_bytes () , который я продолжаю получать b '\ x00!', b '\ r' и I 'Я ожидаю 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)

В качестве дополнительного вопроса этоправильный способ делать вещи?

...