Просмотр полной версии : ПЛК-160 не удаляет программу
Добрый день
Столкнулся с такой проблемой на ПЛК-160 (-24У.М).
Все работало до того момента, как изменил немного программу (добавил дополнительный ПЛК для обмена переменными по UDP).
Программа вроде бы работает, но я не могу ее остановить через среду разработки Codesys, а кнопкой старт/стоп останавливается. Но это - ерунда.
Главное, что я не могу ни загрузить новую программу, ни удалить эту - контроллер в ответ на эти действия просто сбрасывается.
Пробовал и по Ethernet и через RS-232 - результат один. Кроме того, когда программа выполняется, контроллер как будто тормозит - подключаюсь через ПЛК браузер, ввожу "?", и список выводится медленно. строчка за строчкой.
Если я кнопкой Старт/стоп остановлю программу, реакция получается быстрее.
Цикл программы без обмена по UDP составлял где-то 12 мс.
Как мне сейчас убить программу?
Читали что нибудь в документации по КДС о сбросах?
Добрый день
Столкнулся с такой проблемой на ПЛК-160 (-24У.М).
Все работало до того момента, как изменил немного программу (добавил дополнительный ПЛК для обмена переменными по UDP).
Программа вроде бы работает, но я не могу ее остановить через среду разработки Codesys, а кнопкой старт/стоп останавливается. Но это - ерунда.
Главное, что я не могу ни загрузить новую программу, ни удалить эту - контроллер в ответ на эти действия просто сбрасывается.
Пробовал и по Ethernet и через RS-232 - результат один. Кроме того, когда программа выполняется, контроллер как будто тормозит - подключаюсь через ПЛК браузер, ввожу "?", и список выводится медленно. строчка за строчкой.
Если я кнопкой Старт/стоп остановлю программу, реакция получается быстрее.
Цикл программы без обмена по UDP составлял где-то 12 мс.
Как мне сейчас убить программу?
1. Отключить питание ПЛК.
2. Дождаться выключения индикатора ПИТАНИЕ
3. Нажать и не отпускать кнопку СТАРТ/СТОП.
4. Включить питание ПЛК. Кнопку СТАРТ/СТОП не отпускать!
5. Дождаться окончания звукового сигнала от ПЛК.
6. Кнопку СТАРТ/СТОП отпустить.
7. Подключиться к ПЛК из кодесис, на вопрос "Программа была изменена. Загрузить новую программу? ответить Нет.
8. Выполнить Сброс(заводской).
Тем не менее, вопрос остался: а что происходит? ))))
Есть программа, которая работает, останавливается, удаляется и т.д. (загрузка все равно глючик постоянно, конечно, то download.sdb не грузится, выдает "последний сервис был завершен некорректно", то при загрузке только обновлений ПЛК сбрасывается совсем, то еще что-нибудь).
Я добавляю в эту программу обмен переменными с другим ПЛК по UDP, загружаю ее, а она перестает останавливаться, удаляться и все такое. Хотя сама по себе работает и достаточно шустро (цикл 12 мс).
Запись переменных по UDP у меня настроена циклически через 500 мс, переменных мало - 30 байт.
Никто не сталкивался с таким?
В какую сторону, хоть, глянуть?
Модуль статистики добавте и выложите результат где то после минут двух работы
Модуль статистики добавте и выложите результат где то после минут двух работы
Я правильно вас понял, это оно?
12529
Ну как то странно, судя по используемому времени и времени свободному совсем не похоже что у Вас минимальный цикл 12мс, может Вы максимальный так выставили?
Ну как то странно, судя по используемому времени и времени свободному совсем не похоже что у Вас минимальный цикл 12мс, может Вы максимальный так выставили?
Время цикла я считал приближенно - взял обычную переменную, которая раз в цикл увеличивается на 1 и через 30 секунд посмотрел, сколько она насчитает. Получилось где-то 12 мс.
Максимальное значение цикла не трогал - там стоит 1000мс по умолчанию.
Может, чего-то с распределением памяти, хотя я никаких настроек не трогал, никаких сообщений о переполнениях или перекрытиях нет. Программа где-то 170 кБ, символьный файл где-то 200 кБ.
Есть 2 предупреждения, касаемые библиотеки NetVarUDP_LIB_V23: Тип UDINT не соответствует типу DINT преобразования! Будет использован UDINT.
Но, мне кажется, это не должно влиять...
В общем, я в замешательстве.
Причем, поначалу с обменом через UDP с одним ПЛК все было более-менее (только при записи download.sdb связь в конце обрывалась, хотя все вроде бы записывалось).
А потом я добавил еще две группы переменных для другого ПЛК и тут началось... А теперь программа с обменом с одним ПЛК ведет себя так же )))))
И ище такая штука: после того, как я программу записал, даже не запускал ее (ПЛК в стопе), пытаюсь записать сразу же новую программу - ПЛК сбрасывается. Т.е. в любом случае приходится делать холодный сброс ПЛК.
Да, у меня достаточно много retain-ов: порядка 1900 байт
По поводу ретайнов маловато у Вас время по отключению после потери питания,из модуля статистики оно составляет пять секунд, надо хотябы до 30 увеличить
Николаев Андрей
08.04.2014, 09:48
90% вероятность - проверяйте программу.
Судя по всему проект загружается и уходит в reset. Вы логинитесь, а контроллер снова в reset. Есть функция очистить все. И запишите для начала пустой проект - ;
По поводу ретайнов маловато у Вас время по отключению после потери питания,из модуля статистики оно составляет пять секунд, надо хотябы до 30 увеличить
Возможно, но претензий к их сохранению в течение уже года пока не возникало.
90% вероятность - проверяйте программу.
Судя по всему проект загружается и уходит в reset. Вы логинитесь, а контроллер снова в reset. Есть функция очистить все. И запишите для начала пустой проект - ;
Функцию очистить все я делал и неоднократно. Подключение к контроллеру происходит нормально.
Я понимаю, что дело в программе, вернее, в проекте, только что именно? Я ее после загрузки программу не запускаю даже, т.е. мой код не выполняется. Не знаю, какие действия ПЛК делает в режиме останова.
Возможно, что-то в настройках, но я беру рабочую программу, ничего в настройках не меняю, кроме добавления блока переменных и обмена по UDP. Никакого самописного выполняемого кода я не пишу - все штатная настройка обмена переменными в соответствии с мануалами.
Более того, программа при запуске выполняется, причем работает нормально (по крайней мере, по "внешнему виду"). У меня только циклически выполняемые действия, никаких прерываний и прочего.
А вот стираться и останавливаться через IDE Codesys не хотит. И через команды ПЛК браузера тоже самое.
Пустой проект я и так записываю.
Были похожие танцы с бубном для ПЛК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 там можно посмотреть и предыдущие посты
Перепрошил. Проблема осталась.
Попутно нашел свой косяк - время MinCycleLength стояло по умолчанию 1, поменял на 0 (скриншот статистики, который я выкладывал с 500 мкс циклом, был не верный - видимо, я сглючил и не запустил программу. Запущенная программа дает там число 80-90).
Все равно проблема осталась та же самая: беру проект с обменом по UDP, загружаю его туды (кстати, после загрузки download.sdb связь прерывается, но контроллер не сбрасывается - и то хорошо).
Запускаю, остановить не могу, удалить не могу. Удаляю только перезагрузкой с нажатой кнопкой старт/стоп.
Удаляют из проекта поддержку UDP, переменные удпшные оставляю, как обычные глобальные, загружаю - все работает, все останавливается и удаляется.
Удалять программу каждый раз через кнопку старт/стоп для меня неприемлемо - я многое делаю удаленно, а ездить на объект, или просить там каждый раз обслуживающий персонал тыкать кнопки - не вариант.
В общем, чего-то я заступорился...
А для чего Вы UDP используете, может бросить эти сетевые переменные да поступить как у меня на видео http://www.owen.ru/forum/showthread.php?t=12729&p=83833&viewfull=1#post83833
Я пробовал 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 мс на максимум и жизнь наладится волшебным образом.
минимальное время цикла нужно ставить БОЛЬШЕ чем показывается в вашем модуле статистики. У вас цикл выполняется за 8-9 мс стандартно и наверняка есть выбросы в большую сторону.
Убирайте 0 и ставьте 12 мс на минимальное время и 1000 мс на максимум и жизнь наладится волшебным образом.
В руководстве написано, что можно ставить 0, тогда цикл будет выполняться неравномерно, а сервисные функции возьмут столько времени, сколько им надо - меня это вполне устраивает.
Тем не менее, поставил я 20 мс - ничего не изменилось (только загрузка стала жутко тормозить).
Только что попробовал пустой проект с UDP - все тоже самое... Может, у меня библиотека UDP какая-то кривая... ))))
Нашел старую тему с похожей проблемой
http://www.owen.ru/forum/showthread.php?t=12718&p=83506&viewfull=1#post83506
Но решения там также нет
Нашел старую тему с похожей проблемой
http://www.owen.ru/forum/showthread.php?t=12718&p=83506&viewfull=1#post83506
Но решения там также нет
Как нет, а я вот отчетливо вижу пост Леонида, что всё получилось, только не через сетевые переменные,об этом я уже Вам писал и видео поеазывал, правда на видео соединение по ТСР
Как нет, а я вот отчетливо вижу пост Леонида, что всё получилось, только не через сетевые переменные,об этом я уже Вам писал и видео поеазывал, правда на видео соединение по ТСР
Я имел в виду решение с UDP.
Придется, видимо, плясять с бубнами вокруг TCP...
UPD: Пардон, плясать буду с рукописным UDP )))))
http://www.owen.ru/forum/showthread.php?t=12947&p=85927&viewfull=1#post85927
Попробуйте с этим вложением
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.
Может, я неправильно понимаю последовательность действий?
А зачем Вы посылаете на локальный адрес, какой айпишник имеет принимаемая сторона?
Короче, частично заработало. Использовал библиотеку 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. Когда передаю пакеты с ПК, они нормально принимаются.
Если на одном устройстве пытаетесь читать и писать по удп, то как минимум лучше развести на разные порты прием и передачу, легче искать ошибки будет
В общем, связь по UDP между устройствами наладил, все работает. Всем спасибо за советы.
Но, проблема с нормальной связью среды разработки с ПЛК остается - заливаю программу, все работает (разумеется, чтобы подключиться к ПЛК приходится какое-то время ждать), программа останавливается, удаляется, сбрасывается.
Но после выключения и включения ПЛК связь уже установить не могу, приходится делать сброс программы кнопкой СТАРТ/СТОП, потом связь появляется, опять заливаю, все работает... до выключения.
Связи нет также через OPC сервер.
ПЛК пингуется.
Может, мне стоит откатиться до прошивки 2.14? Где ее взять в виде bin-файла? А то у меня нет кабеля для перепрошивки.
И еще такой вопрос: а чего так долго пищит ПЛК после сброса?
Гарчев Евгений
23.04.2014, 17:56
Здравствуйте!
Выложите проект, либо скиньте на e.garchev@owen.ru
Для символьного файла (для ОРС-сервера) указываете только необходимые переменные или всё подряд? Какую версию gateway-сервера используете?
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot