2023.7.4练习——报警灯控制程序

已锁定

龟仙人

西门子1847工业学习平台

  • 帖子

    928
  • 精华

    15
  • 被关注

    162

论坛等级:奇侠

注册时间:2006-12-15

普通 普通 如何晋级?

2023.7.4练习——报警灯控制程序

4613

27

2023-07-04 21:07:44

        当有新的报警事件到来时,要求报警灯报警,复位后如果还是有新的报警到来,需要再次复位,这样如此循环下去。

        如果报警变量较少,可以使用报警位的上升沿实现,如果报警变量达到几百个甚至更多,这种方法就不好用了,所以在程序规划时把报警分为警告和故障,就是两级报警,分别放在两个DB块中,方便扩展,同时也方便使用连续地址访问,实现批量操作。每个扫描周期把变量进行转存一下,比较本周起数据与上个周期的数据进行比较,如果数据发生变化,即两次读取的数据不相等,则进行判断,通过FOR循环,前后两个字的每一位进行异或(XOR)运算,如果结果为1,则判断本周期的该位是否位1(异或的结果为1有可能是报警消除造成的),如果为1,则说明有新的报警到来,触发报警灯亮起,同时退出FOR 循环。


//由于FC对于Input变量不能使用At访问,这里先将Input变量写入到Temp区域变量中

//然后再使用AT变量类型,将Word分解为16元素的BOOL数组

//这里不实用var.%xn的方式访问,是因为要用到动态访问变量,.%xn中的n不能使用变量。

#Now_Word_Temp := #Now_Word; 

#Last_Word_Temp := #Last_Word;

#Rst := FALSE;//初始化临时变量

FOR #Num := 0 TO 15 DO

    IF #Now_Word_AT[#Num] XOR #Last_Word_AT[#Num] THEN //异或计算判断本次与上次两个位是否一致,

        IF #Last_Word_AT[#Num] THEN //如果数据不一致,并且本次数据值为1,则存储临时结果

            #Rst := True; 

            EXIT; //退出For循环

        END_IF;

    END_IF;

END_FOR;

#F_NewAlarmArrive := #Rst; //将结果写入FC返回值

以上是判断是否有新的报警到来的程序

2023.7.4练习——报警灯控制程序 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10592条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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