PDA

Просмотр полной версии : ПЛК100 передача данных по TCP/IP при разных подсетях



kantv
04.03.2016, 14:43
Добрый день, всем читающим данную тему.

У нас есть контроллер ПЛК100 с прошивкой 2.15.8.
Нам потребовалось организовать сбор данных с контроллеров ПЛК100 на ПК. Мы реализовали передачу необходимых данных через ModbusTCP используя библиотеку Modbus.lib 27.5.09. Все прекрасно работало "на столе" во время разработки, когда же перенесли контроллер в рабочую сеть, то передача данных работать перестала. Поясню - у нас на предприятии сеть Ethernet разделена на два сегмента: один для офисных компьютеров, а другой для производственного оборудования. Между этими двумя сетями установлен программный шлюз (маршрутизатор). Сделано это по соображениями безопасности, чтобы подключиться к производственному оборудованию можно было только с тех компьютеров в офисной сети, для которых такой доступ разрешен на маршрутизаторе.
По началу подозревали какую-либо специфическую ошибку в программе на ПЛК или ПК. Для тестирования на ПЛК была создана минимальная версия программы для передачи данных по ModbusTCP. Проект с данной программой (ModbusTcpClient) прикладываю к данному сообщению. Как можно видеть из проекта, в нем используется всего одна функция MB_CLIENT, которая вызывается каждые 5 секунд и записывает содержимое трех регистров Modbus в устройстве Slave (по компьютерной терминологии это надо бы назвать сервером), которым являлся персональный компьютер с запущенной программой по приему Modbus пакетов. Адрес контроллера у нас при тестировании был всегда один и тот же - 172.17.0.94. Если компьютер имеет IP адрес из той же подсети, например 172.17.0.95, то данные успешно приходят и пакеты можно наблюдать в Wireshark. Но стоит только перенести ПК в другую подсеть, например 172.17.32.138, то данные сразу перестают приходить и в Wireshark не видно никаких попыток контроллера соединиться.


Изучая данную проблему глубже, я начал копаться в кодах библиотеки Modbus.lib и стал подозревать, что проблема в другой библиотеке SysLibSockets 20.2.06. Чтобы проверить свои предположения я нашел на данном форуме проект по реализации сетевого ping на ПЛК. И решил его протестировать. Мои опасения подтвердились - если компьютер имеет IP адрес из той же подсети что и контроллер, например все тот же 172.17.0.95, то пинги проходят нормально - контроллер видит ответы и в Wireshark видны как входящие, так и исходящие ICMP пакеты. Но стоит только сменить IP адрес компьютера на другую подсеть, например 172.17.32.138, то ping пропадает. Данный проект также прикладываю.

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

Собственно после всех этих тестирований, на которые было потрачено время и силы, у маня появилось стойкое подозрение, что контроллер, в частности ПЛК100, не способен по Ethernet передавать данные устройствам, которые находятся в другой подсети. Мне до сих пор не хочется в это верить, особенно читая на данном форуме темы по созданию Web серверов на контроллерах или удаленного управления, ведь все эти задачи не могут быть выполнены без передачи данных между различными подсетями, но мой реальный опыт пока свидетельствует о том, что данные между разными подсятеми контроллером не передаются.

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

capzap
04.03.2016, 14:54
шлюз в плк какой выставлен?

Scream
04.03.2016, 14:55
"Сразу хочу отметить, что компьютерная сеть настроена на 100% верно - данные подсети существуют уже не первый год и в каждой из подсетей расположено довольно много разного оборудования (компьютеры, принтеры, контроллеры Siemens, серверы и т.д.) и связь между этим оборудованием по различным протоколам работает замечательно."
...
"Поясню - у нас на предприятии сеть Ethernet разделена на два сегмента: один для офисных компьютеров, а другой для производственного оборудования. Между этими двумя сетями установлен программный шлюз (маршрутизатор)"
Сказки рассказываете... Или маршрутизатор выступает у сети в качестве шлюза, тогда да, плк тоже должен, или порт пробросьте, но тогда ip указывать маршрутизатора.
Есть конечно отличия сетевой карты на ОС windows и на плк на codesys но не на столько.

kantv
04.03.2016, 15:04
Видимо все же придется писать про настройки сети.
ПЛК:
IP = 172.17.0.94
mask = 255.255.252.0
Gayteway = 172.17.0.1

ПК - если подсеть та же и ПЛК
IP = 172.17.0.95
mask = 255.255.252.0
Gayteway = 172.17.0.1

Даже скриншот с PlcInfo прикладываю.

capzap
04.03.2016, 15:09
ну и зачем нам данные при удачной передаче запросов? В этом случае шлюз вовсе не обязателен. Запускайте из сети ПК nmap сканируя порт 502 по адресу плк и сразу станет ясно, правильно ли настроен маршрутизатор

kantv
04.03.2016, 15:16
Понимаю, что проще всего сейчас начать обсуждать настройки маршрутизатора. Тем более что в большинстве случае действительно настройки на маршрутизаторе являются причиной сетевых проблем.
Но хотелось бы получить ответ на вполне конкретный вопрос - Позволяет ли сетевой интерфейс контроллера ОВЕН ПЛК100 (а также других моделей) передавать данные на IP адреса в других подсетях?

capzap
04.03.2016, 15:21
Понимаю, что проще всего сейчас начать обсуждать настройки маршрутизатора. Тем более что в большинстве случае действительно настройки на маршрутизаторе являются причиной сетевых проблем.
Но хотелось бы получить ответ на вполне конкретный вопрос - Позволяет ли сетевой интерфейс контроллера ОВЕН ПЛК100 (а также других моделей) передавать данные на IP адреса в других подсетях?
ну конкретно Вам и отвечали, должен правильно выставлен шлюз в плк, в маршрутизаторе проброшен порт, не верите в возможности плк, поставте эмулятор слейва на ПК и постучитесь к нему из другой подсети, я утверждаю что так же не получите ответ

kantv
04.03.2016, 15:31
Шлюз выставлен верно. Порт пробрасывать не надо потому что это маршрутизатор - он пробрасывает ВСЕ пакеты (по всем портам TCP и UDP, а также ICMP без ограничений по протоколам) из одной сети в другую, в нем нет никакого NAT (как в обычных домашних роутерах).

А вот по поводу возможностей контроллера возникает сомнение, поскольку запрос на ping он отправляет на ПК, только если ПК находится в той же подсети что и ПЛК. И в случае с ping маршритизатор точно настроен верно, поскольку пакеты ping между ДЕСЯТКАМИ устройств в этих подсетях проходит нормально.

Scream
04.03.2016, 15:59
Вы же понимаете что пинг из одной подсети в другую возможен только через шлюз, 2 устройства находясь в разных подсетях пинговаться никак не могут самостоятельно.
нарисуйте карту сети чтоли, не хочется в пятницу читать много текста и вникать в вашу проблему с головой, на карте покажите все настройки.
Есть van порт и lan порт, из lan в van через шлюз без проблем, из van в lan нет, только правила и разрешения.

Yegor
04.03.2016, 17:04
Мы реализовали передачу необходимых данных через ModbusTCP используя библиотеку Modbus.libБулшит. Овеновский modbus.lib не умеет TCP. И MB_CLIENT в нём нет. Это из библиотеки oscat network, наверное.

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

Scream
04.03.2016, 18:56
Булшит. Овеновский modbus.lib не умеет TCP. И MB_CLIENT в нём нет. Это из библиотеки oscat network, наверное.

Предлагаю взять какой-нибудь другой комп, который не настраивался раньше на работу в этой сети, и попробовать задать на нём параметры как на ПЛК, после чего попинговать первый комп.
;) тем более, ТС сам не знает что делает.

kantv
31.03.2016, 18:39
Добрый день.

Сегодня наконец появилось время пересобрать тестовый стенд на основе маршрутизатора на CentOS.
Проекты (программы для контроллера) не менялись. Передача данных между различными подсетями прошла нормально.
Так что если кто-то в дальнейшем будет читанную данную тему, то - ошибка не воспроизвелась и причина ее неизвестна, есть только предположение, что антивирус Касперского блокировал пакеты на тестовом сервере, хотя он и был отключен.

Итог - все работает.