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

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 6 » Общие вопросы / Common questions » Обмен по ModbusRTU

   
Автор / Author Тема / Topic: Обмен по ModbusRTU
Алексей Шелепов
Forum Member / Участник форума
Участник № / Member № 6361


Icon 1 отправлено / posted      Профиль для / Profile for Алексей Шелепов           Редактировать/удалить сообщение / Edit/Delete Post 
Здравствуйте!
В сети по Modbus RTU несколько двухканальных весоизмерительных приборов.
Активен только один канал каждого прибора. Написана программа, которая при помощи блока IMP поочередно записывет в прибор номер активного канала (код АЦП) и считывает текущий вес с задержкой его в аргументе блоком DEL.
Минус всего этого, что в процессе работы происходит перескок отображаемого веса из первого канала во второй и наооборот.
Вопрос: возможно ли организовать последовательный опрос каналов в приборе, т.е. записали номер АЦП - считали вес - по флагу окончания чтения к следующему каналу, затем следующий прибор?

Сообщения / Posts 49 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Алексей Шелепов
Forum Member / Участник форума
Участник № / Member № 6361


Icon 1 отправлено / posted      Профиль для / Profile for Алексей Шелепов           Редактировать/удалить сообщение / Edit/Delete Post 
Уважаемая техподдержка!
Ответьте,пожалуйста, на вопрос, т.к. мы находимся на стадии сдачи объекта и время играет не на нас!

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


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Надо писать пользовательскую программу, которая будет контролировать исполнение команд чтения и записи и реализовывать нужную последовательность.
Учитывая асинхронность потока Modbus RTU по отношению к основному циклу пересчета базы каналов, надо контролировать именно факт исполнения запроса и команды.
Для контроля исполнения запроса можно задать этому каналу цикл "Однократно" и запускать его сбросом атрибута 3 (СОСТОЯНИЕ). После получения корректного ответа канал будет автоматически выключен. Контролируя атрибут 3 можно установить факт завершения запроса.
Контроль команды, исполняемой каналом OUT, необходимо считать из устройства реальный номер его активного канала.

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


Icon 1 отправлено / posted      Профиль для / Profile for Алексей Шелепов           Редактировать/удалить сообщение / Edit/Delete Post 
Спасибо, все получилось. Но есть еще вопрос: если канал не получил ответ как можно определить ошибку запроса, чтобы продолжить последовательность выполнения программы?
Сообщения / Posts 49 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Если канал не получил ответ, ему выставляется признак аппаратной недостоверности (атрибут 4, I).

Конкретный код ошибки можно получить через диагностическую переменную @e_MODBUS.
После использования этой информации с помощью канала, связанного с аналогичной переменной типа OUT, результат диагностики надо сбрасывать.

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


Icon 1 отправлено / posted      Профиль для / Profile for Алексей Шелепов           Редактировать/удалить сообщение / Edit/Delete Post 
Здравствуйте! Вопрос по поводу "Однократного" запроса канала. Возможно ли таким образом запускать
канал HEX32? Атрибут 3(СОСТОЯНИЕ) у него все время 0. Если не возможно, то подскажите как считать по запросу число в формате UDINT.

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


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
В стандарте Modbus нет команд для считывания чисел формата UDINT.
Надо либо считывать отдельно 2 слова в 2 канала, а затем в программе формировать из этих слов число формата UDINT, либо использовать канал ChGroupReq с подключением к переменной R_FIFO_Queue (см. описание канала ChGroupReq).

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


Icon 1 отправлено / posted      Профиль для / Profile for Алексей Шелепов           Редактировать/удалить сообщение / Edit/Delete Post 
Спасибо за ответ. Именно так программа и работает: из двух слов с Modbus'а формируется слово UDINT. В дальнейшем UDINT необходимо ПО ЗАПРОСУ записывать в два разных канала HEX32.
Сообщения / Posts 49 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Непонятно, почему результат надо записывать в 2 разных канала.
И чем "запрос на запись в канал HEX32@ отличается от запроса по Modbus?

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


Icon 1 отправлено / posted      Профиль для / Profile for Алексей Шелепов           Редактировать/удалить сообщение / Edit/Delete Post 
В сообщении от 21.06 этого топика я описывал ситуацию:"В сети по Modbus RTU несколько двухканальных весоизмерительных приборов.
Активен только один канал каждого прибора". Так вот, по Вашей подсказке,написана программа последовательных запросов:
1.Записывается в прибор номер активного канала W_WORD(16);
2.Проверяется корректность записи, чтением номера кан. и сравнением в программе;
3.Производиться чтение веса (тип данных float)активного канала "однократным" запросом путем сброса атр.3 первого канала Float.
4.Контролируя атр.3 канала Float переходим к обработке 2 канала прибора и запись во второй канал Float.
Теперь появилась необходимость считывать другой параметр прибора - код нуля. Также из активного канала. Его формат UDINT. Считывается он двумя W_WORD и складывается программно в дв. слово. Далее по вышеизложенному алгоритму нужно это дв. слово записать по запросу в первый HEX32(акт. 1 канал), а затем во второй (акт. 2 канал).

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


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

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


Icon 1 отправлено / posted      Профиль для / Profile for Алексей Шелепов           Редактировать/удалить сообщение / Edit/Delete Post 
Уже хорошо что понятно. Теперь дальше. Канал HEX32 как канал Float "однократно" не работает. Объясните
последовательно и логично как считать данные UDINT по запросу.

Сообщения / Posts 49 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Алексей Шелепов
Forum Member / Участник форума
Участник № / Member № 6361


Icon 1 отправлено / posted      Профиль для / Profile for Алексей Шелепов           Редактировать/удалить сообщение / Edit/Delete Post 
Спасибо за понимание и логичность. Отвечать не надо. Реализовали программно.
Сообщения / Posts 49 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Считывать Modbus-слова надо каналами HEX16, а вычисленный результат записывать в каналы HEX32.

Учитывая необходимость строго одновременного считывания двух слов одного UDINT-числа, связка из двух каналов, запрашивающих с периодом ОДНОКРАТНО, корректно функционировать не будет.

Возьмите 1 канал CALL.ChGroupReq с двумя аргументами UDINT и циклом обработки ОДНОКРАТНО.
Залинкуйте его на первый из двух считываемых регистров.
Тогда при каждом цикле опроса в двух аргументах канала CALL.ChGroupReq Вы получите 2 последовательных слова из необходимого UDINT-числа.
Обработайте эти аргументы программой и запишите в нужный канал HEX32.

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


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Еще 1 вариант.
Возьмите "Источник" Rin_Float(4) или Rout_Float(3) и залинкуйте его на канал HEX32 с периодом "Однократно". В канале будет 32-разрядное целое число.

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


Icon 1 отправлено / posted      Профиль для / Profile for Алексей Шелепов           Редактировать/удалить сообщение / Edit/Delete Post 
Здравствуйте!
С чтением переменной по Modbus понятно, спасибо. Подскажите как аналогично производить запись переменной по запросу, контролировать исполнение
записи и в каком атрибуте считать ошибку записи.

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


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Запись Modbus-переменной осуществляется каналом OUT, который отрабатывает функцию записи только в том случае, когда его значение меняется (с экрана или программно).
Поэтому для записи не надо принимать никаких мер специальных мер, запись всегда производится однократно при изменении значения канала.
Контролировать исполнение команды записи следует по атрибуту 4 (Достоверность) канала связи с Modbus-переменной.

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


Icon 1 отправлено / posted      Профиль для / Profile for Алексей Шелепов           Редактировать/удалить сообщение / Edit/Delete Post 
Атрибут 4(достоверность) выставляется в случае ошибки запроса, а возможно ли считать окончание однократной записи?
Сообщения / Posts 49 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Атрибут 39 (EXEC) взводится в "1", когда канал начинает отрабатывать свою функцию и автоматически сбрасывается в "0", когда функция выполнена.
Сообщения / Posts 17075 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Алексей Шелепов
Forum Member / Участник форума
Участник № / Member № 6361


Icon 1 отправлено / posted      Профиль для / Profile for Алексей Шелепов           Редактировать/удалить сообщение / Edit/Delete Post 
Спасибо, реализовали.
Сообщения / Posts 49 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AVeshnik
Junior Member / Новичок
Участник № / Member № 6661


Icon 1 отправлено / posted      Профиль для / Profile for AVeshnik           Редактировать/удалить сообщение / Edit/Delete Post 
Здравствуйте! Есть такой вопрос: как проверять соединение прибора со скадой по модбас? Я пробовал параметр "Достоверность" компонента из "Каналы" присвоить аргументу под экраном, а потом этот аргумент перетаскивал объекту на экране. Потом задавал константу при которой истинно. По идее оно должно было менять цвет после исчезновения связи и потом при ее появлении. Но этого не происходит. Подскажите как сделать чтобы объект на экране сменял цвет при смене состояния связи. Спасибо.
Сообщения / Posts 4 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


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

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

Послать новую тему / Post New Topic  
Тема закрыта / Topic Closed  Тема закрыта / Topic Closed
Открыть тему / Open 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



Powered by Infopop Corporation
UBB.classic™ 6.7.2