下位机个数不会很多,不会超过10个,一天估计只需要轮询几次就可以,用一个标志设置分机故障是个办法,主要是轮询谁有好的方法,就是设置定时器?还有超时定时器?我轮询到一个设备可能要发几条指令来回控制操作,才能轮询下一个,我用的是CSerial Port类,只会开启监听线程,这样轮询通信,界面响应不会受影响吧?

解决方案 »

  1.   

    应该不受影响。你的轮询次数一天较少,对实时通讯要求不高,可以同OnTimer()来做就行了。
    在OnTimer调用CSerialPort打开端口,然后在启一个Timer事件,定时发送(时间间隔可以长一点,这样就无啥超时处理了,反正通讯要求不高)就可以了。接收线程用来处理接收数据即可。如果收到,则做个正常标识,未收到,则做个超时或故障标识即可。如果考虑到一次通讯不成功,则可以考虑所有设备或故障设备多通讯几次轮询完毕,退出接收线程 ,关闭CSerialPort打开的端口。我想这样就满足你的需求了。
      

  2.   

    起线程是不会影响的,同意 Funniest 和 echoyin59 的观点
      

  3.   

    上位机通过一个串口监控多个并联的下位机的遥测信息,如果下位机个数为n,则可设置全局变量bool[] bReceivedData=new bool[n];对应于每个下位机的响应标志,全局变量int[] iCounter=new int[n];如果地址为k的下位机响应了上位机发出的查询命令,则bReceivedData[k]=true;否则开始计数iCounter[k]++;超过一定计数时,则判定已断开地址为k的下位机连接,继续与地址为k+1的下位机通讯,以此类推。
    不知这种思路是否满足?