CODESYS форум

Добро пожаловать на официальный форум CODESYS
Deutsche Version English version russian version 
Текущее время: Вс май 28, 2017 7:33 pm

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




Начать новую тему  Ответить на тему  [ 6 сообщений ] 
Автор Сообщение
 Заголовок сообщения: BECK@IPC ModBus Master CDS V2.3
СообщениеДобавлено: Ср мар 24, 2010 4:26 pm 
Не в сети

Зарегистрирован: Вт сен 15, 2009 7:48 am
Сообщения: 47
Что будет если скрестить слона и кенгуру? – Большие ямы по всей Австралии.

Добрый день, господа форумчани и гости нашего форума :)

Нечто подобное шутке мы будем реализовывать в сегодняшнем примере.
Стоит задача получить на базе BECK@IPC ModBus master. Slave получается несколько сложнее, посему только укажем возможный путь на решение этой задачи.

ModBus на пользовательском уровне в BECK чипах к сожалению не потдерживается. Производителем предлагается строить ModBus устройства либо на Си (примеры выложены на http://www.beck-ipc.com), либо воспользоваться библиотеками CoDeSys MODBUS library.

Тут самое время вспомнить о российском производителе контроллеров OWEN, который не только говорит на CoDeSys но и совершенно бесплатно предлагает свою собственную библиотеку ModBus.lib для создания ModBus master. Эта библиотека базируется на элементах стандартных библиотек CoDeSys, что оставляет надежду использования ее для других контролеров, разговаривающих на CoDeSys и имеющих рабочие COM порты, потому как, именно через COM порты в этой библиотеке реализуется ModBus master.

Попробуем скрестить эти инструменты. Для этого нам понадобиться готовое Slave устройство. Я его сделаю из уже имеющегося ПЛК 100. Бегло ознакомиться с предыдущим примером viewtopic.php?t=888 и заострим внимание на том, как создать Slave устройство на Owen.

После этого создать Slave через RS-232 на Owen с двумя регистрами типа word. Один регистр инкрементировать с помощью параметров задачи раз в секунду (для удобства наблюдения Рис 1).

Изображение
Рис 1.

Для создания Master на BECK нам потребуется сама библиотека от OWEN ModBus.lib (ссылки на библиотеки и документацию в конце статьи) и библиотеки на которых она базируется Analyzation.lib, ComService.lib, SysLibCom.lib (стандартная).

Стратегия будет состоять в том, что мы создадим проект и включим в него вышеперечисленные библиотеки, откроем COM порт на BECK и с помощью блоков из ModBus.lib будем читать и писать в Slave устройство.

Полезно будет вспомнить пример работы с COM портом viewtopic.php?t=874&start=0 . И создать аналогичный проект, оставив пустым блок Write. Параметры COM порта следует указать аналогичным Slave (рис 1.).

Не буду расписывать создание каждого блока, ИМХО, все будет и так понятно, а приведу сразу раздел переменных и весь проект на рис 2.:

Код:
PROGRAM PLC_PRG
VAR
   (********** Для COM порта ***************)
   dwHandle: DWORD:= INVALID_HANDLE;
   Settings: _;
   bSt: BOOL;
   (********************************************)

   Switch: BOOL;      (*Ключь на старт*)
   x:WORD;       (*переменная для полученных данных*)
   y:INT;         (*переменная для посылки*)

   get1_modbus: MB_RD_HOLD_REGS;    (*функция 03 - чтение параметра типа INT*)
   send1_modbus:MB_WR_SNG_REG; (*функция 06 - запись параметра*)

       cmpl: BOOL;         (*Признак завершение работы ModBus блока*)
   err: INT;         (*номер ошибки*)
   DataSize: WOR         (*кол-во считанных байтов *)
   Buffer: ARRAY[0..255] OF BYTE;      (* байтовый буфер данных *)
   enbl:BOOL:=TRUE;         (*Разрешение блоков чтения и записи в модбас*)

END_VAR


Изображение
Рис 2.

Для выполнения различных функций ModBus в библиотеке ModBus.lib существуют отдельные функции и функциональные блоки. Ознакомиться со всеми можно в прилагаемой к библиотеке документации.

В этом примере мы используем всего два функциональных блока – чтение регистра (ModBus функция 03) и запись регистра (ModBus функция 06).

Для этого в разделе переменных созданы экземпляры этих блоков:
get1_modbus: MB_RD_HOLD_REGS; (*функция 03 - чтение параметра типа INT*)
send1_modbus:MB_WR_SNG_REG; (*функция 06 - запись параметра*)

Следует заметить, что на сайте www.owen.ru есть примеры работы с ModBus. Именно оттуда перекочевали некоторые строчки этого примера, и название переменных были взяты также оттуда.

Если сравнивать примеры Owen можно заметить, что в случае с BECK в блоках Read и Write в параметр ComHandle передается указатель на открытый порт (указатель получаем блоком выше) в отличии от OWEN, где указывается номер открытого порта.

Блок считывания Read выполняем до тех пор, пока признак завершения операции cmpl не станет True. Как только cmpl станет TRUE, архив Buffer будет содержать кадр (пакет) данных ModBus.

Путем исследования этого пакета я увидел, что два байта нулевого регистра Slave устройства попадают в 3- старший,4- младший байт архива Buffer (архив начинается с 0).

В следующем блоке основной программы Pause соберем два байта Буфера в переменную X. И приготовим переменную Y к передаче.(Безусловно более грамотно процесс сборки X разместить во входном одноразовом действии блока, но и без этого окна не лезут в скриншот)

Для более удобного наблюдения за поведением переменных я поставил необязательную паузу в полсекунды на этом блоке и в пустом блоке Pause2.

В блоке Write передаем переменную Y во второй регистр Slave устройства. Признаком конца передачи будет тот же флаг cmpl.

После полусекундной паузы по циклу повторим все с чтения те с блока Read.

Запускаем проект, и наблюдаем, что происходит с параметрами в Slave устройстве и с переменными в BECK (Рис 3.).

Изображение
Рис 3.

Из Рис 3. видно , что переменная X 168 ms назад считалась из Owen Slave устройства. За время паузы 500ms блок Pause насчитал какое-то значение Y и следующий блок Write передает это значение в параметр V2 Slave устройства. Работает!

Для Slave на BECK библиотеку Owen к сожалению не написал. Но можно воспользоваться подходом Owen и написать собственные «низкоуровневые» функции для работы по протоколу ModBus через RS-232 используя стандартные библиотеки CoDeSys. Код также можно подсмотреть в реализации ModBus.lib – библиотека не защищена паролями и для просмотра ее кода с богатыми русскими комментариями достаточно снять ограничения на доступ в свойствах функций и функциональных блоках.

Как видим скрещивание продуктов немецкой и русской интеллектуальной собственности вполне жизнеспособно. А все благодаря чему? Правильно, благодаря CoDeSys :)

************************ ССЫЛКИ *************************
1) Библиотеки, примеры (для овен естественно) и документацию на русском языке к этим библиотекам вы можете скачать с сайта OWEN www.owen.ru (прямая ссылка на архив (168M) ftp://78.107.137.186/CD/Disc_PLC1xx_8.11.zip)

2) Ссылка ТОЛЬКО на библиотеки, использовавшиеся в примере: http://www.prolog-plc.ru/st/doc/ModBusLib.rar

3) Проект из примера для Owen Slave : http://www.prolog-plc.ru/st/doc/O100ModbusSlave.pro

4) Проект из примера для BECK@IPC (DK55) : http://www.prolog-plc.ru/st/doc/COM_MODBUS_DK55_SFC.pro


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 25, 2010 4:21 am 
Не в сети

Зарегистрирован: Ср ноя 11, 2009 3:31 pm
Сообщения: 14
Спасибо за информацию!
А вы не в курсе, для протокола Овен есть аналогичная библиотека? А то я работаю с Beck'а с их устройствами , а на них только протокол Овен. Сам то я вроде написал ФБ для работы с протоколом, но хотелось бы "хозяйское" решение :)


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 25, 2010 4:27 pm 
Не в сети

Зарегистрирован: Вт сен 15, 2009 7:48 am
Сообщения: 47
Aleksey Pshikov писал(а):
Спасибо за информацию!
А вы не в курсе, для протокола Овен есть аналогичная библиотека? А то я работаю с Beck'а с их устройствами , а на них только протокол Овен. Сам то я вроде написал ФБ для работы с протоколом, но хотелось бы "хозяйское" решение :)


Такая библиотека есть OwenNet.lib. Она также как и ModBus.lib построена на стандартных библиотеках CoDeSys. Я думаю с ней можно поступить аналогичным образом:)


Вернуться к началу
 Заголовок сообщения: Re: BECK@IPC ModBus Master CDS V2.3
СообщениеДобавлено: Вт май 24, 2011 12:59 pm 
Не в сети

Зарегистрирован: Пн май 23, 2011 7:23 am
Сообщения: 0
Здравствуйте.
Использую библиотеку modbus. Версия codesys 2.3.9.26. Возникли следующие вопросы:
1) Куда в буфер записывается ответ от устройства slave? Такое ощущение что при каждом запуске запись происходит рандомом. На третьем скрине видно что запись произошла в buffer[24]..buffer[29], причем в каждом следующем цикле происходит сдвиг.
2) Видно что ответ принимается, но почему то функция показывает ошибку таймаута (второй скрин). В чем может быть проблема?

Прилагаю скрин программы (первый скрин).

Заранее спасибо за помощь.


Вложения:
Прога.JPG
Прога.JPG [ 179.66 КБ | 1979 просмотров ]
Таймаут.JPG
Таймаут.JPG [ 155.17 КБ | 1979 просмотров ]
Посылка.JPG
Посылка.JPG [ 184.65 КБ | 1979 просмотров ]
Вернуться к началу
 Заголовок сообщения: Re: BECK@IPC ModBus Master CDS V2.3
СообщениеДобавлено: Вт май 31, 2011 2:08 pm 
Не в сети

Зарегистрирован: Вт сен 15, 2009 7:48 am
Сообщения: 47
Библиотека ОВЕНовская. Лучше спросить у них.


Вернуться к началу
 Заголовок сообщения: Re: BECK@IPC ModBus Master CDS V2.3
СообщениеДобавлено: Ср июн 08, 2011 11:44 am 
Не в сети

Зарегистрирован: Пн май 23, 2011 7:23 am
Сообщения: 0
Спрашивал, помочь не смогли :(
Пришлось писать свою.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 6 сообщений ] 

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


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

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


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

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