SCL编写的阀门块实例
发一个以前做项目用SCL编写的阀门块。
FUNCTION_BLOCK Z_VALVE_300//FB530NAME:VALVE
FAMILY:WR
AUTHOR:ZYG
//VERSION:'0.1'
//FB 530
//date:2014/5/28
// Typical-Attribute
{S7_tasklist:='OB100';S7_m_c:='true';S7_blockview:='big'
}// Parameterattribute
// S7_visible sichtbar/unsichtbar (default='true')
// S7_m_c WinCC - Tag (default='false')
// S7_dynamic Testmodus (default='false')
VAR_INPUTAUTO {S7_dynamic:='true'} : BOOL := FALSE; // InterlockMAN {S7_dynamic:='true'} : BOOL := FALSE; // External ErrorLOCAL {S7_dynamic:='true'} : BOOL := FALSE; // 0=DCS 1=LocalLinkingM_OPEN {S7_dynamic:='true'} : BOOL := FALSE; // 1=CMD OPEN ManualA_OPEN {S7_dynamic:='true'} : BOOL := FALSE; // 1=CMD OPEN AutomaticL_OPEN {S7_dynamic:='true'} : BOOL := FALSE; // M_CLOSE {S7_dynamic:='true'} : BOOL := FALSE; // 1=Reset Error PeripherieA_CLOSE {S7_dynamic:='true'} : BOOL := FALSE; // L_CLOSE {S7_dynamic:='true'} : BOOL := FALSE; // RESET {S7_dynamic:='true'} : BOOL := FALSE; // FB_OPEN {S7_dynamic:='true'} : BOOL := FALSE; // Feedback VALVE openFB_CLOSE {S7_dynamic:='true'} : BOOL := TRUE; // Feedback VALVE closeL_MON {S7_dynamic:='true'} : BOOL := TRUE; // 1=Monitoring Feedback OPENMON_T {S7_dynamic:='true'; S7_m_c := 'true'} : REAL := 10.0; // Monitoring TimeL_SIM {S7_dynamic:='true'} : BOOL := FALSE; // 0=Normal 1=Simulation//LOCK {S7_dynamic:='true'} : BOOL := FALSE; // InterlockIL_LIM {S7_dynamic:='true'} : BOOL := FALSE; // InterlockIL_ABS {S7_dynamic:='true'} : BOOL := FALSE; // Interlock//ERR_EXTERN {S7_dynamic:='true'} : BOOL := FALSE; // External Error//LIOP_SEL {S7_dynamic:='true'} : BOOL := FALSE; // 0=Operator 1=Linking// L_AUT {S7_dynamic:='true'} : BOOL := FALSE; // 0=Manual 1=Automatic//L_REMOTE {S7_dynamic:='true'} : BOOL := FALSE; // 0=Lokal 1=Remote//L_SIM {S7_dynamic:='true'} : BOOL := FALSE; // 0=Normal 1=Simulation//L_RESET {S7_dynamic:='true'} : BOOL := FALSE; // 1=Reset Error Peripherie//AUT_OP {S7_dynamic:='true'} : BOOL := FALSE; // 1=CMD OPEN Automatic//MAN_OP {S7_dynamic:='true'} : BOOL := FALSE; // 1=CMD OPEN Manual//SIM_OP {S7_dynamic:='true'} : BOOL := FALSE; // 1=CMD OPEN Simulation//FB_OPEN {S7_dynamic:='true'} : BOOL := FALSE; // Feedback VALVE open//FB_CLOSE {S7_dynamic:='true'} : BOOL := TRUE; // Feedback VALVE close//L_MON {S7_dynamic:='true'} : BOOL := TRUE; // 1=Monitoring Feedback OPEN//MON_T {S7_dynamic:='true'; S7_m_c := 'true'} : REAL := 10.0; // Monitoring TimeSAMPLE_T {S7_sampletime:='true'} : REAL := 0.1; // Sample Time
END_VARVAR_OUTPUTQdwState {S7_dynamic:='true'; S7_m_c:='true'}: DWORD:=0; // status winccQabyState AT QdwState : ARRAY [0..3] OF BYTE; // look at state byte-wiseQwState {S7_dynamic:='true'}: WORD:= 0; //0=close, 1=opening, 2=open, 3=closingQ_AUTO {S7_dynamic:='true'} : BOOL := FALSE; // 1=Automatic Q_MAN {S7_dynamic:='true'} : BOOL := FALSE; // 1=ManQ_LOCAL {S7_dynamic:='true'} : BOOL := FALSE; // 1=LOCALQCMD_OPEN {S7_dynamic:='true'} : BOOL := FALSE; // 0=Close 1=OpenQERR_OPEN {S7_dynamic:='true'} : BOOL := FALSE; // 1=ERRQERR_CLOSE {S7_dynamic:='true'} : BOOL := FALSE; // 1=ERR QMON {S7_dynamic:='true'} : BOOL := FALSE; // 1=Monitoring FeedbackQMON_ERR {S7_dynamic:='true'} : BOOL := FALSE; // 1=Monitoring ErrorQMON_T1 {S7_dynamic:='true'; S7_m_c := 'true'} : REAL := 0.0; // Current Monitoring Time FeedbackQMON_T2 {S7_dynamic:='true'; S7_m_c := 'true'} : REAL := 0.0; // Current Monitoring Time Feedback // QSIM {S7_dynamic:='true'} : BOOL := FALSE; // 1=Simulaition is activeQCLOSE {S7_dynamic:='true'} : BOOL := FALSE; // 1=ClosedQOPENING {S7_dynamic:='true'} : BOOL := FALSE; // 1=OpeningQOPEN {S7_dynamic:='true'} : BOOL := FALSE; // 1=OpenQCLOSING {S7_dynamic:='true'} : BOOL := FALSE; // 1=Closing QLOCK {S7_dynamic:='true'} : BOOL := FALSE; // 1=Lock is active// QERR {S7_dynamic:='true'} : BOOL := FALSE; // 1=ERROR// QERR_EXT {S7_dynamic:='true'} : BOOL := FALSE; // 1=External ERROR// QwAlarm {S7_dynamic:='true'; S7_m_c := 'true'} : WORD := 16#0; // Bit Alarm Procedure// QabyAlarm AT QwAlarm : ARRAY [0..1] OF BYTE; // look at QwAlarm byte-wise
END_VARVAR_IN_OUTOP_dwCmd {S7_dynamic := 'true'; S7_m_c := 'true'} : DWORD :=0; // control word wincc
END_VARVAROPdwCmdHMI : DWORD := 16#0; // Operator Commands in HMI formatOPabyCmdHMI AT OPdwCmdHMI : ARRAY [0..3] OF BYTE; // look at HMI command byte-wiseOPdwCmdPLC : DWORD := 16#0; // Operator Commands in PLC formatOPabyCmdPLC AT OPdwCmdPLC : ARRAY [0..3] OF BYTE; // look at plc command byte-wiseOPabCmdPLC AT OPdwCmdPLC : ARRAY [0..31] OF BOOL; // look at plc command bit-wiseQdwStatePLC : DWORD := 16#0; // State word in PLC formatQabyStatePLC AT QdwStatePLC : ARRAY [0..3] OF BYTE; // look at state byte-wiseQabStatePLC AT QdwStatePLC : ARRAY [0..31] OF BOOL; // look at state bit-wiseQwAlarmPLC : WORD := 16#0; // Alarm Tag PLC FormatQabyAlarmPLC AT QwAlarmPLC : ARRAY [0..1] OF BYTE; // look at Alarm byte-wiseQabAlarmPLC AT QwAlarmPLC : ARRAY [0..15] OF BOOL; // look at Alarm bit-wise// TAGS for Operation?OP_RESET : BOOL := FALSE;// TAGS for Edge detectAUTO_OLD : BOOL := FALSE; MAN_OLD : BOOL := FALSE; SR1_Q : BOOL :=FALSE;//阀门开关定义变量M_OPEN_OLD : BOOL := FALSE; M_CLOSE_OLD : BOOL := FALSE; RS2_Q : BOOL :=FALSE; RS2_S : BOOL :=FALSE; RS2_R : BOOL :=FALSE; FB_OPEN_TMP:BOOL:=FALSE;FB_CLOSE_TMP:BOOL:=FALSE;TON1_EN : BOOL :=FALSE;TON2_EN : BOOL :=FALSE;FB_OPEN_RS_Q:BOOL:=FALSE; FB_CLOSE_RS_Q:BOOL:=FALSE;L_RESET_OLD : BOOL := FALSE;AUT_OP_OLD : BOOL := FALSE;MAN_OP_OLD : BOOL := FALSE;QOPENING_OLD : BOOL := FALSE;QCLOSING_OLD : BOOL := FALSE;// TAGS for SimulationFB_SIM_OPEN : BOOL := FALSE;FB_SIM_CLOSE : BOOL := TRUE;SIM_T : REAL := 5.0;QCMD_SIM : BOOL := FALSE;QREMOTE : BOOL := FALSE; // 0=Local 1=Remote END_VARVAR_TEMP
TOP_SI: STRUCTEV_CLASS : BYTE;EV_NUM : BYTE;PRIORITY : BYTE;NUM : BYTE;TYP2_3 : BYTE;TYP1 : BYTE;ZI1 : WORD;ZI2_3 : DWORD;
END_STRUCT;START_UP_SI: STRUCTEV_CLASS : BYTE;EV_NUM : BYTE;PRIORITY : BYTE;NUM : BYTE;TYP2_3 : BYTE;TYP1 : BYTE;ZI1 : WORD;ZI2_3 : DWORD;
END_STRUCT;
iRet : INT;END_VARBEGIN// START UP =====================================================================iRet := SFC6 (TOP_SI:= TOP_SI, START_UP_SI:= START_UP_SI);IF (TOP_SI.NUM = 100) THENQCMD_OPEN := FALSE;QCLOSE := TRUE;QOPENING := FALSE;QOPEN := FALSE;QCLOSING := FALSE;QwState := 0;iRet := 0;END_IF;
// END STARTUP ==================================================================// HMI发来的命令字节高低为转换==============OPdwCmdHMI := OP_dwCmd;OPabyCmdPLC[0] := OPabyCmdHMI[3];OPabyCmdPLC[1] := OPabyCmdHMI[2];OPabyCmdPLC[2] := OPabyCmdHMI[1];OPabyCmdPLC[3] := OPabyCmdHMI[0]; //手动、自动、Local处理
IF (MAN AND NOT MAN_OLD) OR OPabCmdPLC[16] THENSR1_Q:=FALSE;
END_IF;IF (AUTO AND NOT AUTO_OLD) OR OPabCmdPLC[17] THENSR1_Q:=TRUE;
END_IF;
Q_LOCAL:=LOCAL; //1=LOCAL,0=DCS;
Q_AUTO:=SR1_Q AND (NOT LOCAL); //1=自动
Q_MAN:=(NOT SR1_Q) AND (NOT LOCAL); //1=手动//阀门打开或关闭处理======================================================RS2_S:=(Q_MAN AND M_OPEN AND NOT M_OPEN_OLD) //手动状态且手动输入为上升沿OR (Q_AUTO AND A_OPEN) //自动状态下自动输入OR (LOCAL AND L_OPEN) //Local状态且L_open输入OR (Q_MAN AND OPabCmdPLC[1]); //HMI打开RS2_R:=(Q_MAN AND M_CLOSE AND NOT M_CLOSE_OLD) OR (Q_AUTO AND A_CLOSE) OR (Q_AUTO AND IL_LIM)OR (LOCAL AND L_CLOSE)OR IL_ABS//OR RESETOR (Q_MAN AND OPabCmdPLC[0]); //HMI关闭 IF RS2_S AND NOT RS2_R THENRS2_Q:=TRUE;END_IF;IF RS2_R THENRS2_Q:=FALSE;END_IF; QCMD_OPEN:=RS2_Q ; //阀门开输出命令//-----------------------------------------------------------------FB_OPEN_TMP:=(FB_OPEN AND NOT L_SIM) OR (QCMD_OPEN AND L_SIM);FB_CLOSE_TMP:=(FB_CLOSE AND NOT L_SIM) OR (QCMD_OPEN AND L_SIM); TON1_EN:=(NOT FB_OPEN_TMP OR FB_CLOSE_TMP) AND QCMD_OPEN ;TON2_EN:=(FB_OPEN_TMP OR NOT FB_CLOSE_TMP) AND NOT QCMD_OPEN ;IF TON1_EN THEN // *** Process Mode ****IF QMON_T1 < MON_T THENQMON_T1 := QMON_T1 + SAMPLE_T;END_IF;ELSEQMON_T1 :=0.0;END_IF;IF (QMON_T1 >= MON_T)AND NOT (RESET OR OPabCmdPLC[7])THENFB_OPEN_RS_Q := TRUE;ELSEFB_OPEN_RS_Q := FALSE;END_IF;IF TON2_EN THEN // *** Process Mode ****IF QMON_T2 < MON_T THENQMON_T2 := QMON_T2 + SAMPLE_T;END_IF;ELSEQMON_T2 :=0.0;END_IF;IF (QMON_T2 >= MON_T)AND NOT (RESET OR OPabCmdPLC[7])THENFB_CLOSE_RS_Q := TRUE;ELSEFB_CLOSE_RS_Q := FALSE;END_IF;QERR_OPEN:=FB_OPEN_RS_Q; QERR_CLOSE:=FB_CLOSE_RS_Q;QMON_ERR:=QERR_OPEN OR QERR_CLOSE;//=================================
// QwState
//0 = Close
//1 = Opening
//2 = Open
//3 = Closing
//=================================//--------------------------
//QwState = 0; CLOSE
//--------------------------IF (NOT QCMD_OPEN AND QwState=3 AND NOT QMON_ERR AND FB_CLOSE) // OR (NOT QCMD_OPEN AND QwState=3 AND NOT QMON)THENQCLOSE := TRUE;QOPENING := FALSE;QOPEN := FALSE;QCLOSING := FALSE;QwState := 0;END_IF;//--------------------------
//QwState = 1; OPENING
//--------------------------IF (QCMD_OPEN AND (QwState = 0 OR QwState = 3)) THEN QCLOSE := FALSE;QOPENING := TRUE;QOPEN := FALSE;QCLOSING := FALSE;QwState := 1;END_IF;//--------------------------
//QwState = 2; OPEN
//--------------------------IF (QCMD_OPEN AND QwState=1 AND NOT QMON_ERR AND FB_OPEN) //OR (QCMD_OPEN AND QwState=1 AND NOT QMON)THENQCLOSE := FALSE;QOPENING := FALSE;QOPEN := TRUE;QCLOSING := FALSE;QwState := 2;END_IF;//--------------------------
//QwState = 3; CLOSING
//--------------------------IF (NOT QCMD_OPEN AND (QwState = 1 OR QwState = 2)) THENQCLOSE := FALSE;QOPENING := FALSE;QOPEN := FALSE;QCLOSING := TRUE;QwState := 3;END_IF;QLOCK:=IL_LIM OR IL_ABS;// Set State for HMI ===================================================QabStatePLC[0] := QCLOSE; // 1=CloseQabStatePLC[1] := QOPENING; // 1=OpeningQabStatePLC[2] := QOPEN; // 1=OpenQabStatePLC[3] := QCLOSING; // 1=ClosingQabStatePLC[4] := 0;QabStatePLC[5] := 0;QabStatePLC[6] := 0;QabStatePLC[7] := 0; QabStatePLC[8] := 1;//QMON; // 1=Feedback Monitoring ONQabStatePLC[9] := QMON_ERR; // 1=Error Feedback MonitoringQabStatePLC[10] := 0;QabStatePLC[11] := 0; QabStatePLC[12] := 0;QabStatePLC[13] := 0;QabStatePLC[14] := 0;QabStatePLC[15] := 0;QabStatePLC[16] := Q_AUTO; // 0=Manual 1=AutomaticQabStatePLC[17] := NOT LOCAL;//QREMOTE; // 0=Local 1=RemoteQabStatePLC[18] := L_SIM; // 0=Process 1=SimulationQabStatePLC[19] := 0;QabStatePLC[20] := 0;QabStatePLC[21] := 0;QabStatePLC[22] := 0;QabStatePLC[23] := 0;QabStatePLC[24] := QMON_ERR; // 1=ErrorQabStatePLC[25] := 0;//QERR_EXT; // 1=External ErrorQabStatePLC[26] := QLOCK; // 1=Block LockedQabStatePLC[27] := QLOCK; // 1=INTERLOCKQabStatePLC[28] := FB_OPEN; //阀门开到位 QabStatePLC[29] := FB_close; //阀门关到位 QabStatePLC[30] := 0;QabStatePLC[31] := 0;QabyState[0] :=QabyStatePLC[3];QabyState[1] :=QabyStatePLC[2];QabyState[2] :=QabyStatePLC[1];QabyState[3] :=QabyStatePLC[0];// TAGS for Edge detect==========================================AUTO_OLD := AUTO; MAN_OLD := MAN; M_OPEN_OLD:=M_OPEN;M_CLOSE_OLD:=M_CLOSE;
//reset commands ================================================OP_dwCmd := 16#0;
END_FUNCTION_BLOCK
SCL编写的阀门块实例相关推荐
- 西门子SCL编程:SCL编写的DCS电机块
N年之前,用S7-300做一个小型DCS项目,选用wincc为人机界面.项目中电机.泵.风机类比较多,于是下功夫研究编写这个电机块.功能确实强大,在wincc中自动生成图标,拽出来直接用就可. FUN ...
- python爬虫简单实例-Python 利用Python编写简单网络爬虫实例3
利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站"http://bbs.51tes ...
- OpenCV编写视频文件的实例(附完整代码)
OpenCV编写视频文件的实例 OpenCV编写视频文件的实例 OpenCV编写视频文件的实例 #include <iostream> // for standard I/O #inclu ...
- idea html ajax,在 IntelliJ IDEA 8.1中编写一个ajax jquery实例,取不到页面上的值
在 IntelliJ IDEA 8.1中编写一个ajax jquery实例,取不到页面上的值0 brnm12942014.08.17浏览115次分享举报 public class AjaxServle ...
- 用matlab做文字水印,3 一个用MATLAB编写的数字水印算法实例
3 一个用MATLAB编写的数字水印算法实例 为证明MATLAB的高效性与实现简便性,给出在Windows98环境下MATLAB5.3中调试通过的完整源程序. l 嵌入水印 %定义常量size=256 ...
- 西门子水处理1200PLC程序模板 Plc程序包含功能块,功能块为SCL编写 含模拟量换算功能块
SIEMENS/西门子水处理1200PLC程序模板 (1)西门子触摸屏程序,博图V16学习程序,可仿真实验 (2)Plc程序包含功能块,功能块为SCL编写,(要有一定基础才能读懂) (3)含模拟量换算 ...
- Linux编写脚本nsum求和,详解Linux Shell脚本编写技巧,附实例说明
原标题:详解Linux Shell脚本编写技巧,附实例说明 Linux Shell是一个很难的知识板块.虽然大家都认真学,基本的语法很都掌握,但有需求时,很难直接上手编程,要么写了很久,要么写不好!对 ...
- 【老生谈算法】matlab编写PSO算法及实例——PSO算法
用MATLAB编写PSO算法及实例 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]用MATLAB编写PSO算法及实例.doc ...
- cad动态块制作翻转_CAD创建动态块实例教程:旋转参数和动作的应用 - CAD自学网...
一.打开实例 1 里创建并保存的文件"我的动态块",也可以新建一个文件.在空白处画如图的图形,其中圆的半径为 5. 二.操作菜单"绘图"→"块&quo ...
- 西门子PLC—用 SCL 编写你的第一个 TIA 代码
前言: 使用梯形图编写程序时,博途编辑器是通过网络段,把程序分成一段一段的,编辑器可以插入若干个网络段,每一个网络段可以有各自的注释. 而SCL是文本语言,不分网络段(在LAD/FBD语言内增加SC ...
最新文章
- 整理了一下SQL Server里面可能经常会用到的日期格式转换方法
- Bzoj2337:[HNOI2011]XOR和路径
- 元宇宙大热后将陷低潮, 虚实互联网更准确, 2030前后才可能全面热启
- 区块链,数字资产货币开发
- 压力测试工具gatling安装和介绍
- POJ 3278 Catch That Cow(BFS)
- 区块链浏览器_欧科云链OKLink区块链浏览器,如何挖掘数据背后的价值?
- Orleans 知多少 | 3. Hello Orleans
- 【WebRTC---入门篇】(十五)WebRTC信令服务器实现
- python time sleep和wait_Python和硒:driver.implicitly_wait()和time.sleep()之间的区别...
- (递归7)生成可重集的排列
- 我们找了3家制造企业,问问他们是怎么破解供应链难题的
- 【华为云技术分享】区块链与数据库如何结合?
- 阿里之后 “安卓终结者”来了!
- python实时监控redis队列_Python的Flask框架应用调用Redis队列数据
- IMP导入数据 报错 IMP-00058 ORA-01691 IMP-00028
- Android7.0 MTK方案 静默安装和卸载
- nagios 监控memcached
- 网络神偷 v7.6 免费
- 爱奇艺落子IP源头 全产业链开放协同助攻原创内容