1. 程式人生 > >vb.net中serialport控制元件的一些使用經驗

vb.net中serialport控制元件的一些使用經驗

一些需要注意的地方

Serialport 的datareceived事件是串列埠接收到不大於SerialPort1.ReceivedBytesThreshold個位元組的時候觸發,但是具體多少個不確定(實驗發現,當第一個位元組與下一個位元組傳送間隔很短的時候幾乎就是等於SerialPort1.ReceivedBytesThreshold的時候觸發,但是間隔很長的時候就不確定了,但是一定小於SerialPort1.ReceivedBytesThreshold)。

在datareceived 事件中不能直接改變窗體上的控制元件的屬性,例如用一個label顯示接收到的數,把數直接賦值給label的text屬性,這是不可以,但是可以利用同步委託實現

。非同步委託也可以實現,但是經過實驗,這樣會在ReceivedBytesThreshold=1,並且相鄰兩個位元組間隔較長的時候造成串列埠丟失資料。

同步委託

呼叫

在datareceived事件中要判斷一下接收到的位元組數是不是零再接收,不然。。。。自己可以嘗試一下。

另一個方法處理接收到的資料

例如,當按下一個button後開始接收資料,並且你知道傳送的大約時間長度。比如,我在電腦上按下button後,電腦向下位機發送一個位元組,微控制器接收到這個資料後,開始向電腦傳送資料,大約兩秒鐘就可以傳送完成(或者傳送n個位元組後結束),

那麼可以這樣處理按下button後傳送資料並啟動定時器,將timer的interval設定成10或者其他,例如9600波特率的時候,我要想接收10個位元組處理一下,那麼大約就是10ms,所以可以將interval設定成10了

然後在timer的tick事件中讀出接收到的位元組數,就是Me.SerialPort1.BytesToRead,和接收到的資料,可以參考上面的程式碼,

在這裡就不用委託了,可以直接修改窗體控制元件的屬性。可以在程式裡處理只接收3秒鐘或者對接收到的位元組數計數,當接收到足夠的位元組的時候可以把timer關掉。

先寫這麼多。