Построение шестнадцатеричного массива из двоичных данных из последовательного порта - PullRequest
0 голосов
/ 16 мая 2019

У меня есть внешнее устройство, последовательно подключенное к ПК. Данные являются двоичными, а не символами, что означает, что я не должен интерпретировать данные как символы ASCII.

На ПК у меня есть Python 3.7, который читает последовательное устройство с использованием pyserial. Я хочу заполнить массив int8 входящими данными.

Я работаю с потоками, вот где я до сих пор, но это не мой первый кусок кода, я пробовал несколько вещей, ни одна из которых не сработала.

def get_data(sent, m_serport)
    constr_resp = np.int8([0])
    resp = np.int8([0])
    resp_index = 0

        while (1):
            if (m_serport.in_waiting > 0):
                resp = master_ser.read(1)
                constr_resp = np.concatenate(constr_resp, resp)
                resp_index = resp_index + 1
                parse(constr_resp, resp_index)

Этот генерирует следующую ошибку: TypeError: объект 'bytes' нельзя интерпретировать как целое число

У меня довольно сильный C-фон, и Python очень меня смущает, когда речь идет о типах данных.

Надеюсь, мой вопрос легко понят.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Я думаю, что получение данных должно начинаться с создания списка байтов:

def get_data(sent, m_serport)
    alist = []
    resp_index = 0
        while (1):
            if (m_serport.in_waiting > 0):
                resp = master_ser.read(1)
                alist.append(resp)
                resp_index += resp_index
                # parse(alist, resp_index)
    return alist

Возможно, вам не понадобится resp_index, так как оно должно быть просто len(alist). Также я не думаю, что вы хотите parse в этом цикле, но я не знаю, что он должен делать.

0 голосов
/ 16 мая 2019

Kostbil, использование python для доступа к внешним данным может быть немного сложнее, но поверьте мне, это не страшно. В этом случае отладка может быть проще, если вы знаете, в какой строке ошибка ... Вы также можете использовать print () для отладки.

По моему мнению, вы можете вызвать метод декодирования, т.е. .decode () для данных, которые вы получаете извне, перед выполнением любой целочисленной операции. скажем, externalData.decode ()

Надеюсь, это сработает.

...