zoukankan      html  css  js  c++  java
  • win7系统下用vspd软件进行串口编程实例

     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

    显示从串口读取的文本

     

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

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

    通信实现部分

        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

  • 相关阅读:
    asp.net core 集成JWT(一)
    Microsoft.Extensions.DependencyInjection中的Transient依赖注入关系,使用不当会造成内存泄漏
    Microsoft.Extensions.DependencyInjection的Singleton依赖注入关系,只是对于同一个ServiceProvider是单例的
    ASP.NET Core MVC中,如何将视图文件生成的html代码通过字符串返回
    SpringBoot魔法堂:说说带智能提示的spring-boot-starter
    Maven魔法堂:安装Oracle JDBC Driver依赖的那些坑
    TypeScript魔法堂:函数类型声明其实很复杂
    TypeScript魔法堂:枚举的超实用手册
    C#获取文件与文件夹默认图标(2006-3-22 新增示例代码与程序)
    【学习笔记】Team Explorer for Microsoft Visual Studio2015 安装时发生严重错误
  • 原文地址:https://www.cnblogs.com/fx2008/p/4317326.html
Copyright © 2011-2022 走看看