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 锚点跳动。
  • 侧边裁剪:统一从同一侧(左或右)裁剪,严禁缩放。
  • 规范命名:有序文件名便于脚本编写与后期维护。

四、位置对齐与图层管理

📌 推荐对齐方案:

  1. 选中 door_01.png,调整至目标位置。
  2. 记录其 X / Y 坐标
  3. 将其余 9 张图片的 X / Y 坐标设置为完全一致,确保左上角坐标对齐

图形库操作:

在 WinCC 7.3 右侧工具栏中打开图形库,导入切片。设置坐标(如 X: 210, Y: 40),并匹配宽高。

3️⃣ 图层顺序:

  • 底层:door_01.png (最宽)
  • 顶层:door_10.png (最窄)

五、可见性动态设置

door_01 为例的操作步骤:

  1. 选中 door_01.png
  2. 属性 → 可见性 → 类型:动态
  3. 选择:条件
  4. 输入条件表达式,例如: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 配置要点:

  1. 新建 Modbus TCP 设备,配置 IP、端口 502。
  2. 建立对应 Boolean 类型的 Tag。
  3. 在 WinCC 中通过 OPC 连接外部变量。

十、工业级脚本优化:脉冲输出

为确保控制的稳定性,建议使用“脉冲”方式触发硬件,即在周期脚本末尾自动复位外部变量:

SetTagBit("MB_Door_Open", 0);
SetTagBit("MB_Door_Close", 0);
SetTagBit("MB_Door_Stop", 0);

方案优势:

  • 解耦设计:WinCC 逻辑与硬件物理层分离。
  • 稳定性:避免因变量卡死导致的硬件误动作。
  • 灵活性:未来更换门控硬件仅需修改 KepServer 地址。
转载请注明出处:  https://www.cntworld.cn
智能工控 » WinCC 工业组态:伸缩门切图与逻辑控制全指南

发表回复

提供最优质的资源集合

立即查看 了解详情
文章加载时间:0.0047 秒