通常,在C#中實現串口通信,我們有四種方法:
第一:透過MSCOMM控制這是最簡單的,最方便的方法。可功能上很難做到控制自如,同時這個控制並不是系統本身所帶,所以還得註冊,不在本文討論範圍。可以上http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=320 ,一個國外網友的寫的教程,作者很熱心,我曾有發郵件給他,很快就回復了。
第二:微軟在.NET新推出了一個串口控件,基於.NET的P/Invoke調用方法實現,詳細的大家可以訪問微軟網站http://msdn.microsoft.com/msdnmag/issues/02/ 10/NETSerialComm/default.aspx,方便取得更多資料。
第三:就是用第三方控件啦,可一般都要付費的,不太合實際,不作考慮
第四:自己用API寫串口通信,這樣難度高點,但對於我們來說,可以方便實現自己想要的各種功能
在本文,我們採用第四種方法來實現串口通信,不過不是自己寫,用一個國外網友現成的已經封裝好的類庫,不過功能簡單點,相對我們來說已經夠用了。
在整個終端簡訊的操作過程中,與串口的通信,只用到了四個功能,開啟、寫入、讀取、關閉串口。以下是類別庫對這四個功能的定義:
開啟串列埠:
函數原型:public void Open()
寫串口:
函數原型:public void Write(byte[] WriteBytes)
WriteBytes 就是你的寫入的字節,注意,字符串要轉換成字節數組才能進行通信
示例:
ss_port.Write(Encoding.ASCII.GetBytes("AT+CGMIr")); //取得手機品牌
點串音
by NumBytes)
NumBytes 讀入快取數,注意讀取來的是位元組數組,而實際應用中要進行字元轉換
範例:
port.Read (128)); //讀取128個位元組快取 關閉字串口: ss_port.Close();
由於篇幅,以及串口通訊涉及內容廣泛,我在這裡只講這些。 在上面我們已經把終端簡訊所需的各種原始技巧有所了解,是可以小試牛刀的時候了。
using JustinIO; static JustinIO.CommPort ss_port = new JustinIO.CommPort(); ss_port.PortNum = COM1; //端口号 ss_port.BaudRate = 19200; //串口通信波特率 ss_port.ByteSize = 8; //数据位 ss_port.Parity = 0; //奇偶校验 ss_port.StopBits = 1;//停止位 ss_port.ReadTimeout = 1000; //读超时 try { if (ss_port.Opened) { ss_port.Close(); ss_port.Open(); //打开串口 } else { ss_port.Open();//打开串口 } return true; } catch(Exception e) { MessageBox.Show("错误:" + e.Message); return false; }