C#串口编程

 背景就不说了,我没有过串口编程的经验,七拼八凑了一些资料,自己弄了个小例子。由于我的本本上没有串口,所有下载了一个虚拟的串口软件VSPM,下载地址:http://download.youkuaiyun.com/source/1232967 ,使用帮助下载:http://download.youkuaiyun.com/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 System.ComponentModel;  
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();  
            //获取所有的串口  
            Microsoft.VisualBasic.Devices.Computer pc = new Microsoft.VisualBasic.Devices.Computer();  
            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 System.ComponentModel;
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();
            //获取所有的串口
            Microsoft.VisualBasic.Devices.Computer pc = new Microsoft.VisualBasic.Devices.Computer();
            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管理”窗口中直接输入数据即可,界面上是看不到的。执行“虚拟串口设置管理”-->“跟踪串口数据”,在弹出的窗口中可以看到数据,输入完数据后回车,然后在测试程序中点击“接收”便可显示出收到的数据。

 

这个虚拟串口的软件很有用,我把它上传至优快云的资源里了,地址:

个人认为COM编程没这么简单,虽然.Net把它封装的很好,让人很容易写出代码,但似乎这只是冰山一角!

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/redhaste/archive/2009/04/21/4097863.aspx

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值