BOOL m_WorkFlag;//为真时01号正在通信包括发和接收,为假时01号结束
当01号要通信时,先判断这个标志是否为真,如果是真,说明还没结束,就等下一次通信周期再试
当02号要发送时,先判断这个标志是否为真,如果是真,就停止发送并记下状态,等判断01号结束时再发送(可以用定时器来查询)
当01号结束通信时就设标志位为假,结束通信.因为通信非常快,因此出现冲容机会非常少,而且不会出现长时间等待

解决方案 »

  1.   

    使用serialport类,里面自带互斥就可以了?
      

  2.   

    使用serialport类,里面自带互斥就可以了?在操作串口的地方加上互斥就没问题了
      

  3.   

    实际上操作都是异步的, 因为不管你的WM_TIMER还是WM_KEYDOWN消息, 都是一个一个被处理的.
    一般来说WM_TIMER的优先级最小. 如果同时有WM_KEYDOWN和WM_TIMER消息, 那么WM_KEYDOWN消息会被先处理.所以在你的应用上看, 是不会产生冲突的.但如果是其它地方, 那就需要加锁, 比如在不同的线程或者不同的进程中. 因为端口操作必须是独占的, 所以就需要加上锁, 比如mutex互斥锁.
      

  4.   

    假如你现在要定时发送X[0]...X[9],随机发送X[22],你可以将X[22]更改为定时发送。定时轮回查询。
      

  5.   

    这么多人回帖,好高兴。
    实际使用情况是这样的,每2秒发一个读取寄存器的命令。
    客户会随机设定一下某个参数值,然后发过去。设定参数值的时候,程序有一个变量记录设定状态开启。
    当他按控制面板的+ - 到他想要的数值时,会按确定发送。这个选数的过程不会很长。但是发送写寄存器的命令,modbus的设备也会返回一串数,半工通信,这样返回的数也可能会和下一次预订的发送的读命令冲突啊。所以我想这样设定,当客户开始设定参数的时候,固定2秒发一次的命令,这时候就停止,等客户按完确定的时候,停1秒再开始继续发送2秒一次的读命令。这1秒内可以接收写命令的返回值,判断是否写入成功。10楼给的提示很重要
      

  6.   

    听说labview可以连智能设备,楼主用的是这个工具吗
      

  7.   

    没,用的工业现场pc
    pc104+的设备