当前位置:首页C# > 正文

c#实现Modbus CRC16校验

作者:野牛程序员:2023-12-28 11:12:38C#阅读 2772

Modbus CRC16校验是一种在Modbus通信中常用的错误检测方法。以下是一个用C#实现Modbus CRC16校验的示例代码:

public class ModbusCRC16
{
    private const ushort polynomial = 0xA001;
    private ushort[] table = new ushort[256];

    public ModbusCRC16()
    {
        InitializeTable();
    }

    private void InitializeTable()
    {
        for (ushort i = 0; i < table.Length; ++i)
        {
            ushort value = 0;
            ushort temp = i;

            for (byte j = 0; j < 8; ++j)
            {
                if (((value ^ temp) & 0x0001) != 0)
                {
                    value = (ushort)((value >> 1) ^ polynomial);
                }
                else
                {
                    value >>= 1;
                }

                temp >>= 1;
            }

            table[i] = value;
        }
    }

    public ushort CalculateCRC(byte[] data)
    {
        ushort crc = 0xFFFF;

        foreach (byte b in data)
        {
            crc = (ushort)((crc >> 8) ^ table[(crc ^ b) & 0xFF]);
        }

        return crc;
    }
}

class Program
{
    static void Main()
    {
        ModbusCRC16 modbusCRC16 = new ModbusCRC16();

        byte[] data = { 0x01, 0x03, 0x00, 0x00, 0x00, 0x05 };

        ushort crc = modbusCRC16.CalculateCRC(data);

        Console.WriteLine($"CRC16: 0x{crc:X4}");
    }
}

这个示例代码包括一个ModbusCRC16类,其中包含了初始化CRC表和计算CRC的方法。在Main方法中,创建了一个ModbusCRC16对象,并使用一个示例数据数组计算CRC值。最后,打印出计算得到的CRC16值。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击