分享

PLC编程

 反恐精英秃鹫 2018-03-30

三菱PLC编程语言有梯形图、 SFC(顺序功能图)、功能模块图、指令语句表和结构文本,前三种为图形化语言,后两者为文本语言。最常用的是梯形图,而较复杂的PLC程序大多用SFC编程。
       本项目PLC程序虽然不算复杂,仍然采用了SFC编程。SFC编程可以通过新建文件时选择【程序语言】为“SFC”(同时PLC序列选FXPLC,PLC类型选FX3U/FX3UC)。

       需要说明的是,程序语言选梯形图,也可以编制SFC程序,这样编制的SFC程序可以通过转换为SFC程序块,不过转换效果并不是很好,所以一开始选一种编程方法即可。如图(注:此处是GX Works2版本,如使用GX Developer8.86等版本界面会有所不同):  


本文以梯形图形式的SFC程序进行说明:

一、初始化程序:

        SFC程序一般以M8002开始,M8002是特殊辅助继电器,开机产生一个脉冲,该脉冲引导初始步S0,S0中可以设置初始值、置位、复位等,同时手动程序、单循环和自动程序,都在S0中触发,如三档选择开关分别对应之。本程序只有手动和自动,且由X0的常开和常闭对应之(见上图)。原因是节省PLC输入点数(此项目选用FX3U-16MT,只有8个输入点)。

二、手动程序:

        手动程序在S20中执行,主要包括由伺服控制的行程的进给和退回,油缸的下压和抬起,还有用于触摸屏上的信息提示,包括按钮盒上两个按钮同时用于油缸的下压/抬起和工件的进给/退回(即两个按钮当四个按钮用,这种技巧常常用于PLC输入点不够的时候),这时需要在触摸屏上设置一个切换触摸按钮,用于切换上述两个功能,触摸屏上的触摸切换按钮是M2(参触摸屏程序)。而此处PLC程序还可以通过按下X2(本身功能是“自动运行”,这里赋予它在手动模式下另一个功能:切换油缸升降和工件进退,与M2等同)来使M2置位和复位,这里要学习一条新指令:ALT  M2,X2每按一次(上升沿),M2由置位切换到复位,再按一次,由复位切换到置位,M2复位和置位分别控制M29和M30接通,而M29和M30则是用于触摸屏上【简易指示灯】指示信息的,M29接通会在左边显示信息:“操作按钮用于压抬”。M30接通会会在右边显示信息:“操作按钮用于进退”。

        油缸的下降和上升操作,操作按钮X3、X4以及触摸屏触摸按钮M5、M6均可操作,需注意的是,X3、X4同时还能操作油缸的下降和上升,是通过M2来切换的,请参考上述PLC程序。

同上,工件进给和退回的操作也可由操作箱上的按钮和触摸按钮操作的。

        而实现伺服精确控制则是由相对定位指令实现的:DDRVI(DRVI同样功能,但是是16位指令)指令由四部分构成,先说第一部分:第一部分是进给或退回的行程,以脉冲数表示,当然也可以直接用数值表示,如K20000,表示PLC(上位机)发20000个脉冲,这里用D212和D210寄存器表示第一部分,是因为进给或退回的数值是经常要变动的,因此需要在触摸屏上可以输入数值,而该数值是用长度单位(这里用cm)来表示的,因此在触摸屏上输入到D200或D202中的数值(注意:数值单位Word表示16位,DWord表示32位)需要转换成脉冲数,因为控制要求工件弯曲的长度为0.6-1.5米(60-150cm),因此D200或D202使用单字节的16位(Unsigned Decima,无符号位十进制)即可,转换成脉冲数后存入D210或D212中,因为转换过程实际上是乘上一个常数的过程,而PLC16位乘以16位数指令,结果一定是32位数,因此转换后的D210和D212是32位数,程序中使用的是32位指令DDRVI而不是DRVI就是此缘故。

        如何将需要进给或退回的行程(比如给进100cm)转换成脉冲数(即PLC需要发多少个脉冲给伺服驱动器)?首先我们要知道减速机变比、驱动轮(带动工件进给或后退的滚轮)直径,以及伺服驱动器的电子齿轮比(或电机每旋转一圈所需要的指令脉冲),本系统减速机为80:1,驱动轮直径为22.6cm,电机每旋转一圈所需要的指令脉冲数(Pr0.08)是500。

        在伺服参数设置里,有一个参数Pr0.08,缺省是10000(参见伺服参数设置),Pr0.08参数含义是“电机每旋转一圈所需要的指令脉冲”,也就是说使用缺省值10000则表示PLC每发10000个脉冲给伺服驱动器,电机就转一圈。我们这里Pr0.08 = 500,又减速机减速比为80:1,也就是说,PLC每发500*80(=40000)个脉冲给伺服驱动器,减速机带动滚轮实际转1圈,滚轮的周长是22.6cm,也就是PLC每发40000个脉冲工件进给22.6cm,反过来说,工件每进给1cm则PLC需发脉冲40000/22.6=1770,进给100cm则PLC需发脉冲1770*100=177000。因此,触摸屏上设置值D200和D202需要乘以1770后作为工件进给的脉冲数,故PLC程序如下:

注意:速度值设定D204,乘数是K177,是因为速度单位为mm/s而不是cm/s之故。该段程序位于开始位置,因为进给行程和速度因产品规格不同一天中要设置(变更)数次,设置后要将最新数据更新,在触摸屏上配置一个触摸按钮,每次设置后按一次该触摸按钮,固然可以,能否不用该“多余”的步骤,而利用每一次手动进给/退回、手动油缸升/降、手/自动切换、自动运行等按键动作,就完成新设置的数据的更新呢?答案是肯定的,这就是上述程序各按钮的功能所在。上述程序中还有一个中间辅助继电器M0,用它来控制单程和往返两种模式进给行程的设置,往返时,是从工件中间开始进给,故将“半程”数据当作进给脉冲数(“全程”数据当作返程脉冲数);单程时将“全程”数据当作进给脉冲数(无返程脉冲数据)。请注意:反程脉冲D210是通过D200乘以-1770(写成K-1770而不是-K1770)得到的,也就是D210是个负值,这是DDRVI指令规定的,如果是负值则伺服电机反转。
        指令 DDRVI D212  D214  Y 0  Y3 第二个参数 D214是速度,速度值设置多少,简单的办法就是通过实验,配合伺服参数Pr0.08进行调试(速度与Pr0.08成反比),达到满足用户的速度要求即可。当然也可根据用户要求(如速度10mm/s)通过理论计算,算出D214的值,在此不进行展开详述。第三个参数是脉冲输出,电路图设计及接线时已经确定好,按照接线编程即可(如接线是Y0,程序写Y0,接线是Y1,程序写Y1);第四个参数Y3是控制方向的,即进给还是退回,Y3输出的高低电平会自动变换(取决于D212是正直还是负值)。

三、自动程序:

        自动程序由S21(自动入口)、S22(油缸下压、工件进给)、S23(退回)、S24(油缸抬起)等组成。如果是单程,则通过条件判断,从S22跳至S24,S24中等待运行按钮再次按下,跳转至S21再次循环执行。

        在手动程序中,当手/自动转换开关打到“自动”时(X0常闭),程序进入S21:

        S21中M16、M17、M18、M21为触摸屏上运行状态提示(报警提示信息但不限于报警),如这里的“自动模式”提示,手动模式下,油缸初始位置不在最上面则会提示:“油缸不在上位”、在自动模式下操作了手动按钮开关也有信息提示:“自动模式下此开关无效”等,这些提示信息的触摸屏编程请参考“报警设置”。SFC程序每一个S步(如S20、S21等)有入口,同时必须至少有一个出口,否则程序永远停在这一程序段内,S21内条件满足将跳转至S22,那就是等待“运行”按钮的按下(M1为触摸按钮,功能等同于X2),运行按钮按下,进入S22:

        S22中包含了两个主要动作:油缸下压和工件进给。本来两个独立动作要分在两个S步中,即先油缸下压,压牢工件后再启动伺服使工件进给,但实际调试时如果先压牢再进给,工件上一开始压牢位置会有一个压痕,这是客户不认可的,于是想到让油缸下压到刚接触工件表面伺服即开始进给,也就是一边下压一边进给,压到位(具体位置由弯曲半径决定)后断开油缸电磁阀,这样实行的结果压痕没有了,满足了客户的要求,但是什么时候开始进给却很关键,早了,没压上,形成空进给,定位精度无法保证,压晚了会有压痕,因此我们通过下降位置行程开关(光电开关)X5启动伺服进给,同时开始定时(T4触摸屏可设置),定时时间到断开油缸电磁阀,X7作为下降极限位开关,如果油缸下降到达X7位置,即使延时还未到,也断开下降油缸电磁阀。这里X5行程开关位置的调试要反复调节,直至刚一接触工件,伺服马上进给。至此,S22中采用两个动作联动解决了有压痕的难题。从这里大家也了解到,并不是SFC的一个S步中只能有一个动作,要根据实际情形来编程。
       S22完成了单程的进给,客户要求有的产品需要来回滚压,先从工件中间开始进给一半的行程,然后再返回整个行程,这就要进入S23:退回,当然如果是单程,则跳过S23直接到S24,单程还是往返,由触摸屏上M0设置(上述程序最后部分)。

        S23中动作比较简单,就是工件返回,这里说明一下特殊辅助继电器M8029的使用,M8029是伺服驱动完全部脉冲(这里当然就是D210设置的数值)后,产生的一个脉冲,该脉冲紧接驱动指令(这里时DDRVI)之后,既然M8029是驱动结束脉冲,用它来进入下一个S步是最好不过了,M8029接通进入S24:油缸抬起:

       本程序段中,油缸抬起,到上限位时断开油缸电磁阀,同时通过M24,触摸屏提示信息:油缸抬起。班产量、月产量、年产量在这里统计,注意使用的是S24的上升沿,而班车量统计使用D20,月产量和年产量则是D222和D224,是因为班产量是当天的数据,更准确的说是本次通电期间的数据,断电则清除,而月产量、年产量则每天都需要统计,故使用断电保持型继存器,月产量一月清零一次,年产量一年清零一次。至此,一次加工结束,如果再按【运行】(按钮X2或触摸M1),进行下一次加工,如果一天下班了,选择开关打到X0,当天加工结束。SFC程序最后的RET指令不要忘记,否则程序编译时会出错。
        至于月产量、年产量清零,需要掌握TRD指令的使用。

        TRD指令是把存于特殊辅助寄存器D8013-D8019中的秒、分、时、日、月、年、星期数据传送至指定的寄存器中,如上图对应的是D50-D56,注意原特殊辅助寄存器,不是按顺序排列的,其实可以不关心原来顺序,只要知道我们程序里指定的寄存器及顺序即可,项目中使用了D50,我们需要关注的是年和月,因此只要关心D50和D51即可,但是要知道,即使不用,D52-D56中仍然会被传送数据。

上述程序中,先把年月日等数据读到D50-D56中,因此D50是“年”数据,如今年是2018,D50=18;D51中是“月”数据,现在是3月,D51=3。
        接着将年数据(18)与D250比较,如果不相等,则把年产量D224新存入D244中,第一次肯定不等,故D244中会存入2018年的产量,等到明年(2019)时,D50=19,D250中是18,又不相等,于是再次将年数据存入D244中,这样每年的年产量就更新了,至于D244中的数据要不要每年都统计并形成表格,大家可思考编程方法,这里不作展开。
        年产量一年更新一次,月产量一年当然需要更新12次(每月一次)。我们要判断D51里是几从而知道是几月,对应存入该月的月产量中(D231-D242),月数据D51与D251比较,在上面月产量存入对应月后要对月产量清零(D222),以对下个月重新统计产量,最后执行指令:BMOV D50 D250 K2 ,即将D50开始的2位(D50和D51)传送到对应的D250和D251中,也就是当年当月数据总是最新的。
        这段程序放在M8002触发的初始化程序中,每次开机都会执行一遍。

四、手/自动画面的切换

       触摸屏画面的切换一般通过触摸按钮即可切换,但对于有手动/单循环/自动选择开关选择各自模式的情况下,如果还用触摸按钮切换,就有可能选择开关和触摸屏选择的画面不对应,如选择开关已经打到自动模式,但触摸屏切换到了手动模式,操作及显示都对应不上。这时利用触摸屏的“画面编号”功能,就能由操作面板上的开关来切换触摸屏画面。

触摸屏菜单-选项-设置模块参数

        弹出的画面勾选画面编号,再在弹出画面中设置寄存器,这里为D0,D0中的数值是几,触摸屏上就会显示第几号画面。而D0的数字则由PLC程序控制:

        上述程序当X0上升沿(手动)时将K2送D0中,下降沿(自动)时将K3送D0,而2号画面即手动画面,3号画面即自动画面。从而完成了按钮控制的画面切换。

五、通电时间、运行时间等的统计:

        上述程序是统计通电时间的程序,PLC通电,M8000一直接通,HOUR累计接通时间,D228中存放以小时为单位的数值,多出的不满一小时的时间以秒为单位存放在D229中,满了一小时D228加1,当D228中的值大于32767时Y7输出报警信号,D228不再计时,需要复位后才能继续。当然如果使用32位指令DHOUR,则可计时4294967296个小时。至于统计自动运行时间,则需要采用自动期间接通的触点,不过不能是选择开关(如X0常闭),因为打到自动模式,但没运行,是不能作为自动运行时间统计的。可以用各S步接通时间来统计:

        至此,PLC程序基本介绍完毕。也许有的学员一遍不一定能完全看懂,多研究几遍,如能掌握相应的编程方法,可应用于很多类似控制项目。特别是班产量、月产量、年产量、通电时长、运行时长的统计则可以应用于任何一个项目中,也许客户没有提出类似要求,但能做到超出客户预期,又未尝不是件好事呢。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多