PDA

Просмотр полной версии : Два вопроса кас. программирования ПЛК304



Грушецкий Павел
07.12.2011, 21:27
Здравствуйте! Столкнулся с двумя проблемами при программировании ПЛК304. Хотелось бы получить некоторую помощь в их решении.

№1: пытаюсь организовать обмен между ПЛК и модулями расширения входов/выходов (9 штук) через порт RS485 по протоколу Modbus RTU; на основании доступных примеров написал программу на SFC, в которой начальный шаг - открытие порта; каждый из последующих шагов - считывание/запись состояния входов/выходов отдельного модуля; условие перехода к следующему шагу, т.е. к опросу следующего модуля, - флаг завершения операции опроса (done) предыдущего модуля; опрос производится циклически с проверкой состояния порта в каждом цикле. С дискретными модулями проблем нет (вернее, те что были, решил) - обмен происходит нормально, а вот с модулями аналогового ввода - заминка. Дело в том, что при опросе модуля, у которого на одном из входов произошел обрыв датчика, флаг завершения опроса всех входов не устанавливается в TRUE, и как следствие, происходит зацикливание программы на данном шаге.

№2: этот же контроллер (ПЛК304) в качестве слейва соединяется у меня со SCADA Movicon 11.1 по Modbus TCP/IP. Связь сконфигурировал, связал - работает: передаются регистры и в одну и в другую сторону; а вот с передачей отдельно битовых сигналов - проблема. Интересует, возможно ли в ПЛК304 обращаться к отдельным битам в составе регистра, и как устроена адресация памяти в контроллере? В теххподдержке г. Харькова мне сказали, что по Ethernet вообще нельзя передавать отдельно биты, а только регистры, но у меня уже есть подобный рабочий проект (с той же SCADA, только на ПЛК110), в котором я с успехом организовал обращение и к битам, и к байтам, и к регистрам в памяти контроллера напрямую (без операций "распаковки" и "упаковки" регистров).

Заранее благодарю.

capzap
07.12.2011, 22:41
1 можно самому следить в программе за превышением таймаута и подавать разрешение на следующий шаг, не забывая оповестить о наличии ошибки

2 работа с битами по любому протоколу модбас имеет свои стандартные функции, у Вас либо эти функции не реализованы либо неправильные настройки в СКАДА-е

Грушецкий Павел
07.12.2011, 22:59
Кас. 2: стандартные функции discrete input и single coil (не уверен, что правильно назвал) в SCADA присутствуют и мною уже были использованы при соединении с ПЛК110; проблема в том, что обращаюсь к регистрам (при помощи соотв. функции) по адресам, указанным в CoDeSys, - читает/пишет, к битам в составе этих регистров по адресам, указанным в CoDeSys - не читает и не пишет. :(

capzap
07.12.2011, 23:05
вроде бы библиотека для modbusTCP относительно молодая для КДС3, может функции не реализованы, попробуйте другим модбас мастером опросить ПЛК

Грушецкий Павел
07.12.2011, 23:33
Спасибо! Обязательно попробую.

Грушецкий Павел
08.12.2011, 20:53
Решение нашлось, но не тем способом и не в том месте, где предполагалось :) . В подключаемой библиотеке OwenModulesLib закралась ошибка: в конце цикла опроса регистров второго канала (marker=1) производится возврат обратно к циклу опроса регистров первого канала (marker=0). По-этому прочитать значения регистров последующих каналов не получалось. Также есть ошибка по поводу установки в TRUE переменной done.
Поправил, пересохранил, перезалил - всё работает.
Скорее всего, ФБ модуля МВ110-8А делался по принципу Ctrl+C - Ctrl+V на основе ФБ модуля МВ110-224.2А (в этом модуле все работает отлично, и флаг done устанавливается, даже если на входах обнаружен обрыв датчика). Становится очевидным, что библиотека не тестировалась :(.

Библиотека была загружена с сайта ОВЕН. Прошу перепроверить и исправить. Такая неточность стоила мне недели поисков решения проблемы, а заказчику этого не объяснишь.

ISh
10.02.2012, 10:01
Подскажите, как грамотно организовать опрос модулей Мх110 с ПЛК304 - с лучшим быстродействием и обработкой исключительных ситуаций?

Разобрался как это в принципе делается воспользовавшись советом из этой темы - с использованием SFC .
Реализовал - "следить в программе за превышением таймаута и подавать разрешение на следующий шаг, не забывая оповестить о наличии ошибки". Какое время таймаута оптимально?
Как осуществить "проверку состояния порта в каждом цикле"? Какие еще моменты/ситуации нужно учесть?
Может вы могли бы выложить вашу реализацию?

Выкладываю проект для CoDeSys V3.4 SP2 Hotfix 1 - опрос модулей ввода 16ДН, 2АС (2 шт.); вывода 32Р; индикатора СМИ2 (с индикатором пока связь установить не удаётся, пробовал с помощью UniWrite и UniRead). Сейчас всё собрано на стенде - работает.
ФБ для работы с 32Р в ModulsOwenLib 3.4.0.8 нет - дописывал сам в части простого замыкания релюх.

Не очень понимаю, какова логика работы со входом Enabl ФБ модулей? Сейчас реализовал подключение к ним, как в примере на таймере TP со временем 50ms. По производительности - время опроса показывает для 16ДН, 32Р - 90ms, для 2АС - 180ms.

Проект: plc304_mx110_v002_120209.zip (http://narod.ru/disk/40249045001/plc304_mx110_v002_120209.zip.html)
Настройки СМИ2: SMI2_jpg.zip (http://narod.ru/disk/40139656001/SMI2_jpg.zip.html)

Евгений Сергеевич
24.02.2012, 11:24
to ISh
в другой теме вы уже узнавали на счет связи со СМи2 и там я Вам выложил пример Вы его видели?
http://www.owen.ru/forum/showthread.php?p=77198#post77198

опрос модулей: библиотека ModulsOwenLib, если какого-то модуля в ней нет то можно взять любой наиболее близкий и доделать его, библиотека открытая править можно. взять можно отсюда (http://www.owen.ru/forum/showthread.php?t=12081)
она идет вместе с инструкцией.

Вход Enable запускает работу модуля, т.е. инициирует опрос выбранного модуля 1 раз, реагирует на импульс. Для быстрого опроса нескольких модулей можно собрать вот такую схему (на рисунке).
Коды исключительных ситуаций блок выводит (у блока дискретного ввода нет исключительных ситуаций), ошибки связи блок так же выводит, так что дальнейшая обработка ложиться на Вас.