串口通信
在C#中要實現串口通信,很多人都不知所措,在論壇上經常可以看到"怎麼用MSCOMM實現串口通信"、"怎樣能過串口與設備相連"諸如此類的問題。其實國外的網友早就把這些列入FAQ中了。
通常,在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()
說明:打開事先設置好的端口
示例:
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;
}
寫串口:
函數原型:public void Write(byte[] WriteBytes)
WriteBytes 就是你的寫入的字節,注意,字符串要轉換成字節數組才能進行通信
示例:
ss_port.Write(Encoding.ASCII.GetBytes("AT+CGMI\r")); //獲取手機品牌