Найти - Пользователи
Полная версия: Работа с COM-портом
Начало » Python для экспертов » Работа с COM-портом
1
Entropius
Доброго дня.

Сейчас интегрируюсь с одной чудо железкой по COM-порту. Для неё ранее уже написан сторонний софт.

Начну издалека.
Четвёртый байт ответа содержит длину ответа (с учётом байта длины).
Вот так происходит обмен информацией с уже написанным приложением:
Отправил: #03#82#65
Получил: #03#82#65#19#01#42#82#00#00#00#3C#35#45#16#19#02#11#00#20#80#C1#35#32#00#1A#00#00#29

Всё OK, всё в порядке

Теперь делаю запрос с помощью pyserial:
Отправил: #03#82#65
Получил: #03#80#D9#19#01#42#80#00#00#00#3C#14#49#16#19#02#00#20#80#C1#35#32#00#1A#00#00#2E

И мне возвращается на один байт меньше! А самое интересное, что с этих самых пор, контроллер отдаёт события исключительно без этого байта.

Быть может кто подскажет, в чём может быть проблема? Я надеюсь, что проблема всё-таки в библиотеке, а не в железке.

Поскольку скорее всего проблема в подключении, вот код:

s = pyserial.Serial(0, baudrate = 4800, timeout = TIMEOUT, parity = pyserial.PARITY_SPACE, xonxoff = 0x13)
s.parity = pyserial.PARITY_MARK
s.write('\x01', 1)
s.readline()
s.parity = pyserial.PARITY_SPACE
s.write('\x03\x80\xD9')
s.readline()
Андрей Светлов
Скорее всего проблема всё же не в библиотеке, а параметрах подключения.
Почему вы ставите PARITY_SPACE? Меняя его потом туда-сюда? Это документация к железке оговаривает?
И она принимает один стопбит?
xonxoff равен 0x13, в то время как это вообще-то булевый параметр - чтобы у читателя вашего кода крышу сорвало от удивления?
И так далее.

При том, понимаете ли, подсказать решительно ничего нельзя: документации по железке нет, самой железки тоже. Так что придется вам как-нибудь самим пробовать.
Entropius
Документации к железке как таково нет, но именно так ведёт себя уже работающий софт. Аналогичное могу сказать и про xonxoff.

Забыл отметить, что после pyserial даже родной софт правильно перестаёт работать.

Могу скинуть данные снифинга.
Андрей Светлов
Работающий софт использует pyserial?
Или у этого софта обнаружились исходники?
Entropius
Что и как делает софт я узнал из снифинга.
Андрей Светлов
А вы снифали обе проги: свою и чужую - на предмет сравнения?
И всё таки мне ваш xonxoff не нравится. В pyserial этот параметр указывает, использовать ли xon/xoff символы для контроля над потоком.
Сами же значения (смотрю на trunk из SVN на sourceforge)
- 17 для xon
- 19 для xoff
Эти значения - стандарт. На linux их невозможно поменять, насколько я вижу.
В реализации для Windows они задаются в Serial._reconfigurePort.

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

Может, это и есть ваша проблема?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB