Skip to content

1. 传感器简介

模型清单

可使用下列名称或 ID 在 ThinkLink 中搜索对应模型。

模型类型名称id_name平台模型 ID
RPC[ADW2xx GET] paraadw2xx_get_23109102274327663087623
RPC[ADW2xx SET] paraadw2xx_set_23109102273573074243589
TemplateADW2xx-23109102273965933727749
Thing Model[ADW2xx-23109]adw2xx_23109102271576388407301
Thing Model[ACREL-23109-ADW2xx资产] 区域聚合adw2xx_asset_23109119677189950959616
Parameter Thing Model[ADW2xx-PARA]adw2xx_para_23109102272760276848645

ADW2xx 是安科瑞(Acrel)多通道导轨式多回路电力仪表,主要用于多个三相回路的全电参量测量。设备最多可同时接入 4 个三相回路的电流输入,可测量电压、电流、功率、功率因数、频率、电能等参数。

本方案中,ADW2xx 作为多用户电表使用,一个采集器采集一台 ADW2xx 设备。由于 ADW2xx 内部包含多个通道/回路,因此每个通道按照一包数据独立上传,并通过上行数据第 2 字节的值判断当前数据所属通道号。

2. 产品特点

ADW2xx 多回路电力仪表具备以下特点:

  • 支持 1~4 路三相回路全电参量测量。
  • 支持三相电压、三相电流、零序电流、频率采集。
  • 支持有功功率、无功功率、视在功率及总功率测量。
  • 支持三相功率因数、总功率因数测量。
  • 支持正向有功电能、反向有功电能、正向无功电能、反向无功电能计量。
  • 支持 RS-485 通讯,通信协议为 Modbus-RTU。
  • 支持多通道数据独立读取与上传,适用于多用户电表场景。
  • 支持通过 KC21/KC11 接入 LoRaWAN 网络,并在 ThinkLink 平台完成数据解析、子设备区分和第三方平台转发。

3. 适用范围

本对接方案适用于以下场景:

  • 多用户用电计量。
  • 楼宇、园区、公寓、商业综合体等多回路电能监测。
  • 单台 ADW2xx 多通道电表通过一个 LoRaWAN 采集器接入 ThinkLink。
  • 需要按通道区分不同用户或不同用电回路的电力监测场景。
  • 需要通过 MQTT 向第三方平台订阅电表遥测数据的场景。

4. 采集器信息

4.1 硬件信息

项目内容
采集器型号KC21 / KC11
采集接口RS-485
通讯协议Modbus-RTU
采集对象ADW2xx 多通道电表
采集方式一个采集器采集一台 ADW2xx
上报方式LoRaWAN
供电方式220V / 12V / 电池供电,按实际采集器型号和现场供电条件选择

4.2 接线信息

电源与通讯接口

ADW2xx 电表通过 RS-485 与 KC21/KC11 采集器连接。采集器负责通过 Modbus-RTU 读取 ADW2xx 的各通道寄存器数据,并通过 LoRaWAN 上报到 ThinkLink。

ADW2xxKC21/KC11
RS-485 ARS-485 A
RS-485 BRS-485 B
电源端子按 ADW2xx 现场供电要求接入
采集器电源按 KC21/KC11 型号接入 220V / 12V / 电池供电

ADW2xx 主体支持 RS-485 接口,Modbus-RTU 协议,通信波特率支持 1200~38400,本文档 EB 配置中默认使用 9600bps、8N1。

传感器接口

ADW2xx 为多回路电力仪表,每个电流回路通过外置电流互感器接入。CH1~CH4 分别对应 4 个三相电流回路。电压、电流互感器接线应按照 ADW2xx 说明书中的接线图执行。

本方案中不涉及额外传感器接口,采集器仅通过 RS-485 读取 ADW2xx 的 Modbus 寄存器。

5. 数据采集

本方案中,通过 Modbus-RTU 功能码 0x03 读取 ADW2xx 以下寄存器。

ADW2xx 每个通道独立读取并独立上报。上报数据通过第 2 字节的值区分当前通道号:

上报 dataType对应通道
9CH1
10CH2
11CH3
12CH4

在物模型脚本中,字段 ch 来自上行帧第 2 字节,即 index:1。当 ch > 8 时,脚本执行 ch = ch - 9,因此最终输出通道号为:

原始 ch 值解析后 ch 值对应通道
90CH1
101CH2
112CH3
123CH4

5.1 寄存器定义

5.1.1 通道读取范围

通道起始地址结束地址说明
CH10x01000x013DCH1 电参量
CH20x01560x0193CH2 电参量
CH30x01AC0x01E9CH3 电参量
CH40x02020x023FCH4 电参量

每个通道读取内容一致,寄存器地址按通道整体偏移。

5.1.2 CH1 寄存器定义

寄存器地址字段名称字段标识单位数据类型
0x0100-0x0101A相电压uaVfloat
0x0102-0x0103B相电压ubVfloat
0x0104-0x0105C相电压ucVfloat
0x0106-0x0107AB线电压uabVfloat
0x0108-0x0109BC线电压ubcVfloat
0x010A-0x010BCA线电压ucaVfloat
0x010C-0x010D频率freqHzfloat
0x010E-0x010FA相电流iaAfloat
0x0110-0x0111B相电流ibAfloat
0x0112-0x0113C相电流icAfloat
0x0114-0x0115零序电流i0Afloat
0x0116-0x0117A相有功功率paWfloat
0x0118-0x0119B相有功功率pbWfloat
0x011A-0x011BC相有功功率pcWfloat
0x011C-0x011D总有功功率ptWfloat
0x011E-0x011FA相无功功率qavarfloat
0x0120-0x0121B相无功功率qbvarfloat
0x0122-0x0123C相无功功率qcvarfloat
0x0124-0x0125总无功功率qtvarfloat
0x0126-0x0127A相视在功率saVAfloat
0x0128-0x0129B相视在功率sbVAfloat
0x012A-0x012BC相视在功率scVAfloat
0x012C-0x012D总视在功率stVAfloat
0x012E-0x012FA相功率因数pfafloat
0x0130-0x0131B相功率因数pfbfloat
0x0132-0x0133C相功率因数pfcfloat
0x0134-0x0135总功率因数pftfloat
0x0136-0x0137A相正向有功电能epfakWhfloat
0x0138-0x0139B相正向有功电能epfbkWhfloat
0x013A-0x013BC相正向有功电能epfckWhfloat
0x013C-0x013D总正向有功电能epftkWhfloat

5.1.3 CH2~CH4 寄存器说明

CH2、CH3、CH4 字段含义与 CH1 一致,寄存器地址如下:

字段CH2 地址CH3 地址CH4 地址
A相电压0x0156-0x01570x01AC-0x01AD0x0202-0x0203
B相电压0x0158-0x01590x01AE-0x01AF0x0204-0x0205
C相电压0x015A-0x015B0x01B0-0x01B10x0206-0x0207
AB线电压0x015C-0x015D0x01B2-0x01B30x0208-0x0209
BC线电压0x015E-0x015F0x01B4-0x01B50x020A-0x020B
CA线电压0x0160-0x01610x01B6-0x01B70x020C-0x020D
频率0x0162-0x01630x01B8-0x01B90x020E-0x020F
A相电流0x0164-0x01650x01BA-0x01BB0x0210-0x0211
B相电流0x0166-0x01670x01BC-0x01BD0x0212-0x0213
C相电流0x0168-0x01690x01BE-0x01BF0x0214-0x0215
零序电流0x016A-0x016B0x01C0-0x01C10x0216-0x0217
A相有功功率0x016C-0x016D0x01C2-0x01C30x0218-0x0219
B相有功功率0x016E-0x016F0x01C4-0x01C50x021A-0x021B
C相有功功率0x0170-0x01710x01C6-0x01C70x021C-0x021D
总有功功率0x0172-0x01730x01C8-0x01C90x021E-0x021F
A相无功功率0x0174-0x01750x01CA-0x01CB0x0220-0x0221
B相无功功率0x0176-0x01770x01CC-0x01CD0x0222-0x0223
C相无功功率0x0178-0x01790x01CE-0x01CF0x0224-0x0225
总无功功率0x017A-0x017B0x01D0-0x01D10x0226-0x0227
A相视在功率0x017C-0x017D0x01D2-0x01D30x0228-0x0229
B相视在功率0x017E-0x017F0x01D4-0x01D50x022A-0x022B
C相视在功率0x0180-0x01810x01D6-0x01D70x022C-0x022D
总视在功率0x0182-0x01830x01D8-0x01D90x022E-0x022F
A相功率因数0x0184-0x01850x01DA-0x01DB0x0230-0x0231
B相功率因数0x0186-0x01870x01DC-0x01DD0x0232-0x0233
C相功率因数0x0188-0x01890x01DE-0x01DF0x0234-0x0235
总功率因数0x018A-0x018B0x01E0-0x01E10x0236-0x0237
A相正向有功电能0x018C-0x018D0x01E2-0x01E30x0238-0x0239
B相正向有功电能0x018E-0x018F0x01E4-0x01E50x023A-0x023B
C相正向有功电能0x0190-0x01910x01E6-0x01E70x023C-0x023D
总正向有功电能0x0192-0x01930x01E8-0x01E90x023E-0x023F

5.2 状态位定义

当前物模型脚本中使用 status 字段进行状态判断:

javascript
if((tdata?.status&0x02)===0x02) {
    // time out , just update the status.
}

状态位定义如下:

状态位含义处理逻辑
status & 0x02Modbus 采集超时保留上一包遥测数据,仅更新 status 状态

当采集超时时,平台不覆盖原有有效电参量数据,只更新设备状态,避免因超时导致业务数据被清空。

6. EdgeBus 模型

ADW2xx 本身不是 LoRaWAN 设备,需要通过 KC21/KC11 采集器接入。因此本方案需要 EB 代码,由 EdgeBus 负责生成 Modbus 采集任务,周期性读取 ADW2xx 各通道寄存器,并通过 LoRaWAN 分包上报。

6.1 EB 配置参数

参数
业务代码23109
业务版本13
设备模板ADW2xx-23109
波特率9600
数据位8
停止位1
校验位无校验
LoRaWAN 上报端口23
上行版本标识0x87
默认采集设备数量2
每台设备通道数4
采集协议Modbus-RTU
功能码0x03

参数索引定义

参数APP Index字段名类型说明
设备 1 查询周期70period1uint32le单位:秒
设备 2 查询周期74period2uint32le单位:秒
设备 1 485 地址150addr1uint8Modbus 地址
设备 2 485 地址151addr2uint8Modbus 地址

当前用户补充说明为“一个采集器采集一个设备”,因此实际部署时通常只使用 period1addr1。代码中预留了 2 台 ADW2xx 的配置能力。

6.2 EB 代码

typescript
import { Buffer } from "buffer";
import { buildOtaFile } from "@EBSDK/run";
import {
    ActionAfertExpr, CalcData,
    CrcMode,
    CvtRule,
    EBBuffer,
    EBModel,
    ExprCondition,
    LoraUpEvent,
    QueryEvent, SetUpCovDataType,
    UserConfUPItem,EventInfoItem
} from "@EBSDK/EBCompiler/all_variable";
import { CheckbitEnum, getOtaConfig, HwTypeEnum, UpgrdTypeEnum } from "@EBSDK/otaConfig";
////////////////////////////////////////////////////////////////////////////////////////
let eventInfo:UserConfUPItem[]=[]
let otaConfig = getOtaConfig({
    BaudRate: 9600,
    StopBits: 1,
    DataBits: 8,
    Checkbit: CheckbitEnum.NONE,
    Battery: false,
    ConfirmDuty: 60,
    BzType: 23109,
    BzVersion: 13
})
for(let i=0;i<2;i++){
    let name="ADW2XX_3M_4CH_"+(i+1).toString();
    let periodIndex=70+i*4
    let addrIndex=150+i
    for (let j=0;j<4;j++){
        let start="0x100"
        let end="0x13D"
        if (j===1) { start="0x156";end="0x193"
        }else if(j===2){start="0x1AC";end="0x1E9"
        }else if(j===3){start="0x202";end="0x23F"}
        let userConf:UserConfUPItem={
            name:name,dataType:(9+j).toString(), port:23, version:"0x87",upPeriod:"10y",
            quInfo:[
                { protocol:"modbus",code:"0x03", periodIndex:periodIndex,
                    indexAPP:addrIndex, indexCMD:0, copySize:1,isLast:true,
                    listVal:[{ start:start, end:end}]
                }
                ]
        }
        eventInfo.push(userConf);
    }
}
const MODBUS_TT = (ebModel: EBModel) => {
    for (let i=0; i<eventInfo.length; i++){
        let event=new EventInfoItem(eventInfo[i]);
        event.upEventSetup()
        event.eventInstall()
    }
    return JSON.stringify(ebModel, null, 2)
}
buildOtaFile(import.meta.url, otaConfig, MODBUS_TT)

6.3 说明

当前 EB 逻辑说明:

  1. EB 代码默认配置 2 台 ADW2xx,每台 ADW2xx 包含 4 个通道。
  2. 用户当前场景为“一个采集器采集一个设备”,因此实际使用时主要启用第 1 台 ADW2xx,即 addr1period1
  3. 每个通道独立生成一条 Modbus 采集任务。
  4. 每个通道独立上传一包数据,LoRaWAN 端口统一为 23
  5. 上行帧版本标识为 0x87
  6. 通道号通过 dataType 区分:
    • 9:CH1
    • 10:CH2
    • 11:CH3
    • 12:CH4
  7. 物模型解析时读取第 2 字节作为 ch 字段,并将 9~12 转换为 0~3,用于平台侧区分通道。
  8. 由于 ADW2xx 是多用户表,ThinkLink 可通过 sub_device 机制将每个通道解析为不同子设备,实现多用户表按通道分设备管理。

7. 物模型

7.1 物模型基本信息

项目内容
物模型名称ADW2xx-23109
设备型号ADW2xx
业务代码23109
LoRaWAN Port23
帧版本0x87
上行帧长度130 字节
是否携带 RSSI
是否携带电池电压是,battery:4
通道判断方式第 2 字节 ch
子设备区分方式sub_device = tdata.addr + 1000

7.2 上行帧结构

javascript
let frameInfo = {
    port:23,
    dataLen:130,
    rssi:true,
    battery:4,
    tagList:[
        { index:0, tag:0x87 }
    ]
}

上行字段定义

字段名称字段标识单位字节位置类型小数位
CHch1uint8
A相电压uaV6floatbe3
B相电压ubV10floatbe3
C相电压ucV14floatbe3
AB线电压uabV18floatbe3
BC线电压ubcV22floatbe3
CA线电压ucaV26floatbe3
频率freqHz30floatbe3
A相电流iaA34floatbe3
B相电流ibA38floatbe3
C相电流icA42floatbe3
零序电流i0A46floatbe3
A相有功功率paW50floatbe3
B相有功功率pbW54floatbe3
C相有功功率pcW58floatbe3
总有功功率ptW62floatbe3
A相无功功率qavar66floatbe3
B相无功功率qbvar70floatbe3
C相无功功率qcvar74floatbe3
总无功功率qtvar78floatbe3
A相视在功率saVA82floatbe3
B相视在功率sbVA86floatbe3
C相视在功率scVA90floatbe3
总视在功率stVA94floatbe3
A相功率因数pfa98floatbe3
B相功率因数pfb102floatbe3
C相功率因数pfc106floatbe3
总功率因数pft110floatbe3
A相正向有功电能epfakWh114floatbe3
B相正向有功电能epfbkWh118floatbe3
C相正向有功电能epfckWh122floatbe3
总正向有功电能epftkWh126floatbe3

7.3 物模型脚本

7.3.1 数据物模型脚本

javascript
let port=msg?.userdata?.port || null;

let frameInfo = {
    port:23,
    dataLen:130,
    rssi:true,
    battery:4,
    tagList:[
        { index:0, tag:0x87 }
    ]
}

let appInfo = [
    { name:"CH", field_name:"ch", unit:"", index:1, type:"uint8" },

    { name:"A相电压", field_name:"ua", unit:"V", index:6, type:"floatbe", decimal:3 },
    { name:"B相电压", field_name:"ub", unit:"V", index:10, type:"floatbe", decimal:3 },
    { name:"C相电压", field_name:"uc", unit:"V", index:14, type:"floatbe", decimal:3 },

    { name:"AB线电压", field_name:"uab", unit:"V", index:18, type:"floatbe", decimal:3 },
    { name:"BC线电压", field_name:"ubc", unit:"V", index:22, type:"floatbe", decimal:3 },
    { name:"CA线电压", field_name:"uca", unit:"V", index:26, type:"floatbe", decimal:3 },

    { name:"频率", field_name:"freq", unit:"Hz", index:30, type:"floatbe", decimal:3 },

    { name:"A相电流", field_name:"ia", unit:"A", index:34, type:"floatbe", decimal:3 },
    { name:"B相电流", field_name:"ib", unit:"A", index:38, type:"floatbe", decimal:3 },
    { name:"C相电流", field_name:"ic", unit:"A", index:42, type:"floatbe", decimal:3 },
    { name:"零序电流", field_name:"i0", unit:"A", index:46, type:"floatbe", decimal:3 },

    { name:"A相有功功率", field_name:"pa", unit:"W", index:50, type:"floatbe", decimal:3 },
    { name:"B相有功功率", field_name:"pb", unit:"W", index:54, type:"floatbe", decimal:3 },
    { name:"C相有功功率", field_name:"pc", unit:"W", index:58, type:"floatbe", decimal:3 },
    { name:"总有功功率", field_name:"pt", unit:"W", index:62, type:"floatbe", decimal:3 },

    { name:"A相无功功率", field_name:"qa", unit:"var", index:66, type:"floatbe", decimal:3 },
    { name:"B相无功功率", field_name:"qb", unit:"var", index:70, type:"floatbe", decimal:3 },
    { name:"C相无功功率", field_name:"qc", unit:"var", index:74, type:"floatbe", decimal:3 },
    { name:"总无功功率", field_name:"qt", unit:"var", index:78, type:"floatbe", decimal:3 },

    { name:"A相视在功率", field_name:"sa", unit:"VA", index:82, type:"floatbe", decimal:3 },
    { name:"B相视在功率", field_name:"sb", unit:"VA", index:86, type:"floatbe", decimal:3 },
    { name:"C相视在功率", field_name:"sc", unit:"VA", index:90, type:"floatbe", decimal:3 },
    { name:"总视在功率", field_name:"st", unit:"VA", index:94, type:"floatbe", decimal:3 },

    { name:"A相功率因数", field_name:"pfa", unit:"", index:98, type:"floatbe", decimal:3 },
    { name:"B相功率因数", field_name:"pfb", unit:"", index:102, type:"floatbe", decimal:3 },
    { name:"C相功率因数", field_name:"pfc", unit:"", index:106, type:"floatbe", decimal:3 },
    { name:"总功率因数", field_name:"pft", unit:"", index:110, type:"floatbe", decimal:3 },

    { name:"A相正向有功电能", field_name:"epfa", unit:"kWh", index:114, type:"floatbe", decimal:3 },
    { name:"B相正向有功电能", field_name:"epfb", unit:"kWh", index:118, type:"floatbe", decimal:3 },
    { name:"C相正向有功电能", field_name:"epfc", unit:"kWh", index:122, type:"floatbe", decimal:3 },
    { name:"总正向有功电能", field_name:"epft", unit:"kWh", index:126, type:"floatbe", decimal:3 },
]

let tdata={}

let payParser=new PayloadParser({
    device:device,
    msg:msg,
    frameInfo:frameInfo,
    appInfo:appInfo,
})

tdata= payParser.telemetry()

if((tdata?.status&0x02)===0x02) {
    // time out , just update the status.
    const status=tdata.status
    tdata={ ...(device.telemetry_data?.[thingModelId] ?? {})}
    tdata.status=status
}

if(tdata?.ch>8) {
    tdata.ch=tdata.ch-9
}

return {
    sub_device:tdata==undefined ? null : (tdata.addr+1000),
    telemetry_data: tdata,
    server_attrs: null,
    shared_attrs: null
}

7.3.2 参数物模型脚本

javascript
let port=msg?.userdata?.port || null;

const rpcName="adw2xx_23109_set";

let paraDef = {
    app_70:{name: "period1", field_name: "period1", unit:"S", type: "uint32le"},
    app_74:{name: "period2", field_name: "period2", unit:"S", type: "uint32le"},
    app_150:{name: "addr1", field_name: "addr1", unit:"", type: "uint8"},
    app_151:{name: "addr2", field_name: "addr2", unit:"", type: "uint8"}
}

if (port!==214) {
    let checkData=Utils.paraCheck(rpcName,device.server_attrs,device.shared_attrs)
    return {
        server_attrs: checkData.sdata,
        action:checkData.action,
    }
}

let pdata=(new PayloadParser({
    device:device,
    msg:msg,
    paraInfo:paraDef,
})).paras()

let checkData= Utils.paraCheck(rpcName,pdata)

return {
    telemetry_data: pdata,
    server_attrs: checkData.sdata,
    shared_attrs: pdata,
    action: checkData.action,
}

8. 第三方平台数据订阅

8.1 MQTT Topic

latex
/v32/{Organization Account}/tkl/up/telemetry/{eui}

示例:

latex
/v32/{Organization Account}/tkl/up/telemetry/{eui}

其中:

参数说明
{Organization Account}ThinkLink 组织账号
{eui}LoRaWAN 设备 EUI

8.2 上报示例数据

以下示例为 ADW2xx 多用户表 CH1 通道上报数据。实际业务中,每个通道会独立上报一包数据,并通过 ch 字段区分通道。

json
{
    "eui": "6353012af10a9331",
    "active_time": "2026-02-05T08:35:48.000Z",
    "thingModelId": "23109",
    "thingModelIdName": "ADW2xx-23109",
    "telemetry_data": {
        "snr": 13.5,
        "rssi": -51,
        "battery": 3.37,
        "addr": 1,
        "ch": 0,
        "ua": 220.125,
        "ub": 219.876,
        "uc": 220.342,
        "uab": 380.456,
        "ubc": 381.012,
        "uca": 379.998,
        "freq": 50.002,
        "ia": 12.345,
        "ib": 11.876,
        "ic": 12.021,
        "i0": 0.012,
        "pa": 2300.125,
        "pb": 2201.456,
        "pc": 2250.789,
        "pt": 6752.370,
        "qa": 120.123,
        "qb": 118.456,
        "qc": 121.789,
        "qt": 360.368,
        "sa": 2310.125,
        "sb": 2210.456,
        "sc": 2260.789,
        "st": 6781.370,
        "pfa": 0.995,
        "pfb": 0.996,
        "pfc": 0.995,
        "pft": 0.995,
        "epfa": 1234.567,
        "epfb": 1220.345,
        "epfc": 1218.901,
        "epft": 3673.813,
        "status": 0
    }
}

通道说明

telemetry_data.ch对应通道
0CH1
1CH2
2CH3
3CH4

子设备说明

当前物模型脚本中:

javascript
sub_device:tdata==undefined ? null : (tdata.addr+1000)

平台会根据子设备地址区分下级设备。对于多用户表场景,建议结合 addrch 进行业务侧用户/回路绑定。例如:

ADW2xx 地址通道业务含义
10用户/回路 1
11用户/回路 2
12用户/回路 3
13用户/回路 4

9. RPC

9.1 RPC 名称

RPC 类型RPC 名称
配置参数adw2xx_23109_set
读取参数adw2xx_23109_set

9.2 参数定义

参数名字段名APP Index单位类型说明
period1period170Suint32le设备 1 查询/上传周期
period2period274Suint32le设备 2 查询/上传周期,预留
addr1addr1150uint8设备 1 Modbus 地址
addr2addr2151uint8设备 2 Modbus 地址,预留

当前场景为一个采集器采集一个 ADW2xx,因此主要配置:

json
{
    "period1": 300,
    "addr1": 1
}

9.3 RPC 代码

9.3.1 配置参数 RPC

javascript
let classMode = (device && device.shared_attrs && device.shared_attrs.class_mode) || "ClassA";

const rpcName="adw2xx_23109_set";

let paraDef = {
    app_70:{name: "period1", field_name: "period1", unit:"S", type: "uint32le"},
    app_74:{name: "period2", field_name: "period2", unit:"S", type: "uint32le"},
    app_150:{name: "addr1", field_name: "addr1", unit:"", type: "uint8"},
    app_151:{name: "addr2", field_name: "addr2", unit:"", type: "uint8"}
}

let frames=RPCHelper.buildFrame({
    paraDef:paraDef,
    params:params
});

let redoBuffer=RPCHelper.redo()

let dnBuffer=Buffer.alloc(frames.writeBuffer.length+frames.readBuffer.length);

frames.writeBuffer.copy(dnBuffer,0)
frames.readBuffer.copy(dnBuffer,frames.writeBuffer.length)

logger.info("set para")

let msgQue=Utils.makeParaSetMSG({
    device:device,
    classMode:classMode,
    rpcName:rpcName,
    params:params,
    paraDownBuffer:dnBuffer,
    extraAppBuffer:redoBuffer
})

if (msgQue.length==0) return null

return msgQue

9.3.2 读取参数 RPC

javascript
let paraDef = {
    app_70:{name: "period1", field_name: "period1", unit:"S", type: "uint32le"},
    app_74:{name: "period2", field_name: "period2", unit:"S", type: "uint32le"},
    app_150:{name: "addr1", field_name: "addr1", unit:"", type: "uint8"},
    app_151:{name: "addr2", field_name: "addr2", unit:"", type: "uint8"}
}

let frames=RPCHelper.buildFrame({
    paraDef:paraDef,
    params:params
});

let msg=RPCHelper.makeMSG({
    msgType:Utils.msgType.paras,
    device:device,
    dnBuffer:frames.readBuffer,
    sleepTime:0,
})

return [msg]

9.3.3 RPC 调用示例

配置 ADW2xx 地址为 1,采集周期为 300 秒:

json
{
    "method": "adw2xx_23109_set",
    "params": {
        "period1": 300,
        "addr1": 1
    }
}

如使用第二台设备预留参数:

json
{
    "method": "adw2xx_23109_set",
    "params": {
        "period1": 300,
        "addr1": 1,
        "period2": 300,
        "addr2": 2
    }
}

10. 模板选择

在 ThinkLink 平台中搜索模板:

latex
ADW2xx-23109

或按业务类型查找:

latex
多回路电力仪表
多用户表
Modbus 电表
ADW2xx
Acrel ADW2xx

11. 对接注意事项

  1. ADW2xx 为多通道电表,每个通道按一包数据上传。
  2. 当前通道号通过上行数据第 2 字节判断。
  3. dataType=9~12 分别对应 CH1~CH4。
  4. 物模型中将 ch>8 的值减 9,转换为平台内部通道号 0~3
  5. 默认 EB 代码支持 2 台 ADW2xx,每台 4 个通道;当前项目按“一个采集器采集一个设备”部署时,仅配置 addr1period1 即可。
  6. ADW2xx 通讯参数需与 EB 配置一致:9600bps、8 数据位、1 停止位、无校验。
  7. RS-485 总线较长或现场干扰较强时,建议检查屏蔽接地、终端电阻及 A/B 极性。