第一:通過MSCOMM控件這是最簡(jiǎn)單的,最方便的方法??晒δ苌虾茈y做到控制自如,同時(shí)這個(gè)控件并不是系統(tǒng)本身所帶,所以還得注冊(cè),不在本文 討論范圍??梢栽L問http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=320 。
第二:微軟在.NET新推出了一個(gè)串口控件,基于.NET的P/Invoke調(diào)用方法實(shí)現(xiàn),詳細(xì)的大家可以訪問微軟網(wǎng)站http://msdn.microsoft.com/msdnmag/issues/02/10/NETSerialComm/default.aspx, 方便得到更多資料。
第三:就是用第三方控件啦,可一般都要付費(fèi)的,不太合實(shí)際,不作考慮.
第四:自己用API寫串口通信,這樣難度高點(diǎn),但對(duì)于我們來說,可以方便實(shí)現(xiàn)自己想要的各種功能.
在本文,我們采用第四種方法來實(shí)現(xiàn)串口通信,不過不是自己寫,用一個(gè)國(guó)外網(wǎng)友現(xiàn)成的已經(jīng)封裝好的類庫(kù),不過功能簡(jiǎn)單點(diǎn),相對(duì)我們來說已經(jīng)夠用 了。
在整個(gè)終端短信的操作過程中,與串口的通信,只用到了四個(gè)功能,打開、寫、讀、關(guān)閉串口。下面是類庫(kù)對(duì)這四個(gè)功能的定義:
打開串口:
函數(shù)原型:public void Open()
說明:打開事先設(shè)置好的端口
示例:
using JustinIO;
static JustinIO.CommPort ss_port = new JustinIO.CommPort();
ss_port.PortNum = COM1; //端口號(hào)
ss_port.BaudRate = 19200; //串口通信波特率
ss_port.ByteSize = 8; //數(shù)據(jù)位
ss_port.Parity = 0; //奇偶校驗(yàn)
ss_port.StopBits = 1;//停止位
ss_port.ReadTimeout = 1000; //讀超時(shí)
try
{
if (ss_port.Opened)
{
ss_port.Close();
ss_port.Open(); //打開串口 }
else
{
ss_port.Open();//打開串口
}
return true;
}
catch(Exception e)
{
MessageBox.Show("錯(cuò)誤:" + e.Message);
return false;
}
寫串口:
函數(shù)原型:public void Write(byte[] WriteBytes)
WriteBytes 就是你的寫入的字節(jié),注意,字符串要轉(zhuǎn)換成字節(jié)數(shù)組才能進(jìn)行通信
示例:
ss_port.Write(Encoding.ASCII.GetBytes("AT+CGMI\r")); //獲取手機(jī)品牌
讀串口:
函數(shù)原型:public byte[] Read(int NumBytes)
NumBytes 讀入緩存數(shù),注意讀取來的是字節(jié)數(shù)組,要實(shí)際應(yīng)用中要進(jìn)行字符轉(zhuǎn)換
示例:
string response = Encoding.ASCII.GetString(ss_port.Read(128)); //讀取128個(gè)字節(jié)緩存
關(guān)閉串口:
函數(shù)原型:ss_port.Close()
示例:
ss_port.Close();
聯(lián)系客服