面對幾十頁的協議文檔(系統標識、幀長度、CRC32/16、MODBUS 等),**不要試圖一次寫完**,按模塊拆解:
Encode() → byte[]、Decode(byte[]) → 對象。Task Send(Request) ,供 UI/業務邏輯調用。// CRC16-Modbus
public static ushort CRC16(byte[] data) {
ushort crc = 0xFFFF;
foreach (byte b in data) {
crc ^= b;
for (int i = 0; i < 8; i++)
crc = (crc & 1) != 0 ? (ushort)((crc >> 1) ^ 0xA001) : (ushort)(crc >> 1);
}
return crc;
}
// BCD 編碼/解碼
public static byte[] ToBCD(string numeric) { ... }
public static string FromBCD(byte[] bcd) { ... }
先跑通「發送固定幀 → 收到預期應答」,再逐步擴展命令集,穩紮穩打。