SCL-61D超声水表与ModBus协议转换器的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SCL-61D超声水表与ModBus协议转换器的设计
吕文豹;刘令云
【摘要】选煤厂药剂流量检测过程中,基于ModBus协议的可编程序控制器(以下称PLC)无法准确读取BCD码格式的SCL-61D超声水表流量数据,对此通过对ModBus协议及SCL-61D超声水表通信协议的特点、消息帧格式规律进行了研究和分析,对两种不同协议消息帧进行了格式转换.结果表明,采用具有超高速四串口IAP15W4K58S4单片机能读取SCL-61D超声水表的流量数据,又通过单片机软件,准确地将流量数据信息转换成符合ModBus协议的消息帧.该方法在M340可编程序控制器平台能实时、稳定、安全地读取SCL-61D超声水表相关流量等数据,并通过M340的FBD语言,将原BCD码格式的数据转换成十进制,便于进行传输、显示及控制等操作.
【期刊名称】《煤矿机电》
【年(卷),期】2018(000)001
【总页数】5页(P15-19)
【关键词】ModBus协议;SCL-61D超声水表;BCD码格式;十进制
【作者】吕文豹;刘令云
【作者单位】安徽理工大学材料科学与工程学院,安徽淮南232001;安徽理工大学材料科学与工程学院,安徽淮南232001
【正文语种】中文
【中图分类】TP336
0 引言
选煤厂中浮选、浓缩生产工艺是煤泥水主要处理环节,而捕收剂、起泡剂、絮凝剂等药剂添加量是影响浮选、浓缩生产工矿的主要因素之一,故对添加的药剂量进行检测在浮选、浓缩生产过程中非常重要。
SCL-61D超声水表在流体小流量检测中具有高灵敏度、高精度的特点,已广泛应用于药剂添加量的检测,其流量传感器采用SCL-61D超声水表通信协议。
在选煤各种控制系统中,一般采用的工业控制器均为PLC,其支持RS-485、RS-232通信的ModBus协议,导致PLC不能直接读取汇中SCL-61D超声水表瞬时流量及累计流量等,无法实现流量等相关数据的远程传输、显示以及参与流量闭环控制等。
目前关于协议转换研究也有很多,如ModBus与CAN_bus协议转换器研究,实现两种总线数据交换[1-3];ProfiBusDP和ModBus总线实验平台开发,建立协议间数据转换[4-5];基于单片机的ModBus与GSM协议转换[6],DeviceNet_Modbus总线协议模块开发[7],智能仪表与ModBus的通信[8],EPA与ModBus网关设计[9]等。
如研究均不适用于上述问题的解决,经反复分析研究,开发设计了SCL-61D超声水表通信协议与ModBus协议转换器,使得工业控制器能通过SCL-61D超声水表通信协议与ModBus协议转换器,准确地读取到汇中SCL-61D超声水表流量等相关数据,实现工业控制器与SCL-61D超声水表实时、稳定、安全地数据传输和交换。
1 硬件通信接口
协议转换器不仅需要与汇中SCL-61D超声水表流量传感器通信,需要采用SCL-61D汇中协议读取传感器瞬时流量、累计流量等相关数据,而且还需要与可编程序控制器通信,并采用ModBus协议,等待PLC与协议转换器通信读取转换后的瞬时流量、累计流量等相关数据,这要求协议转换器至少有两个通信口。
根据所设
计转换器的通信特点,采用了宏晶科技的IAP15W4K58S4单片机作为协议转换器的微控制器[10-11],它具有超高速四串口,其中UART1用于程序下载调试,UART2使用SCL-61D超声水表通信协议与SCL-61D超声水表通信,读取流量等相关数据并存储在单片机寄存器中,URAT3使用ModBus协议用于工业控制器读取经转换后存储在单片机寄存器的SCL-61D超声水表流量等相关数据。
SCL-61D超声水表流量传感器通信接口支持半双工工作方式的RS-485总线,可
以进行远距离传输。
若要实现协议转换器与汇中SCL-61D超声水表流量传感器通信,则两者通信硬件接口必须一致,即协议转换器与SCL-61D超声水表通信接口必须采用RS-485总线,同时其通信协议必须一致,均为SCL-61D超声水表汇中通信协议。
协议转换器与可编程序控制器的通信方式设计为RS-232或RS-485总线通信[12],流量传感器一般安装在生产现场,而PLC一般安装在集中控制室或调度室,两者
距离较远,可以选用RS-485总线通信方式,同时许多PLC及工业计算机均会集
成有RS-232通信接口,便于近距离程序下载调试等,故设计了以上两种通信方式。
协议转换器设计的两种通信接口方式,一种是RS-232通信,属于点对点通信方式,传输距离较近,另一种是RS-485总线通信,点对多或广播通信方式,传输距离较远,两者均采用ModBus协议,便于与工业控制器通信。
2 软件的协议转换
2.1 协议转换器与SCL-61D超声水表通信
协议转换器读取SCL-61D超声水表流量数据使用单片机IAP15W4K58S4的UART2,使用定时器2作为UART2传输速率发生器,设置传输速率为2 400
bit/s,数据位8位,停止位1位,无奇偶校验,RTU模式,此参数与SCL-61D
超声水表通信参数一致。
根据SCL-61D超声水表通信协议命令格式[13],协议转换器向SCL-61D超声水表发出数据读取命令请求,其消息帧格式如下:
请求命令(16进制):2AH XXH 4AH。
其中XXH:表示当前仪表的通信号码,默认41H。
SCL-61D超声水表根据协议转换器发出的命令请求做出相应的响应,单片机以1 ms的周期监控协议转换器与SCL-61D超声水表通信的RS-485总线空闲时间。
当单片机接受到数据的计数器大于0,即单片机接受到数据,清空监控总线空闲时间;当计数器值不发生改变时,计时总线空闲时间,当空闲时间超过四个字节传输
所需要的时间,即认为一帧消息接受完成。
仪表响应格式如下:
仪表响应(16进制):26H XXH 4AH LLH LLH LLH LLH LLH LLH LLH LLH LLH LLH LLH LLH LLH ZZH。
其中XXH表示SCL-61D超声水表通信号码,即分站站号,这里为41H。
LLH是
以BCD码表示的SCL-61D超声水表流量等数据,第1个LLH至第4个LLH表示瞬时流量,占4个字节,缩小1 000倍为实际数值,单位:m3/h;第5个LLH至
第8个LLH表示累计流量,占4个字节,缩小10倍为实际数值,单位:m3;第9个LLH至第12个LLH表示SCL-61D超声水表累计运行时间,占4个字节,单位:h;第13个LLH表示诊断信息代码。
ZZH是数据校验字节,其校验规则是对响应
内容中不包括控制及命令字节按字节进行累加,不计超出FFH的数值。
请求响应
过程如图1所示。
图1 协议转换器请求响应过程示意图
2.2 控制器与协议转换器通信
PLC读取协议转换器转换后的瞬时流量、累计流量等相关数据,使用单片机
IAP15W4K58S4的UART3。
为了节省单片机资源,同样使用定时器2作为UART2传输速率发生器,设置传输速率2 400 bit/s,数据位8位,停止位1位,无奇偶校验,RTU模式,当工业控制器通过RS-232/485总线与协议转换器进行
数据交换时,需设置与之相同的通信参数。
根据ModBus协议消息帧格式,PLC向协议转换器发出请求命令,如图2所示,其命令的消息帧格式遵循ModBus协议标准规定的格式,即:
请求命令(16进制):01H 03H 00H 01H 00H 01H D5H CAH。
其中,01H:分站地址,默认1#分站;03H:ModBus功能码,本设计中仅支持03
功能码,其功能是保持型寄存器读取;00H 01H:寄存器起始地址的高位、低位;00H 07H:寄存器偏移量的高位、低位,即读取连续寄存器的数量;D5H CAH:CRC校验码的高位、低位,其计算规则为CRC16-ModBus。
协议转换器响应消
息帧格式为:
响应(16进制):01H 03H 08H YYH YYH YYH YYH YYH YYH YYH YYH ZZH ZZH。
其中01H:分站地址,原理同请求命令相同;03H:ModBus功能码,原理同请
求命令相同;08H:消息帧字节长度,根据对协议的转换研究仅对超声水表流量传
感器的瞬时流量和累计流量进行转换,瞬时流量和累计流量分别占4个字节,共8个字节长度,且其瞬时流量和累计流量的表示方式为BCD码,需在工业控制器进行转换成十进制;YYH:协议转换器响应的数据,即超声水表的瞬时流量与累计流量数据;ZZH:CRC校验码的高低位。
其请求响应过程如图2所示。
图2 工业控制器请求响应过程示意图
2.3 协议转换器工作流程
由图3所示,转换器通电初始化,协议转换器通过RS-232/485总线主动地间隔
1 s向超声水表发送请求命令,超声水表根据请求命令内容响应协议转换器命令请求,请求命令为2AH 41H 4AH,协议转换器接收到上述请求命令后响应该请求后返回超声水表流量等相关数据;协议转换器对流量等相关数据进行校验,其校验规则已在协议转换器与SCL-61D超声水表通信叙述。
若校验错误,则丢弃并等待下
次协议转换器请求命令的响应;若正确,则将流量数据存储相应的寄存器中,等待工业控制器通过ModBus读取。
图3 协议转换器工作流程图
PLC通过RS-232/485总线向协议转换器发送ModBus请求命令,协议转换器接受请求命令数据后对请求命令进行CRC校验。
若错误,则向控制器返回错误信息;若正确,则将存储在单片机寄存器里的流量等相关数据响应给工业控制器,完成流量数据从超声水表到PLC的传输。
3 M340 PLC与协议转换器通信实例
3.1 RS-232通信构建
在实验室内通过M340 PLC作为主站读取经过作为从站的协议转换器转换后的超
声水表瞬时流量和累计流量数据,协议转换器以单片机开发板为载体进行研发。
在M340 PLC与协议转换器通信之前,首先确定硬件的正确连接,在实验中由于
协议转换器与M340 PLC距离较近,利用单片机开发板的RS-232通信模块作为
协议转换器与M340PLC的硬件通信方式,采用两线制的RS-232通信方式,即仅采用RS-232通信中RXD、TXD两线,对应M340PLC串口接口RJ45的1、2引脚,其通信参数需与协议转换器设置一致,在M340PLC编程软件Unity Pro中对通信参数进行配置,如表1状态下进行设置,M340PLC作为总线主站,其类型选择“主设备”,传送速度即为传输速率,设置“2 400 bit/s”与协议转换器一致,数据位8位,RTU模式,停止位1位,物理线路选择RS-232,通信参数设置完成。
采用RS-485总线通信时,协议转换器RS-485总线接口的A、B引脚与
M340PLC串口接口RJ45的A、B引脚对应连接,Unity Pro通信参数配置选择
物理线路为RS-485总线。
表1 Unity Pro中RS-232/485参数配置图物理线路传送速度/(bit·s-1)数据/8
位停止/位校验RS-2322400RTU1无RS-4852400RTU1无
完成通信媒介的搭建是进行数据交换的基础,在上述PLC与协议转换器通信中涉
及到若M340PLC能够正确读取协议转换器数据需要发出ModBus请求命令消息
帧[14, 15],请求命令为01H 03H 00H 01H 00H 01H D5H CAH,在Unity Pro 中可以使用READ_VAR功能块实现,通过简单设置,该功能块即可实现上述请求命令的发出;用ST程序表示为:
READ_VAR (ADR := ADDM('0.0.0.1')(*地址,默认01H*),
OBJ := '%MW'(*%MW对象*),
NUM := 1(*数据起始地址*),
NB := 1(*数据数量*),
GEST :=%MW1:4 (*交换管理表*),
RECP =>RCE (*读取数据的值*));
协议转换器收到该请求命令后进行CRC校验,校验通过后响应该请求命令,
M340PLC接收响应数据并保存到响应的寄存器内。
3.2 BCD码与十进制的转换
M340PLC收到的响应数据即超声水表瞬时流量和累计流量的数据是BCD码形式,而不是常见的十进制数据,需要对BCD码格式的数据进行十进制转换。
M340PLC接收的数据均以整形形式保存,一个整形数据占4个字节空间,瞬时流量和累计流量分别有两个整型数据保存显示。
如图4所示,如超声水表实际累计
流量943.0,在响应数据中为00H 00H 94H 30H,占4字节,是实际累计流量的10倍,在M340 PLC中将其保存在数据类型为INT的变量数组RCB[3]、RCB[4],RCB[3]保存累计流量高位的两字节——00H 00H,RCB[4]保存累计流量低位的两字节——94H 30H,而在M340PLC中RCB[3] 显示为0,RCB[4] 显示为-27 600,如表2所示,故需要进行BCD码与十进制转换。
图4 SCL-61D超声水表实际流量数据显示图表2 Unity Pro中读取及转换后的流量数据表
变量名值类型说明RCE[1]0INT瞬时流量高位,BCD码格式,整形显示
RCE[2]308INT瞬时流量低位,BCD码格式,整形显示RCE[3]0INT累计流量高
位,BCD码格式,整形显示RCE[1]-27600INT累计流量低位,BCD码格式,整形显示NOW_OUT134DINT瞬时流量,是实际流量的1000倍SUM_OUT9430DINT累计流量,是实际流量的10倍
根据BCD码特点,将累计流量数据低位,即RCB[4]的低字节后4位二进制的BCD 码数据与16#0000000F进行与运算,作为十进制数据的个位;低字节前4位二
进制的BCD码数据先右移4位再与16#0000000F进行与运算,作为十进制数据的十位;数据低位(即RCB[4])的高字节后4位二进制的BCD码数据先右移8位再与16#0000000F进行与运算,作为十进制数据的百位;高字节前4位二进制的BCD码数据先右移12位再与16#0000000F进行与运算,作为十进制数据的千位。
同理,累计流量数据高位的低、高字节的后、前4位二进制分别右移16、20、24、28位,右移后16、20、24再与16#0000000F进行与运算,作为十进制数据的万、十万、百万位,右移28位作为十进制数据的千万位;在将个、十、百、千、万、十万、百万、千万位加起来即为双整形十进制实际累计流量10倍的数据;瞬时流量转换同累计流量数据转换一致,最后转换的十进制数据为实际瞬时流量的1 000倍。
4 结论
通过对SCL-61D超声水表通信协议与ModBus协议消息帧格式的研究,在单片
机内实现SCL-61D超声水表通信协议流量数据的提取、保存,并将其转换成符合ModBus协议格式的流量数据。
协议转换器通过RS-485总线读取BCD码格式的SCL-61D超声水表的瞬时流量
和累计流量,PLC读取协议转换器转换后符合ModBus协议格式的流量数据,并将其转换成常见十进制的数据,实现了PLC实时、安全、可靠地读取SCL-61D超声水表瞬时流量及累计流量,进而实现流量的闭环控制及数据的远程传输、显示、保存等操作。
参考文献:
[1] 许慧. Modbus与CAN-bus协议转换器研究[D]. 东北大学, 2010.
[2] 戈瑞. 基于现场总线的协议转换器设计与应用[D]. 华中科技大学, 2012.
[3] LOU G,ZHANG H, ZHAO W. Research on designing method of CANbus and modbus protocol conversion interface, Sanya, China, 2010[C]. IEEE Computer Society, 2010.
[4] 刘大千, 李圆方, 史运涛, 等. 基于ProfiBusDP和ModBus总线的实验平台开发[J]. 工业控制计算机, 2014(12):64-65.
[5] ZHANG H, LI Y, ZHU H. Development for Protocol Conversion Gateway of Profibus and Modbus[J]. Procedia Engineering, 2011(15):767-771.
[6] 吕高, 董谊. 基于单片机的MODBUS协议和GSM协议转换器设计[J]. 电力学报, 2015(1):83-87.
[7] 刘一泽. DeviceNet-Modbus现场总线协议模块开发[D]. 北方工业大学, 2013.
[8] 胡宝棋, 张波, 邢超. 智能电量表与PLC的MODBUS通讯实现[J]. 工业控制计算机, 2006,19(4):73-74.
[9] LI H, ZHANG H,PENG D. Design and Application of Communication Gateway of EPA and MODBUS on Electric Power System[J]. Energy Procedia, 2012(17):286-292.
[10] 杜柯炀. 基于单片机的MODBUS总线协议实现技术研究[J]. 通讯世界, 2015(4):61.
[11] 线岩团, 许江淳, 鄢大鹏. 基于单片机的MODBUS的协议实现[J]. 云南大学学报(自然科学版), 2009(S2):120-124.
[12] XU S, PAN H, REN S, et al. Design of the modbus communication through serial port in QNX operation system, Guangzhou, China, 2008[C]. Inst. of Elec. and Elec. Eng. Computer Society, 2008.
[13] KUANG Y. Communication between PLC and arduino based on modbus protocol, Harbin, Heilongjiang, China, 2014[C]. Institute of Electrical and Electronics Engineers Inc., 2014.
[14] 解传辉, 刘以建. 基于Modbus协议的施耐德M340与西门子S7-200 PLC 的通讯方法[J]. 自动化技术与应用, 2014,33(9):49-53.。