WinCC 工业组态:伸缩门切图与逻辑控制全指南
WinCC 切图与动画联动指南
本指南旨在提供一种高效、专业的工业伸缩门动画实现方案,涵盖从图像切片到逻辑脚本,再到 Modbus TCP 硬件联动的全流程。
一、确定“工业级”切片数量
针对原图尺寸(宽:750 px,高:460 px)的横向伸缩门:
- 宽:750 px
- 高:460 px
🔧 推荐切片数量:10 张
为什么选择 10 张?
- 5 张:动画过渡过于生硬。
- 10 张:动画流畅度适中,WinCC 变量判断逻辑简洁,性能压力几乎为零。
- 20 张以上:维护成本高,判断条件冗余。
👉 10 张是工业现场最均衡的折中方案。
二、像素尺寸计算
高度(保持一致)
460 px
宽度计算公式
750 ÷ 10 = 75 px
三、切片规格明细表
| 图片编号 | 门状态 | 宽 (px) | 高 (px) | 判定条件 |
|---|---|---|---|---|
| door_01.png | 100% 全关 | 750 | 460 | ‘Door_Pos’ >= 90 (原图) |
| door_02.png | 90% 关 | 675 | 460 | (‘Door_Pos’ >= 80) && (‘Door_Pos’ < 90) |
| door_03.png | 80% 关 | 600 | 460 | (‘Door_Pos’ >= 70) && (‘Door_Pos’ < 80) |
| door_04.png | 70% 关 | 525 | 460 | (‘Door_Pos’ >= 60) && (‘Door_Pos’ < 70) |
| door_05.png | 60% 关 | 450 | 460 | (‘Door_Pos’ >= 50) && (‘Door_Pos’ < 60) |
| door_06.png | 50% 关 | 375 | 460 | (‘Door_Pos’ >= 40) && (‘Door_Pos’ < 50) |
| door_07.png | 40% 关 | 300 | 460 | (‘Door_Pos’ >= 30) && (‘Door_Pos’ < 40) |
| door_08.png | 30% 关 | 225 | 460 | (‘Door_Pos’ >= 20) && (‘Door_Pos’ < 30) |
| door_09.png | 20% 关 | 150 | 460 | (‘Door_Pos’ >= 10) && (‘Door_Pos’ < 20) |
| door_10.png | 0% 全开 | 75 | 460 | ‘Door_Pos’ < 10 (最小片) |
⚠️ 切图注意事项:
- 不要切成 0 宽:最小图片保留 75 px,防止 WinCC 锚点跳动。
- 侧边裁剪:统一从同一侧(左或右)裁剪,严禁缩放。
- 规范命名:有序文件名便于脚本编写与后期维护。
四、位置对齐与图层管理
📌 推荐对齐方案:
- 选中
door_01.png,调整至目标位置。 - 记录其 X / Y 坐标。
- 将其余 9 张图片的 X / Y 坐标设置为完全一致,确保左上角坐标对齐。
图形库操作:
在 WinCC 7.3 右侧工具栏中打开图形库,导入切片。设置坐标(如 X: 210, Y: 40),并匹配宽高。
3️⃣ 图层顺序:
- 底层:
door_01.png(最宽) - 顶层:
door_10.png(最窄)
五、可见性动态设置
以 door_01 为例的操作步骤:
- 选中
door_01.png。 - 属性 → 可见性 → 类型:动态。
- 选择:条件。
- 输入条件表达式,例如:
Door_Pos >= 90。
六、手动验证流程
在编写自动化脚本前,务必通过变量表验证切图与可见性:
| Door_Pos 值 | 预期显示图片 |
|---|---|
| 100 | door_01 |
| 85 | door_02 |
| 55 | door_05 |
| 25 | door_08 |
| 5 | door_10 |
✔ 若能正确切换,则说明图片与可见性配置成功。
七、WinCC 内部变量定义
| 变量名 | 类型 | 初始值 | 说明 |
|---|---|---|---|
| Door_Pos | Int | 100 | 门位置(100=关,0=开) |
| Door_State | Int | 0 | 暂不使用 |
| Door_Timer | Int | 0 | 计时(秒) |
| Door_Cmd | WORD | 0 | 0=无, 1=开, 2=关, 3=停 |
| Door_Run | WORD | 0 | 0=停止, 1=开门中, 2=关门中 |
八、控制脚本实现
按钮脚本(下达命令)
// 开门按钮
SetTagWord("Door_Cmd", 1);
// 关门按钮
SetTagWord("Door_Cmd", 2);
// 暂停按钮
SetTagWord("Door_Cmd", 3);
周期脚本(核心逻辑)
WORD doorPos, doorRun, doorCmd, doorTimer;
doorPos = GetTagWord("Door_Pos");
doorRun = GetTagWord("Door_Run");
doorCmd = GetTagWord("Door_Cmd");
doorTimer = GetTagWord("Door_Timer");
/* 命令处理 */
if (doorCmd != 0) {
if (doorCmd == 1) { doorRun = 1; doorTimer = 0; }
else if (doorCmd == 2) { doorRun = 2; doorTimer = 0; }
else if (doorCmd == 3) { doorRun = 0; }
doorCmd = 0; // 命令复位
}
/* 运动逻辑 */
if (doorRun != 0) {
doorTimer++;
if (doorRun == 1) {
if (doorPos > 0) doorPos -= 10;
else doorRun = 0;
}
if (doorRun == 2) {
if (doorPos < 100) doorPos += 10;
else doorRun = 0;
}
if (doorTimer >= 15) doorRun = 0; // 超时保护
}
SetTagWord("Door_Pos", doorPos);
SetTagWord("Door_Run", doorRun);
SetTagWord("Door_Cmd", doorCmd);
SetTagWord("Door_Timer", doorTimer);
九、硬件联动:Modbus TCP 集成
实现 WinCC 画面与现场电动门控制器的实时通信。
现场控制器点位确认:
| 功能 | Modbus 类型 | 地址示例 |
|---|---|---|
| 开门 | Coil | 00001 |
| 关门 | Coil | 00002 |
| 暂停 | Coil | 00003 |
KepServerEx 配置要点:
- 新建 Modbus TCP 设备,配置 IP、端口 502。
- 建立对应 Boolean 类型的 Tag。
- 在 WinCC 中通过 OPC 连接外部变量。
十、工业级脚本优化:脉冲输出
为确保控制的稳定性,建议使用“脉冲”方式触发硬件,即在周期脚本末尾自动复位外部变量:
SetTagBit("MB_Door_Open", 0);
SetTagBit("MB_Door_Close", 0);
SetTagBit("MB_Door_Stop", 0);
方案优势:
- ✅ 解耦设计:WinCC 逻辑与硬件物理层分离。
- ✅ 稳定性:避免因变量卡死导致的硬件误动作。
- ✅ 灵活性:未来更换门控硬件仅需修改 KepServer 地址。
