1. 程式人生 > >基於C#初學者簡單串口通信

基於C#初學者簡單串口通信

font 如果 open 模塊 strong com byte 數據讀寫 lee

說起串口通信很多初學者可能跟我一樣,起初感覺通信這東西是非常復雜,很害怕接近這東西,其實一步一步了解,代碼一個模塊一個模塊的完成,最後發現實現過程非常Easy,接下來我們就一起探索一下。

1.啥是串口,我可以明確告訴你,我沒幹過硬件,我只知道串口是一根線,這線叫啥名字呢,有的叫RS232,有的叫RS485有興趣的同學可以查一下,上位機的同學只需要知道這根線是用來通訊的就完事了,

串口通信都要用到以上2種線,一頭接設備,還有一頭接電腦,你要確保你電腦機箱上也要有RS232的口,如果沒有那你就需要買一個RS232轉USB的接線去連接你的電腦.然後去檢查你的電腦設備上有沒有顯示出你的端口,具體操作鼠標右鍵你的電腦,屬性>設備管理器>端口,看一看有沒有可以使用的端口一般叫做com1,com2,com3

......,如果發現有三角形警告圖標,那你要註意是不是驅動沒裝,把驅動裝一直下一步結束,用串口線把電腦和設備接好之後進行下一步。

2.設置串口線,

技術分享圖片

看一下這個設置,個人理(大家還是百度把這幾個搞清楚,不用死記知道幹啥用就OK)

波特率:聽著這名字就感覺和速度有關,直接就當作數據傳輸速度的大小吧。

數據位:數據位是啥,一個數據多少位,5,6,7,8都行,看你下位機大佬指示他說多少是多少。

校驗位:數據你丟過來,我咋知道有沒有丟失,或者數據有沒有錯誤,這個校驗位就是幹這活得,有奇,偶校驗,想知道咋算的同學可以去百度查一下。

停止位:數據有開始就有結束,你的結束標識占幾位這個要說清楚了,不然數據發不完了。

流控: 這個我還沒咋用過一直設置成的NONE 懂得大佬可以教一下。

以上這些是你需要設置你串口的參數沒啥難的,找你們上位機工程師問清楚然後你照著設置就行了;

C#提供了SerialPort控件,直接NEW一個設置就完事了,代碼:

SerialPort sp = new SerialPort();

sp.PortName = cbbComList.SelectedItem.ToString();
sp.BaudRate = Convert.ToInt32(cbbBaudRate.SelectedItem.ToString());
sp.Parity = (Parity)Convert.ToInt32(cbbParity.SelectedIndex.ToString());
sp.DataBits = Convert.ToInt32(cbbDataBits.SelectedItem.ToString());
sp.StopBits = (StopBits)Convert.ToInt32(cbbStopBits.SelectedItem.ToString());

設置完成後不需要花裏胡哨的直接 sp.open();打開就完事了 然後if(sp.open()==ture)說明確實打開了哦。

以上我們的設備和電腦通過串口通信就建立好了

3.串口的讀和寫

先說寫:很簡單sp.write(data,o,data.length),註意data是byte[],串口通信傳輸的都是一個一個字節,數據以字節數組的方式傳輸,所以為了方便打加都將2位16進制字符和byte[]相互轉換以便閱讀和讀寫,往後我會提供代碼2種形式的互相轉換。

在說讀:

sp.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);//綁定事件
private void Com_DataReceived()
{
this.sleep(1000)
}
之後你需要新建一個方法來接受你的數據,sp.DataReceived用於和時間綁定,註意這個方法不在主線程上(如果想將數據顯示到主界面需要使用到委托),而且只有串口有數據接受到就會觸發這個事件,如果出發太快,會導致數據丟失或者程序拋錯
,所以加上如圖,等數據全部接受完在讀取,

定義一個數組 byte{] Bytes=new byte[sp.BytesToRead] 確定接收到數據大小 然後sp.read(Bytes,0,Bytes.length);

這時候數據讀寫都已經完成

4.解析數據

解析數據,一定要遵守下位機老司機的協議文檔,不下位機老師傅的協議文檔,數據讀出來後,是2個BYTE一個值,4個BYTE一個值,是用ASCII還是Unicode編碼都一定要按照協議進行解析,如果不會解析,就多多去請教下位機老師傅,他們都是很厲害的,跟你講幾次,就明白了。

5.寫在最後,當初也是一頭霧水開始低頭寫代碼,除了一堆錯,對代碼理解也不深,不知道幹啥用的,所以不懂的同學一定要多問,一定要和公司裏面的老司機們把關系給搞好咯,不懂就請問他們,沒事叫他們出去抽抽煙,吃吃飯什麽的,保證你進步大大的快,(吸煙有害健康,我已經戒了一個月了)。以後會丟出一些實用的工具類給大家,第一次寫這玩意,寫的不好還請老司機們多多的指教,88~

基於C#初學者簡單串口通信