CODESYS форум

Добро пожаловать на официальный форум CODESYS
Deutsche Version English version russian version 
Текущее время: Чт июл 27, 2017 9:32 pm

Часовой пояс: UTC+01:00




Начать новую тему  Ответить на тему  [ 47 сообщений ]  На страницу 1 2 3 4 След.
Автор Сообщение
 Заголовок сообщения: Работа с COM портами CDS V2.3
СообщениеДобавлено: Пт дек 18, 2009 10:16 am 
Не в сети

Зарегистрирован: Вт сен 15, 2009 7:48 am
Сообщения: 47
По уже многочисленным просьбам трудящихся выкладываю ниже пример работы с COM- портом.

http://www.prolog-plc.ru/st/doc/RS232CDS.zip

************* Добавленно 11.01.2010 ******************

После тяжелых праздничных дней начнем отдых на работе с пояснения примера.
Сразу обмолвлюсь, опишем пример не тот, что был выложен ранее, который был написан давно и не мной, а создадим свой пример шаг за шагом, используя комплект 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


Последний раз редактировалось Mikhail Shvetsov Пн янв 11, 2010 2:32 pm, всего редактировалось 4 раза.

Вернуться к началу
 Заголовок сообщения: Продолжение просьб трудящихся :)
СообщениеДобавлено: Пн дек 28, 2009 6:59 am 
Не в сети

Зарегистрирован: Пн ноя 23, 2009 10:46 am
Сообщения: 0
Не получилось, хочется описания.
Тестировал на плате IPC@CHIP® DK55. Подключил RS-232 мышку к COM1, запустил RS232_Receiver.pro, но переменная не изменяется при нажатии кнопок на мышке.
Что я делаю не так?


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 28, 2009 9:05 am 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Пример рабочий. Простейший. Описывать там нечего при всем желании.
Тут может быть 100 причин. Например, мышка то питается откуда? Очевидно, питание ей на DTR подаете от внешнего источника (на плате DB54 его нет)?
Я обычно com порты проверяю путем соединения приемника с передатчиком, контакты 2 и 3. Что передал, то и принял.


Последний раз редактировалось Igor Petrov Пн дек 28, 2009 12:30 pm, всего редактировалось 1 раз.

Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 28, 2009 9:52 am 
Не в сети

Зарегистрирован: Пн ноя 23, 2009 10:46 am
Сообщения: 0
Спасибо! про питание я не подумал. Проверю, отпишусь.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 29, 2009 4:12 pm 
Не в сети

Зарегистрирован: Вт сен 15, 2009 7:48 am
Сообщения: 47
Наглядненько получается если подцепить ДК55 (ну или нечто другое) к компу, и послушать СОМ порт Гипертерминалом. COM-Sender выводит свое сообщение в окошко терминала.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 10, 2010 5:17 pm 
Не в сети

Зарегистрирован: Пн ноя 23, 2009 10:46 am
Сообщения: 0
Мда, ничего не получается...
Я вижу что программа должна работать, но не работает :cry:

Я и терминалом подключался и закорачивал контакты 2 и 3, ничего не получается. Может как то надо подправить стандартную конфигурацию DK55_Full_FP

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


Вложения:
scr.zip [250.6 КБ]
142 скачивания
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 11, 2010 7:01 am 
Не в сети

Зарегистрирован: Ср июн 20, 2007 12:10 pm
Сообщения: 31
Я так понял, что Вы соединили 2 программы (RS232_Receiver и RS232_Sender) из примера и, возможно, допустили ошибки. Исходные примеры не пробовали?
Для начала протестируйте запись в порт, это самая простая операция. Подключите нуль-модемный кабель (исправный! заранее проверьте) к порту, проверьте настройки терминала и запустите его. По идее должны получать данные с порта.
Кстати, в примере не проверяется правильность открытия порта (SysComOpen) и установки настроек порта (SysComSetSettings). Добавьте два if для проверки, может здесь глюк притаился...

Update:
Не сразу заметил, на скриншотах отладки хендл порта dwPortHandle равен 4294967295 или 16#FFFFFFFF, и это на 4 шаге выполнения программы. Т.е. порт не получилось открыть (в библиотеке SysComLib есть глобальная константа INVALID_HANDLE:DWORD:=16#FFFFFFFF;)


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 11, 2010 10:36 am 
Не в сети

Зарегистрирован: Пн ноя 23, 2009 10:46 am
Сообщения: 0
Для начала протестируйте запись в порт, это самая простая операция. Подключите нуль-модемный кабель (исправный! заранее проверьте) к порту, проверьте настройки терминала и запустите его.
Это было первое что я проверил.

Т.е. порт не получилось открыть
И как быть? что может причиной?
Для правильной работы библиотеки SysComLib требуется ли дополнительные доработки в IEC Platform Builder или на c++ в myrts

P.S.
В примере использовался эмулятор.

Я делал так:
1. Загрузил пример RS232_Sender,
2. поменял COM1 на COM2 (т.к. на первом по умолчанию в DK55 подключение к терминалу контроллера),
3. затем выбрал конфигурацию DK55_Full_FP,
4. затем настроил параметры подключения,
5. затем запустил на контроллере myrts.exe,
6. подключился гипертерминалом на COM2 (Шнурок проверял подключаясь к COM1 и поработав в терминале контроллера)
7. подключился из CoDeSys и запустил программу
Ничего....

Теперь я понял, что SysComLib не может открыть порт, но почему...


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 11, 2010 11:11 am 
Не в сети

Зарегистрирован: Ср июн 20, 2007 12:10 pm
Сообщения: 31
rrv писал(а):
Для правильной работы библиотеки SysComLib требуется ли дополнительные доработки в IEC Platform Builder или на c++ в myrts

Теперь я понял, что SysComLib не может открыть порт, но почему...

Здесь поможет только чтение документации на Ваш ПЛК по работе с портами (как включить, как настроить и т.д.) RTFM и удачи! :)


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 11, 2010 2:31 pm 
Не в сети

Зарегистрирован: Вт сен 15, 2009 7:48 am
Сообщения: 47
Добавил в заглавный пост некоторое описание.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 11, 2010 2:33 pm 
Не в сети

Зарегистрирован: Ср июн 20, 2007 12:10 pm
Сообщения: 31
За фотку DK55 на фоне 15-летнего вискаря зачёт!!! :P


Вернуться к началу
 Заголовок сообщения: Re: Работа с COM портами CDS V2.3
СообщениеДобавлено: Ср янв 13, 2010 7:48 pm 
Не в сети

Зарегистрирован: Пн ноя 23, 2009 10:46 am
Сообщения: 0
Mikhail Shvetsov писал(а):

Обратите внимание конкретно на плате DK55 используется порт, помеченный как Com1, в программе он же обзывается COM2.


Спасибо! Эта сторчка многое объясняет :D Первый пример заработал!

Но вот беда, на DK55 два COM порта, по аналогии для COM2 в программе требуется использовать название COM3, но не выходит... попытался COM4 (может COMn=>COM(2*n)) не вышло... где грабли?


Вернуться к началу
 Заголовок сообщения: Re: Работа с COM портами CDS V2.3
СообщениеДобавлено: Чт фев 11, 2010 7:32 am 
Не в сети

Зарегистрирован: Вт сен 15, 2009 7:48 am
Сообщения: 47
rrv писал(а):
Mikhail Shvetsov писал(а):

Обратите внимание конкретно на плате DK55 используется порт, помеченный как Com1, в программе он же обзывается COM2.


Спасибо! Эта сторчка многое объясняет :D Первый пример заработал!

Но вот беда, на DK55 два COM порта, по аналогии для COM2 в программе требуется использовать название COM3, но не выходит... попытался COM4 (может COMn=>COM(2*n)) не вышло... где грабли?


Тут не грабли а просто вилы в myrts.c . Надо расшаривать второй COM порт всекции:

RHISerPortTypes s_SerialPortTypes =
/* See for a detailed description the RHI Documentation !!! */

Позже выложу (если получится :) ) описание.


Вернуться к началу
 Заголовок сообщения: Re: Работа с COM портами CDS V2.3
СообщениеДобавлено: Сб фев 13, 2010 12:42 pm 
Не в сети

Зарегистрирован: Пн ноя 23, 2009 10:46 am
Сообщения: 0
Цитата:
Тут не грабли а просто вилы в myrts.c . Надо расшаривать второй COM порт всекции:

RHISerPortTypes s_SerialPortTypes =
/* See for a detailed description the RHI Documentation !!! */

Позже выложу (если получится :) ) описание.


Уже позже некуда, очень хочется описание. :cry:
Спасибо за труд! :D


Вернуться к началу
 Заголовок сообщения: Re: Работа с COM портами CDS V2.3
СообщениеДобавлено: Пн фев 15, 2010 11:04 am 
Не в сети

Зарегистрирован: Вт сен 15, 2009 7:48 am
Сообщения: 47
rrv писал(а):
Цитата:
Тут не грабли а просто вилы в myrts.c . Надо расшаривать второй COM порт всекции:

RHISerPortTypes s_SerialPortTypes =
/* See for a detailed description the RHI Documentation !!! */

Позже выложу (если получится :) ) описание.


Уже позже некуда, очень хочется описание. :cry:
Спасибо за труд! :D


По инструкции так:
Изображение


Каждая строка отвечает за соответвующий порт, которые надо поменять с RHI_SERPORT_NAV на RHI_SERPORT_COM

Последние строки поменть с RHI_SERPORT_SPI , RHI_SERPORT_I2C на RHI_SERPORT_NAV.

Но с первого скачка у меня не получилось. Может у Вас получиться.

Вот буду читать по совету на картинке RHI Documentation и трясти немецкий сапорт, которых в свою очередь "скорой помощью" не назовешь


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 47 сообщений ]  На страницу 1 2 3 4 След.

Часовой пояс: UTC+01:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB