Вход

Просмотр полной версии : проблема с плк100



kpv8
28.07.2010, 14:20
Здравствуйте.

Есть небольшая программа на ПЛК, которая считывает значения с COM портов и передает по modbus(slave) по протоколу TCP в программу на ПК. Программа на Delphi использует компонент для связки по modbus. Запускаем все, все работает отлично. Проходит некоторое время, час-два, может меньше, может больше и начинаются вываливаться сообщения:
Socket Error # 10054 Connection reset by peer.
и
Socket Error # 10060 Connection timed out.

в программе на ПК срабатывает восстановление подключения. Но восстановления не происходит. ПЛК виснет и после этого нельзя соединится даже с помощью CoDeSys. Помогает только перезагрузка ПЛК.

Если соединение разорвать вручную, то такие сообщения тоже вылетают, но срабатывает переподключение и все идет нормально. Но после нескольких часов работы ПЛК виснет.

Что может быть? Подскажите в чем проблема?

Николаев Андрей
28.07.2010, 14:55
нужен лог гипертерминала (в файл пожалуйста)

kpv8
28.07.2010, 15:01
нужен лог гипертерминала (в файл пожалуйста)

как же я его дам? у меня не через гипертерминал соединение а по Tcp или я не так понял.

Николаев Андрей
28.07.2010, 15:25
а через Com подключить вариантов нет?

kpv8
29.07.2010, 07:33
Дело в том, что работать будет только через TCP, на двух COM портах будут висеть устройства. Поэтому вариант с COM портом отпадает, если у COm порта все будет нормально, а у TCP подвисать тут гипертерминал не поможет.

Вчера сделали каждые полчаса реконнект к ПЛК через modbus, отработал 12 часов без сбоев, не подвисал. Странное поведение...

Николаев Андрей
29.07.2010, 11:22
Видимо не совсем корректно выразился.
Лог терминала мне нужен при перезагрузке ПЛК - в это время ПЛК выдает всю информацию о себе:
Версии прошивки всех процессоров, версия необходимого Target. MAC адрес, IP адрес и т.д...
То есть подключить ПЛК через Debug к ПК. Запустить Гипертерминал на скорости 115200 управление - нет. И нажать резет на ПЛК.

kpv8
29.07.2010, 11:44
сделал. в приложении файл с логом.

Николаев Андрей
29.07.2010, 13:19
По логу терминала - Все должно быть хорошо.
И прошивка в которой подправлен обмен по Ethernet
И МАС четный в начале...
Прорисуйте всю сеть - через Хабы, свичи работаете? Что еще в сети?

kpv8
29.07.2010, 13:42
ПЛК соеденен по Ethernet через свитч. ПК тоже самое. В сети есть winroute proxy. Вроде больше ничего.

kpv8
30.07.2010, 07:37
сегодня опять произошло зависание плк (((

kpv8
02.08.2010, 10:49
кто-нибудь помогите, плк снова завис через 2ое суток! как проверить, в чем проблема?

Gans
02.08.2010, 20:21
а в проге для плк100 с орс понтами не баловался? возможно, были переменные, а потом остались только имен в орс. еще, программа должна быть полностью написано с использованием одно и тогоже торгет-файла (соответствующего прошивке плк100)!!! на всякий случай могу порекомендовать создать пустой проект и в него с использованием экспорт/импорт вставить написанную программу, а плк-конфигурацию следует набирать руками :-( после такого всё должно работать. еще в программе посмотреть, нет ли деления на ноль, корень из отрицательного числа, преобразование непонятно чего в непонтно что и тд. и тп. конечно качество связи посмотреть, может времено комп поближе поставить к плк100?
зы я стараюсь обкатывать проги недели две, а потом только на объект.

Николаев Андрей
02.08.2010, 21:13
Спасбо Gans за опыт - дельные советы.
В первую очередь что бы я сделал.
1. Поставил снифер (программу для прослушивания) на прослушку сети Ethernet - не возникают ли лавинные посылки от какого нибудь доброго сервера.
2. Действительно перенастроил OPC/ То есть зашел бы в меню OPC и снял галку включения переменных в передачу. Перекомпилировал проект.
Потом заново создал список и вернул галку на получение данных.
Ну и в OPC конфигураторе удалил связь и подключил заново.

kpv8
03.08.2010, 07:53
1. ОРС сервером я не пользуюсь. Все идет через modbus
2. В программе никакх вычислений не происходит. Только в библиотеке.
Программа через библиотеку считывает данные с COM портов ПЛК и все.

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

lara197a
03.08.2010, 09:25
на первый взгляд не корректно использованы имена. в области дискретных входов и в модуле 8бит(для тср), одинаковые названия переменных.
потом добавьте еще один модуль 8 бит после первого, для выравнивания адресного пространства.
код не смотрел, все равно без коментов не понять.

Gans
03.08.2010, 11:20
на первый взгляд не корректно использованы имена. в области дискретных входов и в модуле 8бит(для тср), одинаковые названия переменных.
потом добавьте еще один модуль 8 бит после первого, для выравнивания адресного пространства.
код не смотрел, все равно без коментов не понять. Всё тоже самое + возникло предложение: добавить модуль «Button» (в ПЛК-конфигурации). У большинства пользователей это решает проблемы остановки ПЛК1хх.

Gans
03.08.2010, 11:34
посмотрел лог (из предыдущих сообщений) - так у вас еще и плк1хх с ограниченой лицензией :-(надо что бы ктото посчитал хватит или нет лицензии на конфигурацию + указатали из библиотек я не)

kpv8
03.08.2010, 13:12
посмотрел лог (из предыдущих сообщений) - так у вас еще и плк1хх с ограниченой лицензией :-(надо что бы ктото посчитал хватит или нет лицензии на конфигурацию + указатали из библиотек я не)

А как это посчитать?

К предыдущим постам. Все сделал, поменял названия и добавил кнопку.

Gans
03.08.2010, 13:41
примерно посчитать могут не многие .... но я для аналогичной задачи брал бы плк1хх с неограниченой лицензией.
далее ждём две недели и готовимся через две недели праздновать успешное завершение борьбы с выше указанной проблемой :-)
удачки

kpv8
03.08.2010, 15:13
В инструкции по ограничению лицензии ПЛК написано:

"Ограничение распространяется только на область памяти ввода/вывода, количество внутренних переменных программы ПЛК ограничивается только количеством свободной памяти."

Всего дано 360 байт. Используется переменных на 80 байт. Если смотреть в PLC Configuration. Т.е. память не забивается. Думаю проблема не в этом.

kpv8
17.08.2010, 07:50
помогите кто-нибудь с плк? виснет и все. переподключиться невозможно, только перезапуск плк помогает. что делать уже и незнаю.

SergeyNG
17.08.2010, 18:15
виснет ли плк на самом деле или программа внутри продолжает выполняться, а виснет только обмен по портам со средой разработки или с вашей прогой?
плк в общей сети или толко с компом?

kpv8
18.08.2010, 07:40
То, что происходит внутри я даже незнаю, потому как подключиться к ПЛК не могу, не из своей проги, не из CoDeSys. ПЛК в общей сети. Как можно проверить, рабоатет программа внутри или нет?

Обмен с ПЛК происходит через TCP/IP, к COM портам подключены другие устройства

SergeyNG
18.08.2010, 09:08
Проверить можно, например, сделав программное мигание одного из выходов контроллера.
К чему спрашиваю, контроллер ПЛК100 пр.2.10.7 стоял в общей сети, периодически раз, два в неделю происходило прерывание обмена со скадой через порт Ethernet, по RS232 Debug связаться также не возможно. Но контроллер продолжал отрабатывать программу, реагировал на входы, управлял выходами. Лечился кнопкой Reset ПЛК.

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

kpv8
18.08.2010, 11:23
спасибо за ответ!

обязательно попробую так сделать!

kpv8
23.08.2010, 09:33
ситуация следующая:
с тестовой программой, добавил мигание выхода в плк, работает отлично, за 3 дня ниразу не завис. без теста(мигания выхода), зависает. выходит дело в плк?

SergeyNG
23.08.2010, 11:41
ситуация следующая:
с тестовой программой, добавил мигание выхода в плк, работает отлично, за 3 дня ниразу не завис. без теста(мигания выхода), зависает. выходит дело в плк?

Т.е. добавили к рабочей программе мигание выхода и контроллер перестал зависать?:)

kpv8
24.08.2010, 07:35
да, но время мигания стояло около 10 секунд. вчера увеличили до 1 минуты и снова завис.
И на панели ПЛК где должен гореть светодиод Пуск/Стоп, он не горел. Странно. В программе стоит Button.

Gans
24.08.2010, 09:38
да, но время мигания стояло около 10 секунд. вчера увеличили до 1 минуты и снова завис.
И на панели ПЛК где должен гореть светодиод Пуск/Стоп, он не горел. Странно. В программе стоит Button.Привет kpv8
Вы проект для ПЛК100 заново с «нуля» создавали? На всех компьютерах стоит один и тотже торгет-файл?
P. S. Был прецедент когда у меня всё работает, а обслуживающий персонал со своего рабочего места, что-то покрутит и в течении 12 ч контроллеры висли :-( это даже эксплуатация заметила :-)

Gans
24.08.2010, 09:46
Всего дано 360 байт. Используется переменных на 80 байт. Если смотреть в PLC Configuration. Т.е. память не забивается. Думаю проблема не в этом.У меня с ограниченной лицензией не удалось считать данные даже с двух МВА8 (ПЛК100 вис), правда я в программе пользовался мутными библиотеками. После замены ПЛК100 с неограниченной лицензией проблема ушла.

SergeyNG
24.08.2010, 10:22
У меня с ограниченной лицензией не удалось считать данные даже с двух МВА8 (ПЛК100 вис), правда я в программе пользовался мутными библиотеками. После замены ПЛК100 с неограниченной лицензией проблема ушла.

Не факт. Много стоят с ограниченной, если никуда не лезешь указателями и не выходишь переменными за рамки лицензии все в норме. Правда не использовал Modbus TCP в конфигурации.
Тут только исключающими экспериментами. Например, оставьте вашу конфигурацию, но основную программу к чёрту, оставьте только мигание выхода. Или наоборот.
А сеть ПЛК отделили от общей?

kpv8
24.08.2010, 11:49
серверная часть стоит на сервере, у клиента только библиотека, которая соединяется с серверной частью.

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

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

сегодня с утра вернул значение мигания обратно, на меньшее количество миганий, пока работает.

kpv8
26.08.2010, 08:24
Заметил такую вещь, лампочка Старт/стоп, перестает гореть через некоторое время. В Программе есть переменная Button, но не помогает. Или Button надо внутри программы задать True?

Как можно пинговать ПЛК? Почему то, если он перешел в режим СТОП, то по идее он не передает данные?

Кто нибудь в делфи пользовался ModBus Client/server? Вот здесь он находится http://sourceforge.net/projects/delphimodbus

Филоненко Владислав
26.08.2010, 10:20
проект посмотреть можно?

kpv8
27.08.2010, 07:38
в теме я уже выкладывал проект со сторонней библиотекой во второй ветке.

kpv8
30.08.2010, 13:42
или нужен проект на делфи?

kpv8
23.09.2010, 08:26
В общем прошло 2 недели и ситуация следующая:

ПЛК работал отлично и спустя 2 недели началось. Внутренняя программа работает, но по модбасу подключиться нельзя и через CoDeSys тоже.

В чем может быть проблема?

Николаев Андрей
23.09.2010, 11:15
C помощью ModBus тестера Вы можете данные с ПЛК получать?

kpv8
23.09.2010, 13:34
Что за ModBus тестер? Сторонняя программа? Т.е. как он зависнет попробовать этой программой? правильно я понял?

kpv8
11.10.2010, 08:25
модбас тестером тоже не получается подсоединится. выходит дело в модбас?

kpv8
12.10.2010, 09:41
кто нибудь сможет помочь?

Andy
12.10.2010, 10:26
модбас тестером тоже не получается подсоединится. выходит дело в модбас?

Я так понимаю, у Вас Modbus/TCP и предложение проверить порт не проходит. С такой конфигурацией я не работал, единственное предложение - это поставить вместо ПЛК другой Modbus slave и проверить связь с ним. Отключить брандмауэр, онлайн-антивирус, попингать, короче, сеть проверить.

Филоненко Владислав
12.10.2010, 11:08
И еще. Не всякая версия ModBus tester, даже если в ней активна кнопочка ModBus TCP, по этому TCP работает :)

kpv8
12.10.2010, 11:27
можете предложить какой нибудь вариант модбас тестера?

Andy
12.10.2010, 13:24
modpoll (http://www.modbusdriver.com/modpoll.html) попробуйте. Только для TCP я его не пробовал. И учитывайте нумерацию регистров - с 0 или 1.

kpv8
12.10.2010, 14:48
именно этой программой я и пользовался. когда плк в нормально рабочем состоянии то соединение проходит и данные принимаются и отправляются. когда же плк завис, то соединиться невозможно.

Andy
12.10.2010, 15:25
упс, пропустил этот момент. по зависаниям у меня больше вопросов, чем ответов. кодесисом тоже не подключиться? плк виснуть не должен вроде, собака пересбросит его.

вдогонку: подключите кроссовером плк к пк и проверьте. чтоб исключить влияние внешней сети.

kpv8
12.10.2010, 15:35
Не верно выразился, программа в ПЛК работает, т.е. реле переключается(щелкает). А вот по modbus соединение обрывается и с концами. Кодесис тоже не подключается. Дело в том, что ПЛК напрямую с ПК вроде как работало нормально. Но нам всеравно нужно будет работать в сети, которая проходит через пару свичей до сервера.

Andy
12.10.2010, 18:34
посниффите сеть. наверняка там зафлужено все, а производительность Tcp-стека у овна, похоже, оставляет желать лучшего.

kpv8
13.10.2010, 08:26
ну как-то странно, пару недель работает, а потом перестает...попробую сниффер, но боюсь у нас действительно все зафлужено. Но как же тогда быть? Неужели ОВЕНовский modbus из-за этого будет неработоспособным?

kpv8
14.10.2010, 16:08
так что можете предложить? как быть?

Andy
15.10.2010, 10:36
ну как-то странно, пару недель работает, а потом перестает...попробую сниффер, но боюсь у нас действительно все зафлужено. Но как же тогда быть? Неужели ОВЕНовский modbus из-за этого будет неработоспособным?

Вопрос в этом случае может быть в особенностях реализации TCP-стека. Как человек, немного знакомый с другими реализациями, я сужу о упрощенности стека по отсутствию таблиц маршрутизации между PPP на модеме и Ethernet (недавно упоминалось). Поставьте на место ПЛК ПК со сниффером и посмотрите, что в сети творится. А потом спросите "вот, за 1с проходит ххх пакетов по таким-то портам. Это может вешать ПЛК?"

Andy
22.10.2010, 11:51
так что, сниффить пробовали?

kpv8
10.11.2010, 10:15
так что, сниффить пробовали?

Попробовал, но как то не понятно, может какую программу посоветуете?

Andy
11.11.2010, 00:31
да какие могут быть советы? я использую windump (tcpdump for windows). Ethereal (wireshark) тоже подойдет. главное, оценить обстановку в сети.