6ES7231-7PD22-0XA8诚信经营
1 引言
石油化工生产中plc常常用于大机组的联锁与控制。对于机组的振动、位移等参数,点数较少时,可以采用变送器、传感器转换成4-20ma信号送入plc,实现联锁控制,但对键相、差胀等特殊测量参数或振动、位移等测量参数点数较多时,信号转换的难度大、成本高,使用传统的框架式机械保护系统反而会经济、有效。美国bently公司3500系统是传统的框架式机械保护系统之一,它可以运行于各种冗余级别,包括双电源供电和更高要求下的三重模块冗余(tmr)监测器组态。每个i/o卡可以对 4-6个点的信号进行转换处理,并通过编程的方法实现联锁逻辑。茂名乙烯厂在2006年7月建成投产的2#丁二烯装置的压缩机联锁、控制中,采用德国西门子公司的s7-400h系统实现总的联锁和过程控制,外壳振动、轴瓦温度的联锁主要在bently3500中实现。为了实现数据共享和联锁冗余,需要将bently3500中的模拟信号和报警、联锁信号以通讯方式传输到s7-400h。本文以2#丁二烯压缩机控制系统为例,描述了simatic s7-400h与bently 3500之间modbus rtu协议通讯实现的过程。
2 控制系统简介
s7-400是大型可编程序控制器,由电源模板(ps)、中央处理单元(cpu)、信号模板(sm)、通信处理器(cp)等部分组成。s7-400h系统是s7-400的冗余系统,通过将发生中断的单元自动切换到备用单元的方法实现系统的不中断工作。它可以通过本地机架与s7-400的i/o模件、通讯网关连接,也可以通过基于profibus-dp总线的et200m分布式i/o与s7-300的i/o模块、通讯网关连接,以实现过程控制、与其它控制系统通讯。
3500机械保护系统是一个全功能监测保护系统,其设计应用了新微处理器技术。由1块或2块电源模块(3500/15)、框架接口模块(3500/20)、温度监测器模块(3500/60)、位移、速度、加速度监测模块(3500/42)、继电器模块(3500/32)、通信网关(3500/92)等组成。3500/92通信网关是3500系统主要通信通道,是与其它系统通讯的桥梁。
3 通讯方案选择
通讯实现的目标是将3500中的15个温度点和6个压缩机外壳振动点的值以及其报警、联锁状态送到s7-400h,由于通讯的数据量不大,选用modbus rtu协议。
s7-400h与3500之间通讯主要有两种方式:一是在s7-400h的本地机架上安装一个cp(通讯处理器)。s7-400h有两个冗余子系统,cp安装在其中一个子系统上,两个冗余的子系统都从该cp获得数据,并在两个相同的用户程序中进行计算。因此,就冗余系统模式中的信息处理而论,cp是连接到主cpu 还是热备cpu并无多大关系。缺点是,当子系统出现故障时,该子系统机架上的cp不再可用。另一种方式是,将cp安装在切换式i/o(et200m 分布式 i/o)上,该设备有一个有源板总线和一个冗余profibus-dp 从站接口模板im153-2,每个s7-400h子系统与et200m两个dp从接口中的一个相连。这样,某个s7-400h冗余子系统故障,cp会切换到它的冗余伙伴,可靠性高,而且经济。我们选用了该方案,通讯处理器采用cp341。
4 通讯系统硬件配置与接线
s7-400h的通讯处理器是cp341,在使用modbus rtu协议时需要一个硬件狗(dongle)。3500的通讯处理器是3500/92。由于它们处于同一柜内,距离在15米以内,传输接口形式选用了rs-232 。rs-232采用9 pin引脚,通常只用到引脚2、3、5,即接收数据、发送数据和信号地,接口连接如图1所示。
图1 传输接口的连接
3 软件实现
modbus rtu格式通信协议是以主从方式进行数据传输的,在传输的过程中主站是主动方,即主站发送数据请求报文到从站,从站返回响应报文。modbus系统间的数据交换是通过功能码(function code)来控制的,有些功能码是对位操作的,通讯的用户数据是以位(bit)为单位的:
fc01 读输出位的状态
fc02 读输入位的状态
fc05 强制单一输出位
fc15 强制多个输出位
有些功能码是对16位寄存器操作的,通讯的用户数据是以字(word)为单位的:
fc03 读输出寄存器
fc04 读输入寄存器
fc06 写单一输出寄存器
fc16 写多个输出寄存器[1]
cp341与3500/92的通讯,cp341做主站,3500/92做从站,主站、从站都需要设置波特率、停止位、校验位。这里设置波特率为9600bit/s,一位停止位,无奇偶校验。cp341 modbus协议通讯是通过simatic step7编程软件,并利用库函数fb8(p-snd-rk)和fb7(p-rcv-rk)功能块进行发送和读取数据操作的。它们均通过组态数据库的方法进行发送源信息和接收目的数据的信息,请求信息时,从源数据库读取相应字段后发送,接收信息是根据发送的内容进行对应字段数据的存储。报文格式存放在db42中前6个字节中,采用语句表语言编写程序,如下:
l 2
t db42.dbb0 //从站地址
l 3
t db42.dbb1 //使用fc03功能码
l 5000
t db42.dbw2 //10进制的5000在bently 3500中是modbus寄存器组态区域的起始地址
l 63
t db42.dbw4 //63是要从从站读16-bit字的数量
由于3500/92modbus rs-232/422 i/o模件通常响应时间少于0.5秒,因此,0.5秒发送一次对从站的数据请求:
an m30.0
an m120.7 //其为1时发出读的命令
l s5t#500ms
sd t30 //对bently 3500请求数据的速率
a m0.0
r t30
a t30
= m30.0
a m30.0
s m120.7
如果正在发送请求、发送完成或发送错误,就不能发出向从站的读数据请求命令:
a m120.7
an db40.dbx 0.0 //发送请求
an db40.dbx 0.4 //发送完成
an db40.dbx 0.5 //发送错误
r m120.7
s db40.dbx 0.0 //向bently 3500发出发送请求命令
发送请求必须是边缘发出的:
a(
o db40.dbx 0.4
o db40.dbx 0.5
)
a db40.dbx 0.0
r db40.dbx 0.4
调用cp341的发送功能块fb8:
call fb8,db50
sf :=‘s’
req := db40.dbx 0.0
r:= db40.dbx 0.1
laddr:=624 //cp341的模块地址
db_no:=42 //发送数据块=db42
dbb_no:=0 //db42中的起始地址
len :=6 //6 bytes
r_typ:=‘x’
done:=db40.dbx 0.4
error:=db40.dbx 0.5
status:=db40.dbw12
接收从站响应数据:
set
= db41.dbx 0.0 //允许cp341接收数据
call fb7 ,db70
en_r:= db41.dbx 0.0
laddr:=624
db_no:=43 //接收用户数据的数据块
dbb_no:=0
ndr:=db41.dbx 0.4
error:=db41.dbx 0.5
len:=db41.dbw10
status:=db41.dbw12
3500/92作为从站只是发送数据,所以设置很简单。从3500传输数据到plc,可以使用固定的协议地址,也可以使用可组态寄存器。可组态寄存器modbus地址范围是45001-45500(浮点:46001-46000)。由3500手册可知,通道的每种状态用一个bit表示,全部通道状态可用一个word表示,见表1。对于modbus协议,每一种功能码控制一个信息帧,即读位、读字要在两个信息帧中完成。为了提高通讯速度,通道的状态作为一个字与模拟量在同一个帧中传输,到plc后再将位取出。我们选用可组态寄存器作为modbus协议地址。
3500/92的modbus通讯组态是通过rack configuration software实现的。进入communication gateway界面后,点击configue按钮进入congigurable registers窗口,选择要传送的数据,将其拖入可组态的寄存器即可,见图2。
图2 3500/92 modbus寄存器组态
4 结束语
通过采用modbus rtu通信协议,实现了cp341与3500/92之间数据交换,高效地实现了西门子s7-400h可编程控制器与bently 3500的通信,实现了关键联锁的冗余,方便了对现场设备的控制和操作,避免大量的变送器的使用,降低了成本。
西门子公司的SIMATIC S7-200系列是适应于中小型设备控制的微型PLC, 应用领域广泛。无论是独立运行或相连成网络皆能在自动化系统中实现复杂的控制功能,强劲的通信能力使其在同类PLC产品中独具特色。本文以飞剪控制系统为例,介绍了S7-222的通信方式,着重阐述了自由口通信的参数设定、协议规划和通信程序设计。
关键词:PLC; S7-200; Win9x; 自由口模式; 串口
1.前言
可编程控制器(PLC)作为一种高性能的工业现场控制装置,已广泛地用于工业控制的各个领域。目前,工业自动控制对PLC的网络通信能力要求越来越高, PLC与上位机之间、PLC与PLC之间都要能够进行数据共享和控制。
飞剪控制系统要求在远离PLC的控制室里,实时监控电机、供纸、刀辊等设备。上位机为普通PC机,下位机为 SIEMENS S7-222 PLC。在实际开发中,采用自由口通信模式,自定义 PC与 PLC的通信协议,用Step7编写PLC端的通信程序,而在 PC端用VC6.0实现串行通信的控制和监控界面的显示。
2.通信方式及原理
S7-200系列PLC通信方式有三种:一种是点对点(PPI)方式,用于与西门子公司的PLC编程器或其它产品通信,其通信协议是不公开的。另一种为DP方式,这种方式使得PLC可通过Profibus的DP通信接口接入现场总线网络,从而扩大PLC的使用范围。后一种方式是自由口(FreePort)通信方式,由用户定义通信协议,实现PLC与外设的通信。本系统中采用自由口通信方式。它是S7-200系列PLC一个很有特色的功能。这种方式不需要增加投资,具有较好的灵活性,适合小规模控制系统。自由口通信在物理接口上要求双方都使用RS485接口,波特率高为38400bps。虽然PC机的标准串口为RS232,但西门子公司提供的PC/PPI电缆带有RS232 /RS485电平转换器,因此在不增加任何硬件的情况下,可以很方便地将PLC和PC机互联。
2.1自由口模式的初始化
PLC的自由口模式通信编程首先是对串口初始化。对S7-200PLC的初始化是通过对特殊存储字节SMB30(端口0)写入通信控制字,来设置通信的波特率、奇偶校验、停止位和数据位数。显然,这些设定必须与上位机设定值相一致。另外还可选择通信模式和主从站模式,各具体存储位内容可参考SIMATIC S7-200系统手册。
2.2自由口模式下收发数据
初始化自由端口通信模式后,就可以进行数据的收发。
(1) 发送数据指令 XMT
格式:XMT Table,Port。可以用 XMT指令发送数据,XMT指令激活发送缓冲区(从Table开始的变量存储区)中的数据。数据缓冲区的个数据指明了要发送的字节数,Port指明了用于发送的端口,缓冲区多可以有255个字符。在发完缓冲区的后一个字符时,会产生一个中断 (对端口 0为中断事件9)。本例的XMT缓冲区的格式如表1。其中,状态字节表示PLC是否正确接收了上位机所传数据;上传数据为PLC上传给PC的数据,需将9字节的16进制数编码为18字节的ASIIC码,所以字节数为18;BCC为上传数据的异或和,同样将16进制数编码为ASIIC码;结束字符的值为26。
表1 发送缓冲区
表2 接收缓冲区
RCV Table,Port。用 RCV指令接收多为255个字符的数据,这些字符存储在缓冲区中。在接收到结束字符时,会产生一个中断(对端口 0为中断事件23)。本例的RCV缓冲区的格式如表2。其中,命令类型表示上位机让PLC 执行什么操作,如读或写;目标站号是分配给PLC的一个代号;起始地址是PLC要进行读写的存储区的起始地址;读写字节数是PLC接到命令后,对存储区进行读写的字节数,本例中多写入16字节、读出9字节;写入数据是上位机要写入PLC的数据,对于读命令不起作用;BCC是从命令类型开始到写入数据为止的43字节数据的异或和。从目标站号到BCC这几项内容,都是把16进制数编码为ASIIC码来表示的。
3.自由口通信程序设计
通信程序的设计需遵循一定的规则,如中断通信处理程序要短小精悍、要避免XMT与RCV指令同时在一个端口执行等。整个PLC通信程序包括主程序、通信初始化子程序、校验子程序、读写数据子程序和发送完成、接收完成中断服务程序。
3.1主程序
通信主程序是PLC实现接收、发送功能的主框架。其主要流程为查询接收是否完成,校验,再根据命令类型执行读、写等操作。它的作用是控制程序的主流程,校验、读写等具体工作由相应的子程序完成。流程如图1。
3.2通信初始化程序
通信初始化子程序设置自由口通信的有关参数,对接收信息控制寄存器SMB87写入控制字,定义起始字符、结束字符和接收超时。设好自由口模式的这些参数后,还要连接中断事件和中断服务程序,并打开中断。后,把接收、发送缓冲区写入初值即可。
3.3校验子程序
每次PLC接收完1帧数据,就调用此子程序进行校验。进入子程序后,先清除接收完成标志位,再计算所接收数据的校验和BCC。如果正确,还要检验结束字符是否为‘G’。不是的话,说明数据报文长度不对或传输过程中发生了错误,需要向上位机返回相应的出错信息。流程如图2。
图1 主程序流程图
图2 校验子程序流程图
3.4读、写数据子程序
这2个子程序的任务是把PLC存储区中的数据发给上位机或把上位机传来的数据写入PLC存储区。二者的流程相似,只是数据流向不同。进入子程序后,先停止接收,然后完成数据传输,后发送应答报文。不同之处就是应答报文中的状态字节:读操作时是1、写操作时是2。
3.5接收、发送完成中断服务程序
当PLC接收到结束字符后产生中断(事件号9)或数据发送结束后产生中断(事件号23),这两个服务程序被执行。接收完,先把接收完标志置1,然后再次启动接收。发送完,先清除校验正确标志,再把接收缓冲区中的结束字符和计算出的接收BCC结果清零,后再次启动接收。
由于是半双工通信,因此PLC无论是发送和接收完数据后,都必须将通信口设置成接收状态。否则,PLC就接收不到任何数据了。
4.上位机的通信编程
上位机通过RS232口与PLC进行通信,bbbbbbs环境串口通信程序利用VC6编写。VC6编写串口通信程序通常有MSCOMM控件和通信API两种方法。二者各有优缺点。MSCOMM控件封装了微机串口通信的基本功能,使用者只需设置一些基本参数,就可以通过串口收发数据了。这种方法简单,易于编程人员使用,现在已有很多例子供参考。用通信API编写串口程序相对复杂一些。开发者要直接使用bbbbbbs提供的一组API函数来完成上述控件封装好的功能。所以使用API编程比使用控件更复杂,但同时也更灵活。通信控件已经封装好的功能是无法改变的,而使用API就能针对通信协议编写效率更高的代码。
在飞剪控制系统的上位机程序中,使用通信API编写了串口读写的模块。接收时,程序要查找起始字符‘g’,以确定1帧数据的开始;再根据下一个状态字节判断通信的正确性;后,把长度为23字节的数据帧接收好,并准备接收下一帧。发送过程不用判断数据内容,执行发送函数即可。需要注意的是:由于PLC通信口是半双工的,所以在PLC向上位机上传数据时,上位机要等1帧数据接收完毕,再执行发送操作,以避免收发冲突。
图3 上位机串口通信流程图
5.结束语
本系统取PC机和PLC各自的特点,实现了对飞剪系统的实时监控。通过利用PLC(下位机 )的自由口通信协议和上位机的VC开发工具,可以方便地开发出PC机和PLC通信应用软件。这种方法节省投资,对小规模的系统极具现实意义。系统具有实时性好、速度快、可靠性高、操作方便等优点,达到了预期的效果。经现场调试及运行表明,该系统适合于飞剪系统的实时监控