Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 19, 2011 14:41:31

Entropius
От:
Зарегистрирован: 2011-02-19
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с COM-портом

Доброго дня.

Сейчас интегрируюсь с одной чудо железкой по 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()



Офлайн

#2 Фев. 19, 2011 15:21:54

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Работа с COM-портом

Скорее всего проблема всё же не в библиотеке, а параметрах подключения.
Почему вы ставите PARITY_SPACE? Меняя его потом туда-сюда? Это документация к железке оговаривает?
И она принимает один стопбит?
xonxoff равен 0x13, в то время как это вообще-то булевый параметр - чтобы у читателя вашего кода крышу сорвало от удивления?
И так далее.

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



Офлайн

#3 Фев. 19, 2011 15:31:31

Entropius
От:
Зарегистрирован: 2011-02-19
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с COM-портом

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

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

Могу скинуть данные снифинга.



Офлайн

#4 Фев. 19, 2011 15:47:17

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Работа с COM-портом

Работающий софт использует pyserial?
Или у этого софта обнаружились исходники?



Офлайн

#5 Фев. 19, 2011 15:57:28

Entropius
От:
Зарегистрирован: 2011-02-19
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с COM-портом

Что и как делает софт я узнал из снифинга.



Офлайн

#6 Фев. 19, 2011 16:33:39

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Работа с COM-портом

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

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

Может, это и есть ваша проблема?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version