中央报警系统的实验分享

已锁定

xiatianyun

  • 帖子

    735
  • 精华

    10
  • 被关注

    16

论坛等级:侠圣

注册时间:2020-05-09

钻石 钻石 如何晋级?

中央报警系统的实验分享

5079

42

2020-05-29 20:39:39

star star star

很少到西门子论坛来,原因是多年前访问西门子论坛总是很慢,结果就没有来学习了。

最近偶尔才发现原来论坛访问速度还可以,就到处看看。

发现了一个多年前的帖子,讨论集中报警系统如何实现的,大家讨论得很热烈。可能限于我的水平只能理解这些基本的功能讨论吧。

有一些实现的回帖,不过都是STL代码的,理解很费劲。(我发现你们都是这么牛X,这种问题的解决也用STL实现,牛。)

我试着去实现了我的方案,今天写个分享帖。

其实问题是这样的,我重复下:系统中会有很多报警信号产生,分散在各处,需要做集中报警。如果系统有新报警就使报警笛发声直至消声按钮按下;如果系统存在报警就点亮报警灯,直至报警信号消失后按下确认按钮。也就是提醒CRO的作用。

原帖如下:

http://www.ad.siemens.com.cn/club/bbs/post_one_floor.aspx?b_id=4&a_id=962593


版主Zane分享了他的方案,用STL写的,费了好大劲我才弄清楚。不过这个方案并没有涉及如何采集报警信号,只是实现了如何处理这些集中报警信号。他采用的是循环比较新数据和旧数据,得出是否产生新报警。如果报警缓冲区定义为128个word,需要循环处理128次。定义的缓冲区自然比实际需要的多,所以效率还是不高。

我的方案是这样的:在每个产生报警信号的逻辑程序中就处理采集功能,不仅采集还得出是否是新报警信号和是否存在报警,这个功能同时完成,并不需要专门的循环比较处理。报警缓冲区设计为128个word,和版主的一样。word的每个bit都代表一个报警信号,这样可以存放128*16=2048个报警信号。如果需要更多缓冲区,就直接修改缓冲区上限常数就可以了。

问题的关键其实是如何定位某个报警在报警缓冲区中的位置,需要一个变量来存放这个报警的索引。索引从0开始至2047,是bit的位置索引。一般把索引设计成FB的Static变量,这样每个报警信号都需要实例化,明显得不偿失。我把存放报警索引的变量设计成存放在FB外部,以接口引入FB,这样就不用每个报警都实例化了。可以设计成FC,采用公共DB配合,但明显增加了依赖性。所以还是设计成FB,索引使用接口引入。其实外部设计索引变量一般处理比较容易,只需在设备控制FB中多设计一个Static变量就可以了,只不过这个变量是由集中报警FB管理的。有些牵强,不过可以只实例化一个FB。

先到这里,一会有空再截图。



中央报警系统的实验分享 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有12957条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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