三轴点胶机程序 用台达AS228T和威纶触摸屏编写。 注意软件是用台达新款软件ISPSOFT
最近刚完成一个基于AS228T PLC和威纶TK6071IQ触摸屏的项目,这套系统现在已经在产线上稳定跑了半年多,每天处理上千个工件不带喘气的。项目做完最大的体会是:好程序不是一次写成的,而是在产线上被骂出来的。这里用了结构体封装每个轴的运动参数,改参数时不用满程序找数值了。这招是从嵌入式开发里偷师的,省了二十几个中间变量,监控画面也清爽多了。此程序已经实际设备上批量应用,程序成熟可靠,借鉴价值高
三轴点胶机程序 用台达AS228T和威纶触摸屏编写。 注意软件是用台达新款软件ISPSOFT 此程序已经实际设备上批量应用,程序成熟可靠,借鉴价值高,程序有注释。
三轴点胶机的控制程序开发就像是给机械手注入灵魂。最近刚完成一个基于AS228T PLC和威纶TK6071IQ触摸屏的项目,这套系统现在已经在产线上稳定跑了半年多,每天处理上千个工件不带喘气的。ISPSoft这个新平台用起来确实比旧版DOPSoft顺手不少,特别是标签变量的管理效率直接翻倍。
程序骨架长啥样?直接上干货:
//==========轴参数初始化==========
X_Axis.Config(Speed:=300, Accel:=100, Decel:=80); //X轴基础参数
Y_Axis.Config(Speed:=280, Accel:=110, Decel:=90); //考虑到Y轴负载更大
Z_Axis.Config(Speed:=200, Accel:=80, Decel:=60); //Z轴精度要求最高
这里用了结构体封装每个轴的运动参数,改参数时不用满程序找数值了。实际调试中发现Y轴加速度超过120就会抖动,这个坑后来加了个参数上限保护。

人机交互那些事儿,触摸屏界面用了个取巧的设计:
//胶量计算公式
IF RecipeSelect = 1 THEN
GlueTime := PathLength * 0.15 + 50; //直线路径算法
ELSIF RecipeSelect = 2 THEN
GlueTime := (PathLength + CircleD) * 0.2; //环形路径补偿
END_IF
对应的触摸屏上做了个配方选择弹窗,操作工切换产品类型时就像选手机主题一样简单。这里有个细节——在数值输入框加了范围限制,防止手抖输错个零把设备搞崩。
运动控制的核心逻辑用了状态机,这个switch-case块处理得挺干净:
CASE CurrentStep OF
10: //回原点
IF NOT Axis_Home(X_Axis) THEN
AlarmCode := 1001;
CurrentStep := 99;
END_IF
20: //Z轴预压胶
GlueValve(TRUE);
DELAY T#500ms; //保证出胶稳定
30: //执行插补运动
MC_MoveLinear(X:=TargetX, Y:=TargetY, Z:=TargetZ);
调试时最头疼的是轴同步问题,后来在插补指令前加了这行:
WaitSync := (X_Axis.ActPos - Y_Axis.ActPos) < 0.5; //位置偏差检测
IF WaitSync THEN //等各轴到位
StartMove := TRUE;
END_IF
这相当于给运动加了把安全锁,实测轨迹精度从±0.3mm提升到±0.1mm。当然代价是循环时间多了200ms,好在客户接受这个trade-off。
三轴点胶机程序 用台达AS228T和威纶触摸屏编写。 注意软件是用台达新款软件ISPSOFT 此程序已经实际设备上批量应用,程序成熟可靠,借鉴价值高,程序有注释。

说到注释的重要性,看过太多天书代码后,我坚持在关键位置这样写:
//注意!修改此阈值必须同步调整触摸屏报警设置
VacuumThreshold := 80; //负压值下限,单位kPa
//真空检测超时设置必须大于产品粘接时间
VacuumTimeout := T#15s; //实测ABS件需要12秒固化
三个月后自己回来看还能秒懂,更别说接手的老王头不用天天打电话烦我了。
IO处理这块有个骚操作,把24个传感器信号打包处理:
//传感器状态字按位解析
SensorWord := DI_ReadByte(0);
LimitSwitch_X := (SensorWord AND 16#01) <> 0;
VacuumSensor := (SensorWord AND 16#02) <> 0;
//错误状态自动复位逻辑
IF AutoReset THEN
DO_WriteBit(ERR_RESET, TRUE);
DELAY T#200ms;
DO_WriteBit(ERR_RESET, FALSE);
END_IF
这招是从嵌入式开发里偷师的,省了二十几个中间变量,监控画面也清爽多了。
现在看这套程序最得意的还是异常处理机制,有次气管爆了居然自己切到安全模式:
//真空压力异常处理
IF VacuumPressure < VacuumThreshold THEN
GlueValve(FALSE); //立即关胶
MC_Stop(ALL_AXES); //急停运动
RAISE AlarmCode := 2201;
//自动执行回退程序
IF NOT RecoveryMove THEN
EmergencyShutdown();
END_IF
END_IF
后来客户说这个设计让他们少损失了十几万的材料,听得我暗爽。不过调试阶段这个安全机制误动作过几次,最后加了压力变化率判断才稳定。

项目做完最大的体会是:好程序不是一次写成的,而是在产线上被骂出来的。那些看似多余的互锁和保护,都是流水线上一个个报警声换来的经验。下次要是再做类似设备,估计能把开发周期砍掉三分之一——当然,这话我可不敢跟老板说。
更多推荐
所有评论(0)