ModbusThing V3.0

讨论简化,实现有些复杂

query

  1. 是否会存在value之间使用DATA的同一位置。

    "03 03 05 $voltage_2$ $current_2$ $CS_2$"

query:
  - message: "03 01 00 13 00 25 05 03"
  - message: "03 01 55 13 00 25 05 03"
response: #回复的消息,这个也可以有多个,收到消息以后首先match,match上了,就用对应的match下面的东西来解析
  - match: "03 03 05 $DATA_5$ $CS_2$"  # 这个里面有一个规则就是$$里面的是可以随便写的,有一个特殊的就是$CS_2$,这个是校验和。_后面的是字节数。其他的收到了,匹配上了把这个数据放到一个字典里面,key就是_前面的。例如这$DATA_5$个数据就是一个5个的byte[],放到一个字典里面,key是"DATA".
    values: #每一个value对应一个CR,response里面的都是status只读的,在\thisThing\status\value来读去
      - name: "voltage"
        type: "UINT16" #这个是类型,代表这个是一个UINT16的,按这个来解析,目前就支持两种UINT16和BOOL,后期会支持别的
        position: "DATA 0 1" #这个是这个数据在哪里,就是在哪个数据字典里面,key=DATA,从0,1这两个元组读出来,拼起来,注意 "DATA 0 1"和"DATA 1 0"不一样,第一个高位在先收到的数据上,后一个反过来
      - name: "current"
        type: "UINT16"
        position: "DATA 2 3"
      - name: "speed"
        type: "UINT16"
        position: "DATA 4 5"
    - match: "03 01 05 $DATA_5$ $CS_2$"
        values:
          - name: "is_running"
            type: "BOOL"
            position: "DATA 0.1" #如果是BOOL,那么会多一个“.” 这个“.”后面的代表第几位
          - name: "is_heating"
            type: "BOOL"
            position: "DATA 0.0"
  "query": {
    "messages": [
      "08 04 00 00 00 01 31 53",
      "08 04 00 01 00 01 60 93"
    ],
    "response": [
      {
        "match": "08 04 02 $voltagedata_2$ $cs_2$",
        "values": [
          {
            "name": "voltage",
            "type": "UINT16",
            "position": "voltagedata 0 1"
          }
        ]
      },
      {
        "match": "08 04 02 $currentdata_2$ $cs_2$",
        "values": [
          {
            "name": "current",
            "type": "UINT16",
            "position": "currentdata 0 1"
          }
        ]
      }
    ]
  }

write

  1. 是否会存在value之间使用DATA的同一位置,写入多个value对应的同一位置怎么处理
    - message: "03 10 00 13 00 0B 02 $DATA_2$" $CS_2$ #这个是写入的模板,注意只有下面的value相对以上各周期变化了,才写入,values有很多,任意一个改变都要全部写入
      values:
          - name: "voltage" # 这里说一个重要的,就是下面说的,write和response重复了,不要紧,分别在两个字典里面,每次response的match来了,把字同时写入两个字典,不管你读config还是status下面一样的名字读出来之都是一样的。然后config修改的时候,只改write的值,写入了以后,这个之入骨哦写入成功了后面query回来,config和status都更新了。入股哦失败了,config和status下一个收起还是回滚实际值。
            type: "BOOL"
            position: "DATA 0.1"
          - name: "current" # 这里说一个重要的,就是下面说的,write和response重复了,不要紧,分别在两个字典里面,每次response的match来了,把字同时写入两个字典,不管你读config还是status下面一样的名字读出来之都是一样的。然后config修改的时候,只改write的值,写入了以后,这个之入骨哦写入成功了后面query回来,config和status都更新了。入股哦失败了,config和status下一个收起还是回滚实际值。
            type: "BOOL"
            position: "DATA 0.2"

指令

关于指令处理

2.旋转场电源
设备地址:53
获取电压:53 03 00 02 00 01 28 78 获取值是实际值的0.1倍      固定  
设定电压: 53 06 00 02 00 32 A4 6D  设定值是实际值的0.1倍  
电源工作指令:53 06 00 00 00 03 C4 79                        固定
电源待机指令:53 06 00 00 00 00 84 78                        固定

本文章使用limfx的vscode插件快速发布