C#中对串口的操作

1、通过new SerialPort()创建串口对象

public static SerialPort sp1 = new SerialPort();/*sp1为创建的串口对象名*/

        

2、通过MulGetHardwareInfo()查找当前的串口

        串口设备在Windows下的命名规则如下;我们可以在C#面板上创建一个ComboBox控件用于对当前电脑所接串口设备的显示("COMx"的显示格式)及选择交互。
在这里插入图片描述
        
在这里插入图片描述

int StartIndex = 0;
int EndIndex = 0;
string[] ss = MulGetHardwareInfo(HardwareEnum.Win32_PnPEntity, "Name");/*获取当前电脑上的串口设备名*/
cbSerial.Items.Clear();  /*cbSerial即上面描述的ComboBox控件对象名;进行Item清除*/
for (i = 0; i < ss.Length; i++)
{
	if (ss[i].Contains("(COM"))
	{
	    StartIndex = ss[i].LastIndexOf("COM");
	    EndIndex = ss[i].LastIndexOf(")");
	    cbSerial.Items.Add(ss[i].Substring(StartIndex, (EndIndex - StartIndex)));
	}
}

        

3、对串口对象(例子中的sp1)的其他属性进行配置

        对于串口,一般我们还需对其波特率,数据位、停止位、校验位等信息进行配置。同样,我们可以在面板上新建ComboBox对象用于交互。ComboBox对象的选项(如代码中cbParity的"无"、“奇校验”、“偶校验”等选项)可在该ComboBox控件的Item属性中设置。控件如下:
在这里插入图片描述

sp1.BaudRate = iBaudRate;       	/*波特率设置*/
sp1.DataBits = iDateBits;       	/*数据位设置*/
switch (cbStop.Text)                            
{
   case "1":
       sp1.StopBits = StopBits.One; /*停止位设置*/
       break;
   case "1.5":
       sp1.StopBits = StopBits.OnePointFive;
       break;
   case "2":
       sp1.StopBits = StopBits.Two;
       break;
   default:
       MessageBox.Show("Error:参数不正确!", "Error");
       break;
}

switch (cbParity.Text)             
{
   case "无":
       sp1.Parity = Parity.None;		/*校验位设置*/
       break;
   case "奇校验":
       sp1.Parity = Parity.Odd;
       break;
   case "偶校验":
       sp1.Parity = Parity.Even;
       break;
   default:
       MessageBox.Show("Error:参数不正确!", "Error");
       break;
}

        

4、弹出文件选择框,进行文件类型筛选;

OpenFileDialog open = new OpenFileDialog();
open.Filter = "(bin文件)|*.bin"; 			/*设置筛选的是bin格式的文件*/
if (open.ShowDialog() == DialogResult.OK)   /*判断是否已经进行了文件选择*/
{
  	/*对选择的文件的操作;文件路径名由open.FileName表示*/
}

        

5、通过FileStream类打开前面选择的文件,获取数据

/*通过FileInfo类获取文件的长度信息*/
FileInfo fi = new FileInfo(open.FileName);
long len = fi.Length;

/*通过FileStream类对文件进行数据读取*/
FileStream fs = new FileStream(open.FileName, FileMode.Open);
byte[] buffer = new byte[len];
fs.Read(buffer, 0, (int)len);
fs.Close();

        
对于Bin文件的读取,也可以通过BinaryReader来进行;如下:

ArrayList binArraylist  = new ArrayList();
byte ByteOfRead;

/*声明文件流*/
FileStream fs = new FileStream(open.FileName, FileMode.Open, FileAccess.Read);
/*创建读取器*/
BinaryReader brReader = new BinaryReader(fs);

while (brReader.BaseStream.Position < brReader.BaseStream.Length)/*文件未读完*/
{
    ByteOfRead = brReader.ReadByte();/*读取文件一个字节的数据,添加到binArraylist中去*/
    binArraylist.Add(ByteOfRead);
}
brReader.Close();

        

6、从串口缓冲区取数据

if (sp1.IsOpen)   /*判断串口属于打开的状态*/
{
	int LengthOfBuffer;
	if(False == sp1.IsOpen)     /*在对串口进行操作(sp1.方法)前的检查;防止关闭串口造成的死机*/
	{
		break;
	}
	LengthOfBuffer = SerialPortConnection.Form1.sp1.BytesToRead;  /*获取当前串口缓冲区的字节数*/
	byte[] Recvbuff = new byte[LengthOfBuffer];
	SerialPortConnection.Form1.sp1.Read(Recvbuff, offset, LengthOfBuffer); /*从串口缓冲区读取LengthOfBuffer个字节,存放到Recvbuff[offset]的起始位置*/
}

此外,也可以一个字节一个字节读取(通过返回值获取数据):

SerialPortConnection.Form1.sp1.ReadByte();

也可以一次读出当前缓冲区中的数据(通过返回值获取数据) :

SerialPortConnection.Form1.sp1.ReadExisting();

        

7、往串口缓冲区中写数据

sp1.Write(Source, Offset, Length); /*从Source[Offset] 处开始,取count个字节数据写入到串行端口*/

        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值