【入门】C#串口编程
时间:2011-03-15 来源:elar
一、硬件要求
需要保证硬件是接通的,即没有硬件方面的问题。如果不能确定的,可以下载一个串口助手测试一下硬件。
如果没有可以调试的串口,可以下载一个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”后,点击,然后按“确定”,即可。
(二)串口的常用操作
1.声明并实例化串口
System.IO.Ports.SerialPort com;com = new System.IO.Ports.SerialPort();
2.打开串口
com.Open();3.关闭串口
com.Close();4.串口的读写
①使用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函数有两种实现方式(摘自MSDN):
名称 | 说明 |
---|---|
SerialPort.Read (Byte[], Int32, Int32) |
从 SerialPort 输入缓冲区读取一些字节并将那些字节写入字节数组中指定的偏移量处。
由 .NET Compact Framework 支持。 |
SerialPort.Read (Char[], Int32, Int32) |
从 SerialPort 输入缓冲区读取一些字节并将那些字节写入到字节数组中指定的偏移量处。
由 .NET Compact Framework 支持。 |
建议用第一种SerialPort.Read (Byte[], Int32, Int32)的方式,因为使用byte方式发送和接收,可用在传输的时候避免因为编码的问题而出现乱码的情况。原型如下:
public int Read (byte[] buffer,
int offset,
int count
)
使用方法如下:
byte[] readBuffer = new byte[com.ReadBufferSize];com.Read(readBuffer, 0, readBuffer.Length);
ReadBufferSize 是SerialPort的公共属性之一,通过它可以获取或设置 SerialPort 输入缓冲区的大小。通过上面的代码读出的是二进制数据,可以通过如下代码将其转换为常见的string型数据:
string s = Encoding.Unicode.GetString(readBuffer);//要求编码时候用的也是Unicode编码方式read和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型