Главная » Статьи » Мои статьи

Поиск ошибки в ПЛК

Описание системы и ошибки

Образец относительно проблематичной в поиске ошибки.
С учетом отказа от BreakPoint'ов из-за Timer'а и прочих нюансов языка Ladder Diagramm, вызвала довольно существенные сложности.
 
Место: Саратовская область
Дата: 2007 год 
 
С компьютера на ПЛК подаются уставки (времена, флаги режимов) и команды на устройство.

Из ПЛК на устройство выдаются команды.

Устройство выдает на ПЛК свои статусы.

Из ПЛК на верхний уровень выдаются сигналы статуса устройства и времени до конца команды на это устройство. Сигналы пакуются в слова, для минимизации объемов приема и передачи.

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

Но стабильно, что очень порадовало.

Поиск

Принципов и зависимостей моргания понять сходу не удается. Возможно из-за усталости, возможно по причине отсутствия таковых.

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

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

Сравнение с кодами других объектов, на которых этой ошибки нет – различий не выдает. Полная идентичность. Вероятность ошибки в программе ПЛК уменьшается.

Отключается компьютер, как возможный источник ошибки, записывающий что-то в данную область памяти. Ошибка сохраняется. Вероятность ошибки из-за компьютера стремится к 0. Соответственно не смотря ни на что проблема все-таки в ПЛК.

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

Перенесение куска кода в другой блок (условно функцию) тоже не влияет на ошибку. Соответственно вероятность того, что это влияет какая-то еще посторонняя команда – резко уменьшается.

Изменения статуса устройства вручную ничего не меняют.

При изменении статуса устройства форсированием (принудительно, постоянно) ошибка все равно сохраняется.

Постепенно удаляются коды, и остается практически минимум, при котором сохраняется ошибка.
1. Подача команды (без нее не понятно как проверять).
2. Таймер, с которого берется время до сброса команды.
3. Формирование слова на компьютере из статуса и времени до сброса команды.

Удаляется таймер. Команда не сбрасывается, но статусы перестают прыгать.

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

Рассматривается формирование сигнала от ПЛК, как самого вероятного кандидата на источник ошибки. Он упакован для компактности в одно слово, биты статуса в старшем байте, время в младшем. Тремя командами:
1. Запись статусов устройства в младший байт слова.
2. Замена старшего и младшего байт местами командой SWAP_WORD (статусы переносятся в старший байт)
3. По AND запись времени в младший байт слова

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

Заменяется последовательность команд на обратную:
1. Запись времени устройства в младший байт слова.
2. В промежуточной переменной статусы умножаются на 256, сдвигаясь в старший байт слова.
3. По AND запись статусов в старший байт слова .

Все заработало.

После разбора - ситуация становится окончательно понятной.

Причина ошибки

Операторы увеличили стандартное время таймаута с 1,5  до 10 минут. И если 1,5 минуты это 90 секунд, то 10 минут это 600 секунд.
600 секунд не влезали в младший байт (максимум 256), и часть времени писалась в старший
.

Суть последней проверки

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

Решение

Время и статусы были разбиты на 2 слова. Местным инженерам было предложено провести ТО или заменить устройство с таймаутом, превышающим стандартный более чем в 6 раз.

Категория: Мои статьи | Добавил: PM (04.11.2012)
Просмотров: 1446 | Комментарии: 4 | Теги: ошибка, Ladder Diagramm, поиск, последовательность, действия | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: