电工学习网

 找回密码
 立即注册
查看: 2102|回复: 0
打印 上一主题 下一主题

模拟量输入程序的应用一例

[复制链接]
跳转到指定楼层
楼主
发表于 2019-5-1 20:19:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    前一段时间,在“找答案”栏目中看到一个贴子,提问是解释一段程序。这让我想起多年前一段很有“深意的”模拟量处理程序,至今不忘,这不仅仅是它的控制方式和编程语言,还是一块我慢慢能够进入的西门子数控领域的入门“砖”,故“触景生情”拿来说说。
   这段程序是西门子840D系统中,控制一个顶料器压力控制范围的程序,具体程序如下所示:
      L     "Analog Ausst.Spi.oben"     //Druck vom Analogeingang顶料器向上检测输入输入
      L     DB20.DBW    0               //plc MD 14510[0]   User_Data_Int参数值
      /D   
      T     #Ist_Druck_auf              //Istdruck通过参数计算到一个压力值Bar     
      A(   
      L     #Ist_Druck_auf              //Istdruck
      L     280
      <D                              //如果检测到压力大于280Bar
      )   
      JC    M005
      L     0
      T     #Ist_Druck_auf              //Bei 躡erlauf 0 setzen
                                       //作出相应的超压力保护处理
M005: NOP   0
//上述程序段的含义是判断所检测的压力是否超出判断范围,如果压力在正常范围,那么,继续执行下面的程序段//
//将模拟量输入数据读入并转换//
      L     #Ist_Druck_auf
      DTB                             //将输入的数据转换
      T     #Anzeige_in_Bar_Dr_auf      //Baranzeige
//计算压力值的百分数,除4相当于25%//
      L     #Sollwert_Ausstosser_auf
      L     4
      /D   
      T     #Rechen_Druck               //25% vom Solldruck
//检测压力值百分数的上限//
      L     #Sollwert_Ausstosser_auf
      L     #Rechen_Druck
      +D   
      T     #Rechen1_Druck              //Solldruck plus 上限125%
//检测压力值百分数的下限//
      L     #Sollwert_Ausstosser_auf
      L     #Rechen_Druck
      -D   
      T     #Rechen2_Druck              //Solldruck minus 下限75%
//如果判断压力值在75%~125%,那么,启动延时定时器T47//
      A(   
      L     #Ist_Druck_auf              //nc设置顶料器向上
      L     #Rechen1_Druck
      <=D  
      )     
      A(   
      L     #Ist_Druck_auf
      L     #Rechen2_Druck
      >=D  
      )   
      L     S5T#500MS
      SD    "verz.Ausstosser oben"      //verz鰃ert Ausstosser oben定时器T47
//如果判断压力值OK,则输出一个控制标志位//
      A     "verz.Ausstosser oben"
      =     #Druck_auf_ok               //Meldung Ausstosser ist oben
   上述程序段是设备系统中,一个顶料器动作时的压力判断,当“#Druck_auf_ok”为1,执行顶料器向上顶料的动作,反之,不执行动作并报警,对应的程序段图示:内部变量对应关系。

   如果“#Druck_auf_ok”不等于1,那么,下面的报警程序段被触发报警,图示:
      A     "Chan1".MDyn[20]                 //向上NCK指令
      S     "ALMSG_DB".C1.RID_5102xx[19]    //BM 510219  einlesesperre     
A     "DB Ausstoss Spi".Druck_auf_ok      //DB103.DBX38.0对应于#Druck_auf_ok内部变量
      O     "ZM Taste Reset"                            //MCP板上的复位按钮
      R     "ALMSG_DB".C1.RID_5102xx[19]
   如果“#Druck_auf_ok”不等于1,那么,无法复位被NCK指令(M20)执行时的置位,故510219#报警被触发。
   这里感觉比较有“深意”的是程序,并不采用我们常用的方式,先把模拟量转换为实际工程量,而是只进行一个简单的“换算”,得到一个压力数值,然后利用这个数值,进行上、下限的计算,达到压力数据的上限和下限这2个数据。由于这个数据可能会在实际应用中出现的小幅震荡,适当的延时在这里加入且到好处。
   这个程序在实际应用中,曾经有一段时间由于该系统的液压泵泵头柱塞磨损,引起的系统压力下降,致使“#Druck_auf_ok”不等于1,我在检查外围没有不利于安全的前提下,曾经把这个压力判断的计算程序由25%扩大到50%,图示:
//计算压力值的百分数,除2相当于50%//
      L     #Sollwert_Ausstosser_auf
      L     2                           //由除4改为除2
      /D   
      T     #Rechen_Druck               //50% vom Solldruck
通过这一点修改,能够“骗过”这段压力检测程序段,临时达到处理问题的目的,等待备件到来更换。另外一次是传感器压力输出值偏移引起,我也是通过加加减减的简单运算,把偏移量修正到一个标定的范围。
    看别人编写的程序,我始终感觉是一件非常“痛苦”的工作。一来每一个的编写程序员的习惯不同,二来,对整体控制程序理解不深时,无法完整理解程序的点点滴滴,来来回回的跳转会把自己本已经纠结的心搞“糊涂”的。同样,我可能这样写帖,也可能会给大家参考带来一些困惑,毕竟每个人理解程序的侧重面可能会有差异。但是,作为一名维保人员只能耐着自己的性子,反反复复的看程序,把不理解的程序段看懂看明白为止,建议在线看程序是快速理解程序的一种方法。当然,看程序仅仅是维保工作的部分,外围的硬件特性也需要非常了解,只有了解了设备的实际现状,做一些应急处理还是相对比较容易的事情。
来源:西门子工业技术论坛

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

电工学习网 ( )

GMT+8, 2024-4-25 12:30

Powered by © 2011-2022 www.diangon.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

快速回复 返回顶部 返回列表