PDA

Просмотр полной версии : ПЛК-160 не удаляет программу



vvb
07.04.2014, 11:03
Добрый день

Столкнулся с такой проблемой на ПЛК-160 (-24У.М).

Все работало до того момента, как изменил немного программу (добавил дополнительный ПЛК для обмена переменными по UDP).
Программа вроде бы работает, но я не могу ее остановить через среду разработки Codesys, а кнопкой старт/стоп останавливается. Но это - ерунда.
Главное, что я не могу ни загрузить новую программу, ни удалить эту - контроллер в ответ на эти действия просто сбрасывается.
Пробовал и по Ethernet и через RS-232 - результат один. Кроме того, когда программа выполняется, контроллер как будто тормозит - подключаюсь через ПЛК браузер, ввожу "?", и список выводится медленно. строчка за строчкой.
Если я кнопкой Старт/стоп остановлю программу, реакция получается быстрее.

Цикл программы без обмена по UDP составлял где-то 12 мс.

Как мне сейчас убить программу?

capzap
07.04.2014, 11:57
Читали что нибудь в документации по КДС о сбросах?

petera
07.04.2014, 12:15
Добрый день

Столкнулся с такой проблемой на ПЛК-160 (-24У.М).

Все работало до того момента, как изменил немного программу (добавил дополнительный ПЛК для обмена переменными по UDP).
Программа вроде бы работает, но я не могу ее остановить через среду разработки Codesys, а кнопкой старт/стоп останавливается. Но это - ерунда.
Главное, что я не могу ни загрузить новую программу, ни удалить эту - контроллер в ответ на эти действия просто сбрасывается.
Пробовал и по Ethernet и через RS-232 - результат один. Кроме того, когда программа выполняется, контроллер как будто тормозит - подключаюсь через ПЛК браузер, ввожу "?", и список выводится медленно. строчка за строчкой.
Если я кнопкой Старт/стоп остановлю программу, реакция получается быстрее.

Цикл программы без обмена по UDP составлял где-то 12 мс.

Как мне сейчас убить программу?
1. Отключить питание ПЛК.
2. Дождаться выключения индикатора ПИТАНИЕ
3. Нажать и не отпускать кнопку СТАРТ/СТОП.
4. Включить питание ПЛК. Кнопку СТАРТ/СТОП не отпускать!
5. Дождаться окончания звукового сигнала от ПЛК.
6. Кнопку СТАРТ/СТОП отпустить.
7. Подключиться к ПЛК из кодесис, на вопрос "Программа была изменена. Загрузить новую программу? ответить Нет.
8. Выполнить Сброс(заводской).

vvb
07.04.2014, 12:32
Спасибо. Программу убил.

vvb
07.04.2014, 14:50
Тем не менее, вопрос остался: а что происходит? ))))

Есть программа, которая работает, останавливается, удаляется и т.д. (загрузка все равно глючик постоянно, конечно, то download.sdb не грузится, выдает "последний сервис был завершен некорректно", то при загрузке только обновлений ПЛК сбрасывается совсем, то еще что-нибудь).
Я добавляю в эту программу обмен переменными с другим ПЛК по UDP, загружаю ее, а она перестает останавливаться, удаляться и все такое. Хотя сама по себе работает и достаточно шустро (цикл 12 мс).
Запись переменных по UDP у меня настроена циклически через 500 мс, переменных мало - 30 байт.

Никто не сталкивался с таким?
В какую сторону, хоть, глянуть?

capzap
07.04.2014, 15:01
Модуль статистики добавте и выложите результат где то после минут двух работы

vvb
07.04.2014, 15:56
Модуль статистики добавте и выложите результат где то после минут двух работы
Я правильно вас понял, это оно?
12529

capzap
07.04.2014, 16:37
Ну как то странно, судя по используемому времени и времени свободному совсем не похоже что у Вас минимальный цикл 12мс, может Вы максимальный так выставили?

vvb
08.04.2014, 07:38
Ну как то странно, судя по используемому времени и времени свободному совсем не похоже что у Вас минимальный цикл 12мс, может Вы максимальный так выставили?
Время цикла я считал приближенно - взял обычную переменную, которая раз в цикл увеличивается на 1 и через 30 секунд посмотрел, сколько она насчитает. Получилось где-то 12 мс.
Максимальное значение цикла не трогал - там стоит 1000мс по умолчанию.

Может, чего-то с распределением памяти, хотя я никаких настроек не трогал, никаких сообщений о переполнениях или перекрытиях нет. Программа где-то 170 кБ, символьный файл где-то 200 кБ.

Есть 2 предупреждения, касаемые библиотеки NetVarUDP_LIB_V23: Тип UDINT не соответствует типу DINT преобразования! Будет использован UDINT.
Но, мне кажется, это не должно влиять...

В общем, я в замешательстве.
Причем, поначалу с обменом через UDP с одним ПЛК все было более-менее (только при записи download.sdb связь в конце обрывалась, хотя все вроде бы записывалось).
А потом я добавил еще две группы переменных для другого ПЛК и тут началось... А теперь программа с обменом с одним ПЛК ведет себя так же )))))

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

Да, у меня достаточно много retain-ов: порядка 1900 байт

capzap
08.04.2014, 09:15
По поводу ретайнов маловато у Вас время по отключению после потери питания,из модуля статистики оно составляет пять секунд, надо хотябы до 30 увеличить

Николаев Андрей
08.04.2014, 09:48
90% вероятность - проверяйте программу.
Судя по всему проект загружается и уходит в reset. Вы логинитесь, а контроллер снова в reset. Есть функция очистить все. И запишите для начала пустой проект - ;

vvb
08.04.2014, 10:04
По поводу ретайнов маловато у Вас время по отключению после потери питания,из модуля статистики оно составляет пять секунд, надо хотябы до 30 увеличить
Возможно, но претензий к их сохранению в течение уже года пока не возникало.


90% вероятность - проверяйте программу.
Судя по всему проект загружается и уходит в reset. Вы логинитесь, а контроллер снова в reset. Есть функция очистить все. И запишите для начала пустой проект - ;
Функцию очистить все я делал и неоднократно. Подключение к контроллеру происходит нормально.
Я понимаю, что дело в программе, вернее, в проекте, только что именно? Я ее после загрузки программу не запускаю даже, т.е. мой код не выполняется. Не знаю, какие действия ПЛК делает в режиме останова.
Возможно, что-то в настройках, но я беру рабочую программу, ничего в настройках не меняю, кроме добавления блока переменных и обмена по UDP. Никакого самописного выполняемого кода я не пишу - все штатная настройка обмена переменными в соответствии с мануалами.
Более того, программа при запуске выполняется, причем работает нормально (по крайней мере, по "внешнему виду"). У меня только циклически выполняемые действия, никаких прерываний и прочего.
А вот стираться и останавливаться через IDE Codesys не хотит. И через команды ПЛК браузера тоже самое.
Пустой проект я и так записываю.

petera
08.04.2014, 11:06
Были похожие танцы с бубном для ПЛК160 при попытке записать программу в не пустой ПЛК. Устранились после замены прошивки v2.14 на v2.15.3 http://www.owen.ru/forum/showthread.php?t=14536&p=120358&viewfull=1#post120358.
Правда появились другие, в моем случае, не смертельные проблемы http://www.owen.ru/forum/showthread.php?t=14536&p=129167&viewfull=1#post129167
Наличие проблем ПЛК160 для стандартной прошивки 2.14. признает и изготовитель http://www.owen.ru/forum/showthread.php?t=14536&p=115978&viewfull=1#post115978 там можно посмотреть и предыдущие посты

vvb
08.04.2014, 11:22
Спасибо, сейчас посмотрю

vvb
08.04.2014, 13:05
Перепрошил. Проблема осталась.
Попутно нашел свой косяк - время MinCycleLength стояло по умолчанию 1, поменял на 0 (скриншот статистики, который я выкладывал с 500 мкс циклом, был не верный - видимо, я сглючил и не запустил программу. Запущенная программа дает там число 80-90).

Все равно проблема осталась та же самая: беру проект с обменом по UDP, загружаю его туды (кстати, после загрузки download.sdb связь прерывается, но контроллер не сбрасывается - и то хорошо).
Запускаю, остановить не могу, удалить не могу. Удаляю только перезагрузкой с нажатой кнопкой старт/стоп.
Удаляют из проекта поддержку UDP, переменные удпшные оставляю, как обычные глобальные, загружаю - все работает, все останавливается и удаляется.

Удалять программу каждый раз через кнопку старт/стоп для меня неприемлемо - я многое делаю удаленно, а ездить на объект, или просить там каждый раз обслуживающий персонал тыкать кнопки - не вариант.

В общем, чего-то я заступорился...

capzap
08.04.2014, 13:13
А для чего Вы UDP используете, может бросить эти сетевые переменные да поступить как у меня на видео http://www.owen.ru/forum/showthread.php?t=12729&p=83833&viewfull=1#post83833

vvb
08.04.2014, 13:59
Я пробовал Modbus TCP штатными средствами - через конфигурацию, но у меня связь прерывалась (что-то там со свободными сокетами), разбираться с рукописным всем этим хозяйством не было желания.
В принципе, меня обмен переменными по UDP, судя по тому, как оно должно работать, вполне устраивает.

Хотя, может, придется и с MB TCP разбираться, но я что-то не совсем понимаю, где и какие библиотеки брать.
За видео спасибо, но я, чессгря, не понял - с библиотеками этими не работал. Только с MB RTU/ASCII. ))))

Дмитрий Артюховский
08.04.2014, 15:52
Перепрошил. Проблема осталась.
Попутно нашел свой косяк - время MinCycleLength стояло по умолчанию 1, поменял на 0 (скриншот статистики, который я выкладывал с 500 мкс циклом, был не верный - видимо, я сглючил и не запустил программу. Запущенная программа дает там число 80-90).

Все равно проблема осталась та же самая: беру проект с обменом по UDP, загружаю его туды (кстати, после загрузки download.sdb связь прерывается, но контроллер не сбрасывается - и то хорошо).
Запускаю, остановить не могу, удалить не могу. Удаляю только перезагрузкой с нажатой кнопкой старт/стоп.
Удаляют из проекта поддержку UDP, переменные удпшные оставляю, как обычные глобальные, загружаю - все работает, все останавливается и удаляется.

Удалять программу каждый раз через кнопку старт/стоп для меня неприемлемо - я многое делаю удаленно, а ездить на объект, или просить там каждый раз обслуживающий персонал тыкать кнопки - не вариант.

В общем, чего-то я заступорился...


минимальное время цикла нужно ставить БОЛЬШЕ чем показывается в вашем модуле статистики. У вас цикл выполняется за 8-9 мс стандартно и наверняка есть выбросы в большую сторону.
Убирайте 0 и ставьте 12 мс на минимальное время и 1000 мс на максимум и жизнь наладится волшебным образом.

vvb
09.04.2014, 07:49
минимальное время цикла нужно ставить БОЛЬШЕ чем показывается в вашем модуле статистики. У вас цикл выполняется за 8-9 мс стандартно и наверняка есть выбросы в большую сторону.
Убирайте 0 и ставьте 12 мс на минимальное время и 1000 мс на максимум и жизнь наладится волшебным образом.
В руководстве написано, что можно ставить 0, тогда цикл будет выполняться неравномерно, а сервисные функции возьмут столько времени, сколько им надо - меня это вполне устраивает.
Тем не менее, поставил я 20 мс - ничего не изменилось (только загрузка стала жутко тормозить).

vvb
09.04.2014, 08:19
Только что попробовал пустой проект с UDP - все тоже самое... Может, у меня библиотека UDP какая-то кривая... ))))

vvb
09.04.2014, 09:01
Нашел старую тему с похожей проблемой
http://www.owen.ru/forum/showthread.php?t=12718&p=83506&viewfull=1#post83506

Но решения там также нет

capzap
09.04.2014, 09:08
Нашел старую тему с похожей проблемой
http://www.owen.ru/forum/showthread.php?t=12718&p=83506&viewfull=1#post83506

Но решения там также нет
Как нет, а я вот отчетливо вижу пост Леонида, что всё получилось, только не через сетевые переменные,об этом я уже Вам писал и видео поеазывал, правда на видео соединение по ТСР

vvb
09.04.2014, 09:13
Как нет, а я вот отчетливо вижу пост Леонида, что всё получилось, только не через сетевые переменные,об этом я уже Вам писал и видео поеазывал, правда на видео соединение по ТСР
Я имел в виду решение с UDP.
Придется, видимо, плясять с бубнами вокруг TCP...
UPD: Пардон, плясать буду с рукописным UDP )))))

capzap
09.04.2014, 09:25
http://www.owen.ru/forum/showthread.php?t=12947&p=85927&viewfull=1#post85927
Попробуйте с этим вложением

vvb
09.04.2014, 12:07
http://www.owen.ru/forum/showthread.php?t=12947&p=85927&viewfull=1#post85927
Попробуйте с этим вложением
Попробовал, не получилось ))))
Вообще, я никогда раньше не работал с UDP.
Взял эту библиотеку, взял примеры к ней. Выбросил то, что к TCP относится.
Запустил - не работает, т.е. сокеты открываются, данные не принимается
Последовательность у меня такая:
1. Открываю сокеты для записи и чтения, указываю порт 4444, запоминаю их нумера (получаю в частности, 16 и 17).
2. Раз в три секунды записываю 10 байт через UdpSendData (посылаю на 127.0.0.1 на порт 4444)
3. Постоянно читаю данные через UdpReceiveData.

Может, я неправильно понимаю последовательность действий?

capzap
09.04.2014, 15:29
А зачем Вы посылаете на локальный адрес, какой айпишник имеет принимаемая сторона?

vvb
09.04.2014, 15:29
Короче, частично заработало. Использовал библиотеку TcpUdpLib.

Если кому интересно, такое ощущение, что есть косяк в функции GetIPAddress (ну или, если глубже, то в SysSockInetAddr).
Она у меня отказалась преобразовывать IP адрес из строки в DWORD, поэтому я немного модифицировал функцию UdpSendData и передаю ей IP в уже готовом DWORDе.
Аналогичная ситуация при приеме. Я модифицировал структуру CLIENT_REPLY и заменил строковый IP на DWORD.
Леонид в этой теме (http://www.owen.ru/forum/showthread.php?t=12718&page=2&p=84190&viewfull=1#post84190), судя по всему, столкнулся с такой же проблемой, но просто использовал другое преобразование.

И еще не смог наладить передачу самому себе через 127.0.0.1. Когда передаю пакеты с ПК, они нормально принимаются.

capzap
09.04.2014, 15:41
Если на одном устройстве пытаетесь читать и писать по удп, то как минимум лучше развести на разные порты прием и передачу, легче искать ошибки будет

vvb
15.04.2014, 09:54
В общем, связь по UDP между устройствами наладил, все работает. Всем спасибо за советы.

Но, проблема с нормальной связью среды разработки с ПЛК остается - заливаю программу, все работает (разумеется, чтобы подключиться к ПЛК приходится какое-то время ждать), программа останавливается, удаляется, сбрасывается.
Но после выключения и включения ПЛК связь уже установить не могу, приходится делать сброс программы кнопкой СТАРТ/СТОП, потом связь появляется, опять заливаю, все работает... до выключения.
Связи нет также через OPC сервер.
ПЛК пингуется.

Может, мне стоит откатиться до прошивки 2.14? Где ее взять в виде bin-файла? А то у меня нет кабеля для перепрошивки.

И еще такой вопрос: а чего так долго пищит ПЛК после сброса?

Гарчев Евгений
23.04.2014, 17:56
Здравствуйте!
Выложите проект, либо скиньте на e.garchev@owen.ru
Для символьного файла (для ОРС-сервера) указываете только необходимые переменные или всё подряд? Какую версию gateway-сервера используете?