modbus串口通讯C#

本文详细介绍了如何使用C#实现Modbus串口通讯,包括串口通讯规约、定时器、多线程等关键知识点。通过创建一个支持通信超时、主站从站功能的测试软件,讲解了串口配置、数据处理和同步机制,以及配置文件和数据转换的方法。
摘要由CSDN通过智能技术生成

简介

公司给的一个小任务,这篇文章进行详细讲解

题目: modbus串口通讯

主要内容如下:
1、实现使用modbus通讯规约的测试软件;
2、具有通信超时功能;
3、分主站从站,并能编辑报文、生成报文等;
4、计算发送报文次数,接收报文次数,失败通信次数;
5、对接收的数据进行解析。

下面图片可以看出具体的内容:
OtS51Gw.png

CHuIjIF.png

知识点讲解

该小软件使用的知识如下:
1、modbus通信规约;
2、串口通讯;
3、定时器;
4、多线程;

1、modbus通讯规约

modbus是一个工业上常用的通讯协议,一个通讯约定,包括RTU,ASCII,TCP。该软件使用的RTU。

主站设备查询:
查询消肿的功能号告知被选中的设备要执行何种功能。数据段包括了从站设备要执行的功能的任何附加信息。

从站设备回应:
当从站设备正常回应后,在回应数据里也包括这功能号,并直接截取从站设备收集的数据。如果发生错误,功能号将被修改为用于指出回应消息为错误消息。并在数据段包括该描述的错误信息。错误校测域允许主设备确认消息的内容是否可用,是否正确。

下面的图片解释了modbus的规约的组成:

uk6PHLm.png
mobus通讯规约是由从机地址+功能号+数据地址+数据+CRC校验。

从机地址:该规约是单主站/多从站,主站轮询向从站请求的方式进行传输数据,并使用从机地址的方式区分从机。

功能号: 某指令是干啥,一目了然。接收方将通过功能号进行相应的执行功能。
下面为常用功能号:

hNY7XTQ.png

数据地址:意思是数据存储的地址,从该存储的地址的获取数据。

CRC校验:循环冗余校验码,是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。

对于校验,网上资料很多,这里直接上代码:

    #region  CRC16
    public static byte[] CRC16(byte[] data)
    {
        int len = data.Length;
        if (len > 0)
        {
            ushort crc = 0xFFFF;

            for (int i = 0; i < len; i++)
            {
                crc = (ushort)(crc ^ (data[i]));
                for (int j = 0; j < 8; j++)
                {
                    crc = (crc & 1) != 0 ? (ushort)((crc >> 1) ^ 0xA001) : (ushort)(crc >> 1);
                }
            }
            byte hi = (byte)((crc & 0xFF00) >> 8);  //高位置
            byte lo = (byte)(crc & 0x00FF);         //低位置

            return new byte[] { hi, lo };
        }
        return new byte[] { 0, 0 };
    }
    #endregion

串口通讯

在C#中实现串口通讯,由于C#微软封装的很好,提供了SerialPort类,命名空间为system.IO.Ports.


下面解释serialPort类编程中常用到的关键字和方法:

常用字段:

Modbus Poll是一个主机仿真器,用来帮助开发人员测试Modbus从设备,或者其它MOdbus协议的测试和仿真。它支持多文档接口,即,可以同时监视多个从设备/数据域。每个窗口简单地设定从设备ID,功能,地址,大小和轮询间隔。你可以从任意一个窗口读写寄存器和线圈。如果你想改变一个单独的寄存器,简单地双击这个值即可。或者你可以改变多个寄存器/线圈值。提供数据的多种格式方式,比如浮点、双精度、长整型(可以字节序列交换)。 状态条显示错误信息。 如果你是一个从设备开发者,你可以通过"test center" 菜单,组织并发送你自己的测试字符串,并以16进制形式检查从设备返回的结果。 为VB,EXCEL等提供了OLE自动化接口。可以用OLE接口解析和显示Modbus数据,然后送达你指定的设备,即,在EXCEL中编辑数据,然后发送到你的从设备!示例参看安装后的Excel example.xls。 支持下列协议: Modbus RTU Modbus ASCII Modbus TCP/IP Modbus RTU Over TCP/IP Modbus ASCII Over TCP/IP Modbus UDP/IP Modbus RTU Over UDP/IP Modbus ASCII Over UDP/IP MODBUS POLL功能: OLE自动化可以简单地与Visual Basic接口,使用起来类似于ActiveX控件。参见 VBExample.vbp 读/写多达125个寄存器 读/写多达2000个输入/线圈 Test Center菜单 (组织你自己的测试字串) 打印和打印预览 监视串行数据流量serial data traffic Data logging to a text file Data logging direct to Excel 上下文敏感的HLP文件 10 Display formats such as float, double etc. Adjustable Address Base (0 or 1). 字体和颜色选项 广播功能(从设备ID=0) Easy control of RS-485 converters with RTS toggle. 支持MODBUS功能: 01: Read coil status 读线圈状态 02: Read input status 读输入状态 03: Read holding register读保持寄存器 04: Read input registers 读输入寄存器 05: Force single coil 强制单线圈 06: Preset single register 预置单寄存器 15: Force multiple coils 强制多线圈 16: Preset multiple registers 预置多寄存器 17: Report slave ID 报告从设备ID 22: Mask write register 屏蔽写寄存器 23: Read/Write registers 读/写寄存器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值