利用光电编码器和PLC高速计数器进行定位控制
利用光电编码器和利用光电编码器和 PLC 高速计数器进行定位控制高速计数器进行定位控制 在往返式传动控制系统中,很多时候都会涉及到多点定位问题。即要求在不同的定位点启动不同的机械动作。但由 于机械惯性的作用,常常会给系统带来定点误差。本系统以龙门刨床的机械传动为例,采用plc 作为控制器,通过 变频器调节速度,利用光电编码器和 plc 高速计数器进行定位控制,从而实现精确定位。变频器; plc;高速计数器;光电编码器1 龙门刨床的机械传动控制要求图 1 所示的龙门刨 床的机械传动示意图。传动系统从原点启动,中速行驶到1000mm,开始高速行驶,高速行驶到3000mm,开始低 速爬行,低速爬行到终点( 3200mm)停车。停顿2s。反向高速行驶,高速行驶到距原点200mm 处开始低速爬行。 到达原点停车,停顿 2s 后重新开始往返。在原点和终点低速爬行的目的是为了避免系统惯性带来的定点误差,做 到原点和终点的精确定位停车。2 龙门刨床机械传动的 plc 控制系统硬件设计2.1 系统对变频器的控制要求变频器的正反转由继电器 k1、k2 控制,速度的切换由继电器 k3、k4 完 成。变频器故障报警输出触点(30a、30c 触点)用于立即停止高速计数器运行,并由指示灯hr 指示。 变频器具有多段速度设定功能,当 k3、k4 两个继电器触点都断开时,高速行驶(第一速度);k3 闭合,k4 断开时, 中速行驶(第二速度);k3 断开,k4 闭合时,低速行驶(第三速度);k3、k4 都闭合时,手动调节行驶(第四速 度)。旋钮 sf 用于手动/自动切换,并用指示灯 hg1 表示自动状态。手动时,能够通过按钮 sa1(电 机正转)和 sa2(电机反转)手动调节传动系统的位置。按钮 sa 用于传动系统在自动状态下的启 动/停止控制。采用“一键开关机”方式实现启动/停止控制,用指示灯 hg2 表示启动状态。行程开关 sq 用于自动启动时,确定传动系统在原点位置,自动停止时,传动系统必须返回原点。行程开关sq1、sq2 用于传 动系统的两端限位,确保传动系统不能脱离设备。2.2 plc 系统硬件系统的构成及连接 为了实现对龙门刨床机械传动的精确定位,本系统采用plc 作为控制器,通过变频器进行速度调节,采用光电编码 器和 plc 高速计数器进行定位控制。根据龙门刨床的机械传动控制要求,系统中有开关量输入点8 个,开关量输出 点 7 个,光电编码器 a 相输入一个,因此选用 siemens 的 cpu224 作为控制器,其 i/o 点的分配及系统接线如图 2 所示。3 plc 梯形图程序的设计plc 的梯形图程序设计包含主程序 (用于实时调用手 动子程序 sbr_0 和自动子程序 sbr_1)、子程序sbr_0(用于实现对系统的手动控制)和sbr_1(用于实现对系统的 自动控制)和中断处理程序int_0 程序(用于处理高速计数器计数当前值到达不同预置值的处理)。由于篇幅所限, 以下将以中断处理程序 int_0 程序为例,说明变频器对速度的控制和调节。其梯形图如下。4 梯形 图设计过程中要注意的几个关键问题4.1 通过多次更改高速计数器的中断和预置值实现多点定位 实现多点定位控制的关键包括两点,第一点是设置高速计数器中断事件 12(计数器当前值=计数器 预置值),另一点就是在中断处理程序中更改高速计数器预置值。 定位控制需要测量定位点与原点 的距离,然后将单位距离(mm)转换成脉冲量,通过光电编码器和plc 高速计数器记录脉冲量的变化。本系统中, 光电编码器的机械轴和电动机同轴。 传动比=10, 用于驱动设备的传动辊直径=100mm, 光电编码器每转脉冲数=600 个/转。可以计算出每毫米距离的脉冲数为: 每毫米距离的脉冲数=600÷(10×100×3.14)≈0.19108 脉冲/mm定点位和预置值比较,必须采用高速计数器中断方式,而不能采用一般的比较指令。因为 一般的比较指令无法捕捉高速变化的事件。所以,必须通过 atch 和 eni 指令将高速计数器中断事 件号 12((计数器当前值=计数器预置值)与中断处理程序 int_0 连接。在中断处理程序 int_0 中,到达预置值时, 重新装载下一次的预置值,并执行工艺要求的继电器输出,处理变频器的运行速度。 在自动子程序 sbr_1 中,将高速计数器 hc0 设置为单相计数输入,没有外部控制功能。在原点和终点通过更改计数方向,便于中 断处理程序 int_0 判断变频器的运行方向。4.2 在中断处理程序 int_0 中不能使用等于比较指令由于在一个中断处理程序 int_0 中判断处理多个预置值。 需要比较指令和计数方向来判断目前高速计数 器计数当前值在哪个阶段,根据判断来决定执行那一段指令。但是,判断不能使用等于比较指令,应该使用大于或 小于指令判断。尽管中断事件(计数器当前值=计数器预置值)发生时,plc 立即中断当前主程序、 子程序,执行中断处理程序 int_0 中的指令。但是,在中断处理程序int_0 中,plc 仍然是按照逐条逐行的扫描机制 执行。而高速变化的计数值不可能和中断处理程序执行同步,如果采用等于比较指令, plc 在执行中断处理程序时, 可能会错过等于值,使 plc 在中断处理程序中无法判断设备运行到哪个阶段。4.3 在自动运行时, 高速计数器的初始值寄存器写入必须禁止由于多点定位需要多次装载预置值, 写入预置值必须执行 hsc 指令。执行 hsc 写入指令,不单单是写入预置值,如果在控制字节中不加以限制,初始值寄存 器 smd38 中的值同样写入。而 smd38=0,这样,就会使高速计数器计数当前值置 0。因此,在自动运行时,必须 设置控制字节 smb37 的第七位 sm37.6 为 0,在装载预置值时,禁止写入初始值。 但是,在高速计 数器初始设置和返回原点重新开始运行时,又必须写入初始值,使初始值置0,避免机械原因带来的误差。因此, 控制字节必须多次修改。遵循的原则是:允许写入初始值、执行hsc 指令后,必须马上修改控制字节,禁止初始值 写入,并再次执行hsc 指令,中间不能有其它指令存在。 4.4 多点定位的输出线圈尽量采用立即指 令采用高速计数器进行多点定位,主要为了精确定位。定位精度既决定于高速计数器的测量,同时 也决定于执行机构的执行快速性。如果采用普通输出指令,在一个扫描周期的程序执行阶段,改变 的仅仅是输出映像存储器,plc 的输出点不会立即刷新,只有在程序执行完毕后, plc 的输出映像存储器才能对输出 点刷新,执行输出。为了增加定位精度,尽量采用立即输出指令。立即输出指令不受plc 扫描周期 阶段的限制, 在改变输出映像存储器的同时, 立即刷新 plc 输出点。 4.5 自动/手动程序采用 for-next 循环指令和子程序指令实现本系统中的自动/手动功能通过采用 for-next 指令和子程序指令实现。 自动程序和手动程序实际上就是两个循环指令的循环体。 而循环指令仅执行一次循环扫描刷新。手 动子程序 sbr_0 和自动子程序 sbr_1 用于整个程序的分段,便于程序的理解,增加程序的可读性。for-next 循环指 令的