C#串口编程
背景就不说了,我没有过串口编程的经验,七拼八凑了一些资料,自己弄了个小例子。由于我的本本上没有串口,所有下载了一个虚拟的串口软件VSPM,下载地址:https://www.wendangku.net/doc/aa13032529.html,/source/1232967,使用帮助下载:https://www.wendangku.net/doc/aa13032529.html,/source/1233011
安装完成,启动时需要进行设置:从第一个窗口开始依次设置为:
1.简体中文
2.VSPM运行在Server模式,支持运行在Client模式
3.使用设备探测器建立虚拟端口
4.设置虚拟串口信息,如下图(192.168.20.136是我本地IP,端口也是自己设置的)
确定后便设置完成。
进入主界面后,选择刚刚建立的虚拟串口,然后选择菜单“虚拟串口设置管理”->“检查此设置连接”,弹出Telnet管理窗口,地址及端口输入刚才所填写的,点击“重新连接”,此时再查看软件主界面会发现COM2这条记录的最后一列“最后一次操作”显示的是:串口,COM2没有打开,我们需要在程序中打开并进行操作。
新建C#WinForm项目,引用Microsoft.VisualBasic,界面如下:
代码也很简单,不加说明了,直接放出来:
view plaincopy to clipboardprint?
using System;
using System.Collections.Generic;
using https://www.wendangku.net/doc/aa13032529.html,ponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace SerialPort
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private System.IO.Ports.SerialPort com;
private void Form1_Load(object sender, EventArgs e)
{
com = new System.IO.Ports.SerialPort();
//获取所有的串口
https://www.wendangku.net/doc/aa13032529.html,puter pc = new https://www.wendangku.net/doc/aa13032529.html,puter();
foreach (string s in pc.Ports.SerialPortNames)
{
this.cbxPortName.Items.Add(s);
}
}
private void btnOpenPort_Click(object sender, EventArgs e)
{
if (cbxPortName.SelectedItem != null)
{
com.Close();
com.PortName = cbxPortName.SelectedItem.ToString();
com.Open();
if (com.IsOpen)
{
btnClose.Enabled = true;
lbStatus.Text = "串口" + cbxPortName.SelectedItem.ToString() + "已经连接";
}
}
else
{
MessageBox.Show("请选择串口!");
}
}
private void btnSend_Click(object sender, EventArgs e)
{
if (com.IsOpen)
{
com.WriteLine(txtSendMsg.Text);
}
else
{
MessageBox.Show("请先连接串口!");
}
}
private void btnReceive_Click(object sender, EventArgs e)
{
txtReceive.Text = "";
if (com.IsOpen)
{
txtReceive.Text = com.ReadLine();
}
else
MessageBox.Show("请先连接串口!");
}
}
private void btnClose_Click(object sender, EventArgs e)
{
com.Close();
if (!com.IsOpen)
{
btnClose.Enabled = false;
}
}
}
}
using System;
using System.Collections.Generic;
using https://www.wendangku.net/doc/aa13032529.html,ponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace SerialPort
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private System.IO.Ports.SerialPort com;
private void Form1_Load(object sender, EventArgs e)
{
com = new System.IO.Ports.SerialPort();
//获取所有的串口
https://www.wendangku.net/doc/aa13032529.html,puter pc = new https://www.wendangku.net/doc/aa13032529.html,puter();
foreach (string s in pc.Ports.SerialPortNames)
{
this.cbxPortName.Items.Add(s);
}
}
private void btnOpenPort_Click(object sender, EventArgs e)
{
if (cbxPortName.SelectedItem != null)
com.Close();
com.PortName = cbxPortName.SelectedItem.ToString();
com.Open();
if (com.IsOpen)
{
btnClose.Enabled = true;
lbStatus.Text = "串口" + cbxPortName.SelectedItem.ToString() + "已经连接";
}
}
else
{
MessageBox.Show("请选择串口!");
}
}
private void btnSend_Click(object sender, EventArgs e)
{
if (com.IsOpen)
{
com.WriteLine(txtSendMsg.Text);
}
else
{
MessageBox.Show("请先连接串口!");
}
}
private void btnReceive_Click(object sender, EventArgs e)
{
txtReceive.Text = "";
if (com.IsOpen)
{
txtReceive.Text = com.ReadLine();
}
else
{
MessageBox.Show("请先连接串口!");
}
}
private void btnClose_Click(object sender, EventArgs e)
{
com.Close();
if (!com.IsOpen)
{
btnClose.Enabled = false;
}
}
}
运行后选择COM2,点击“连接”,提示连接成功后,回到虚拟串口的“Telnet管理”窗口,点击“重新连接”则主窗口中“最后一次操作”列变成了“客户端已经建立TCP/IP连接”,此时表明已经和串口连接成功。
发送测试
在测试程序的文本框中输入字符然后发送,会在管理窗口中看到接收的数据:
接收测试
在VSPM的“Telnet管理”窗口中直接输入数据即可,界面上是看不到的。执行“虚拟串口设置管理”-->“跟踪串口数据”,在弹出的窗口中可以看到数据,输入完数据后回车,然后在测试程序中点击“接收”便可显示出收到的数据。
这个虚拟串口的软件很有用,我把它上传至CSDN的资源里了,地址:
个人认为COM编程没这么简单,虽然.Net把它封装的很好,让人很容易写出代码,但似乎这只是冰山一角!