技术论坛

中央报警系统的实验分享

作者 主题
游侠

经验值: 367
发帖数: 32
精华帖: 1
主题:【分享】中央报警系统的实验分享
精华帖精华帖星级3级 精编帖 推荐帖


只看楼主 只看精华 只看精编 楼主 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。

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




 
精华帖版主置评: 不错的分享。-yming
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1625997&b_id=50

游侠

经验值: 367
发帖数: 32
精华帖: 1
回复:中央报警系统的实验分享
精编帖 推荐帖


只看楼主 只看精华 只看精编 楼主 1楼 2020-05-29 21:17:40

接上帖。

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


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




 
以下网友喜欢您的帖子:

  
游侠

经验值: 367
发帖数: 32
精华帖: 1
回复:中央报警系统的实验分享
精编帖 推荐帖


只看楼主 只看精华 只看精编 楼主 2楼 2020-05-29 21:24:50

以下是FB_CenterAlarmSys的实现部分。

变量定义:









 
以下网友喜欢您的帖子:

  
至圣

经验值: 11843
发帖数: 859
精华帖: 1
回复:中央报警系统的实验分享
推荐帖


只看楼主 只看精华 只看精编 3楼 2020-05-30 13:10:18

谢谢大神
我要好好学习


 
以下网友喜欢您的帖子:

  
版主

经验值: 49636
发帖数: 15886
精华帖: 282
回复:中央报警系统的实验分享
精华帖精华帖星级4级 精编帖 推荐帖


只看楼主 只看精华 只看精编 4楼 2020-05-30 13:34:04

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


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


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


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


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


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


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



Zane 注册自动化系统工程师 Always save before download
精华帖版主置评: 值得楼主考虑。-yming
以下网友喜欢您的帖子:

  
游侠

经验值: 367
发帖数: 32
精华帖: 1
回复:中央报警系统的实验分享
精编帖 推荐帖


只看楼主 只看精华 只看精编 楼主 5楼 2020-05-30 14:29:14

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

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

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


 
以下网友喜欢您的帖子:

  
版主

经验值: 49636
发帖数: 15886
精华帖: 282
回复:中央报警系统的实验分享
精编帖 推荐帖


只看楼主 只看精华 只看精编 6楼 2020-05-30 16:10:02
以下是引用xiatianyun在2020-05-30 14:29:14的发言 >5楼

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

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

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

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


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


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
游侠

经验值: 367
发帖数: 32
精华帖: 1
回复:中央报警系统的实验分享
精编帖 推荐帖


只看楼主 只看精华 只看精编 楼主 7楼 2020-05-30 23:33:40

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


 
以下网友喜欢您的帖子:

  
版主

经验值: 49636
发帖数: 15886
精华帖: 282
回复:中央报警系统的实验分享
精编帖 推荐帖


只看楼主 只看精华 只看精编 8楼 2020-05-31 00:17:00
以下是引用xiatianyun在2020-05-30 23:33:40的发言 >7楼

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

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


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
侠圣

经验值: 3166
发帖数: 265
精华帖: 0
回复:中央报警系统的实验分享
精编帖 推荐帖


只看楼主 只看精华 只看精编 9楼 2020-05-31 02:28:16

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


 
以下网友喜欢您的帖子:

  
游侠

经验值: 367
发帖数: 32
精华帖: 1
回复:中央报警系统的实验分享
精编帖 推荐帖


只看楼主 只看精华 只看精编 楼主 12楼 2020-05-31 12:21:52
你说得对,确实需要分组分类处理,不可能每一个报警都拿来点亮灯和拉响警报的。谢谢!
 
以下网友喜欢您的帖子:

  
侠客

经验值: 799
发帖数: 67
精华帖: 0
回复:中央报警系统的实验分享


只看楼主 只看精华 只看精编 15楼 2020-06-02 11:22:10

大神对决,各有千秋,谢谢你们的分享。



 
以下网友喜欢您的帖子:

  
侠圣

经验值: 3166
发帖数: 265
精华帖: 0
回复:中央报警系统的实验分享


只看楼主 只看精华 只看精编 16楼 2020-06-02 11:59:45

有上位机的就简单了,直接根据报警类型,报警参数名称,报警值,报警时间,直接发送到上位机就可以了,上位机有声光提示后,根据日志,一条条查

我是不是把问题看的太简单了


 
以下网友喜欢您的帖子:

  
新手

经验值: 48
发帖数: 7
精华帖: 0
回复:中央报警系统的实验分享


只看楼主 只看精华 只看精编 17楼 2020-06-03 10:24:27

看着感觉有些懵   哈哈哈,还得消化消化


 
以下网友喜欢您的帖子:

  
至圣

经验值: 22041
发帖数: 9954
精华帖: 114
回复:中央报警系统的实验分享
精编帖


只看楼主 只看精华 只看精编 18楼 2020-06-04 11:14:37

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

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





微信公众号:万泉河知识分享
以下网友喜欢您的帖子:

  
至圣

经验值: 22041
发帖数: 9954
精华帖: 114
回复:中央报警系统的实验分享
精编帖


只看楼主 只看精华 只看精编 19楼 2020-06-04 11:16:29

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


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


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


还是人的精力更宝贵。 


还是优雅些比较好。  


微信公众号:万泉河知识分享
以下网友喜欢您的帖子:

  
版主

经验值: 49636
发帖数: 15886
精华帖: 282
回复:中央报警系统的实验分享
精编帖


只看楼主 只看精华 只看精编 21楼 2020-06-04 21:42:21
以下是引用万泉河在2020-06-04 11:16:29的发言 >19楼

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


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


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


还是人的精力更宝贵。 


还是优雅些比较好。  

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


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


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


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


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


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
奇侠

经验值: 5952
发帖数: 475
精华帖: 0
回复:中央报警系统的实验分享


只看楼主 只看精华 只看精编 22楼 2020-06-05 08:24:31
以下是引用Zane在2020-06-04 21:42:21的发言 >21楼

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


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


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


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


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

以下是引用万泉河在2020-06-04 11:16:29的发言 >19楼:我支持楼主,我们做...

引用19楼详细内容:

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


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


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


还是人的精力更宝贵。 


还是优雅些比较好。  

每天看大神们评论,有意思!


海纳百川,厚德务实!
以下网友喜欢您的帖子:

  
侠圣

经验值: 2041
发帖数: 348
精华帖: 0
回复:中央报警系统的实验分享


只看楼主 只看精华 只看精编 23楼 2020-06-05 12:36:51
以下是引用xiatianyun在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开始至2048,是bit的位置索引。一般把索引设计成FB的Static变量,这样每个报警信号都需要实例化,明显得不偿失。我把存放报警索引的变量设计成存放在FB外部,以接口引入FB,这样就不用每个报警都实例化了。可以设计成FC,采用公共DB配合,但明显增加了依赖性。所以还是设计成FB,索引使用接口引入。其实外部设计索引变量一般处理比较容易,只需在设备控制FB中多设计一个Static变量就可以了,只不过这个变量是由集中报警FB管理的。有些牵强,不过可以只实例化一个FB。

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



smart 200PLC可以吗


有你帮助有我成长
以下网友喜欢您的帖子:

  
游侠

经验值: 367
发帖数: 32
精华帖: 1
回复:中央报警系统的实验分享
精编帖


只看楼主 只看精华 只看精编 楼主 24楼 2020-06-05 20:19:29
以下是引用Zane在2020-06-04 21:42:21的发言 >21楼

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


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


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


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


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

以下是引用万泉河在2020-06-04 11:16:29的发言 >19楼:我支持楼主,我们做...

引用19楼详细内容:

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


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


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


还是人的精力更宝贵。 


还是优雅些比较好。  

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

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

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

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



 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
×
扫描打开手机版
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。