西门子6ES7321-1CH00-0AA0参数详细
石油化工生产中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寄存器组态
注:需要用到的软件PCAccess,专门用于S7-200的opc服务器(Server)软件 一、首先来了解一些关于PCAccess的一些资料
二、进行具体设置 1、打开PCAccess软件点击:Microwin---右键---设置PG/PC接口: 2、选择相应的通讯协议,如下图,使用的是CP5611通讯卡: 3、添加新plc,设置名称和网络地址: 4、添加变量:点击上一步新添加的PLC右键----新---项目: 5、设置变量的符号名称、PLC对应地址、读写类型、数据类型、高低限等。依次建立VB0、VB1、QB0、QB1四个变量: 注意:完成后记得保存项目 6、打开WINCC7.0,新建一个项目,然后点击“变量管理”----右键----“添加新的驱动程序”: 7、选择OPC---打开: 8、OPC---OPCGroups---右键点击---系统参数: 9、点击本地“LOCAL”---S7200.OCPServer---然后点击“浏览服务器”: 10、弹出的“过滤标准”对话框,直接点“下一步”: 11、S7200.OPCServer---Microwin---S7-200OPC---选中右边对话框中的变量------添加条目: 12、然后系统会提示建立一个连接,点击“确定”: 13、填写前缀(WINCC变量组中显示)---选中“S7200_OPCServer”---完成; 依次添加QB0、QB1、VB0、VB1这四个变量: 14、此时在WINCC项目下的OCP驱动器目录中可以看到导入的变量: 三、PLC程序与WINCC程序 1、PLC程序如下: 2、WINCC程序如下: 建立6个按钮,分别对应向VB0、VB1写入1、170、255;即向QB0、QB1写入1、170、255: 3、建立2个输入输出域,分别显示QB0和QB1的值: 四、测试 按下VB0的“170”按键和VB1的“1”按键,即向VB0中写入“170”向VB1中写入“1” ,然后PLC中再将VB0中的数值MOVE到QB0、VB1中的数值MOVE到QB1: PLC实际照片: 170(10进制)=10101010(2进制) |