PDA

Просмотр полной версии : Обмен данными в codesys 2.3 по протоколу MODBUS TCP/IP



borland1986
26.02.2014, 10:47
Друзья, не могли бы помочь примером на Codesys 2.3, организующий обмен между устройствами через Ethernet по протоколу Modbus TCP/IP.
Реализация через конфигуратор не интересна. Скажем Эмулятор PLCwinNt будет выступать в режиме Slave, а реальный контроллер Мастером. В интернете нашел только примеры с использованием библиотеки modbus.lib. Но там рассматривается только работа по Modbus RTU через интерфейс RS232(485). По Modbus TCP/IP ничего путного не нашёл.
У кого была подобная задача прошу помочь своим примером. Заранее СПАСИБО.

petera
26.02.2014, 13:30
Посмотрите библиотеку OSCATNetwork http://www.oscat.de/downloadmanager/viewcategory/4-oscatnetwork.html там же и документация
Вам нужна версия OSCAT Network CoDeSys 2.x в самой библиотеке, если ее открыть как проект, есть примеры в папке DEMO.
12099
Еще в этой библиотеке можно посмотреть (с примерами) сетевые переменные
12100

borland1986
26.02.2014, 14:10
А Вы не могли бы выложить эту библиотеку. Дело в том что при добавлении в проект библиотеку OSCAT Network CoDeSys 2.x, скаченную с сайта выдает ошибку12101. С ваших скиншотов, я понял что у Вас одна версия этой библиотеки, а на сайте OSCAT другая.

borland1986
26.02.2014, 14:31
Прошу прошения. Мне надо было ещё подключить библиотеки SysLibSockets, SysLibFile и oscat_basic_333.

petera
26.02.2014, 15:00
Упс!:(
Для работы codesys_network_121_hf1.lib (у меня такая версия OSCAT Network CoDeSys 2.x) нужна так же и OSCATBasic. Берем там же http://www.oscat.de/downloadmanager/viewcategory/3-oscatbasic.html Вам нужна OSCAT Basic Codesys / Twincat 2.x

Pasa
05.03.2014, 02:53
Попробовал....после подключения библиотек (платформа PLCwinNT) выскочила ошибка "превышено максимальное количество POU (512)"

borland1986
05.03.2014, 08:42
Подключите вот эту библиотеку. http://yadi.sk/d/K7eXxv8hJxKok. Только у меня не получилось передавать значения. Брал Два компьютера сообщенных по локальной сети. На обоих использовал PLCWINNT. На одном реализовывал модбас TCP сервер. На другом клиент. Делал как в примере демо не получилось. Если у Вас получиться выложите пожалуйста пример.

petera
05.03.2014, 11:51
Попробовал....после подключения библиотек (платформа PLCwinNT) выскочила ошибка "превышено максимальное количество POU (512)"
Ну так увеличите максимальное количество:)
12170

Pasa
05.03.2014, 13:05
Попробовал подключить вашу бибку. Компиляция прошла успешно(со скачанной с сайта OSCAT-овская с таким же именем , но другим размером давала ошибку превышения POU). Объявление блоков MB_SRVER и MB_CLIENT тоже прошло без ошибок.
Буду пробовать.
Вот только не получилось запустить из DEMO-папки примера MB_SERVER_DEMO.......пишет "идентификатор MB_SERVER_DEMO не определен". Импорт DEMO.EXP сделал....

Pasa
05.03.2014, 13:09
Ну так увеличите максимальное количество:)
12170

:rolleyes:.......виноват....стыдно.....не хватило знаний и опыта работы с codesys....спасибо за науку.....и где мои глаза были....

borland1986
05.03.2014, 13:39
Когда мне человек с ником petera посоветовал библиотеки осат. При загрузку в PLCWINNT мне также выдавало "превышено максимальное количество POU (512)". Я просто удалил из библиотеки OSCATBasic и codesys_network_121_hf1 Вот посмотрите архив http://yadi.sk/d/cUWg-uCRJyEFE там один проект для сервера, другой для клиента. библиотека codesys_network_121_hf1 там же.

Pasa
05.03.2014, 20:32
В библиотеке OSCAT есть пример....... MB_SERVER_DEMO.
Это не функ. блок а PRG.
Попробовал сделать в основной программе вызов MB_SERVER_DEMO() и получил ошибку " идентификатор MB_SERVER_DEMO не определен".
Как правильно вызвать этот пример из основной программы?

petera
05.03.2014, 22:01
1. Открыть библиотеку как проект
2. Экспортировать MB_SERVER_DEMO
12189
3. В своем проекте выполнить импорт файла MB_SERVER_DEMO.EXP. После импорта переименовать, а то будет ошибка. Разрешить компиляцию. Теперь можно вызывать эту программу в PLC_PRG.
12190

Pasa
06.03.2014, 05:03
В своем проекте выполнить импорт файла MB_SERVER_DEMO.EXP. После импорта переименовать, а то будет ошибка. Разрешить компиляцию. Теперь можно вызывать эту программу в PLC_PRG.

12192

вот такая ошибка

Pasa
06.03.2014, 06:21
Подключите вот эту библиотеку. http://yadi.sk/d/K7eXxv8hJxKok. Только у меня не получилось передавать значения. Брал Два компьютера сообщенных по локальной сети. На обоих использовал PLCWINNT. На одном реализовывал модбас TCP сервер. На другом клиент. Делал как в примере демо не получилось. Если у Вас получиться выложите пожалуйста пример.

вот тут ссылка на проект....PLCwinNT заработал с внешней панелью по MODBUS/TCP


http://www.owen.ru/forum/showthread.php?t=16851&page=3

DmitriiAnyushin
16.07.2016, 13:00
Подскажите пожалуйста, хочу реализовать сервер на контроллере ПЛК110-60. Загрузил все необходимые библиотеки (codesys_network_121_hf1.lib, oscat_basic_333) и вызвал программу MB_SERVER_DEMO (предварительно переименовал). Но данные клиенту не передаются (параметрируя сервер конфигуратором данные передаются). В типе MB_SERVER_1.ip_error выставлено TRUE.
Скажите пожалуйста, в чем может быть проблема? Спасибо!

capzap
16.07.2016, 13:03
Подскажите пожалуйста, хочу реализовать сервер на контроллере ПЛК110-60. Загрузил все необходимые библиотеки (codesys_network_121_hf1.lib, oscat_basic_333) и вызвал программу MB_SERVER_DEMO (предварительно переименовал). Но данные клиенту не передаются (параметрируя сервер конфигуратором данные передаются). В типе MB_SERVER_1.ip_error выставлено TRUE.
Скажите пожалуйста, в чем может быть проблема? Спасибо!
овеновские плк не корректно подключают сокет, потребуется примерно такое преобразование BOOL_TO_DINT(SysSockBind(diSocket, ADR(sa), SIZEOF(sa)))<0

DmitriiAnyushin
16.07.2016, 13:09
овеновские плк не корректно подключают сокет, потребуется примерно такое преобразование BOOL_TO_DINT(SysSockBind(diSocket, ADR(sa), SIZEOF(sa)))<0
Не совсем понял где нужно прописать данное преобразование и что за переменные diSocket и sa?

capzap
16.07.2016, 13:15
в исходниках бибки, если используете её, а не переписали в собственную наработку

DmitriiAnyushin
16.07.2016, 13:34
Я использую библиотеки скаченные с сайта oscat как и рекомендовали в данной теме
Т.е мне надо заменить условие NOT SysSockBind(server_socket, ADR(sockaddr), SIZEOF(sockaddr)) на BOOL_TO_DINT(SysSockBind(diSocket, ADR(sa), SIZEOF(sa)))<0 ?

capzap
16.07.2016, 14:07
для овена да, так же для других функций библиотеки SysLibSocket

DmitriiAnyushin
16.07.2016, 14:30
Ну строку в библиотеке я поменял правда проблема не решилась. Я может что-то не понимаю в хронологии действий, но по сути делаю то, что было описано на первых страницах данной темы
1. Добавляю библиотеки (codesys_network_121_hf1, oscat_basic_333) в свой проект
2. Экспортирую из библиотеки (codesys_network_121_hf1) DEMO
3. Импортирую DEMO в свой проект
4. Переименовываю MB_SERVER_DEMO в MB_SERVER_test
5. Вызываю MB_SERVER_test
Ну сейчас еще в библиотеке codesys_network_121_hf1 в IP_CONTROL2 заменил строку
IF SysSockBind(server_socket, ADR(sockaddr), SIZEOF(sockaddr)) THEN
на
IF BOOL_TO_DINT(SysSockBind(server_socket, ADR(sockaddr), SIZEOF(sockaddr)))<0 THEN

Где я ошибаюсь?

capzap
16.07.2016, 14:39
блин уже пожалел что связался, смотрите если в основной бибке в условие Вы проверяете на значение ИСТИНА, то и для овена знак должен быть больше -1
да и в целом зачем добавлять бибку экспортируйте в свой проект только то что нужно

DmitriiAnyushin
16.07.2016, 15:04
Ну логику замены я понял (хотя не понимаю смысла). Я просто интересуюсь почему программа не работает, хотя я выполняю все то что было прописано на первой странице темы. Ну, а что касается экспорта библиотек, то вставить готовые и отработанные библиотеки я считаю правильнее и надежнее, чем что либо переделывать и дербанить, тем более ресурс контроллера позволяет

capzap
16.07.2016, 15:28
смысл что у всех функции возвращают булевы переменные, а у овена отрицательный результат это минус один (-1). Почему не работает, потому что это надо проделать и с листеном, ну и вообще смотреть на каком шаге стопорится. Незабываем, что самое главное это в начале сделать правильное закрытие сокета, без него овеноовский плк сможет тянуть 15 открытых сокетов, потом контроллер придется сбрасывать

DmitriiAnyushin
18.07.2016, 08:33
Большое спасибо за консультацию. Меня просто интересовало, как и автора темы, нет ли готовых библиотек для работы с Modbus TCP (как для Modbus RTU). Из первых страниц данной темы я подумал, что можно использовать готовые библиотеки oscat для данной цели. Но тут получается, что готового нет и надо напильником дорабатывать, причем зная особенности контроллера. Будет время углублюсь в эту тему

capzap
18.07.2016, 08:38
да не так много там и переделывать, только открытие сокета и убрать лишнее из оскат бибки, не в смысле из всей библиотеки а из кода относящегося к модбасТСР

krug2000
07.11.2017, 13:56
Добрый день.
Выкладываю рабочий пример ModbusTCP из OSCAT библиотеки для ПЛК100.
Допилил при помощи блока IP_CONTROL2 от АТАМАНА
http://www.owen.ru/forum/showthread.php?t=25805&p=232436&viewfull=1#post232436

Тестировал с LectusOPC.

Работает до первого отключения.

p-nik
14.11.2017, 17:42
Спасибо за пример!
Подскажите, как увеличить массив данных?

krug2000
20.11.2017, 11:23
Добрый день.
Представляю пример ModbusTCP сервера с работой через сокеты.
Поддерживаются функции 3, 4, 6, 16.
Тестировал на ПЛК100.
Писал для работы с Openhab, который рвет соединение после каждого опроса.
Для работы с Lectus нужно установить переменную tReadTimeout больше периода опроса.
По идее должен работать и на ПЛК110.

Serhioromano
04.11.2018, 18:04
Я свое решение для TCP Client разместил вот тут.
http://www.owen.ru/forum/showthread.php?t=26318&page=4&p=291625&viewfull=1#post291625

Whallf
14.11.2018, 15:41
Всем здравствуйте! Я очень извиняюсь за свое нубство, но чего-то важного явно понять не могу. Перечитал эту тему не раз, все примеры испробовал но так и не смог понять как заставить 2 контроллера общаться по Modbus TCP.
У мен 2 ПЛК 150, соединенных через свич. Залил в оба программы для клиента и сервера, но что дальше так и не понял. Как послать запрос? Как принять ответ?
Помогите новичку пожалуйста найти общий язык с этими программами!

Chupakabra
25.02.2022, 12:52
Если кому нужна библиотека ModbusTCP server на SysLibSockets.lib под PLCwinNt, то ищите AN27K22 Moeller.