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

匿名 (未验证) 提交于 2019-12-03 00:03:02

[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;     } }

若有谬误,烦请告知,新手发帖请多包涵

2010~2017 C# 第四季

原文:大专栏[Modbus] 如何 用 C# 开发 Modbus Master Protocol - (11) 实践 HexModbusDataConvert


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!