西门子S7-200系列PLC是西门子家族中最小型的PLC ,除具有的一般功能外,以其强大的通信能力区别于一般的小型PLC ,可通过网络,分布系统轻易的完成复杂的控制要求。S7-200系列PLCCPU在内部都集成了一个或几个通信口,通信口标准为RS485口,利用相应的电缆就能构成具有多种通信功能的复杂通信网络[1]。Super E40系列RTU是安控公司集多年的开发、工程经验设计的新型RTU产品,它可实现对工业现场信号的采集和对现场设备的控制。与常用的可编程控制器PLC相比,具有更优良的通讯能力[2]。
本项目应用到Super E40的A32-M1 CPU模块、A32-L3通信模块、AC101模拟量输入模块、AC133数字量输出模块、AC141脉冲量输入模块。由于缺少模拟量输出模块,而单独购买AO模块价格昂贵,所以本文利用西门子S7-200特有的自由端口通讯模式与安控RTU通讯,安控将采集到的模拟量经过数据转换发送到西门子 S7-200PLC中,西门子通过模拟量输出端口输出电流,驱动球阀达到相应的球阀开度,具有一定的实用性。
1 系统概述
本课题来源于本校SRTP项目(大学生科研训练计划项目)和学校实验技术项目,题目为“基于GPRS和RTU的过程控制系统”,该系统是基于PLC模块技术构造的过程控制系统,可用于天然气和流体调压站及管道的安全监控等。
该平台由一路管道组成,配有压力变送器,电动球阀,差压计,流量计,温度变送器,吸水泵及水箱。控制柜单独放置,控制柜里安装安控Super E40系列RTU模块系统。通过变送器将压力、温度等传感器的信号转换为标准电信号,经由RTU进行信号处理后以有线或无线方式将数据传输到前置机进行数据处理,处理后的控制信号又送至电动球阀并进行实时动作。本项目应用到Super E40的A32-M1 CPU模块、A32-L3通信模块、AC101模拟量输入模块、AC133数字量输出模块、AC141脉冲量输入模块,西门子S7-200,系统总体框图如图1所示。
2 西门子通讯自由端口模式
CPU的串行通信接口可以由用户程序控制,这种操作模式称为自由端口模式。通过使用接收中断、发送中断、字符中断、发送指令(XMT)和接收指令(RCV),自由端口通信可以控制S7-200CPU通信口的操作模式。利用自由端口模式,可以实现用户定义的通信协议,连接多种智能设备[3]。通过SMB30,允许在CPU处于RUN模式时通信口0使用自由端口模式。CPU处于STOP模式时,停止自由端口通信,通信口强制转换成PPT协议模式,从而保证了编程软件对PLC编程和控制的功能。
SMB30用于设置端口0通信的波特率和奇偶校验等参数。本文给西门子设定的自由口通信,波特率为9600,数据位8,停止位1,无校验,结束符为 A,其主程序如下所示:
主程序:
网络1:// 设置控制方式为自由口通信方式,启动接收字符中断 //
LD SM0.1 //PLC首次扫描
MOVB 16#09, SMB30 //自由口通信,波特率为9600,数据位8,停止位1,无校验
MOVB 16#B0, SMB87 //初始化RCV,允许RCV,有结束符,检查空闲时间
MOVB 16#0A, SMB89 //结束符为 A
MOVB 6, SMB94 //一次接收的最大字符6个
ATCH INT_0:INT0, 23 //接收完成中断0
ATCH INT_1:INT1, 9 //接收完成中断1
ENI //允许用户中断
RCV VB199, 0 //端口0的接受缓冲区指针指向VB199
网络2:
LD SM0.1
CALL 初始化:SBR1 //调用初始化子程序
网络3:
LD SM0.0
MOVB 1, VB99
MOVW +1, VW100 //接收到数据后将0送到发送区
网络4:
LD SM0.5
XMT VB99, 0 //将数据0从端口0发送出去
西门子模拟量输出端口输出模拟量信号并送入电动球阀,电动球阀做出实时动作。如何控制球阀的开度成为关键问题。PID控制器是应用最广的闭环控制器,但是 PID控制方式主要应用于控制对象的惯性滞后较大时。鉴于本课题对滞后性要求不高,以及模拟量输入输出较少,所以本文给出了一种较为简单的控制方法。
将球阀开度以10°为单位分为9个区域,9个区域分别对应相应的驱动电流,安控RTU数据字为10000~50000,西门子S7-200数据字为 0~+32000,所分的区域如表1所示。它们之间数据的传送是通过十六进制传输的,西门子接收到的数据为十六进制,并存入指定的单元中。拿安控RTU数据字50000说,将其转换成十六进制数为C350,将两个字节分别存于西门子指定的单元中,最后经过数据转换为十进制数过程中超过范围。所以在处理的过程中运用到一些方法,就是只将第一个字节送到西门子,拿50000来说,只将C3传送到西门子中,转换成相应的十进制数为195,这样就比较好处理。
球阀开度 | 所需的电流 | 安控RTU数据字 | 西门子数据字 | 安控RTU数据字对应的十六进制数 | 送到西门子中的第一字节对应的十进制数 | 区域x |
0° | 4mA | 10000 | 6400 | 16#2710 | 39 | 0≤x≤39 |
10° | 6mA | 15000 | 9600 | 16#3A98 | 58 | 39<x<58 |
20° | 8mA | 20000 | 12800 | 16#4E20 | 78 | 58≤x<78 |
30° | 10mA | 25000 | 16000 | 16#61A8 | 97 | 78≤x<97 |
40° | 12mA | 30000 | 19200 | 16#7530 | 117 | 97≤x<117 |
50° | 14mA | 35000 | 22400 | 16#88B8 | 136 | 117≤x<136 |
60° | 16mA | 40000 | 25600 | 16#9C40 | 156 | 136≤x<156 |
70° | 18mA | 45000 | 28800 | 16#AFC8 | 175 | 156≤x<175 |
90° | 20mA | 50000 | 32000 | 16#C350 | 195 | 175≤x≤195 |
接收完成中断0和接收完成中断1程序如下:
接收完成中断0:INT0
网络1:
LDB= SMB86, 16#20 //SMB86 等于16#20,表示PLC收到结速符
S Q1.0, 1 //收到后将Q1.0置1,灯亮
CALL 调整球阀开度子程序:SBR0
CRETI
NOT //否则将Q1.0置0,灯灭
R Q1.0, 1
RCV VB199, 0
接收完成中断1:INT1
INT1:
网络1:
LD SM0.0
RCV VB199, 0 //接收数据
3 程序调试
在编程过程中用到了PLC串口通讯调试软件,软件可以在网上下载。在与安控RTU通讯之前先将西门子S7-200与PC机通讯,检验程序的正确性后再与安控RTU进行通讯调试。在调试西门子S7-200与PC机通讯的过程中出现的问题以及解决方法:
①程序跑飞的问题,即在与PC机通讯时,用PLC串口通讯调试软件向PLC中发送数据,当连续地发送数据时,PLC在接收到第一个字符后就会出现通讯错误现象。程序跑飞最主要的原因是程序结构问题,只要精简一下程序结构使其更加结构化,问题就可以解决。
②西门子S7-200和安控RTU的波特率,数据位,校验位,停止位不一致。如果两者不完全一致,是不能进行通讯的。
4 总结
本文给出了关于西门子S7-200与其他设备之间利用自由端口通讯的完整通讯程序,以及给出的球阀分区域方法有一定的创新性,可以应用于很多领域中,并给出在编程过程中遇到的问题和解决方法,具有很大的实用性,可以应用于实际项目中。