win7系统下用vspd软件进行串口编程实例

     目前我在学习C#串口编程类的基础知识,在网上也找了一些资料,但都存在一些问题,现在他们基础上再进行一定的修改,且更详细的表达如何实现串口编程,实现串口的发送与接收。本文通过一个完整的实例,目的在于说明在win7系统中进行串口编程时

     1.  用C# 编程串口的属性定义、成员变量以及方法等问题;

     2.  掌握串口的发送与接收,利用虚拟串口来进行通讯,体验串口通讯;

     至于具体的串口通信原理,下一篇会具体介绍。

本文使用开发技术

    1.C#中的System.IO.Ports;  (不过在vc下亦可以使用MSCOM)

环境准备

    1.  生成虚拟串口通信的工具:

     xp系统下vspm下载地址:

     http://download.csdn.net/source/1232967

     win7系统下vspd下载地址:

     http://www.qiujicai.com/content/uploadfile/201104/17ebdf6a475acba44e4fdd4c8e5d58ce20110421020034.rar

    2.  辅助串口调试的工具---串口调试助手(即用于和自己写的窗口通信程序交互的软件)

 

自己的客户端程序

界面如下:

 

 

表1  程序中使用的控件命名

控件名称

定义的id

含义

下拉列表框

comboBox1

显示操作系统中可用的串口

“打开端口”按钮

Button3

打开选择的串口

“关闭端口”按钮

Button4

关闭选择的串口

细长的那个文本框

textBox1

提交发送的文本信息

“发送信息”按钮

button1

给串口发送文本

“接受信息”按钮

Button2

读取串口缓存的文本

巨大的显示框

listBox1

显示从串口读取的文本

 

 

程序代码(简单,不解释):

 

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;

using System.IO.Ports;   
using Microsoft.VisualBasic; 

namespace 串口
{
    public partial class Form1 : Form
    {
        System.IO.Ports.SerialPort com = null;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Microsoft.VisualBasic.Devices.Computer pc = new Microsoft.VisualBasic.Devices.Computer();   
            foreach (string s in pc.Ports.SerialPortNames)
            { this.comboBox1.Items.Add(s); }   

        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (com == null)
            {
                com = new SerialPort(comboBox1.Text);
            }
            if (!com.IsOpen)
            {
                com.Open();
                button3.Enabled = false;
                button4.Enabled = true;
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
             if (com != null && com.IsOpen)
             {
                 com.Close();
                 button3.Enabled = true;
                 button4.Enabled = false;
             }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Byte[] bytes = MyEncode(textBox1.Text.Trim());
            com.Write(bytes, 0, bytes.Length);              
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Byte[] bytes = new Byte[com.ReadBufferSize];
            com.Read(bytes, 0, bytes.Length);
            listBox1.Items.Add(MyDecode(bytes));
            listBox1.SelectedIndex = listBox1.Items.Count - 1;
            MessageBox.Show(MyDecode(bytes)); 
        }

        /// <summary>
        /// 编码
        /// </summary>
        private Byte[] MyEncode(string text)
        {
            Encoder ed = Encoding.Default.GetEncoder();
            char[] chars = text.ToCharArray();
            Byte[] bytes = new Byte[ed.GetByteCount(chars, 0, chars.Length, true)];
            ed.GetBytes(chars, 0, chars.Length, bytes, 0, true);
            //return Convert.ToBase64String(bytes);
            return bytes;
        }
        
        /// <summary>
        /// 解码
        /// </summary>
        /// <param name="bytes"></param>
        /// <returns></returns>
        private string MyDecode(Byte[] bytes)
        {
            Decoder dd = Encoding.Default.GetDecoder();
            char[] chars = new char[dd.GetCharCount(bytes, 0, bytes.Length, true)];
            dd.GetChars(bytes, 0, bytes.Length, chars, 0, true);
            StringBuilder result = new StringBuilder(1000);
            foreach (char c in chars)
            {
                result.Append(c);
            }
            return result.ToString();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            button4.PerformClick();   
        }
    }
}


 

通信实现部分

    1.  打开vspd软件,创建虚拟串口com2、com3,不要关闭软件(关闭时,虚拟串口就不存在了);

    2.  运行自己的客户端软件,在comboBox1中选择新创建的串口com2,然后单击”打开端口”按钮;

 

    3.  打开串口调试助手软件,选择与com2端口一同创建的com3端口,然后连接;

    4.  在自定义客户端中输入文本,然后发送,即可在串口通信助手软件中看到收到的字符串信息;如果想看十六进制信息,就把左边的十六进制复选框中的对号勾上,以后就会显示十六进制的信息;

    5.  可以在串口调试助手软件中,输入文本,单击“发送“按钮,然后在自定义客户端软件中单击”接受信息”,即可显示收到信息;

 

 

 

 

    本文主要讲解win7系统中使用C#进行串口编程的步骤,对于在xp中使用C#进行串口开发的文章网上比较多,具体可以参考:

    1.http://chowtrong.blog.163.com/blog/static/193026085201171932139652/

    2.http://www.cnblogs.com/youchun/archive/2009/11/28/1612724.html

    关于vspd的使用方可以参考:

    1.http://www.qiujicai.com/?post=42

    2.http://blog.sina.com.cn/s/blog_6163bdeb0102e8iy.html

    关于vspm的使用可以参考:

    1.http://wenku.baidu.com/view/b8f3b72d915f804d2b16c132.html

    2.http://wenku.baidu.com/view/ed929b8202d276a200292ea1.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值