我在用串口接收的数据中我有一部分信息不需要,应该怎么在接收时把它过滤掉??

解决方案 »

  1.   

    我是给PLC发读指令,每5秒发一次,它会给我返回一些数据。我会把这些数据分析出来,作为采集的数据显示出来。但是程序上有一个"闸门提升"的按钮,也是发一组数据到PLC,它就会给我返回个"00F"回来,因为我是从缓冲里读数据,所以分析数据的时候就会把00F加上前面的,或者是后面的数据一起分析,就会导致出错,我是想怎么能把这个"00F"剔除来,不参加分析.其中有一个信息很重要,每次返回的数据都有开始符和结束符,开始符和结束符都一样,开始符是chr(2),结束符是chr(3)
      

  2.   

    说的再明白一些,好吗?我也作过PLC的通讯,不过我用的是HOSTLINK协议,不知道你是用什么的,不会是直接通讯,没有协议的吧?
      

  3.   

    '去掉00F
    Dim ST As String
    ST = MSComm1.Input
    ST = Replace(ST, "00F", "")
    MsgBox ST
      

  4.   

    首先PLC是三菱的FX系列的。协议是三菱的默认协议。to CHKK(hello):
    因为该项目涉及到数据采集,所以数据的读取必须很及时,所以不可能等到在缓冲里过滤之后再读出来啊。to tztz520(午夜逛街):
    采集的数据中也可能出现00Fto Wenking003(文君):
    那你的意思是说一个字节一个字节的读吗?先谢谢三位的回答
      

  5.   

    '如果OOF是在前面的话,就取数据的第四位开始处理吧.
    Dim ST As String
    ST = MSComm1.Input
    ST = Mid(ST, 4)
    MsgBox ST
      

  6.   

    午夜逛街大侠的方法很好, 不过需要改经如下: 
    既然所有的命令都有开始符和结束符号, 可以这样:'去掉00F
    Private strAllBuffer as string   ''总Buffer, 用于保存接收的全部信息, 慢慢再处理Private sub MSComm1_OnComm()
    Dim ST As String
        ST = MSComm1.Input
        ST = Replace(ST, Chr(2) & "00F" & Chr(3) , "")
        strAllBuffer=strAllBuffer & ST
    End Sub
      

  7.   

    "闸门提升"?
    楼主是搞闸门自动控制的? 那我们是同行了
    "给PLC发读指令,每5秒发一次,它会给我返回一些数据" 这部分数据中应该没有"00F"的吧
    那每次发送的时候把 MSComm1.InBufferCount = 0  ‘清除接收缓冲区
    每5秒发一次时间不算短,我发送的命令每0.005秒发一次.还要通过crc16的处理也可以的.(不过我只是读数据 ModBus协议)
      

  8.   

    PLC是program logic control 吧?我还以为串口通讯还有其他的什么协议呢?我现在只对MSCOMM有所了解,但是我对RS232和RS485不是很了解,他们硬件部分有不相同的地方吗?
      

  9.   

    to cbr7619(cbr7619):不能单纯的过滤掉"00F",因为这个代码的返回相当于提示我 "控制正确"to roveman(阿菜):是Programmable Logic Control.