巧用PCS7 的功能做STEP 7+WINCC的项目
(在天津站BAS系统中的应用)
李荣生
巧用PCS7 的功能做STEP 7+WINCC的项目 .................................................................................................................... 1 1. 项目简介 ................................................................................................................................................................................. 2 2. 做法简介 ................................................................................................................................................................................. 3 3. 安装系统 ................................................................................................................................................................................. 3 4. PLC的编程 ............................................................................................................................................................................. 5
4.1 FB块变量申明表的建立 .............................................................................................................................................. 5 4.2 FB块的编程 .................................................................................................................................................................. 7 4.3 FB块的管脚说明 ........................................................................................................................................................ 25
4.3.1 马达块的管脚说明 .......................................................................................................................................... 26 4.3.2 测量块的管脚说明 .......................................................................................................................................... 29 4.3.3 PID块的管脚说明 ........................................................................................................................................... 30
5. DB块的建立 ......................................................................................................................................................................... 32 6. WINCC面板的建立 ............................................................................................................................................................. 33
6.1马达面板的制作 .......................................................................................................................................................... 33
6.1.1 基本图片的制作 .............................................................................................................................................. 33 6.1.2 马达块的制作 .................................................................................................................................................. 35 6.1.3 马达弹出面板的制作 ...................................................................................................................................... 40
7. OS项目编译(Compile) .................................................................................................................................................... 41 8. 图形树的手动添加 ............................................................................................................................................................... 41 9. 打开OS Project Editor为项目设定一个图片布局 ............................................................................................................ 42 10. 心得体会 ............................................................................................................................................................................. 43
1
SIEMENS
1. 项目简介
天津站位于天津市河北区,通过海河东路、新广路、华兴路、新兆路与城市干道相连。天津站为大型综合交通枢纽,站房工程主要包括新建北站房、新建地下进站厅、高架候车厅拆除及新建、既有南站房改造、新建东西侧出站地道、既有行包地道拆除及改建、无站台柱雨棚改造和站台改造等。
这个项目是采用Siemens 400系列PLC通过STEP7梯形图进行编程
编成环境:
STEP7版本:STEP 7 Professional Edition 2006 SR3 V5.4+SP3 WINCC版本:WINCC 6.0 SP3a
2
K5.4.3.0
SIEMENS
2. 做法简介
这个项目我们采取的做法是,下位机采用梯形图和SCL 编程,上位机通过利用WINCC里面的AS-OS-Engineering工具,自动上传变量,然后利用Wincc里面的Picture Tree Manager 和OS-ProjectEditor 工具做成PCS7的效果。
3. 安装系统
安装顺序是
首先安装STEP7,如有需要可以安装S7-SCL
3
SIEMENS
再安装WINCC ,安装时选择手动安装 AS-OS-Engineering(这个组建在WINCC安装盘内为可选安装)。
4
SIEMENS
4. PLC的编程
这里列举马达块(FB2007)的编程方法
4.1 FB块变量申明表的建立
变量的建立跟一般STEP7的做法相似,这里就不详细说明,不同点是要把需要的变量做成上传变量,具体做法如下:
右击需要上传的变量,点击Object Properties
打开Attributes 在Attribute 的下拉菜单里面选择S7_m_c,在Value选择true,点击OK 之后在变量前出现小旗标志就可以上传了。
5
SIEMENS
马达的变量声明表如下:
IN
OUT
6
SIEMENS
IN_OUT
STAT
4.2 FB块的编程
FB主要是利用梯形图+SCL,我们这个项目的马达块感觉还不错,跟大家分享下
7
SIEMENS
8
SIEMENS
9
SIEMENS
10
SIEMENS
11
SIEMENS
12
SIEMENS
13
SIEMENS
14
SIEMENS
15
SIEMENS
16
SIEMENS
17
SIEMENS
这里面的计时器都是放在静态变量STAT里面
编静态变量TON时要注意,
点击EMPTY BOX,出来如下窗口
输入TON
18
SIEMENS
确认
右键选择change to Multiple Instance Call
输入我们要定义的计时器的名称就OK了
19
SIEMENS
其中马达的显示状态是通过SCL编程的,其程序如下
20
SIEMENS
这里马达有16种不同的状态
其程序如下
FUNCTION_BLOCK STATUS_MOTOR
{S7_m_c:='true'}
TITLE = 'STATUS_MOTOR'
VERSION : '1.0'
AUTHOR :
NAME :
FAMILY :
//***************************************************************************
// VARIABLE DECLARATION
//***************************************************************************
VAR_INPUT
21
SIEMENS
ERROR :BOOL;
QSTART :BOOL;
QSTOP :BOOL;
QFB_RUN :BOOL;
QAUTO_MAN :BOOL;
QLOCAL :BOOL;
ACK{S7_m_c:='true'} :BOOL;
END_VAR
VAR_OUTPUT
STEP_NO {S7_m_c:='true'} :INT;
END_VAR
BEGIN
IF NOT(ERROR) AND QFB_RUN AND NOT(QAUTO_MAN) AND NOT(QLOCAL) AND NOT(QSTART) AND NOT(QSTOP) THEN
22
SIEMENS
STEP_NO := 1; // AUTO_RUN
ELSIF NOT(ERROR) AND NOT(QFB_RUN) AND NOT(QAUTO_MAN) AND NOT(QLOCAL) AND NOT(QSTART) AND NOT(QSTOP) THEN
STEP_NO := 2; // AUTO_STOP
ELSIF NOT(ERROR) AND NOT(QFB_RUN) AND NOT(QAUTO_MAN) AND NOT(QLOCAL) AND QSTART AND NOT(QSTOP) THEN
STEP_NO := 3; // AUTO_STOP TO RUN
ELSIF NOT(ERROR) AND QFB_RUN AND NOT(QAUTO_MAN) AND NOT(QLOCAL) AND NOT(QSTART) AND QSTOP THEN
STEP_NO := 4; // AUTO_RUN TO STOP
ELSIF ERROR AND NOT(QAUTO_MAN) AND NOT(QLOCAL) AND ACK THEN
STEP_NO := 5; // AUTO_ERROR WITHOUT RESET
ELSIF ERROR AND NOT(QAUTO_MAN) AND NOT(QLOCAL) AND NOT(ACK) THEN
STEP_NO := 6; // AUTO_ERROR WITH RESET
23
SIEMENS
ELSIF NOT(ERROR) AND QFB_RUN AND QAUTO_MAN AND NOT(QLOCAL) AND NOT(QSTART) AND NOT(QSTOP) THEN
STEP_NO := 7; // MAN_RUN
ELSIF NOT(ERROR) AND NOT(QFB_RUN) AND QAUTO_MAN AND NOT(QLOCAL) AND NOT(QSTART) AND NOT(QSTOP) THEN
STEP_NO := 8; // MAN_STOP
ELSIF NOT(ERROR) AND NOT(QFB_RUN) AND QAUTO_MAN AND NOT(QLOCAL) AND QSTART AND NOT(QSTOP) THEN
STEP_NO := 9; // MAN_STOP TO RUN
ELSIF NOT(ERROR) AND QFB_RUN AND QAUTO_MAN AND NOT(QLOCAL) AND NOT(QSTART) AND QSTOP THEN
STEP_NO := 10; // MAN_RUN TO STOP
ELSIF ERROR AND QAUTO_MAN AND NOT(QLOCAL) AND ACK THEN
STEP_NO := 11; // MAN_ERROR WITHOUT RESET
ELSIF ERROR AND QAUTO_MAN AND NOT(QLOCAL) AND NOT(ACK) THEN
24
SIEMENS
STEP_NO := 12; // MAN_ERROR WITH RESET
ELSIF NOT(ERROR) AND QFB_RUN AND QLOCAL THEN
STEP_NO := 13; // LOCAL_RUN
ELSIF NOT(ERROR) AND NOT(QFB_RUN) AND QLOCAL THEN
STEP_NO := 14; // LOCAL_STOP
ELSIF ERROR AND QLOCAL AND ACK THEN
STEP_NO := 15; // LOCAL_ERROR WITHOUT RESET
ELSIF ERROR AND QLOCAL AND NOT(ACK) THEN
STEP_NO := 16; // LOCAL_ERROR WITH RESET
ELSE STEP_NO := 0; // OTHER STATUS
END_IF;
END_FUNCTION_BLOCK
4.3 FB块的管脚说明
25
SIEMENS
4.3.1 马达块的管脚说明
MOTOR_RUN
Input:
1、 HOA—— 就地或远程(“0” 就地, “1” 远程)
2、 AUTO_MAN—— 远程情况下手动或自动 (“0” 自动, “1” 手动)
3、 FB_RUN—— 运行反馈 (“0” 无反馈, “1” 有反馈)
4、 FB_FAULT—— 故障反馈 (“0” 无反馈, “1” 有反馈)
5、 START—— 远程手动启动 (“0” 无启动命令, “1” 有启动命令)
6、 STOP—— 远程手动停止 (“0” 无停止命令, “1” 有停止命令)
7、 AUTO_STA—— 自动启动命令 (“0” 自动停止命令, “1” 自动启动命令)
RESET---确认故障
8、 L_RESET—— 复位 (“1” 复位信号)
10、START_TIME—— 启动超时时间设置 (格式为”T#30S”)
26
SIEMENS
11、STOP_TIME—— 停机超时时间设置 (格式为”T#30S”)
12、INTERLOCK
13、LMN_OUT 频率输入值
14、F_HOA 频率输入使能
15、SAMPLE_T—— 采样时间
16、TIME_RESET—— 时间复位 (“1” 复位)
Output:
1、 QSTART—— 双点输出时的启动命令 (“1” 启动信号)脉冲输出,马达启动后自动变为0
2、 QSTOP—— 双点输出时的停机命令 (“1” 停机命令)脉冲输出,马达停机后自动变为0
3、 QFB_RUN—— 运行反馈 (“1” 运行)
4、 ERROR—— 总故障报警 (“1” 故障)
5、 START_FT—— 启动超时报警 (“1” 启动超时)
27
SIEMENS
6、 STOP_FT—— 停机超时报警 (“1” 停机超时)
7、 FT—— 外部故障 (“1” 故障)
8、 AVAILABLE
9、 QSPEED
10、QAUTO_MAN—— 远程情况下手动或自动状态 (“0” 自动, “1”11、QLOCAL—— 就地或远程状态 (“0” 就地,“1” 远程)
12、RUNTIME—— 运行时间
13、ACK—— 报警确认 (“1” 确认)
14、STEP_NO—— 马达状态字
15、CMD—— 单点输出时的启停命令 (“0” 停机, “1” 启动)
IN_OUT:
1、SP_V
2、IN_OUT_1—— BAS或FAS (“0” BAS控制, “1” FAS控制)
28
手动)
SIEMENS
4.3.2 测量块的管脚说明
MEASURES
Input:
1、 PV_IN—— AI获取值
2、 OFFSET—— 偏差设定值
3、 RANG_H—— 量程上限
4、 RANG_L—— 量程下限
5、 SET_HH—— 高高报警设定限6、 SET_H—— 高报警设定限
7、 SET_LL—— 低低报警设定限
8、 SET_L—— 低报警设定限
9、 SP—— 死区设定值
10、RESET—— 报警复位
29
SIEMENS
Output:
1、 OUTPUT—— 实际测量值
2、 A_HH—— 高高报警 (“1” 报警)
3、 W_H—— 高报警 (“1” 报警)
4、 A_LL—— 低低报警 (“1” 报警)
5、 A_L—— 低报警 (“1” 报警)
6、 STEP_NO—— 状态字
7、 ERROR—— 错误报警 (“1” 触发)
8、 ACK—— 报警确认 (“1” 确认)
4.3.3 PID块的管脚说明
Input:
1、 SP_INT—— PID设定值
2、 PV_IN—— 实际输入值
30
SIEMENS
3、 GAIN—— 比例系数
4、 TI—— 积分时间
5、 TD—— 微分时间
6、 DEADB_W—— 死区
7、 LMN_HLM—— 输出上限
8、 LMN_LLM—— 输出下限
9、 PV_FAC—— 实际输入因子 (通常为“1”)
10、PV_OFF—— 实际输入补偿 (通常不需要)
11、LMN_FAC—— 输出因子 (通常为“1”)
12、LMN_OFF—— 输出补偿 (通常不需要)
13、MAN—— 手动强制输出
IN_OUT:
1、 LMN—— PID输出
31
SIEMENS
5. DB块的建立
在BLOCK的空白区域单击右键,在弹出的快捷菜单中选择Insert New Object ,插入一个DB,此时弹出的DB属性对话框,在这个对话框中输入DB的名称、符号名(这里定义为马达设备名称)和注释,DB属性对话框中还包括了DB的类型选择,在类型下拉列表框中选择Instance DB,并指明对应的FB2007马达块。
建完DB后,右键object properties 弹出的对话框Attributes里面的设置,看到DB块已经变成自动上传的DB块
右键刚才建立的DB块,点击开special Object Properties –--operator Control and Montitoring
32
SIEMENS
弹出对话框,在Operator Control and Monitoring 对话框中打勾,则DB块就可以上传了
6. WINCC面板的建立
6.1马达面板的制作
6.1.1 基本图片的制作
33
SIEMENS
选择你要制作的图片,导出
然后再导入刚才导出的图片
34
SIEMENS
可以直接进行编辑,编辑成你需要的不同的颜色和符号然后再导出成emf文件。
这里我们编辑了马达16种不同的状态,做成16个 emf 图片
6.1.2 马达块的制作
35
SIEMENS
在画面中添加“status display ”控件,组态对话框。
添加16种不同马达的状态
36
SIEMENS
这样就制作了跟下位机对应的马达
鼠标按左键脚本如下
#include \"apdefap.h\"
37
SIEMENS
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction \"DMTagName\"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END
// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction \"PictureName\"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
SetVisible(lpszPictureName,\"TJ_MOTO\
SetTagPrefix(lpszPictureName,\"TJ_MOTO\
SetLeft(lpszPictureName,\"TJ_MOTO\
38
SIEMENS
SetTop(lpszPictureName,\"TJ_MOTO\
SetVisible(lpszPictureName,\"TJ_MOTO\
SetText(\"TJ_MOTO.PDL\
SetText(\"TJ_MOTO.PDL\
SetText(\"TJ_MOTO.PDL\
SetPropChar(lpszPictureName,\"TJ_MOTO\
//Return-Type: BOOL
}
画面显示组态如下
这里你可以添加提示文本
39
SIEMENS
通过SetTagPrefix() 函数实现变量前缀的传递,这里的变量前缀就是我们下位机程序里的马达的设备号及DB块的命名。
通过SetText() 函数,可以向指定画面中的指定对象写文字。
TJ_MOTO.PDL 为操作弹出面板的Wincc画面名称。
6.1.3 马达弹出面板的制作
弹出面板的部分脚本如下:
故障状态脚本
40
SIEMENS
7. OS项目编译(Compile)
OS 编译,将建立的数据变量上传至WinCC项目中。
8. 图形树的手动添加
41
SIEMENS
点击Picture Tree Manager,编辑目录树,这个跟PCS7 一样。
9. 打开OS Project Editor为项目设定一个图片布局
42
SIEMENS
这样我们就可以生成跟PCS7 一样的图型布局,报警画面等等,图形布局生成后,我们还可以修改自动生成的图形布局,增加或减少一些PCS7原有的功能,直到满足用户的需要
生成后的效果如下:
10. 心得体会
用这个方法做STEP 7+WINCC项目的优点是,我们可以充分利用PCS7 的功能
1. 我们可以节省不少时间,因为我们不需要再去做报警和画面的切换,这些都自动
43
SIEMENS
生成了,我们只要手动在报警记录里面添加我们需要的报警就可以了。
2. 画面比较简洁,格式比较统一,一个马达对应一个DB块。变量替换起来也很方便
3. 我们不需要再去建WINCC的变量,因为一切变量都是自动上传。
4. 下位程序比较清晰,每个DB对应一个马达,DB符号名跟WINCC的面板的名称一一对应, 程序结构比较清晰
天津站BAS系统项目
项目工程师:李荣生
项目指导:杨柯
2008年7月4日 星期五
44
因篇幅问题不能全部显示,请点此查看更多更全内容