Страница 1 из 1

подсчет моточасов

Добавлено: 27 июн 2013, 12:47
service
мне необходимо реализовать подсчет моточасов оборудования и передавать эти значения в скаду. с чего начать и какой, так сказать, алгоритм подобной реализации?

Re: подсчет моточасов

Добавлено: 27 июн 2013, 13:22
Михайло
Моточасы считает контроллер? Для хранения моточасов лучше использовать энергонезависимую память. Предусмотреть вход для сброса моточасов от какой-нибудь труднодоступной кнопки. Второй сигнал - "оборудование включено" подается на счетный вход таймера TONR. Выход, как я уже говорил, располагать в энергонезависимой памяти.
Не знаю, есть ли спецфункция для моточасов. S7-300?

Re: подсчет моточасов

Добавлено: 27 июн 2013, 16:05
service
а что это за таймер TONR и как он работает?

Re: подсчет моточасов

Добавлено: 27 июн 2013, 16:24
Михайло
Работает почти также как TON, только не сбрасывается при исчезновении счетного сигнала, а сбрасывается отдельным входом RESET.

Re: подсчет моточасов

Добавлено: 27 июн 2013, 17:27
ward

Re: подсчет моточасов

Добавлено: 27 июн 2013, 20:43
Ryzhij
По разному делают. Чаще с использованием значения RTC и ячеек энергонезависимой памяти, упомянутый ретентивный таймер/счётчик тому пример.
Кстати, показания он должен сохранять не только "при исчезновении счётного сигнала", а, главное, при отключении питания и рестарте контроллера.
Если есть надёжная резервированная SCADA-система (только где ж её взять?), то можно наработку считать уже там.

Re: подсчет моточасов

Добавлено: 28 июн 2013, 20:32
CHANt
Использую, как упоминали коллеги, RTC.
Пример, для S7-300. При конфе процессора указываю 0 байт под тактовые меркеры. Использую бит на 0,5 сек.через передний фронт. Далее простыми арифметическими действиями, без всяких таймеров. Получается компактная функция, где данные по секундам, минутам и часам хранятся в сохраняемой DB, а для данных использую тип входов "IN_OUT" функции.

Код: Выделить всё

FUNCTION "Run_Timers" : VOID
TITLE =
{ S7_language := '25(1) Русский  08.06.2008  04:36:01' }
AUTHOR : CHANt
FAMILY : OTS
NAME : RT
VERSION : 0.1


VAR_INPUT
  Impuls : BOOL ;	
  Work : BOOL ;	
END_VAR
VAR_IN_OUT
  Hour : DINT ;	
  Minute : INT ;	
  Second : INT ;	
END_VAR
VAR_TEMP
  Sec1 : BOOL ;	
  Min1 : BOOL ;	
END_VAR
BEGIN
NETWORK
TITLE =

      CLR   ; 
      =     #Sec1; 
      =     #Min1; 
NETWORK
TITLE =

      A     #Work; 
      A     #Impuls; 
      JCN   End; 
      L     #Second; 
      L     1; 
      +I    ; 
      T     #Second; 
      JU    PRO1; 
PRO1: L     #Second; 
      L     60; 
      ==I   ; 
      JCN   End; 
      =     #Sec1; 
      L     0; 
      T     #Second; 
      JU    End; 
End:  NOP   0; 
NETWORK
TITLE =

      A     #Sec1; 
      JCN   End2; 
      L     #Minute; 
      L     1; 
      +I    ; 
      T     #Minute; 
      JU    PRO2; 
PRO2: L     #Minute; 
      L     60; 
      ==I   ; 
      JCN   End2; 
      =     #Min1; 
      L     0; 
      T     #Minute; 
      JU    End2; 
End2: NOP   0; 
NETWORK
TITLE =

      A     #Min1; 
      JCN   End3; 
      L     #Hour; 
      L     1; 
      +D    ; 
      T     #Hour; 
      JU    End3; 
End3: NOP   0; 
END_FUNCTION
Вызов функции:
Безымянный.jpg

Re: подсчет моточасов

Добавлено: 09 июл 2013, 13:36
service
Подсказали, как сделать на языке ST

tm1(PT := T#60s, IN := NOT tm1.Q);

T1_WORK := T1_WORK + BOOL_TO_DWORD(tm1.Q AND T1_Q);

tm1: TON - общий циклический таймер для всех устройств.
T1_Q: BOOL - выход плк, запускающий устройство.
T1_WORK: DWORD - наработка в минутах - retain
В скаде делитcя на 60 получается наработка в часах

Как это будет выглядить в LAD Step7?

Re: подсчет моточасов

Добавлено: 09 июл 2013, 14:56
ward
это не ST

Re: подсчет моточасов

Добавлено: 09 июл 2013, 16:31
service
в Кодесисе это ST. Работает даже!

Re: подсчет моточасов

Добавлено: 16 июл 2013, 08:07
Михайло
Это могло бы выглядеть так:
Вариант в LD.gif
Однако конкретная реализация зависит от среды разработки. Как выглядит функция ADD в языке LAD у VIPA?