#include "rtustatus.h" CRTUStatusProcess::CRTUStatusProcess() { watch_dog_count = 0; } CRTUStatusProcess::~CRTUStatusProcess() { } BOOLEAN CRTUStatusProcess::OnPreCreate(int id) { if (!CProcess::OnPreCreate(id)) return FALSE; return TRUE; } BOOLEAN CRTUStatusProcess::Run(void) { if (!CProcess::Run()) return FALSE; usleep(20000); return TRUE; } BOOLEAN CRTUStatusProcess::OnTimer(void) { if (!CProcess::OnTimer()) return FALSE; int i; int uid = GetCurUnitID(); if (last_sec != (time_t)system32.timers) { last_sec = system32.timers; //更新协议运行状态 for (i = 1; i < PROCESSES_NUM; i++) { config.processes[i].real_softdog++; if (config.processes[i].real_softdog > PROCESS_WATCHDOG_TIME) { config.processes[i].real_softdog = PROCESS_WATCHDOG_TIME; SetUnitYX(uid, i, SPI_ON); // 协议中断 } else { SetUnitYX(uid, i, SPI_OFF); //协议运行 } } //更新单元通讯状态 for (i = 0; i < UNIT_NUM; i++) { //单元状态在idle_process中计算,此处刷新单元状态 if (GetUnitYX(uid, i + PROCESSES_NUM) != (config.units[i].value & 0x01)) { SetUnitSOE(uid, i + PROCESSES_NUM, (config.units[i].value & 0x01), system32.now); } SetUnitYX(uid, i + PROCESSES_NUM, (config.units[i].value & 0x01)); //单元通讯中断,设置单元数据无效 } } UnitFeedDog(uid); FeedDog(); return TRUE; }