ARTICLE · 1128483
组态软件如何采集多功能电表数据:Modbus 通讯的配置逻辑与实现路径(实操)
组态软件如何采集多功能电表数据:Modbus 通讯的配置逻辑与实现路径(实操)某厂房配电改造验收前,业主提出一条要求:值班室电脑上要看到车间三路进线的电压、电流、功率和累计用电量。配电柜里三台安科瑞ACR220EL多功能电表已经装好,柜门上有数码管显示,但数据只停留在柜子跟前,值班室看不到。把数据集中到上位机,靠的是电表自带的RS485通讯口和Modbus-RTU协议,上位机软件用的是组态王7.5。本文按现场实际操作顺序,把接线、查地址表、设备定义、建变量、做画面五个环节走一遍,寄存器地址全部取自安科瑞官方说明书,照着做就能把正向有功电能、三相电压、电流和功率读出来。 整套系统三样东西:装组态王的电脑、USB转RS485转换器、自带RS485口的电表。ACR220EL的RS485接线端子印有A、B标识,具体位置以表壳上的接线图为准。 RS485是半双工总线,一条总线挂多台设备,拓扑必须是手拉手:从电脑出来依次进1#表、2#表、3#表,不能走星形分叉。三台表的A与A相连、B与B相连,屏蔽层单端接大地。总线较长时,在最末端一台表的A、B之间并一只120欧电阻,吸收信号反射。 通讯采用主从应答方式:组态王当主站,轮流呼叫各台电表;电表是从站,靠地址区分,ACR系列地址范围1到247。三台表通过面板按键分别设为1、2、3,波特率统一设为9600。电脑没有串口的,用USB转RS485转换器,装好驱动后记下分配到的COM口号,后面组态王里要用。 转换器优先选带光电隔离的型号,柜内强电环境里抗干扰更好。COM口号在设备管理器里查,USB转换器每次插同一个口,Windows一般沿用同一个COM号,避免换口后串口号变了、组态王里连不上设备。 
图1系统连接示意 Modbus-RTU协议里,主站不认识“电压”“电流”这些名字,只认寄存器地址。读什么数据、从哪个地址读,必须查电表说明书。安科瑞ACR系列说明书第6.4节给出了完整通讯地址表,本案例用到的数据整理如表1。
word型数据的读出值是整数,要按小数位换算成实际值,公式为:实际值=读出值×10^(DPT-4)。DPT是电压小数位数,从0023H高字节读出;电流小数位DCT在0023H低字节;功率小数位DPQ在0024H高字节。以电压为例,DPT为3时系数是10的负一次方,读出2201就是220.1V。频率读出值除以100,功率因数读出值除以1000。 数据类型选错,读回的数就完全不对。Float和Long各占两个连续寄存器,组态王里选FLOAT或LONG类型一次读两个word;如果错选成USHORT,读到的只是半个数,画面上就是一个莫名其妙的整数。地址表里每个参数占几个寄存器、是什么类型,建变量前逐行核对一遍。 电能读法有两条路。地址表里电能项的原文叫吸收有功电能,即用电方向的正向有功电能。一条读003FH起的二次侧电能,Long类型,读出值先除以1000,再乘PT变比和CT变比,得到一次侧电量。另一条读0047H起的一次侧电能,Float类型,仪表已按IEEE754格式存好含变比的电能值,说明书示例中该值换算结果为52140Wh,即52.14kWh,上位机读出后除以1000得到kWh。现场优先选第二条路,少一次乘法,也少一个出错环节。 第1步,定义设备。打开组态王工程浏览器,在设备节点下新建,驱动选PLC,再选莫迪康,选Modbus(RTU)项下的串行设备。给设备起逻辑名,例如ACR电表1#。下一步选实际串口,本案例为COM3。设备地址填1,与1#表面板设置一致。 第2步,设串口参数。双击工程浏览器里的COM3,设置波特率9600、数据位8、奇偶校验无、停止位1。这几项必须与电表面板设置完全一致,差一项整条总线都不通。 第3步,通讯测试。在设备节点上右键选“测试”,寄存器填40038,数据类型选USHORT,点读取。屏幕上出数,说明链路、地址、寄存器全对;报错就回头查接线与串口参数。这步花两分钟,后面建变量、做画面时就能少排查一层。 40038这个编号这样来:ACR地址表里的0025H是协议报文里从0起算的地址,换算成十进制是37;组态王Modbus驱动的寄存器通道号从1起算,遇到从0起算的设备地址要加1,通道号就是38;写在4区保持寄存器,就是40038。加1这条规则,现场读错地址的情况多数出在这里。 第4步,建变量。在数据词典里新建I/O变量,连接设备选ACR电表1#,寄存器与数据类型按表2填写。
FLOAT型的电能变量用9区寄存器,编号规则与4区相同:90000+Modbus地址+1,0047H对应90072。9区同样对应保持寄存器,支持LONG和FLOAT类型,一次读两个连续寄存器,正好匹配0047H占用的两个word。同一台表上再定义别的32位变量时,通道号要隔开2个,从90074起往下排,挤在一起两笔数据会重叠。 有功功率有正负。有倒送电可能的回路里,P总读出来可能是负数,符号位在0024H低字节里,变量数据类型选SHORT,负号才能正常显示;错选成USHORT,负功率会变成一个极大的正数,与电表实际工况对不上。 第5步,做画面。新建画面,从工具箱拖出文本和表格,标上Ua、Ia、P、Ep等名称与单位,把显示值连接到对应变量。电压保留一位小数,功率保留一位,电能保留一位。 第6步,运行验证。切到VIEW运行系统,打开画面。1#表读通后,2#表、3#表各建一个设备,地址填2和3,变量照抄一份,改设备名和地址即可。 
图2组态王设备定义、串口参数与通讯测试 画面上显示的220.1V,通讯线上传的是2201,中间隔一次换算。做法按省事程度排,有三种。 第一种,在变量属性里做线性化。组态王变量定义里可以设原始值与最大最小值的映射,把读出值直接转成工程量,小数位固定时这个办法最省事。 第二种,按小数位写死换算系数。说明书里DPT取值范围3到7,DCT范围1到5,DPQ范围4到10,常见配电回路DPT取3、DPQ取4,电压系数0.1、功率系数1。动笔前先读0023H和0024H,把三个小数位拿准,系数就定了。 第三种,在脚本里换算,适合电能累计、班次统计这类需要再加工的数据。 有一个现象要单独说:电能Float变量如果读出来是一串极小的数,比如10的负38次方,或者与电表面板显示差了几个数量级,大概率是浮点数字节顺序不匹配。组态王Modbus驱动提供SwapF寄存器调整字节顺序,取值0到3,对应四种字节排列。在数据词典里建一个I/O整型变量,寄存器写SwapF0,数据类型选Byte,画面上做一个输入框连到这个变量,运行时逐个切换0到3,取与面板显示一致的那个值。 
图3组态王VIEW运行画面(三台电表数据集中显示) 从一根双绞线到画面上的数字,电表数据要走五步:查地址表定坐标,组态王里定义设备和变量,按小数位换算,画面绑定显示,逐级验证。整个过程里真正花时间的不是组态王操作,而是把地址表、换算公式、字节序这三件事核对清楚。多数人配到一半发现读出来的数不对,回头一查,不是地址忘了加1,就是波特率没对上。配下一批电表时,把这次确认过的参数表存进工程文档,新表照表填写,半小时能配完一个回路。
组态王7.5读取多功能电表数据实录:以安科瑞ACR220EL为例
一、系统构成:一根双绞线把三台表串到电脑

二、先摸清地址表:每个数据在哪个寄存器
数据项 | Modbus地址 | 数据类型 | 换算方法 |
相电压UA/UB/UC | 0025H~0027H | word | ×10^(DPT-4) |
线电压UAB/UBC/UCA | 0028H~002AH | word | ×10^(DPT-4) |
电流IA/IB/IC | 002BH~002DH | word | ×10^(DCT-4) |
有功功率PA/PB/PC/ΣP | 002EH~0031H | word | ×10^(DPQ-4) |
频率 | 003EH | word | ÷100 |
电压电流小数位 | 0023H | word | 高字节DPT、低字节 |
功率小数位 | 0024H | word | 高字节DPQ |
正向有功电能(一次侧) | 0047H~0048H | Float | ÷1000得kWh |
正向有功电能(二次侧) | 003FH~0040H | Long | ÷1000×PT×CT |
表1 ACR系列多功能电表本案例用到的Modbus寄存器(摘自说明书6.4节通讯地址表)
三、组态王侧六步配置
变量名 | 组态王寄存器 | 数据类型 | 换算后显示 |
A相电压 | 40038 | USHORT | 220.1 V |
A相电流 | 40044 | USHORT | 80.5 A |
P_total(总有功功率) | 40050 | SHORT | 44.7 kW |
Freq(频率) | 40063 | USHORT | 50.02 Hz |
Ep_forward(正向有功电能) | 90072 | FLOAT | 15234.8 kWh |
表2组态王数据词典变量定义(寄存器=40000+Modbus地址+1;电能用9区FLOAT)

四、数据换算:读出的整数怎么变成220.1V

五、注意事项
寄存器地址加1。组态王Modbus驱动的寄存器通道号从1起算,而ACR地址表里的地址是协议报文中从0起算的地址,所以每个地址都要加1再填,Modbus地址0025H对应组态王40038。每建一个变量都对一次表,不凭感觉填。 串口参数三处一致。电表面板、组态王串口设置、转换器驱动,波特率与校验方式必须一致。现场改过电表波特率后忘改组态王,通讯立刻中断。 总线拓扑与终端电阻。手拉手接线,分支线尽量短;总线超过百米时末端并120欧电阻。A、B接反是最常见的故障,现象是所有变量通讯失败,调换两根线即可排除。 地址不能重复。两台表设成同一个地址,主站呼叫时两台同时应答,总线数据冲突,读回的全是乱码。 采集周期与读取方式。变量采集周期设1到2秒足够,电表响应一帧需要几十毫秒,设太快只会增加总线负担。电压、电流、功率的地址0025H到0031H是连续的,中间没有空洞,建变量时让组态王打包读取这一段,比零散定义效率高。 电能先核对再投用。画面投用前,把上位机读出的电能与电表面板显示核对一遍,确认字节序、变比、单位都对了,再用于考核或结算参考。 调试顺序。先接线,再串口测试,然后建变量,最后做画面。每步确认通过再走下一步,出问题时排查范围小。