去年接手一个自动化装配线改造项目,设备由三菱FX3G PLC、GS2110触摸屏和JE系列伺服系统组成。这套配置在中小型自动化设备中非常典型,但传统梯形图编程方式在维护时经常遇到变量难追踪、功能复用率低等问题。这次我决定全面采用结构化编程方案,从电气图纸到HMI界面全部重构,最终形成的这套工程模板特别适合刚接触三菱工控的新手学习。
这套工程的核心价值在于:
使用GX Works2 V1.91Q作为开发环境,需特别注意:
提示:建议创建统一的工程目录结构:
/Project
/PLC - GXW2工程文件
/HMI - GT Designer工程
/Servo - 伺服参数文件
/Docs - 电气图纸
采用分层架构设计:
code复制MAIN_PROGRAM (梯形图)
├── INIT_ROUTINE (初始化)
├── ALARM_HANDLER (报警处理)
├── SERVO_CTRL (运动控制)
│ ├── AXIS1_FB (伺服功能块)
│ └── AXIS2_FB
└── HMI_INTERFACE (人机交互)
在全局变量区定义设备参数结构体:
st复制TYPE AxisPara :
STRUCT
CurrentPos: DINT; // 单位:0.001mm
TargetPos: DINT;
Speed: INT; // 单位:RPM
Acceleration: UINT; // 单位:ms
StatusWord: WORD;
END_STRUCT;
END_TYPE
// 实例化结构体
VAR_GLOBAL
Axis1 AT %MD100 : AxisPara;
Axis2 AT %MD200 : AxisPara;
END_VAR
创建标准伺服功能块,关键参数配置:
st复制FUNCTION_BLOCK ServoCtrl
VAR_INPUT
Para : AxisPara;
JogForward : BOOL;
JogBackward : BOOL;
END_VAR
VAR_OUTPUT
ActualPos : DINT;
Status : WORD;
END_VAR
st复制// 位置比较指令
IF Para.TargetPos <> ActualPos THEN
PLSV K5000 Y0 Y1; // 发送脉冲
END_IF;
// 软极限保护
IF (ActualPos > Para.UpperLimit) THEN
Para.Speed := 0;
END_IF;
JE伺服参数设置步骤:
code复制CM40 = 131072 // 分子
CM41 = 5000 // 分母(um单位)
st复制// 设置电子齿轮比
HCMOV(PARAM_SET, CM40, CM41);
// 写入EEPROM
MOV K1 D0
DMOV K0 D10
CALL P_EE_WRITE
在GT Designer中配置元件时:
采用循环队列算法:
st复制// 报警队列初始化
MOV K10 D100 // 队列深度
FMOV K0 D200 K20 // 清空缓冲区
// 报警入队
LD SM412 // 1s时钟
MOVP D200 D210 // 写指针
INCP D210 // 指针+1
CMP D210 K210 // 检测越界
MOV K200 D210 // 循环复位
双缓存实现方案:
st复制// 每200ms执行
LD SM413
BMOV D500 D600 K100 // 数据拷贝
MOV K1 U3\G0 // 触发HMI刷新
4-20mA转温度值程序:
st复制// 通道1处理
RawValue := TO_REAL(AIN0);
IF RawValue < 6400.0 THEN
EngValue := 0.0; // 低于4mA报警
ELSE
EngValue := (RawValue - 6400.0) * 100.0 / 25600.0;
END_IF;
使用文件寄存器方案:
code复制D2000-D2009 : 配方0参数
D2010-D2019 : 配方1参数
...
st复制// 根据配方号载入参数
MOVP U0\G1000 Z0 // 读取配方号
BMOV D2000Z D500 K10 // 参数传输
SFC流程图关键步骤:
code复制步0: 初始状态
→ 启动条件 → 步1
步1: 气缸下降
→ 到位信号 → 步2
步2: 真空吸附
→ 真空建立 → 步3
...
st复制// 尝试修改滤波器参数
MOV K2 D0
MOV K100 D1
CALL P_FILTER_SET
st复制// 改为定时触发更新
LD SM413 // 200ms时钟
MOV K1 U3\G100
st复制// 结构体对齐分配
Axis1 AT %MD100 : AxisPara; // 确保地址对齐
这套工程经过三个月实际运行验证,结构体+FB的编程方式使维护效率提升60%以上。特别是伺服控制部分的标准功能块,在新设备开发中直接复用,节省了大量调试时间。初学者可以从最简单的轴控制FB开始,逐步理解结构化编程的思想精髓。