操作人员在 MP277(WinCC flexible)界面,编辑 / 选择气缸动作顺序,PLC 按照配置好的顺序执行夹紧动作,支持延时、到位信号跳转。硬件:S7‑300 CPU,MP277;软件:STEP7 V5.x + WinCC flexible 2008。
整体架构思路
步序表(数组 DB 块)+PLC 状态机执行 + MP277 读写数组
PLC 侧建立步序结构体 UDT,数组 DB(保持性 DB),每一步保存:执行动作、延时时间、跳转条件;
MP277 画面:表格输入,修改 DB 数组里面每一步的气缸编号、动作、延时;
PLC 状态机循环读取步序表,一步步执行;
多套工艺:使用 WinCC flexible配方功能保存多套夹紧顺序,一键调用 / 保存配方到屏存储卡。
两种方案:
方案 A:固定最大步骤数,操作员填写每一步执行哪个气缸
方案 B:自由编辑任意步
第一步:S7‑300 PLC 侧数据结构(STEP7)
1、新建 UDT(用户自定义数据类型):UDT_STEP
每一步的配置信息:
表格
| 变量 | 类型 | 说明 |
|---|---|---|
| CylNo | Int | 要动作的气缸编号:1 = 气缸 1,2 = 气缸 2,3 = 气缸 3… |
| Action | Int | 0 = 无动作,1 = 伸出夹紧,2 = 缩回松开 |
| DelayTime | TIME | 本步执行完成后等待延时 |
| StepEnable | Bool | 该步是否启用 |
举例:Step1:CylNo=1,Action=1 → 第一步气缸 1 伸出夹紧;到位 + 延时结束进入下一步。
2、新建 DB 块 DB10_Sequence(勾选保持性属性)
数组:StepTable ARRAY[0..15] OF UDT_STEP,最多 16 步夹紧流程,可以按需扩大。变量:
CurrentStep:Int;当前正在执行的步骤SeqStart:Bool;启动夹紧序列SeqDone:Bool;序列全部完成SeqAlarm:Bool;超时报警
DB 必须勾选保持,断电配置不会丢失;S7‑300 需要 MMC 卡支持保持数据。
3、PLC 执行逻辑(ST 语言优先,也可用 LAD)
核心逻辑:状态机按步序表执行,判断气缸磁性开关到位信号 + 延时,完成后进入下一个步号。伪代码:
st
IF SeqStart AND NOT Running THEN CurrentStep:=0; Running:=TRUE; END_IF; IF Running THEN CASE CurrentStep OF 0..15: IF StepTable[CurrentStep].StepEnable THEN //输出气缸动作 CASE StepTable[CurrentStep].Action OF 1: Cylinder[StepTable[CurrentStep].CylNo].Out:=TRUE; 2: Cylinder[StepTable[CurrentStep].CylNo].Ret:=TRUE; END_CASE; //判断气缸到位 + 延时完成 IF Cylinder[StepTable[CurrentStep].CylNo].Reach AND TON_Delay.Q THEN CurrentStep:=CurrentStep+1; //进入下一步 R TON_Delay; END_IF; ELSE CurrentStep:=CurrentStep+1; //本步禁用直接跳过 END_IF; 16: Running:=FALSE; SeqDone:=TRUE; //全部步骤结束 END_CASE; END_IF;
附加功能:
每一步增加超时定时器,到位长时间不到位输出 SeqAlarm 报警;
急停复位:Running 清零,所有气缸复位缩回;
气缸建议封装成 FB,每个气缸包含:伸出输出、缩回输出、伸到位、缩到位、超时报警。
不要用 GRAPH 做写死的固定步,GRAPH 步是离线写死,不能 HMI 在线改顺序。
第二步:MP277 WinCC flexible 画面配置
MP277 不能直接显示结构体数组表格,两种实现方式:
方式 1:IO 域拼接表格(简单,项目最常用)
建立画面,做表格布局;每一步放一组 IO 域:
IO 域绑定:
DB10_Sequence.StepTable[0].CylNoIO 域绑定:
DB10_Sequence.StepTable[0].ActionIO 域绑定:
DB10_Sequence.StepTable[0].DelayTime复选框绑定:
DB10_Sequence.StepTable[0].StepEnable复制多组,索引 0‑15 对应 16 个步骤。
操作员直接输入:第 1 步执行气缸 2 伸出,第 2 步气缸 1 伸出…… 就修改了夹紧顺序。
方式 2:WinCC Flexible 配方功能(多套工艺保存,推荐)
如果设备需要多套夹紧顺序,一键切换,用配方功能。
配方→新建配方,配方变量全部关联 DB10_Sequence 里面的 StepTable 数组全部成员。
画面拖入【配方视图】控件。
操作员操作:
新建配方:“工艺 A 夹紧顺序”;
在画面表格修改每一步气缸号、动作、延时;
保存配方到 MP277 存储卡;
需要时直接加载配方,自动把整套顺序下载到 PLC 的 DB10。
重要:配方存储在 MP277 的 SD 卡;如果屏损坏,SD 卡可以保存所有工艺顺序,更换新 MP277 直接导入即可。
操作示例(操作员界面)
表格
| 步骤 | 启用 | 气缸编号 | 动作 (1 夹紧 / 2 松开) | 延时 ms |
|---|---|---|---|---|
| 0 | ☑ | 2 | 1 | 500 |
| 1 | ☑ | 1 | 1 | 800 |
| 2 | ☑ | 3 | 1 | 1000 |
| 3 | ☑ | 2 | 2 | 300 |
PLC 执行顺序:气缸 2 夹紧→延时 500ms→气缸 1 夹紧→延时 800ms→气缸 3 夹紧→延时 1000ms→气缸 2 松开。
现场注意
DB 块必须勾选保持性,否则断电,HMI 设置的顺序全部清零。S7‑300 必须 MMC 卡,否则保持失效。
MP277 修改 DB 数组是实时写入 PLC;禁止设备运行过程中修改步序,修改必须在待机状态下,增加互锁:自动运行时,HMI 输入域禁止操作。
动作编码要做范围校验:PLC 判断 CylNo 不能超过实际气缸总数,Action 只能 0‑2;防止 HMI 输入非法数字导致程序异常。
气缸到位信号必须可靠,增加超时报警;如果磁性开关损坏,不能无限等待下一步。
MP277 时间类型 TIME 变量 WinCC flexible 直接输入不方便;建议 DB 里面用 DINT 存毫秒数,PLC 内部转 TIME,HMI 输入毫秒数字,操作更友好。
权限:修改夹紧顺序设置高级用户权限,普通操作员不能修改。
两套方案对比
表格
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| IO 域直接读写 DB 数组 | 简单,调试方便,不需要配方 | 只能保存 1 套顺序 | 设备只有 1 套夹紧工艺,偶尔修改顺序 |
| WinCC Flexible 配方视图 | 保存多套工艺,一键调用,SD 卡备份 | 配置工作量大 | 多产品切换,多套夹紧顺序 |
简化替代方案
气缸数量≤3 个,不需要任意顺序,只需要选择顺序模式 1 / 模式 2 / 模式 3:PLC 内部 CASE 写几套预设顺序,MP277 只做一个 Int 输入框选择模式号,PLC 执行对应 CASE 分支。缺点:不能自由任意编辑每一步,只能预设几套。





