基于.Net C# 通信开发-串口调试助手

  1、概述

  

  串口调试助手,广泛应用于工控领域的数据监控、数据采集、数据分析等工作,可以帮助串口应用设计、开发、测试人员检查所开发的串口应用软硬件的数据收发状况,提高开发的速度,成为您的串口应用的开发助手。
实全串口调试助手是绿色软件,只有一个执行文件,适用于各版本Windows操作系统,基于C# .Net 4.0 框架开发。可以在一台PC上同时启动多个串口调试助手(使用不同的COM口)。
  典型应用场合:通过串口调试助手与自行开发的串口程序或者串口设备进行通信联调。
  支持多串口,自动监测枚举本地可用串口;自由设置串口号、波特率、校验位、数据位和停止位等(支持自定义非标准波特率);
  支持ASCII/Hex两种模式的数据收发,发送和接收的数据可以UTF-8、16进制和AscII码之间任意转换;
  支持间隔发送,循环发送,批处理发送,输入数据可以从外部文件导入。

  串口调试开发,一般分为读取电脑连接串口信息、选择串口信息进行连接、设置相关发送接收配置、发送命令或消息,接收读取返回结果。

  2、串口开发主要代码

  2.1、读取电脑连接串口信息

  串口调试,首先需要程序读取电脑连接串口信息。

  //读取连接串口
string[] mPortNames = SerialPort.GetPortNames();
this.txtPortName.Items.Clear();
foreach (var item in mPortNames)
{
this.txtPortName.Items.Add(item);
} this.txtParity.Items.Clear();
foreach (string item in Enum.GetNames(typeof(Parity)))
{
this.txtParity.Items.Add(item);
}
this.txtParity.DropDownStyle = ComboBoxStyle.DropDownList; this.txtStopBits.Items.Clear();
foreach (string item in Enum.GetNames(typeof(StopBits)))
{
this.txtStopBits.Items.Add(item);
}
this.txtStopBits.DropDownStyle = ComboBoxStyle.DropDownList; this.txtHandshake.Items.Clear();
foreach (string item in Enum.GetNames(typeof(Handshake)))
{
this.txtHandshake.Items.Add(item);
}
this.txtHandshake.DropDownStyle = ComboBoxStyle.DropDownList;

  2.2、选择串口信息进行连接

/// <summary>
/// 获取串口信息
/// </summary>
/// <param name="setting"></param>
/// <param name="fail"></param>
/// <returns></returns>
public static SerialPort GetSerialPort(SerialPortSet setting, out string fail)
{
fail = string.Empty;
try
{
_SerialPort = new SerialPort();
_SerialPort.PortName = setting.PortName;
_SerialPort.BaudRate = setting.BaudRate.ToInt32();
_SerialPort.Parity = (Parity)Enum.Parse(typeof(Parity), setting.Parity, true);
_SerialPort.DataBits = setting.DataBits.ToInt32();
_SerialPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), setting.StopBits, true);
_SerialPort.Handshake = (Handshake)Enum.Parse(typeof(Handshake), setting.Handshake, true); return _SerialPort;
}
catch (Exception ex)
{
fail = "打开串口 异常:" + ex.Message;
return null;
}
}

  2.3、选择相关发送接收配置

  支持UTF-8、ASCII、GB2312、16进制内容,收、发选择;支持间隔发送,循环发送,批处理发送,输入数据可以从外部文件导入。

  2.4、发送命令或消息

/// <summary>
/// 发送命令或消息
/// </summary>
/// <param name="content"></param>
private void SendByte(string content)
{
try
{
if (this.ckbShowSend.Checked)
this.AppendText(content); byte[] buffer;
if (this.txtSendEncoding.Text.Length <= 0)
buffer = Encoding.Default.GetBytes(this.txtContent.Text);
else if (this.txtSendEncoding.Text == "16进制")
buffer = this.HexToByte(this.txtContent.Text);
else
buffer = Encoding.GetEncoding(this.txtSendEncoding.Text).GetBytes(this.txtContent.Text);
//向串口发送数据
this._SerialPort.Write(buffer, 0, buffer.Length);
}
catch (Exception ex)
{
WinMessageBox.Warning("发送失败:" + ex.Message);
}
}

  2.5、接收读取返回结果

/// <summary>
/// 接收读取返回结果
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] buffer = new byte[this._SerialPort.ReadBufferSize];
int count = this._SerialPort.Read(buffer, 0, buffer.Length);
//string str = Encoding.Default.GetString(readBuffer).TrimEnd('\0');
if (this.txtEncoding.Text.Length <= 0)
this.AppendText(System.Text.Encoding.Default.GetString(buffer,0, count));
else if (this.txtEncoding.Text == "16进制")
this.AppendText(this.ByteToHex(buffer,0,count));
else
this.AppendText(System.Text.Encoding.GetEncoding(this.txtEncoding.Text).GetString(buffer,0,count));
}

  3、结语

  至此介绍完毕,本项目开源,源码地址:https://gitee.com/ShiQuan25/SerialHelper

  安装包下载地址:https://gitee.com/ShiQuan25/SerialHelper/attach_files/1048876/download/ShiQuan.SerialHelper.zip

  不当之处,欢迎指正!

基于.Net C# 通信开发-串口调试助手的更多相关文章

  1. 基于.Net C# 通信开发-网络调试助手

    基于.Net C# 通信开发-网络调试助手1.概述 网络调试助手是集TCP/UDP服务端客户端一体的网络调试工具,可以帮助网络应用设计.开发.测试人员检查所开发的网络应用软硬件的数据收发状况,提高开发 ...

  2. Delphi - 采用第三方控件TMS、SPComm开发串口调试助手

    第三方控件TMS.SPComm的下载与安装 盒子上可搜索关键字进行下载,TMS是.dpk文件,SPComm.pas文件: 安装方法自行百度,不做赘述. 通过TMS控件进行界面布局 界面预览: Delp ...

  3. 基于socket开发网络调试助手

    1.什么是Socket? 在计算机领域socket被翻译为套接字,它是计算机之间进行通信的一种方式,通过socket这种约定,一台计算机可以向另外一台计算机发送数据和接收数据. 2.Socket的本质 ...

  4. 串口调试助手vc源程序及其详细编写过程

    串口调试助手vc源程序及其详细编写过程   目次: 1.建立项目 2.在项目中插入MSComm控件 3.利用ClassWizard定义CMSComm类控制变量 4.在对话框中添加控件 5.添加串口事件 ...

  5. 自己编写的基于VC++6.0的串口调试软件,并贡献源程序!

    自己编写的基于VC++6.0的串口调试软件源程序! 程序下载链接: 点击打开链接

  6. Qt 编写串口调试助手

    一.成品图展示 成品图如下所示: 二.串口通讯步骤 1.在工程文件(.pro)中添加串口通信相关运行库:QT += serialport 2.在头文件中添加: #include <QSerial ...

  7. OSDA - 一个以MIT协议开源的串口调试助手

    市场其实有很多开源的串行端口调试助手(Open Serial Port debug assistant),但其中很大一部分没有明确的开源协议,还有一部分只限个人使用,所以编写了一个并以MIT协议授权开 ...

  8. C#基于wpf编写的串口调试助手

    支持数据保存,自定义协议解码等功能 链接:https://pan.baidu.com/s/1zvhcES4QIjpDDJGzth1qOA 提取码:lp2x

  9. [转]web串口调试助手,浏览器控制串口设备

    本文转自:https://blog.csdn.net/ldevs/article/details/39664697 打开串口时查找可用串口供选择 通过javascript调用activex控制串口收发 ...

随机推荐

  1. springcloud如何实现服务的注册?

    1.服务发布时,指定对应的服务名,将服务注册到 注册中心(eureka zookeeper)2.注册中心加@EnableEurekaServer,服务用@EnableDiscoveryClient,然 ...

  2. 什么是 REST / RESTful 以及它的用途是什么?

    Representational State Transfer(REST)/ RESTful Web 服务是一种帮助计 算机系统通过 Internet 进行通信的架构风格.这使得微服务更容易理解和实现 ...

  3. vue中v-model 数据双向绑定

    表单输入绑定 v-model 数据双向绑定,只能应用在input /textare /select <div id="app"> <input type=&quo ...

  4. 学习Nginx(三)

      nginx的性能测试及常用优化手段 一.nginx的性能测试及对比 1.环境准备 [root@test8_hadoop_kaf ~]# yum install -y httpd-tools [ro ...

  5. 4.RDD操作

    目录 一. RDD创建 从本地文件系统中加载数据创建RDD 从HDFS加载数据创建RDD 通过并行集合(列表)创建RDD 二. RDD操作 转换操作 filter(func) map(func) fl ...

  6. ModelSerializer序列化器实战

    目录 ModelSerializer序列化器实战 单表操作 序列化器类 视图类 路由 模型 多表操作 models.py serializer.py views.py urls.py ModelSer ...

  7. 在TypeScript项目中进行BDD测试

    在TypeScript项目中进行BDD测试 什么是BDD? BDD(Behavior-Driven Design)是软件团队的一种工作方式,通过以下方式缩小业务人员和技术人员之间的差距: 鼓励跨角色协 ...

  8. CCF201409-3 字符串匹配

    问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符:当选项关闭时,表示同一个字母的大写和小写 ...

  9. android的布局xml文件如何添加注释?

    xml布局文件如图添加注释后报错,错误内容如下: 上网查阅xml添加注释的语法规则: XML 中的注释 在 XML 中编写注释的语法与 HTML 的语法很相似: <!--This is a co ...

  10. vue简单的父子组件之间传值

     todo-list为例子: 代码: 父传子--------------属性  v-bind 子传父--------------$emit <!DOCTYPE html> <html ...