C# Modbus CRC16
时间: 2023-07-12 17:24:24 浏览: 142
ModbusCrc16校验码算法C#源码
以下是使用C#计算Modbus CRC16的示例代码:
```csharp
public static ushort CalculateCrc(byte[] data)
{
ushort crc = 0xFFFF;
for (int i = 0; i < data.Length; i++)
{
crc ^= (ushort)data[i];
for (int j = 0; j < 8; j++)
{
if ((crc & 0x0001) == 0x0001)
{
crc >>= 1;
crc ^= 0xA001;
}
else
{
crc >>= 1;
}
}
}
return crc;
}
```
使用示例:
```csharp
byte[] data = new byte[] { 0x01, 0x03, 0x00, 0x00, 0x00, 0x01 };
ushort crc = CalculateCrc(data);
byte[] crcBytes = BitConverter.GetBytes(crc);
Array.Reverse(crcBytes);
byte[] packet = new byte[data.Length + 2];
Array.Copy(data, packet, data.Length);
Array.Copy(crcBytes, 0, packet, data.Length, 2);
```
在这个示例中,我们使用CalculateCrc方法计算数据的CRC16值,并将其附加到数据包的末尾。请注意,由于Modbus使用大端字节顺序,因此我们需要使用Array.Reverse方法来反转CRC字节数组的顺序。
阅读全文