梯形图(LAD, LadderLogic ProgrammingLanguage)是PLC使用得最多的图形编程语言,被称为PLC的第一编程语言。
梯形图语言沿袭了继电器控制电路的形式,梯形图是在常用的继电器与接触器逻辑控制基础上简化了符号演变而来的,具有形象、直观、实用等特点,电气技术人员容易接受,是运用上最多的一种PLC的编程语言。
正运动技术的ZMC006CE就是一款高性价比的,支持ZBasic、ZPlC编程语言,以及可以使用正运动技术ZHMI界面编程的EtherCAT运动控制器。在正式学习直线插补之前,我们先简单了解一下这个产品。
EtherCAT运动控制器的PLC编程(一) 直线插补
(一)梯形图运行逻辑
PLC梯形图执行从左侧的母线开始,从左至右,从上至下依次扫描,从第一行程序开始顺序扫描到END为一个扫描周期,然后又开始新一轮程序扫描,直到程序被停止。
PLC运行时,主要经过自检测、通讯处理、输入检测、程序执行、输出刷新这五个阶段。扫描程序之前,先执行故障检测与程序检查,发现异常停机显示出错信息,打印程序编写问题,再执行与其他设备的通信响应。
一个扫描周期包括输入检测、程序执行、输出刷新三个阶段。
1.输入检测
PLC以扫描方式顺序读入各输入端子的通断状态,并写入相应的输入状态寄存器,即刷新输入,接着转入程序执行阶段。一般来说,输入信号的宽度要大于一个扫描周期,否则可能导致信号丢失。
2.程序执行
PLC按从左至右,从上至下的顺序对每条梯形图指令进行扫描,并将相应的运算和处理结果保存在输出状态寄存器中。在程序执行的过程中,若输入信号状态发生改变,但此时状态寄存器内的输入状态没有改变,直到下一扫描开始时再读入输入信号状态。
3.输出刷新
在所有指令执行完毕后,输出状态寄存器的通断状态写入输出端子,驱动相应的输出设备。
扫描周期主要取决于程序的长短、指令的类型、CPU 执行指令的速度。扫描周期的时间可以通过特殊寄存器 D8010(扫描时间)、D8011(扫描最小时间)、D8012(扫描最大时间)来查看。
(二)梯形图混合Basic
1.PLC调用BASIC指令
PLC可以通过EXE指令或EXEP指令调用Basic标准指令。EXEP指令是EXE指令的脉冲形式,仅在驱动输入由OFF变为ON后,才调用Basic标准指令。
语法格式如下:
2.PLC调用BASIC和PLC程序
PLC使用CALL指令调用子程序。程序文件必须在同一项目文件(.ZPJ)内才可调用。
2.1 PLC调用PLC子程序
CALL调用子程序后,跳转到对应LBL行执行,执行到SRET指令处返回。
2.2 PLC调用Basic子程序
PLC调用Basic子程序时,需要在SUB函数名前加上@,调用时可根据实际情况选择是否传入参数,如右图的参数LV0。
3.BASIC调用PLC文件
程序文件必须在同一项目文件(.ZPJ)内才可调用。
3.1 Basic启动PLC任务
Basic里可使用语句“run"xxx.plc",任务编号”来启动PLC文件任务。
PLC子程序SRET子程序返回指令可以带上返回值,返回值存储在LV局部寄存器中,返回值是浮点格式,调用者通过RETURN指令获取返回值。
3.2. Basic调用PLC子程序
Basic里使用“CALL SUB_FUNC”或“RUNTASK 任务号, SUB_FUNC”来调用PLC子程序LBL。
如下图,Basic程序执行到CALL语句后跳转到PLC程序的LBL子程序执行,执行完子程序SRET返回参数LV1保存在RETURN中。
(一)插补原理
直线插补方式中,两点间的插补沿着直线的点群来逼近。首先假设在实际轮廓起始点处沿X方向走一小段(给一个脉冲当量轴走一段固定距离),发现终点在实际轮廓的上方,则下一条线段沿Y方向走一小段,此时如果线段终点还在实际轮廓下方,则继续沿Y方向走一小段,直到在实际轮廓上方以后,再向X方向走一小段,依此类推,直到到达轮廓终点为止。实际轮廓是由一段段的折线拼接而成,虽然是折线,但每一段插补线段在精度允许范围内非常小,那么此段折线还是可以近似看做一条直线段,这就是直线插补。
假设轴需要在在XY平面上从点(X0,Y0)运动到点(X1,Y1),其直线插补的加工过程如下图所示。
给轴发送一个脉冲运动的距离由电机的特性决定,不同的轴单个脉冲运动距离有所不同。
(二)梯形图插补指令介绍
在正运动梯形图编程中,有两种形式的插补指令其分别为Zbasic形式和PLC形式。
1.Zbasic插补指令介绍
MOVE – 直线运动
2.PLC形式插补指令介绍
MOVE
指令说明:
MOVE指令为直线插补相对运动指令。
操作数:
S1:T,C,D,K,H,Z,V,LV,DT,@
S2:T,C,D,K,H,Z,V,LV,DT,@
……
S8:T,C,D,K,H,Z,V,LV,DT,@
操作数若使用字寄存器,寄存器中的数值需用浮点指令赋值。
编程示例:
(一)梯形图混合Zbasic例程
ld m8002
exe @Axis_Init
ldp m0
EXE @RelativeMove
end
lbl @Axis_Init
ld m8000
EXE @BASE(0,1)
EXE @UNITS = 100,100
EXE @ACCEL = 1000,1000
EXE @DECEL = 1000,1000
EXE @SPEED = 100,100
EXE @DPOS = 0,0
EXE @MPOS = 0,0
sret
LBL @RelativeMove
ld m8000
EXE @BASE(0,1)
exe @Trigger
exe @MOVE(300,400)
sret
梯形图对应语句表
Axis_Init
WHILE 1
IF SCAN_EVENT(MODBUS_BIT(0)) > 0 THEN
Axis_Move
ENDIF
WEND
END
GLOBAL SUB Axis_Init()
BASE(0,1)
UNITS= 100,100
ACCEL = 1000,1000
DECEL = 1000,1000
SPEED = 100,100
DPOS = 0,0
MPOS = 0,0
ENDSUB
GLOBAL SUB Axis_Move()
BASE(0,1)
TRIGGER
MOVE(300,400)
ENDSUB
本次,正运动技术EtherCAT运动控制器的PLC编程(一) 直线插补,就分享到这里。
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师。
本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。