回复:S7-300 SCL上升沿异常,无输出,麻烦大家指导!

已锁定

askab

  • 帖子

    405
  • 精华

    5
  • 被关注

    34

论坛等级:侠圣

注册时间:2005-07-24

黄金 黄金 如何晋级?

发布于 2023-04-15 08:16:22

4楼

当前用SCL编写一段模拟量报警程序,功能为工程量数值达到报警设定值,延时一段时间后,触发报警,上升沿指令和延时计时都是用SCL实现的。

///////////////////

  1. 这个是一个逻辑判断,用LAD 很简单的就可以实现,就是一个数据比较+ 通电延时。这里用SCL 显得效率低。

  2. 假如你有很太多个这样的数据比较判断,用SCL数组是比较合适的。

    example

    VAR_INPUT

    HH_level_set,H_level_set, L_level_set,LL_level_set:REAL;  //报警液位设定值

    Act_level:REAL;      // 实际液位值

    Alarm_switch_ON:BOOL:=false;  // 报警开关

    FP_1Sec:BOOL;        // 1秒时钟

    Fault_Reset:BOOL;          // 故障复位

    ODT_Time:INT;       //故障检测时间  单位为 秒

    END_VAR

  3. VAR_IN_OUT

  4.  Impls_1Sec_Aux:BOOL;

  5.  store_button:BOOL;

  6. END_VAR


  7. VAR_OUTPUT

  8. Alarm_enable:BOOL;   //报警使能   

  9. Impls_1Sec:BOOL; 

  10. HH_alarm,H_alarm,L_alarm,LL_alarm:BOOL;    // 报警输出 

  11. ODT_HH,ODT_H,ODT_L,ODT_LL:INT;   //时间

  12. END_VAR


  13. VAR_TEMP

  14. cond1,cond2,cond3,cond4:BOOL;

  15. END_VAR

  16. //单按钮启动/停止 液位报警开关,使能或禁止报警

  17. Alarm_enable:= ( Alarm_switch_ON AND NOT store_button ) XOR Alarm_enable ;

  18. store_button:= Alarm_switch_ON;

  19. // 定制 时钟上升沿

  20. Impls_1Sec:= FP_1Sec AND (NOT Impls_1Sec_Aux); 

  21. Impls_1Sec_Aux:= FP_1Sec;

  22. //条件判断

  23. cond1:= Alarm_enable AND (Act_level >= HH_level_set);

  24. cond2:= Alarm_enable AND (Act_level >= H_level_set) AND (Act_level < HH_level_set) ;

  25. cond3:= Alarm_enable AND (Act_level > LL_level_set) AND (Act_level <= L_level_set) ;

  26. cond4:= Alarm_enable AND (Act_level <= LL_level_set);

  27. //逻辑处理,此处实际是做了一个通电延时ODT 

  28. IF NOT Fault_Reset  THEN

  29.      IF NOT cond1 THEN

  30.         ODT_HH:= 0;

  31.         HH_alarm:=FALSE;

  32.     ELSE

  33.       IF Impls_1Sec   AND NOT HH_alarm THEN

  34.           ODT_HH:= ODT_HH + 1;

  35.        END_IF;

  36.         HH_alarm:= ODT_HH >= ODT_Time;

  37.     END_IF;

  38.     // cond 1,2,3,4 逻辑处理是一样的。

  39.       IF NOT cond2 THEN

  40.         ODT_H:= 0;

  41.         H_alarm:=FALSE;

  42.       ELSE

  43.       IF Impls_1Sec   AND NOT H_alarm THEN

  44.           ODT_H:= ODT_H + 1;

  45.        END_IF;

  46.         H_alarm:= ODT_H >= ODT_Time;

  47.       END_IF;


  48.         IF NOT cond3 THEN

  49.         ODT_L:= 0;

  50.         L_alarm:=FALSE;

  51.       ELSE

  52.       IF Impls_1Sec   AND NOT L_alarm THEN

  53.           ODT_L:= ODT_L + 1;

  54.        END_IF;

  55.         L_alarm:= ODT_L >= ODT_Time;

  56.       END_IF;


  57.         IF NOT cond4 THEN

  58.         ODT_LL:= 0;

  59.         LL_alarm:=FALSE;

  60.       ELSE

  61.       IF Impls_1Sec   AND NOT LL_alarm THEN

  62.           ODT_LL:= ODT_LL + 1;

  63.        END_IF;

  64.         LL_alarm:= ODT_LL >= ODT_Time;

  65.       END_IF;                      

  66. ELSE

  67.     

  68.   Impls_1Sec:=false;

  69.   ODT_HH:= 0;  ODT_H:= 0; ODT_L:= 0; ODT_LL:= 0;

  70.   HH_alarm:=FALSE; H_alarm:=FALSE;   L_alarm:=FALSE; LL_alarm:=FALSE;

  71.  

  72.        END_IF;

  73.        

  74. END_FUNCTION

    以上仅为个人意见,希望对你有帮助

大家同行,you ok ? me !
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54757条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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