三轴点胶机程序 用台达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

后来客户说这个设计让他们少损失了十几万的材料,听得我暗爽。不过调试阶段这个安全机制误动作过几次,最后加了压力变化率判断才稳定。

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

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐