Управление портами RS с помощью Windows API

Я пытаюсь понять, как использовать Windows API для связи с RS232 / RS422.
Мне нужно подключиться к некоторому оборудованию, где я не могу контролировать протокол связи, поэтому я вынужден работать с этим.
Мне нужно установить TX + (контакт 3) на высокий уровень (~ 5 вольт), а TX — (контакт 7) на низкий уровень (~ 0 вольт).

Я знаю, что есть

SetCommBreak

Но это ставит оба контакта (3,7) до ~ 5 вольт. Мне нужен только контакт 3, чтобы быть 5 вольт, и контакт 7, чтобы быть ~ 0 вольт. Есть ли выполнимый способ сделать это? Мне бы хотелось, если бы я мог просто контролировать эти линии, как по проводам, но есть ли способ манипулировать скоростью передачи и передавать данные для достижения этой цели? Или какое-то решение?

1

Решение

Вы не можете манипулировать контактами RX и TX произвольно и без ограничений * без написания собственного протокола RS485 / RS422 жёстко на чипе. Причина, по которой вы ограничены в манипулировании выводами при загрузке последовательного драйвера Windows (автоматически) заключается в том, что спецификация последовательного порта (что такое RS485 / RS 422) требует определенной структуры данных, то есть начальных битов, стоповых битов, сигналов типа RTS (готовность к отправке), … эта необходимая структура данных реализована в последовательном драйвере Windows, и вы не могу переписать это. Вы можете настроить свои данные таким образом, чтобы были получены требуемые состояния контактов, но ваши данные всегда будут окутанный в структуре, которая требуется последовательным протоколом (старт / стоп биты, …), см. этот рисунок из https://en.wikipedia.org/wiki/RS-485 источник: 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

https://social.msdn.microsoft.com/Forums/vstudio/en-US/1751dafb-2fd5-48b8-8c16-08dd95d7db6d/writing-a-string-to-an-rs485-port-vs-2010-c? форум = vcgeneral

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]