伺服压力机 MCGS触摸屏:实时曲线,导出U盘,配方,历史数据存盘等功能, mcgs触摸屏:XY曲线,趋势图,历史数据记录,配方,导出U盘等功能, 昆仑通态触摸屏 带完整PLC程序(三菱FX5S)非常完整的注释

伺服压力机的控制系统开发,最有趣的部分莫过于触摸屏和PLC的默契配合。最近在调试一套基于三菱FX5S的伺服压装系统,用上了昆仑通态MCGS触摸屏的几个实用功能,顺手把玩了一把XY曲线动态追踪,记录些实战心得。

先说触摸屏的数据可视化——实时曲线和XY曲线的动态展示,这玩意儿比单纯看数字带劲多了。在MCGS的组态环境里,画布拖个趋势图控件,地址绑定到PLC的D寄存器区。比如压装过程的位移-压力曲线,PLC这边需要同时更新两个数据通道:

// 三菱FX5S结构化文本程序片段
VAR
    ActualPressure : REAL := D100;  //压力值存入D100开始的双字
    ActualPosition : REAL := D104;  //位置值存入D104
END_VAR

//伺服数据采集线程
WHILE TRUE DO
    ActualPressure := GET_SERVO_PRESSURE(轴1);  //从伺服驱动器读取实际压力
    ActualPosition := GET_SERVO_POSITION(轴1);  //读取实际位置
    DELAY(10);  //10ms采集周期
END_WHILE;

触摸屏上的XY曲线控件同时绑定D100和D104,立马就能看到动态绘制的散点图。调试时发现曲线刷新有卡顿,后来把PLC的数据发送周期和触摸屏采样率调成一致才流畅。

配方功能是生产线的刚需。用结构体封装压装参数,配合触摸屏的配方视图直接编辑:

TYPE Recipe :
STRUCT 
    TargetPos : REAL;   //目标位置
    Speed     : INT;    //压装速度
    Threshold : REAL;   //压力阈值
END_STRUCT
END_TYPE

VAR_GLOBAL
    CurrentRecipe : Recipe := D200;  //配方数据从D200开始存储
END_VAR

//配方切换执行
IF 触摸屏.配方选择完成 THEN
    MOV_BLOCK(D200, 配方号*SIZEOF(Recipe)+D500, SIZEOF(Recipe));  //从配方库加载
END_IF

历史数据存储有个坑——直接频繁写U盘会缩短寿命。解决方案是在触摸屏脚本里设置缓存机制,积攒够500条记录后再批量导出。导出时用系统自带的时间戳命名文件,避免覆盖:

--MCGS Lua脚本片段
function on_export()
    local filename = "Data/"..os.date("%Y%m%d_%H%M")..".csv"
    local data = history.get_records(500)
    file.write(filename, table.concat(data, "\n"))
    sys.msgbox("导出完成,文件:"..filename)
end

PLC注释方面,坚持每个功能块开头写“军规”:

//压装过程状态机
//状态0:待机 1:下降中 2:压装中 3:保压 4:返回 
//注意事项:状态切换需检测伺服使能信号
CASE StateMachine OF
    0: 
        IF 启动信号 AND 无报警 THEN
            StateMachine := 1;
            伺服使能(轴1, TRUE);
        END_IF
    //...其余状态处理
END_CASE;

这套系统调试完最大的感触是:好的注释比代码本身更重要。特别是伺服压力控制中的平滑过渡算法,几个月后回头看注释还能立刻理解当时的处理逻辑,这才是工程代码该有的样子。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐