目錄
一、硬體要求
- 硬線串連
- 虛擬串口軟體
二、軟體編程
- 如何獲得本機可用的串口列表
- 串口的常用操作
- 如何避免死結
需要保證硬體是接通的,即沒有硬體方面的問題。如果不能確定的,可以下載一個串口助手測試一下硬體。
如果沒有可以調試的串口,可以下載一個VSPM虛擬串口軟體,虛擬自己的串口。
【指導手冊: SerialPort MSDN 】
Microsoft.VisualBasic.Devices.Computer pc;
pc =new Microsoft.VisualBasic.Devices.Computer();
foreach (string s in pc.Ports.SerialPortNames)
{
comboBox1.Items.Add(s);//comboBox1為UI上的下拉式清單
}
註:使用Microsoft.VisualBasic.Devices需要在工程中添加Microsoft.VisualBasic的引用。方法為:功能表列“項目”-》“添加引用”-》選擇“.NET”選項卡-》找到“Microsoft.VisualBasic”後,點擊,然後按“確定”,即可。
System.IO.Ports.SerialPort com;
com =new System.IO.Ports.SerialPort();
com.Open();
com.Close();
①使用writeLine寫資料,用readLine讀資料
com.WriteLine("hello Elar");//寫資料
//other code
string inStr = com.ReadLine();//讀資料
註:使用readline和writeline時,要注意事先設定serialport的newLine。
com.NewLine ="\r\n";//一般方法
//或者用下面的代碼
com.NewLine = Environment.NewLine;//這樣比較好
②使用write寫串口,read(或readExisting)讀串口
com.Write("hello Elar");
read函數有兩種實現方式(詳見【這裡】):
建議用 SerialPort.Read (Byte[], Int32, Int32) 方式,因為使用byte方式發送和接收,可用在傳輸的時候避免因為編碼的問題而出現亂碼的情況。
使用方法如下:
byte[] readBuffer =newbyte[com.ReadBufferSize];
com.Read(readBuffer, 0, readBuffer.Length);
ReadBufferSize 是SerialPort的公用屬性之一,通過它可以擷取或設定 SerialPort 輸入緩衝區的大小。通過上面的代碼讀出的是位元據,可以通過如下代碼將其轉換為常見的string型資料:
string s = Encoding.Unicode.GetString(readBuffer);//要求編碼時候用的也是Unicode編碼方式
ReadExisting 和 write 配合使用,並避免亂碼(黃色標識的部分)的方案如下:
Byte[] data = Encoding.Unicode.GetBytes(sendText.Text);//sendText為輸入發送資料的文字框
string str = System.Text.Encoding.Unicode.GetString(data);
com.Write(str);//向連接埠寫資料Byte[] data = System.Text.Encoding.Unicode.GetBytes(port.ReadExisting());//從連接埠讀資料
string str = Encoding.Unicode.GetString(data);//將資料轉換為string型
待續……