|
@@ -8,10 +8,10 @@ namespace modbus
|
|
|
#ifndef WIN32
|
|
|
#define Sleep(T) usleep((T)*1000)
|
|
|
#endif
|
|
|
- const clock_t CPLCMonitor::PLC_LASER_TIMEOUT_READY = 1000*1000; //完成信号到心跳延时
|
|
|
- const clock_t CPLCMonitor::PLC_LASER_TIMEOUT_PINGPANG = 100*1000;
|
|
|
- const clock_t CPLCMonitor::PLC_LASER_TIMEOUT_START = 300*1000;
|
|
|
- const clock_t CPLCMonitor::PLC_LASER_TIMEOUT_MAXMEASURE = 60000*1000;
|
|
|
+ const double CPLCMonitor::PLC_LASER_TIMEOUT_READY = 1.0; //完成信号到心跳延时
|
|
|
+ const double CPLCMonitor::PLC_LASER_TIMEOUT_PINGPANG = 0.1;
|
|
|
+ const double CPLCMonitor::PLC_LASER_TIMEOUT_START = 0.3;
|
|
|
+ const double CPLCMonitor::PLC_LASER_TIMEOUT_MAXMEASURE = 6.0;
|
|
|
|
|
|
CPLCMonitor::CPLCMonitor(void* pOwnerObject)
|
|
|
:_monitoring(false)
|
|
@@ -240,7 +240,13 @@ namespace modbus
|
|
|
if (value[i] != last_value[i])
|
|
|
{
|
|
|
if(m_PlcDataCallback && m_pointer)
|
|
|
- m_PlcDataCallback(value,SIGNAL_NUM,m_pointer);
|
|
|
+ {
|
|
|
+ QtMessageData data;
|
|
|
+ data.msg_type=ePlcSignal;
|
|
|
+ data.signal_size=SIGNAL_NUM;
|
|
|
+ memcpy(data.plc_data,value,sizeof(uint16_t)*SIGNAL_NUM);
|
|
|
+ m_PlcDataCallback(data,m_pointer);
|
|
|
+ }
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -288,7 +294,7 @@ namespace modbus
|
|
|
if (PLC_LASER_START == finite_state_machines
|
|
|
|| PLC_LASER_WORKING == finite_state_machines)
|
|
|
{
|
|
|
- if (current_clock - _heartbeat_write_clock >= PLC_LASER_TIMEOUT_READY)
|
|
|
+ if (double(current_clock - _heartbeat_write_clock)/CLOCKS_PER_SEC >= PLC_LASER_TIMEOUT_READY)
|
|
|
{
|
|
|
write_laserstatus_register(PLC_LASER_PING);
|
|
|
finite_state_machines = PLC_LASER_PING;
|
|
@@ -306,7 +312,7 @@ namespace modbus
|
|
|
|| PLC_LASER_FINISH_FAILED == finite_state_machines)
|
|
|
{
|
|
|
//超过10秒,开始返回就绪状态
|
|
|
- if (current_clock - _heartbeat_write_clock >= PLC_LASER_TIMEOUT_READY)
|
|
|
+ if (double(current_clock - _heartbeat_write_clock)/CLOCKS_PER_SEC >= PLC_LASER_TIMEOUT_READY)
|
|
|
{
|
|
|
//先清除数据
|
|
|
if (PLC_LASER_FINISH_FAILED == finite_state_machines)
|
|
@@ -325,7 +331,7 @@ namespace modbus
|
|
|
|| PLC_LASER_PONG == finite_state_machines)
|
|
|
{
|
|
|
//超过3秒,开始返回心跳状态2
|
|
|
- if (current_clock - _heartbeat_write_clock >= PLC_LASER_TIMEOUT_PINGPANG)
|
|
|
+ if (double(current_clock - _heartbeat_write_clock)/CLOCKS_PER_SEC >= PLC_LASER_TIMEOUT_PINGPANG)
|
|
|
{
|
|
|
write_laserstatus_register(PLC_LASER_PING);
|
|
|
finite_state_machines = PLC_LASER_PING;
|
|
@@ -335,7 +341,7 @@ namespace modbus
|
|
|
else if (PLC_LASER_PING == finite_state_machines)
|
|
|
{
|
|
|
//超过3秒,开始返回心跳状态1
|
|
|
- if (current_clock - _heartbeat_write_clock >= PLC_LASER_TIMEOUT_PINGPANG)
|
|
|
+ if (double(current_clock - _heartbeat_write_clock)/CLOCKS_PER_SEC >= PLC_LASER_TIMEOUT_PINGPANG)
|
|
|
{
|
|
|
write_laserstatus_register(PLC_LASER_PONG);
|
|
|
finite_state_machines = PLC_LASER_PONG;
|
|
@@ -424,7 +430,7 @@ namespace modbus
|
|
|
if (PLC_LASER_FINISH_OK == finite_state_machines
|
|
|
|| PLC_LASER_FINISH_FAILED == finite_state_machines)
|
|
|
{
|
|
|
- if (current_clock - _heartbeat_write_clock >= PLC_LASER_TIMEOUT_PINGPANG)
|
|
|
+ if (double(current_clock - _heartbeat_write_clock)/CLOCKS_PER_SEC >= PLC_LASER_TIMEOUT_PINGPANG)
|
|
|
{
|
|
|
write_laserstatus_register(PLC_LASER_PING);
|
|
|
finite_state_machines = PLC_LASER_PING;
|
|
@@ -436,7 +442,7 @@ namespace modbus
|
|
|
{
|
|
|
current_clock = clock();
|
|
|
//超过200毫秒,返回测量中
|
|
|
- if (current_clock - _heartbeat_write_clock >= PLC_LASER_TIMEOUT_START)
|
|
|
+ if (double(current_clock - _heartbeat_write_clock)/CLOCKS_PER_SEC >= PLC_LASER_TIMEOUT_START)
|
|
|
{
|
|
|
write_laserstatus_register(PLC_LASER_WORKING);
|
|
|
finite_state_machines = PLC_LASER_WORKING;
|
|
@@ -467,7 +473,7 @@ namespace modbus
|
|
|
}
|
|
|
else {
|
|
|
current_clock = clock();
|
|
|
- if (current_clock - _heartbeat_write_clock > PLC_LASER_TIMEOUT_MAXMEASURE) //10分钟还没返回测量结果, 说明系统可能出错了
|
|
|
+ if (double(current_clock - _heartbeat_write_clock)/CLOCKS_PER_SEC > PLC_LASER_TIMEOUT_MAXMEASURE) //10分钟还没返回测量结果, 说明系统可能出错了
|
|
|
{
|
|
|
write_laserstatus_register(PLC_LASER_ERROR);
|
|
|
finite_state_machines = PLC_LASER_ERROR;
|