map/das-dn/rtustatusproc/rtustatus.cpp
2024-12-11 13:33:15 +08:00

67 lines
1.6 KiB
C++

#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].softdog++;
if (config.processes[i].softdog > PROCESS_WATCHDOG_TIME)
{
config.processes[i].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;
}