1、11711800015巧用PCS7 的功能做STEP 7+WINCC的项目巧用PCS7 的功能做STEP 7+WINCC的项目(在天津站BAS系统中的应用)李荣生1. 项目简介 天津站位于天津市河北区,通过海河东路、新广路、华兴路、新兆路与城市干道相连。天津站为大型综合交通枢纽,站房工程主要包括新建北站房、新建地下进站厅、高架候车厅拆除及新建、既有南站房改造、新建东西侧出站地道、既有行包地道拆除及改建、无站台柱雨棚改造和站台改造等。这个项目是采用Siemens 400系列PLC通过STEP7梯形图进行编程编成环境:STEP7版本:STEP 7 Professional Edition 2006
2、 SR3 V5.4+SP3 K5.4.3.0WINCC版本:WINCC 6.0 SP3a 2. 做法简介这个项目我们采取的做法是,下位机采用梯形图和SCL 编程,上位机通过利用WINCC里面的AS-OS-Engineering工具,自动上传变量,然后利用Wincc里面的Picture Tree Manager 和OS-ProjectEditor 工具做成PCS7的效果。3. 安装系统 安装顺序是首先安装STEP7,如有需要可以安装S7-SCL再安装WINCC ,安装时选择手动安装 AS-OS-Engineering(这个组建在WINCC安装盘内为可选安装)。4. PLC的编程这里列举马达块(F
3、B2007)的编程方法4.1 FB块变量申明表的建立变量的建立跟一般STEP7的做法相似,这里就不详细说明,不同点是要把需要的变量做成上传变量,具体做法如下:右击需要上传的变量,点击Object Properties 打开Attributes 在Attribute 的下拉菜单里面选择S7_m_c,在Value选择true,点击OK 之后在变量前出现小旗标志就可以上传了。马达的变量声明表如下:IN OUTIN_OUTSTAT4.2 FB块的编程 FB主要是利用梯形图+SCL,我们这个项目的马达块感觉还不错,跟大家分享下这里面的计时器都是放在静态变量STAT里面编静态变量TON时要注意,点击EMP
4、TY BOX,出来如下窗口输入TON确认右键选择change to Multiple Instance Call输入我们要定义的计时器的名称就OK了其中马达的显示状态是通过SCL编程的,其程序如下这里马达有16种不同的状态其程序如下FUNCTION_BLOCK STATUS_MOTORS7_m_c:=trueTITLE = STATUS_MOTORVERSION : 1.0AUTHOR : NAME : FAMILY : /*/ VARIABLE DECLARATION/*VAR_INPUTERROR :BOOL;QSTART :BOOL;QSTOP :BOOL;QFB_RUN :BOOL;Q
5、AUTO_MAN :BOOL;QLOCAL :BOOL;ACKS7_m_c:=true :BOOL;END_VARVAR_OUTPUTSTEP_NO S7_m_c:=true :INT;END_VARBEGINIF NOT(ERROR) AND QFB_RUN AND NOT(QAUTO_MAN) AND NOT(QLOCAL) AND NOT(QSTART) AND NOT(QSTOP) THEN STEP_NO := 1; / AUTO_RUNELSIF NOT(ERROR) AND NOT(QFB_RUN) AND NOT(QAUTO_MAN) AND NOT(QLOCAL) AND N
6、OT(QSTART) AND NOT(QSTOP) THEN STEP_NO := 2; / AUTO_STOPELSIF 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 RUNELSIF NOT(ERROR) AND QFB_RUN AND NOT(QAUTO_MAN) AND NOT(QLOCAL) AND NOT(QSTART) AND QSTOP THEN STEP_NO := 4; / A
7、UTO_RUN TO STOPELSIF ERROR AND NOT(QAUTO_MAN) AND NOT(QLOCAL) AND ACK THEN STEP_NO := 5; / AUTO_ERROR WITHOUT RESETELSIF ERROR AND NOT(QAUTO_MAN) AND NOT(QLOCAL) AND NOT(ACK) THEN STEP_NO := 6; / AUTO_ERROR WITH RESETELSIF NOT(ERROR) AND QFB_RUN AND QAUTO_MAN AND NOT(QLOCAL) AND NOT(QSTART) AND NOT(
8、QSTOP) THEN STEP_NO := 7; / MAN_RUNELSIF NOT(ERROR) AND NOT(QFB_RUN) AND QAUTO_MAN AND NOT(QLOCAL) AND NOT(QSTART) AND NOT(QSTOP) THEN STEP_NO := 8; / MAN_STOPELSIF NOT(ERROR) AND NOT(QFB_RUN) AND QAUTO_MAN AND NOT(QLOCAL) AND QSTART AND NOT(QSTOP) THEN STEP_NO := 9; / MAN_STOP TO RUNELSIF NOT(ERROR
9、) AND QFB_RUN AND QAUTO_MAN AND NOT(QLOCAL) AND NOT(QSTART) AND QSTOP THEN STEP_NO := 10; / MAN_RUN TO STOPELSIF ERROR AND QAUTO_MAN AND NOT(QLOCAL) AND ACK THEN STEP_NO := 11; / MAN_ERROR WITHOUT RESETELSIF ERROR AND QAUTO_MAN AND NOT(QLOCAL) AND NOT(ACK) THEN STEP_NO := 12; / MAN_ERROR WITH RESETE
10、LSIF NOT(ERROR) AND QFB_RUN AND QLOCAL THEN STEP_NO := 13; / LOCAL_RUNELSIF NOT(ERROR) AND NOT(QFB_RUN) AND QLOCAL THEN STEP_NO := 14; / LOCAL_STOPELSIF ERROR AND QLOCAL AND ACK THEN STEP_NO := 15; / LOCAL_ERROR WITHOUT RESETELSIF ERROR AND QLOCAL AND NOT(ACK) THEN STEP_NO := 16; / LOCAL_ERROR WITH
11、RESETELSE STEP_NO := 0; / OTHER STATUS END_IF;END_FUNCTION_BLOCK4.3 FB块的管脚说明4.3.1 马达块的管脚说明MOTOR_RUNInput: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” 无停
12、止命令, “1” 有停止命令)7、 AUTO_STA 自动启动命令 (“0” 自动停止命令, “1” 自动启动命令) RESET-确认故障8、 L_RESET 复位 (“1” 复位信号)10、START_TIME 启动超时时间设置 (格式为”T#30S”)11、STOP_TIME 停机超时时间设置 (格式为”T#30S”)12、INTERLOCK13、LMN_OUT 频率输入值14、F_HOA 频率输入使能15、SAMPLE_T 采样时间16、TIME_RESET 时间复位 (“1” 复位)Output:1、 QSTART 双点输出时的启动命令 (“1” 启动信号)脉冲输出,马达启动后自动变为
13、02、 QSTOP 双点输出时的停机命令 (“1” 停机命令)脉冲输出,马达停机后自动变为03、 QFB_RUN 运行反馈 (“1” 运行)4、 ERROR 总故障报警 (“1” 故障)5、 START_FT 启动超时报警 (“1” 启动超时)6、 STOP_FT 停机超时报警 (“1” 停机超时)7、 FT 外部故障 (“1” 故障)8、 AVAILABLE9、 QSPEED10、QAUTO_MAN 远程情况下手动或自动状态 (“0” 自动, “1” 手动)11、QLOCAL 就地或远程状态 (“0” 就地,“1” 远程)12、RUNTIME 运行时间13、ACK 报警确认 (“1” 确认)
14、14、STEP_NO 马达状态字15、CMD 单点输出时的启停命令 (“0” 停机, “1” 启动)IN_OUT:1、SP_V2、IN_OUT_1 BAS或FAS (“0” BAS控制, “1” FAS控制) 4.3.2 测量块的管脚说明MEASURESInput: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 报警复位Output:1、 OUTPUT 实际测量值
15、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 实际输入值3、 GAIN 比例系数4、 TI 积分时间5、 TD 微分时间6、 DEADB_W 死区7、 LMN_HLM 输出上限8、 LMN_LLM 输出下限9、 PV_FAC 实际输入因子 (通常为“1”)10、PV_OFF 实际输
16、入补偿 (通常不需要)11、LMN_FAC 输出因子 (通常为“1”)12、LMN_OFF 输出补偿 (通常不需要)13、MAN 手动强制输出IN_OUT:1、 LMN PID输出5. DB块的建立在BLOCK的空白区域单击右键,在弹出的快捷菜单中选择Insert New Object ,插入一个DB,此时弹出的DB属性对话框,在这个对话框中输入DB的名称、符号名(这里定义为马达设备名称)和注释,DB属性对话框中还包括了DB的类型选择,在类型下拉列表框中选择Instance DB,并指明对应的FB2007马达块。建完DB后,右键object properties 弹出的对话框Attribute
17、s里面的设置,看到DB块已经变成自动上传的DB块右键刚才建立的DB块,点击开special Object Properties -operator Control and Montitoring 弹出对话框,在Operator Control and Monitoring 对话框中打勾,则DB块就可以上传了6. WINCC面板的建立 6.1马达面板的制作6.1.1 基本图片的制作选择你要制作的图片,导出然后再导入刚才导出的图片可以直接进行编辑,编辑成你需要的不同的颜色和符号然后再导出成emf文件。这里我们编辑了马达16种不同的状态,做成16个 emf 图片6.1.2 马达块的制作在画面中添加“
18、status display ”控件,组态对话框。添加16种不同马达的状态这样就制作了跟下位机对应的马达鼠标按左键脚本如下#include apdefap.hvoid 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_SEC
19、TION_END/ WINCC:PICNAME_SECTION_START/ syntax: #define PicNameInAction PictureName/ next PicID : 1/ WINCC:PICNAME_SECTION_ENDSetVisible(lpszPictureName,TJ_MOTO,0);SetTagPrefix(lpszPictureName,TJ_MOTO,N/TJ_PUMP_RIGHT.);SetLeft(lpszPictureName,TJ_MOTO,x);SetTop(lpszPictureName,TJ_MOTO,y);SetVisible(lp
20、szPictureName,TJ_MOTO,1);SetText(TJ_MOTO.PDL,LOCALTION, LOC);SetText(TJ_MOTO.PDL,SYSTEM, SYS);SetText(TJ_MOTO.PDL,LOCALBOX, LOCALBOX);SetPropChar(lpszPictureName,TJ_MOTO,CaptionText,TJ_PUMP_RIGHT); /Return-Type: BOOL 画面显示组态如下这里你可以添加提示文本通过SetTagPrefix() 函数实现变量前缀的传递,这里的变量前缀就是我们下位机程序里的马达的设备号及DB块的命名。 通过
21、SetText() 函数,可以向指定画面中的指定对象写文字。TJ_MOTO.PDL 为操作弹出面板的Wincc画面名称。6.1.3 马达弹出面板的制作弹出面板的部分脚本如下:故障状态脚本7. OS项目编译(Compile)OS 编译,将建立的数据变量上传至WinCC项目中。8. 图形树的手动添加点击Picture Tree Manager,编辑目录树,这个跟PCS7 一样。 9. 打开OS Project Editor为项目设定一个图片布局这样我们就可以生成跟PCS7 一样的图型布局,报警画面等等,图形布局生成后,我们还可以修改自动生成的图形布局,增加或减少一些PCS7原有的功能,直到满足用户的需要生成后的效果如下:10. 心得体会 用这个方法做STEP 7+WINCC项目的优点是,我们可以充分利用PCS7 的功能1 我们可以节省不少时间,因为我们不需要再去做报警和画面的切换,这些都自动生成了,我们只要手动在报警记录里面添加我们需要的报警就可以了。2 画面比较简洁,格式比较统一,一个马达对应一个DB块。变量替换起来也很方便3 我们不需要再去建WINCC的变量,因为一切变量都是自动上传。4 下位程序比较清晰,每个DB对应一个马达,DB符号名跟WINCC的面板的名称一一对应, 程序结构比较清晰天津站BAS系统项目 项目工程师:李荣生 项目指导:杨柯2008年7月4日 星期五