发一个以前做项目用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编写的阀门块实例相关推荐

  1. 西门子SCL编程:SCL编写的DCS电机块

    N年之前,用S7-300做一个小型DCS项目,选用wincc为人机界面.项目中电机.泵.风机类比较多,于是下功夫研究编写这个电机块.功能确实强大,在wincc中自动生成图标,拽出来直接用就可. FUN ...

  2. python爬虫简单实例-Python 利用Python编写简单网络爬虫实例3

    利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站"http://bbs.51tes ...

  3. OpenCV编写视频文件的实例(附完整代码)

    OpenCV编写视频文件的实例 OpenCV编写视频文件的实例 OpenCV编写视频文件的实例 #include <iostream> // for standard I/O #inclu ...

  4. idea html ajax,在 IntelliJ IDEA 8.1中编写一个ajax jquery实例,取不到页面上的值

    在 IntelliJ IDEA 8.1中编写一个ajax jquery实例,取不到页面上的值0 brnm12942014.08.17浏览115次分享举报 public class AjaxServle ...

  5. 用matlab做文字水印,3 一个用MATLAB编写的数字水印算法实例

    3 一个用MATLAB编写的数字水印算法实例 为证明MATLAB的高效性与实现简便性,给出在Windows98环境下MATLAB5.3中调试通过的完整源程序. l 嵌入水印 %定义常量size=256 ...

  6. 西门子水处理1200PLC程序模板 Plc程序包含功能块,功能块为SCL编写 含模拟量换算功能块

    SIEMENS/西门子水处理1200PLC程序模板 (1)西门子触摸屏程序,博图V16学习程序,可仿真实验 (2)Plc程序包含功能块,功能块为SCL编写,(要有一定基础才能读懂) (3)含模拟量换算 ...

  7. Linux编写脚本nsum求和,详解Linux Shell脚本编写技巧,附实例说明

    原标题:详解Linux Shell脚本编写技巧,附实例说明 Linux Shell是一个很难的知识板块.虽然大家都认真学,基本的语法很都掌握,但有需求时,很难直接上手编程,要么写了很久,要么写不好!对 ...

  8. 【老生谈算法】matlab编写PSO算法及实例——PSO算法

    用MATLAB编写PSO算法及实例 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]用MATLAB编写PSO算法及实例.doc ...

  9. cad动态块制作翻转_CAD创建动态块实例教程:旋转参数和动作的应用 - CAD自学网...

    一.打开实例 1 里创建并保存的文件"我的动态块",也可以新建一个文件.在空白处画如图的图形,其中圆的半径为 5. 二.操作菜单"绘图"→"块&quo ...

  10. 西门子PLC—用 SCL 编写你的第一个 TIA 代码

    ​前言: 使用梯形图编写程序时,博途编辑器是通过网络段,把程序分成一段一段的,编辑器可以插入若干个网络段,每一个网络段可以有各自的注释. 而SCL是文本语言,不分网络段(在LAD/FBD语言内增加SC ...

最新文章

  1. 整理了一下SQL Server里面可能经常会用到的日期格式转换方法
  2. Bzoj2337:[HNOI2011]XOR和路径
  3. 元宇宙大热后将陷低潮, 虚实互联网更准确, 2030前后才可能全面热启
  4. 区块链,数字资产货币开发
  5. 压力测试工具gatling安装和介绍
  6. POJ 3278 Catch That Cow(BFS)
  7. 区块链浏览器_欧科云链OKLink区块链浏览器,如何挖掘数据背后的价值?
  8. Orleans 知多少 | 3. Hello Orleans
  9. 【WebRTC---入门篇】(十五)WebRTC信令服务器实现
  10. python time sleep和wait_Python和硒:driver.implicitly_wait()和time.sleep()之间的区别...
  11. (递归7)生成可重集的排列
  12. 我们找了3家制造企业,问问他们是怎么破解供应链难题的
  13. 【华为云技术分享】区块链与数据库如何结合?
  14. 阿里之后 “安卓终结者”来了!
  15. python实时监控redis队列_Python的Flask框架应用调用Redis队列数据
  16. IMP导入数据 报错 IMP-00058 ORA-01691 IMP-00028
  17. Android7.0 MTK方案 静默安装和卸载
  18. nagios 监控memcached
  19. 网络神偷 v7.6 免费
  20. 爱奇艺落子IP源头 全产业链开放协同助攻原创内容

热门文章

  1. 计算机桌面ico图标,.ico格式图标制作转换教程及DIY桌面图标的方法
  2. 【论文笔记】FlowNet:有监督的光流估计(optical flow estimation)网络
  3. 微信小程序-TabBar用法
  4. 最新支持备案域名后缀列表
  5. 【bat】做个一键连接网络打印机的bat
  6. 多目标跟踪(Multi-Object-Tracking)入门
  7. 微信小程序展示弹窗的几种方式
  8. mbedtls | 01 - 移植mbedtls库到STM32的两种方法
  9. android支付宝支付界面设计,支付宝移动端App ui界面设计规范
  10. 最新抖音视频无水印解析接口-突破频率限制