Спустя некоторое время перестаёт работать программа

Автор novtoxa, 30 октября 2015, 09:23:46

« назад - далее »

novtoxa

Написал программу для управления сан-пропускником. Отладил на оборудовании,- всё работает. Перенёс на ноут, приехал на объект и залил в местные контроллеры. При заливке программа попросила обновить ядро контроллеров. Обновление ядра прошло без проблем, как и заливка программы, но через несколько циклов программа перестала работать и все дискретные выходы перешли в положение OFF. Запустил отладку в устройстве и не поверил своим глазам! В отладке программа продолжает стабильно работать а в реале - выходы молчат (все OFF). Добавил тригер на один из выходов, который зажигает лампочку на 220В, в схеме включения которой нет ничего, кроме дискретного выхода, и взвёл этот тригер по старту программы, а вход reset обозначил константой "0". При старте программы лампочка благополучно загорелась, но через несколько циклов благополучно погасла. КАК ТАКОЕ МОЖЕТ БЫТЬ?

mike

Добрый день!
Вы дали слишком мало информации.
Спешу вас разочаровать, Деда мороза не бывает, впрочем как и чудес.
надо прочитать http://zentec.ru/dev/docs/d150714/d120213/
особенно обратить внимание на п.6
надо приложить проект

novtoxa

Проект приложу позже (сейчас нет возможности), но хочу обратить Ваше внимание на то, что в более ранней прошивке ядра всё работало без сбоев, проблемы начались после перепрошивки ядра контроллера до более новой версии. Может стоит посмотреть последние изменения в прошивке ядра?
Некоторые тезисы из п.6 стали новостью для меня. Жаль, что эта литература не была доступна изначально!

mike

Уже как полтора года висит это описание.
В ядро добавились некоторые функции и оно стало больше потреблять ресурсов. Я на всех проектах ставлю базовый таймер 500мс. Этого более чем достаточно. И вовсе не означает, что программа исполняется пол секунды))

http://zentec.ru/dev/soft-2/zetFBD/
это тоже надо прочитать


Aserge

Присоединяюсь. Аналогично. Не больше 20 циклов и зависает. Таймер установил 800mc. Проект прилагаю.:))

mike

#5
Цитата: Aserge от 02 ноября 2015, 22:21:27
Присоединяюсь. Аналогично. Не больше 20 циклов и зависает. Таймер установил 800mc. Проект прилагаю.:))

И как же выражается зависание вашего проекта?
Как часто вы замыкаете дискретный вход?

Aserge

#6
Цитата: mike от 03 ноября 2015, 08:09:21
Цитата: Aserge от 02 ноября 2015, 22:21:27
Присоединяюсь. Аналогично. Не больше 20 циклов и зависает. Таймер установил 800mc. Проект прилагаю.:))

И как же выражается зависание вашего "проекта"?
Как часто вы замыкаете дискретный вход?

Дискретный вход замыкается 14-15 раз. С увеличением количества логических элементов количество замыканий снижается до 5-7.
Кавычки считаю неуместными - сыну 11 лет. И для него это ПРОЕКТ. И почему-то не работает. Ошибок ведь нет? И на симуляторе нормально работает.

serge197a

нот -лишний элемент, инвертируйте вход выходного элемента ОUТ1
IF и Запись в ипром не имеют смысла.

mike

Цитата: Aserge от 03 ноября 2015, 19:31:31
Цитата: mike от 03 ноября 2015, 08:09:21
Цитата: Aserge от 02 ноября 2015, 22:21:27
Присоединяюсь. Аналогично. Не больше 20 циклов и зависает. Таймер установил 800mc. Проект прилагаю.:))

И как же выражается зависание вашего "проекта"?
Как часто вы замыкаете дискретный вход?

Дискретный вход замыкается 14-15 раз. С увеличением количества логических элементов количество замыканий снижается до 5-7.
Кавычки считаю неуместными - сыну 11 лет. И для него это ПРОЕКТ. И почему-то не работает. Ошибок ведь нет? И на симуляторе нормально работает.
14-15 раз за какое время?
Кавычки были, т.к. ранее не было озвучено, что новичку всего 11 лет.
Сейчас же их уберем, а юному испытателю пламенный привет!
Сто касается вопроса по частоте замыкания входа.
В ПЛК реализована защита от частого срабатывания реле и частой записи в ПЗУ.
подавать импульс на реле можно не чаще раз в 800мс. В противном случае контроллер остановит выполнение программы.

Aserge

#9
Изначально был обычный d-триггер со срабатыванием по переднему фронту. Запись в EEPROM -по изменению состояния инверсного выхода триггера. Один цифровой вход, два выхода. На входе кнопка, на выходе светодиоды. Частота срабатывания не более 0,5 сек. Зависание от продолжительности и частоты нажатий не зависит. Контроллер "уходил в себя" после 5-7 нажатий кнопки. Выходы устанавливал в 0, на вход не реагировал. Но на программирование откликался без перезагрузки.  Последнее значение базового таймера 1сек.
Пробовал вариант без записи в EEPROM - результат тот же.

Отбросил входы. Набросал генератор с частотой 1 сек. Клацнул релюшкой 19 раз и ушел в себя.
Добавил выход. -7 циклов.
Добавил ещё один выход - 4 цикла.
От частоты и базового таймера зависимости нет.
Выходы использовал 1,2,3.
Почему от количества выходов, а не от частоты срабатываний зависит? На защиту не похоже.

mike

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

Вероятнее всего, вы слишком часто даете команду на изменение состояния релейных выходов.

http://zentec.ru/dev/docs/d150714/d080813/

Aserge

В отладке выходы не работают (на контролере). Зато и ошибок нет.:)

mike

Надо снять галки "симуляция входов" и "симуляция выходов"

Aserge

Цитата: Aserge от 04 ноября 2015, 14:02:13
В отладке выходы не работают (на контролере). Зато и ошибок нет.:)

С выходами разобрался. Отключил симуляцию. Error поставил. Точку задал.
Ошибку поймал. Слишком часто клацаю релюшками.
Спасибо. Будем искать допустимую частоту.
Но почему зависит от количества  выходов в схеме?

Aserge

Цитата: serge197a от 03 ноября 2015, 23:58:00
нот -лишний элемент, инвертируйте вход выходного элемента ОUТ1
IF и Запись в ипром не имеют смысла.

Не заморачивайтесь. Это кромсание того, что было в поисках закономерности ошибок.