PDA

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



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

Евгений Кислов
16.11.2020, 17:25
С опроса шлюза другим мастером, чтобы удостовериться в том, что там и правда не нули.

Максим Ульянов
16.11.2020, 17:30
через собственный вебитерфейс видно что там не нули)

Евгений Кислов
16.11.2020, 18:01
Вопрос же не в том, что отображается в web-интерфейсе - а в том, что лежит в регистрах Modbus.

Максим Ульянов
16.11.2020, 18:08
там отображается в web-интерфейсе - то что лежит в регистрах Modbus. но мысль вашу понял завтра попробую заглянуть на него с другой стороны

Gatling
19.11.2020, 23:29
Всем добрый вечер. Нужно осуществить подключение сканера штрихкодов посредством Ethernet IP к ПЛК 210. Столкнулся с проблемой. При создании в проекте раздела Ethernet, и последующего добавления устройства Ethernet IP Scanner, и далее девайся, после уточнения все айпи адресов и прочего, запускаю онлайн и в разделе Ethernet IP Scanner оранжевый статус и сообщение "Лицензия некорректна или отсутствует; запущен демо-режим. Как это исправить? И собственно вопрос, из-за данного сообщения может не получиться обнаружить сканер?

Евгений Кислов
20.11.2020, 09:18
Всем добрый вечер. Нужно осуществить подключение сканера штрихкодов посредством Ethernet IP к ПЛК 210. Столкнулся с проблемой. При создании в проекте раздела Ethernet, и последующего добавления устройства Ethernet IP Scanner, и далее девайся, после уточнения все айпи адресов и прочего, запускаю онлайн и в разделе Ethernet IP Scanner оранжевый статус и сообщение "Лицензия некорректна или отсутствует; запущен демо-режим. Как это исправить? И собственно вопрос, из-за данного сообщения может не получиться обнаружить сканер?

Добрый день.
Наши контроллеры не содержат лицензию для протокола EtherNet/IP - собственно, об этом и говорит сообщение.
На Github есть библиотека - можете попробовать настроить обмен через нее:
https://github.com/NothinRandom/CoDeSys_EIP

VladGC
20.11.2020, 10:39
Добрый день.
Наши контроллеры не содержат лицензию для протокола EtherNet/IP - собственно, об этом и говорит сообщение.
На Github есть библиотека - можете попробовать настроить обмен через нее:
https://github.com/NothinRandom/CoDeSys_EIP
Добрый день!
А в теории, как можно добавлять лицензии, если что то понадобится?
Вот так?: Либо цифровой ключ либо usb
https://www.codesys.com/the-system/licensing.html

Евгений Кислов
20.11.2020, 11:00
Добрый день!
А в теории, как можно добавлять лицензии, если что то понадобится?
Вот так?: Либо цифровой ключ либо usb
https://www.codesys.com/the-system/licensing.html

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

Gatling
23.11.2020, 14:01
Добрый день.
Наши контроллеры не содержат лицензию для протокола EtherNet/IP - собственно, об этом и говорит сообщение.
На Github есть библиотека - можете попробовать настроить обмен через нее:
https://github.com/NothinRandom/CoDeSys_EIP

Там библиотека под контроллеры Allen Bradley. А если купить лицензию на использование протокола Ethernet/IP в Codesys, возможно будет настроить обмен со сканером через ПЛК 210?

Евгений Кислов
23.11.2020, 14:09
Там библиотека под контроллеры Allen Bradley. А если купить лицензию на использование протокола Ethernet/IP в Codesys, возможно будет настроить обмен со сканером через ПЛК 210?

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

Gatling
23.11.2020, 14:51
Вы можете и так проверить, подходит ли она вам - без лицензии доступен триальный период - полчаса с момента запуска CODESYS.

Т.е. при статусе "Лицензия некорректна или отсутствует; запущен демо-режим" Этот раздел полностью функционирует? Просто у меня он не находит сканер, хотя все адреса корректно указаны.

Евгений Кислов
23.11.2020, 14:53
Т.е. при статусе "Лицензия некорректна или отсутствует; запущен демо-режим" Этот раздел полностью функционирует? Просто у меня он не находит сканер, хотя все адреса корректно указаны.

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

Евгений Кислов
24.11.2020, 14:50
Добрый день!
А в теории, как можно добавлять лицензии, если что то понадобится?
Вот так?: Либо цифровой ключ либо usb
https://www.codesys.com/the-system/licensing.html

Я уточнил - использование доп. лицензируемых компонентов в данный момент у нас не поддерживается.

fatlortroll
11.12.2020, 14:32
Для ModbusTCP_Slave при привязке переменной к %QWx (Modbus Input Registers) нет возможности изменить её "снаружи" по интерфейсу, а при привязке к %IWx (Modbus Holding Registers) нет возможности менять переменную из программы.

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

CoDeSys V3.5 SP14 Patch 3+ (32bit)
СПК107 version 3.5.14.34
OwenTargets v 3.5.14.3010

Евгений Кислов
11.12.2020, 14:33
Для ModbusTCP_Slave при привязке переменной к %QWx (Modbus Input Registers) нет возможности изменить её "снаружи" по интерфейсу, а при привязке к %IWx (Modbus Holding Registers) нет возможности менять переменную из программы.

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

CoDeSys V3.5 SP14 Patch 3+ (32bit)
СПК107 version 3.5.14.34
OwenTargets v 3.5.14.3010

Используйте MB_TcpSlave из библиотеки OwenCommunication - там можно менять holding-регистры из программы контроллера.

fatlortroll
11.12.2020, 14:41
Спасибо. В общем, как я понял, поставляемые с CoDeSys "стандартные" библиотеки лучше не использовать. Что-ж, будем строить велосипеды.

Cs-Cs
11.12.2020, 16:28
fatlortroll Не совсем так. Стандартные - они на то и стандартные, что заточены на "натыркать мышкой, и всё заработает для стандартной задачи".
Я так, как Евгений советует, вообще ИП320ую подключал на днях, баловался. Тоже через OCL, и с панелью у меня как раз двойной обмен и получился: ПЛК - Slave, панель - Master. ПЛК на панель передаёт данные измерений, а от панели получает инфу о нажатиях кнопок.

RV9WFJ
12.12.2020, 05:46
Спасибо. В общем, как я понял, поставляемые с CoDeSys "стандартные" библиотеки лучше не использовать. Что-ж, будем строить велосипеды.
Стандартные они на то и стандартные, что стандарт соблюдают. Вы сначала посмотрите что там в стандарте ModBus на счет записи. А потом про велосипеды вспоминайте.

SemAndr
16.12.2020, 10:31
Добрый день. Заметил интересную особенность. Если мы перебрасываем данные с одного порта на другой и при этом никак не работаем с ними в программе, то физически данные не уходят на второй порт, в программе изменения отображаются, а по факту данные не изменяются. Например, на одном порту у нас своя сеть опрашиваемых устройств, нам необходимо с ними работать, и дополнительно, обеспечить чтение данных верхней АСУ. Некоторые данные мы не модифицируем и не обрабатываем, а просто настраиваем переменные из одного порта в другой. В этом случае по второму порту необработанные данные никак изменяться не будут.

Евгений Кислов
16.12.2020, 10:44
Добрый день. Заметил интересную особенность. Если мы перебрасываем данные с одного порта на другой и при этом никак не работаем с ними в программе, то физически данные не уходят на второй порт, в программе изменения отображаются, а по факту данные не изменяются. Например, на одном порту у нас своя сеть опрашиваемых устройств, нам необходимо с ними работать, и дополнительно, обеспечить чтение данных верхней АСУ. Некоторые данные мы не модифицируем и не обрабатываем, а просто настраиваем переменные из одного порта в другой. В этом случае по второму порту необработанные данные никак изменяться не будут.

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

SemAndr
16.12.2020, 11:33
Добрый день.
Использовать контроллер в качестве шлюза между полевыми устройствами и системной верхнего уровня, безусловно, можно.
Что происходит в вашем конкретно случае - нельзя сказать, не видя проекта.

Архив проекта больше 50 Мб. Не получается подгрузить. Скинул на Ядиск. ССылка - https://yadi.sk/d/zhDl8C3-GX5_NA. Данные берутся с M7051_2A14. Выдаются наружу 27 слово. Сейчас сделал в главной программе записывание переменной, а уже записанную переменную складываю в выходной буфер. До этого в выходной буфер писал переменную, которая считывалась с M7051_2A14.

Евгений Кислов
16.12.2020, 11:50
Архив проекта больше 50 Мб. Не получается подгрузить. Скинул на Ядиск. ССылка - https://yadi.sk/d/zhDl8C3-GX5_NA. Данные берутся с M7051_2A14. Выдаются наружу 27 слово. Сейчас сделал в главной программе записывание переменной, а уже записанную переменную складываю в выходной буфер. До этого в выходной буфер писал переменную, которая считывалась с M7051_2A14.

Для начала на вкладке, где вы привязываете переменные к слэйву (Modbus_Serial_Output) для параметра Всегда обновлять переменные установите значение Вкл. 2 (всегда в задаче цикла шины).

SemAndr
16.12.2020, 11:56
Для начала на вкладке, где вы привязываете переменные к слэйву (Modbus_Serial_Output) для параметра Всегда обновлять переменные установите значение Вкл. 2 (всегда в задаче цикла шины).

Понял. Спасибо. Попробую. Во время отладки подключался к контроллеру через Кодесис и смотрел состояние переменной в Modbus_Serial_Output во вкладке соотнесение входов/выходов. Там переменная менялась в зависимости от считанного значения. А в устройстве, которым считывали данные не менялись. Попробуем на следующем проекте. Возможно, причина в этом. Спасибо.

Алексей Караваев
11.01.2021, 16:05
Всем доброго времени суток. Есть небольшая проблема, нужно управлять сервоприводами от ПЛК 210, на сервоприводах есть протокол PROFINET, на ПЛК вроде как нет и не предвидится, выше поднималась подобная проблема пользователем "Gatling", только там протокол был Ethernet IP. Вопрос, можно ли на родном, отечественном ПЛК 210 завести PROFINET (не важно каким способом, купить лицензию, воспользоваться сторонними библиотеками, написать свои библиотеки). Или сразу не мучатся, пойти и купить забугорный ПЛК, у которого на борту будут все протоколы.

Алексей Караваев
11.01.2021, 16:13
И речь идет не об одной единственной установке, а о серийном применении в металлобрабатывающих станках.

capzap
11.01.2021, 16:19
И речь идет не об одной единственной установке, а о серийном применении в металлобрабатывающих станках.

тогда шлюз anybus с модбас на профинет

melky
11.01.2021, 17:10
и ценник превратится в забугорный вариант.... смысл ?

Как вариант посмотреть среди нашекитайских вариантов, возможно есть с наличием каплеров в линейке...

полазил от нефик делать, и что-то не наблюдаю ПЛК с ProfiNet, походу это только Семен да ЖЕ практикуют...
У одних товарищей увидел модуль ProfiNet IO но он только в единственном лице к процу ставится и всего ан 128 точек вода вывода.

Кстати если речь о станках, то какой тут к черту преобразователь с Modbus ???

Inarus
12.01.2021, 17:03
Здравствуйте, помогите пожалуйста разобраться:
Codesys3.5SP11patch5hotfix4
СПК110 (М01)
Таргеты и библиотеки все стоят, программы пишу, работают

Тут пришлось поставить модуль МУ110-32Р, собираю программу на CFC, а в библиотеке нет функционального блока MY110_32R_outs.

Все переустановил, вплоть до кодесис. Не помогает, все функциональные блоки есть, кроме 32Р. Даже отдельно устанавливал только его. не появляется в списке и все.

Вопрос: у модуля на 32 релейных выхода в принципе нет функционального блока? Или я что-то не так делаю?

Евгений Кислов
12.01.2021, 17:17
Здравствуйте, помогите пожалуйста разобраться:
Codesys3.5SP11patch5hotfix4
СПК110 (М01)
Таргеты и библиотеки все стоят, программы пишу, работают

Тут пришлось поставить модуль МУ110-32Р, собираю программу на CFC, а в библиотеке нет функционального блока MY110_32R_outs.

Все переустановил, вплоть до кодесис. Не помогает, все функциональные блоки есть, кроме 32Р. Даже отдельно устанавливал только его. не появляется в списке и все.

Вопрос: у модуля на 32 релейных выхода в принципе нет функционального блока? Или я что-то не так делаю?

Добрый день.
Вы пишите об очень старом способе опроса, который на современных контроллерах просто не нужен.
Сейчас все настраивается гораздо проще и без функциональных блоков - прямо через дерево проекта:
https://youtu.be/77fdfnfdJME

Inarus
12.01.2021, 17:42
Евгений, благодарю за ссылку на ролик. И все же вопрос для тех, кто привык по старинке, есть шансы получить этот функциональный блок или надо изучать новые способы опроса с ручным вписыванием всех переменных?

На всякий случай, прикладываю скриншот того, что я имею ввиду. 52988

Евгений Кислов
12.01.2021, 17:43
Евгений, благодарю за ссылку на ролик. И все же вопрос для тех, кто привык по старинке, есть шансы получить этот функциональный блок или надо изучать новые способы опроса с ручным вписыванием всех переменных?

На всякий случай, прикладываю скриншот того, что я имею ввиду. 52988

Нет, шансов нет - в свое время блок не был разработан, и библиотека уже давно является неактуальной.
Можно использовать UniWrite (на скрине внизу) - с помощью него можно отправить произвольный запрос на запись.

stskr
13.01.2021, 07:29
Есть проблема с чтением части регистров Slave-устройства по каналу Modbus RTU Master в ПЛК.
Часть регистров читается корректно, а вместо части значений нули.
Существует ли простой способ записать коммуникацию по Modbus RTU в лог?
Хочу понять, что происходит.

Евгений Кислов
13.01.2021, 08:34
Есть проблема с чтением части регистров Slave-устройства по каналу Modbus RTU Master в ПЛК.
Часть регистров читается корректно, а вместо части значений нули.
Существует ли простой способ записать коммуникацию по Modbus RTU в лог?
Хочу понять, что происходит.

Такой возможности нет, нужно либо подключиться к линии связи сниффером, либо для отладки подключать слэйв к ПК и запускать на нем ПО, которое может работать как Modbus Master и показывает логи (обычно используется OPC-сервер).

stskr
14.01.2021, 06:04
Запустил Modbus Slave на ПК - обрывов связи не наблюдается, а вот при общении с устройством периодически проскакивают обрывы связи.
Видимо, нужно запускать сниффер.

MechMan
09.03.2021, 12:45
Евгений, добрый день. Посоветуйте что делать. codesys 3.5. sp16, raspberry 3, rs485 на ch340, скорость 9600, none,8,1. 2 устройства на линии. Не хотят работать одновременно. Одно отключаешь (в проекте), другое работает нормально, все равно какое. Написал опрос на питоне, все работает нормально, без провалов, все читается. Посмотрел осцилографом форму сигналов - выглядит все хорошо.

Евгений Кислов
09.03.2021, 12:53
Евгений, добрый день. Посоветуйте что делать. codesys 3.5. sp16, raspberry 3, rs485 на ch340, скорость 9600, none,8,1. 2 устройства на линии. Не хотят работать одновременно. Одно отключаешь (в проекте), другое работает нормально, все равно какое. Написал опрос на питоне, все работает нормально, без провалов, все читается. Посмотрел осцилографом форму сигналов - выглядит все хорошо.

Добрый день.
Я в данном случае могу посоветовать только переходить на наши контроллеры. =)

MechMan
09.03.2021, 13:06
Жаль. Надеялся обойтись малой кровью ;) вот начнете i2c поддерживать и универсальные gpio - можно и к вам ;)

Евгений Кислов
09.03.2021, 13:14
Жаль. Надеялся обойтись малой кровью ;) вот начнете i2c поддерживать и универсальные gpio - можно и к вам ;)

А для каких задач вам это требуется?

Dmitrij_
09.03.2021, 13:24
Контроллер СПК110.
Необходимо получать текстовые команды по RS232. На основании примеров нестандартных протоколов реализовал программку получения команды и выдачу ответа.
На ПК через терминал отправляю команду ">test", контроллер дает ответ. Работает не всегда стабильно. СПК может не всегда выдавать ответ.
Правильно ли использование циклического выполнения алгоритма, либо необходимо начинать чтение из порта по какому либо прерыванию.
Ссылка на проект: https://disk.yandex.ru/d/Iv0OlIpqrjnlvw
Прошу дать коментарии, как лучше принимать команды по RS232.

Евгений Кислов
09.03.2021, 14:23
Контроллер СПК110.
Необходимо получать текстовые команды по RS232. На основании примеров нестандартных протоколов реализовал программку получения команды и выдачу ответа.
На ПК через терминал отправляю команду ">test", контроллер дает ответ. Работает не всегда стабильно. СПК может не всегда выдавать ответ.
Правильно ли использование циклического выполнения алгоритма, либо необходимо начинать чтение из порта по какому либо прерыванию.
Ссылка на проект: https://disk.yandex.ru/d/Iv0OlIpqrjnlvw
Прошу дать коментарии, как лучше принимать команды по RS232.

Для начала:
У вас fb_PROTOCOL запускается от fb_COMcontrol.xDone - а этот выход только на один цикл активируется.
Используйте fb_COMcontrol.xActive.

Dmitrij_
10.03.2021, 07:51
Для начала:
Используйте fb_COMcontrol.xActive.

Не совсем понятно как формировать данный сигнал. В fb_COMcontrol и в "Реализация нестандартных протоколов" его формирование не описано.

Евгений Кислов
10.03.2021, 07:54
Не совсем понятно как формировать данный сигнал. В fb_COMcontrol и в "Реализация нестандартных протоколов" его формирование не описано.

Его не надо формировать - он просто есть.
Вы можете доступ по TeamViewer предоставить?

Dmitrij_
10.03.2021, 08:35
Его не надо формировать - он просто есть.
Вы можете доступ по TeamViewer предоставить?

Если использую fb_COMcontrol.xActive то он всегда False.
доступ по TeamViewer на данный момент не могу предоставить.

Евгений Кислов
10.03.2021, 08:36
Если использую fb_COMcontrol.xActive то он всегда False.
доступ по TeamViewer на данный момент не могу предоставить.

Это может быть только в том случае, если порт еще не открыт.
Без TeamViewer помочь вам будет затруднительно.

MechMan
10.03.2021, 10:15
Не хотят работать одновременно. Одно отключаешь (в проекте), другое работает нормально, все равно какое.
Евгений, удалось победить эту проблему. Оказалось что для канала с 20 регистрами период 100ms слишком мало при скорости 9600. Помогло установить для каждого канала период опроса 200-300мс.
Видимо я не правильно понимаю очередь обработки запросов к шине в CODESYS. Где это можно почитать?

Евгений Кислов
10.03.2021, 10:41
Евгений, удалось победить эту проблему. Оказалось что для канала с 20 регистрами период 100ms слишком мало при скорости 9600. Помогло установить для каждого канала период опроса 200-300мс.
Видимо я не правильно понимаю очередь обработки запросов к шине в CODESYS. Где это можно почитать?

К сожалению, нигде.
Все, что есть - вот этот рисунок из справки:
https://help.codesys.com/webapp/_mod_buscycle_task;product=core_modbus_configurati on_editor;version=3.5.16.0

Dmitrij_
10.03.2021, 12:50
Это может быть только в том случае, если порт еще не открыт.

Флаг успешного открытия порта fb_COMcontrol.xDone перешел в true, следовательно порт открылся.
И всё же, в ФБ из примеров переменная fb_COMcontrol.xActive отсутствует и не объявлена как выходная, и откуда она возьмет значение не понятно.

Евгений Кислов
10.03.2021, 12:55
Флаг успешного открытия порта fb_COMcontrol.xDone перешел в true, следовательно порт открылся.
И всё же, в ФБ из примеров переменная fb_COMcontrol.xActive отсутствует и не объявлена как выходная, и откуда она возьмет значение не понятно.

А, вы используете ФБ прямо из примера.
Лучше вместо него использовать одноименный ФБ из библиотеки OwenCommunication - у него этот выход есть.
https://owen.ru/forum/showthread.php?t=31816

Aleksey1408
11.03.2021, 22:53
Добрый день. Пытаюсь осуществить связь между ТРМ251 и СПК110 используя библиотеку OwenNet. Запись ограничения максимальной мощности и минимальной мощности осуществляется с помощью ФБ Owen_Set_Real, тип данных REAL_FRM.FIX_BIN. Проблема в том что дробные значения мощности записываются нормально, т.е. 50.1 или 23.9, а целые значения мощности не записываются, функциональный блок выдает код ошибки 5 - Неверно задано положение десятичной точки (при фиксированной точке). При этом чтение данных с помощью ФБ Owen_Get_Real осуществляется нормально при любых значениях. С моей точки зрения в ФБ Owen_Set_Real есть ошибка, но код закрытый. Пожалуйста протестируйте ФБ ФБ Owen_Set_Real с типом данных REAL_FRM.FIX_BIN и исправьте ошибку.

Евгений Кислов
12.03.2021, 04:39
Добрый день. Пытаюсь осуществить связь между ТРМ251 и СПК110 используя библиотеку OwenNet. Запись ограничения максимальной мощности и минимальной мощности осуществляется с помощью ФБ Owen_Set_Real, тип данных REAL_FRM.FIX_BIN. Проблема в том что дробные значения мощности записываются нормально, т.е. 50.1 или 23.9, а целые значения мощности не записываются, функциональный блок выдает код ошибки 5 - Неверно задано положение десятичной точки (при фиксированной точке). При этом чтение данных с помощью ФБ Owen_Get_Real осуществляется нормально при любых значениях. С моей точки зрения в ФБ Owen_Set_Real есть ошибка, но код закрытый. Пожалуйста протестируйте ФБ ФБ Owen_Set_Real с типом данных REAL_FRM.FIX_BIN и исправьте ошибку.

Добрый день.
Пожалуйста, выложите ваш проект, на котором можно будет воспроизвести проблему.
Достаточно кода опроса ТРМ - все остальное из проекта лучше убрать.

sssssaaaaabbbbb
15.03.2021, 15:24
Всем здравствуйте. В известной инструкции на странице 42 https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_OPC_v2.2.pdf не могу понять, как считать word- переменные-с ПЛК210 . В инструкции сказано, что в одном устройстве разные переменные должны быть под одним регистром, но у меня не получается так считать. Записывается понятно, но считать никак.53995

Евгений Кислов
15.03.2021, 16:27
Добрый день.
В примере регистры только для чтения - в регионе INPUT (это видно на скриншотах в документе), а доступные для записи - в HOLDING.
У вас же они вообще все в HOLDING.
Адресация регионов независимая (это разные области Modbus), поэтому адреса могут пересекаться - это нормально.

glazastik
15.03.2021, 18:21
Добрый день, если я реализовываю обмен с несколькими устройствами через библиотеку CAA SerialCom, правильно ли вызывать несколько копий одного ФБ обмена с разными устройствами? Система сама выстроит очередь обмена или так нельзя делать и надо выстраивать очередь самому?
Иными словами, есть у вас пример обмена с датчиком СЭТ-4ТМ, там реализован обмен с одним датчиком, а если я хочу добавить туда ещё датчиков?

Евгений Кислов
15.03.2021, 18:26
Добрый день, если я реализовываю обмен с несколькими устройствами через библиотеку CAA SerialCom, правильно ли вызывать несколько копий одного ФБ обмена с разными устройствами? Система сама выстроит очередь обмена или так нельзя делать и надо выстраивать очередь самому?
Иными словами, есть у вас пример обмена с датчиком СЭТ-4ТМ, там реализован обмен с одним датчиком, а если я хочу добавить туда ещё датчиков?

Добрый день.
Очередь надо выстраивать самому.

Aleksey1408
15.03.2021, 18:37
Добрый день.
Пожалуйста, выложите ваш проект, на котором можно будет воспроизвести проблему.
Достаточно кода опроса ТРМ - все остальное из проекта лучше убрать.

При попытке записи ЦЕЛЫХ значений данных в ТРМ251 для Максимальной и минимальной мощности происходит ошибка №5, при этом значения с точкой записываются нормально. Проект и скриншот с ошибкой прикрепляю.

sssssaaaaabbbbb
16.03.2021, 08:01
Спасибо!!! Все заработало

Евгений Кислов
16.03.2021, 12:23
При попытке записи ЦЕЛЫХ значений данных в ТРМ251 для Максимальной и минимальной мощности происходит ошибка №5, при этом значения с точкой записываются нормально. Проект и скриншот с ошибкой прикрепляю.

Проблема воспроизвелась.
К сожалению, оперативно устранить ее не получится.
Насколько критична для вас невозможность записи значения этих параметров без дробной части?
Уточните, пожалуйста, какие параметры (кроме 'p.min') вынуждают вас использовать протокол ОВЕН вместо Modbus.

capzap
16.03.2021, 12:34
Проблема воспроизвелась.
К сожалению, оперативно устранить ее не получится.
Насколько критична для вас невозможность записи значения этих параметров без дробной части?
Уточните, пожалуйста, какие параметры (кроме 'p.min') вынуждают вас использовать протокол ОВЕН вместо Modbus.

не думаю что это на уровне протокола происходит, в трм202 нельзя записать целочисленные в уставку меньше 10, тоже необходим хотя бы один знак после запятой по протоколу модбас

Евгений Кислов
16.03.2021, 12:38
не думаю что это на уровне протокола происходит, в трм202 нельзя записать целочисленные в уставку меньше 10, тоже необходим хотя бы один знак после запятой по протоколу модбас

Отладочной утилитой для протокола ОВЕН у нас это получилось.

capzap
16.03.2021, 12:46
Отладочной утилитой для протокола ОВЕН у нас это получилось.

ну, всмысле, по модбасу занесение целочисленных записываются?

Евгений Кислов
16.03.2021, 12:55
ну, всмысле, по модбасу занесение целочисленных записываются?

Нет, по протоколу ОВЕН. Параметр 'p.min' в принципе не доступен по Modbus.

capzap
16.03.2021, 13:29
Нет, по протоколу ОВЕН. Параметр 'p.min' в принципе не доступен по Modbus.

хорошо, а если в трм251 записать в 258 регистр 0, а после в 257 например четыре, то именно эта уставка и будет на первом шаге?

Евгений Кислов
16.03.2021, 13:33
хорошо, а если в трм251 записать в 258 регистр 0, а после в 257 например четыре, то именно эта уставка и будет на первом шаге?

Не могу прокомментировать, и у меня в данный момент нет цели тестировать этот функционал.
Вы можете задать этот вопрос в разделе ТРМ или написать запрос на support@owen.ru

Aleksey1408
18.03.2021, 12:05
Проблема воспроизвелась.
К сожалению, оперативно устранить ее не получится.
Насколько критична для вас невозможность записи значения этих параметров без дробной части?
Уточните, пожалуйста, какие параметры (кроме 'p.min') вынуждают вас использовать протокол ОВЕН вместо Modbus.
Для параметров P.min, P.max, P.nom, i.upr, i.min чтение можно осуществлять через формат с фиксированной точкой REAL_FRM.FIX_BIN, а вот запись необходимо осуществлять используя формат для целых чисел INT_FRM.UINT_FRM.
Структура формата REAL_FRM.FIX_BIN 16 битная:
0-11 - значение без точки.
12-14 бит - десятичный сдвиг точки
15 бит - знак, если 0 - то плюс, 1 - значит минуc
Примеры:
3.1=2#0001_0000_0001_1111
-3.1=2#1001_0000_0001_1111
0,300=2#0011_0001_0010_1100
Проблема крылась в том, что при записи целых положительных чисел биты 12-14 равны 0, тогда в битах 0-11 храниться целое значение. Но алгоритм работает с ошибкой, а при записи с десятичной точкой в битах 12-14 есть значения, т.е. все свелось к принудительной установке хотя бы одной точки после запятой.
Соответственно, для параметров P.min, P.max, P.nom, i.upr, i.min достаточно одной цифры после запятой, и необходимо знать знак числа.
Всем успехов :cool:
Код проверен на ТРМ251 v1.10.
Мой пример реализации ниже.


GetReal:OWEN_GET_REAL;
SetDint:OWEN_SET_DINT;

i_min: // Огр. мин. интеграла
IF pribor^[prib_name].oper.StateTask[state].isRead THEN
GetReal(
Enable:= com_active,
Addr:= com_prib.addr[prib_name],
AddrLen:=com_prib.addrlen,
Name:='i.min' ,
Index:= 16#FFFF,
RealType:= REAL_FRM.FIX_BIN,
ComHandle:= hComTrm,
TimeOut:=com_prib.TimeOut*T#1MS ,
Complete=>,
Value=> ,
wTime=> ,
Error=> );
IF GetReal.Complete OR GetReal.Error<>0 THEN
pribor^[prib_name].oper.StateTask[state].error:=SetReal.Error;
CASE GetReal.Error OF
NoError:
pribor^[prib_name].pid.i_min:=GetReal.Value;
pribor^[prib_name].oper.StateTask[state].ValReal:=GetReal.Value;
state:=StateNoError(state:=state,StateTaskPt:=ADR( pribor^[prib_name].oper.StateTask));
NACK:
state:=end_pooling;
ELSE
state:=StateNoError(state:=state,StateTaskPt:=ADR( pribor^[prib_name].oper.StateTask));
END_CASE
GetReal(Enable:=FALSE);
END_IF
ELSE
IF pribor^[prib_name].pid.i_min >-0.001 THEN
SetDint.Value:=2#0001_0000_0000_0000; // Положительное число, одна цифра после запятой
ELSE
SetDint.Value:=2#1001_0000_0000_0000; // Отрицательное число, одна цифра после запятой
END_IF
SetDint(
Enable:= com_active,
Addr:= com_prib.addr[prib_name],
AddrLen:= com_prib.addrlen,
Name:= 'i.min',
Index:= 16#FFFF,
IntType:=INT_FRM.UINT_FRM,
Value:=REAL_TO_DINT(ABS(pribor^[prib_name].pid.i_min*10)) + SetDint.Value, // Сдвиг запятой на 1 знак в право.
ComHandle:= hComTrm,
TimeOut:= com_prib.TimeOut*T#1MS,
Complete=> ,
Error=> );
IF SetDint.Complete OR SetDint.Error<>0 THEN
pribor^[prib_name].oper.StateTask[state].error:=GetDint.Error;
CASE SetReal.Error OF
NoError:
state:=StateNoError(state:=state,StateTaskPt:=ADR( pribor^[prib_name].oper.StateTask));
NACK:
state:=end_pooling;
ELSE
state:=StateNoError(state:=state,StateTaskPt:=ADR( pribor^[prib_name].oper.StateTask));
END_CASE
SetDint(Enable:=FALSE);
END_IF
END_IF

Евгений Кислов
18.03.2021, 12:14
Большое спасибо вам за пример.

borgivan
19.03.2021, 09:19
Здравствуйте, коллеги, подскажите, пожалуйста, у меня СПК107, CS3.5.14, модули подхватились отлично по шаблонам, а кастомное модбас ТСР устройство, которое я добавил, валится в ошибку постоянно (восклицательный знак мигает), вроде всё настроил нормально, но открывается соединение, тут же ошибка сокета и дисконект, судя по логам. Есть предположение, что это из-за несоответствия версий устройств кодсиса таргету ПЛК. Где скачать и как правильно установить устройства модбас тср мастер, слэйв и т.д соответствующих версий?соответствующих версий?

Евгений Кислов
19.03.2021, 09:27
Здравствуйте, коллеги, подскажите, пожалуйста, у меня СПК107, CS3.5.14, модули подхватились отлично по шаблонам, а кастомное модбас ТСР устройство, которое я добавил, валится в ошибку постоянно (восклицательный знак мигает), вроде всё настроил нормально, но открывается соединение, тут же ошибка сокета и дисконект, судя по логам. Есть предположение, что это из-за несоответствия версий устройств кодсиса таргету ПЛК. Где скачать и как правильно установить устройства модбас тср мастер, слэйв и т.д соответствующих версий?соответствующих версий?

Добрый день.
Скорее всего, то не связано с версией устройства.
Посмотрите код ошибки (Вид - Просмотр - Watch 1 - <имя слэйва из дерева проекта>.byModbusError) и выложите ваш проект и документацию на слэйв-устройство.

Dmitrij_
25.03.2021, 06:31
А, вы используете ФБ прямо из примера.
Лучше вместо него использовать одноименный ФБ из библиотеки OwenCommunication - у него этот выход есть.
https://owen.ru/forum/showthread.php?t=31816

Спасибо за предоставленный пример.
Прием в слейве заработал.

SemAndr
22.04.2021, 09:51
Добрый день. Столкнулся со следующей проблемой: Для обмена по ModBus использую библиотеку OwenCommunication, при перезагрузке ПЛК функциональный блок MB_SerialRequest завершается с ошибкой 12 (WRONG_PARAMETER). Однако, если не перезагружать ПЛК, а только перезалить софт и запустить программу, то все работает корректно, никаких ошибок не возникает. Куда можно копать, чтобы понять в чем проблема?

Евгений Кислов
22.04.2021, 11:01
Добрый день. Столкнулся со следующей проблемой: Для обмена по ModBus использую библиотеку OwenCommunication, при перезагрузке ПЛК функциональный блок MB_SerialRequest завершается с ошибкой 12 (WRONG_PARAMETER). Однако, если не перезагружать ПЛК, а только перезалить софт и запустить программу, то все работает корректно, никаких ошибок не возникает. Куда можно копать, чтобы понять в чем проблема?

Добрый день.
Сколько экземпляров ФБ вы используете в программе?

SemAndr
22.04.2021, 11:22
Добрый день.
Сколько экземпляров ФБ вы используете в программе?

3 экземпляра (экземпляр - это объявление переменной данного типа, верно?). Для чтения вызывается 5 раз. Первый раз 1 экземпляр, остальные 4 раза другой экземпляр. Для записи вызывается третий экземпляр (7 раз вызов происходит)

Евгений Кислов
22.04.2021, 11:34
3 экземпляра (экземпляр - это объявление переменной данного типа, верно?). Для чтения вызывается 5 раз. Первый раз 1 экземпляр, остальные 4 раза другой экземпляр. Для записи вызывается третий экземпляр (7 раз вызов происходит)

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

SemAndr
22.04.2021, 11:39
Выложите, пожалуйста, проект и пошаговое описание, как с его помощью воспроизвести эту проблему.

https://disk.yandex.ru/d/Lh3KhEVIeO9ASg - ссылка на проект.

Описание:
Записываем проект на ПЛК. Создаем загрузочное приложение. После чего перезагружаем ПЛК путем сброса питания. После загрузки общение по ModBus не происходит. Подключаемся к ПЛК из Кодесис, смотрим имя ошибки.

Далее, перезаписываем прошивку. Запускаем программу. ModBus работает корректно, никаких ошибок нет.

Евгений Кислов
22.04.2021, 11:45
https://disk.yandex.ru/d/Lh3KhEVIeO9ASg - ссылка на проект.

Описание:
Записываем проект на ПЛК. Создаем загрузочное приложение. После чего перезагружаем ПЛК путем сброса питания. После загрузки общение по ModBus не происходит. Подключаемся к ПЛК из Кодесис, смотрим имя ошибки.

Далее, перезаписываем прошивку. Запускаем программу. ModBus работает корректно, никаких ошибок нет.

Спасибо, я проверю у себя и отпишусь.

Юра54
22.04.2021, 12:40
Здравствуйте! Устанавливаю Функциональный блок actual_data для опроса ВКТ-7.
В нем используется входной параметр handle - SYSCOM.RTS_IEC_HANDLE (Дескриптор последовательного порта)
Не подскажете, где найти этот параметр или его описание?

Евгений Кислов
22.04.2021, 12:42
Здравствуйте! Устанавливаю Функциональный блок actual_data для опроса ВКТ-7.
В нем используется входной параметр handle - SYSCOM.RTS_IEC_HANDLE (Дескриптор последовательного порта)
Не подскажете, где найти этот параметр или его описание?

Добрый день.
Например, с выхода ФБ COM_CONTROL из библиотеки OwenCommunication.

Евгений Кислов
23.04.2021, 06:30
https://disk.yandex.ru/d/Lh3KhEVIeO9ASg - ссылка на проект.

Описание:
Записываем проект на ПЛК. Создаем загрузочное приложение. После чего перезагружаем ПЛК путем сброса питания. После загрузки общение по ModBus не происходит. Подключаемся к ПЛК из Кодесис, смотрим имя ошибки.

Далее, перезаписываем прошивку. Запускаем программу. ModBus работает корректно, никаких ошибок нет.

Объявите cpCharger не в RETAIN переменных, а в локальных (VAR ... END_VAR) - это решит вашу проблему.

SemAndr
23.04.2021, 07:21
Объявите cpCharger не в RETAIN переменных, а в локальных (VAR ... END_VAR) - это решит вашу проблему.

Это помогло. Спасибо! А в чем причина? Можно предположить, допустим, что значение дескриптора порта остается старым, так как переменная хранится в независимой памяти, но при инициализации она должна перезаписаться, так как инициализация ModBus производится каждый раз при запуске.

Евгений Кислов
23.04.2021, 07:23
Это помогло. Спасибо! А в чем причина? Можно предположить, допустим, что значение дескриптора порта остается старым, так как переменная хранится в независимой памяти, но при инициализации она должна перезаписаться, так как инициализация ModBus производится каждый раз при запуске.

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

Юра54
26.04.2021, 08:10
Здравствуйте! Устанавливаю Функциональный блок actual_data для опроса ВКТ-7.
В нем используется входной параметр handle - SYSCOM.RTS_IEC_HANDLE (Дескриптор последовательного порта)
Не подскажете, где найти этот параметр или его описание?

Здравствуйте!
Дескриптор успешно записывается, но дальше дело не движется - блок actual_data работать не желает (не считывает ничего с ВКТ), ошибку не выдает.
Подскажите, кто работал с ВКТ, какие там еще нюансы?

Евгений Кислов
26.04.2021, 08:16
Здравствуйте!
Дескриптор успешно записывается, но дальше дело не движется - блок actual_data работать не желает (не считывает ничего с ВКТ), ошибку не выдает.
Подскажите, кто работал с ВКТ, какие там еще нюансы?

А остальные выходы блока какие при этом имеют значения?

Юра54
26.04.2021, 08:26
А остальные выходы блока какие при этом имеют значения?

Done - False, err_code - 0, out_data и out_data_string - пусты.

Евгений Кислов
26.04.2021, 08:27
Done - False, err_code - 0, out_data и out_data_string - пусты.

А вы точно вызываете экземляр ФБ?
Выложите ваш проект.

И еще вопрос - по какому интерфейсу к контроллеру подключен счетчик?

Юра54
26.04.2021, 08:29
А вы точно вызываете экземляр ФБ?
Выложите ваш проект.

И еще вопрос - по какому интерфейсу к контроллеру подключен счетчик?

По RS232-1 подключаюсь.

Евгений Кислов
26.04.2021, 08:35
По RS232-1 подключаюсь.

Сигнал RTS на счетчик приходит?
Попробуйте сначала с ПК его опросить - у Теплокома есть OPC для этого.

VadimS
04.05.2021, 22:57
Здравствуйте. Есть вопрос по библиотеке MQTT (Stefan Robmann).
Нужна подписка на топик.
ПЛК 200.
Брокер поднят на Raspberry (Mosquitto).
К брокеру претензий нет, работает уже месяца три, все публикуется, подписывается (на стороннем софте).

Установил последнюю версию библиотеки(3.5.0.0). Вроде все понятно, заработало с первого раза, но:
1. При компиляции выдает 22 предупреждения:
[WARNING] mqtt client library, 3.5.0.0 (stefan ro&#223;mann engineering solutions): FB_MQTTClient(Строка 100, Столбец 1 (Реализ.)): C0195: Неявная конверсия типа со знаком 'INT' в тип без знака 'UINT': возможно изменение знака
Понятно, что не смертельно, но странно как-то... может я чего-то не установил ? (на библиотеки не ругается, загружается, работает).
2. Несколько раз вылетело исключение в библиотеке (с остановкой ПЛК). Вылетает не предсказуемо, может раз в пару суток.
3. При перезагрузке брокера обмен "замерзает" и самостоятельно не поднимается. Флаг ошибки и код статуса не меняются. Но если попереключать флаг подписки - обмен поднимется (костыль в виде периодического передергивания флага приладил, но это как-то... костыль короче).
4. При введении второй копии функционального блока (подписка на второй топик), через некоторое время начинает путать топики (связать с каким-либо событием не могу, наверное просто время).

Другие библиотеки пока не пробовал, особо времени нет, если это не лечится - то придется.
Допиливать эту библиотеку самостоятельно - это не по мне :).
Собственно вопрос: это только у меня такие косяки?
Может что подскажите, очень мало информации.
А код - по имеющемуся в доке примеру (IP брокера и имя топика инициализированы в описании переменных, подписка на один топик):

MQTT_POOLlevel(i_xEnable:=TRUE,i_sBrokerAddress:=M QTTBrokerAddress,i_xSubscribe:=xSubscribe_PL,i_sTo picSubscribe:=sTopicSubscribe_PL);
xError_PL := MQTT_POOLlevel.q_xError;
udiState_PL := MQTT_POOLlevel.q_udiState;
sLastReceivedMessage_PL:=MQTT_POOLlevel.q_sLastRec eivedMessage;
HCSR04data := STRING_TO_WORD (sLastReceivedMessage_PL);

Спасибо.

Максим Ульянов
05.05.2021, 13:36
Коллеги добрый день...Прошу помощи с функциями и адресами регистров модбаса (OwenCommunication) 54972 какие коды функций ( я так понимаю READ_HOLDING_REGISTERS и WRITE_SINGLE_REGISTER) и какие адреса ставить на пример для регистра 38?

Евгений Кислов
05.05.2021, 13:41
какие коды функций ( я так понимаю READ_HOLDING_REGISTERS и WRITE_SINGLE_REGISTER)

Вы понимаете правильно (для записи может потребоваться WRITE_MULTIPLE_REGISTER).


и какие адреса ставить на пример для регистра 38?

Так и ставить - 38.

Максим Ульянов
05.05.2021, 13:50
я просто тогда не понимаю смысл вот это : The Modbus Communication Module supports zero-based addressing. For example, Holding Register 40002 is addressed as 0001
in a Modbus message.
The Holding Registers shown in Table 4 - Table 8 assume 4xxxx addressing. For example, Holding Register 40001 is shown as 1.
Через переводчик воообще мура какая то...


Например, регистр 40002 хранения адресуется как 0001
в сообщении Modbus.
Регистры хранения, показанные в таблице 4 - Таблица 8, предполагают адресацию 4xxxx. Например, регистр хранения 40001 отображается как 1.


чет бред какой то..

Евгений Кислов
05.05.2021, 13:53
Можете здесь почитать по этому поводу:
https://oscat.ru/?p=369

п. 1.1

VadimS
06.05.2021, 19:22
Я таки дико извиняюсь :), но вопросы по MQTT не исчезли (ну, почти).
Неужто никто не занимался подпиской?
Не, примеры в ютубе я видел... так и у меня работает...
Но вот как глубже копнешь - какая-то ерунда выходит.
С вопросом 4 вроде разобрался: этому FB похоже вообще параллельно на имя топика подписки.
Пока не ввел проверку на совпадение имени последнего принятого топика с подписываемым (????? казалось бы, какого...), приходили данные из нескольких топиков (с этого-же устройства-публикатора), какой топик раньше обновился - тот и на выходе FB.
Причем, в коде FB (банальным поиском), кроме как в описании переменных, обращения к переменной с названием топика подписки я НЕ НАШЕЛ. Может там есть косвенные обращения через указатели... хотя ко многим другим входным переменным обращения идут непосредственно по именам.
И такое ощущение, что в части подписки данная библиотека дико сырая.
Как хочется верить, что я ошибаюсь (а еще и понять бы - в чем конкретно). Если в том, что пытаюсь использовать бесплатную библиотеку, а не за 50 ойро - так и текущая задача этих денег не стоит по большому счету. Это скорее демонстрационный проект.
Больше вопросов к перспективе использования технологии в дальнейшем.
Параллельно ребята кодят MQTT под NBIoT, там тоже не всё гладко (но там и платформа другая, и средства разработки).

Евгений Кислов
06.05.2021, 20:15
Я таки дико извиняюсь :), но вопросы по MQTT не исчезли (ну, почти).
Неужто никто не занимался подпиской?
Не, примеры в ютубе я видел... так и у меня работает...
Но вот как глубже копнешь - какая-то ерунда выходит.
С вопросом 4 вроде разобрался: этому FB похоже вообще параллельно на имя топика подписки.
Пока не ввел проверку на совпадение имени последнего принятого топика с подписываемым (????? казалось бы, какого...), приходили данные из нескольких топиков (с этого-же устройства-публикатора), какой топик раньше обновился - тот и на выходе FB.
Причем, в коде FB (банальным поиском), кроме как в описании переменных, обращения к переменной с названием топика подписки я НЕ НАШЕЛ. Может там есть косвенные обращения через указатели... хотя ко многим другим входным переменным обращения идут непосредственно по именам.
И такое ощущение, что в части подписки данная библиотека дико сырая.
Как хочется верить, что я ошибаюсь (а еще и понять бы - в чем конкретно). Если в том, что пытаюсь использовать бесплатную библиотеку, а не за 50 ойро - так и текущая задача этих денег не стоит по большому счету. Это скорее демонстрационный проект.
Больше вопросов к перспективе использования технологии в дальнейшем.
Параллельно ребята кодят MQTT под NBIoT, там тоже не всё гладко (но там и платформа другая, и средства разработки).

1. У меня не воспроизводится - предупреждений нет.

55006

2. Причины могут быть разными. Можете почитать в этой теме:
https://owen.ru/forum/showthread.php?t=34719&p=355252&viewfull=1#post355252 (c этого поста и далее)

3. Я не тестировал со своим брокером, который можно перезагрузить, так что не могу дать комментариев.
Если заглянуть в исходники - думаю, не сложно будет добавить в ФБ вход типа xReset.

4. У меня не воспроизводится.
Но я использую один инстанс для подписки на множество топиков, и не понимаю, зачем поступать иначе.
https://owen.ru/forum/showthread.php?t=34719&p=355434&viewfull=1#post355434


С вопросом 4 вроде разобрался: этому FB похоже вообще параллельно на имя топика подписки.

Эта фраза звучит странно, так как без факта подписки брокер вообще не должен пересылать клиенту сообщения по данным топикам.

VadimS
07.05.2021, 00:11
Евгений, спасибо!
Есть, с чем поразбираться. Как минимум у других работает :).

Карбофос
08.05.2021, 13:52
Здравствуйте! Можно ли как-то настроить на СПК1хх и ПЛК2хх клиент OpenVPN? Чтобы при наличии интернета он мог соединяться с сервером.
Если нет, может кто посоветовать не сильно дорогое решение с функцией OpenVPN клиента, через которое можно подключить СПК к удаленному серверу для диспетчеризации по ethernet? По 2/3/4G?

ASo
08.05.2021, 15:34
Роутер с OpenVPN.

Евгений Кислов
08.05.2021, 15:53
Здравствуйте! Можно ли как-то настроить на СПК1хх и ПЛК2хх клиент OpenVPN? Чтобы при наличии интернета он мог соединяться с сервером.
Если нет, может кто посоветовать не сильно дорогое решение с функцией OpenVPN клиента, через которое можно подключить СПК к удаленному серверу для диспетчеризации по ethernet? По 2/3/4G?

В последней прошивке для СПК OpenVPN доступен:
https://owen.ru/forum/showthread.php?t=33954&p=351532&viewfull=1#post351532

Для ПЛК2хх прошивка с OpenVPN в настоящий момент на этапе доработки и тестирования.

TemD
28.05.2021, 11:17
Приветствую, форумчане!
Столкнулся с банальной проблемой - Как организовать реализацию Modbus TCP Master в среде CodeSys 3.5?
Много где есть упоминание, но я не нашёл ни одной инструкции по реализации данного протокола.
Если есть у кого инструкции или пример реализации прошу поделиться опытом =)

capzap
28.05.2021, 11:20
Приветствую, форумчане!
Столкнулся с банальной проблемой - Как организовать реализацию Modbus TCP Master в среде CodeSys 3.5?
Много где есть упоминание, но я не нашёл ни одной инструкции по реализации данного протокола.
Если есть у кого инструкции или пример реализации прошу поделиться опытом =)
а это тогда что? https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Modbus_v2.0.pdf

Максим Ульянов
02.06.2021, 15:51
Доброго дня Коллеги! разбираюсь с ФБ MB_TcpRequest... с чтением вопросов нет,все хорошо...При записи fbWriteRequest "виснет" и перестает реагировать на внешние раздражители...При этом запись происходит( смотрю через веб интерфейс железки), fbWriteRequest.xError сразу устанавливается в TRUE, попробовал выставить tTimeout :=T#1000MS,usiRetry :=10 ,результат тотже...При записи в тот же регистр допустим программой TIK Modscan не каких проблем нет...Прошу помощи...


fbWriteRequest.eError возвращает код 52 ( ILLEGAL_DATA_VALUE Некорректное значение в поле данных) чтобы это могло значить?

Евгений Кислов
02.06.2021, 16:22
Доброго дня Коллеги! разбираюсь с ФБ MB_TcpRequest... с чтением вопросов нет,все хорошо...При записи fbWriteRequest "виснет" и перестает реагировать на внешние раздражители...При этом запись происходит( смотрю через веб интерфейс железки), fbWriteRequest.xError сразу устанавливается в TRUE, попробовал выставить tTimeout :=T#1000MS,usiRetry :=10 ,результат тотже...При записи в тот же регистр допустим программой TIK Modscan не каких проблем нет...Прошу помощи...

Добрый день.
Что вы называете "fbWriteRequest"?
Как мне воспроизвести вашу проблему на своем оборудовании?



fbWriteRequest.eError возвращает код 52 ( ILLEGAL_DATA_VALUE Некорректное значение в поле данных) чтобы это могло значить?

Это значит, что в ответ на запрос slave-устройство вернуло ответ с кодом ошибки 03.
В спецификации Modbus описано, в каких случаях он должен возвращаться (например, если вы пытаетесь считать со слэйва 0 или >125 регистров)
В некоторых случаях slave-устройства возвращают этот код в неописанных спецификацией случаях - например, когда записываемое значение выходит за допустимый диапазон параметра.

Максим Ульянов
02.06.2021, 16:32
Что вы называете "fbWriteRequest"? ФБ из OwenCommunication
Как мне воспроизвести вашу проблему на своем оборудовании? наверное только через удаленный доступ ...ШЛЮЗ ПРОТОКОЛА MODBUS MD-CCM18A/N думаю оч редкая железка




Это значит, что в ответ на запрос slave-устройство вернуло ответ с кодом ошибки 03.
В спецификации Modbus описано, в каких случаях он должен возвращаться (например, если вы пытаетесь считать со слэйва 0 или >125 регистров) естественно более 125 ...( 64фанкрйла Х 32 регистра= 2048 как минимум...)
В некоторых случаях slave-устройства возвращают этот код в неописанных спецификацией случаях - например, когда записываемое значение выходит за допустимый диапазон параметра. Нет не выходит...

capzap
02.06.2021, 16:40
естественно более 125 ...( 64фанкрйла Х 32 регистра= 2048 как минимум...)

так по спецификации в посылке указывается сколько байт передать 55397(N), максимальное значение у типа данных байт 255, поэтому принято передавать не больше 125 регистров, которые в байтах равны 250-и

Максим Ульянов
02.06.2021, 16:44
так мне более 2х байт за раз не нужно..и не пытаюсь даже..

Евгений Кислов
02.06.2021, 16:45
Что вы называете "fbWriteRequest"? ФБ из OwenCommunication

В OwenCommunication нет ФБ с таким названием.

Насчет числа регистров вам уже ответили выше.

Максим Ульянов
02.06.2021, 16:50
В OwenCommunication нет ФБ с таким названием.


все по вашему уроку)) https://youtu.be/mxEESSRKGpU?list=LL


так чего делать то..?

55398

или я чегото не понимаю..

Евгений Кислов
02.06.2021, 17:01
все по вашему уроку)) https://youtu.be/mxEESSRKGpU?list=LL


так чего делать то..?

Для начала можно провести тест со стандартными компонентами Modbus, добавляемыми через дерево проекта.

Максим Ульянов
03.06.2021, 13:24
Для начала можно провести тест со стандартными компонентами Modbus, добавляемыми через дерево проекта.

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

capzap
03.06.2021, 13:25
Unit-ID = 255 ? Точно в документации именно так описывается

Евгений Кислов
03.06.2021, 13:32
Доброго дня Евгений,попробовал стандартными компонентами Modbus, добавляемыми через дерево проекта....даже прочитать не удается...55402

Теперь попробуйте опросить ваш прибор с ПК каким-нибудь Modbus TCP Master'ом (например, MasterOPC Universal Modbus Server).

Максим Ульянов
03.06.2021, 13:34
пробовал...TIK Modscan и читает и пишет без проблем

Евгений Кислов
03.06.2021, 13:34
это вопрос или утверждение?

Это совет.

Максим Ульянов
03.06.2021, 13:36
Unit-ID = 255 ? Точно в документации именно так описывается

это вопрос или утверждение?

Максим Ульянов
03.06.2021, 13:36
Это совет.

извините ,не вам)

Максим Ульянов
03.06.2021, 14:44
Продолжим....в MasterOPC Universal Modbus Server не каких проблем нет)55409...что делать дальше?

Евгений Кислов
03.06.2021, 14:46
Продолжим....в MasterOPC Universal Modbus Server не каких проблем нет)55409...что делать дальше?

Теперь выкладывайте проект для CODESYS с настройкой через дерево проекта и конфигурацию OPC.

Максим Ульянов
03.06.2021, 14:56
Теперь выкладывайте проект для CODESYS с настройкой через дерево проекта и конфигурацию OPC.

https://cloud.mail.ru/public/Dvnc/sonUTuQty

Евгений Кислов
03.06.2021, 16:36
У вас в OPC включен режим Modbus RTU Over TCP.
Жаль, что вы раньше нигде не упоминали, что вам нужен именно он.

55413

Стандартные драйвера CODESYS такой функционал не поддерживают, поэтому, естественно, обмена в этом случае не будет.

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


xIsRtuOverTcpMode := FALSE,

Присвойте этому входу значение TRUE.

Максим Ульянов
03.06.2021, 17:03
Проверил и приношу свои извинения , этот режим Modbus RTU Over TCP ВЫКЛЮЧЕН....еще раз перезалил файлы..
как так получилось что отправил вам конфигурацию OPC со включенным режимом честно не понимаю...
все работает когда он выключен ( вернее работает OPC)

https://cloud.mail.ru/public/Dvnc/sonUTuQty