c#实现Modbus CRC16校验
作者:野牛程序员:2023-12-28 11:12:38C#阅读 3114
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

