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