我用spcomm编的串口程序,功能都实现了,但现在遇到一个问题,如果程序运行中拔掉串口的连接设备,此时向串口写数据Comm1.WriteCommData不报错而且返回值也为真,接收部分Comm1ReceiveData并不执行,也就是说无法通过写数据或读数据的方式判断串口是否连接有设备,有什么办法可以判断串口是否连接设备呢?

解决方案 »

  1.   

    我试过了,如果程序打开设备后,然后拔掉设备,WriteCommData会返回False,不会返回True
      

  2.   

    是不是你程序里把spcomm的异常全部屏蔽了?
      

  3.   

    真的吗?我试了很多次WriteCommData返回True,您用的spcomm是哪个版本?
      

  4.   

    现在的问题在于发数据握手也好于设备通信也好,当串口未连时,WriteCommData之后就没有回应了,返回值也是真,但ReceiveData不执行,无法进行判断~
      

  5.   

    我用的是这个版本: Version 2.58     2004/10/8
      

  6.   

    “现在的问题在于发数据握手也好于设备通信也好,当串口未连时,WriteCommData之后就没有回应了,返回值也是真,但ReceiveData不执行,无法进行判断~”是这样的:当串口被成功打开,只要有数据需发送,数据就会被发送出去。通过writefile函数的返回值,是没法判断下面有没有连接设备的。你的问题 一个比较好的方案是:串口所连的设备一直置RTS或DTR为高电位,pc机监测CTS或DSR信号( 用GetModemState函数 ),这样的话,如果CTS或DSR为低,就表明设备没连上。另一个办法,在发送数据之前,pc机发一串握手数据,如果在约定的时间内没有握手数据返回,则可以认为设备未连接。
      

  7.   

    这个问题靠WriteCommData和ReceiveData无解,与spcomm版本无关。网上流传的检测高低电位的也不行。只能通过定义全局变量,发送后变量计数,与接收计数相比较来判定未插设备~