Я пытаюсь понять, как использовать Windows API для связи с RS232 / RS422.
Мне нужно подключиться к некоторому оборудованию, где я не могу контролировать протокол связи, поэтому я вынужден работать с этим.
Мне нужно установить TX + (контакт 3) на высокий уровень (~ 5 вольт), а TX — (контакт 7) на низкий уровень (~ 0 вольт).
Я знаю, что есть
SetCommBreak
Но это ставит оба контакта (3,7) до ~ 5 вольт. Мне нужен только контакт 3, чтобы быть 5 вольт, и контакт 7, чтобы быть ~ 0 вольт. Есть ли выполнимый способ сделать это? Мне бы хотелось, если бы я мог просто контролировать эти линии, как по проводам, но есть ли способ манипулировать скоростью передачи и передавать данные для достижения этой цели? Или какое-то решение?
Вы не можете манипулировать контактами RX и TX произвольно и без ограничений * без написания собственного протокола RS485 / RS422 жёстко на чипе. Причина, по которой вы ограничены в манипулировании выводами при загрузке последовательного драйвера Windows (автоматически) заключается в том, что спецификация последовательного порта (что такое RS485 / RS 422) требует определенной структуры данных, то есть начальных битов, стоповых битов, сигналов типа RTS (готовность к отправке), … эта необходимая структура данных реализована в последовательном драйвере Windows, и вы не могу переписать это. Вы можете настроить свои данные таким образом, чтобы были получены требуемые состояния контактов, но ваши данные всегда будут окутанный в структуре, которая требуется последовательным протоколом (старт / стоп биты, …), см. этот рисунок из https://en.wikipedia.org/wiki/RS-485
в windows вы инициализируете последовательный порт в структуре DCB ( https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_dcb )
в этих структурах последовательного порта несколько протоколов, которые работают на RS485 / RS422, определены как MODBus, …
Вы можете думать о последовательном порте RS-485 / RS-422 как оумный файл». ‘умный‘из-за нескольких рабов / адресов, которые могут быть доступны. если вы напишите правильный адрес в файл / последовательную шину, вы получите ответ, т.е. если вы напишите 23, что означает «Раб 23, пришлите мне свои значения регистра!«
Этот основной протокол — то, что должно быть реализовано в программном обеспечении. Для этого вам не нужно манипулировать отдельными выводами, кроме, возможно, линий управления, таких как RTS, … и на самом деле вы не можете сделать это без написания своего собственного драйвера.
Пример реализации протокола MODBus приведен в http://libmodbus.org/documentation/
Следующая цитата показывает, что протоколы, работающие через RS-485, записываются через уровень последовательного порта:
Вы не можете легко создавать сообщения MODBUS «вручную», как это было бы
сделано с протоколами ASCII, используемыми на RS232: каждое сообщение MODBUS заканчивается
код контрольной суммы, рассчитанный по полному содержанию сообщения. к
обмениваться сообщениями MODBUS, поэтому вы должны использовать:либо конкретная программа, предоставляемая поставщиком устройства, с совместимым интерфейсом;
или простой интерфейс RS485 с библиотекой программирования, которая кодирует
и декодирует сообщения MODBUS;или умный интерфейс RS485, способный
кодировать и декодировать самостоятельно сообщения MODBUS, такие как Yocto-RS485.
источник : http://www.yoctopuce.com/EN/article/a-quick-tutorial-on-rs485-and-modbus
Других решений пока нет …