2024-05-16
自我提升
0

目录

等待函数编程
等待外部信号
无限循环
脉冲输出
计时器
计数循环
当数循环
直到型循环
条件性分支
switch 多路分支

程序结构与控制指令
主程序与子程序:使用DEF(定义)创建程序、CALL调用子程序,模块化编程
条件语句:学习使用IF、ELSE、ENDIF语句进行程序逻辑判断
循环结构:使用FOR、WHILE、REPEAT等语句创建程序循环,控制机器人重复任务

等待函数编程

kuka
wait time 1.00 sec #等待1s 指令 编辑 WAIT SEC 1

等待外部信号

image.png

  1. 外部连接 AND OR EXOR NOT 空白
  2. 内部连接 AND OR EXOR NOT 空白
  3. 等待的信号 IN OUT CYCFLAG Timer fiag
  4. 信号的编号 1~4096
  5. 信号的备注
  6. cont 在预进过程中加工 空白 带预进停止的加工
kuka
wait for (in 10"door_signal") #等待信号10
  • AND 同真为真 与
  • OR 有1为1 或
  • EXOR 为不同值时,结果为真 异或
  • NOT 否定,使值取反

image.png

  1. 输出信号编号
  2. 备注
  3. 输出端接通的状态
  4. cont 在预进过程中加工 空白 带预进停止的加工

image.png

  1. 输出信号编号
  2. 备注
  3. 输出端接通的状态
  4. cont 在预进过程中加工 空白 带预进停止的加工
  5. 脉冲时间
kuka
pulse 45"pick" state = true cont time = 0.5 sec #信号45的脉冲持续时间0.5s signal dilint $in[1] #输入 signal doclose $out[2] #输出 out 88 ‘ ’state = true #当输出信号88为真时 ‘ ’信号备注

R1 System $config #全局变量 即使没有程序在运行也始终可以被显示

局部DAT文件中的变量
在相关SRC文件的程序运行时可以一直被显示 在局部子程序中也可以使用

  • 运动指令
  • 通讯指令
  • 循环 无限循环 计数循环 当型和直到型循环
  • 分支 条件分支 多分支结构

无限循环

死循环
无Exit 永久执行P1和P2的运动指令
image.png

跳出循环

kuka
带exit 一直执行对P1和P2的运动指令 直到输入端30为true 则跳出循环 loop ptp p1 vel=100% PDAT1 ptp p2 vel=100% PDAT1 if $IN[30]=true then exit endif endloop

脉冲输出

指令 逻辑 out 脉冲

kuka
PULSE 1 () State=true cont time = 0.1 sec #1 脉冲输出序号 State状态 高电平 低电平 cont是否有逼近效果 time持续时间

计时器

image.png

  • $TIMER[1]
  • $TIMER[2]
  • ...
  • $TIMER[32]

相关信息

计时器 $TIMER[Nr] 的数值输入 / 显示都以毫秒 ms 为单位

kuka
int A A=0 $timer[30]=0 #初始化计时器 $timer_stop[30]=false #计时开始 ......... $timer_stop[30]=true #计时结束 A=$timer[30] #将30号计时器结果赋值给A
kuka
$timer[1]=0 #初始化计时器 $timer_stop[1]=false #计时开始 wait sec 5 wait sec 8 $timer_stop[1]=true #计时结束 $timer[2]=$timer[1]/1000 #13 单位为ms 要转换为s 所以要/1000

计数循环

  • 用INT变量i 来对一个循环语句内循环计数

image.png

kuka
int i ...... #码垛使用较多 for i = 1 to 5 $out[i]=true endfor

当数循环

while 先判断型循环

  • 在执行循环部分前先判断终止条件是否成立

image.png

kuka
while $IN[22]== TRUE #仅当循环前满足$IN[22]= TRUE时才成立 $OUT[17]=TRUE $OUT[18]=FALSE PTP HOME endwhile

直到型循环

  • 在执行完循环的指令部分后才会检测终止条件

image.png

kuka
repeat #一直循环,直到输出端 17 被切换为 TRUE,而输出端 18 被切换为FALSE,并且机器人移入 Home 位置,这时才会检测条件跳出循环 $OUT[17]=TRUE $OUT[18]=FALSE ptp home until $IN[22]== TRUE

注意

赋值用一个= 判断用两个=

条件性分支

  • 如果满足条件,则处理第一个指令
  • 如果未满足,则处理第二个指令

image.png

kuka
IF $IN[30]==TRUE THEN PTP P3 ELSE PTP P4 ENDIF
kuka
DEF MY_PROG( ) DECL INT error_nr ... INI error_nr = 4 ... ; 仅在 error_nr 1 或 10 或大于 99 时驶至 P21 IF ((error_nr == 1) OR (error_nr == 10) OR (error_nr > 99)) THEN PTP P21 Vel=100% PDAT21 ENDIF ... END

switch 多路分支

  • 首先分析一个表达式

image.png

kuka
INT Status #整型变量 ..... switch status CASE 1 #如果变量值为1 则执行 PTP P5 #机器人运动到P5 CASE 2 #如果变量值为2 则执行 PTP P6 #机器人运动到P6 ..... DEFAULT #如果变量值未在CASE中列出 ERROR-MSG #则执行 故障信息 endswitch

带枚举数据类型的 switch-case 分支

kuka
DEF MY_PROG( ) ENUM COLOR_TYPE red, yellow, blue, green DECL COLOR_TYPE my_color ... INI my_color = #red ... SWITCH my_color CASE #red PTP P21 Vel=100% PDAT21 CASE #yellow PTP P22 Vel=100% PDAT22 CASE #green PTP P23 Vel=100% PDAT23 CASE #blue PTP P24 Vel=100% PDAT24 ENDSWITCH