PDA

Просмотр полной версии : Счетчик моточасов в ПЛК 110



werg
05.05.2015, 14:03
Здравствуйте!
Неоднократно поднималась данная тема, но всё же хотелось бы задать несколько вопросов по сабжу.

Задача реализовать в ПЛК 110 7 счетчиков моточасов
с возможностью работы без сброса до года.
Написал ФБ : генератор импульсов 1000ms далее 3 счетчика для секунд минут и часов
счетчики пишут в RETAIN переменные.
Не могу откорректировать время так, что бы не было значительного опережения или отставания от реальных часов.
Дело в том, что за месяц погрешность существенная накопится.

Вопрос1. Счет зависит от времени цикла ПЛК?
Вопрос2. Если буду "наращивать" программу - цикл увеличится и счетчик станет отставать?
Вопрос3. Как сделать моточасы без значительного отставания или опережения со статической погрешностью?(ms/h или sec/h но чтобы не менялась )

Реквестирую советов мудрых.
Спасибо

_Mikhail
05.05.2015, 14:12
Посмотрите блок ONTIME в библиотеке Oscat

Вольд
05.05.2015, 14:26
Здравствуйте!
Неоднократно поднималась данная тема, но всё же хотелось бы задать несколько вопросов по сабжу.

Задача реализовать в ПЛК 110 7 счетчиков моточасов
с возможностью работы без сброса до года.
Написал ФБ : генератор импульсов 1000ms далее 3 счетчика для секунд минут и часов
счетчики пишут в RETAIN переменные.
Не могу откорректировать время так, что бы не было значительного опережения или отставания от реальных часов.
Дело в том, что за месяц погрешность существенная накопится.

Вопрос1. Счет зависит от времени цикла ПЛК?
Вопрос2. Если буду "наращивать" программу - цикл увеличится и счетчик станет отставать?
Вопрос3. Как сделать моточасы без значительного отставания или опережения со статической погрешностью?(ms/h или sec/h но чтобы не менялась )

Реквестирую советов мудрых.
Спасибо
А почему часы реального времени с собственным аккумуляторным питанием не используешь ? Правда там тоже без программной коррекции хода не обойтись, но геморроя будет меньше.

werg
05.05.2015, 17:13
А почему часы реального времени с собственным аккумуляторным питанием не используешь ? Правда там тоже без программной коррекции хода не обойтись, но геморроя будет меньше.

Мне нужно получать ч м с отдельно в формате INT.
у моточасов должен быть стоп, ресет и коррекция.
Не представляю как это реализовать с помощью RTC

жекон
05.05.2015, 18:23
http://kipshop.ru/Primeri/Samples_plc1xx/Samples/07_Working_hours.zip посмотрите

werg
05.05.2015, 18:30
http://kipshop.ru/Primeri/Samples_plc1xx/Samples/07_Working_hours.zip посмотрите

Суточный переход через 00 00 в данном примере отсутствует, да и вообще как то громоздко.
Кроме того сноска, что у часов контроллера своя погрешность.
Чем это отличается от того, что сделал я?
В моем случае погрешность зависит от времени цикла программы или нет?

werg
05.05.2015, 18:31
Посмотрите блок ONTIME в библиотеке Oscat

Библиотеку нашел. Блок присутствует, но в самой библиотеке я его найти не могу.

жекон
05.05.2015, 20:16
Блок присутствует в описании, в бибке не можете найти так что-ли? 18034

werg
06.05.2015, 11:52
Блок присутствует в описании, в бибке не можете найти так что-ли? 18034

Спасибо!
Но что теперь делать с этим блоком
Ведь мне нужны секунды, часы, минуты, пауза и сброс.
Проверил свой блок вчера за 10 часов с учетом коррекции отставание от реального времени 8 секунд.
Ничего не менял загрузил по новой и сегодня утром опережение за те же 10 часов - 15 минут!
Может кто прояснить?

werg
06.05.2015, 12:37
В общем главный вопрос:
Как получить в ПЛК 110 импульсный сигнал заданной частоты, независящий от времени цикла?

Вольд
06.05.2015, 12:52
В общем главный вопрос:
Как получить в ПЛК 110 импульсный сигнал заданной частоты, независящий от времени цикла?
Какой ты непонятливый. Пиши свой ФБ с синхронизацией от RTC ПЛК. Можно синхронизироваться от внешнего высокостабильного кварцевого генератора секундных импульсов.

melky
06.05.2015, 13:06
werg blink ?
я вот такой счетчик делал, считать можно все что угодно и составлять в каскад

Счетчик делался для подсчета всего, что хочется с возможностью сброса только необходимого.
Переменный входные/выходные можно в retain включить CV1-CV4
Входные PV1-PV4 это до скольки считать для увеличения следующего CV
steck - выход для следующего счетчика
enable - разрешение счета
CU - фронт счетного импульса
PVr - задание битовой маски, какой из счетчиков сбросить
импульс на reset сбросит указанный в маске счетчик.

Счетчик 32-х разрядный, применять можно для чего угодно и как угодно, не обязательно для времени наработки.

Ivan_P
29.09.2016, 16:03
werg blink ?
я вот такой счетчик делал, считать можно все что угодно и составлять в каскад

Счетчик делался для подсчета всего, что хочется с возможностью сброса только необходимого.
Переменный входные/выходные можно в retain включить CV1-CV4
Входные PV1-PV4 это до скольки считать для увеличения следующего CV
steck - выход для следующего счетчика
enable - разрешение счета
CU - фронт счетного импульса
PVr - задание битовой маски, какой из счетчиков сбросить
импульс на reset сбросит указанный в маске счетчик.

Счетчик 32-х разрядный, применять можно для чего угодно и как угодно, не обязательно для времени наработки.

Распишите, пожалуйста, что есть что по-подробнее и как с этого блока получить наработку в часах?
Или примерчик скиньте.:)

NikVic2
29.09.2016, 16:17
Для аналогичной задачи использовал несколько другой подход - отслеживается изменение состояния двигателя, при включении - сохраняется время запуска, при выключении - рабочие часы получаются вычитанием времени запуска из текущего. Время при этом синхронизируется по NTP.

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

melky
30.09.2016, 10:20
Ivan_P в описании в общем все есть. На картинке как раз пример счетчика времени с вытекающими погрешностями от цикла программы.
у счетчика 4 переменных выставлены сверху вниз 60 - сек, 60 - минут, 24 - часа, 365 - дней.
сместите вверх, чтобы начиналось с минут и подавайте импульсы раз в минуту. Тогда четвертым параметром станут года например.

з.ы. это просто счтетчик на 32 разряда для каждой переменной. На картинке пример для времени.

Чтобы сбросить 1 или несколько счетчиков в 0 на PVr подаем битовую маску нужных счетчиков например для 2-ого подать dec 2 (0010) и дать импульс на сброс.

pikvikone
08.10.2016, 22:14
Ivan_P в описании в общем все есть. На картинке как раз пример счетчика времени с вытекающими погрешностями от цикла программы.
у счетчика 4 переменных выставлены сверху вниз 60 - сек, 60 - минут, 24 - часа, 365 - дней.
сместите вверх, чтобы начиналось с минут и подавайте импульсы раз в минуту. Тогда четвертым параметром станут года например.

з.ы. это просто счтетчик на 32 разряда для каждой переменной. На картинке пример для времени.

Чтобы сбросить 1 или несколько счетчиков в 0 на PVr подаем битовую маску нужных счетчиков например для 2-ого подать dec 2 (0010) и дать импульс на сброс.

А как все сразу сбросить ?

melky
08.10.2016, 22:50
dec 15 в битовой маске поставьте (1111) то сбросятся все.
младший бит - первый счетчик, старший бит - 4-й счетчик

lara197a
08.10.2016, 22:53
есть такой ФБ RTC в бибках.
На нем и стройте.
Пример кода, только свои условия для запуска-остановки сброса вставьте.
Преобразования показаны:
FUNCTION_BLOCK Ychet_narabotki
VAR
RTC1: RTC; (*Âðåìÿ íàðàáîòêè*)
R_TRIG_Ust: R_TRIG; (*Êîìàíäà çàïóñêà*)
Tek_schet_p: DWORD; (*Ñèãíàë ïóñêà*)
M1: BOOL;
F_TRIG_S: R_TRIG; (*Êîìàíäà îñòàíîâêè*)
TON_S: TON; (*òàéìåð çàäåðæêè îñòàíîâêè*)
RS1: RS; (*Ðåëå ïóñêà -îñòàíîâêè íàðàáîòêè*)
Tek_schet_p1: DWORD;
M2: BOOL;
R_TRIG_Sch: R_TRIG;
Tim: DT;
Narabotka_p: TIME;
Narabotka_Chas_p:DWORD;
Narabotka_Chas_p1: DWORD;
Narabotka_Min_p: DWORD;
Narabotka_min_p1: DWORD;
Nt: BOOL;
TP1: TP;
F_TRIG22: F_TRIG;
M_sch: BOOL;
BLINK1: BLINK;
M22: BOOL;
END_VAR
VAR_INPUT
Tek_schet: DWORD; (*ñ÷åò÷èê *)
In_Time: INT; (*àñòðîíîìè÷åñêîå âðåìÿ(÷àñ äíÿ)*)
END_VAR
VAR RETAIN
Narabotka: DT;
END_VAR
M1:=Tek_schet<>Tek_schet_p;

M_sch:=Tek_schet=Tek_schet_p;

TON_S(IN:=M_sch
, PT:=T#30s , Q=> , ET=> ); (*&#197;&#241;&#235;&#232; &#231;&#237;&#224;&#247;&#229;&#237;&#232;&#229; &#237;&#229; &#236;&#229;&#237;&#255;&#229;&#242;&#241;&#255; &#226; &#242;&#229;&#247;&#229;&#237;&#232;&#232; 30 &#241;&#229;&#234;, &#242;&#238; &#241;&#243;&#248;&#232;&#235;&#234;&#224; &#237;&#229; &#240;&#224;&#225;&#238;&#242;&#224;&#229;&#242;*)

RS1(SET:=M1 , RESET1:=TON_S.Q , Q1=> );

M2:= In_Time=7 OR In_Time=19; (*&#209;&#225;&#240;&#238;&#241; &#247;&#224;&#241;&#238;&#226;*)

R_TRIG_Sch(CLK:=M2 , Q=> ); (*&#210;&#240;&#232;&#227;&#229;&#240; &#241;&#225;&#240;&#238;&#241;&#224; &#247;&#224;&#241;&#238;&#226;*)

RTC1(EN:=RS1.Q1 AND NOT R_TRIG_Sch.Q ,
PDT:=Tim , Q=> , CDT=>Narabotka );

IF R_TRIG_Sch.Q THEN
Tim:=DT#1970-01-01-00:00:00;
Narabotka:=DT#1970-01-01-00:00:00;
END_IF;

IF RS1.Q1 AND NOT R_TRIG_Sch.Q THEN
Tim:=Narabotka;
END_IF;

Narabotka_p:=DT_TO_TIME(Tim);
Narabotka_Chas_p:=TIME_TO_DWORD(Narabotka_p);
Narabotka_Chas_p1:=Narabotka_Chas_p/3600000;
Narabotka_Chas:=DWORD_TO_WORD(Narabotka_Chas_p1);

Narabotka_Min_p:=Narabotka_Chas_p-Narabotka_Chas_p1*3600000;
Narabotka_min_p1:=Narabotka_Min_p/60000;
Narabotka_Min:=DWORD_TO_WORD(Narabotka_Min_p1);

ЗЫ. если не разберете, пишите в личку. Скину в виде программы, а то коменты шрифты коверкают

melky
08.10.2016, 23:02
А вы переключите в русский язык клаву, а потом копируйте в буфер, может русский сохранится.

Что будет при переходе через 0 часов 0 минут ?

lara197a
09.10.2016, 01:41
RTC нуля не боится.
у меня программа считает работу 12 печей в 3 смены.(круглые сутки)
с 2011г

pikvikone
09.10.2016, 11:52
dec 15 в битовой маске поставьте (1111) то сбросятся все.
младший бит - первый счетчик, старший бит - 4-й счетчик

я вместо бита загнал туда реал переменную и просто пишу 4 и все сбрасываеться))

melky
10.10.2016, 09:18
pikvikone а если сбросить надо 3 и 4 вы что в реал подадите ? :)

pikvikone
10.10.2016, 09:37
pikvikone а если сбросить надо 3 и 4 вы что в реал подадите ? :)

нет необходимости у меня только цель только год. прошло 365 дней время обслуживания и уже инженер сбросит все сразу и отщет по новой пойдет)

melky
10.10.2016, 09:56
Так можно сделать автоматический сброс с фиксируемым сообщением оператору и квитирование со стороны оператора.
если использовать стековый выход.
з.ы. счетчик собственно делался универсальным, не обязательно для времени. Ну и штатные счетчики не использовал так как они оказались 16-ти разрядными...

pikvikone
10.10.2016, 15:43
Так можно сделать автоматический сброс с фиксируемым сообщением оператору и квитирование со стороны оператора.
если использовать стековый выход.
з.ы. счетчик собственно делался универсальным, не обязательно для времени. Ну и штатные счетчики не использовал так как они оказались 16-ти разрядными...

Не автоматический не надо , нужно просто взводит переменную в 1 когда счетчик достин год и она будет дейстовать на нервы оператору. инженер уже придет и сбросит часы в 0 и тогда переменная встанет в 0 так что все нормально. а можно у вас попросить развернутый вариант фб.

melky
10.10.2016, 20:59
в смысле развернутый ? он вроде и не закрыт... открывайте как проект и смотрите

Виктор73
25.01.2021, 11:29
werg blink ?
я вот такой счетчик делал, считать можно все что угодно и составлять в каскад

Счетчик делался для подсчета всего, что хочется с возможностью сброса только необходимого.
Переменный входные/выходные можно в retain включить CV1-CV4
Входные PV1-PV4 это до скольки считать для увеличения следующего CV
steck - выход для следующего счетчика
enable - разрешение счета
CU - фронт счетного импульса
PVr - задание битовой маски, какой из счетчиков сбросить
импульс на reset сбросит указанный в маске счетчик.

Счетчик 32-х разрядный, применять можно для чего угодно и как угодно, не обязательно для времени наработки.

Интересное решение.
Я себе скопировал его - работает.
Для сохранения данных наработки в энергонезависимой памяти объявил переменные в RETAIN.
Но почему-то при перезапуске питания ПЛК данные не сохраняются. Отсчет наработки начинается с нуля.
ПЛК110--24.60.Р-М.
Подскажите в чем дело??? Кто-нибудь...
53170

melky
25.01.2021, 11:38
Тут может фокус в том, что при перезапуске retain и не работает в принципе. Выключите и включите питание, переменные сохранятся ?

Виктор73
25.01.2021, 15:05
Тут может фокус в том, что при перезапуске retain и не работает в принципе. Выключите и включите питание, переменные сохранятся ?

Нет. У меня точно не сохраняются.
Хотя у ОВЕН существует такой документ "ПЛК110/160 [М02]. Руководство по работе с RETAIN переменными. 11.02.2019. Версия 1.1".
Для каких случаев он (документ) тогда создан.

melky
25.01.2021, 16:11
В смысле надо вырубить питание ПЛК и дождаться, когда он потухнет... Не помню точно, но простой рестарт и не должен ничего сохранять...