技术论坛

 中央报警系统的实验分享

返回主题列表
作者 主题
xiatianyun
侠圣

经验值:4857
发帖数:735
精华帖:10
楼主    2020-05-29 20:39:39
主题:中央报警系统的实验分享 精华帖  精编帖 

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

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

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

有一些实现的回帖,不过都是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。

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



xiatianyun
侠圣

经验值:4857
发帖数:735
精华帖:10
1楼    2020-05-29 21:17:40
精编帖  主题:回复:中央报警系统的实验分享

接上帖。

报警信号集中采集后就需要根据是否有报警和是否有新报警驱动报警灯和报警笛了,这个比较简单,因为采集部分已经给出了。


调用中央报警系统功能块就像上图一样,通过bi_Sel选择是驱动报警灯还是只是报警信号采集。



xiatianyun
侠圣

经验值:4857
发帖数:735
精华帖:10
2楼    2020-05-29 21:24:50
精编帖  主题:回复:中央报警系统的实验分享

以下是FB_CenterAlarmSys的实现部分。

变量定义:








Zane
版主

经验值:76319
发帖数:19347
精华帖:378
4楼    2020-05-30 13:34:04
精华帖  精编帖  主题:回复:中央报警系统的实验分享

谢谢楼主花精力研究了我多年前的例程。


但我觉得,楼主还是没有研究透彻,可能因为是语句表的关系吧


首先,我的例程里虽然开了128个字的缓存,但实际使用并不需要循环比较128次,循次数是根据报警数量可以修改的。


其次,是否使用FB还是FC,其实都是可以实现的,至多是使用全局DB还是背景DB的问题,至多是开以字为单元的数组还是开以BOOL变量为单元的数组而已。


第三,报警的生成是控制对象的控制逻辑生成的,直接把报警标志位赋值给报警集中处理功能块的报警DB即可,你这个每个报警还要调用一次功能块,并且功能块里的程序还是有一半用不上的,我不知道这么做除了浪费宝贵的内存资源,还能有啥好处?


          为啥没有涉及信号的采集,其实就是因为越简单越好。当然会有一些特殊的需求,你没说,我也不讨论了。


          还有,本身对于报警的处理,就有集中式处理与分散式处理的方法之分,但最终的响应比如声光报警却是需要汇总到一处的,不是吗?


Zane 注册自动化系统工程师 Always save before download
xiatianyun
侠圣

经验值:4857
发帖数:735
精华帖:10
5楼    2020-05-30 14:29:14
精编帖  主题:回复:中央报警系统的实验分享

第一次发帖就获版主批为精华贴,很兴奋呀。

版主说的报警的生成在控制对象的逻辑处,这点和我一致。不过你直接赋值给报警DB是怎么实现的呢?无外乎还是要定位在哪里和赋值嘛。

每次都执行FB确实会增加一些开销,不过因为这个FB只实例化了一个,调用并不会比普通的控制逻辑多多少开销。关键是简单,不会遗漏。

Zane
版主

经验值:76319
发帖数:19347
精华帖:378
6楼    2020-05-30 16:10:02
精编帖  主题:回复:中央报警系统的实验分享

直接用数组变量不就行吗?


比如某电机的故障输出位直接赋值 ALARM_DB.ALARM[100]

Zane 注册自动化系统工程师 Always save before download
xiatianyun
侠圣

经验值:4857
发帖数:735
精华帖:10
7楼    2020-05-30 23:33:40
精编帖  主题:回复:中央报警系统的实验分享

如果不用程序自动分配数组单元,你得有很好的记忆力来记住我到底用到几号了。

Zane
版主

经验值:76319
发帖数:19347
精华帖:378
8楼    2020-05-31 00:17:00
精编帖  主题:回复:中央报警系统的实验分享

编程不需要什么好的记忆力,再多的报警,也是要分类分组处理的,顺序依次编排的方法是不可取的

Zane 注册自动化系统工程师 Always save before download
楼前
奇侠

经验值:5374
发帖数:557
精华帖:0
9楼    2020-05-31 02:28:16
精编帖  主题:回复:中央报警系统的实验分享

单PLC报警处理(没有HMI),只有报警灯和声音提示,手动消除声音(声音肯定是烦人的),在处理灯的显示,集中处理,就只有一个灯提示,有报警灯亮,没有灯灭。搞个数值,有报警+1,处理一个-1.如果=0,没有报警。

xiatianyun
侠圣

经验值:4857
发帖数:735
精华帖:10
12楼    2020-05-31 12:21:52
精编帖  主题:回复:中央报警系统的实验分享
你说得对,确实需要分组分类处理,不可能每一个报警都拿来点亮灯和拉响警报的。谢谢!
万泉河
至圣

经验值:28649
发帖数:10889
精华帖:131
18楼    2020-06-04 11:14:37
精编帖  主题:回复:中央报警系统的实验分享

【万泉河】如何优雅地点亮系统中央声光报警

https://mp.weixin.qq.com/s/xJp2GewM0qfrfw_adNJn6w




微信公众号:PLC标准化编程,ZHO6371995
万泉河
至圣

经验值:28649
发帖数:10889
精华帖:131
19楼    2020-06-04 11:16:29
精编帖  主题:回复:中央报警系统的实验分享

我支持楼主,我们做法基本如出一辙。 


我不认为内存有什么宝贵的。


除非不够用。 否则闲着也是闲着。 


还是人的精力更宝贵。 


还是优雅些比较好。  

微信公众号:PLC标准化编程,ZHO6371995
Zane
版主

经验值:76319
发帖数:19347
精华帖:378
21楼    2020-06-04 21:42:21
精编帖  主题:回复:中央报警系统的实验分享

有优雅地把S7-1200换成S7-1500的吗?


有优雅地把CPU1511换成CPU1513或1515-2的吗?


有几个OEM工程师的老板会支持这种优雅?


人的精力固然值钱,这一点毋庸置疑,但一套两套的算了,如果五十套一百套一千套呢?老板绝对是拿几套的差价给你发奖金,死活也让你改了去。


这个优雅,无论在程序的经济性与可靠性上都还是存在问题的,首先代码量大幅增加,增加系统的开销,其次,逻辑程序中大量的非全扫描语句,影响扫描周期的稳定。

Zane 注册自动化系统工程师 Always save before download
xiatianyun
侠圣

经验值:4857
发帖数:735
精华帖:10
24楼    2020-06-05 20:19:29
精编帖  主题:回复:中央报警系统的实验分享

优雅不优雅的我不能理解。

不过编程确实是有套路可循的,学习套路才能提高自己。

对于PLC目前的硬件来说确实需要考虑实现的代码量,高级语言的编程思想不能照搬,但又确实可以借鉴。

我想西门子的博途软件也在靠近传统编程思想。


394273302
侠士

经验值:1021
发帖数:249
精华帖:0
25楼    2020-06-05 22:37:10
精编帖  主题:回复:中央报警系统的实验分享

 当我看到这个帖子的时候,真的很兴奋。在12年的时候做过几个项目需要这个功能的,当初都是一个报警一个上升沿做的,报警多的时候确实很麻烦。后来很少接触这么多报警的项目就搁置了,17年的时候这个问题有重新出现了。我曾经想过数报警的个数,因为报警是个动态的,两个周期内的个数可能一样但是报警的位置可能不一样,就这样一直没有找到好的解决办法。直到看到这个帖子,看到那么多大神给出的建议。我在研究z版的代码,因为不会stl 这两天恶补了一下stl寻址,可惜本人愚钝,还未研究明白。思路知道是怎么样的,只是不知道代码怎么实现。我把z版的代码抄下来,发现那个循环不走,不知道问题出在哪里。

多多学习
Zane
版主

经验值:76319
发帖数:19347
精华帖:378
27楼    2020-06-06 11:17:11
精编帖  主题:回复:中央报警系统的实验分享

看一下变量的初始值定义。


楼主还没转博途吗?不应该呀!

Zane 注册自动化系统工程师 Always save before download
Zane
版主

经验值:76319
发帖数:19347
精华帖:378
28楼    2020-06-06 11:19:36
精编帖  主题:回复:中央报警系统的实验分享

博途是继承了传统的创新,向传统靠近那是走回头路。

Zane 注册自动化系统工程师 Always save before download
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。