最近摸索做個上位機,簡單記錄一下關鍵的幾個部分
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...