Работа с COM портами CDS V2.3

Рассмотрим пошаговый пример работы с COM- портом, используя комплект DK55.

Подключим питание, Ethernet для связи с CoDeSys и соединим Com1 платы на Com1 компьютера (или на любой другой свободный порт) см Рис 1.

img1_4.jpg
Рис 1. Комплект DK55.

Создадим проект, как на рисунке 2.

img2_4.jpg
Рис 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).

img3_4.jpg
Рис 3. Проект в ОНЛАЙН

Передача пошла. Теперь не плохо бы увидеть эту передачу. Для этого воспользуемся HyperTerminal –ом с параметрами, соответствующими нашим передачам (рис 4).

img4_4.jpg
Рис 4. Параметры HyperTerminal.

После начала сеанса связи получаем картину как на рис 5.

img5_4.jpg
Рис 5. HyperTerminal на связи

Если мы вместо компьютера подключим другой комплект с тем же проектом, с одним отличием SysComWrite заменен на SysComRead, мы сможем прочитать строку на этом комплекте.

Замечание: Com-порт предназначенный для связи с CoDeSys в других целях использовать нельзя.

Как включить режим DMA, и вообще много полезного посмотреть можно тут:
http://www.beck-ipc.com/files/api/scxxx/config.htm

Загрузить файл проекта

Обсуждение на форуме