http://blog.csdn.net/qiusuo800/article/details/8299777

目前,我在学习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

显示从串口读取的文本

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

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.IO.Ports;
  10. using Microsoft.VisualBasic;
  11. namespace 串口
  12. {
  13. public partial class Form1 : Form
  14. {
  15. System.IO.Ports.SerialPort com = null;
  16. public Form1()
  17. {
  18. InitializeComponent();
  19. }
  20. private void Form1_Load(object sender, EventArgs e)
  21. {
  22. Microsoft.VisualBasic.Devices.Computer pc = new Microsoft.VisualBasic.Devices.Computer();
  23. foreach (string s in pc.Ports.SerialPortNames)
  24. { this.comboBox1.Items.Add(s); }
  25. }
  26. private void button3_Click(object sender, EventArgs e)
  27. {
  28. if (com == null)
  29. {
  30. com = new SerialPort(comboBox1.Text);
  31. }
  32. if (!com.IsOpen)
  33. {
  34. com.Open();
  35. button3.Enabled = false;
  36. button4.Enabled = true;
  37. }
  38. }
  39. private void button4_Click(object sender, EventArgs e)
  40. {
  41. if (com != null && com.IsOpen)
  42. {
  43. com.Close();
  44. button3.Enabled = true;
  45. button4.Enabled = false;
  46. }
  47. }
  48. private void button1_Click(object sender, EventArgs e)
  49. {
  50. Byte[] bytes = MyEncode(textBox1.Text.Trim());
  51. com.Write(bytes, 0, bytes.Length);
  52. }
  53. private void button2_Click(object sender, EventArgs e)
  54. {
  55. Byte[] bytes = new Byte[com.ReadBufferSize];
  56. com.Read(bytes, 0, bytes.Length);
  57. listBox1.Items.Add(MyDecode(bytes));
  58. listBox1.SelectedIndex = listBox1.Items.Count - 1;
  59. MessageBox.Show(MyDecode(bytes));
  60. }
  61. /// <summary>
  62. /// 编码
  63. /// </summary>
  64. private Byte[] MyEncode(string text)
  65. {
  66. Encoder ed = Encoding.Default.GetEncoder();
  67. char[] chars = text.ToCharArray();
  68. Byte[] bytes = new Byte[ed.GetByteCount(chars, 0, chars.Length, true)];
  69. ed.GetBytes(chars, 0, chars.Length, bytes, 0, true);
  70. //return Convert.ToBase64String(bytes);
  71. return bytes;
  72. }
  73. /// <summary>
  74. /// 解码
  75. /// </summary>
  76. /// <param name="bytes"></param>
  77. /// <returns></returns>
  78. private string MyDecode(Byte[] bytes)
  79. {
  80. Decoder dd = Encoding.Default.GetDecoder();
  81. char[] chars = new char[dd.GetCharCount(bytes, 0, bytes.Length, true)];
  82. dd.GetChars(bytes, 0, bytes.Length, chars, 0, true);
  83. StringBuilder result = new StringBuilder(1000);
  84. foreach (char c in chars)
  85. {
  86. result.Append(c);
  87. }
  88. return result.ToString();
  89. }
  90. private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  91. {
  92. button4.PerformClick();
  93. }
  94. }
  95. }

通信实现部分

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

win7系统下用vspd软件进行串口编程实例的更多相关文章

  1. win7系统下如何配置php-Apache-mysql环境

    如何在win7系统下配置php环境呢,php+Apache+mysql都是在配置过程中必不可少的元素,php负责解析php代码,apache负责服务器端而mysql是数据交互的中转站. 那么如何将ph ...

  2. Win7系统下彻底删除无用服务的方法

    win7系统下中有非常多的服务项,用户来满足不同行业用户间的所有需求,系统服务也是执行指定系统功能的程序,许多情况下我们想要运行软件或执行外接设备都无法离开系统服务,但并非所有系统服务都是我们用到的, ...

  3. win7系统下python安装numpy,matplotlib,scipy和scikit-learn

    1.安装numpy,matplotlib,scipy和scikit-learn win7系统下直接采用pip或者下载源文件进行安装numpy,matplotlib,scipy时会遇到各种问题,这是因为 ...

  4. Svn win7系统下状态图标不显示-转载

    Svn win7系统下状态图标不显示 Svn版本 tortoisesvn-1.8.8.25755-x64-svn-1.8.10.msi 2.不显示图标状态如图1,期望结果显示图标状态如图2 图1 图2 ...

  5. Win7系统下完全删除Mysql

    今天不知为什么Mysql服务器突然连接不上,于是胡乱折腾了一番,导致最后不得不重新安装Mysql.安装不成功,服务器起不来,就是最后那步的时候服务器启动不了,这是因为Mysql在卸载的时候没有彻底卸载 ...

  6. MyEclipse第一个Servlet程序 --解决Win7系统下MyEclipse与Tomcat连接问题

    前言 本文旨在帮助学习java web开发的人员,熟悉环境,在Win7系统下运行自己的第一个Servlet程序,因为有时候配置不当或系统原因可能会运行不成功,这给初学者带来了一定烦恼,我也是为此烦恼过 ...

  7. 利用PowerDesigner15在win7系统下对MySQL 进行反向project(二)

    利用PowerDesigner15在win7系统下对MySQL 进行反向project 1.打开PowerDesigner,建立新模型.选择Physical Data Model中的Physical ...

  8. 利用PowerDesigner15在win7系统下对MySQL 进行反向工程(三)

    利用PowerDesigner15在win7系统下对MySQL 进行反向工程 1.选择"数据库-->Generate Database...",查看数据库表的SQL语句 2. ...

  9. 利用PowerDesigner15在win7系统下对MySQL 进行反向工程(二)

    利用PowerDesigner15在win7系统下对MySQL 进行反向工程 1.打开PowerDesigner,建立新模型,选择Physical Data Model中的Physical Da.. ...

随机推荐

  1. C#中常见的系统内置委托用法详解(抄录)

    C#中常见的系统内置委托 Action类.Func类.Predicate<T>.Comparison<T>委托 Action类的委托 Action委托 封装一个方法,该方法不具 ...

  2. 线程系列07,使用lock语句块或Interlocked类型方法保证自增变量的数据同步

    假设多个线程共享一个静态变量,如果让每个线程都执行相同的方法每次让静态变量自增1,这样的做法线程安全吗?能保证自增变量数据同步吗?本篇体验使用lock语句块和Interlocked类型方法保证自增变量 ...

  3. 使用Microsoft Unity进行日志记录

    需要记录日志的地方包括:进入方法的时候,传参的时候,统计执行时间,方法返回参数的时候,退出语句块的时候,出现异常的时候,等等.先来体验不使用Micirosoft Unity进行日志记录. class ...

  4. Web Sessions Installation

    展示不使用Terracotta DSO如何集群Web Sessions. 1.要求 1)jdk1.6或者更高版本 2)Terracotta 3.7或者更高版本 3)所有被集群的对象需要实现序列化,如果 ...

  5. [翻译] FreeStreamer 在线流媒体播放

    FreeStreamer https://github.com/muhku/FreeStreamer Introduction FreeStreamer is an audio player engi ...

  6. Struts2 校验框架学习笔记

    Struts2 校验框架 Struts2 和Struts1同样也提供了校验框架,但在Struts2 已经不再把校验框架做为一个插件,而是已经内置到了Struts2中,而且配置起来更为简单方便,功能也更 ...

  7. winform禁用标题栏

    protected override void WndProc(ref Message m) { if (m.Msg == 0x112) { switch ((int)m.WParam) { //禁止 ...

  8. Git 学习(七)标签管理

    Git 学习(七)标签管理 发布版本时,通常会先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本.取出某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照. ...

  9. python类和实例以及__call__/__del__

    面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可 ...

  10. struts2 18拦截器详解(五)

    I18nInterceptor 该拦截器处理defaultStack第四的位置,是用来方便国际化的,如果说我们的一个Web项目要支持国际化的话,通常的做法是给定一个下拉框列出所支持的语言,当用户选择了 ...