MODBUS 通讯协议在电解铝烟气净化空压站中的应用
随着现代社会的高速发展,工业作为国家的经济支柱,自动化程度也越来越高,在众多的控制系统当中,普遍存在着多种控制系统并存的现象,现场设备常由于其固有的通讯接口及协议的不同使得自动化控制系统陷入尴尬的局面,给系统集成增加了技术难度及成本,这些控制系统包括PLC、数据采集器和各种智能仪表等。若将该混合系统融合成一个整体,使所有监控都在集中控制室上位机上操作,就必须用一种可靠,安全,廉价的通讯方式将各种控制系统有机的连接起来。控制系统之间的通讯历来让人望而生畏,如今值得欣慰的是几乎所有控制系统都具有MODBUS 通讯接口,使得系统间的通讯变得相对简单。
Modbus通讯协议是由MODICON公司为其控制器设计的一种可靠而有效的工业控制系统通信协议。从功能上看,可以认为是一种现场总线,Modbus协议定义了一种信息结构,这种信息结构可以被所有支持该协议的各种设备在通讯时认可和使用。它描述了控制器向其他设备发出查询的过程以及其他设备如何进行应答,以及错误的检测和报告。其数据通讯采用主—从方式,主站只能有1台,每个从站都有指定的地址,地址范围在0~247之间(其中0为广播地址),只有主站具有主动权,从站只能对主站发送的命令作出响应。当主站发出数据请求消息(查询)时,从站接收到正确消息后就可以发送数据到主站以响应请求;主站也可以直接发消息修改从站的数据,实现读和写。本文着重介绍MODBUS通讯RS485接口在中国铝业股份有限公司青海分公司一、二期电解烟气净化扩容改造项目空压站PLC控制系统中的应用。
一、 项目公司背景及简介:
中国铝业股份有限公司(简称中铝)青海分公司,前身为青海铝业有限责任公司(原青海铝厂),位于青海省西宁市宁张公路28公里处,总占地面积195公顷,平均海拔2403米,是与山西铝厂、青海龙羊峡水电站同步配套建设的国家重点建设项目,是中国铝业股份有限公司唯一的专业化电解铝厂,也是我国目前海拔最高、产能最大、产量最高的电解铝企业。公司电解铝生产系统采用冰晶石-氧化铝熔盐电解工艺。
随着现代社会的高速发展,工业作为国家的经济支柱,自动化程度也越来越高,在众多的控制系统当中,普遍存在着多种控制系统并存的现象,现场设备常由于其固有的通讯接口及协议的不同使得自动化控制系统陷入尴尬的局面,给系统集成增加了技术难度及成本,这些控制系统包括PLC、数据采集器和各种智能仪表等。若将该混合系统融合成一个整体,使所有监控都在集中控制室上位机上操作,就必须用一种可靠,安全,廉价的通讯方式将各种控制系统有机的连接起来。控制系统之间的通讯历来让人望而生畏,如今值得欣慰的是几乎所有控制系统都具有MODBUS 通讯接口,使得系统间的通讯变得相对简单。
二、 系统描述
中国铝业股份有限公司青海分公司一、二期电解烟气净化扩容改造项目空压站控制系统主要是应用西门子S7-300PLC,与各种不同厂家设备(如:空气压缩机,微热式干燥器等)进行MODBUS通讯并进行监视和控制,为电解烟气净化提供稳定,干净的气源。一期空压站控制系统如图2采用了四台6.3kV 450kW螺杆式空压机(施耐德Twido控制系统)和三台微热式干燥器(西门子S7-200控制系统);并且为高压空压机配备了4台6.3kV的高压启动柜。二期空压站控制系统采用了六台6.3kV 450kW螺杆式空压机(施耐德Twido控制系统)和四台微热式干燥器(西门子S7-200控制系统);并且为高压空压机配备了6台6.3kV的高压启动柜。两套控制方式相同,均采用MODBUS通讯协议RS485接口。由于控制方式相同以下不再对二期进行详细介绍。
图2 电解空压站控制系统图
空压站控制系统可以分为两大部分:
1、 空压站PLC控制系统:该系统采用西门子S7-300系列CPU315-2DP(6ES7 315-2AG10-0AB0)一块、七块模拟量、数字量输入、输出模块和一块CP341,RS485接口通讯模板(6ES7 341-1CH01-0AE0)与四台施耐德Twido PLC和三台西门子S7-200系列CPU22(6ES7 212-1BB23-0XB0)进行MODBUS通讯。在操作员站集中进行监视和控制。用西门子WinCC 6.0做的一电解空压站主监控界面如图3。
图3 一电解空压站主监控界面
2、 空压站循环水PLC控制系统:该系统采用S7-300系列CPU315-2DP(6ES7 315-2AG10-0AB0)各六块模拟量、数字量输入、输出模块构成PROFIBUS-DP从站与空压站主站CPU进行通讯。空压站循环水共有三台主水泵,一台潜污泵,二台冷却塔风机,在操作员站集中进行监视和控制。用西门子WinCC 6.0做的一电解空压站循环水监控界面如图4。
图4 一电解空压站循环水监控界面
三、 MODBUS 通讯的实施
购买了CP341(6ES7 341-1CH01-0AE0)和MODBUS主站硬件狗Dongle(6ES7 870-1AA01-0YA0包括软件、手册光盘)。安装好STEP7-V5.3、WinCC V6.0,并安装MODBUS主站驱动程序,在CP341模块上插入MODBUS主站协议的硬件狗, 并完成了控制系统MODBUS接线如图5所示。
图5 电解空压站控制系统MODBUS接线图
本控制系统的难点就在于如何进行点到多点的MODBUS通讯,下面就如何进行点到多点的MODBUS通讯做一下详细介绍:
1、通讯参数的设置
先对通讯参数进行设置,在硬件组态窗口中双击CP341模板,打开CP341模板的属性窗口,请记录下模板的硬件地址:
在此地址为256。在编写通讯程序时,你需要该地址参数。点击属性窗口上的Parameters按钮:
选择你所要使用的通讯协议,这里我们选用MODBUS MASTER协议,双击信封图标:
在程序中,LADDR为硬件地址256,我是这样做的:先做DB数据块,一个从站对应一个DB发送数据块和一个DB接收数据块。如:1号从站发送数据块为DB1,接收数据块为DB11;2号从站发送数据块为DB2,接收数据块为DB12;有七个从站做七个对应的数据块。
在OB1中应用定时器做一个600MS时间脉冲,脉冲宽度为70MS,用于触发发送数据块FB8,再调用一个计数器对发送的脉冲进行计数,范围为0到8,如果计数值大于等于8,就归为0,用计数器的数值来对应从站,如数值为1,将对应1号从站的DB发送数据块1和一个DB接收数据块块号11分别传送到字MW300(发送DB块块号)和字MW302(接收DB块块号);以此类推,如数值为2,将对应2号从站的DB发送数据块2和一个DB接收数据块块号12分别传送到字MW300(发送DB块块号)和字MW302(接收DB块块号)。传送完成后,触发发送数据块。程序如下:
network 1
AN T 10
L S5T#1S
SD T 9
network 2
A T 9
L S5T#70MS
SD T 10
network 3
L 0
T MW 30
NOP 0
network 4
A T 9
CU C 1
BLD 101
A M 55.0
L MW 30
S C 1
A M 55.1
R C 1
L C 1
T MW 32
LC C 1
T MW 34
NOP 0
Network 5
L MW 32
L 1
==I
= L 0.0
A L 0.0
JNB _001
L 1
T MW 300
_001: NOP 0
A L 0.0
JNB _002
L 11
T MW 302
_002: NOP 0
A L 0.0
FP M 57.0
= M 56.0
Network 6
L MW 32
L 2
==I
= L 0.0
A L 0.0
JNB _003
L 2
T MW 300
_003: NOP 0
A L 0.0
JNB _004
L 12
T MW 302
_004: NOP 0
A L 0.0
FP M 57.1
= M 56.1
……
Network 12
A(
O M 56.0
O M 56.1
O M 56.2
O M 56.3
O M 56.4
O M 56.5
O M 56.6
O M 56.7
)
A T 9
S M 101.0
A T 10
R M 101.0
NOP 0
Network 13
L MW 32
L 5
>=I
= M 55.0
= M 55.1
Network 14
A M 101.0
= L 0.0
BLD 103
A M 101.1
= L 0.1
BLD 103
CALL FB 8 , DB102
SF :=S
REQ :=L0.0
R :=L0.1
LADDR :=256
DB_NO :=MW300
DBB_NO :=0
LEN :=MW126
R_CPU_NO:=
R_TYP :=X
R_NO :=
R_OFFSET:=
R_CF_BYT:=
R_CF_BIT:=
DONE :=M101.2
ERROR :=M101.3
STATUS :=MW106
NOP 0
Network 15
AN M 101.4
= L 0.0
BLD 103
CALL FB 7 , DB101
EN_R :=L0.0
R :=
LADDR :=256
DB_NO :=MW302
DBB_NO :=0
L_TYP :=
L_NO :=
L_OFFSET:=
L_CF_BYT:=
L_CF_BIT:=
NDR :=M100.3
ERROR :=M100.2
LEN :=MW124
STATUS :=MW104
NOP 0
完成上述编程以后,一个从站对应唯一的一个发送数据块和一个接收数据块,使得通讯变得很简单,在对应的从站发送数据块中写入相应的通讯数据,DB块第一个字节为从站的站地址,第二个字节为Function Code值,代表指令的读写功能和数据区,第三个字节和第四个字节所组成的整数代表所读数据区的地址偏移量,第五个字节和第六个字节所组成的整数代表总共要读写多少位数据,注意该数值必须在1-2040范围内,否则发送指令不执行。
在此我用了功能码Function Code = 3和功能码Function Code =6来读写从站内存数据。
对西门子S7-200从站的程序设计,应用Step 7 MicroWin编程软件,利用库函数将端口0设置成MODBUS协议通讯模式,将要读取的数据放在连续的V存储器内,并设置相关的参数如下:
在调试过程中遇到的问题及处理方法:
1、 在利用Modbus通讯的过程中,遇到这样一个问题,即浮点数的传输问题。因为一般浮点数都是32位,而Modbus总线中只能传输最多16位的数据。
解决方法:可以利用两个整形数传送一个浮点数(即将一个32位的二进制数分割成两个16位的二进制数),传送完以后,再将两个整形数整合为一个浮点数。
2、在调试过程中,当数据传输至PLC中后,最初发现数据并不是原来的数值,而是一些莫名其妙的数据,要么大的离谱,要么是负的多位数。
经过反复的尝试,终于发现问题所在,原来,在Modbus总线中,数据传输时是低位字节先传送,传送过来后如果不进行交换,二进制的数值排列是反向的,即原来的低字节在高位,高字节在低位,所以得到的数据和原数据相差甚远。只要将数据的高低位字节进行交换(swap位置1),就可解决此问题。
3、做时间脉冲时,如果脉冲宽度较小,就无法触发发送数据块,解决方法:加长脉冲宽度,进过几次比较,我最终采用宽度为70MS。
4、在接线过程中,由于从站控制器不同,接线方式也不同,在西门子CP341中,R(A)为负,R(B)为正,而施耐德控制器中R(A)为正,R(B)为负。由于不清楚其控制器通讯线电压,通讯一直无法做通,浪费了大量调试时间,希望引起同行的重视。
5、在发送数据块中,SF:=S和R_TYP:=X在西门子书上是没有提到的。如果不加两个字符,将无法完成通讯。
四、 应用体会
该项目的一期电解烟气净化空压站控制系统于2006年6月份投产,自投产以来,通讯稳定,可靠,受到了用户的一致好评,应用该MODBUS RTU通讯协议使得混合控制系统间的通讯变得更加简单,缩短了大量编程时间。该项目的二期电解烟气净化空压站控制系统正在进行紧张的安装与调试阶段。