Передача данных через последовательный порт между Python и приложением C (работает на Microblaze) - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь использовать консоль python со своего ПК для чтения и записи во встроенное приложение C, работающее на хосте microblaze. Соединение между ними - USB -> UART через чип FTDI.

Краткое примечание о моих навыках / опыте : инженер по радиочастотным / микроволновым технологиям, большой опыт работы с аппаратным обеспечением и большой опыт работы с HDL, но практически не имеет опыта работы с программным обеспечением, конечно же, ни в C, ни в python.

Проблемные / Вопросы :

  1. Я могу использовать консоль PuTTy или Termite для ввода команд (например, «частота?») И получения ожидаемых возвращаемых значений от функций. Я даже могу установить значения, используя «установленную» версию функции. В моем C-приложении функция uart_write_char использует 'putchar ()', и я подозреваю, что она просто печатает символы и строки, а не "передает" данные (байты, двойные числа, числа с плавающей запятой и т. Д.).

Вот фрагмент кода, описывающий функцию uart_write:

*

void uart_write_char(char data)
{
    putchar(data);
}

* Я хотел бы знать, есть ли разница между «печатью» данных на консоль и «передачей» данных на другой конец, чтобы я мог получить их и вывести в файл.

  1. Я хотел бы знать, как лучше всего использовать pyVISA на моей стороне Python для получения данных, передаваемых через последовательный порт. В тот момент, когда я открываю порт с помощью ResourceManager () и openResource (), я соответственно устанавливаю скорость передачи данных, однако я не могу «запросить» устройство. Запрос - это функция pyVISA (?), Которая представляет собой запись, за которой следует чтение. В этом случае я хотел бы передать команду «частота?» на встроенный микроблейз, и я ожидаю, что результат будет передан обратно. Если я могу сделать это успешно с помощью консоли, такой как PuTTy или Termite, в чем разница с использованием функции запроса pyVISA? возможно кодировка?

Редактировать: Я также пробовал query_ascii_value () и query_binary_value (), как описано в https://media.readthedocs.org/pdf/pyvisa/1.6/pyvisa.pdf Результат остается прежним, я получаю сообщение об ошибке Timeout в консоли Python.

ОБНОВЛЕНИЕ Я использовал NI-MAX для захвата трассировки ввода-вывода, и время ожидания истекло. Если я подключен к устройству, я предполагаю, что он завершит функцию записи, это правда? Вот журнал Ni-MAX

  1. viOpenDefaultRM (0x00001001) Идентификатор процесса: 0x000082C8 Идентификатор потока: 0x00006F90 Время начала: 15: 21: 12.0642 Продолжительность звонка 00: 00: 00.0139 Статус: 0 (VI_SUCCESS)

  2. viClose (0x00000000) Идентификатор процесса: 0x000082C8 Идентификатор потока: 0x00006F90 Время начала: 15: 21: 12.0781 Продолжительность звонка 00: 00: 00.0000 Статус: 0x3FFF0082 (VI_WARN_NULL_OBJECT)

  3. viParseRsrcEx (0x00001001, "ASRL6 :: INSTR", 4 (0x4), 6 (0x6), "INSTR", "ASRL6 :: INSTR", "COM6") Идентификатор процесса: 0x000082C8 Идентификатор потока: 0x00006F90 Время начала: 15: 21: 12.0781 Продолжительность звонка 00: 00: 00.0000 Статус: 0 (VI_SUCCESS)

  4. viOpen (0x00001001, "ASRL6 :: INSTR", 0 (0x0), 0 (0x0), 0x00000001) Идентификатор процесса: 0x000082C8 Идентификатор потока: 0x00006F90 Время начала: 15: 21: 12.0792 Продолжительность звонка 00: 00: 00.0657 Статус: 0 (VI_SUCCESS)

  5. viParseRsrcEx (0x00001001, "ASRL6 :: INSTR", 4 (0x4), 6 (0x6), "INSTR", NULL, NULL) Идентификатор процесса: 0x000082C8 Идентификатор потока: 0x00006F90 Время начала: 15: 21: 12.1450 Продолжительность звонка 00: 00: 00.0000 Статус: 0 (VI_SUCCESS)

  6. viWrite (ASRL6 :: INSTR (0x00000001), "tx_lo_freq? ...", 14 (0xE), 14 (0xE)) Идентификатор процесса: 0x000082C8 Идентификатор потока: 0x00006F90 Время начала: 15: 21: 24.5897 Продолжительность звонка 00: 00: 00.0000 Статус: 0 (VI_SUCCESS)

  1. viRead (ASRL6 :: INSTR (0x00000001), 0x000001DF461F5420, 20480 (0x5000), 0 (0x0)) Идентификатор процесса: 0x000082C8 Идентификатор потока: 0x00006F90 Время начала: 15: 21: 24.5897 Продолжительность звонка 00: 00: 02.0006 Статус: 0xBFFF0015 ( VI_ERROR_TMO )

Я ценю любые советы по этому вопросу и с радостью предоставлю еще несколько фрагментов кода / информацию. Также хотелось бы получить отзывы о почтовом этикете и возможности улучшения почтового запроса

Приветствия

1 Ответ

0 голосов
/ 07 сентября 2018

Для полноты картины мне удается разработать решение с использованием NIMAX для отслеживания всех транзакций VISA и тестовой панели VISA для достижения рабочего состояния, которое я затем мог бы внедрить в своем коде

Проблема : я определял скорость передачи и символы завершения чтения / записи в своем определении класса инструмента, и они так и не были реализованы. Похоже, что я пытался сделать запрос с настройками по умолчанию BAUD = 9600 и некорректным завершением чтения.

Исправление , я переместил строки кода, которые устанавливают скорость передачи и завершение чтения, в мой класс устройств, чтобы при определении устройства как инструмента он устанавливал эти атрибуты до того, как произойдут какие-либо транзакции. Теперь я могу читать и писать просто отлично.

Приветствия,

...