PLC 设置模拟量的批量报警程序 原创

已锁定

柳叶飘飘

  • 帖子

    95
  • 精华

    7
  • 被关注

    195

论坛等级:侠圣

注册时间:2016-12-08

黄金 黄金 如何晋级?

PLC 设置模拟量的批量报警程序 原创

8412

29

2018-01-01 00:45:55

手里有个项目 要求报警设置要在PLC中而不是在上位机中使用报警,其实也挺坑的。不过报警做到PLC里面的好处就是电脑关机了这些报警参数依然存在。在使用该程序时需要结合我写的批量转换程序块配合使用代码论坛里面有。请看源代码,其实特简单。该程序通过配合模拟量的批量转换块 可以实现大批量的报警参数的设定以及使能功能。

//#############################################

//仪表报警设定块

//配合模拟量批量转换块使用

//EBC 20171220

//#############################################




FUNCTION FC11 :VOID

TITLE = '仪表报警设定'

//

// 仪表设定警,需结合模拟量批量转换程序使用

//

VERSION: '1.0'

AUTHOR: EBCLW

NAME: AI_ALM

FAMILY: EBC

KNOW_HOW_PROTECT

VAR_TEMP

    I:INT;//循环变量

    VALUE:REAL;

    SET_HH:REAL;

    SET_H:REAL;

    SET_L:REAL;

    SET_LL:REAL;

    EN_HH:BOOL;

    EN_H:BOOL;

    EN_L:BOOL;

    EN_LL:BOOL;

    HH:BOOL;

    H:BOOL;

    L:BOOL;

    LL:BOOL;

    ERR:BOOL;

    RST_ALM:BOOL;

    AI_VALUE:REAL;

    AI_ERR:BOOL;

 END_VAR


VAR_INPUT


NUM:INT:=10;//需要报警的信号数量(连续)

AI_BLOCK:BLOCK_DB;//报警仪表数据块编号

ALM_DATA:BLOCK_DB;//报警数据块编号

END_VAR


FOR I:= 1 TO NUM  BY 1 DO

  //-----------------------ALM_DATA---------------------------------------------------

  //值=ALM_DATA.DD[(I-1)*22] =ALM_DATA.DD[(I-1)*22] 

  // 高高限设定= ALM_DATA.DD[(I-1)*22+4] =ALM_DATA.DD[22*I-18]

  //高限设定=ALM_DATA.DD[(I-1)*22+8] =ALM_DATA.DD[22*I-14]

  // 低限设定=ALM_DATA.DD[(I-1)*22+12] =ALM_DATA.DD[22*I-10]

  //低低限设定=ALM_DATA.DD[(I-1)*22+16] =ALM_DATA.DD[22*I-6]

  // 高高限报警使能=ALM_DATA.DX[(I-1)*22+20,0] =ALM_DATA.DX[22*I-2,0]

  // 高限报警使能=ALM_DATA.DX[(I-1)*22+20,1] =ALM_DATA.DX[22*I-2,1]

  //低限报警使能= ALM_DATA.DX[(I-1)*22+20,2]  =ALM_DATA.DX[22*I-2,2]

  // 低低报警使能= ALM_DATA.DX[(I-1)*22+20,3]  =ALM_DATA.DX[22*I-2,3]

  // 高高报警=ALM_DATA.DX[(I-1)*22+20,4]  =ALM_DATA.DX[22*I-2,4]

  //高报警 =ALM_DATA.DX[(I-1)*22+20,5]  =ALM_DATA.DX[22*I-2,5]

  //低报警 =ALM_DATA.DX[(I-1)*22+20,6]  =ALM_DATA.DX[22*I-2,6]

  //低低报警 =ALM_DATA.DX[(I-1)*22+20,7]  =ALM_DATA.DX[22*I-2,7]

  //设备故障 =ALM_DATA.DX[(I-1)*22+21,0]  =ALM_DATA.DX[22*I-1,0]

  //故障复位= ALM_DATA.DX[(I-1)*22+21,2] =ALM_DATA.DX[22*I-1,1]

   //---------------------------AI_BLOCK----------------------------------------------

   //值=AI_BLOCK.DD[(I-1)*6]

   //错误=AI_BLOCK.DX[(I-1)*6+2,0]=AI_BLOCK.DX[(I*6-4,0]

   //----------------------------开始赋值到-----------------------------------------


    //AI_BLOCK.DX[I*6-4,0]:=AI_ERR;

    

    ALM_DATA.DD[(I-1)*22]:= AI_BLOCK.DD[(I-1)*6];

  

    VALUE:=DWORD_TO_REAL(ALM_DATA.DD[(I-1)*22]);

      //输入参数

    SET_HH :=DWORD_TO_REAL(ALM_DATA.DD[22*I-18]);

    SET_H:=DWORD_TO_REAL(ALM_DATA.DD[22*I-14]);

    SET_L:=DWORD_TO_REAL(ALM_DATA.DD[22*I-10]);

    SET_LL :=DWORD_TO_REAL(ALM_DATA.DD[22*I-6]);

    EN_HH:=ALM_DATA.DX[22*I-2,0];

    EN_H:=ALM_DATA.DX[22*I-2,1];

    EN_L:=ALM_DATA.DX[22*I-2,2];

    EN_LL:=ALM_DATA.DX[22*I-2,3];


 


    //报警输出

    IF EN_HH & VALUE>=SET_HH THEN

        HH:=1;

    ELSE

        HH:=0;

    END_IF;

    IF EN_H & VALUE>=SET_H THEN

         H:=1;

        ELSE

         H:=0;

    END_IF;

    IF EN_L & VALUE<=SET_L THEN

        L:=1;

    ELSE

        L:=0;

    END_IF;

    IF EN_LL & VALUE<=SET_L THEN

        LL:=1;

    ELSE

        LL:=0;

    END_IF;

        //输出状态

    ALM_DATA.DX[22*I-2,4]:=HH;

    ALM_DATA.DX[22*I-2,5]:=H;

    ALM_DATA.DX[22*I-2,6]:=L;

    ALM_DATA.DX[22*I-2,7]:=LL; 

        //输入参数

    RST_ALM:=ALM_DATA.DX[22*I-1,1];//暂未使用复位信号故障信号直接转出

    //故障输出

    ALM_DATA.DX[22*I-1,0]:=AI_BLOCK.DX[I*6-2,0];

    

END_FOR;


END_FUNCTION

//原创程序 欢迎交流 QQ 275578306

PLC 设置模拟量的批量报警程序 原创 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54756条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。