[Modbus] 如何 用 C# 开发 Modbus Master Protocol - (11) 实践 HexModbusDataConvert

这只是很简单的进制转换,要参考的数据很多
[C#.NET] 开发通讯协定必须要会的技巧
[C#.NET] 处理通讯协定的事前准备
[C#.NET] 浮点数 转 Hexadecimal
[C#.NET] Hexadecimal 字符串格式转时间格式
[C#][VB.NET] 进制转换 (2进制、8进制、16进制)转10进制
[VB6][C#][VB.Net] 进制转换,2进制转(10进制、8进制、16进制)
{ public override byte[] ResultArray { get; internal set; } public override IEnumerable ToDecimal(byte[] ResultArray, EnumModbusIntegralUnit Unit) { var length = (int)Unit; if (ResultArray == null) { throw new ArgumentNullException("ResultArray"); } if (ResultArray.Length
此类,会用到的枚举
{ Byte = 1, Word = 2, DWord = 4, QWord = 8 }
前面几篇文章都会看的到的 ModbusUtility 类,收纳了一些杂像功能,不知如何分类的都被丢到这里来,比如计算CRC / LRC
{ public readonly static string ASCII_START_SYMBOL = ":"; public readonly static string ASCII_END_SYMBOL = "rn"; private CRCManager m_CrcManager = new CRCManager(); private AbsCRCProvider m_CrcProvider; private string[] s_Symbol = new string[] { " ", ",", "-" }; public string BytesToBinaryString(byte[] HexArray) { StringBuilder sb = new StringBuilder(); foreach (var b in HexArray) { sb.Append(Convert.ToString(b, 2).PadLeft(8, '0')); } return sb.ToString(); } public byte[] HexStringToBytes(string Hex) { string filter = s_Symbol.Aggregate(Hex, (current, symbol) => current.Replace(symbol, "")); return Enumerable.Range(0, filter.Length) .Where(x => x % 2 == 0) .Select(x => Convert.ToByte(filter.Substring(x, 2), 16)) .ToArray(); } public string BytesToHexString(byte[] HexArray) { StringBuilder sb = new StringBuilder(); foreach (var b in HexArray) { sb.Append(b.ToString("X2")); } return sb.ToString(); } public string CalculateLRC(byte[] DataArray) { if (DataArray == null) throw new ArgumentNullException("data"); byte lrc = 0; foreach (byte b in DataArray) { lrc += b; } lrc = (byte)((lrc ^ 0xFF) + 1); var hex = lrc.ToString("X2"); return hex; } public byte[] CalculateCRC(byte[] DataArray) { if (m_CrcProvider == null) { m_CrcProvider = m_CrcManager.CreateCRCProvider(EnumCRCProvider.CRC16Modbus); } var crcArray = m_CrcProvider.GetCRC(DataArray).CrcArray; Array.Reverse(crcArray); return crcArray; } }
若有谬误,烦请告知,新手发帖请多包涵

原文:大专栏[Modbus] 如何 用 C# 开发 Modbus Master Protocol - (11) 实践 HexModbusDataConvert
来源:博客园
作者:wellwill
链接:https://www.cnblogs.com/petewell/p/11510123.html