none
VB6.0 中Mscomm元件應用如何有效清除Buffer中的數據 RRS feed

  • 問題

  • 各位大大

    目前小弟在使用Mscomm元件做 PC TO PLC通訊時,在讀取回應字串時會有收到上一筆指令所遺留下的字串

    造成下一筆的字串解碼型態不符,

     正確回應字串應該是 "@00RR00000040*"共14個字元

    在未加上 Form1.MSComm2.InBufferCount = 0 指令時有時收到會是:

    接收到的會變成"04*@00RR00000040*" 

    目前加了有時會收到" @00RR00000040*"

    前方會多一個空格

    請問對於這樣的情況有辦法解決嗎?

     

     

    這是PLC監控第24CH中 0~15 位元的變化

    Code Snippet
    Form1.MSComm2.InputLen = 0
       Form1.MSComm2.InBufferCount = 0
     
     S$ = "@00" + "RR" + "0024" + "0001"
     SXDWORK = S$ + fcs$(S$) + "*" + Chr(13)
     Form1.MSComm2.Output = SXDWORK
     delay_N% = 1500
     Call delay(delay_N%)
     wait = Timer + 0.2
     Do
     RXDWORK = RXDWORK + Form1.MSComm2.Input
     Loop Until Len(RXDWORK) > 14 Or Timer >= wait
     RXDWORK = Trim(RXDWORK)
     State = Mid(RXDWORK, 8, 4)
     Call PLC(State)
     X_Bit = hex4_to_bin16$(State)
     Call Modul(X_Bit)
     RXDWORK = ""
     delay_N% = 500
     Call delay(delay_N%)

     

     

    2008年11月26日 上午 01:50

解答

  • 這位大大

    通常使用 InBufferCount=0 就因該可以清空Buffer

    會不會是你的PLC在你還沒傳送的時候也會回應一些值呢?<==我是有遇過這樣的問題

    而這個值都通常是&H00

     

    因該跟PLC的對話因該是你送A就因該回B

    或許你可以在接收的時候一個一個接收在判斷第字元是不是你要的

    將它排除

    不是再繼續接收

    因為對PLC不是很了解

    PLC因該也是有CHKSUM吧

     

    建議你是可以用示波器 測試看看

     

    這樣通常就會無解

    所以我通常都會送完就將MSCOMM關掉

    要送的時候才開啟

    2008年11月27日 上午 09:45

所有回覆

  • 這位大大

    通常使用 InBufferCount=0 就因該可以清空Buffer

    會不會是你的PLC在你還沒傳送的時候也會回應一些值呢?<==我是有遇過這樣的問題

    而這個值都通常是&H00

     

    因該跟PLC的對話因該是你送A就因該回B

    或許你可以在接收的時候一個一個接收在判斷第字元是不是你要的

    將它排除

    不是再繼續接收

    因為對PLC不是很了解

    PLC因該也是有CHKSUM吧

     

    建議你是可以用示波器 測試看看

     

    這樣通常就會無解

    所以我通常都會送完就將MSCOMM關掉

    要送的時候才開啟

    2008年11月27日 上午 09:45
  • 大大您說的沒錯!!

    目前我為了改善那個問題,想了很多

    那個偶發的空格還是會出現!!

    目前

    只好用比對字串的第一個字元"@"跟最後一個字元"*"

    都對才進入轉碼的功能

    若是錯誤就會PASS這次的掃描並再執行一次清空取值的動作!

     

    2008年11月28日 上午 04:20