Просмотр полной версии : Два ModBus-TCP сервера в ПЛК-конфигурации.
Здравствуйте все пережившие "8 марта" :-)
Мне не удалось сделать два ModBus-TCP сервера в ПЛК-конфигурации (разумеется с разными ModBus-адресами). Точнее создать удалось, но работает только один из них (например: №1. Тот который верхний в ПЛК-конфигурации). При вырезании и вставки сервера №1 в низ ПЛК-конфигурации начинает работать сервер №2, а сервер №1 данные не принимает :-(
И у меня возник вопрос: это у меня что-то с руками или действительно более одного ModBus-TCP работающего сервера стандартными средствами ПЛК-конфигурации не создать?
P. S. Прошивка 2.10.5, торгет 2.10.
P. P. S. Про внешние библиотеки знаю, но вот сильно много придется переделывать.
lara197a
09.03.2012, 12:49
Витя привет!
Я по UDP соединял 3 контроллера и работал с Мастерскадой и КДС сразу через ТСР. Всё просто летает . Или тебе критично по Мотбасу?
Привет Серёга :-)
Витя привет!
Я по UDP соединял 3 контроллера и работал с Мастерскадой и КДС сразу через ТСР. Всё просто летает . Или тебе критично по Мотбасу?
Если с ModBus-TCP действительно проблемы, то подумываю уйти на UDP. Все преддыдущие варианты с UDP у меня работают без проблем. Просто хотелось мышкой поклацать и на этом вопрос закрыть.
Николаев Андрей
11.03.2012, 07:59
UDP хорошо, если параметров не оч. много.
ModBus TCP Master и ModBus TCP Slave в одной конфигурации делал. Работало.
А зачем два ModBus TCP Slave на одном ПЛК?
А зачем два ModBus TCP Slave на одном ПЛК?Для безопасности, например. Один канал рабочий во внутреннюю сеть, а другой — во внешнюю среду, чисто экспорт данных.
А что может препятствовать такой возможности? Почему нельзя сделать несколько TCP-слейвов по разным портам? Сейчас это и вовсе на баг смахивает: в конфигурации такое допускается, но фактически ПЛК так не работает. Уж запретили бы тогда и в конфигурации это делать.
видео что то не очень получилось, но у меня держит два сервераПодключаться-то оно подключается, но modbus-запросы остаются без ответа.
Спасибо за потраченное время. Завтра попробую ещё раз.
Здравствуйте.
А зачем два ModBus TCP Slave на одном ПЛК?
Для разных служб:
1. Аварийка - для ввода аварийных уставок +включение/выключение контуров.
2. Наладчики - настройка регуляторов +ручное управление исполнительными механизмами и тд.
видео что то не очень получилось, но у меня держит два сервера
Огромное спасибо, но подскажите, а используя стандартный порт в двух ModBus-TCP серверах у Вас тоже не получилось?
P. S. Использование разных портов ТСР меня устраивает, но хотелось разобраться.
Проверил с разными портами ModBus-TCP сервера - всё работает :)
Ну кто бы мог подумать, что и тут будут особенности?! + говорят с броаткастом UDP тоже не все гладко.
а используя стандартный порт в двух ModBus-TCP серверах у Вас тоже не получилось?Такое вообще в принципе не может работать. Если бы на одном порту висело более одного сервера, то откуда знать, к какому из серверов подключить очередного постучавшегося клиента?
Здравствуйте Yegor.
Такое вообще в принципе не может работать. Если бы на одном порту висело более одного сервера, то откуда знать, к какому из серверов подключить очередного постучавшегося клиента?
Даже я (на дельфях и VBA) смогу сделать это! Разбираем пришедший пакет и отправляем обрабатывать в нужную часть программы. На сколько я понимаю это стандартная ситуация, ведь с RS232 это работает!
Например: Web-камеры с Web-интерфейсом с одним lan-ом, по порту 80 или 8080 может работает с несколькими клиентами.
P. S. Согласен с Вами в том, что как минимум CoDeSys должен ругаться на такое.
Даже я (на дельфях и VBA) смогу сделать это! Разбираем пришедший пакет и отправляем обрабатывать в нужную часть программы.Это распределение на уровне приложения, а не сетевого стека. Представим лучше, что запущено две разных программы, которые слушают один и тот же TCP-порт. По какому тогда принципу будет выбираться программа для подключающегося клиента?
Web-камеры с Web-интерфейсом с одним lan-ом, по порту 80 или 8080 может работает с несколькими клиентамиТут несколько клиентов, а не серверов.
Впрочем, иногда по несколько слушателей на один порт делают (socket reuse), но там сервер выбирается «наугад» — используется для балансировки нагрузки. Да и серверы в этом случае функционально идентичные.
Здравствуйте Yegor
По какому тогда принципу будет выбираться программа для подключающегося клиента?
Шестой байт (с учетом того что счет начинается с нулевого) в пакете (для ModBus-TCP) содержит адрес к кому обращаемся.
Шестой байт (с учетом того что счет начинается с нулевого) в пакете (для ModBus-TCP) содержит адрес к кому обращаемся.Не путайте уровни OSI (http://ru.wikipedia.org/wiki/Сетевая_модель_OSI) — TCP/IP-стек понятия не имеет, какой байт что значит. Modbus по абстракции двумя этажами выше.
Не совсем верно рассуждаете. Если бы была возможность внутри одного модуля слейва иметь несколько адресов слейвов, то тогда без вопросов, пакеты приходили бы каждый к своему номеру, но в случае конфигуратора у Вас два модуля и даже присвоив им разные адреса слейвов, они должны работать с одним сокетом и занимает его тот, кто впереди в конфигурации, а по поводу ругани в протоколе нет такой ошибки, видимо поэтому о ней ни кто и не позаботился
Тут все понятно как программисты сделали, с этим полностью согласен. Но можно было бы при попытке открыть занятый порт получив код ошибки найти уже открытый порт и совместно им пользоваться или сразу перед открытием смотреть совпадения номеров портов. Проблема программная и программно может быть решена.
Непонятно сколько еще народу в борьбе с ModBus-TCP наткнётся на эту особенность, многим ли это нужно? Для меня остается вопрос, надо ли шуметь и пищать, что бы реализация ModBus-TCP была бы подправлена? Ведь на первый взгляд это недоделка.
P. S. Еще разок огромное СПАСИБО за помощь.
особенностьНет здесь никакой особенности. Не вешают функционально разные серверы на один порт.
Здравствуйте Yegor
Нет здесь никакой особенности. Не вешают функционально разные серверы на один порт.
Для начала спасибо за помощь.
Просто меня сбил опыт работы с ModBus-RTU по интерфейсу RS232. Я был уверен, что аналогичное использование ModBus-TCP тоже предусмотрено. Сейчас разобрался и уже все работает :-)
Скажу честно, что даже если бы на текущий момент один порт мог работать с разными номерами серверов всё равно ушел бы на другой порт. Очень страшно управление кидать стандартными средствами.
P. S. Сейчас додумываю перепроверки в направлении "контрольного" регистра по типу CRC или по деревенски - контрольной суммы.
Это вообще лишнее, ТСР подразумевает доставку сообщения с контролем ошибок
Это я знаю;) . Защита от ModBus утилит, назовём её "защита от смышлёного дурака".
мне кажется лучше бы начать подготавливаться к переходу на работу с библиотеками, тогда можно принимать на один порт(сокет) инфу с разными номерами слейвов.
Если в дальнейшем вылезут очередные особенности разумеется будем смотреть.
Просто на текущий момент необходимо перекинуть всего три регистра.
Хотя соглашусь с мнением техподдержки, а зачем два слейва? Таблица регистров достаточна велика, чтоб удовлетворить все хотелки. Можно же сделать по аналогии с трм-ками и пр. просто группы регистров, Вам же на стороне всёравно нужно реализовывать какие регистры будете читать, не вижу трудностей если одна группа будет начинатся с нуля, а другая с тысячи к примеру
В очередной раз соглашусь, но есть нюансы эксплуатации данной системы.
1. скорее всего это будут две разные программы, в разных частях города и разумеется разные люди.
2. Реализовав очередную хотелку (добавив/удалив еще один регистр в ModBus-TCP сервер) сдвинется адресация и в последующих регистрах. если там же будет управление и не успеешь/забудешь пробежаться по всем .... ой не будем о плохом. Еще народ разумеется схранит на флеш и это уже будет просто не контролируемы процесс:( Хотелки еще полгода будут сыпаться как из рога изобилия, тут и самому будет сложновато.
3. С группами неплохая мысль, но средствами ПЛК-конфигуратора 1000-ый регистр :D, нееет я лучше еще один слейв забабахаю. Вот когда перейду на библиотеки ... тогда конечно.
P. S. Еще чуть-чуть и эту тему наверное перенесут во флудилку.
lara197a
13.03.2012, 11:14
Извиняюсь, опять я с UDP влезаю.
ставил специально 3 ПЛК на них создавал круговую задачу. Один генерирует сигнал управления выходами-следующий выполняет этот сигнал Полученный сигнал изменяет и передает для упр. выходами третьего. Тот в свою очередь на выходы первого.
Подключил их через свитч. Добавил туда же связь с ОРС КДС, МастерСкаду и визуализацию КДС.
Очень устойчиво работает. Скада отрисовывает архив- данные идут без сбоев.
Лично я не сторонник работы с библиотеками. Есть стандартные средства и ими нужно работать. Иначе будут проблемы с обслуживанием. Это хорошо, если заказчик в твоем городе. А у меня есть шкафы в Омске(ещё 300 км от него) и др. неблизких местах. Сломается и ведь никто не разберется, а так худо-бедно , но можно попытаться людям объяснить.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot