PDA

Просмотр полной версии : Два ModBus-TCP сервера в ПЛК-конфигурации.



Gans
09.03.2012, 11:04
Здравствуйте все пережившие "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 контроллера и работал с Мастерскадой и КДС сразу через ТСР. Всё просто летает . Или тебе критично по Мотбасу?

Gans
09.03.2012, 14:32
Привет Серёга :-)

Витя привет!
Я по UDP соединял 3 контроллера и работал с Мастерскадой и КДС сразу через ТСР. Всё просто летает . Или тебе критично по Мотбасу?
Если с ModBus-TCP действительно проблемы, то подумываю уйти на UDP. Все преддыдущие варианты с UDP у меня работают без проблем. Просто хотелось мышкой поклацать и на этом вопрос закрыть.

Николаев Андрей
11.03.2012, 07:59
UDP хорошо, если параметров не оч. много.
ModBus TCP Master и ModBus TCP Slave в одной конфигурации делал. Работало.
А зачем два ModBus TCP Slave на одном ПЛК?

Yegor
11.03.2012, 08:51
А зачем два ModBus TCP Slave на одном ПЛК?Для безопасности, например. Один канал рабочий во внутреннюю сеть, а другой — во внешнюю среду, чисто экспорт данных.

А что может препятствовать такой возможности? Почему нельзя сделать несколько TCP-слейвов по разным портам? Сейчас это и вовсе на баг смахивает: в конфигурации такое допускается, но фактически ПЛК так не работает. Уж запретили бы тогда и в конфигурации это делать.

Yegor
11.03.2012, 15:14
видео что то не очень получилось, но у меня держит два сервераПодключаться-то оно подключается, но modbus-запросы остаются без ответа.

Yegor
11.03.2012, 18:15
Спасибо за потраченное время. Завтра попробую ещё раз.

Gans
11.03.2012, 18:23
Здравствуйте.

А зачем два ModBus TCP Slave на одном ПЛК?
Для разных служб:
1. Аварийка - для ввода аварийных уставок +включение/выключение контуров.
2. Наладчики - настройка регуляторов +ручное управление исполнительными механизмами и тд.


видео что то не очень получилось, но у меня держит два сервера
Огромное спасибо, но подскажите, а используя стандартный порт в двух ModBus-TCP серверах у Вас тоже не получилось?

P. S. Использование разных портов ТСР меня устраивает, но хотелось разобраться.

Gans
11.03.2012, 18:53
Проверил с разными портами ModBus-TCP сервера - всё работает :)
Ну кто бы мог подумать, что и тут будут особенности?! + говорят с броаткастом UDP тоже не все гладко.

Yegor
11.03.2012, 18:55
а используя стандартный порт в двух ModBus-TCP серверах у Вас тоже не получилось?Такое вообще в принципе не может работать. Если бы на одном порту висело более одного сервера, то откуда знать, к какому из серверов подключить очередного постучавшегося клиента?

Gans
11.03.2012, 21:09
Здравствуйте Yegor.

Такое вообще в принципе не может работать. Если бы на одном порту висело более одного сервера, то откуда знать, к какому из серверов подключить очередного постучавшегося клиента?
Даже я (на дельфях и VBA) смогу сделать это! Разбираем пришедший пакет и отправляем обрабатывать в нужную часть программы. На сколько я понимаю это стандартная ситуация, ведь с RS232 это работает!
Например: Web-камеры с Web-интерфейсом с одним lan-ом, по порту 80 или 8080 может работает с несколькими клиентами.
P. S. Согласен с Вами в том, что как минимум CoDeSys должен ругаться на такое.

Yegor
12.03.2012, 05:13
Даже я (на дельфях и VBA) смогу сделать это! Разбираем пришедший пакет и отправляем обрабатывать в нужную часть программы.Это распределение на уровне приложения, а не сетевого стека. Представим лучше, что запущено две разных программы, которые слушают один и тот же TCP-порт. По какому тогда принципу будет выбираться программа для подключающегося клиента?
Web-камеры с Web-интерфейсом с одним lan-ом, по порту 80 или 8080 может работает с несколькими клиентамиТут несколько клиентов, а не серверов.

Впрочем, иногда по несколько слушателей на один порт делают (socket reuse), но там сервер выбирается «наугад» — используется для балансировки нагрузки. Да и серверы в этом случае функционально идентичные.

Gans
12.03.2012, 06:20
Здравствуйте Yegor

По какому тогда принципу будет выбираться программа для подключающегося клиента?
Шестой байт (с учетом того что счет начинается с нулевого) в пакете (для ModBus-TCP) содержит адрес к кому обращаемся.

Yegor
12.03.2012, 06:49
Шестой байт (с учетом того что счет начинается с нулевого) в пакете (для ModBus-TCP) содержит адрес к кому обращаемся.Не путайте уровни OSI (http://ru.wikipedia.org/wiki/Сетевая_модель_OSI) — TCP/IP-стек понятия не имеет, какой байт что значит. Modbus по абстракции двумя этажами выше.

Gans
13.03.2012, 07:14
Не совсем верно рассуждаете. Если бы была возможность внутри одного модуля слейва иметь несколько адресов слейвов, то тогда без вопросов, пакеты приходили бы каждый к своему номеру, но в случае конфигуратора у Вас два модуля и даже присвоив им разные адреса слейвов, они должны работать с одним сокетом и занимает его тот, кто впереди в конфигурации, а по поводу ругани в протоколе нет такой ошибки, видимо поэтому о ней ни кто и не позаботился
Тут все понятно как программисты сделали, с этим полностью согласен. Но можно было бы при попытке открыть занятый порт получив код ошибки найти уже открытый порт и совместно им пользоваться или сразу перед открытием смотреть совпадения номеров портов. Проблема программная и программно может быть решена.
Непонятно сколько еще народу в борьбе с ModBus-TCP наткнётся на эту особенность, многим ли это нужно? Для меня остается вопрос, надо ли шуметь и пищать, что бы реализация ModBus-TCP была бы подправлена? Ведь на первый взгляд это недоделка.
P. S. Еще разок огромное СПАСИБО за помощь.

Yegor
13.03.2012, 07:37
особенностьНет здесь никакой особенности. Не вешают функционально разные серверы на один порт.

Gans
13.03.2012, 08:46
Здравствуйте Yegor

Нет здесь никакой особенности. Не вешают функционально разные серверы на один порт.
Для начала спасибо за помощь.
Просто меня сбил опыт работы с ModBus-RTU по интерфейсу RS232. Я был уверен, что аналогичное использование ModBus-TCP тоже предусмотрено. Сейчас разобрался и уже все работает :-)
Скажу честно, что даже если бы на текущий момент один порт мог работать с разными номерами серверов всё равно ушел бы на другой порт. Очень страшно управление кидать стандартными средствами.
P. S. Сейчас додумываю перепроверки в направлении "контрольного" регистра по типу CRC или по деревенски - контрольной суммы.

Gans
13.03.2012, 09:46
Это вообще лишнее, ТСР подразумевает доставку сообщения с контролем ошибок
Это я знаю;) . Защита от ModBus утилит, назовём её "защита от смышлёного дурака".

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

Хотя соглашусь с мнением техподдержки, а зачем два слейва? Таблица регистров достаточна велика, чтоб удовлетворить все хотелки. Можно же сделать по аналогии с трм-ками и пр. просто группы регистров, Вам же на стороне всёравно нужно реализовывать какие регистры будете читать, не вижу трудностей если одна группа будет начинатся с нуля, а другая с тысячи к примеру
В очередной раз соглашусь, но есть нюансы эксплуатации данной системы.
1. скорее всего это будут две разные программы, в разных частях города и разумеется разные люди.
2. Реализовав очередную хотелку (добавив/удалив еще один регистр в ModBus-TCP сервер) сдвинется адресация и в последующих регистрах. если там же будет управление и не успеешь/забудешь пробежаться по всем .... ой не будем о плохом. Еще народ разумеется схранит на флеш и это уже будет просто не контролируемы процесс:( Хотелки еще полгода будут сыпаться как из рога изобилия, тут и самому будет сложновато.
3. С группами неплохая мысль, но средствами ПЛК-конфигуратора 1000-ый регистр :D, нееет я лучше еще один слейв забабахаю. Вот когда перейду на библиотеки ... тогда конечно.

P. S. Еще чуть-чуть и эту тему наверное перенесут во флудилку.

lara197a
13.03.2012, 11:14
Извиняюсь, опять я с UDP влезаю.
ставил специально 3 ПЛК на них создавал круговую задачу. Один генерирует сигнал управления выходами-следующий выполняет этот сигнал Полученный сигнал изменяет и передает для упр. выходами третьего. Тот в свою очередь на выходы первого.
Подключил их через свитч. Добавил туда же связь с ОРС КДС, МастерСкаду и визуализацию КДС.
Очень устойчиво работает. Скада отрисовывает архив- данные идут без сбоев.
Лично я не сторонник работы с библиотеками. Есть стандартные средства и ими нужно работать. Иначе будут проблемы с обслуживанием. Это хорошо, если заказчик в твоем городе. А у меня есть шкафы в Омске(ещё 300 км от него) и др. неблизких местах. Сломается и ведь никто не разберется, а так худо-бедно , но можно попытаться людям объяснить.