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类编程中常用到的关键字和方法:

常用字段:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值