Рассмотрим пошаговый пример работы с COM- портом, используя комплект DK55.
Подключим питание, Ethernet для связи с CoDeSys и соединим Com1 платы на Com1 компьютера (или на любой другой свободный порт) см Рис 1.
Рис 1. Комплект DK55.
Создадим проект, как на рисунке 2.
Рис 2. Проект передачи по Com порту.
Эта программа передает через COM порт данные, которые мы будем слушать HiperTerminal-ом.
В третьей строке раздела переменных объявляем дескриптор порта, затем структуру параметров порта, которые мы заполним в блоке init. В пятой строке объявлен флаг состояния. Использовать его можно для отслеживания возвращаемых состояний функций.
Шестая и Седьмая строка – передаваемые данные. Для эксперимента можно воспользоваться архивом или строкой, в нашем случае строкой. Обращу внимание, в конце строки DK55 стоит пробел, для красоты отображения в дальнейшем. Всего строка содержит 5 символов по байту.
Восьмая строка, параметр dwTxBytes будет содержать количество переданных байт, нужен только для отображения процесса, как и флаг bSt. И последнее, Switch – ключ на запуск передачи.
В блоке Init заполняем структуру параметров Com порта.
Обратите внимание конкретно на плате DK55 используется порт, помеченный как Com1, в программе он же обзывается COM2. Подобное смещение наблюдается и на 61-х комплектах.
В блоке OpenPort открываем порт, получая дескриптор, и устанавливаем параметры передачи. Тут следует отметить, что дескриптор должен отличаться от 0xFFFFFFFF (правой клавишей мышки в области объявления переменных в режиме ОНЛАЙН можно выбирать отображаемый режим системы исчисления). Если возвращаемый дескриптор равен 0xFFFFFFFF, это означает, что произошла ошибка открытия порта, порт не открыт. Аналогично с флагом bSt. После установки параметров он должен быть TRUE, иначе произошла ошибка.
В блоке Write производим передачу циклически пока ключ Switch не перейдет в FALSE. А перейти в любое состояние он может в нашей программе только вручную.
При передачи данных в dwTxBytes записывается количество переданных байт.
После окончания циклов передачи данных, что определяет состояние Switch в блоке ClosePort мы обязательно должны закрыть порт. Иначе при следующей попытке его открыть возникнут проблемы. Это следует учитывать при ручной остановке программы с незакрытым портом. Последующее подключение к контроллеру и запуск даже измененной программы при попытке открыть порт выдаст ошибку.
Подключаемся и запускаем программу и в ручную устанавливаем Switch в положение TRUE (рис 3).
Рис 3. Проект в ОНЛАЙН
Передача пошла. Теперь не плохо бы увидеть эту передачу. Для этого воспользуемся HyperTerminal –ом с параметрами, соответствующими нашим передачам (рис 4).
Рис 4. Параметры HyperTerminal.
После начала сеанса связи получаем картину как на рис 5.
Рис 5. HyperTerminal на связи
Если мы вместо компьютера подключим другой комплект с тем же проектом, с одним отличием SysComWrite заменен на SysComRead, мы сможем прочитать строку на этом комплекте.
Замечание: Com-порт предназначенный для связи с CoDeSys в других целях использовать нельзя.
Как включить режим DMA, и вообще много полезного посмотреть можно тут:
http://www.beck-ipc.com/files/api/scxxx/config.htm