Форум сайта python.su
0
Всем доброго
Есть задача определять на концах COM портов определенного вида девайсы (3 вида).
Написал 3 функции, последовательно вызвал - не профит.
Один из девайсов, отвечает единожды, апри повторном запуске присылает код ошибки “неверная команда”
Оставляю в списке функций только этот девайс, запускаю несколько раз - все работает.
Добавляю в список хотя бы еще один - опять ошибка команды.
Сделал очистку фуберов I/O перед всеми записями и после чтений - ничего не изменилось.
Открыл модуль pyserial, добавил принтов метод записи в COM порт, ничего не обнаружил.
Что может быть? Излазил уже все что можно.
Документацию на протокол общения с девайсом прочитал от и до.Перепробовал массу вариантов - все тщетно.
Протокол девайса:
http://electric.lqela.ru/index.php/option/content/task/view/id/154/catid/48/Itemid/43
Код (говнокод):
http://clip2net.com/s/iYMJdf
Офлайн
221
Из документации :
write(data)строка, вы же отправляете список значений. Используйте модуль struct и функцию pack что бы упаковать ваши значения в строку
Parameters: data – Data to send.
Returns: Number of bytes written.
Raises SerialTimeoutException:
In case a write timeout is configured for the port and the time is exceeded.
Write the string data to the port.
Офлайн
0
JOHN_16Но если бы запрос, который я отсылаю был постоянно не верным, то ваш метод бы был правильным, но он доходит, и устройство отзывается, вот только когда ты повторно его опрашиваешь оно молчит.
Из документации :
Офлайн
0
JOHN_16
Из документации :
Офлайн
0
Проблема решена.
Ответ:
По спецификации, нужно 3 раза “переспрашивать” девайсину, если она не поняла с первого.
Этот момент я упустил, так как был уверен в полностью рабочем запросе.
Но когда я добавил цикл все стало на свои места. железка без проблем определяется со второй итерации. Видимо это связано с какими то переходными процессами или особенностями регистров и буферов самой железки, ибо общается она чесно говоря странно. Особенно если учитываться что, на содержимое бкфера влияет время ожидания его заполнения, а именно, если нужная информация заполняется за Х время, то за 2Х ее там будет больше (не пропорционально) - она просто будет дублироваться.
У меня все. Всем Спасибо)
Офлайн