物联网DTU设备时分复用的Modbus报文传输模式
2020-09-24杨庆江郑哲钰
康 辉, 杨庆江, 许 超, 郑哲钰
(1.黑龙江科技大学 电子与信息工程学院, 哈尔滨 150022;2.国网黑龙江省电力有限公司黑河供电公司, 黑龙江 黑河 164300)
0 引 言
目前,物联网技术已经成熟地应用于智能家居、智慧农业等领域,随着智能制造热度的提升工业物联网的应用范围也朝着纵深方向发展[1]。工业物联网更多的是将大量具有串口通信功能的设备通过配置为STA工作模式的DTU设备及网络服务器组建而成,网络服务器将设备采集的数据直接透传至云端,在云服务平台完成数据的解析[2]。作为物联网感知层的“神经元”——无线传感器网络,已有诸多学者[3-6]对其在多目标优化、虚拟化及互连上开展了研究,研究成果解决了感知层的数据链路问题。吴俊辉[7]对物联网网关的设计提出了改进措施,优化了网络层的查询与应答机制、增加了发布与订阅权限的设定。而对于数据传输,工业界广泛采用的是Modbus协议。若在物联网中依此协议传输数据,则由于Modbus报文长度限制,实际上主机对从机一次查询的寄存器数不能超过125个,这对诸如电能质量等工业应用所需上传的参数来讲远远达不到要求。通常是利用一个由MCU及存储芯片构成的转储系统将各种参数信息暂存起来再通过UART协议上传[8],但这势必会增加硬件系统的复杂程度。鉴于对整个系统简洁化的考虑,笔者改进查询算法,将一个查询周期分成若干时隙处理,在每个时隙内完成对不同参数的查询,统一更新各时隙,在满足参数刷新要求的情况下,降低硬件成本、提高性价比。
1 物联网设备的报文传输模式
1.1 物联网结构模型
通用的物联网连接拓扑如图1所示。
图1 物联网连接拓扑Fig. 1 Connection topology of IOT
由图1可见,其中串行数据传输的接口标准通常采用RS232/RS485,传输协议采用业界标准的Modbus协议。数据采集与预处理模块采集完设备数据后,通过计算产生需要的参数信息,DTU设备将该信息根据Modbus协议透传至云端。文中主要研究DTU设备与数据采集预处理模块之间的Modbus报文传输模式。
1.2 时分复用
网络传输的数字信号均直接或间接来源于传感器,而传感器将感知到的模拟量转换成数字量时需满足Nyquist采样定理
fs≥2fh,
(1)
式中:fs——采样频率;
fh——模拟信号的最高截止频率。
由采样信号恢复模拟信号的内插公式为
(2)
式中:xa(t)——模拟信号;
T——采样周期,与采样频率fs互为倒数;
Sa——抽样函数。
模数转换时只要满足采样定理,数字信号就可以无失真的代表原模拟信号,但此时的数字信号为基带信号。通信中为了最大限度地利用信道,降低传输成本,常在传输前对基带信号进行多路调制。时分多路复用简称时分复用(Time-division multiplexing, TDM)是一种常用的调制方式,它是将不同的时域信号相互交织在不同的时隙内,沿着同一个物理信道传输,在接收端再用某种方法将各个时隙内的信号提取出来还原成原始信号的通信技术。工作原理如图2所示。
图2 时分复用原理Fig. 2 Schematic of TDM
由图2可见,在发送和接收端分别有一个机械旋转开关,以采样频率同步地旋转。在发送端,此开关依次对输入信号采样,开关旋转一周得到的多路信号采样值合为1帧。开关周期旋转,依次轮询各路信号,各路信号轮流断续地发送[9],各路信号传输时共用同一物理信道。时分复用技术便于实现数字通信、易于制造、大大提高了信道利用率,在保证通信质量的同时,也节约了硬件成本。
2 时分复用技术的Modbus报文传输
2.1 Modbus-RTU协议
当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信时的消息帧,文中以读多个寄存器的值为例,主机查询报文格式:设备地址,功能代码,起始寄存器的高位和低位,寄存器数量的高位和低位分别为1个byte,校验位CRC16为2个byte。从机响应报文格式:设备地址、功能代码、返回数据字节数分别为1个byte、返回数据N个byte,校验位CRC16为2个byte。从机响应报文格式中“返回数据字节数”为主机查询报文格式查询“寄存器数量”的两倍,由从机响应报文格式“返回数据字节数”仅为一个字节可知,理论上一次查询最多只能获取255个寄存器的数据。但是,在一些特定的工业应用中往往通过边缘计算产生大量属性参数,或者实际应用中参数存储的寄存器地址范围并不连续,为了保证实时监测可以采取下面的方法将所有参数一并上传。
2.2 Modbus从机查询
在满足Nyquist采样定理,并且处理器对数据吞吐能及时处理的前提下,可将一个查询周期分成若干时隙,然后每个时隙处理一路时序信号。时隙拆分示意如图3所示。
图3 时隙拆分示意Fig. 3 Time slot splitting diagram
图3中将一个查询周期拆分成3个时隙处理。文中针对电能质量参数进行实时监测,秒级刷率新即可满足要求。所以,串行通信时的波特率设为9 600已是相当富余。
若一个心跳(查询周期)需N条指令才能读回所有参数,则总体查询指令满足的关系为
(3)
(4)
式中:I(t)——一个心跳的总体查询指令,它包含N条时隙指令;
Ci——不同时隙的查询指令,取不同值时需访问的寄存器不同,查询指令也不同;
RTs(t)——矩形函数;
Ts——时隙间隔。
由于从机响应的报文中“设备地址”和“功能代码”对所有的时隙指令均相同,因此,发送每条时隙查询指令时必须将“寄存器数量”设置为互不相同,以便于对返回的数据做正确解析。
结合项目实际将散布在480个寄存器范围内的141个电能质量参数采用一次心跳、三条时隙指令来处理,其脚本程序流程如图4所示。
图4 程序流程Fig. 4 Program flow
图4初始化部分完成时隙指令的定义,并初始化条件标志位flag为3,设置心跳部分完成查询周期的设定,该值可根据工程指标要求具体指定。多分支部分,通过判断条件标志位flag的值来选择执行具体的语句。其中条件1为flag是否小于4,如果条件1满足,则进一步判断条件2是否满足,条件2是flag是否大于2;如果条件2满足则执行时隙指令1,同时将flag指定为2;否则执行时隙指令2,同时将flag指定5。如果条件1不满足则执行时隙指令3,同时将flag指定为3。依此循环完成不同时隙指令的轮询处理。程序中三条时隙指令的查询寄存器个数互不相同,这样在接收的数据报文中以第三个字节为标志就可以对报文数据进行正确解析,结合实际项目的指令说明如表1所示。
表1 指令说明Table 1 Instructions
将编辑好的脚本配置在DTU设备中,在物联网平台建立的产品下添加该设备,通过物联网平台查询设备上报数据的日志即可获知指令执行情况。
3 仿真结果
以三相交流电机传动系统为研究对象,对其进线端的电能质量进行监测。数据采集器通过485转WiFi设备(DTU)直连上网,云端依托阿里云物联网平台构建的产品如图5所示。
图5 电能质量监测物联网产品Fig. 5 IOT product of power quality monitoring
采用文中所述方法将DTU脚本中的查询周期配置1 s,通过读取阿里云物联网平台产品下所添加设备的物模型属性,即可获得解析后的上报数据,云端查询到的数据上报结果整理如图6所示。
图6 数据上报结果Fig. 6 Result of data reported
从图6可以看出,时隙指令执行的时间呈线关系,获取时隙指令执行结果的时间间隔为320 ms, 能够满足所有参数的秒级刷新要求。
4 结束语
在大量的工业物联网应用中,感知层的数据采集预处理模块与DTU设备之间的数据传输遵从Modbus协议,由于Modbus协议报文长度限制,一旦需上传的参数总量超过该限制则会发生丢包,造成数据漏报。对Modbus从机查询模式加以改进,引入时分复用算法,在一个查询周期中分多个时隙查询不同的寄存器地址及数量,最后分条解析。该算法可依托现有的硬件设备实现更多物理参数的实时更新。在三相电电能质量监测系统物联网应用中,基于时分复用技术的Modbus报文传输在不增加硬件的情况下,能够实现141个电能质量参数的实时查询。该方法提高了信道利用率,节约了成本,另外,对于有大量参数需要上传、或者参数分布在不连续的多个寄存器的应用场景,该方法同样具有一定的借鉴意义。