This is topic Modbus TCP/IP in forum Редактор проекта TRACE MODE 6 / at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/32/t/000769.html

Posted by Андрей Мельников (Участник № / Member № 3046) on :
 
Добрый день,

Есть ли проблема по выдаче по Modbus TCP/IP на ADAM-6066 при записи “W_SingleCoil(5) – передать значение одного дискретного сигнала”? У нас используется Trace Mode версии 6.06.

С уважением,
Андрей Мельников
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Проблем быть не должно. Эта функция во встроенном драйвере не изменялась.
 
Posted by Андрей Мельников (Участник № / Member № 3046) on :
 
У нас в версии 6.06 на Output канале выходит ошибка,
а версии 6.08 работает нормально.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
У нас нет возможности анализировать конкретные проекты в старых релизах.
По кодам встроенного драйвера эта функция не модифицировалась.
Вы можете перехватить сетевой Modbus-трафик снифером и проследить различия прохождения соответствующих транзакций в разных релизах.
При этом Вы должны быть абсолютно уверены в идентичности проектных реализаций этой функции в проектах разных релизов.
 
Posted by Андрей Мельников (Участник № / Member № 3046) on :
 
Если в 6.08 всё работает, то Modbus трафик проходит. Для чего снифер?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Для того чтобы понять, почему в 6.06 та же Modbus-команда не проходит.
Сличите 2 перехвата и посмотрите, в чем разница.
У нас нет возможности анализировать Ваш проект релиза 6.06.
 
Posted by Андрей Мельников (Участник № / Member № 3046) on :
 
Спасибо за консультацию
 
Posted by TatFed (Участник № / Member № 6076) on :
 
Здравствуйте!
Хочу выполнить обмен данными между Trace Mode 6.09 и arduino uno по Мodbus rtu через СОМ порт. Предварительно написан скетч для ардуино, собрана схема с кнопкой, лампой и термометром и проверена связь arduino с компьютером. Далее сделан экран управления на Trace Mode с кнопкой, лампой и окошком с текстом для визуализации температуры. Для начала пытаюсь настроить обмен дискретными сигналами, чтобы по нажатию кнопки на схеме с arduino на экране управления загоралась лампа, а при нажатии кнопки на экране управления на схеме с arduino загорался светодиод. Настроила COM порт: -
- СОМ3
- Master
- 9600
- 0x1
- 8-1-n
- no
- 300
- 0
- 0
- 0
в узле RTM cоздала два канала НЕХ16 inp и out, в узле источники/приемники создала группу MODBUS и два компонента Rin_Byte(2)(для чтения дискретного сигнала) и W_Byte (для записи). Связала каналы узла RTM c компонентами MODBUS.
После запуска профайлера на микросхеме arduino мигает одна лампочка - значит какая-то связь есть, но при нажатии кнопок, обмена не происходит! Как понять в чем проблема? Может быть есть подобный пример проекта, где связывают arduino с TraceMode? Возможно неправильно выполняю настройку компонентов MODBUS (Rin_Byte(2): Номер порта-0х2; Адрес-0х0; Канал-0х4(здесь имею ввиду что читать нужно 4-й регистр); Тип протокола-ModBus; Направление-Input; Формат-Дискретный.)
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1. Об использовании в практике проектирования на Trace Mode 6 устройства arduino не встречались.

2. Функция Rin_Byte(2) реализует опрос не регистров, а битовых входов в объеме 8 битов (1 байт).
Адресация битов в массиве Slave начинается с 0 (по стандарту протокола Modbus). Начальный адрес запроса равен значению настройки "Канал".

3. Адрес 0 в протоколе Modbus является широковещательным. Modbus-Slave на такой запрос не отвечает. Modbus-Master на такой запрос не ожидает ответа.

4. Проконтролировать установление связи и трафик обмена можно с помощью любого перехватчика типа Portmon.
 
Posted by TatFed (Участник № / Member № 6076) on :
 
Здравствуйте! Спасибо за предыдущий ответ!
Установила связь Arduino Uno c Trace Mode через виртуальный COM-порт по протоколу Motbus RTU и настроила обмен дискретными данными вход/выход (кнопка/LED). Настройку выполнила следующим образом:
– в узле RTM_1 создала группу «Каналы», в которой создала два канала HEX16, один на вход (кнопка с микроконтроллера, которая зажигает лампу на экране скады), второй на выход (LED-лампа, которая загорается по нажатию кнопки на экране скады).
– в узле «Источники/Приемники» создала группу MODBUS, в котором создала два компонента: Rout_Word(3) для кнопки, сигнал Input, дискретный; W_word(6) для LED-лампы сигнал Output, дискретный;
– Связала каналы и компоненты «Источников/Приемников», а также каналы и аргументы экрана, запустила профайлер – все работает.
Но возникла сложность с сигналом типа float. Задача состоит в том, что я хочу посылать с экрана скады при помощи ползунка управляющий сигнал на Arduino Uno. Для контроля я отсылаю управляющий сигнал со скады и присылаю его обратно из Arduino (т.к. там нет возможности отладки). Настройку выполнила следующим образом:
– в узле RTM_1 в группе каналы создала два канала FLOAT (один типа output для посылки управляющего сигнала, второй типа input для приема (контроля) сигнала;
– в узле «Источники/Приемники» в группе MODBUS создала два компонента : Rout_Word(3) типа Input, аналоговый; W_word(6) типа Output, аналоговый;

– Связала каналы и компоненты.
При запуске профайлера по движению ползунка в выходном канале цифровое значение меняется, а во входном канале сначала отображается новое значение, но оно не соответствует истинному, а потом оно сбрасывается в «257». В ответной программе Arduino я сначала принимаю параметр типа float от TraceMode в 6, 7-ой регистры и присваиваю их в 0, 1-ый регистры для контроля параметра в TraceMode.
Правильно ли я выбираю компоненты «Источников/Приемников»? Может правильней использовать в «Источниках/Приемниках» компонент типа W_Float(16) для выдачи, и Rout_float(3) или Rin_float(4) для приема? При попытке использовать эти компоненты наблюдалось зависание Arduino. Напишите пожалуйста как правильно настроить все компоненты чтобы все работало или пришлите пример.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1. По стандарту Modbus HOLDING-регистры поддерживают функции записи (6, 16) и чтения (3).
Поэтому писать и читать Вы можете по одному адресу регистра.
Операцию "В ответной программе Arduino я сначала принимаю параметр типа float от TraceMode в 6, 7-ой регистры и присваиваю их в 0, 1-ый регистры для контроля параметра в TraceMode." ПРОВОДИТЬ НЕТ НЕОБХОДМОСТИ.

2. Действительно, если обрабатываемый параметр в контроллере размещается в двух регистрах и имеет стандартный формат FLOAT, Вам необходимо использовать в слое «Источники/Приемники» компонент типа W_Float(16) для выдачи и Rout_float(3) для приема по одному адресу регистра.
Надо только строго знать порядок передачи байтов 4-байтового числа (в этом нет единообразия). Если Вы сами писали программу для контроллера, Вы должны знать этот порядок.
Согласно нашей документации (см. раздел "Обмен по MODBUS")в релизе 6.09 для выбора порядка следования байтов нужно вручную создать текстовый файл modbus.set в папке узла. Файл содержит целое число от 0 до 3, указывающее следующий порядок байтов (байт 0 – младший байт мантиссы, байт 3 – байт знака и порядка):
i. 0 – 3-2-1-0 (данный порядок следования байтов соответствует ModSim32-Float(Swapped), устанавливается в отсутствие файла modbus.set);
ii. 1 – 0-1-2-3;
iii. 2 – 1-0-3-2 (данный порядок следования байтов соответствует ModSim32-FloatingPoint);
iv. 3 – 2-3-0-1.

Надо иметь в виду, что в актуальном релизе Trace Mode 6.10.2 используется более гибкий механизм настройки порядка байтов в Modbus. Поэтому при переходе на другой регистр Вам надо будет изменить эти настройки.
что при переходе на
 
Posted by Яна Бойцова (Участник № / Member № 6862) on :
 
вопрос по считыванию данных из modbus устройства.
Есть симулятор модбас тсп на 500 значений. Согласно видеоуроку по считыванию значений при помощи группового запроса создаю проект с 500 аргументами в канале типа ChGroupReq. Хочу проверить работоспособность проекта. На экране создаю пять ГЭ Текст и привязываю к ним каналы из модбас симулятора: 0 канал, 100, 200, 300, 400.
При запуске я вижу только 0 канал и 100 канал, остальные нули (хотя все они имеют ненулевые значения). Опытным путем установлено, что последний канал, который видно, это 116.
В чем может быть ошибка?
Симулятор использую, как в видеоуроке (win-tech - modsim)
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
По стандарту Modbus кадр запроса/ответа не может превышать размер 256 байтов. Исключив из кадра номер устройства, функцию и контрольную сумму, получим, что в ответе должно быть не более 252 байтов, т.е. 126 регистров.
Перепроверен максимальный групповой запрос в релизе 6.10.2 - ровно 126 аргументов типа UINT.
При большем количестве аргументов каналу выставляется признак недостоверности.
 
Posted by Яна Бойцова (Участник № / Member № 6862) on :
 
тогда получается, чтобы оперировать всеми 500 значениями из модбас устройства, необходимо создавать несколько Rin_Word(4) с указанием начального канала?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Именно так.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2