Skip to content

3.1 工具类介绍

parallelbgls edited this page Jun 29, 2017 · 5 revisions
  • ValueHelper.cs

    ValueHelper是一个值转换工具类,分为ValueHelper(小端),BigEndianValueHelper(大端),BigEndianMsbValueHelper(大端高位)。
    ValueHelper全部为单例。

    • ByteLength

      确定一钟类型的字节长度

    • GetBytes

      把值类型转换为字节数组

    • ObjectArrayToByteArray

      把值数组转换为字节数组

    • GetValue

      把字节数组转换为值类型

    • ByteArrayToObjectArray

    • ByteArrayToDestinationArray

      把字节数组转换为值数组

    • SetValue

      把一个值写入字节数组当中

    • 有关position系统的说明

      几乎所有的函数都拥有一个ref pos的参数,这个参数的作用相当于一个指针,指向需要转换的字节数组的位置。
      比如有一个长度为8的数组,现在需要转换这个数组的第5到第6字节。
      此时pos的值为4。

      0x08 0x17 0xa3 0xc4 0x00 0x05 0xa1 0x03
      pos=4

      转换时调用:

      (data == byte[], pos == 4)
      
      short a = ValueHelper.Instance.GetShort(data, ref pos);

      调用完成后,pos自动变成6,供下一次转换使用。

      0x08 0x17 0xa3 0xc4 0x00 0x05 0xa1 0x03
      pos=6
    • 有关获取ValueHelper

      ValueHelper有一个静态方法GetInstance,传入Endian可以返回相应端格式的ValueHelper,利用这个函数可以把Endian变为参数获取其对应的实例。

  • CRC16.cs

    CRC16中包含CRC16和LRC两种校验。

  • AsyncHelper.cs

    AsyncHelper种包含了一些常用的异步操作。

    • RunSync 让异步方法以同步方式运行。
    • WithCancellation 让异步方法带上取消标识运行。

    Nito.AsyncEx也包含在Modbus.Net中。

  • AddressHelper.cs

    AddressHelper中包含了对子地址系统的快速转换方法。

    • 有关对子地址系统的说明

      Modbus.Net对设备子地址的描述分为绝对坐标相对坐标
      下面以Modbus协议说明这两种坐标之间的关系。

      Modbus协议中的数据读写(3X,4X)是以Word为单位进行操作的,Word由2个Byte组成。

      绝对坐标永远以1个地址对应8个Bit构成,而相对坐标则根据协议不同而不同。
      比如Modbus是一个地址由两个Byte构成,因此它的相对坐标的一个地址由16个bit构成。

      相对坐标 绝对坐标
      30001 6b 3X 1 6b
      30001 15b 3X 2 7b
      40116 13b 4X 232 5b

      而开关量读写(0X,1X)是以bit为单位进行操作。

      因此相对坐标是一个地址由1个bit构成。

      相对坐标 绝对坐标
      00001 0b 0X 1 0b
      00015 0b 0X 2 7b
      10116 0b 1X 14 3b

      简单来说,相对坐标表示协议中的一个地址中含有协议中指定的byte个数。而绝对坐标的一个地址中一定只含一个byte。
      AddressHelper中的方法就是在相对坐标与绝对坐标之间快速转化。

Home

Clone this wiki locally