pc机与单片机通过232-485转换器互连,由于总线上有多台设备,如果两台机器同时发送数据会造成数据叠加出错。所以每次发送数据前需要检测总线上其他的设备是否正在发送数据。我现在采用的方式是检测MSComm1.InBufferCount是否等于零。但实际使用过程中发现这种方式非常不可靠,请问有没有其他的方法进行检测,望高手指点。

解决方案 »

  1.   

    mscomm这个东西很不可靠啊,用过pcomm.dll吗?巨强大!!免费!!!!!!可以发给你一个,不过知道你是不是还有用!
      

  2.   

    没用过呀,能发一份给我么?谢谢
    [email protected]
      

  3.   

    我是有做过这个!说说我的思路吧!
    你可以设一个全局变量port as boolean
    一开始初始化让它=false
    这样代表串口没有在使用
    然后每次进行读写的话先判断port的状态
    if port=false then
      mscomm1.portopen=true
      port=ture
    else
      do
        doevents
      loop while(port=true)
      mscomm1.portopen=true
      port=ture
    end if 
    如果port=ture时代表串口有在使用,就一直等待到别的窗体使用完了才能使用.
    好了!给分吧!
      

  4.   

    具体还有什么问题可以给我发电子邮件:[email protected]
      

  5.   

    对了!然后读的开头先把上面那些写上(可以做成一个函数来调用),然后在on_common
    最后面写上mscomm1.portopen=false
              port=false每次读完就关闭,这样的话就不会有串口使用冲突的错误了
    写命令也是一样,只不过是在写命令后面把串口关闭就OK!
      

  6.   

    dreamflying1980(梦想飞扬)
    谢谢你的回答,不过你好像误会我得意思了。我说的是网络上有其他机器在发数据。不是本机的其他窗口。
    如果两台机器同时向总线中发数据,就会造成数据重叠,数据就会发生错误
      

  7.   

    我用delphi做过类似的东西(检验科软件软件的接口部分(可能同时有几台机器同时望上传数据)),不过用vb也可以,就是检测到一个字符串就创建一个线程,然后清空缓存,这样就不会有任何问题了,关于vb创建线程在网上能找的到!
      

  8.   

    longjiang_m(笨笨)
    能详细的说一下么?检测到字符串应该是指看接收缓存区中数据长度吧,但是我通过判断MSComm1.InBufferCount来检测的方法并不可靠。