我现在遇到一个问题,就是通过RS232来控制一个磁记录器,控制已经没有任何问题。只是在返回磁记录器状态方面有些麻烦。
我的表单有两个text控件,TEXT1.text用来返回状态(即停止,播放,录音等等),TEXT2.text用来返回录像带播放的时间。还用到了TIMER控件,因为是要实时获取的。
状态是通过发送“STATE?”后,从mscomm1.input得到信息。
时间是通过发送“TIMER?”后,从mscomm1.input得到信息。
现在比较麻烦的是,怎么把mscomm1.input分别发送到TEXT1和TEXT2中去呢?是通过判断返回的变量类型还是什么呢?有判断变量类型的函数吗?
另外,在通信不成功时,在ONCOMM事件中通过什么代码来通知使用者呢?

解决方案 »

  1.   

    OnComm 事件示例
    下例说明如何处理通讯错误和事件。可以在相关的 Case 语句之后插入代码来处理特定的错误或事件。Private Sub MSComm_OnComm ()
       Select Case MSComm1.CommEvent
       ' Handle each event or error by placing 
       ' code below each case statement' 错误
          Case comEventBreak   ' 收到 Break。
           Case comEventCDTO   ' CD (RLSD) 超时。
          Case comEventCTSTO   ' CTS Timeout。
          Case comEventDSRTO   ' DSR Timeout。
          Case comEventFrame   ' Framing Error
          Case comEventOverrun   '数据丢失。
          Case comEventRxOver'接收缓冲区溢出。
          Case comEventRxParity' Parity 错误。
          Case comEventTxFull   '传输缓冲区已满。
          Case comEventDCB   '获取 DCB] 时意外错误   ' 事件
          Case comEvCD   ' CD 线状态变化。
          Case comEvCTS   ' CTS 线状态变化。
          Case comEvDSR   ' DSR 线状态变化。
          Case comEvRing   ' Ring Indicator 变化。
          Case comEvReceive   ' 收到 RThreshold # of chars.
          Case comEvSend   ' 传输缓冲区有 Sthreshold 个字符                     '
                         '
          Case comEvEof   ' 输入数据流中发现 EOF 字符
                         ' 
       End Select
    End Sub
      

  2.   

    发送 STATE?是由电脑发送吗?如果是你可以设置一个BOOL变量或整形变量,当发送STATE时,置为一个值,发送TIME时置为另一个值,在ONCOMM里判断这个值,做相应的处理
      

  3.   

    我试试,谢谢 lovebeethoven(小佛) !
      

  4.   

    状态是通过发送“STATE?”后,从mscomm1.input得到信息。
    时间是通过发送“TIMER?”后,从mscomm1.input得到信息。
    ====================================
    你的设备返回的数据是什么形式的???
    例如说:
    1。时间一般都是数字,而状态可能是字符甚至不可打印字符
    2.返回的时间会不会带“:”号??例如“23:16:05”...状态一般不会用这些符号。。


    。一般找出它们之间的本质分别就可以了
      

  5.   

    这个问题我已经解决了,如果是同时写的话,得到的是一大串包括类似这样的字符串:
    "STOP
    0:0:21"
    既可以通过判断回车符的位置来拆开字符串,得到两个TEXT控件的内容。
    也可以通过每次发一个命令后,清空一下接受缓冲区,再发到不同的TEXT控件去。
      

  6.   

    还有,如果在oncomm事件里判断的话,会使通信变的很混乱。*_*
      

  7.   

    呵呵,解决了就好
    我觉得在ONCOMM中判断的话,应该不会变乱呀,
    发送完指令后,置RThreshold为1(或别的数)
    当触发事件后把RThreshold置位0,处理数据
    发送另一个指令,设置RThreshold  。
    这样在处理不知多久能来的数据时比较好,还可以设置一个变量TIMEOUT用TIMER来控制
    当超时返回错误信息