【求助】西门子SCL 点击:318 | 回复:10



北北sty

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 8回
  • 年度积分:0
  • 历史总积分:169
  • 注册:2016年10月20日
发表于:2024-07-30 13:38:47
楼主

ARRAY[0-15] 其中2个bit 或者以上为1, 输出一个报警信号,使用SCL ,我使用FOR循环 然后累加的方式,做出来不太好使 ,有明白的给与指导。。。。

1分不嫌少!



卖艺不卖萌

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 28回
  • 年度积分:0
  • 历史总积分:196
  • 注册:2012年12月13日
发表于:2024-07-30 14:23:58
1楼

// 检查位数组中有多少个位为 1

FOR I := 0 TO 15 DO

    IF Array[I] THEN

        Count := Count + 1;

    END_IF;

END_FOR;


// 如果有 2 个或更多的位为 1,则触发报警

Alarm := (Count >= 2);


回复本条

    
  • 北北sty楼主

    谢谢

    2024-08-20 09:37:45回复

jeffleaf

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 51回
  • 年度积分:1
  • 历史总积分:72
  • 注册:2008年5月04日
发表于:2024-07-30 16:32:11
2楼

// 检查位数组中有多少个位为 1

FOR I := 0 TO 15 DO

    IF Array[I] THEN

        Count := Count + 1;

    END_IF;

END_FOR;


// 如果有 2 个或更多的位为 1,则触发报警

Alarm := (Count >= 2);

Count := 0;//加上这句,不然计数在扫描周期一直上涨

回复本条

    
  • 北北sty楼主

    谢谢

    2024-08-20 09:37:53回复

Q458751110

  • [版主]
  • 精华:0帖
  • 求助:1帖
  • 帖子:113帖 | 1531回
  • 年度积分:76
  • 历史总积分:16162
  • 注册:2006年4月04日
发表于:2024-07-30 18:27:53
3楼

习惯把Count := 0;放最前面

回复本条

    
  • 北北sty楼主

    谢谢

    2024-08-20 09:38:03回复

被风吹起的落叶

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 9回
  • 年度积分:117
  • 历史总积分:117
  • 注册:2024年2月02日
发表于:2024-08-01 17:08:19
4楼

   最笨的方法,用ARRAY[0-15] 绝对地址"DXD >2 AND DXD<>4 AND DXD<>8,16,32,64,128,256,......32768.",不用费心思,还没有bug。

回复本条

    
  • 卖艺不卖萌

    程序不光为了完成功能,还得考虑维护。

    2024-08-02 15:29:03回复

  • 被风吹起的落叶

    回复 @卖艺不卖萌: 总共14个值,一眼看尽,不需要维护。

    2024-08-03 08:03:45回复

  • 北北sty楼主

    嗯一开始用的这种

    2024-08-20 09:38:16回复


热门招聘
相关主题

官方公众号

智造工程师