Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ОТКРЫТЫЕ ФОРУМЫ / OPEN FORUMS » TRACE MODE 6 бесплатная версия / TRACE MODE 6 Free version » Групповые запросы по Modbus

   
Автор / Author Тема / Topic: Групповые запросы по Modbus
merny
Active Forum Member / Активный участник форума
Участник № / Member № 2290


Icon 1 отправлено / posted      Профиль для / Profile for merny           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Проверка обмена между TRACE MODE и контроллером показали, что все работает "как надо" за исключением групповых запросов на запись (на чтение не проверял).
По подсказке использовался канал CALL.ChGroupReq и источник/приемник W_Word(6).
В узле была создана группа "каналы", в группе "каналы" создан компонент CALL. В редакторе канала указан тип вызова ChGroupReq, в разделе редактора Системные.Основные указан тип Output.
В разделе источники/приемники создана группа Modbus, в группе создан компонент W_Word(6). Настройки параметров Modbus аналогичные работоспособным примерам.
В программе ST добавлены 3 переменные USINT типа Out. Первой присваивалось значение одной из переменных программы (синусоида+10), две другие были равны синусоида+60 и синусоида+110 (три параллельные синусоиды).
В канале CALL.ChGroupReq созданы 3 аргумента USINT типа In/Out
Дополнительные переменные программы были привязаны к аргументам канала.
Для визуальной проверки были созданы 3 аргумента экрана типа In, которые были привязаны к аргументам канала CALL.ChGroupReq. Создан ГЭ Тренд, в котором созданы три кривые, отображающие значения аргументов экрана, привязанных к аргументам канала CALL.ChGroupReq.
Канал CALL.ChGroupReq привязан к источнику/приемнику W_Word(6).

Результаты: при запуске мрв ГЭ Тренд показывает 3 параллельные синусоиды, что означает, что аргументы канала CALL.ChGroupReq корректно отображают значения переменных ST программы. Но программа-монитор, отображающая значения Modbus регистров, показывает значения 0, кроме того регистра, значение которого управляется отдельным каналом. Там все отображается правильно. Т.е. групповой запрос на запись регистра не работает. В чем ошибка?

Сообщения / Posts 70 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
W_Word(6) и W_Word(16) это разные функции
"Запись по Modbus/TCP в HoldingRegisters" этот топик рядом.

[ 17.09.2020, 15:00: Сообщение отредактировал / Message edited by АдАстра. Техподдержка ]

Сообщения / Posts 695 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Групповая запись по Modbus по стандарту осуществляется функцией W_Word(16) .
Надо создать именно такой компонент в слое "Источники/Приемники" и привязать к нему канала CALL.ChGroupReq.

http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/001318.html

Сообщения / Posts 16045 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
merny
Active Forum Member / Активный участник форума
Участник № / Member № 2290


Icon 1 отправлено / posted      Профиль для / Profile for merny           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
переделал давно уже, только не мог на форум войти
удалил W_Word(6), создал W_Word(16) и привязал CALL заново. индивидуальная привязка работает, а групповая не работает.
4 синусоиды
одна отображает значение отдельного канала, ее значения видны и на тренде и в окне монитора регистров контроллера.
3 синусоиды аргументы канала CALL.ChGroupReq. на графике видны, монитор же показывает нули
может я с типом аргументов что-то не так сделал?

Сообщения / Posts 70 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Канал CALL.ChGroupReq в данном случае будет создаваться типа OUT.
В топике http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/001318.html указано, что для реализации записи надо в атрибут ВХОД этого канала подавать 1. Запись будет осуществляться однократно для каждой каждой поданной "1".

Сообщения / Posts 16045 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
merny
Active Forum Member / Активный участник форума
Участник № / Member № 2290


Icon 1 отправлено / posted      Профиль для / Profile for merny           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
quote:
Отправитель / Originally posted by AdAstra Technical Support:
Канал CALL.ChGroupReq в данном случае будет создаваться типа OUT.
В топике http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/001318.html указано, что для реализации записи надо в атрибут ВХОД этого канала подавать 1. Запись будет осуществляться однократно для каждой каждой поданной "1".

атрибут ВХОД это атрибут "Входное значение" с Id=2?
нужно подавать именно 1, или достаточно управлять только младшим битом?
сойдет как вариант автоматического управления: создание переменной в ST программе и регулярная запись в нее 1 с привязкой переменной к "входному значению"? или лучше воспользоваться функцией setAttributeI(UDINT ch_id, UINT attr_id, DINT value)

Сообщения / Posts 70 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
merny
Active Forum Member / Активный участник форума
Участник № / Member № 2290


Icon 1 отправлено / posted      Профиль для / Profile for merny           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
quote:
Отправитель / Originally posted by AdAstra Technical Support:
Канал CALL.ChGroupReq в данном случае будет создаваться типа OUT.
В топике http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/001318.html указано, что для реализации записи надо в атрибут ВХОД этого канала подавать 1. Запись будет осуществляться однократно для каждой каждой поданной "1".

все заработало, спасибо
Сообщения / Posts 70 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Yurik. N.
Forum Member / Участник форума
Участник № / Member № 3294


Icon 1 отправлено / posted      Профиль для / Profile for Yurik. N.           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Добрый день!
Просьба, по возможности, прислать пример групповой записи по протоколу modbus на адрес: xxx@yyy.ru
Заранее большое спасибо!

[ 15.08.2014, 15:31: Сообщение отредактировал / Message edited by AdAstra Technical Support ]

Сообщения / Posts 35 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Пример отослан.
Сообщения / Posts 16045 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Berdiugin
Junior Member / Новичок
Участник № / Member № 8483


Icon 1 отправлено / posted      Профиль для / Profile for Berdiugin           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравствуйте. Прошу выслать пример группового чтения и записи по протоколу Modbus. Адрес электронной почты: xxx@yyy Заранее спасибо.

[ 15.09.2020, 11:46: Сообщение отредактировал / Message edited by АдАстра. Техподдержка ]

Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Пример отослан.
Сообщения / Posts 16045 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Berdiugin
Junior Member / Новичок
Участник № / Member № 8483


Icon 1 отправлено / posted      Профиль для / Profile for Berdiugin           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравствуйте. Стоит задача записывать и отображать аварийные и предупредительные уставки. Запись осуществляется из нескольких мест: 1. ПК с МРВ Trace mode) и 2. Панели оператора на шкафах управления. Переменных достаточно много тип Float, в памяти ПЛК они лежат последовательно. Было принято решение использовать возможность групповой записи с применением канала CALL ChGroupReq. В слое источники приемники была создана группа Modbus. Был добавлен канал W_Float(16) тип output, Аналог. Был оздан канал CALL ChGroupReq тип output и привязан к каналу W_Float(16). Далее были созданы аргументы канала CALL тип IN. По количеству аргументов канала CALL были созданы каналы Float типа IN. Аргументы канала CALL были привязаны к каналам Float реальное значение. Создал аргументы экрана тип IN и привязал их к входному значению каналов Float. Создал на экране элемент «Текст» с него ввожу данные. Если ввести данные и в атрибут 39 канала CALL подать 1, то произойдет запись требуемых переменных. В начальный момент времени каналы Float имеют нулевые значения, поэтому в начальный момент времени приравниваю их к считанным с ПЛК значениям переменных. Возникли следующие сложности:
1.Не удается организовать корректную запись в регистр ПЛК данных с двух источников. Мне нужно отслеживать текущее значение переменной в ПЛК и в случае его изменения с панели перезаписывать во входное значение канала Float, а в случае изменения оператором этого значения тоже менять входное значение канала Float. Данная операция требуется в любом проекте. Есть ли так называемое заводское решение, как это делать предполагалось производителем. Пытаюсь решить вопрос созданием программы, но, мне кажется, что я полез в дебри, и решение гораздо проще.
2. После ввода в поле текст значения я нажимаю кнопку «Готово». Можно ли отследить момент нажатия этой кнопки?

Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вы правы, во множестве проектов возникает необходимость управления одним регистром из нескольких мест.

Однако, при попытке записи в один приемник информации из двух источников, всегда приводит к состязательности. Обычно, решается в пользу последней пришедшей информации (т.к. она затирает более раннюю информацию).

Рекомендуется эту задачу решать созданием последовательной цепочки. ПК с МРВ передается и получает данные с Панели Оператора из шкафа, Панель же передает и получает данные от ПЛК.

В этом случае избавляемся от состязательности и увеличиваем надежность системы.

1. Одним источником считываем информацию с ПЛК, другим - записываем. Рекомендуется написать программу в среде TRACE MODE, которая при заданных условиях будет обновлять значения аргументов канала Call ChGroupReq (на запись в ПЛК).

2. если аргумент экрана связан с числовым каналом, то по атрибуту 45,Т Время изменения.

Сообщения / Posts 16045 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Berdiugin
Junior Member / Новичок
Участник № / Member № 8483


Icon 1 отправлено / posted      Профиль для / Profile for Berdiugin           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Спасибо за ответ.
1. При выходе из строя панели оператора мы лишимся всех устройств управления, что явно не повысит надежность
2. Таких панелей оператора у меня 3, что при вашем подходе усложнит жизнь. Конфликта между панелями оператора у меня не возникает, поэтому у меня сложилось мнение что данный вопрос в TRACE MODE должен решаться сам собой.

Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
1. В АСУ ТП разделяют средний уровень АСУТП (Шкафы управления) и верхний (Автоматизированное Рабочее Место Оператора).

В надежной системе задачи и функции одного уровня не дублируются другим уровнем. Каждый выполняет свою задачу. При том, при возникновении проблем на одном уровне, все связанные с ним нижестоящие устройства должны продолжать выполнять свою задачу. Например, при выходе из строя АРМ в Операторской, Шкаф управления должен продолжать управлять устройствами. С другой стороны, если Шкаф Управления вышел из строя, то, при наличии, должен включится резерв Шкафа Управления.

2. Правильно разработанная АСУ упрощает жизнь Оператору. Конфликта между Панелями не возникло, так как они располагаются на одном уровне АСУТП. Достаточно добавить верхний уровень, который будет общаться с этими Панелями и задача решена.

Однако, если Вы настроены на "дублирование" функции Шкафа Управления, то Вы можете одним источником считывать данные с устройства, другим записывать, а самостоятельно разработанной программой что и когда делать с полученными данными.
Чтение происходит с заданным периодом.
Запись в момент изменения атрибута Входное Значение.

Сообщения / Posts 16045 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Berdiugin
Junior Member / Новичок
Участник № / Member № 8483


Icon 1 отправлено / posted      Профиль для / Profile for Berdiugin           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
И если можно, еще один вопрос на эту тему. На форуме есть следующий пост "Если "ChGroupReq с параметром 0 направлением Output", то он будет отрабатывать только по принудительной команде, например, через передачу "1" в атрибут 39 (EXEC).
Можно компонент W_Word(16)#3 задать с напривлением INPUT и соответствующий "ChGroupReq с параметром 0 направлением INPUT".
Такой канал будет передавать любые изменения значений его аргументов."
У меня работает групповая запись сразу всех аргументов ChGroupReq через передачу "1" в атрибут 39 (EXEC), но если я меняю направление на INPUT у W_Float(16) и у ChGroupReq данные записать не удается. Хотелось бы выполнять запись только измененного аргумента.

Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вы всегда можете задать интересующий Вас вопрос.

Для групповой записи по изменению одного аргумента необходимо использовать modbus-функцию 16. В настройках источника направление изменить с output на input. Аналогично в настройках канала Call.ChGroupReq. Типы аргументов канала Call.ChGroupReq установить в соответствии с типом данных в устройстве.
(Справочная Система - Каналы и Системные переменные - Каналы класса Call - Канал класса Call.ChGroupReq - Привязка источника MODBUS чтения или записи)

Сообщения / Posts 16045 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Berdiugin
Junior Member / Новичок
Участник № / Member № 8483


Icon 1 отправлено / posted      Профиль для / Profile for Berdiugin           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Сделал согласно вашей подсказки. Имею следующее: При запуске профайлера на служебной панели МРВ в атрибуте №124 ArgSize канала Call.ChGroupReq есть все мои аргументы, причем они имеют значения которые я ввожу, но в ПЛК данные не передаются. Запись выделенного аргумента в ПЛК происходит только если я вручную нажму на кнопку с тремя точками на служебной панели МРВ. Как сделать чтобы запись происходила автоматически?
Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Пришлите на адрес Службы технической Поддержки Ваш проект.

Описанных инструкций должно быть достаточно.

Сообщения / Posts 16045 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
У аргументов канала Call.ChGroupReq (канал с привязкой к источнику W_Float(16)) есть привязки к числовым каналам. Это мешает штатной работе.

Рекомендуется значения из числовых каналов передавать в аргументы канала Call.ChGroupReq с помощью канала Call.Move.

Сообщения / Posts 16045 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us

Rambler's Top100 Rambler's Top100



Powered by Infopop Corporation
UBB.classic™ 6.7.2