c 串列埠通訊並處理接收的多個引數

2022-05-02 14:18:08 字數 2034 閱讀 9325

最近摸索做個上位機,簡單記錄一下關鍵的幾個部分

c#做串列埠通訊主要使用的是system.io.ports類,其實還是十分方便的

最終效果如下:

千萬不要忘記了下面這個

我們可以通過getportnames方法獲取本機的埠列表,注意:不同裝置連線電腦後埠不一定相同

string sps = serialport.getportnames();
配置其他串列埠相關

例如波特率列表

string baud = ;

combobox2.items.addrange(baud); //新增波特率列表

其實主要就是用當前串列埠屬性判斷是否是開啟狀態

private void button1_click(object sender, eventargs e)

else

}catch (exception ex)

}

這個也沒有太多特別的,只要呼叫write方法即可

private void sendbtn_click(object sender, eventargs e)

}catch (exception ex)

}

以上的幾個基本功能其實只要呼叫方法再加上處理異常即可

這個接收訊息就非常靈活了,說簡單簡單,說難也有點難,如果要求不高,只是為了展示出接收的訊息,的確可以有很簡單的方法

這是最簡單的方法,只是單純的將快取區得到的字元拼接在一起,但是如果傳進來的資料不只一類,我們需要將其中每一種分離出來,這種及時從快取區取出來並拼接在一起就不太適用了,因為從快取區取出的字元不一定是完整的

string str = serialport1.readexisting();
因此,我求助於搜尋引擎,了解到要解決這個問題,我們需要先將得到的字元放在快取區中,等快取區積攢了一定的字元再進行讀取,每次提取一定的字元後,清空快取區,將我拿到的這一串字元,轉換為陣列,我這個例子中有三個引數x y z,我就是將三個引數從下位機中按順序傳入,然後接收的時候以逗號作為分隔符進行拆分(我在微控制器上傳送訊息的時候就用逗號分隔引數了),那麼按順序我們得到的資料就是x1,x2,x3···那麼我們只要記錄下現在處理的是哪個引數就可以按需處理了。

但是依然有不能解決的問題,就是若頻率過高,處理的速度就跟不上了,但是現實情況中並不是每幾公釐呼叫一次,所以我覺得這個問題也可以忽略不計

private void serialport1_datareceived(object sender, system.io.ports.serialdatareceivedeventargs e)

int n = serialport1.bytestoread; //記錄下緩衝區的位元組個數

"n" + n);

byte buf = new byte[n]; //宣告乙個臨時陣列儲存當前來的串列埠資料

serialport1.read(buf, 0, n); //讀取緩衝資料到buf中,同時將這串資料從緩衝區移除

string str = system.text.encoding.default.getstring(buf);

string strarray = str.split(',');

int count = 0;

for (int i = 0; i < strarray.length; i++)

else if(count == 1)

else if(count == 2)

count++;

if(count == 3)}}

));}catch (exception ex)

}

C語言 讀取串列埠資料,並處理

本文主要內容包含 1.接收串列埠資料程式的程式設計邏輯示意圖 2.接收串列埠資料程式要用到的通用函式模組 可直接引用,無需更改 3.接收串列埠資料程式的示例。1.接收串列埠資料程式的程式設計邏輯示意圖 2.與串列埠有關的函式模組及陣列 可直接引用到自己的程式中 main.c include incl...

C 串列埠通訊,串列埠的傳送與接收,獲取本機串列埠

serialport 串列埠類 1.引用命名空間 using system.io.ports 2.建立物件 serialport com new serialport 3.給串列埠埠與波特率屬性賦值 com.portname com4 com.baudrate 9600 4.開啟串列埠 com.op...

C 串列埠接收JSON資料處理

待處理的json資料 下面是串列埠接收並解析這些資料 定義一些字串變數 private string altogether time string empty 總歷時 private string measure deep string empty 測深 private string measure...