首页 > 其他分享 >Modbus RTU通过从站地址获取校验码的代码

Modbus RTU通过从站地址获取校验码的代码

时间:2024-02-23 14:45:32浏览次数:29  
标签:command1 Modbus Console crcBytes 校验码 RTU crc byte

主要方法


  • 拆分高低位

image

  • 计算校验码

image

  • 完整通过从站地址获取校验码的代码

using System;
class Program
{
    static void Main()
    {
        Console.Write("请输入从站地址(十六进制): ");
        string slaveAddressInput = Console.ReadLine();
        byte slaveAddress;
        while (!(byte.TryParse(slaveAddressInput, System.Globalization.NumberStyles.HexNumber, null, out slaveAddress)))
        {
            Console.Write("无效的从站地址输入,请输入有效的十六进制值: ");
            slaveAddressInput = Console.ReadLine();
        }

        byte[] command1 = new byte[10];
//01 03 00 00 00 10 44 06
        
        command1[0] = slaveAddress;
        command1[1] = 0x03;
        command1[2] = 0x00;
        command1[3] = 0x00;
        command1[4] = 0x00;
        command1[5] = 0x10;
        byte[] command2 = { command1[0], command1[1], command1[2], command1[3], command1[4], command1[5] };
        byte[] crcBytes = GetCrcBytes(command2);
        command1[6] = crcBytes[0];
        command1[7] = crcBytes[1];
        Console.WriteLine(command1[6].ToString("X2"));
        Console.WriteLine(command1[7].ToString("X2"));
    }
    
    public static ushort CalculateCrc(byte[] data)
    {
        ushort crc = 0xFFFF;

        foreach (byte b in data)
        {
            crc ^= b;

            for (int i = 0; i < 8; i++)
            {
                if ((crc & 0x0001) != 0)
                {
                    crc >>= 1;
                    crc ^= 0xA001; // 这是Modbus RTU协议的生成多项式
                }
                else
                {
                    crc >>= 1;
                }
            }
        }

        return crc;
    }

// 将CRC拆分为低位和高位
    public static byte[] GetCrcBytes(byte[] data)
    {
        ushort crc = CalculateCrc(data);
        byte[] crcBytes = new byte[2];
        crcBytes[0] = (byte)(crc & 0xFF);      // 低位
        crcBytes[1] = (byte)((crc >> 8) & 0xFF); // 高位

        return crcBytes;
    }
}
  • 测试几个结果

image
image

标签:command1,Modbus,Console,crcBytes,校验码,RTU,crc,byte
From: https://www.cnblogs.com/gho13954/p/18029490

相关文章

  • IDEA、Pycharm等所有JetBrains产品同时报错:Internal error. Please refer to https://
    IDEA、Pycharm等所有JetBrains产品同时报错:Internalerror.Pleaserefertohttps://jb.gg/ide/critical-startup-errors错误Internalerror.Pleaserefertohttps://jb.gg/ide/critical-startup-errorscom.intellij.ide.plugins.StartupAbortedException:Cannotstartap......
  • Qt error: LNK2001: 无法解析的外部符号 “public: virtual struct QMetaObject const
    简介  通过QtCreator开发一个动态库,最开始希望只是一个简单的纯C++的动态库,就没有继承QObject,也没有写Q_OBJECT宏。编译时就会报:LNK2001:无法解析的外部符号public:virtualstructQMetaObjectconst。绕了不少弯子,终于解决了,把原因分析进行个整理。面试有个问题:Qt信号槽机......
  • Qt error: LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const
    这个问题总是在编译的不经意间出现,而且一出一大片,很烦。作为新手出了问题可定要在网上找答案,但是总是发现别人的解决方法解决不了自己的问题,唉~在这个问题上大家大家提出的大多数是.h.cpp文件不对应、.h中声明的文件在.cpp文件中没有实现、函数声明在了.cpp文件中等等一......
  • Modbus Slave 软件使用详解
    软件介绍         ModbusSlave是一个模拟Modbus协议从机的上位机软件,主要用于模拟测试跟其他主机设备通信的过程。与之成套存在的另一个软件--ModbusPoll,则是模拟Modbus协议主机的上位机软件。该软件内部封装标准Modbus协议栈,通过图形化界面使得操作更为简便。目前软......
  • 常用的MODBUS协议测试工具推荐
    介绍一些常用的MODBUS测试工具。1、ModscanModscan是一款免费的MODBUS测试工具,支持ModbusRTU和TCP和ASCII协议。它可以进行单点和多点的读写操作,并且可以生成MODBUS协议相关的报告。还支持模拟器模式,使用户可以通过虚拟设备对ModBus进行测试。2、CASModbusS......
  • Protues的串口工具Virtual Terminal
    用Protues来验证ARM的串口发送,有两种办法,一种是用Protues的串口工具VirtualTerminal第二种是用串口助手(此种方法,需要下载并安装虚拟串口软件,然后用虚拟串口连接虚拟硬件和串口助手,比较麻烦) (第二种方法需要虚拟串口软件,比较麻烦,因此,建议大家使用Protues的串口工具VirtualTermi......
  • modbus crc16校验
    //计算crc16位校验,如计算结果是0x5566,则高字节是55,低字节是66,需要根据情况交换高低字节quint16checkCrc16(quint8*ptr,intlen){unsignedinti;quint16crc=0xFFFF;while(len--){crc^=*ptr++;for(i=0;i<8;++i)......
  • 解决apache-tomcat安装成功之后运行startup.bat之后闪退
    一:概述通过startup.bat启动的流程是:startup->catalia->setclasspath->cataline,如果这3个bat文件里面有一个出现错误的话就是启动失败,为了找到一闪而过的原因,需要了解这三个bat文件里面是什么。二:具体说明<1>由于JDK环境变量配置错误tomcat在启动时,会读取环境变量的信息,需要一个CAT......
  • Modbus communication types
    AnIntroductiontotheModbusCommunicationProtocolhttps://www.solisplc.com/tutorials/modbusTheModbusOrganizationhttps://modbus.org/IntroductiontothemodbusprotocolOriginalequipmentmanufacturers(OEMs)allhaveproprietarycommunicationprot......
  • 【VIrtuoso】abstract的相关配置
    需要将cds.libcopy过来,保证abstract能够吃到工艺的相关信息 absSkillMode()absSetOption("NewLibraryPath""./")absSetOption("NewLibraryName""TEST")absSetLibrary("TEST")absAttachTechLib("TN28")absSetOption(&quo......