Поделиться последовательным портом в Windows с помощью Python

У меня есть модуль GPS, подключенный через последовательный порт (USB-> Виртуальный COM-порт). Измерительное программное обеспечение использует этот порт, поэтому с другим программным обеспечением я не могу получить доступ к данным. Я хотел бы создать два виртуальных COM-порта и поделиться этими данными через это. Возможно ли использовать Python? Есть ли какой-нибудь пример с открытым исходным кодом, написанный на Python?

2 ответа

Решение

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

Протоколы последовательных портов записываются как протоколы "точка-точка", поэтому нет общего способа их мультиплексирования. Вы можете написать программу, которая разделяет доступ к модулю GPS (обрабатывая его исключительно и предоставляя API нескольким программам), но каждая программа, которая хотела использовать модуль GPS, должна быть написана для общения с вашим API, а не напрямую с последовательным интерфейсом. порт - и в этом случае это можно сделать, только если вы можете изменить программное обеспечение для измерения.

Обратите внимание на то, что, вероятно, нет ничего невозможного в реализации вашего решения "виртуального порта", но это было бы специальным хаком (оно работало бы только с этим конкретным протоколом), и это могло бы быть довольно сложным: вам нужно было бы эмулировать два модуля GPS и мультиплексировать запросы к реальному модулю GPS; в зависимости от того, как он работает (например, имеет "сложное" постоянное состояние), он может быть простым или очень сложным. Но, конечно же, Python будет недостаточно, чтобы эмулировать последовательные порты, вы должны перейти в режим ядра.

Вам нужно двустороннее общение или просто чтение? Вы можете собрать или купить оборудование для физического разделения линии данных Rx, чтобы вы могли использовать два COM-порта, каждый из которых считывал бы одни и те же данные. Вы можете сделать это и с данными Tx, но вы должны быть осторожны с удалением данных, если оба порта пытаются записать одновременно.

Другие вопросы по тегам