网站大量收购独家精品文档,联系QQ:2885784924

顺序控制系统安全编程及状态链模式.docVIP

顺序控制系统安全编程及状态链模式.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
顺序控制系统安全编程与状态链模式 杨敬东 (广东佛山菜鸟控制实验室) 摘要:本文阐述工业自动控制领域中,编写顺序控制程序的一种思维模式,便于识别程序中隐含的缺陷,尽量避免因程序缺陷引起的工业安全事故。 引言:一直以来,顺序控制系统的编程似乎被认为是简单的、枯燥的、没有挑战性的,不知是否这样的原因,对于顺序控制系统编程的安全性问题,往往不被设计人员所重视。而随着系统复杂度的增加,由软件缺陷引起的工业安全事故相信并不陌生,因此,各种安全壮健的软件编写模式,成为控制系统工作者应当重视的问题。受【美】Miro Samek博士所发明的“量子框架”的启发,本文提出一种适合于顺序控制系统安全设计的状态链模式,并在最后列出实现状态链的适合于单片机的C代码和适合于PLC的梯形图。值得一提的是,即使不专门设计状态链而用经典的嵌套Switch Case语句,或是其他的编程方法,在设计前绘制状态链,对理清思路、跟踪潜在的缺陷也有很大的帮助。 一个事例: 某冲压设备设计制造厂家生产的某型冲压机,由电动机驱动液压系统,完成产品的冲压过程,该机控制方式分为:运行方式1、运行方式2、运行方式3;每种运行方式下的工序又分为:送料、定位、夹紧、快进、冲压、吹风、出料、清除废料等多个行程,一个行程接一个行程,由此完成一个工作循环,且这些行程在不同的方式下有不同的次序和运行参数。某日,机器油路发生异响、冲压区内的定位机构又发生故障需要抢修,工人在冲压行程正在进行时按下了马达停止按钮,使全机停运。为节省时间,安排了2名工人分别对上述部位进行检修,工人为检修的方便,拆卸了冲压区的安全防护装置,在未断电的情况下,其中一人在冲压区重新调整定位机构。按照操作人员对这台机器存在的思维习惯:“开始工作时,先按启动马达按钮启动马达,然后按开始按钮,机器才会运行,开始按钮是两个串联的,安全性高,而且马达未启动时,即时按下开始按钮机器也不会开始运行”。按照这个习惯,另一名工人按下了马达启动按钮,试图观察油路情况,这时机器突然接着停止时的行程启动冲压,造成1人手部受伤。 事故原因 在日常工作中,人们往往对设置一些标志、一组数值或启动一个开关等事件怀有明确的目的,而对于何时恢复这些标志、数值或开关就往往糊涂了。例如2005年8月14日,一架太阳神航空522班机在起飞前的检查维修过程中,地面工程师将飞机的增压开关设置在手动模式进行测试,而在维修完毕没有将增压开关恢复为自动模式,当飞机升至万米高空,机内因欠压发生警报,鬼使神差,正副机长都将警报误判为空调系统故障,忙乱检查空调系统,不知不觉缺氧昏迷,多重疏忽的叠加造成飞机坠毁。 在上述液压机事故中,除了违反停机操作规程、未使用具备专业知识的维修人员,违反操作规程进行维修外,潜在的原因是控制器软件中,未充分考虑到安全性,以下是这台机器部分伪代码: if(MON==true) MoToOut=1; // 马达按钮按下,启动马达 if(MOFF==true) MoToOut=0; // 马达停止按钮按下,马达停 ……………… if(MoToOut==1) //如果马达已经开启 { if(FangShi==1) //如果是方式1,则按如下序列转换 { switch(Cur_Runing){ //执行状态转换和运行 case 0: ………………; if(Cur_Runing == 0 Star==1) //如果开始按钮按下 { Cur_Runing == 1; //置当前状态为“送料” ……………… } break; case 1: ………………; if(Cur_Runing == 1 K2==1 K3==1) { ……………… //置位某些并行状态 Cur_Runing == 2; // 置当前状态为“定位” } break; ……………… } } If(FangShi==2) //如果是方式2,则按如下规则转换 ………………; } ………………; 程序以Cur_Runing变量标识当前机器所处状态,0表示初始状态,1表示送料状态,2表示定位状态……,Star表示开始按钮,K1、K2等表示行程开关、传感器等。 以上第4行虽然设置了一个“马达启动后才能进入送料行程”的制约条件,但是当进入各个行程后,如果停止了马达,则Cur_Runing变量仍然停留在停止马达前的值,这时马达重新启动,则机器会在该行程的断点重新运行,于是就发生上述事故。

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档