PDA

Просмотр полной версии : CODESYS V3.5. Настройка обмена с другими устройствами (Modbus, ОВЕН, OPC и др.)



Страницы : 1 2 3 4 [5] 6

Khedron
25.04.2023, 17:48
Делал опрос по разным протоколам, на одном порту, один RTU, другой не стандартный ( но на одной скорости 115200, четности и стоп битах, 8N1)
Проcто переключая 2 программы опроса через 300 ms, всё работало без ошибок. Опрос через биб-ки.
Иначе придётся открывать и закрывать порты, что будет очень медленно.
Согласен, если самим опрашивать всё из кода, то особых проблем нет.
А возможно ли сохранить настройку Мх110 с помощью встроенных средств Codesys и при этом переключать обмен в коде? Чтобы не пришлось самому вытаскивать из шаблона карты регистров и не прописывать обмен вручную.

Евгений Кислов
25.04.2023, 18:37
А возможно ли сохранить настройку Мх110 с помощью встроенных средств Codesys и при этом переключать обмен в коде?

Никаких адекватных способов сделать это нет.

Khedron
25.04.2023, 19:53
Никаких адекватных способов сделать это нет.
Спасибо, будем искать способы разнести по разным портам. Похоже без замены оборудования не обойтись.

Андрей Чернов
26.04.2023, 08:19
Здравствуйте. Подскажите пожалуйста. Есть проект на плк210 и СП3хх. Панель выступает в качестве мастера. Обмен настроен по TCP с помощью библиотеки OCL в виде массива word`ов. Есть ли возможность присвоить значения по-умолчанию для переменных?

Евгений Кислов
26.04.2023, 08:35
Здравствуйте. Подскажите пожалуйста. Есть проект на плк210 и СП3хх. Панель выступает в качестве мастера. Обмен настроен по TCP с помощью библиотеки OCL в виде массива word`ов. Есть ли возможность присвоить значения по-умолчанию для переменных?

Добрый день.
Вы можете при старте проекта однократно заполнить массив нужными вами значениями.

Карбофос
27.04.2023, 18:23
Здравствуйте.

Есть ли возможность исключить опрос одного из slave устройств по rs-485 по условию? Например, есть пять устройств и пять булевых переменных, пока переменная равна 1, соответствующее устройство опрашивается, пока 0 - не опрашивается.
Слейвы настроены через конфигурацию, устройства не Овен, Кодесис 3.5.17.3

Евгений Кислов
27.04.2023, 18:26
Здравствуйте.

Есть ли возможность исключить опрос одного из slave устройств по rs-485 по условию? Например, есть пять устройств и пять булевых переменных, пока переменная равна 1, соответствующее устройство опрашивается, пока 0 - не опрашивается.
Слейвы настроены через конфигурацию, устройства не Овен, Кодесис 3.5.17.3

Добрый день.
Да, это возможно.
https://www.owen.ru/forum/showthread.php?t=28167&p=304649&viewfull=1#post304649

Карбофос
27.04.2023, 18:30
О, здорово, спасибо!

Андрей Чернов
28.04.2023, 08:46
Добрый день.
Вы можете при старте проекта однократно заполнить массив нужными вами значениями.

Тогда вопрос, как отловить именно первый цикл, чтобы однократно записать?

Евгений Кислов
28.04.2023, 08:48
Тогда вопрос, как отловить именно первый цикл, чтобы однократно записать?

https://www.owen.ru/forum/showthread.php?t=28167&p=304642&viewfull=1#post304642

Андрей Чернов
28.04.2023, 08:49
Спасибо огромное! ;)

СергейНовосиб
28.04.2023, 09:10
Добрый день!

Веду опрос Меркурия 230. Данные читает, но почему то значение А+ отличается от экрана счетчика: в программе 35353,97, а на счетчике 43760,40. А-, R+ и R- совпадают полностью.
В чем дело. Использую библиотеку последнюю версию.

Евгений Кислов
28.04.2023, 10:32
Добрый день!

Веду опрос Меркурия 230. Данные читает, но почему то значение А+ отличается от экрана счетчика: в программе 35353,97, а на счетчике 43760,40. А-, R+ и R- совпадают полностью.
В чем дело. Использую библиотеку последнюю версию.

Добрый день.
Если опросить Меркурий с помощью Multi-Protocol OPC Server - то какое значение покажет он?

СергейНовосиб
28.04.2023, 10:37
А как опросить?
Какой запрос отправить на счетчик?

Евгений Кислов
28.04.2023, 10:40
А как опросить?
Какой запрос отправить на счетчик?

Там интерфейс интутивно понятен, как мне кажется.

67590

Если возникнут проблемы - обеспечьте удаленный доступ, поможем настроить.

СергейНовосиб
28.04.2023, 10:48
Все, подключился.
Т1+Т2+Т3+Т4 43760,40. Правильно.

Сразу не заметил: R- на счетчике 33,25 в программе 31,40.

Евгений Кислов
28.04.2023, 10:59
Все, подключился.
Т1+Т2+Т3+Т4 43760,40. Правильно.

Сразу не заметил: R- на счетчике 33,25 в программе 31,40.

Понял, а можете для всех энергий (А+, А-, R+, R-) указать значения, которые на дисплее счетчика и в программе?
Это поможет нам какой-то начальный анализ провести.

СергейНовосиб
28.04.2023, 11:07
Счетчик СПК
А+ 43760,40 35371,79
А- 56,10 56,10
R+ 19385.55 19385.55
R- 33.25 31.40

Как то так. Нагрузку не подключал пока. Питание подал на фазу А.

Евгений Кислов
28.04.2023, 11:11
Выложите еще скриншот, пожалуйста, на котором видно, какая версия библиотеки у вас добавлена в проекте.

СергейНовосиб
28.04.2023, 11:17
версия библиотеки

67593

Евгений Кислов
28.04.2023, 11:25
Использую библиотеку последнюю версию.

Последняя - это 3.5.14.9:
https://ftp.owen.ru/CoDeSys3/04_Library/05_3.5.11.5/02_Libraries/OwenVendorProtocols_v3.5.14.9.compiled-library

Проверьте - в ней эта проблема повторяется?

СергейНовосиб
28.04.2023, 11:32
Все, совпадает. в примере я посчитал, что последняя версия библиотеки :-(.

Khedron
06.05.2023, 11:35
Здравствуйте.
Работают ли сетевые переменные NVL в ПЛК 200-2?
Создаю чистый проект с сетевой переменной, в цикле только значение меняется, больше кода нет. Прописан порт, широковещательный адрес. На Овен не работает, переменная не отсылается и не принимается.
Ровно такой же код копирую в Codesys SimPLC, такие же настройки - работает.
Отслеживаю пакеты через Wireshark, Овен не выдаёт широковещательные пакеты вообще, а SimPLC отсылает.


Имя: PLC200
Тип: 4096
ID: 1628 0084
Версия: 3.5.17.31
Порядковый номер: 1
CODESYS V3.5 SP17 Patch 3 с сайта Овен
NetVarUdp V.3.5.17.0

Евгений Кислов
06.05.2023, 11:37
Здравствуйте.
Работают ли сетевые переменные NVL в ПЛК 200-2?
Создаю чистый проект с сетевой переменной, в цикле только значение меняется, больше кода нет. Прописан порт, широковещательный адрес. На Овен не работает, переменная не отсылается и не принимается.
Ровно такой же код копирую в Codesys SimPLC, такие же настройки - работает.
Отслеживаю пакеты через Wireshark, Овен не выдаёт широковещательные пакеты вообще, а SimPLC отсылает.


Имя: PLC200
Тип: 4096
ID: 1628 0084
Версия: 3.5.17.31
Порядковый номер: 1
CODESYS V3.5 SP17 Patch 3 с сайта Овен
NetVarUdp V.3.5.17.0


Добрый день.
Сетевые переменные на ПЛК200 работают.
Чтобы разобраться, что происходит именно у вас - выложите, пожалуйста, ваш проект и скриншоты настроек сетевых интерфейсов из web-конфигуратора.

Khedron
06.05.2023, 12:15
67745
67746
Проект без вложенных библиотек.
И еще вопрос: указано, что сетевая переменная максимум 255 байт. Это одна переменная в списке NVL (например массив) или весь блок NVL целиком?

Евгений Кислов
06.05.2023, 12:24
Выложите скриншоты настроек второго сетевого интерфейса.


И еще вопрос: указано, что сетевая переменная максимум 255 байт. Это одна переменная в списке NVL (например массив) или весь блок NVL целиком?

Одна переменная. Это информация из документации по CODESYS (https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_f_networkvariables.html) - но вообще, у меня обмен корректно работал и при передаче сетевых переменных большего размера.

Khedron
06.05.2023, 13:55
Скриншот второго интерфейса смогу сделать завтра на работе.
По памяти он вроде не сконфигурирован, IP 0.0.0.0, зона файрвола wan. Кабель в него не подключен. Кстати, не видел в настройках привязки сетевых переменных к конкретному интерфейсу, может из-за двух интерфейсов eth проблема? При том, что второй без настроек.


Одна переменная. Это информация из документации по CODESYS - но вообще, у меня обмен корректно работал и при передаче сетевых переменных большего размера.
Прочитал в той же документации (https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_dlg_properties_networkvariables.html), что установка галки "паковать переменные" может наложить то же ограничение. Полагаю, ограничение в 256 байт из-за того, что во время передачи пакет UDP может быть разбит на несколько частей и может произойти запись в переменную в еще не отправленную часть прямо во время передачи, что приведёт к порче данных и несоответствию контрольной суммы в лучшем случае.
Возможно, установка галки "отправлять по событию может сохранить данные, но неясно как контролировать конец передачи, чтобы узнать когда уже можно писать в переменную.

Евгений Кислов
06.05.2023, 14:45
но неясно как контролировать конец передачи, чтобы узнать когда уже можно писать в переменную.

Чтобы обеспечить консистентность данных - нужно отказаться от галочки Паковать переменные.


Кстати, не видел в настройках привязки сетевых переменных к конкретному интерфейсу, может из-за двух интерфейсов eth проблема?

При определенных настройках пакет с сетевыми переменными может отправляться через другой интерфейс (например, если на нем настроена та же подсеть, что и на первом интерфейсе). Если у вас на втором интерфейсе задан IP 0.0.0.0 - то такого быть не должно. Но я бы всё равно хотел сначала точно узнать, как именно у вас настроен второй интерфейс.

Khedron
07.05.2023, 09:59
Скриншот настроек интерфейса eth1 и сетевого экрана.
Подключился витой парой напрямую, ноутбук-плк. UDP пакетов в сеть Овен так и не выдает. Что интересно, по графику широковещательные пакеты с порта 1202 якобы отправляются.

Khedron
07.05.2023, 10:16
67756
Нашел причину. В настройках интерфейса eth0 поменял маску с /16 на /24 и всё заработало, пакеты пошли, обмен есть.
До этого никаких других проблем с сетью и обменом на этом ПЛК не было.

Pronto72
12.05.2023, 17:01
Добрый день. Понадобилось работать через преобразователь Modbus TCP - Modbus RTU. Не могу понять как в Modbus TCP поменять адрес узла.

Евгений Кислов
12.05.2023, 19:35
Добрый день. Понадобилось работать через преобразователь Modbus TCP - Modbus RTU. Не могу понять как в Modbus TCP поменять адрес узла.

Добрый день.
См. п. 4.13:
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Modbus_v3.1.pdf

Pronto72
15.05.2023, 07:45
Евгений Кислов, Большое Спасибо!

Денис Сухарев
16.05.2023, 10:34
Добрый день, уважаемые коллеги.

Есть проблема с опросом нового прибора ТРМ138, контроллером СПК107 с применением библиотеки OwenNET.

При опросе прибора блоком Get_Real прибор отвечает и все 8 каналов отвечают, на не подключенных каналах висит код ошибки 11 (обрыв), что нормально.
А на подключенных каналах, которые нормально отображаются на приборе висит код ошибки 49 и измеренное значение блок не отдаёт.
При этом SPY (шпион) блок LISTEN прекрасно данные пакеты принимает и выдаёт измеренные значения.

Самый главный вопрос, что значит этот код ошибки 49 ??? И откуда он берётся ???
Такого номера нет ни в перечне ошибок связи, ни в перечне ошибок прибора ТРМ138!

67845

Евгений Кислов
16.05.2023, 11:45
Добрый день.
Посмотрел исходники библиотеки.
Это ошибка SZE - "Размер поля данных не соответствует ожидаемому".

Денис Сухарев
18.05.2023, 10:33
Спасибо!
Очень похоже на правду.
Блок ожидает получить Float24, а реально от прибора передаётся обычный Float32.
Попробую покопать в этом направлении.

П.С. Желательно в описание библиотеки включить полный перечень кодов ошибок.

Евгений Кислов
18.05.2023, 10:36
Спасибо!
Очень похоже на правду.
Блок ожидает получить Float24, а реально от прибора передаётся обычный Float32.
Попробую покопать в этом направлении.

П.С. Желательно в описание библиотеки включить полный перечень кодов ошибок.

Спасибо за пожелание.
Уточните, пожалуйста, почему вам потребовалось опрашивать ТРМ138 по протоколу ОВЕН, а не по Modbus?

СергейНовосиб
19.05.2023, 07:07
Добрый день!
Год назад сделал проект на чтение мгновенных данных с тепловычислителя ТВ7 с помощью библиотеки OwenCommunication. Все работает.
Сейчас мне дали ТВ7 2017 года выпуска для технического учета тепла и с него надо читать данные.
Но вот не получается считать через эту библиотеку. Версия ПО в ТВ7 1,0. С помощью программы Modbus Poll считать данные температуры получилось.
Ошибка блока - TIME_OUT.

Евгений Кислов
19.05.2023, 07:15
Добрый день!
Год назад сделал проект на чтение мгновенных данных с тепловычислителя ТВ7 с помощью библиотеки OwenCommunication. Все работает.
Сейчас мне дали ТВ7 2017 года выпуска для технического учета тепла и с него надо читать данные.
Но вот не получается считать через эту библиотеку. Версия ПО в ТВ7 1,0. С помощью программы Modbus Poll считать данные температуры получилось.
Ошибка блока - TIME_OUT.

Добрый день.
Обеспечьте подключение по AeroAdmin - посмотрим, в чем дело.

СергейНовосиб
19.05.2023, 07:58
Спасибо за помощь.
В тестовом проекте переделали на опрос ТВ7 через средства стандартные CodeSys и все заработало.

Буду переделывать свой проект на это способ опроса.

Я вспомнил, почему я сделал опрос через библиотеку. Мне надо было опрашивать два устройства, находящихся на одной шине с разными коммуникационными настройками. И тогда все заработало и сейчас работает на объекте. Что в ТВ7, что в другом контроллере нельзя изменить параметры: стоп бит и контроль четности, изменить можно только скорость и адрес устройства.

Денис Сухарев
22.05.2023, 10:18
Добрый день.
Спасибо за подсказку, действительно дело было в формате сигнала. Изменил на (Float32 + time) и всё заработало.

Прибор СПК-107 внедряется в существующую систему опроса, где уже используется протокол Owen, по этому без вариантов.
СПК-107 должен сидеть на шине в роли шпиона (Spy), активный опрос реализуется в качестве запасного варианта.

Теперь возникла новая проблема, с подключением прибора СПК-107 в сеть Lan.
При подключении к роутеру RT-GE-5 прибор не определяется и не пингуется.
При этом роутер показывает активный линк порта и даже какой то объём обмена пакетами, но в таблице маршрутизации прибор не появляется. Не помогла даже жёсткая привязка МАК адреса к IP 192.168.0.10.
Опробованы и режим DHCP и статика с учётом подсети LAN роутера (шлюз 192.168.0.1).
При прямом подключении к компьютеру патчкордом crossover связь появляется, но не сразу после подключения кабеля, а после отключения и повторного включения соединения в системе на компьютере.
Прибор планируется подключить к облаку OwenCloud.
С чем могут быть связаны данные проблемы?

Евгений Кислов
22.05.2023, 10:38
Добрый день.


а после отключения и повторного включения соединения в системе на компьютере.

Что именно вы под этим подразумеваете? Можете показать скриншотами?

Мы не наблюдали подобных проблем, но что касается роутеров - RT-GE-5 мы не использовали.

Денис Сухарев
23.05.2023, 00:19
Спасибо, разобрался.
Дело было в настройках роутера.
Вопрос закрыт.

knoppix
24.05.2023, 16:43
Добрый день, возникла такая проблема, есть 30 устройств опрашиваемых через преобразователь МКОН (ПЛК - (MODBUS TCP) - МКОН - (MODBUS RTU) - полевые устройства), опрос идет через библиотеку OwenCommunication Library 3.5.11.6. Пока все устройства в сети проблем никаких нет, все опрашивается, пишется и читается, объем данных небольшой (4 HR), таймаут выставлен на 500мс, настройки таймингов в МКОН пробовал или по-умолчанию (задержка между пакетами - 5мс, время ожидания ответа 300мс) или увеличивал на порядок до 50мс и 3000мс. Скорость опроса по линии RTU 9600, 1STOP, Четность.

Суть проблемы, как только в линии одну из устройств перестает отвечать, падает вся линия, блок OCL.TCP_Client не показывает никаких ошибок, блок OCL.MB_TcpRequest выдает SLAVE_DEVICE_FAILURE. При этом в сниффере МКОН видно как идет опрос линии. Если вернуть выпавшее устройство в строй, то после переинициализации OCL.TCP_Client (сброс и установка xEnable) ошибка пропадает и опрос снова идет корректно. В каком направлении искать ошибку?

Евгений Кислов
24.05.2023, 17:18
Добрый день.


Суть проблемы, как только в линии одну из устройств перестает отвечать, падает вся линия, блок OCL.TCP_Client не показывает никаких ошибок, блок OCL.MB_TcpRequest выдает SLAVE_DEVICE_FAILURE. При этом в сниффере МКОН видно как идет опрос линии. Если вернуть выпавшее устройство в строй, то после переинициализации OCL.TCP_Client (сброс и установка xEnable) ошибка пропадает и опрос снова идет корректно. В каком направлении искать ошибку?

Выложите, пожалуйста, простейший проект с опросом двух слэйвов через МКОН, на котором я смогу воспроизвести проблему (чтобы при физическом отключении одного слэйва опрос второго прекращался).

СергейНовосиб
01.06.2023, 11:57
Добрый день!

Делаю опрос счетчика Энергомера СЕ301 R33 146JAZ. Проверял на двух счетчиках, один на столе, второй в действующем шкафу.
Взял пример опроса, загрузил в СПК1хх 3.5.14 и все работает. Данные читает.
Далее внедряю проверенные блоки проекта в существующий проект и получаю нестабильное чтение данных с чтением то нулевых значений то реальных, причем с интервалом от 3 до 7 циклов (цикл опроса пока 5сек, делал разные). Ошибок блок "OVP.Energomera_IEC" никаких не выдает. Из проекта удаляю ВСЁ и оставляю только опрос счетчика. Ситуация с опросом не изменилась. При этом почему то файл проекта практически не уменьшился.
Далее перенес все на CS 3.5.17. Здесь вообще блок "OVP.Energomera_IEC" выдает ошибку "Time_out" и данных нет.
Не могу понять в чем дело!

Версия библиотеки 3.5.14.9.

Евгений Кислов
01.06.2023, 12:11
Добрый день!

Делаю опрос счетчика Энергомера СЕ301 R33 146JAZ. Проверял на двух счетчиках, один на столе, второй в действующем шкафу.
Взял пример опроса, загрузил в СПК1хх 3.5.14 и все работает. Данные читает.
Далее внедряю проверенные блоки проекта в существующий проект и получаю нестабильное чтение данных с чтением то нулевых значений то реальных, причем с интервалом от 3 до 7 циклов (цикл опроса пока 5сек, делал разные). Ошибок блок "OVP.Energomera_IEC" никаких не выдает. Из проекта удаляю ВСЁ и оставляю только опрос счетчика. Ситуация с опросом не изменилась. При этом почему то файл проекта практически не уменьшился.
Далее перенес все на CS 3.5.17. Здесь вообще блок "OVP.Energomera_IEC" выдает ошибку "Time_out" и данных нет.
Не могу понять в чем дело!

Версия библиотеки 3.5.14.9.

Добрый день.
Обеспечьте, пожалуйста, удаленный доступ к ПК, с которого можно будет подключиться к СПК (3.5.17), который опрашивает счетчик.
Все нужные данные присылайте на почту.

Tacio
06.06.2023, 09:54
Добрый день, возникла такая проблема, есть 30 устройств опрашиваемых через преобразователь МКОН (ПЛК - (MODBUS TCP) - МКОН - (MODBUS RTU) - полевые устройства), опрос идет через библиотеку OwenCommunication Library 3.5.11.6. Пока все устройства в сети проблем никаких нет, все опрашивается, пишется и читается, объем данных небольшой (4 HR), таймаут выставлен на 500мс, настройки таймингов в МКОН пробовал или по-умолчанию (задержка между пакетами - 5мс, время ожидания ответа 300мс) или увеличивал на порядок до 50мс и 3000мс. Скорость опроса по линии RTU 9600, 1STOP, Четность.

Суть проблемы, как только в линии одну из устройств перестает отвечать, падает вся линия, блок OCL.TCP_Client не показывает никаких ошибок, блок OCL.MB_TcpRequest выдает SLAVE_DEVICE_FAILURE. При этом в сниффере МКОН видно как идет опрос линии. Если вернуть выпавшее устройство в строй, то после переинициализации OCL.TCP_Client (сброс и установка xEnable) ошибка пропадает и опрос снова идет корректно. В каком направлении искать ошибку?
Почти подобная проблема. К ПЛК210 по Rs485 подключено 8 устройств (такие же ПЛК210). В настройках мастера response timeout установлен в 50мс, в настройках каждого слейва также указано 50мс. Для каждого слейва указано 2 канала: чтение регистров и запись регистров. Когда в сети нет ни одного слейва я ожидаю, что один цикл опроса всех слейвов займёт 8*50мс для запросов на чтение + 8*50 для запросов на запись. В сумме 800мс, пусть будет 1с. Однако, если вклиниться в линию и посмотреть реальный тайминг, то видно, что цикл занимает примерно 12с, а между отдельными запросами примерно 560мс.
Где в моих рассуждения или настройках ошибка? Для работы по Modbus использую стандартные средства Codesys.

Евгений Кислов
06.06.2023, 09:58
Почти подобная проблема. К ПЛК210 по Rs485 подключено 8 устройств (такие же ПЛК210). В настройках мастера response timeout установлен в 50мс, в настройках каждого слейва также указано 50мс. Для каждого слейва указано 2 канала: чтение регистров и запись регистров. Когда в сети нет ни одного слейва я ожидаю, что один цикл опроса всех слейвов займёт 8*50мс для запросов на чтение + 8*50 для запросов на запись. В сумме 800мс, пусть будет 1с. Однако, если вклиниться в линию и посмотреть реальный тайминг, то видно, что цикл занимает примерно 12с, а между отдельными запросами примерно 560мс.
Где в моих рассуждения или настройках ошибка? Для работы по Modbus использую стандартные средства Codesys.

Выложите, пожалуйста, простейший проект, на котором вы проверяете эту ситуацию.

Tacio
13.06.2023, 14:12
Почти подобная проблема. К ПЛК210 по Rs485 подключено 8 устройств (такие же ПЛК210). В настройках мастера response timeout установлен в 50мс, в настройках каждого слейва также указано 50мс. Для каждого слейва указано 2 канала: чтение регистров и запись регистров. Когда в сети нет ни одного слейва я ожидаю, что один цикл опроса всех слейвов займёт 8*50мс для запросов на чтение + 8*50 для запросов на запись. В сумме 800мс, пусть будет 1с. Однако, если вклиниться в линию и посмотреть реальный тайминг, то видно, что цикл занимает примерно 12с, а между отдельными запросами примерно 560мс.
Где в моих рассуждения или настройках ошибка? Для работы по Modbus использую стандартные средства Codesys.
После некоторых экспериментов получился следующий результат.
При использовании библиотеки OwenCommunications ситуация заметно лучше, однако:
1. Если таймаут ожидания ответа ставить менее 100мс, то начинает проскакивать ошибка TIME_OUT, хотя снифер показывает, что слэйв сразу ответил на запрос.
2. Между приёмом ответа от слейва и новым запросом есть пауза 60-80мс, хотя никаких искусственных пауз в коде нет.
При использовании стандартных компонентов, но не через дерево проекта, а используя, например, IoDrvModbus.ModbusRequest2:
1. При таймауте ожидания ответа 50мс никаких проблем не возникает, при этом по сниферу видно, что действительно пауза ожидания ответа 60-70мс
2. Между приёмом ответа от слейва и новым запросом есть пауза 18-30мс
Таким образом я остановился на использовании IoDrvModbus.ModbusRequest2.

Cs-Cs
13.06.2023, 15:14
Между приёмом ответа от слейва и новым запросом есть пауза 60-80мс, хотя никаких искусственных пауз в коде нет Я сталкивался с таким же в 2020, когда делал опрос модулей Mx110 через конфигурацию и через SysCom. Везде была такая же пауза.
Победил только переходом на SysCom и прямую работу с портом.

knoppix
19.06.2023, 11:33
Добрый день.
Выложите, пожалуйста, простейший проект с опросом двух слэйвов через МКОН, на котором я смогу воспроизвести проблему (чтобы при физическом отключении одного слэйва опрос второго прекращался).

Архив проекта во вложении, повторить на двух устройствах проблему не удалось, на шести устройствах проблема возникает достаточно часто, вынес в проекте опрос устройств в 100мс задачу, вроде стало постабильнее, но проблема все равно сохраняется, просто проявляется чуть реже. Сейчас протестировал еще одну линию с устройствами другого типа, опрос шел хорошо до появления в опросе не существующего устройства, потом вся линия ушла в SLAVE_DEVICE_FAILURE, поднял время задачи до 200мс, проблема осталась но стала проявляться чуть реже, то есть не на первом, а на втором-третьем устройстве которое не удалось прочесть.

Евгений Кислов
19.06.2023, 13:07
Архив проекта во вложении, повторить на двух устройствах проблему не удалось, на шести устройствах проблема возникает достаточно часто, вынес в проекте опрос устройств в 100мс задачу, вроде стало постабильнее, но проблема все равно сохраняется, просто проявляется чуть реже. Сейчас протестировал еще одну линию с устройствами другого типа, опрос шел хорошо до появления в опросе не существующего устройства, потом вся линия ушла в SLAVE_DEVICE_FAILURE, поднял время задачи до 200мс, проблема осталась но стала проявляться чуть реже, то есть не на первом, а на втором-третьем устройстве которое не удалось прочесть.

Спасибо за проект. Попробуем воспроизвести проблему у себя.

"на шести устройствах проблема возникает достаточно часто, вынес в проекте опрос устройств в 100мс задачу, вроде стало постабильнее, но проблема все равно сохраняется, просто проявляется чуть реже"

Уточните интервалы времени, пожалуйста.

knoppix
19.06.2023, 13:11
На 6 устройствах и 100мс, отвал одного из устройств приводит к отвалу всей линии в одном случае из десятка, при 20мс, всегда. И чем больше устройств тем больше вероятность что все посыплется.

Votrj1
21.06.2023, 21:20
Что то не нашел. Обмен СПК107 и ПР200 , 128 регистров, что то на запись, что то на чтение. Работает. Захотелось передачу со стороны спк некоторых переменных сделать почаще. Увеличил циклы всех не главных переменных в конфигураторе до 1000мс, а нужные оставил 100. Ничего не поменялось, часто менять переменные не получается, захлебывается. Поменял те которые установил на 1000 на работу по тригеру, стало естественно лучше. Вопрос почему не работает классическим путем. Такое впечатление что настройки цикла переменных не на что не влияют. На всяк работает можбас мастер спк всегда в цикле main 2. Цикл майн 10млс, ожид 1000, фрейм 50. Не понял вообщем.

RV9WFJ
22.06.2023, 04:26
Групповой запрос решит ваши проблемы

Votrj1
22.06.2023, 08:13
Это тоже понятно, вопрос в принципе , почему???

Евгений Кислов
22.06.2023, 08:17
Это тоже понятно, вопрос в принципе , почему???

Добрый день.
Если вас интересует ответ на вопрос именно в такой формулировке - пожалуйста, пришлите, проекты для СПК и ПР на support@owen.ru, приложив в письме ссылку на ваш пост.
Пока что, например, непонятно, сколько у вас "нужных" переменных (может, их 50, и тогда период опроса в 100 мс для каждой физически недостижим), что значит "захлебывается", что значит "часто менять", что такое "классический путь" и т.д.

Евгений Кислов
22.06.2023, 10:08
На 6 устройствах и 100мс, отвал одного из устройств приводит к отвалу всей линии в одном случае из десятка, при 20мс, всегда. И чем больше устройств тем больше вероятность что все посыплется.

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

Votrj1
22.06.2023, 10:37
Добрый день.
Если вас интересует ответ на вопрос именно в такой формулировке - пожалуйста, пришлите, проекты для СПК и ПР на support@owen.ru, приложив в письме ссылку на ваш пост.
Пока что, например, непонятно, сколько у вас "нужных" переменных (может, их 50, и тогда период опроса в 100 мс для каждой физически недостижим), что значит "захлебывается", что значит "часто менять", что такое "классический путь" и т.д.

Отправить не могу , только скрины, уволить не уволят, но...
где то 50 каналов на скорости 115200. Часть на запись, часть на чтение, циклы все 100млс. Все работает уже полгода. Решил одну переменную сделать передачу чаще в ущерб остальным, для теста дал в нее программный меандр 1сек. Смотрю в онлайне на ПР200. Сигнал не проходит пока меандр ~<3сек. Дай думаю все переменные переведу на 1000млс , а эту оставлю на 100. Не получилось. Вот про это и вопрос. Пробовал сделать не кратно 1000 и 150 но кратно майн, не работает. Прочел документ ваш по модбасу, так ответа и не нашел. Настройки прикладываю. Да речь про модбас не Модбас через TCP.
6841868419684206842168422684236842468425

Cs-Cs
22.06.2023, 11:33
Votrj1 Мне показалось странным то, что время задачи MainTask - 400 мс, а переменных - 100 мсек. Как ЭТО вообще может работать быстро-то?
А ещё для скорости всё же нужно групповые запросы использовать. Вот только не знаю, поддерживает ли их ПРка в режиме Slave. А то у Modbus на каждую отдельную операцию с регистрами очень много накладных расходов, включая паузы между запросами.

Votrj1
22.06.2023, 12:02
Это сторжевой таймер 400, а майн 10. Надо на TCP уходить , но это другая история.

knoppix
22.06.2023, 16:15
Мы воспроизвели описанную вами проблему. Она проявляется при сочетании многих отдельных факторов, и одним из них является использование библиотеки OwenCommunication.
В вашей ситуации я рекомендую настроить обмен через стандартные компоненты Modbus в дереве проекта - в таком случае мы проблему не наблюдали.

Понял, спасибо. Подскажите, пожалуйста, использование стандартных компонентов не будет конфликтовать с OwenCommunication, она так же используется для опроса RTU устройств, и для работы ПЛК в качестве Slave устройства через (OCL.MB_TcpSlave)?

Евгений Кислов
22.06.2023, 17:12
Понял, спасибо. Подскажите, пожалуйста, использование стандартных компонентов не будет конфликтовать с OwenCommunication, она так же используется для опроса RTU устройств, и для работы ПЛК в качестве Slave устройства через (OCL.MB_TcpSlave)?

Нет, не будет.

Cs-Cs
23.06.2023, 07:05
Это сторжевой таймер 400, а майн 10. Надо на TCP уходить , но это другая история.
Виноват, невнимательно посмотрел! Прошу прощения!

knoppix
23.06.2023, 11:09
Мы воспроизвели описанную вами проблему. Она проявляется при сочетании многих отдельных факторов, и одним из них является использование библиотеки OwenCommunication.
В вашей ситуации я рекомендую настроить обмен через стандартные компоненты Modbus в дереве проекта - в таком случае мы проблему не наблюдали.

Еще два вопроса:
1. Замена МКОН на другое устройство не поможет?
2. Что делать если на линии больше 32 устройств (стандартные компоненты Modbus в дереве проектов не поддерживают больше 32 устройств)? Присутствуют линии до 45 устройств, разбить их на под линии уже нет физической возможности.

Евгений Кислов
23.06.2023, 11:57
Еще два вопроса:
1. Замена МКОН на другое устройство не поможет?
2. Что делать если на линии больше 32 устройств (стандартные компоненты Modbus в дереве проектов не поддерживают больше 32 устройств)? Присутствуют линии до 45 устройств, разбить их на под линии уже нет физической возможности.

1. Я не проводил тест с другим конвертером RTU/TCP - и, к сожалению, сейчас нет возможности это сделать.
2. Я проверю в понедельник, не сняли ли это ограничение в свежей версии плагина Modbus. Но даже если оно осталось - то МКОН поддерживает 2 одновременных TCP-подключения.
Так что можете добавить в дереве два Modbus_TCP_Slave для одного МКОН.

ultra76
23.06.2023, 20:06
Коллеги, здравствуйте.

Есть необходимость замены стороннего ПЛК на ОВЕН ПЛК210.
Сейчас стороннее оборудование формирует запрос по RS232 в следующем виде (удалось прослушать):
02 54 30 30 30 30 30 30 30 32 35 30 30 30 31 31 C8 03
02 54 30 30 30 30 30 30 30 32 35 30 30 30 31 31 C0 03
02 54 30 30 30 30 30 30 30 32 35 30 30 30 31 31 C0 C1 C2 C3 03

Вижу, что не похоже на стандартный протокол ModBus.
Можно ли из Codesys 3.5 сформировать такую строку и отправить на RS232 контроллера Овен?

RV9WFJ
24.06.2023, 04:27
Через SysCOM можно все.

Евгений Кислов
25.06.2023, 11:47
Коллеги, здравствуйте.

Есть необходимость замены стороннего ПЛК на ОВЕН ПЛК210.
Сейчас стороннее оборудование формирует запрос по RS232 в следующем виде (удалось прослушать):
02 54 30 30 30 30 30 30 30 32 35 30 30 30 31 31 C8 03
02 54 30 30 30 30 30 30 30 32 35 30 30 30 31 31 C0 03
02 54 30 30 30 30 30 30 30 32 35 30 30 30 31 31 C0 C1 C2 C3 03

Вижу, что не похоже на стандартный протокол ModBus.
Можно ли из Codesys 3.5 сформировать такую строку и отправить на RS232 контроллера Овен?

Да, можно.
См. примеры:

https://youtu.be/uH3hnXmc0fw
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_UserProtocols_v.3.0.pdf

RomeoVar
26.06.2023, 09:50
ДОбрый день
Хотел поделиться способом использования библиотеки COM_Control для взаимодействия с устройствами по шине Modbus/
Я предпочитаю максимально использовать Modbus для разработки проектов и в конце концов я пришел к использованию овеновской библиотеки COM_Control
Но для такой реализации необходимо точно знать сколько времени уходит на обмен с устройством, были или не были ошибки и как давно были получены данные.
Для этого я реализовал ФБ ModbusStack и структуру STACK. Стек реализован по принципу FIFO.
Структура стека такая
TYPE MODBUS_STACK:
STRUCT
usiSlaveID : USINT;
eFuncCode : OCL.MB_FC;
uiDataAddr : UINT;
uiDataCount : UINT;
pData : OCL.CAA.PVOID;
szSize : OCL.CAA.SIZE;
xDone : BOOL := FALSE;
pstDSendResult: POINTER TO MB_EXCHANGE_RESULT;
peError : POINTER TO OCL.ERROR;
ltStartUpd : POINTER TO LTIME;
ltEndUpd : POINTER TO LTIME;
END_STRUCT
END_TYPE

В главной программе есть конвеер обмена данными что-то такое:

fbComControl
(
xEnable := TRUE,
udiComPort := 4,
udiBaudRate := 38400,
udiByteSize := 8,
eParity := OCL.COM_PARITY.EVEN,
eStopBit := OCL.COM_STOPBIT.ONE,
hCom => hCom
);

IF fbComControl.xActive AND NOT fbComControl.xError THEN
CASE enMBHStage OF
E_MBHSTAGE.CheckBuffer:
IF NOT fbMbStack.xStackEmpty THEN
stModbusStack := fbMbStack.Pop();
stModbusStack.pstDSendResult^.tSendDataStart:= TO_TIME(TargetVars.stRtc.ltSystemTick);
stModbusStack.pstDSendResult^.tSendData := TO_TIME(0);
stModbusStack.ltStartUpd^ :=
stModbusStack.ltEndUpd^ := TargetVars.stRtc.ltSystemTick;
stModbusStack.pstDSendResult^.eError := OCL.ERROR.NO_ERROR;
stModbusStack.pstDSendResult^.eTxtError := MB_COMM_ERRORS.NO_ERROR;
actProcessRequest();
END_IF
E_MBHSTAGE.SendData:
actProcessRequest();
END_CASE
END_IF

Действие actProcessRequest();

fbSerialRequest
(
xExecute := TRUE,
hCom := hCom,
tTimeout := T#500MS,
usiRetry := 3,
xIsAsciiMode:= FALSE,
usiSlaveId := stModbusStack.usiSlaveId,
eFuncCode := stModbusStack.eFuncCode,
uiDataAddr := stModbusStack.uiDataAddr,
uiDataCount := stModbusStack.uiDataCount,
pData := stModbusStack.pData,
szSize := stModbusStack.szSize
);
IF fbSerialRequest.xError OR fbSerialRequest.xDone THEN
stModbusStack.pstDSendResult^.tSendData := TO_TIME(TargetVars.stRtc.ltSystemTick);
timeToExchangeData := stDSendResult.tSendData - stDSendResult.tSendDataStart;
stModbusStack.pstDSendResult^.eError := fbSerialRequest.eError;
stModbusStack.pstDSendResult^.eTxtError := MbErr2Text(error := stModbusStack.pstDSendResult^.eError);
stModbusStack.ltEndUpd^ := TargetVars.stRtc.ltSystemTick;
IF fbSerialRequest.xError THEN
stModbusStack.ltEndUpd^ := TO_LTIME(0);
END_IF
fbSerialRequest(xExecute := FALSE);
enMBHStage := E_MBHSTAGE.CheckBuffer;
ELSE
enMBHStage := E_MBHSTAGE.SendData;
END_IF

Каждое устройство у меня реализовано как ФБ и при инициализации я для устройства назначаю указатель на стек, а каждый стек привязан к определенному последовательному порту.

В чем у меня сейчас возникла проблема: я хотел бы сделать этот функционал максимально универсальным. Но немного не хватает опыта, был бы признателен если бы мне подсказали как лучше это сделать
Сейчас я сделал интерфейс в котором описал базовые методы: FB_Init и FB_Status
А дальше начинаются танцы с бубном
У меня несколько устройств - Драйвер сервопривода, Частотный преобразователь и (допустим) расширение входов/выходов работающие по Modbus
Было бы неплохо сделать иерархию объектов от Интерфейса и последовательно наследование с расширением функционала. Но пока выходит корявенько

Може у кого есть похожая реализация или мысли или может объединим усилия и создадим нечто универсальное что поможет управлять устройствами по шине максимально гибко

Это на самом деле очень удобно. Я реализовал портального робота с использованием СПК-110. Все управление осями идет через Modbus скорость очень приемлемая около 10мС на обмен с одним устройством. А так как RS485 у этого СПК аж 4 то получается что для всех 3-х осей обмен занимает не более 10-15 милисекунд.
Вобщем хотел бы обсудить такой подход

Лесурмыг
29.06.2023, 11:18
День добрый. Подскажите, каким-то образом можно организовать взаимодействие ПЛК Овен со сторонними приборами по CAN- шине?

Евгений Кислов
29.06.2023, 11:29
День добрый. Подскажите, каким-то образом можно организовать взаимодействие ПЛК Овен со сторонними приборами по CAN- шине?

Добрый день.
У наших ПЛК нет CAN-интерфейса, так что осуществить связь со сторонними приборами можно будет только с использование дополнительного устройства-конвертера (например, Modbus/CANopen).

Tacio
04.07.2023, 16:07
Можно ли менять значения на вкладке "Modbus Slave Init" из программы?

Евгений Кислов
04.07.2023, 19:00
Можно ли менять значения на вкладке "Modbus Slave Init" из программы?

Такой возможности нет.

jtx
10.07.2023, 11:05
Здравствуйте. Подскажите, можно ли сделать так, чтобы регистры временного хранения обнулялись при потере связи внешнего Master-устройста (Modbus TCP) с ПЛК210?
В моём случае Мастер - СП310. Сейчас отсоединяю кабель, но "ModbusTCP SlaveDevice" в Codesus 3.5 так и горит зелёным (не уходит в ошибку) и данные в регистрах, соответственно, остаются последние записанные.

Евгений Кислов
10.07.2023, 11:46
Здравствуйте. Подскажите, можно ли сделать так, чтобы регистры временного хранения обнулялись при потере связи внешнего Master-устройста (Modbus TCP) с ПЛК210?
В моём случае Мастер - СП310. Сейчас отсоединяю кабель, но "ModbusTCP SlaveDevice" в Codesus 3.5 так и горит зелёным (не уходит в ошибку) и данные в регистрах, соответственно, остаются последние записанные.

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

xjkpt
10.07.2023, 14:35
Пишу в панель по snmp некое отрицательное число. Типы integer32 и dint. Почему числа больше -128 приходят как разница этих чисел и 256? Например, число -200 будет 65336 и интерпретируется как -200, а -4 превращается в 252.

jtx
10.07.2023, 17:41
Добрый день.
Да, для этого достаточно поставить галочку Сторожевой таймер в настройках слэйва и указать время отсутствия запросов, спустя которое значения регистров будут обнулены.

Сторожевой таймер галочка стоит, время пробовал разное (сейчас стоит 1000мс), но на состояние слэйва она никак не влияет. А что за "время отсутствия запросов", где этот пункт находится?

Евгений Кислов
11.07.2023, 13:13
Сторожевой таймер галочка стоит, время пробовал разное (сейчас стоит 1000мс), но на состояние слэйва она никак не влияет. А что за "время отсутствия запросов", где этот пункт находится?

Справа от галочки Сторожевой таймер.
Уточните, а галочка Запись у вас установлена?

Евгений Кислов
11.07.2023, 13:14
Пишу в панель по snmp некое отрицательное число. Типы integer32 и dint. Почему числа больше -128 приходят как разница этих чисел и 256? Например, число -200 будет 65336 и интерпретируется как -200, а -4 превращается в 252.

Кто у вас является менеджером, а кто агентом.
Выложите простейший проект, с помощью которого я смогу повторить эту проблему, и пошаговую инструкцию, как именно это сделать.

jtx
14.07.2023, 12:19
Справа от галочки Сторожевой таймер.
Уточните, а галочка Запись у вас установлена?
Да. Вот окно настроек 68833

Евгений Кислов
14.07.2023, 12:44
Да. Вот окно настроек 68833

Попробуйте ее снять - я думаю, в этом случае регистры будут обнуляться спустя заданное время отсутствия запросов от мастера.

TFear
14.07.2023, 13:48
Здравствуйте , подскажите в чем дело, работаю с плк овен 210- 03 , при попытке подключения плк подключается нормально, но при этом ни один модуль не найден.
Ради эксперимента отключил всю связь между плк и пк (usb и enthernet) все равно пк к контроллеру подключаеться но модули не работают. Через некоторое время даже логин перестал работать.6883568836

Евгений Кислов
14.07.2023, 14:14
Здравствуйте , подскажите в чем дело, работаю с плк овен 210- 03 , при попытке подключения плк подключается нормально, но при этом ни один модуль не найден.
Ради эксперимента отключил всю связь между плк и пк (usb и enthernet) все равно пк к контроллеру подключаеться но модули не работают. Через некоторое время даже логин перестал работать.6883568836

Добрый день.
"даже логин перестал работать" потому что вы включили шифрование соединения в настройках.

Что касается обмена с модулями - предоставьте в понедельник утром удаленный доступ по AeroAdmin, пожалуйста.
Посмотрим, в чем дело.

xjkpt
17.07.2023, 09:16
Кто у вас является менеджером, а кто агентом.
Выложите простейший проект, с помощью которого я смогу повторить эту проблему, и пошаговую инструкцию, как именно это сделать.

Панель агент snmp. Использую библиотеку owen snmp. Пишу значения в панель из mib browser.

Проект для спк 107 и миб-файл.
68930

Евгений Кислов
17.07.2023, 09:51
Панель агент snmp. Использую библиотеку owen snmp. Пишу значения в панель из mib browser.

Проект для спк 107 и миб-файл.
68930

Проблему воспроизвел, спасибо.
Исправим в следующей версии библиотеки.

meta11ist87
19.07.2023, 02:56
Доброго дня.
Опрашиваю через плк210 по модбасу два реле ПР200 и передаю эти данные в облако.
Два вопроса:

1. Можно ли в облаке ограничить кол-во знаков после запятой? Условно, получаю температуру 20.14градусов. Хочу в облаке видеть 20.1. Как это сделать?
2. Есть ли какая-то переменная, по которой можно судить о наличии связи с ПР200? Чтоб в облако передать её для мониторинга связи и работоспособности ПР. Модбас использую нативный от CodeSys.

Евгений Кислов
19.07.2023, 06:57
Доброго дня.
Опрашиваю через плк210 по модбасу два реле ПР200 и передаю эти данные в облако.
Два вопроса:

1. Можно ли в облаке ограничить кол-во знаков после запятой? Условно, получаю температуру 20.14градусов. Хочу в облаке видеть 20.1. Как это сделать?
2. Есть ли какая-то переменная, по которой можно судить о наличии связи с ПР200? Чтоб в облако передать её для мониторинга связи и работоспособности ПР. Модбас использую нативный от CodeSys.

Добрый день.
1. К сожалению, такой возможности нет.
2. Такую переменную довольно просто можно сформировать на основе информации из п. 4.6:
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Modbus_v3.1.pdf

tPorte
20.07.2023, 14:19
Здравствуйте! Не выходит настроить обмен с частотным преобразователем в Codesys 3.5 SP17 с СПК 110. Частотный преобразователь iP5A (настроен на адрес 2 Modbus RTU)
С теми же настройками адресов и регистров без проблем идет опрос в Codesys 2.3 с ПЛК110[M02](фото прилагаю)
карта регистров такая же как в Codesys 2.3, Частотник обнаружен и связь с ним есть, но обмена по переменным не вижу:(
Что я не так делаю?690336903469035
6903669037690386903969040
69041
При этом первый частотный преобразователь ПЧВ3[M01] (адрес 1 modbus RTU) подключенный по шаблону исправно опрашивается и работает.

Евгений Кислов
20.07.2023, 14:23
Добрый день.
https://owen.ru/forum/showthread.php?t=28167&p=343792&viewfull=1#post343792

tPorte
20.07.2023, 14:36
Спасибо Евгений, ОГРОМНОЕ!

jtx
21.07.2023, 22:36
Попробуйте ее снять - я думаю, в этом случае регистры будут обнуляться спустя заданное время отсутствия запросов от мастера.
Регистры не обнуляются. Галочка влияет только на возможность сброса регистров через Alt+F7 (если её не ставить, то изменять значения регистров можно только "снаружи" по модбасу). В самой программе у меня никакие переменные не изменяются - пока только изучаю связь.
Получается, у вас штатная диагностика соединения по Ehternet интерфейсу вообще никак не проработана? Планируете ли это исправлять?

И ещё подскажите, пожалуйста, по Modbus RTU.
Я, например, записываю функцией "0F" значения TRUE в 5 и 6 битовые регисты ПЛК.
Отсылаю команду: 01 0F 00 00 00 08 01 60 FE BD​
Получаю ответ: 01 10 00 02 00 02 E0 08
Биты при этом записываются, всё ок. Но почему функциональный код в ответе не "0F", а "10"? И что означают "00 02 00 02" ?

Евгений Кислов
22.07.2023, 13:10
Регистры не обнуляются. Галочка влияет только на возможность сброса регистров через Alt+F7 (если её не ставить, то изменять значения регистров можно только "снаружи" по модбасу). В самой программе у меня никакие переменные не изменяются - пока только изучаю связь.
Получается, у вас штатная диагностика соединения по Ehternet интерфейсу вообще никак не проработана? Планируете ли это исправлять?

И ещё подскажите, пожалуйста, по Modbus RTU.
Я, например, записываю функцией "0F" значения TRUE в 5 и 6 битовые регисты ПЛК.
Отсылаю команду: 01 0F 00 00 00 08 01 60 FE BD​
Получаю ответ: 01 10 00 02 00 02 E0 08
Биты при этом записываются, всё ок. Но почему функциональный код в ответе не "0F", а "10"? И что означают "00 02 00 02" ?

Я подтверждаю, что в определенных версиях CODESYS есть проблемы с этим функционалом.
В понедельник отпишусь подробнее, как заставить его работать.
Тогда же отвечу на второй вопрос.

jtx
23.07.2023, 17:41
А вот что обнаружил, начав тестировать Modbus TCP с ПК.
1. Форсированные (установленные в TRUE) биты не считываются, если им не присвоены переменные.
2. См. картинку:

69127

kondor3000
23.07.2023, 21:31
А вот что обнаружил, начав тестировать Modbus TCP с ПК.
1. Форсированные (установленные в TRUE) биты не считываются, если им не присвоены переменные.
2. См. картинку:

Это ещё не всё, при передаче бит, ещё и байты меняются местами в целочисленной переменной. То есть 0 бит попадает в 8, а 7 в 15 бит и наоборот.
По крайней мере, подобное наблюдал в некоторых версиях Codesys 3.5.

Евгений Кислов
24.07.2023, 09:17
Регистры не обнуляются. Галочка влияет только на возможность сброса регистров через Alt+F7 (если её не ставить, то изменять значения регистров можно только "снаружи" по модбасу). В самой программе у меня никакие переменные не изменяются - пока только изучаю связь.
Получается, у вас штатная диагностика соединения по Ehternet интерфейсу вообще никак не проработана? Планируете ли это исправлять?

И ещё подскажите, пожалуйста, по Modbus RTU.
Я, например, записываю функцией "0F" значения TRUE в 5 и 6 битовые регисты ПЛК.
Отсылаю команду: 01 0F 00 00 00 08 01 60 FE BD​
Получаю ответ: 01 10 00 02 00 02 E0 08
Биты при этом записываются, всё ок. Но почему функциональный код в ответе не "0F", а "10"? И что означают "00 02 00 02" ?

Проверил с Modbus Serial Device версии 3.5.17.0.
Обе проблемы не воспроизводятся. См. видео:
https://ftp.owen.ru/CoDeSys3/99_ForumFiles/01_video/ModbusSerialDevice_Watchdog.mp4
https://ftp.owen.ru/CoDeSys3/99_ForumFiles/01_video/ModbusSerialDevice_WriteCoils.mp4

Если у вас получается их повторять в этой версии слэйва - напишите, пожалуйста, мне на почту или в телеграм (в подписи) и организуйте доступ по AeroAdmin - посмотрим, что у вас происходит.


А вот что обнаружил, начав тестировать Modbus TCP с ПК.

Эту проблему подтверждаю. Используйте галочку Дискретные битовые области, как на втором видео - тогда она не проявится.

Евгений Кислов
24.07.2023, 10:21
Проблему воспроизвел, спасибо.
Исправим в следующей версии библиотеки.

Исправлено в версии библиотеки 3.5.14.2.
https://ftp.owen.ru/CoDeSys3/04_Library/05_3.5.11.5/02_Libraries/OwenSnmp_v3.5.14.2.compiled-library

В ближайшие дни обновим ссылку на сайте.

69136 69137 69138 69139

jtx
07.08.2023, 14:28
Здравствуйте. Помогите разобраться с реализацией обмена по Modbus через OCL.UNM_TcpRequest. Нигде не могу найти информацию о том, как формировать запрос.
Например, хочу считать из 1-го слейва 4-й командой два регистра, начиная с 8-го.
OCL.MB_TcpRequest работает. Через Modbus Poll тоже получаю нужный ответ, при этом посылаются запросы вида "00 05 00 00 00 06 01 04 00 08 00 02" (где первые 00 05 - номер пакета).
Из примеров реализации нашёл только работу со строковыми данными (

Евгений Кислов
07.08.2023, 16:27
Здравствуйте. Помогите разобраться с реализацией обмена по Modbus через OCL.UNM_TcpRequest. Нигде не могу найти информацию о том, как формировать запрос.
Например, хочу считать из 1-го слейва 4-й командой два регистра, начиная с 8-го.
OCL.MB_TcpRequest работает. Через Modbus Poll тоже получаю нужный ответ, при этом посылаются запросы вида "00 05 00 00 00 06 01 04 00 08 00 02" (где первые 00 05 - номер пакета).
Из примеров реализации нашёл только работу со строковыми данными (

Добрый день.
Вас интересует принцип формирования запросов и разбора ответов?
Он приведен в спецификации Modbus:
https://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf
https://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf

MUSulmanin
07.08.2023, 17:03
Добрый день. Подскажите, с помощью Вашей библиотеки OwenVendorProtocol могу ли я интерпретировать данные со счетчиков РиМ 489?

Евгений Кислов
07.08.2023, 18:18
Добрый день. Подскажите, с помощью Вашей библиотеки OwenVendorProtocol могу ли я интерпретировать данные со счетчиков РиМ 489?

Добрый день.
Нет, мы не поддерживали протокол этого счетчика.

jtx
07.08.2023, 20:36
Добрый день.
Вас интересует принцип формирования запросов и разбора ответов? ...
Нет, меня интересует, в каком виде подать запрос на вход "pResponse".
Например, я хочу подать вот такой запрос (пример из спецификации Modbus). Из скольких элементов какого типа мне нужно создать массив данных запроса и что прописать в этих элементах?
69367

Евгений Кислов
07.08.2023, 20:43
Нет, меня интересует, в каком виде подать запрос на вход "pResponse".
Например, я хочу подать вот такой запрос (пример из спецификации Modbus). Из скольких элементов какого типа мне нужно создать массив данных запроса и что прописать в этих элементах?
69367

ARRAY [0..7] OF BYTE

Начальный байт - адрес слэйва, потом 5 байт со скриншота и в конце 2 байта CRC (см. в библиотеке CAA Memory функцию CRC16_Modbus).

jtx
07.08.2023, 22:46
Сделал. В ответе нули

69368 69369 69370

Евгений Кислов
08.08.2023, 04:39
Вы на прошлом скриншоте привели цитату из спецификации протокола Modbus RTU, и я ответил применительно к этому протоколу.
Если нужно отправить такой запрос по Modbus TCP - то нужно добавить к нему MBAP Header и убрать CRC:


00 00 00 00 00 06 01 08 00 00 A5 37

69371

69372

meta11ist87
09.08.2023, 00:29
Можно ли из плк210 передать в ОК текстовую переменную? Условно говоря нужно отображение состояния насоса вкл/выкл/авария.
В доке вроде написано что стринговые переменные не поддерживаются, но может как-то костылями возможно.
Или на стороне ОК можно ли сопоставить переменную инт с каким-то текстом?

Николай Суриков
09.08.2023, 00:47
Кажется так
69381
UPD. Получается из ПЛК2хх так нельзя сделать, и нельзя масштабировать данные в ОК, и единицы измерения не указать. Полный мрак и недосказанность в подключении ПЛК2хх.
Конечно оригинальное решение, что новые приборы добавляются в ОК с ограниченными возможностями.
UPD2. Можно извратиться с "Настройка уведомлений", и отображать на мнемосхеме уже как надо, честно не пробовал.

jtx
12.08.2023, 22:32
Евгений, спасибо большое, всё работает. Моя ошибка была в том, что длину указывал 06, а не 00 06.

yray
17.08.2023, 23:04
Подскажите, есть ли работающая библиотека MQTT для CODESYS V3.5 ?

Евгений Кислов
18.08.2023, 06:57
Подскажите, есть ли работающая библиотека MQTT для CODESYS V3.5 ?

Есть две open-source библиотеки:
https://ftp.owen.ru/CoDeSys3/04_Library/05_3.5.11.5/02_Libraries/MQTT_Client_v3.5.13.27.library
https://github.com/stefandreyer/CODESYS-MQTT

Обе рабочие.

yray
18.08.2023, 14:31
Первую, которая https://ftp.owen.ru/CoDeSys3/04_Libr....13.27.library, установить можно и даже через раз она работает, но в ней отсутствует QoS, так что для реального применения её никак нельзя назвать рабочей. Возможно автор её хотел довести до ума но забросил.
Во второй, https://github.com/stefandreyer/CODESYS-MQTT, в описании заявлен QoS, но запустить не смог, требует дополнительные библиотеки которые скачать и установить не удаётся.
Поэтому вопрос как был так и остаётся открытым - где взять рабочие библиотеки mqtt

melky
18.08.2023, 14:42
https://us.store.codesys.com/media/n98_media_assets/files/p/r/product_mqtt_for_codesys_datasheet_en_1.pdf

Это про одну из них ?

yray
18.08.2023, 15:11
https://us.store.codesys.com/media/n98_media_assets/files/p/r/product_mqtt_for_codesys_datasheet_en_1.pdf

Это про одну из них ?

Как я понял ваша ссылка на официальную, библиотеку от CODESYS, которая конечно работает как надо но её надо купить, "Licensing License activation optional on CODESYS Runtime Key or CODESYS Soft Key. License per
runtime device necessary. Required Accessory CODESYS Security Key"

knoppix
22.08.2023, 12:46
Добрый день, возникла следующая интересная проблема. Есть ПЛК200, большая часть его работы это опрос устройств (операции чтения и записи) через ModbusRTU (выполняется через OwenCommunicationLibrary) и ModbusTCP (через стандартные компоненты Codesys), и дальнейшая выдача данных через OPC UA выше в АльфаПлатформу. Где-то до 1200 тегов проблем с OPC UA не возникает, после он периодически начинает отваливаться (2 минуты опрашивает, 10 минут висит без связи).
В логах связанное с OPC UA следующее (полный лог во вложении):


<Entry severity="error" component="CmpOPCUAStack" user="nobody" timestamp="09.08.2023 12:51:56" infoId="0">OpcUa_Endpoint_EndSendResponse: Error 0x80310000! Cancelling response!</Entry>
<Entry severity="error" component="CmpOPCUAStack" user="nobody" timestamp="09.08.2023 12:51:56" infoId="0">OpcUa_SecureListener_EndSendResponse: Error 0x80310000 while sending message</Entry>
<Entry severity="error" component="CmpOPCUAStack" user="nobody" timestamp="09.08.2023 12:51:56" infoId="0">OpcUa_SecureListener_EndSendResponse: SecureChannel 1687 has no transport connection!</Entry>

Никаких настроек безопасности в ПЛК не делалось, как в отношении самого ПЛК, так и OPC UA. В какую сторону можно посмотреть чтобы понять в чем может быть дело?

RV9WFJ
23.08.2023, 06:08
Временем цикла пробовали управлять? Какая нагрузка в админке? Я 5000 тегов прогонял через opc ua плк210. И ничего не падало кроме админки.

Евгений Кислов
23.08.2023, 08:00
Добрый день, возникла следующая интересная проблема. Есть ПЛК200, большая часть его работы это опрос устройств (операции чтения и записи) через ModbusRTU (выполняется через OwenCommunicationLibrary) и ModbusTCP (через стандартные компоненты Codesys), и дальнейшая выдача данных через OPC UA выше в АльфаПлатформу. Где-то до 1200 тегов проблем с OPC UA не возникает, после он периодически начинает отваливаться (2 минуты опрашивает, 10 минут висит без связи).
В логах связанное с OPC UA следующее (полный лог во вложении):


<Entry severity="error" component="CmpOPCUAStack" user="nobody" timestamp="09.08.2023 12:51:56" infoId="0">OpcUa_Endpoint_EndSendResponse: Error 0x80310000! Cancelling response!</Entry>
<Entry severity="error" component="CmpOPCUAStack" user="nobody" timestamp="09.08.2023 12:51:56" infoId="0">OpcUa_SecureListener_EndSendResponse: Error 0x80310000 while sending message</Entry>
<Entry severity="error" component="CmpOPCUAStack" user="nobody" timestamp="09.08.2023 12:51:56" infoId="0">OpcUa_SecureListener_EndSendResponse: SecureChannel 1687 has no transport connection!</Entry>

Никаких настроек безопасности в ПЛК не делалось, как в отношении самого ПЛК, так и OPC UA. В какую сторону можно посмотреть чтобы понять в чем может быть дело?

Добрый день.
Вы можете повторить эту проблему с другим клиентом? Например, UaExpert.

vozlov
03.10.2023, 09:02
Иногда пропадает обмен по Modbus TCP с использованием Owen Communications Library.

TCP_Client не выдает ни xError, ни xActive, а вечно висит в xBusy

70657

Что может быть причиной?

Евгений Кислов
03.10.2023, 09:11
Иногда пропадает обмен по Modbus TCP с использованием Owen Communications Library.

TCP_Client не выдает ни xError, ни xActive, а вечно висит в xBusy

70657

Что может быть причиной?

Добрый день.
Это признак разрыва соединения со стороны сервера.

vozlov
08.10.2023, 10:28
Возможно ли эту настройку менять динамически во время работы программы?

70778

МихаилГл
08.10.2023, 11:25
Возможно ли эту настройку менять динамически во время работы программы?

70778

А зачем её менять из программы? Определитесь сразу что вы хотите видеть при разрыве соединения... Кстати в настройках модбас есть у Овена в кодесисе биты наличия/отсутствия связи, я им пользуюсь. А про этот момент не знаю.

Евгений Кислов
08.10.2023, 16:28
Возможно ли эту настройку менять динамически во время работы программы?

70778

Добрый день.
Такой возможности нет.

xjkpt
10.10.2023, 13:54
Вопрос по OCL. Как реализовать запись по триггеру? Я нажимаю на кнопку, xTrigger принимает значение 1, после исполнения ФБ xTrigger обнуляется. Может, это как-то по-другому делается?


2:
fbTcpRequest(xExecute := (fbTcpClient.xActive AND xTrigger), tTimeout := T#1S, usiRetry := 3, hConnection := fbTcpClient.hConnection,
xIsRtuOverTcpMode := FALSE, usiUnitId := 1, eFuncCode := ocl.mb_fc.WRITE_SINGLE_REGISTER, uiDataAddr := 0,
uiDataCount := 1, pData := ADR(wWord), szSize := SIZEOF(wWord));

IF fbTcpRequest.xDone OR fbTcpRequest.xError THEN
xTrigger := FALSE;
fbTcpRequest(xExecute := FALSE);
comState := 3;
END_IF

Какие подводные камни в использование одного и того же функционального блока несколько раз в пределах одного клиента? Я имею в виду, на одном шаге машины реквест выше пишет регистр, на следующем шаге читает регистры, дальше читает катушки и тд.

Евгений Кислов
10.10.2023, 13:58
Ваш код выглядит корректно.


Какие подводные камни в использование одного и того же функционального блока несколько раз в пределах одного клиента? Я имею в виду, на одном шаге машины реквест выше пишет регистр, на следующем шаге читает регистры, дальше читает катушки и тд.

Если не забывать сбрасывать экземпляр (xExecute := FALSE) после вызова - то никаких.

meta11ist87
19.10.2023, 23:32
71047
Подскажите, что я делаю не так? Пытался опросить ПР200 через ПЛК210.
Вынес ПР с адресом 10 в отдельный файл POU, но при компиляции CD ругается ошибкой "имя переменной" не является компонентом 'ModbusSlaveComPort_Diag'.

Евгений Кислов
20.10.2023, 04:41
У вас программа и экземпляр слэйва называются одинаково (PR10) - так делать нельзя.
Переименуйте что-то из них.

meta11ist87
23.10.2023, 00:14
У вас программа и экземпляр слэйва называются одинаково (PR10) - так делать нельзя.
Переименуйте что-то из них.

Спасибо, да помогло.
Ещё вопрос. В символьной конфигурации указан ряд регистров, которые доступны только для записи.
Но они появляются в общем списке параметров в ОК, значения у них совсем некорректные, по факту там значения в десятки раз меньше(скрины из КС и ОК прилагаю).
Как это вылечить? При записи из ОК в эти регистры значения ложатся корректные, но в ОК продолжают оставаться нереальные значения.
7110871109

п.с. Ещё вопрос, не касающийся этой темы, но раз всё равно вопрос задаю, может сможете ответить.
Можно ли с пр200 забрать температуру процессора или температуру внутри ПР? Т.е. есть ли в ПР датчик температуры, если есть, то как его забрать по модбас?

Евгений Кислов
23.10.2023, 07:47
Спасибо, да помогло.
Ещё вопрос. В символьной конфигурации указан ряд регистров, которые доступны только для записи.
Но они появляются в общем списке параметров в ОК, значения у них совсем некорректные, по факту там значения в десятки раз меньше(скрины из КС и ОК прилагаю).
Как это вылечить? При записи из ОК в эти регистры значения ложатся корректные, но в ОК продолжают оставаться нереальные значения.
7110871109

п.с. Ещё вопрос, не касающийся этой темы, но раз всё равно вопрос задаю, может сможете ответить.
Можно ли с пр200 забрать температуру процессора или температуру внутри ПР? Т.е. есть ли в ПР датчик температуры, если есть, то как его забрать по модбас?

1. Попробуйте удалить прибор из OwenCloud и добавить заново.
2. Нет.

capzap
23.10.2023, 08:16
Как это вылечить?

чтоб лечить надо знать что именно лечить, по двум, ни чего не значащим скринам, это сложно сделать, если предоставите вывод API: POST /v1/device на этот прибор, то возможно появится ответ на решение вопроса

tPorte
02.11.2023, 11:03
Доброго дня! Нет опроса от программы частотного преобразователя (iP5A_1) в группе slave устройств на RS485 (горит треугольник без восклицательного знака). Если ставлю его на первое место, то опрос есть(восклицательный знак появляется), но на другом (iP5A) опрос теряется.
Под опросом программы я подразумеваю наличие красного или оранжевого треугольника с восклицательным знаком! В программе при запуске, всегда нету восклицательного знака либо на iP5A_1, либо на iP5A, но при этом если я отклучю оба устройства PChV3_M01 и PChV3_M01_1, то на обоих iP5A_1, на iP5A треугольник с восклицательным знаком появится.
пробовал подключать визически частотник к на iP5A_1, либо на iP5A и тот который без восклицательного знака по прежнему нет опроса, а тот который с восклицательным знаком, там сразу происходит подключение горит зеленый индикатор и все работает! В чем может быть причина?71300713017130271303

МихаилГл
02.11.2023, 11:21
Доброго дня! Нет опроса от программы частотного преобразователя (iP5A_1) в группе slave устройств на RS485 (горит треугольник без восклицательного знака). Если ставлю его на первое место, то опрос есть(восклицательный знак появляется), но на другом (iP5A) опрос теряется.
Под опросом программы я подразумеваю наличие красного или оранжевого треугольника с восклицательным знаком! В программе при запуске, всегда нету восклицательного знака либо на iP5A_1, либо на iP5A, но при этом если я отклучю оба устройства PChV3_M01 и PChV3_M01_1, то на обоих iP5A_1, на iP5A треугольник с восклицательным знаком появится.
пробовал подключать визически частотник к на iP5A_1, либо на iP5A и тот который без восклицательного знака по прежнему нет опроса, а тот который с восклицательным знаком, там сразу происходит подключение горит зеленый индикатор и все работает! В чем может быть причина?71300713017130271303

А другие настройки устройств можно посмотреть...? Ну или проект...

Евгений Кислов
02.11.2023, 11:49
Какие из устройств у вас физически подключены по RS-485?

tPorte
02.11.2023, 13:36
71318 адреса с 1 по 4 таймаут везде 1000

Евгений Кислов
02.11.2023, 13:38
71318 адреса с 1 по 4 таймаут везде 1000

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

tPorte
02.11.2023, 13:43
iP5A физически подключен имеет адрес 2 связь ЕСТЬ! Остальные не подключены!
iP5A_1 имеет адрес 3 - его то CoDeSys не пытается опросить и нету восклицательного знака! Если я ему ставлю адрес 2,( а iP5A адрес 3) и пытаюсь связаться с подключенным частотником то связи нету! Тогда удаляю iP5A и частотник связывается с iP5A_1
у них как буд-то бы есть какая-то связь и они мешают друг другу:confused:

Евгений Кислов
02.11.2023, 13:55
iP5A физически подключен имеет адрес 2 связь ЕСТЬ! Остальные не подключены!
iP5A_1 имеет адрес 3 - его то CoDeSys не пытается опросить и нету восклицательного знака! Если я ему ставлю адрес 2,( а iP5A адрес 3) и пытаюсь связаться с подключенным частотником то связи нету! Тогда удаляю iP5A и частотник связывается с iP5A_1
у них как буд-то бы есть какая-то связь и они мешают друг другу:confused:

Если 3 из 4 приборов не подключены - то нет смысла их опрашивать.

tPorte
02.11.2023, 15:43
Евгений, спасибо! Проблема ушла! Посадил эти два частотника на второй порт RS485 и они стали опрашиваться нормально!71321

Yakut
06.11.2023, 17:54
Доброго времени суток, коллеги.
Ковыряюсь с Codesys и у меня появилась вот такая проблема:

------ Компиляция : Приложение: Device.Application -------
типизировать код...
[ERROR] NH3 ST 6.11 3 part: Main [Device: Plc Logic: Application](Строка 125, Столбец 1 (Реализ.)): Выход соотнесен с существующей переменной Application.Main.b[0]. %QW6 больше не может быть использована.
[INFORMATION] NH3 ST 6.11 3 part: HMI_Modbus_TCP_Slave [Device: Ethernet: Modbus_TCP_Master]: Связанная позиция
[ERROR] NH3 ST 6.11 3 part: Main [Device: Plc Logic: Application](Строка 125, Столбец 1 (Реализ.)): Выход соотнесен с существующей переменной Application.Main.b[1]. %QW7 больше не может быть использована.
[INFORMATION] NH3 ST 6.11 3 part: HMI_Modbus_TCP_Slave [Device: Ethernet: Modbus_TCP_Master]: Связанная позиция
Компиляция завершена -- 2 ошибок, 80 предупреждений : загрузка невозможна

Причём в программе я QW6 и QW7 нигде не использую. О чём на скрине видно через поисковик он выдаёт только MODBUS:
(см. вложение 2)
Выполнено всё в эмуляции.
Цель - хочу передать значения из контроллера в панель HMI.

см. приложение 3 = убрал все данные, что бы посмотреть какие у меня word используются в программе - оказалось что имеются такие например QW18, QW19 (допустим это 1 REAL) и ниже тоже QW22.

Самое забавное, что вначале с 1 каналом Write Multiple Registers (Код функции 16) всё работало и на эмулятор панельки передавало значения REAL, но когда добавил 2 к***** то пошла ошибка. Далее, вообще перестало работать даже с 1 каналом. И начал выдавать ошибку см. выше.
Потом нашёл ролик CodesysOnelove с подключением. Сделал всё как Евгений прописал = > 0 на массу.(такая же ошибка с использованием этих значений где=то в проекте.)

В общем - если кто сталкивался или знает где ошибка буду признателен в помощи.

Евгений Кислов
06.11.2023, 18:44
Добрый день.
Выложите проект, в котором воспроизводится данная ошибка.

Yakut
06.11.2023, 19:23
Вложил.
Там код и библиотеки к нему.

МихаилГл
06.11.2023, 19:33
По моему это связано с тем, что вы внутри переменной присвоили свои наименования main.b[0] и 1... Поэтому в программе вроде нельзя больше упоминать %qw6 совсем, так как это как бы массив... Тут уже было, что объявляли как сам массив, так и биты внутри и программа вываливалась в такую же ошибку.

Yakut
06.11.2023, 19:40
Дак я и обычный REAL делал, всё одно = ругается.

МихаилГл
06.11.2023, 19:43
Дак я и обычный REAL делал, всё одно = ругается.

Там 18 кодекс, не смогу открыть как надо. Вы вообще упоминание о переменных удалите, оставьте по умолчанию%qw... И посмотрите. Возможно у представителя Овена есть возможность открыть без ошибок.

Yakut
06.11.2023, 19:49
Там 18 кодекс, не смогу открыть как надо. Вы вообще упоминание о переменных удалите, оставьте по умолчанию%qw... И посмотрите. Возможно у представителя Овена есть возможность открыть без ошибок.

Так конечно не ругается.
Я хотел в программе сделать симуляцию цифр, что бы передать на панель у себя дома, что б не мотаться на объект.
Поэтому и ввёл обычную локальную переменную, которую, в свою очередь, привязал к МОДБАС переменной. С MAIN локальной переменной буду просто задавать значение, что бы "состряпать" HMI панель и что бы они совпадали с программным кодом. Короче, для теста делаю. На объекте пару недель назад такой фин ушами работал норм. Сейчас, дописав код, уже так не работает с эмуляцией. Вот и пытаюсь понять чего оно ругается. Может, конечно, уже и глаз замылился...

МихаилГл
06.11.2023, 19:57
Если соотнесли переменные, то qw6 вообще не должно быть в программе, даже если эта штука у вас во входах.выходах над соотнесенными переменными есть. Вроде это из-за этого. Уберите упоминание qw6 из текста программы.

МихаилГл
06.11.2023, 20:04
Вы пишите, что не используете, и приводите 2 скрин, где чёрным по белому фигурирует 1я строчка поиска, с qw7 такая же история.

Yakut
06.11.2023, 20:13
Вот, пожалуйста, убрал QW6, оставил а := REAl на МОДБАСовском канале.

МихаилГл
06.11.2023, 20:15
Только ошибок теперь не 2 а 1. qw7 тоже в утиль надо...

МихаилГл
06.11.2023, 20:18
Стоп, а почему вы массив из 2 вордов сделали реалом?

Yakut
06.11.2023, 20:23
Стоп, а почему вы массив из 2 вордов сделали реалом?

А вот в этом вся фишка и происходила.
REAL спокойно проходил по МОДБАС в CODESYS! переведу с русского, я не дробил его на массив в WORD.

По первому вопросу (QW7 в утиль) мне тогда непонятно, как можно симулировать сигнал из программы в панельку. Можете подсказать?

МихаилГл
06.11.2023, 20:28
Real не проходит по modbus, надо делать структуру или как там:
DataR: real;
DataM: array (0.. 1) of word; поищите на форуме, есть ссылка на документ по работе с вордами в modbus

Modbus это 1 или 2 word. Так как вы сделали, не делается.

МихаилГл
06.11.2023, 20:32
А вот в этом вся фишка и происходила.
REAL спокойно проходил по МОДБАС в CODESYS! переведу с русского, я не дробил его на массив в WORD.

По первому вопросу (QW7 в утиль) мне тогда непонятно, как можно симулировать сигнал из программы в панельку. Можете подсказать?

Если вы соотнесли переменные, то вы в программе должны из и использовать и забыть про qw...

Yakut
06.11.2023, 20:38
Real не проходит по modbus, надо делать структуру или как там:
DataR: real;
DataM: array (0.. 1) of word; поищите на форуме, есть ссылка на документ по работе с вордами в modbus

Modbus это 1 или 2 word. Так как вы сделали, не делается.

Конечно, не делается. Это можно оставить, оно сейчас никакой рояли не играет, даже если я сделаю как вы предлагаете разбиванием при помощи ARRAY на 2 WORD - будет так же песня.
Вопрос мой так и не получил ответа: как мне в программе сделать симуляцию REAL значения, что бы я на панельке увидел её. Я использую глобальные переменные вот их и хочу туда/сюда пересылать.

МихаилГл
06.11.2023, 20:40
Расскажу как делал я.
Имеется контроллер, сенсорная панель с modbus tcp master, кнопочная панель с modbus rtu master.
Составил таблицу регистров в экселе, и определил их количество. Для реалов соответственно зарезервировал 2 регистра. В контроллере сделал массив на данное количество регистров и соотнес каждый элемент массива своему регистру. А реал выжимал структурой, или как там она называется, нет под рукой кодекса, только телефон.
Ну и ещё галочку в кодесисе поставил, чтение и запись!

МихаилГл
06.11.2023, 20:48
TYPE DUT_MODBUS_Real_Word:
UNION
U_RealInModbus: ARRAY [0..1] OF WORD;
U_RealInProgramm: REAL;
END_UNION
END_TYPE

Использовать объединение.
В программе задаете реал, а ворды соотносите с регистрами. Панель сама поймёт где что, если правильно настроить.

Yakut
06.11.2023, 20:51
Расскажу как делал я.
Имеется контроллер, сенсорная панель с modbus tcp master, кнопочная панель с modbus rtu master.
Составил таблицу регистров в экселе, и определил их количество. Для реалов соответственно зарезервировал 2 регистра. В контроллере сделал массив на данное количество регистров и соотнес каждый элемент массива своему регистру. А реал выжимал структурой, или как там она называется, нет под рукой кодекса, только телефон.
Ну и ещё галочку в кодесисе поставил, чтение и запись!
Вот примерно этим же и занимаюсь.
Только хочу понять с какого регистра ползти, как биты и регистры проименовать, а для этого делаю эдакий полевой стенд, что бы понять чего куда крутить. Но раньше работало, а сейчас почему-то отказалось. Причём даже сегодня с 1 регистром удалось побаловаться, с другими уже нет, а потом и 1 отвалился.

МихаилГл
06.11.2023, 20:59
https://owen.ru/product/codesys_v3/documentation

Там есть документ, называется протокол модбас.
Изучайте. А то вы другой контроллер программируете и пытаетесь получить ответы, которые тут уже описаны.

МихаилГл
06.11.2023, 21:09
И ещё, соотносить можно что-то одно, либо целиком регистры, либо их биты по отдельности. Вместе и то и то нельзя, выдаст такую же ошибку.

Я не делал как вы, а просто соотносил регистры, типа reg[1] и т.д. что бы в программе использовать циклы.

Иначе вам каждый этот бит регистра в программе присваивать какой-то переменной, если у вас 40 механизмов и на каждый 50 аварий и состояний, то вам описывать 2000 строк, вы на этом неделю потеряете и запутаетесь в коде.

Yakut
06.11.2023, 21:30
И ещё, соотносить можно что-то одно, либо целиком регистры, либо их биты по отдельности. Вместе и то и то нельзя, выдаст такую же ошибку.

Я не делал как вы, а просто соотносил регистры, типа reg[1] и т.д. что бы в программе использовать циклы.

Иначе вам каждый этот бит регистра в программе присваивать какой-то переменной, если у вас 40 механизмов и на каждый 50 аварий и состояний, то вам описывать 2000 строк, вы на этом неделю потеряете и запутаетесь в коде.
Ексель сам пишет по скрипту эти строки, я только их заполняю. В этом вся соль. Поэтому ошибки быть не может.

У меня имеется контроллер на борту которого MODBUS TCP/IP, в котором уже есть входы и выходы, которые автоматические создаются производителем в своём ПО. Я эти входы присваиваю к глобальным переменным, что бы их же и отсылать в HMI. А для этого я создаю ещё устройство HMI делаю его мастером и ему пытаюсь всё это конвертировать. Ну и конечно же добавлять свои переменные, как вы уже и упомянули аварии, состояния и т.д. В ручке делать это всё = безумие, поэтому и пытаюсь этот процесс автоматизировать, что бы уйти от ошибок.

Yakut
06.11.2023, 21:51
Вот, достал старую версию программы от 1.11.23 и там как видно на скринах привязанное значение A:=real; успешно прицепилось к адресу регистра RW10 со сдвигом 10 009 в CDS без всяких ошибок.
Но уже B:=REAL во второй канал с адресом RW4 и сдвигом 10 003 выползает в ошибку. Где-то есть перехлёст по адресам. Конечно счас полетят помиодры мол там нет плавающей запятой и это верно, мне главное узнать именно адреса глобальных переменных регистров и их даже привязывать не нужно будет, я просто напишу глобальная переменная a AT %QW 8 и т.д. По факту (в полях на оборудовании) у меня эти значения передавались с плавающей запятой. На скринах уже есть эмулятор панельки справа.

Yakut
06.11.2023, 21:59
Ну и вот ещё скрины с плавающей точкой.
Как вариант попробовать сейчас удалить iBus с дискретными входами/выходами и поглядеть что выйдет. У меня подозрения что 2 слейв устройства как-то конфликтуют...возможно..:confused:

Евгений Кислов
07.11.2023, 06:40
Вложил.
Там код и библиотеки к нему.

У меня в вашем проекте нет ошибок компиляции.

71403

Если свяжитесь по телеграм (в подписи) и предоставите доступ по AnyDesk - посмотрим, в чем у вас дело.

МихаилГл
07.11.2023, 15:59
Похоже для 18 кодесиса union уже не требуется. К сожалению у меня его нет. А когда овен на него перейдёт не известно

kondor3000
07.11.2023, 16:17
Вот я не понимаю, какой смысл переходить на 18 кодесис, если и с 16 и 17 не разобрался ещё?

МихаилГл
07.11.2023, 17:47
Вот я не понимаю, какой смысл переходить на 18 кодесис, если и с 16 и 17 не разобрался ещё?

Он программирует не овен, а там видно требуется.
Но я 17 я как бы уже разобрался, того минимума по крайней мере мне хватает для требуемых задач.
Самое прикольное было переделать программу под модбас особенности перестановки регистров в 17 версии. Хорошо, что я это заложил в старой прошивке, изменения заняли пару минут...

xjkpt
20.11.2023, 10:45
CПК 107, библиотека OwenSnmp v3.5.14.2
Ловлю ложноположительную ошибку 61 на старте. В процессе работы не появляется.
Ловлю вот так:


IF fbSNMPagent.eError <> 0 THEN
//записать адрес устройства
sErrorIP := fbSNMPagent.sHost;
//записать код ошибки
usiErrorCode := fbSNMPagent.eError;
//записать индекс переменной с ошибкой
usiErrorIndex := fbSNMPagent.usiErrorIndex;
//записать время ошибки
dtErrorTimestamp := TargetVars.stRtc.dtDateAndTime;
END_IF


проект прилагается

Евгений Кислов
20.11.2023, 12:33
CПК 107, библиотека OwenSnmp v3.5.14.2
Ловлю ложноположительную ошибку 61 на старте. В процессе работы не появляется.
Ловлю вот так:


проект прилагается

Спасибо за информацию. Я завтра попробую воспроизвести эту ситуацию у нас. По результатам отпишусь.

Евгений Кислов
21.11.2023, 07:23
CПК 107, библиотека OwenSnmp v3.5.14.2
Ловлю ложноположительную ошибку 61 на старте. В процессе работы не появляется.
Ловлю вот так:


проект прилагается

Блок работает корректно - вы его вызываете, передавая ему указатель на aPack, а сам aPack заполняете уже после вызова.
Перенесите код с заполнением aPack выше вызова блока - тем самым вы устраните причину ошибки.

LANE
14.12.2023, 11:49
Здравствуйте, подскажите пожалуйста. Первый проект, Спк 107, написал программу, визуализацию, все работает, начал проверять физически, по модбасу соединил модуль мк110, не работало ничего, ни входа ,ни выхода, выхода заработали путем изменения имени с Q 16.0(не помню точно какие были) на QХ 0.0 ,0.1 и тд. Входа же не работают при таком же методе... При это в онлайне пишет ( в изображении) ,самостоятельно не смог найти проблему. 72367Первый опыт, подскажите что я не доделал или сделал не так

Евгений Кислов
14.12.2023, 11:51
Здравствуйте, подскажите пожалуйста. Первый проект, Спк 107, написал программу, визуализацию, все работает, начал проверять физически, по модбасу соединил модуль мк110, не работало ничего, ни входа ,ни выхода, выхода заработали путем изменения имени с Q 16.0(не помню точно какие были) на QХ 0.0 ,0.1 и тд. Входа же не работают при таком же методе... При это в онлайне пишет ( в изображении) ,самостоятельно не смог найти проблему. 72367Первый опыт, подскажите что я не доделал или сделал не так

Добрый день.
Свяжитесь со мной (контакты в подписи) и обеспечьте доступ по AeroAdmin или AnyDesk.

kondor3000
14.12.2023, 17:37
Здравствуйте, подскажите пожалуйста. Первый проект, Спк 107, написал программу, визуализацию, все работает, начал проверять физически, по модбасу соединил модуль мк110, не работало ничего, ни входа ,ни выхода, выхода заработали путем изменения имени с Q 16.0(не помню точно какие были) на QХ 0.0 ,0.1 и тд. Входа же не работают при таком же методе... При это в онлайне пишет ( в изображении) ,самостоятельно не смог найти проблему. Первый опыт, подскажите что я не доделал или сделал не так

Во первых прочитайте по поводу синих значков M https://owen.ru/forum/showthread.php?t=28167&page=6#52
Во вторых привяжите ко входам переменные, которые будете использовать в программе.

Votrj1
20.12.2023, 15:05
Групповая передача структуры WritePR по модбасу. Канал 0 функция 16 , 20 слов. Ранее все работало в другом проекте. Был вариант просто привязка канала к объявленному имени переменной структуры. Данные в структуру заносятся. Далее надо ее передать по модбасу одной посылкой (для ускорения). Происходит внутренняя сдвижка данных , как будто переменные структуры выстроены не по порядку адресов, не так как объявлено. Смотрю в окне в онлайне "Соотнесение входов/выходов". На скрине показано что с этого момента все сдвигается вниз. Те появился лишний 0. Хотя ранее и работало , сделал по другому , сделал объединение структуры с массивом WORD. Привязываю к каналу теперь переменную массива. Все равно все точно так же. Что не так случилось? Или чего то не вижу или какая опция компилятора. Кстати и SIZEOFF показывает размер WritePR больше на 2 слова, 22 против 20? Скрин + ссылка на тест архив проекта
Спасибо!

https://disk.yandex.ru/d/1HqK4cfaj0D5hA

Евгений Кислов
20.12.2023, 15:54
В объявлении структуры нужно использовать атрибут pack_mode.
В объединении укажите размерность массива [0..19] OF WORD
См. п. 1.1.4 - там объяснение вашей ситуации:
https://ftp.owen.ru/CoDeSys3/98_Books/CodesysMemoryManipulation.pdf

Votrj1
20.12.2023, 16:17
Спасибо за наводку!

Formak21
22.12.2023, 12:38
Здравствуйте, имеются модули МВ110 и МУ110 подключенные к контроллеру через преобразователь RTU-TCP(условный MOXA), контроллер программируется через Codesys 3.5 SP16.
Соответственно родные таргеты от Mx110 я использовать не могу, т.к. они работают только в режиме RTU.
Вопрос следующий - Будут ли работать эти модули, если я буду использовать с ними через таргеты от Mx210? Или лучше, в таком случае, использовать их без таргетов?

P.S. Продублировал свой вопрос из раздела по модулям Mx110 т.к. не был уверен, к какому разделу он относится.

Евгений Кислов
22.12.2023, 12:43
Здравствуйте, имеются модули МВ110 и МУ110 подключенные к контроллеру через преобразователь RTU-TCP(условный MOXA), контроллер программируется через Codesys 3.5 SP16.
Соответственно родные таргеты от Mx110 я использовать не могу, т.к. они работают только в режиме RTU.
Вопрос следующий - Будут ли работать эти модули, если я буду использовать с ними через таргеты от Mx210? Или лучше, в таком случае, использовать их без таргетов?

P.S. Продублировал свой вопрос из раздела по модулям Mx110 т.к. не был уверен, к какому разделу он относится.

Добрый день.
Шаблоны Mx210 вам не помогут.
Но вы можете использовать шаблоны Mx110.
См. описание принципа в п. 4.13 (рисунок 4.13.2):
https://ftp.owen.ru/CoDeSys3/11_Docu...odbus_v3.2.pdf

Вместо Modbus Slave COM Port вы можете добавить шаблоны Mx110.

Formak21
22.12.2023, 12:49
Всё понял, огромное спасибо.

Test_driver
27.12.2023, 11:39
Здравствуйте, коллеги!
Подскажите, кто-нибудь имел дело с Драйверами, которые управляются через Modbus и крутят "шаговик" с энкодером(гибрид)?
Есть инструкция (63 стр.), всё на английском, около 8 страниц - одни регистры параметров и настроек.
Собрал стенд на котором пытаюсь "оживить" сие изделие.
Через специализированный китайский софт эл.мотор управляется, не пойму как.

"Фишка" в том, что мотор управляется не по стробам - STEP/DIR, а по команде через Modbus нужное количество импульсов(координата) и возврат "домой"(если нужно).
Пару "веток" видел здесь на форуме поднимали тему, но до реализации - тишина.

МихаилГл
27.12.2023, 11:59
Здравствуйте, коллеги!
Подскажите, кто-нибудь имел дело с Драйверами, которые управляются через Modbus и крутят "шаговик" с энкодером(гибрид)?
Есть инструкция (63 стр.), всё на английском, около 8 страниц - одни регистры параметров и настроек.
Собрал стенд на котором пытаюсь "оживить" сие изделие.
Через специализированный китайский софт эл.мотор управляется, не пойму как.

"Фишка" в том, что мотор управляется не по стробам - STEP/DIR, а по команде через Modbus нужное количество импульсов(координата) и возврат "домой"(если нужно).
Пару "веток" видел здесь на форуме поднимали тему, но до реализации - тишина.

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

Test_driver
27.12.2023, 12:48
Проблема то в чем? Разобраться в модбас и подсказать как подавать команды? Скидывайте документацию...

Именно так! Modbus ! Спасибо, Михаил, что откликнулись!

МихаилГл
28.12.2023, 06:50
Именно так! Modbus ! Спасибо, Михаил, что откликнулись!

Вам как, срочно?
Сами понимаете что наступает...)
Управлять собираетесь с ПЛК с codesys 3.5?

Test_driver
28.12.2023, 09:36
Вам как, срочно?
Сами понимаете что наступает...)
Управлять собираетесь с ПЛК с codesys 3.5?

Да, понимаю, подрядные работы и оплата неизбежна. :)
Понимаю, что общение со мной, требует терпения со стороны Мастера(сенсея), требует времени и молока (за вредность, как в СССР) :)
Да, с Codesys 3.5, с СПК.
Время для меня не имеет значения, имеет значение - жизнь!

Ввёл такую структуру, согласно инструкции, мотор ожил, но пока хаотично(прямо в каналах Codesys ввожу Биты)

01 06 62 00 00 01 57 B2 Set PR0 mode to absolute position mode (изменил)
01 06 62 01 00 03 87 B3 Set PR0 position high
01 06 62 02 0D 40 32 D2 Set PR0 position low
01 06 62 03 02 58 66 E8 Set PR0 speed value
01 06 62 04 00 32 56 66 Set PR0 acceleration
01 06 62 05 00 32 07 A6 Set PR0 deceleration velocity
01 06 60 02 00 10 37 C6 Trigger PR0 motion Send when you need to stop:
01 06 60 02 00 40 37 FA Emergency stop

Хотя первая строка другая: 01 06 62 00 00 00 01 57 B2 -здесь контрольный CRC не тот, а вот так правильнее 01 06 62 00 00 01 57 B2 (без октета лишних нулей).

Вопрос: почему в инструкции заведомо неправильно (именно в первой строке много раз в примерах)? Или я что-то упустил? С Modbus`ом знаком как медведь с музыкой.

МихаилГл
28.12.2023, 09:47
Да, там много опечаток. И этот косяк мне тоже в глаза бросился.
Тут тоже запятую забыли... 72668
Да я смотрю вы справляетесь.

Но если подключитесь как к модбас устройству, то достаточно только адресами и тем, что в них пишется, оперировать, остальное (CRC, формирование строки запроса и пр. codesys сам делать должен).

МихаилГл
28.12.2023, 09:54
С модбасом все до невозможности просто:
01 06 62 00 00 01 57 B2
01 - адрес железяки
06 - команда записи (на чтение регистров 03)
62 00 - адрес первого регистра, куда писать или с какого читать
00 01 - для команды записи 06 это то число, которое надо записать в регистр 62 00 (0062 если правильно, сначала младший потом старший)
00 01 - для команды чтения 03 это то число читаемых регистров начиная с 62 00
57 B2 - контрольная сумма для модбас протокола

И для вас главное это: 01 06 62 00 00 01 57 B2

Test_driver
28.12.2023, 10:10
В принципе "циферки" я гоняю в канале, мне не понятна сама политика управления, скажем - Homing, у меня мотор ушёл в бесконечное кручение, причём на другой скорости.
В регистре 0x6200 есть тоже бит на Homing, он тоже сработал.
Как понять абсолютное и относительно позиционирование? Как выставить точку Zero?
Энкодер на моторе 1000, в драйвере 4000, но написано в инструкции CPR=4*PPR (нужно ли перезаписывать?) . Проблема с терминологией. Что к чему?
Понял, что там есть Триггеры - заранее указанные координаты, как их "рулить"? Хотя с первым бы разобраться - Path0.
Вопросов много, программная часть на втором плане(сижу в каналах, на экран вывожу пока только контрольные регистры), понять бы принципы, заложенные в "железке".

В регистре 0x6002 ввожу в канале в десятичном виде 64(0x40) - стоп, 16 (0x10) - старт, 32(0x20) - Homing, 33(0x21) - сброс(типа выполнено).

МихаилГл
28.12.2023, 10:15
В принципе "циферки" я гоняю в канале, мне не понятна сама политика управления, скажем - Homing, у меня мотор ушёл в бесконечное кручение, причём на другой скорости.
В регистре 0x6200 есть тоже бит на Homing, он тоже сработал.
Как понять абсолютное и относительно позиционирование? Как выставить точку Zero?
Энкодер на моторе 1000, в драйвере 4000, но написано в инструкции CPR=4*PPR (нужно ли перезаписывать?) . Проблема с терминологией. Что к чему?
Понял, что там есть Триггеры - заранее указанные координаты, как их "рулить"? Хотя с первым бы разобраться - Path0.
Вопросов много, программная часть на втором плане(сижу в каналах, на экран вывожу пока только контрольные регистры), понять бы принципы, заложенные в "железке"

Команды как я понимаю надо выполнять последовательно, это типа G-code, или как там правильно.
И если это CNC, то сначала нужно настроить постоянные, координаты дома и пр. Датчики завести... Он у вас ищет дом по концевому или по энкодеру... Это наверное от настроек зависит. Тут надо курить мануал...

Вот, например, настройки дискретных входов: 72670

Test_driver
28.12.2023, 10:54
Да, ввожу три скорости(старт, крейсерская,стоп), пики(от балды - 0х6202), режим позиционирования (0х6200), пауза между командами и старт по 0х6002 (Ctrl + F7).
Как искать дом по энкодеру? Подскажите? В группе Pr8.xx есть регистры отслеживания пройденных пиков. Как вернуть домой? Не получается, куча режимов и принципов "Домой".

Структуру набивал по Pr9.00, придерживался (картинка)/ CN3(SI1-SI7) не использовал(Pr4).

МихаилГл
28.12.2023, 11:14
Да, ввожу три скорости(старт, крейсерская,стоп), пики(от балды - 0х6202), режим позиционирования (0х6200), пауза между командами и старт по 0х6002 (Ctrl + F7).
Как искать дом по энкодеру? Подскажите? В группе Pr8.xx есть регистры отслеживания пройденных пиков. Как вернуть домой? Не получается, куча режимов и принципов "Домой".

Структуру набивал по Pr9.00, придерживался (картинка)/ CN3(SI1-SI7) не использовал(Pr4).

Если бы я знал... Вам надо сначала все читаемые переменные вывести на отображение в визуализации, и по одной команде проверять. Я с CNC имел дело раз, когда собирал китайский станок 4 года назад из отдельных комплектующих. А тут модбас адаптированная штука, явно рассчитана на профессионалов в создании станков. Там столько настроек, и много взаимосвязанных. Только по одной команде проверять... Больше никак.

И команды скорее надо посылать разово, а не сразу все по Ctrl + F7...

Test_driver
28.12.2023, 11:26
Да, сначала записываю по одной, вижу их на экране (считываю), по Ctrl + F7 последняя на 0х6002 для старта.

Ну, что же, придётся стать профессионалом. Буду информировать о продвижении, если не против. Сниму видео и напишу свой мануал, так как вижу, что тема ещё никем толком не освоена. Все крутят "шаговики" Ардуинками и из Math3, домашние варианты. А я сделаю промышленный вариант.
Освоим станкостроение, товарищи! Забыл добавить - c аппаратурой от Owen!
Только благодаря Owen`у я вошёл в этот дивный мир "программирования микроконтроллеров" и этот путь долгий и тернистый!

Test_driver
28.12.2023, 13:44
Пришла мысль, пока сижу на работе.
Моя ошибка, возможно, в Hominge, заключается в том, что я отправляю Домой без изменения направления вращения (0: CW,1: CCW) и мотор начинает "идти Домой" через 65535 (предельная позиция), поэтому кажется, что бесконечно.
Вечером и ночью буду тестить.
Драйвер измеряет напряжение, индуктивность обмоток, пиковые токи и кучу всего интересного можно отобразить.

Юрий_66
07.01.2024, 23:46
Здравствуйте, подскажите пожалуйста. Рабочий проект, СПК110, есть исходник. Требуется подключить контролер LMV5х + AZL5хх горелки котла по modbus rtu. Протокол, насколько я понимаю, нестандартный - CRC передаётся младшим байтом вперёд. 72807. https://pikinno.com/upload/iblock/e38/e380fa1e3f0252cb68783f709c37561c.pdf. Как правильно организовать работу с ним. Может есть отработанные решения? Поиском не удалось ничего найти. В исходнике СПК дописываю третий порт подключаю КТР-121 - всё работает. Самостоятельно победить нестандартный протокол пока не получается.

melky
08.01.2024, 09:38
В Modbus CRC так же передается младшим байтом вперед.

Если примеры запроса и ответа кинуть в парсер, то видно, что в запросе и ответе CRC по разному введено. Ответ сразу парсится как есть. А в запрос парсится если поменять местами байты CRC.

CRC-16/MODBUS 0xA024 - и если вбить запрос без CRC в калькулятор CRC то для Modbus мы получим именно так, а не 24A0 как в примере из доки на прибор

Юрий_66
08.01.2024, 11:40
Вот скрин "OPC Server". 72812 На нём видно что CRC передаётся старшим байтом вперёд =24А0=, а нужно =А024=.

Вот скрин прослушивания линии "Terminal V1.9", 72813 Здесь видим тоже самое.

Юрий_66
08.01.2024, 11:58
В калькуляторе вижу 72814

А OPC Server передаёт и Terminal V1.9 это подтверждает 72815

Вопрос: почему в описании протокола и в калькуляторе CRC младшим - байтом вперёд, а в OPC Server - старшим байтом вперёд?

kondor3000
08.01.2024, 12:22
В калькуляторе вижу
А OPC Server передаёт и Terminal V1.9 это подтверждает
Вопрос: почему в описании протокола и в калькуляторе CRC младшим - байтом вперёд, а в OPC Server - старшим байтом вперёд?

При передаче по Модбас байты и регистры могут меняться местами.

melky
08.01.2024, 12:22
еще раз, в калькулятор и запрос и ответ и вы поймете, что в документации ошибка. ошибка в данных CRC
а потом правильные посылки в парсер Modbus и увидите, что запрос вполне адекватный протоколу.

Юрий_66
08.01.2024, 13:26
Я правильно понял, что OPC Server работает не по протоколу?

Можно ли в таком случае заставить его передавать запрос с CRC младшим байтом вперёд?

Юрий_66
08.01.2024, 13:39
еще раз, в калькулятор и запрос и ответ и вы поймете, что в документации ошибка. ошибка в данных CRC
а потом правильные посылки в парсер Modbus и увидите, что запрос вполне адекватный протоколу.

В ответе так же CRC идёт младшим байтом вперёд. 72818

Предполагаю что это не ошибка, а протокол от "SIEMENS". И для работы с LMV+AZL его надо выполнять.

МихаилГл
08.01.2024, 13:48
В ответе так же CRC идёт младшим байтом вперёд. 72818

Предполагаю что это не ошибка, а протокол от "SIEMENS". И для работы с LMV+AZL его надо выполнять.

Если не получается как с модбас работать, то придётся писать общение самостоятельно как работу через сокет и прочее. Если просто считывать данные, то там проблем нет, а хотите полноценное общение со всеми плюсами... То придётся руками всё описывать в программе.

Я при общении с нестандартными протоколами жёстко прописываю посылку с требуемой CRC, а при получении ответа не проверяю на правильность. Иначе это затянется на............

kondor3000
08.01.2024, 14:00
Я правильно понял, что OPC Server работает не по протоколу?

Можно ли в таком случае заставить его передавать запрос с CRC младшим байтом вперёд?

ОРС сервер работает по протоколу, но при передаче по Модбас, не важно куда, байты и регистры могут поменяться местами, для этого и существует перестановка регистров и байт
( как правило этим занимается Мастер сети), а программист настраивает ( программирует) как ему надо.

melky
08.01.2024, 14:12
Юрий_66 вас не удивляет, что в ответе CRC в правильной последовательности, а в запросе в неправильной ПРИ ОДИНАКОВОМ КОДЕ РАСЧЕТА?

я про документацию, которую составляли люди... Адрес устройства у вас 11, что вы мучаете OPC сервер и все остальное?

Юрий_66
08.01.2024, 14:54
Теоретически - понятно. А практически пока не получается реализовать.
С КТР-121 всё получилось нормально стандартными средствами. КТР опрашивается и на СПК выводятся данные.
Всем спасибо за ответы. Буду разбираться.

kondor3000
08.01.2024, 16:40
Теоретически - понятно. А практически пока не получается реализовать.
С КТР-121 всё получилось нормально стандартными средствами. КТР опрашивается и на СПК выводятся данные.
Всем спасибо за ответы. Буду разбираться.

Пример функции перестановки байт в регистре, точно так же можно например, переставить регистры (байты) в переменной FLOAT (только тип переменных поменять)


FUNCTION Sw_Byte : WORD //выход функции с переставленными Byte
VAR_INPUT
wIn : WORD ; //входная переменная типа Word
END_VAR
VAR
pInput : POINTER TO ARRAY[0..1] OF BYTE; // вспомогательные переменные
pOutput : POINTER TO ARRAY[0..1] OF BYTE;
END_VAR
__________________________________________________ __________________________

pInput :=ADR(wIn);
pOutput := ADR( Sw_Byte);

pOutput^[ 0 ] := pInput^[ 1 ]; // Перестановка BYTE местами
pOutput^[ 1 ] := pInput^[ 0 ];

МихаилГл
08.01.2024, 18:38
Пример функции перестановки байт в регистре, точно так же можно например, переставить регистры (байты) в переменной FLOAT (только тип переменных поменять)


FUNCTION Sw_Byte : WORD //выход функции с переставленными Byte
VAR_INPUT
wIn : WORD ; //входная переменная типа Word
END_VAR
VAR
pInput : POINTER TO ARRAY[0..1] OF BYTE; // вспомогательные переменные
pOutput : POINTER TO ARRAY[0..1] OF BYTE;
END_VAR
__________________________________________________ __________________________

pInput :=ADR(wIn);
pOutput := ADR( Sw_Byte);

pOutput^[ 0 ] := pInput^[ 1 ]; // Перестановка BYTE местами
pOutput^[ 1 ] := pInput^[ 0 ];


Так у него проблема не в том, что данные перевернуты, а в то, что перевернуты данные в самом протоколе в CRC. А это внутренний механизм самого протокола, и ТС просит показать, где в настройках это перевернуть, если это есть. А вы ему предлагаете функцию для переворачивания данных в слове. Как он её воткнет во внутренний протокол кодесиса?

Существует вероятность, что это опечатка или ТС ошибся, но тут 50 на 50.

Cs-Cs
08.01.2024, 18:45
Перевёрнутые байты в CRC стали Китайцы часто делать! Несколько раз уже это встречал: обычный Modbus, но CRC перевёрнуто!

melky
09.01.2024, 05:54
Да ничего там на перевёрнуто, простая ошибка документации, все должно быть ровно.

МихаилГл
09.01.2024, 06:31
Да ничего там на перевёрнуто, простая ошибка документации, все должно быть ровно.

Вполне возможно что он просто не задал адрес устройству... 11, как уже писали...
По крайней мере можно было б проверить простым не модбас парсером, геркулесом, например.

ShivA
13.01.2024, 18:34
Здравствуйте.
Столкнулся с проблемой, которую не понимаю как решать. Суть в следующем: Имеем СПК107 m01 + переферия из разных внешних модулей. Для организации обмена с SCADA добавил ModbusTCP_Slave_Device. Чтобы holding регистры и coils стали доступны для изменения из программы контроллера, устанавливаю галочку "Запись" в настройках компонента Modbus TCP Slave Device. При компиляции возникает ошибка -
"[ERROR] Internal error:System.IndexOutOfRangeException: Индекс находился вне границ массива. в _3S.CoDeSys.DeviceObject.DoubleAddressChecker.Chec kByte(Int64 lStartBit)................
Компиляция завершена -- 1 ошибок, 95 предупреждений : загрузка невозможна"
галочку "Запись" убираю, компиляция проходит без ошибок, но теряю возможность записыватьть в регистры со стороны slave-устройства. Как решить данную проблему? Спасибо заранее.

Евгений Кислов
13.01.2024, 19:23
Здравствуйте.
Столкнулся с проблемой, которую не понимаю как решать. Суть в следующем: Имеем СПК107 m01 + переферия из разных внешних модулей. Для организации обмена с SCADA добавил ModbusTCP_Slave_Device. Чтобы holding регистры и coils стали доступны для изменения из программы контроллера, устанавливаю галочку "Запись" в настройках компонента Modbus TCP Slave Device. При компиляции возникает ошибка -
"[ERROR] Internal error:System.IndexOutOfRangeException: Индекс находился вне границ массива. в _3S.CoDeSys.DeviceObject.DoubleAddressChecker.Chec kByte(Int64 lStartBit)................
Компиляция завершена -- 1 ошибок, 95 предупреждений : загрузка невозможна"
галочку "Запись" убираю, компиляция проходит без ошибок, но теряю возможность записыватьть в регистры со стороны slave-устройства. Как решить данную проблему? Спасибо заранее.

Добрый день.
Выложите простейший проект, в котором я смогу повторить вашу проблему.

Test_driver
15.01.2024, 10:21
Простой вопрос к опытным программистам.
Поменять "слова", типа xSwapWord, можно только через "Функция SWAP_DATA" (раздел 5.8.5 "CODESYS V3.5 Настройка обмена по протоколу Modbus", версия 3.2) ?
Или есть другие инструменты?

Евгений Кислов
15.01.2024, 10:39
Простой вопрос к опытным программистам.
Поменять "слова", типа xSwapWord, можно только через "Функция SWAP_DATA" (раздел 5.8.5 "CODESYS V3.5 Настройка обмена по протоколу Modbus", версия 3.2) ?
Или есть другие инструменты?

Как минимум есть еще варианты с использованием указателей (собственно, этот вариант и используется внутри SWAP_DATA) и объединений.

Test_driver
15.01.2024, 11:17
Как минимум есть еще варианты с использованием указателей (собственно, этот вариант и используется внутри SWAP_DATA) и объединений.

Благодарю за оперативность!
То есть, с помощью Указателей можно "вырвать" 1 байт (по необходимости) из 4-х и его использовать.
Ну, Указатели для меня ещё пока "тёмный лес". Направление "пинка" понял, будем самообразоввываться.
Слышал про указатели в С,С++, говорят если поймёшь - сдал сопромат.

Welldi
26.01.2024, 20:11
Добрый вечер. Чего то я немного подзатупил.
Имеется панель СПК110. На ней реализован интерфейс.
А так же есть внешняя панель стороннего производителя. Допустим на экране СПК110 создаю тумблер.
Привязываю к нему переменнную. И эту же переменную привязываю к модбасу (спк110 в роли слэйва).
В итоге управление возможно толькО с внешней панели. А тумблер на HMI СПК110 перестает работать. Причем даже если откинуть провода.

Подскажите как тут быть? Или надо как то разделять переменные?

Евгений Кислов
26.01.2024, 20:17
Добрый вечер. Чего то я немного подзатупил.
Имеется панель СПК110. На ней реализован интерфейс.
А так же есть внешняя панель стороннего производителя. Допустим на экране СПК110 создаю тумблер.
Привязываю к нему переменнную. И эту же переменную привязываю к модбасу (спк110 в роли слэйва).
В итоге управление возможно толькО с внешней панели. А тумблер на HMI СПК110 перестает работать. Причем даже если откинуть провода.

Подскажите как тут быть? Или надо как то разделять переменные?

Добрый день.
Чтобы иметь возможность изменять значения holding-регистров слэйва СПК из его программы - нужно в настройках слэйва установить галочку Запись.
https://youtu.be/Q3hqQlqcESo?t=5502

Welldi
26.01.2024, 20:35
Галочка стоит. А как быть с дискретными параметрами.
Катушками? Из модбаса управления идет хорошо. Но оно как будто имеет приоритет над HMI СПК110.
Даже если физически провод отключен.
Но как только переменную отвязываю от модбаса-тумблер на HMI СПК начинает работать

Welldi
26.01.2024, 20:36
Попробовал привязать к отдельному биту регистру временного хранения.
Ситуация та же(

Евгений Кислов
26.01.2024, 20:37
Попробовал привязать к отдельному биту регистру временного хранения.
Ситуация та же(

Cвяжитесь со мной в понедельник утром через telegram (в подписи) - проконсультируем вас и всё подскажем.

Welldi
26.01.2024, 20:43
В понедельник будет уже поздно) меня найдут где-то в лесу)

Vadim_S
09.02.2024, 12:27
Всем доброго времени суток...

Дано: СПК110 М01, прошивка 2.4.... CODESYS V3.5 SP17 Patch 3 (Win 10)
Создаю новый проект (шаблон SPK1хх)
Добавляю (как в инструкции https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Modbus_v3.2.pdf ) компонент Modbus COM
Затем добавляю к нему дочерний компонент Modbus Master, затем дочерний компонент Modbus Slave..

Дальше по инструкции надо создавать каналы, но в моем интерфейсе про каналы ничего нет :(

Подскажите пожалуйста, что я упустил из виду?

Заранее благодарствую...

ЗЫ: скриншот приложил...

Евгений Кислов
09.02.2024, 12:42
Добрый день. У вас, видимо, при установке CODESYS не установились некоторые плагины.
Для начала предлагаю удалить его и установить заново по инструкции:
https://youtu.be/3KcJWZEVXCg?si=htMczkACHTd9JxOX

twit
09.02.2024, 22:38
Евгений. Здравствуйте.
Не удается решить проблему....
контроллер ПЛК210, среда SP17. Выполняю опрос модулей котловой автоматики BCM 2.0 "Wiesberg" по протоколу ModBus RTU (RS485) стандартными средствами CoDeSys 3.5 без использования библиотек ОВЕН. Мастер сети ПЛК210.
Регистры с разрывами адресного пространства ( опрашиваются 27 регистров. (от 0000 до 0FA2)).
RS485-1 (порт - 5), 9600,N,8,1 _согласно настройкам BCM 2.0.
Рекомендуемые версии компонентов ModBus в соответствии с таблицей А.1 (CDSv3.5_Modbus стр. 191).
ModBusCom - 3.5.16.0
ModBus_Master_COM_Port - 3.5.17.0 (RTU, таймаут: 1000 ms, время между фреймами: 220 ms, Автоперезапуск соединения: включен)
Modbus_Slave_COM - 3.5.16.0 (таймаут ответа: 1000ms)
опрашиваются 27 регистров. (от 0000 до 0FA2)
Если выполнить перезагрузку ПЛК210 при работающих котлах, после перезапуска ПЛК, связи с котлами больше не будет. Приходится и котловые контроллер перезапускать... Странно, котловые модули работают в режиме Slave.

Причина перезагрузки контроллера:
- по каналу RS232 посредством компонента Modem (3.5.17.3001) подключен модем RX608-L4U, на скорости 9600.
Иногда модем "отваливается", лечится перезагрузкой ПЛК210. Причина "отвала" пока не установлена.
Просьба помочь советом.

Евгений Кислов
09.02.2024, 22:52
Добрый день.
В понедельник утром свяжитесь со мной через телеграм (в подписи) и обеспечьте удаленный доступ по AnyDesk к ПК, с которого можно будет подключиться к ПЛК.

Николай Суриков
09.02.2024, 23:46
Евгений. Здравствуйте.
Не удается решить проблему....
...
Причина перезагрузки контроллера:
- по каналу RS232 посредством компонента Modem (3.5.17.3001) подключен модем RX608-L4U, на скорости 9600.
Иногда модем "отваливается", лечится перезагрузкой ПЛК210. Причина "отвала" пока не установлена.
Просьба помочь советом.

Год назад обещали выпустить новую версию компонента с возможностью программной перезагрузки...

Евгений Кислов
09.02.2024, 23:54
Год назад обещали выпустить новую версию компонента с возможностью программной перезагрузки...

Задача до сих пор в наших планах и должна быть реализована в рамках прошивки 3.6.xxxx.xxxx (для ПЛК210-1x и СПК210).

twit
10.02.2024, 20:30
Добрый день.
В понедельник утром свяжитесь со мной через телеграм (в подписи) и обеспечьте удаленный доступ по AnyDesk к ПК, с которого можно будет подключиться к ПЛК.

Евгений. Добрый вечер.
С прямой связью к ПЛК, проблема. ПЛК в столице на объекте, я в Ярославле...
Пока не поедут ребята на пусконаладку, такой возможности, как прямая связь с ПЛК, организовать не получится, к сожалению.
Вопрос: CoDeSys 3.5 Sp17 на ПК подключенного к ПЛК210, Вам не нужен?
Поеду не я. Другой человек. Проекта загруженного в ПЛК, у него нет. ПЛК, в случае правки проекта, шьёт с USB флэшки.

Есть наблюдение, не 100%, однако есть. Что модем начал отваливаться после того как в проекте был задействован интерфейс RS485-1 (5) для связи с котловой автоматикой Wiesberg... Не вижу здесь связи, если честно. Обмен с модемом управляется компонентом MODEM. Связь с котловой автоматикой штатной системой CoDeSys 3.5. Могут ли быть здесь, какие либо накладки?

twit
10.02.2024, 21:00
Евгений. Еще вопрос.
Регистры котловой автоматики опрашиваются в режиме цикла: 100ms, Правильно ли это?
73491
с учетом
ModBus_Master_COM_Port - 3.5.17.0 (RTU, таймаут: 1000 ms, время между фреймами: 220 ms, Автоперезапуск соединения: включен)
Modbus_Slave_COM - 3.5.16.0 (таймаут ответа: 1000ms)

Евгений Кислов
10.02.2024, 21:24
Вопрос: CoDeSys 3.5 Sp17 на ПК подключенного к ПЛК210, Вам не нужен?

Нужен.


Что модем начал отваливаться после того как в проекте был задействован интерфейс RS485-1 (5) для связи с котловой автоматикой Wiesberg... Не вижу здесь связи, если честно

Например - на линию связи начала наводиться помеха от котловой автоматики, которая действует на линию связи с модемом или сам модем.


Регистры котловой автоматики опрашиваются в режиме цикла: 100ms, Правильно ли это?

Вряд ли это на что-то влияет. С учетом ваших настроек запросы отправляются не раз в 100 мс, а существенно реже.

На мой взгляд, интереснее это:


Если выполнить перезагрузку ПЛК210 при работающих котлах...

А если при неработающих? Или в этом Wiesberg без питания и опросить их невозможно в принципе?

kondor3000
11.02.2024, 12:08
Евгений. Еще вопрос.
Регистры котловой автоматики опрашиваются в режиме цикла: 100ms, Правильно ли это?
с учетом
ModBus_Master_COM_Port - 3.5.17.0 (RTU, таймаут: 1000 ms, время между фреймами: 220 ms, Автоперезапуск соединения: включен)
Modbus_Slave_COM - 3.5.16.0 (таймаут ответа: 1000ms)

Читать можно и циклом 100 -1000ms, вопрос Как вы записываете? Тоже циклом?
Установлено ли Вкл 2 ( всегда в задаче цикла шины) ?

twit
12.02.2024, 20:24
Читать можно и циклом 100 -1000ms, вопрос Как вы записываете? Тоже циклом?
Установлено ли Вкл 2 ( всегда в задаче цикла шины) ?

Проверил. Нет, не было установлено. Поставил Вкл. 2 (всегда в цикле шины).
kondor3000 - Спасибо за помощь!
Буду надеяться что вопрос решиться удачно)

Юрий_66
21.02.2024, 15:18
Если не получается как с модбас работать, то придётся писать общение самостоятельно как работу через сокет и прочее. Если просто считывать данные, то там проблем нет, а хотите полноценное общение со всеми плюсами... То придётся руками всё описывать в программе.

Я при общении с нестандартными протоколами жёстко прописываю посылку с требуемой CRC, а при получении ответа не проверяю на правильность. Иначе это затянется на............

Добрый день.
По вашему совету, жёстко прописал посылку и ...
Не могу добиться ответа от LMV5.. (Причём с другими устройствами, ОВЕН КТР-121. Частотники AD800 и VM1000, всё работает. )

Отправляю запрос точно по инструкции:
CRC младшим байтом вперёд - нет ответа,
CRC старшим байтом вперёд - нет ответа,
все байты младшим битом вперёд - нет ответа,
все байты старшим битом вперёд - нет ответа.

Вопрос - что я делаю не так?

МихаилГл
21.02.2024, 15:22
Добрый день.
По вашему совету, жёстко прописал посылку и ...
Не могу добиться ответа от LMV5.. (Причём с другими устройствами, ОВЕН КТР-121. Частотники AD800 и VM1000, всё работает. )

Отправляю запрос точно по инструкции:
CRC младшим байтом вперёд - нет ответа,
CRC старшим байтом вперёд - нет ответа,
все байты младшим битом вперёд - нет ответа,
все байты старшим битом вперёд - нет ответа.

Вопрос - что я делаю не так?

Попробуйте ваш запрос послать сторонней утилитой, Геркулесом, например. Там и увидите, посылает ли устройство ответ, или вы ошиблись в подсчёте контрольной суммы.

Юрий_66
21.02.2024, 15:57
CRC не проверяю, + смотрю в буфере. Там нули.

МихаилГл
21.02.2024, 16:05
CRC не проверяю, + смотрю в буфере. Там нули.

Скиньте инструкцию и документацию по протоколу. А то в инете только про can интерфейс и про 232 порт.

Юрий_66
21.02.2024, 21:44
https://pikinno.com/upload/iblock/e38/e380fa1e3f0252cb68783f709c37561c.pdf

Там и есть только 232 порт. (2 порта)
Режимы: ПК, eBUS, MODBUS.

Юрий_66
21.02.2024, 21:54
73779
CRC младшим байтом вперёд - нет ответа
CRC старшим байтом вперёд - нет ответа

Юрий_66
21.02.2024, 22:00
73780
Непонятно, что значит = "сначала передается наименьший значащий бит (LSB)."
Пробовал передавать запрос:
все байты младшим битом вперёд - нет ответа
все байты старшим битом вперёд - нет ответа.

Может надо передавать только данные младшим битом вперёд, а не весь запрос?
Там написано про передачу данных.

МихаилГл
22.02.2024, 04:33
73779
CRC младшим байтом вперёд - нет ответа
CRC старшим байтом вперёд - нет ответа

Щас посмотрю что там такое...

МихаилГл
22.02.2024, 04:42
73780
Непонятно, что значит = "сначала передается наименьший значащий бит (LSB)."
Пробовал передавать запрос:
все байты младшим битом вперёд - нет ответа
все байты старшим битом вперёд - нет ответа.

Может надо передавать только данные младшим битом вперёд, а не весь запрос?
Там написано про передачу данных.

Проверил парсером https://rapidscada.net/modbus/ и в примере посылки там ошибка в CRC похоже, так как ответ нормально спарсился.
Какой запрос посылаете?

73781

А как вы соединили устройство с ПЛК? У него нет прямого 485, только через преобразователь/конвертер, если я правильно понял. Либо напрямую на 232 порт ПК.

73782

Юрий_66
25.02.2024, 10:12
Подключаюсь шнурком USB - RS232.73884

Пробовал с лицевой стороны СОМ1 и с задней стороны СОМ2 на двух контролерах LMV5..
В режимах: ПК, eBUS, MODBUS.
Ответа нет.
В инструкции написано, что LMV не отвечает на неправильные запросы!
Отсюда делаю вывод, что-то не так с запросом.

Юрий_66
25.02.2024, 10:26
Есть ещё LMV2.. и LMV3.. но у них порт 232 ТТЛ.
На днях попробую до этих "достучаться".

МихаилГл
25.02.2024, 11:35
Вы чего то не договариваете. Вы к ПЛК его вообще ещё не подключали?
В инструкции написано что com 1 и com 2 не работают одновременно. Вы их хоть настроили?

Чем вы их опрашиваете, какой утилитой? Только не говорите что через кодесис по усб...

Юрий_66
25.02.2024, 22:47
Нет не одновременно, а по очереди. Настройки в соответствии с инструкцией.
Совершенно верно кодесисом через USB.
ТРМы, КТР-121, частотники AD800 и VM1000. Всё это работает на ноуте с кодесисом через шнурок USB - RS485.
На КТР-121 проверял связку USB - RS232 + RS232 - RS485, тоже работает.
С ними проще, они отвечают кодом 80 на не корректные запросы, а LMV отвечает только на корректные запросы.
Вы хотите сказать, что LMV "не хочет" отвечать кодесису?

МихаилГл
25.02.2024, 22:57
Вы Геркулесом для начала попробуйте.

Т.е. у вас ПЛК подключён к этой штуке через усб? И другие модбас устройства тоже через усб свисток 485ый?

Юрий_66
26.02.2024, 10:14
Всё перечисленные выше устройства,кроме LMV , работают с панели СПК110 и с кодекса со шнурком.

МихаилГл
26.02.2024, 10:41
Всё перечисленные выше устройства,кроме LMV , работают с панели СПК110 и с кодекса со шнурком.

А зачем такое городить, если у СПК есть модбас рту на борту... Или я чего то не знаю...

А вам для начала советую подключиться к этому устройству через преобразователь к компьютеру (ПК) , а не ПЛК. И пробовать опросить Геркулесом. Больше ничего подсказать не могу.

ETL_Роман
26.02.2024, 12:16
Добрый день
Подскажите, можно ли сделать так что бы контроллер (ПЛК 210) сам был в качестве сервера SNMP И например сам себя опросил?

Евгений Кислов
26.02.2024, 12:26
Добрый день
Подскажите, можно ли сделать так что бы контроллер (ПЛК 210) сам был в качестве сервера SNMP И например сам себя опросил?

Добрый день.
Да, можно.

ETL_Роман
26.02.2024, 12:31
Добрый день.
Да, можно.

Подскажите где прочитать о том как это сделать

Евгений Кислов
26.02.2024, 12:36
Подскажите где прочитать о том как это сделать

https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Snmp_v2.1.pdf

ETL_Роман
26.02.2024, 17:13
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Snmp_v2.1.pdf

С Manager я справился, опросив модуль как было указано в pdf
C Агентом вроде разобрался, но при опросе с помощью приложения ManageEngine MibBrowser не получается прочитать данные.
ПЛК подключен через WAN, не знаю надо или нет, но я открыл порт 161 в настройках NAT, но все равно получаю ошибку TimedOUT
73908
https://disk.yandex.ru/d/sJ0dxL2ZZAtaeQ ссылка на проект
пробовал сначала OPAQUE тип данных, потом как в примере и STRING и Unsigned32