PDA

Просмотр полной версии : ПЛК 110-30 Спустя время изменилась работа программы.



Alor
29.03.2022, 10:53
Приветствую.
Случился тут со мной странный казус, решил поделиться.
Вообщем собрал на ПЛК110-30 (языке CFC) замену старой электроники.
Устройство снимает штабелером поступающую продукцию с ленты и укладывает на поддоны,
10 слоев, по 19->8 рядов т.е. пирамида.

Проработало всё это добро очень даже прилично примерно месяца 2 и тут возникает ситуация,
Что в работе и на HMI в том числе, счет последнего ряда пролетает и сразу начинается следующий,
т.е. как будто дребезг и срабатывает 2 раза :confused:

По коду суть, что идет проверка, достигло заданного числа на ленте продукция, если нет, то +1, если да то сброс на 1.
Чтобы устранить эту проблему добавил еще один блок R_trig И все стало хорошо. :cool:
Странность, что если была ошибка она-бы сразу проявлялось, а не спустя пару месяцев в работе. :confused:

Может кто прокомментировать, встречался кто с такими странностями?

https://i.ibb.co/d4CNTPZ/sh1.jpg (https://ibb.co/609KMHQ)

In_Da_Cher_A
29.03.2022, 12:52
ничего особенного - со временем, ток стал медленнее течь по проводам, это обычное дело, когда контроллер долго работает.

Alor
29.03.2022, 13:04
Ага и R_Trig за цикл два раза срабатывать ;)

Филоненко Владислав
29.03.2022, 13:13
А фильтрация по входам есть? Может появился износ концевика какого-то?

Sulfur
29.03.2022, 13:27
Alor
Я бы вместо r-trig №17 поставил TON со временем несколько десятков\сотен миллисекунд.

Alor
29.03.2022, 13:43
Тоже вариант.
Да пока сколько делал проблем не было, в первые такой прикол случился.

kondor3000
29.03.2022, 15:59
Тоже вариант.
Да пока сколько делал проблем не было, в первые такой прикол случился.

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

Alor
30.03.2022, 12:48
Хотя в моем случае, как я уже писал, и от датчика и от панели HMI стало несколько раз срабатывать, так, что дребезг под вопросом...
Если только в контроллере, что-то подсело со временем :rolleyes:

FPavel
30.03.2022, 17:16
Я бы грешил на механические контакты кнопок и концевиков.
Поставьте на каждый дискретный вход с кнопками, от которых возможен счёт, по схеме устранения дребезга контактов на основе таймеров и RS-триггера.
Постоянную фильтра сделайте от 20мс - обычно этого достаточно.
Что-то типа
https://owen.ru/forum/attachment.php?attachmentid=59934&d=1648389395

Или в текстовом виде

VAR
(* переменные для обработки положения переключателя "Насосы в автоматическом режиме" *)
bPumpAtAuto : BOOL; (* обработанное антидребезгом состояние переключателя *)
tonPumpAtAuto : TON; (* переключатель в "АВТО" - после паузы антидребезга *)
tofPumpAtManual : TOF; (* переключатель в "РУЧНОМ" - после паузы антидребезга *)
rsPumpAtAutoStatus : RS; (* переключатель в "АВТО" - управляется от состояний нажата/отпущена после паузы антидребезга *)
rtrigPumpAtAuto : R_TRIG; (* одиночный импульс при переключении в автоматический режим *)
END_VAR


(*--------------------------------------------------------------------------*)
(* переключатель "Насосы в автоматическом режиме" *)
(*--------------------------------------------------------------------------*)
(* Проверка нажатия кнопки b_Button с подавлением дребезга *)
tonPumpAtAuto(in:=xPumpAtAuto, pt:=t#20ms);
tofPumpAtManual(in:=xPumpAtAuto, pt:=t#20ms);
rsPumpAtAutoStatus(SET:=tonPumpAtAuto.q, reset1:=NOT tofPumpAtManual.Q);
rtrigPumpAtAuto(clk:=rsPumpAtAutoStatus.Q1);
bPumpAtAuto:=rsPumpAtAutoStatus.Q1;

PRO
04.02.2023, 19:30
Я бы грешил на механические контакты кнопок и концевиков.
Поставьте на каждый дискретный вход с кнопками, от которых возможен счёт, по схеме устранения дребезга контактов на основе таймеров и RS-триггера.
Постоянную фильтра сделайте от 20мс - обычно этого достаточно.
Что-то типа
https://owen.ru/forum/attachment.php?attachmentid=59934&d=1648389395

Или в текстовом виде

VAR
(* переменные для обработки положения переключателя "Насосы в автоматическом режиме" *)
bPumpAtAuto : BOOL; (* обработанное антидребезгом состояние переключателя *)
tonPumpAtAuto : TON; (* переключатель в "АВТО" - после паузы антидребезга *)
tofPumpAtManual : TOF; (* переключатель в "РУЧНОМ" - после паузы антидребезга *)
rsPumpAtAutoStatus : RS; (* переключатель в "АВТО" - управляется от состояний нажата/отпущена после паузы антидребезга *)
rtrigPumpAtAuto : R_TRIG; (* одиночный импульс при переключении в автоматический режим *)
END_VAR


(*--------------------------------------------------------------------------*)
(* переключатель "Насосы в автоматическом режиме" *)
(*--------------------------------------------------------------------------*)
(* Проверка нажатия кнопки b_Button с подавлением дребезга *)
tonPumpAtAuto(in:=xPumpAtAuto, pt:=t#20ms);
tofPumpAtManual(in:=xPumpAtAuto, pt:=t#20ms);
rsPumpAtAutoStatus(SET:=tonPumpAtAuto.q, reset1:=NOT tofPumpAtManual.Q);
rtrigPumpAtAuto(clk:=rsPumpAtAutoStatus.Q1);
bPumpAtAuto:=rsPumpAtAutoStatus.Q1;

Очень полезная информация.

krollcbas
05.02.2023, 03:21
Когда работали на кирпичном заводе, то был похожий курьезный случай. Рабочие вручную постоянно перекладывали паллеты.
Они не жаловались и особо никто не замечал подвоха. Позднее заметили.
Оказалось, что кто-то на автомате повернул нечаянно какую-то ручку и размерность кирпича изменилась.
Автомат штука такая, ему все равно.