Пытаюсь реализовать подсчет моточасов.
Для хранения часов использую RW.
Запись каждый час (не очень точно, но установку если и будут обесточивать, то не чаще раза в смену).
Считаю макросом секунды.
- Код: Выделить всё
sub unsigned short count_seconds (unsigned short cntr_sec, unsigned int in_addr)
unsigned short cntr_seconds
unsigned int address, ledad
bool in_state = false
cntr_seconds = cntr_sec
address = in_addr
GetData(in_state, "MODBUS TCP/IP (Zero-based Addressing)", 6x_Bit, address, 1)
if in_state == true then
cntr_seconds = cntr_seconds + 1
end if
return cntr_seconds
end sub
Потом часы
- Код: Выделить всё
sub unsigned short count_hours(unsigned short cnt_seconds, unsigned short cntr_hours)
unsigned short motohours
if cnt_seconds >= 3600 then
// if cnt_seconds >= 10 then//3600 then
motohours = cntr_hours + 1
end if
return motohours
end sub
Потом для каждого аппарата (вакуумные насосы) считаю, сравниваю, выставляю аларм
- Код: Выделить всё
GetData(read_seconds, "Local HMI", "DP1_seconds", 1)
GetData(read_hours, "Local HMI", "DP1_hours", 1)
addr = 200005
cntr_seconds = count_seconds(read_seconds, addr)
cntr_hours = count_hours(cntr_seconds, read_hours)
if cntr_hours > read_hours then
SetData(cntr_hours, "Local HMI", "DP1_hours", 1)
cntr_seconds = 0
end if
SetData(cntr_seconds, "Local HMI", "DP1_seconds", 1)
GetData(read_seconds, "Local HMI", "DP2_seconds", 1)
GetData(read_hours, "Local HMI", "DP2_hours", 1)
addr = 200006
cntr_seconds = count_seconds(read_seconds, addr)
cntr_hours = count_hours(cntr_seconds, read_hours)
if cntr_hours > read_hours then
SetData(cntr_hours, "Local HMI", "DP2_hours", 1)
cntr_seconds = 0
end if
SetData(cntr_seconds, "Local HMI", "DP2_seconds", 1)
SetData(cntr_hour - это сохранение в память RW
Собственно, проблема - секунды считаются раздельно, для каждого аппарата свои, это проверил выставлением флажков и индикацией секунд для всех аппаратов.
Если включен один насос, у него наработан очередной час, пишем в его РВ, но обновляются регистры всех аппаратов (пишется та же цифра, то есть наработка у всех одинаковая).
Тэги на регистры введены, как раз, чтобы не было путаницы. И регистры больше нигде не пользую.
Очевидно, неправильно пишу в энергонезависимую память. Но что я делаю не так?