六轴机械手程序 用信捷XD5和威纶触摸屏编写。 此程序已经实际设备上批量应用,程序成熟可靠,借鉴价值高,程序有注释。

最近在车间摸鱼的时候翻到一个挺有意思的六轴机械手项目,用的是信捷XD5 PLC配威纶TK8071iQ触摸屏。这玩意儿已经在十几台设备上跑了大半年没出过幺蛾子,程序注释写得比小说还详细,适合拿来当模板用。

先说说硬件架构。六个伺服轴全挂在XD5本体脉冲输出口,Y0-Y5分别对应1-6轴,原点信号接在X0-X5。威纶屏通过COM2口和PLC做数据交互,关键参数都做了掉电保持,设备重启也不用重新设置。

原点回归程序写得有点讲究,看这段代码:

//轴1原点回归
RST M0        //复位运行标志
MOV K3 D200   //回归速度300mm/s
ZRN D200 X0 Y0 //执行原点回归
WAIT M8029    //等待完成信号
MOV K0 D50    //到位后偏移量清零

这里用到了信捷特有的ZRN指令,D200存回归速度,X0是原点传感器,Y0对应脉冲输出口。注意最后那个D50清零操作,之前调试的时候有遇到过累计误差问题,加上这个偏移量补偿才搞定。

运动控制部分用了批量示教点位,触摸屏上存了30组预设坐标:

MOV U0 D100   //读取HMI选择的点位编号
* D100 K6 D200 //计算数据偏移量(每个点位6个轴数据)
MOV D200 D0   //传输到D0-D5寄存器
DRV D0 D1 D2 D3 D4 D5 //六轴联动执行

这里用到了变址寄存器批量搬运数据,*指令做乘法偏移贼方便。之前试过用FOR循环搬运,结果执行时间多了20ms,流水线上直接翻车...

六轴机械手程序 用信捷XD5和威纶触摸屏编写。 此程序已经实际设备上批量应用,程序成熟可靠,借鉴价值高,程序有注释。

触摸屏这边做了个挺骚的操作,用宏指令实现防呆:

macro_command main()
//检查坐标是否超限
if (GetData(a1_pos, "XD5", D100, 1) > 3000) then
    SetData(1, "Local HMI", LB0, 1)
    PlaySound("error.wav")
endif
end macro

这个实时坐标监控功能救了老命了,新员工乱输参数也不会撞机。注意用PlaySound要提前把音频文件塞进触摸屏的存储器,文件名别带中文。

通信部分有个坑得注意,威纶屏的数值元件默认是16位整数,处理32位数据时要勾选"32-bit Data"选项。之前有次位置数据溢出,机械手直接来了段街舞,吓得操作工差点按急停。

调试时最实用的还是这个状态监控程序:

MOV K4 D500   //心跳间隔4秒
DHTIMER D500 M100 //定时器触发
MOV M100 D501 //心跳信号
MOV Y0 D502   //脉冲输出状态
MOV M8029 D503 //完成标志位

这几个寄存器接到触摸屏的指示灯元件,设备卡在哪个步骤一目了然。有次夜班维修,靠这个五分钟就定位到是4号轴驱动器过热报警。

程序里还藏了个彩蛋,在HMI连续点击版本号五次会弹出高级参数设置界面。别问我怎么知道的,厂家工程师喝大了自己说的...(其实注释里写着呢,但没几个人看完三万行注释)

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐