ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

TIA博途 PEEK指令在TP900触摸屏监控所有IO地址

TIA博途 PEEK指令在TP900触摸屏监控所有IO地址 简介本资源为TIA博途工程应用示例文档面向西门子PLC编程与HMI组态的中级技术人员、自动化调试工程师及工控学习者聚焦如何借助PEEK指令在TP900触摸屏上实时监控全部IO地址这一典型难题。文档以具体项目为主线涉及新建项目并添加DB276作为变量容器、编写功能块读取IO点状态、在OB1中循环调用、HMI文本与图形列表、画面S_70_I/O_State的按钮与IO域组态、指示灯动画外观绑定单一位、编译仿真测试等环节并给出输入点I0.0-I0.7与输出点Q0.0-Q0.7的仿真现象便于对照实操与排错。压缩包共1个文件为docx图文说明文档包体约1.7MB内容以截图步骤为主结构按操作顺序编排可直接照做复现。目前已有641人学习下载适合作为IO集中监控、HMI交互组态与仿真验证的案头参考。1. 当 HMI 想看清每一个 IO 点为什么普通变量绑定会先崩一条包装线有 12 个 ET200SP 从站、6 个阀岛、4 台变频器输入输出点位加起来一千多个。调试阶段最常被问的一句话是这个气缸的到位信号到底有没有进来如果按常规做法在 TIA博途 里为每个点位建一个 HMI 变量再拖到 TP900触摸屏 的画面上做成指示灯变量表会膨胀到让人放弃维护通讯负载和刷新周期也跟着恶化。更麻烦的是PLC 侧程序里很多信号只在 DB 块或过程映像区里短暂存在并没有被组态成 HMI 可访问的符号。PEEK指令 提供的正是另一条路不去逐个绑定符号名而是直接按绝对地址去读存储区的一段字节再把这段字节按位拆开显示。标题里这套「通过 PEEK指令 在 TP900触摸屏 上实现监控所有 IO地址」的方法本质是用少量 HMI 变量承载成百上千个点位的状态把点位表变成数据而不是组态。适合谁正在做产线调试、需要快速定位 IO 的电气与自动化工程师已经能写 SCL 或 STL但对指针与地址运算不熟的 TIA博途 使用者以及接手别人项目、面对一份没有符号注释的 IO 表的人。它不解决控制逻辑问题只让「看见」这件事变得便宜。2. PEEK指令 与 TP900触摸屏 的数据通路原理与前置组态2.1 PEEK 系列指令到底读的是什么PEEK指令 属于 TIA博途 中 SCL 的间接寻址家族格式为PEEK(area : ..., dbNumber : ..., byteOffset : ...)其中 area 指定存储区16#81 表示输入过程映像区16#82 表示输出过程映像区16#83 表示位存储区 M16#84 表示数据块 DB。它返回的是一个 BYTE也就是从指定偏移开始的一个字节。关键点有三个。第一PEEK 读的是绝对地址跟符号名无关所以没有符号注释的旧项目同样能用。第二读取过程映像区时拿到的是当前扫描周期刷新的值不是模块端口的瞬时值需要端口实时值要用PEEK之外的直接读外设方式或者在硬件组态里把该从站的过程映像更新打开。第三PEEK 不会因为越界就报编译错误边界要自己算越界读在运行时会触发区域长度错误CPU 进诊断缓冲区。对应的还有POKE用于写。监控场景原则上只用 PEEK不要在 HMI 上通过 POKE 去改输出否则等于绕过了程序的输出逻辑一个误触就可能让气缸动作。2.2 数据通路TP900 不是直接读 IO 的很多人以为触摸屏可以直接去读输入模块实际上 TP900触摸屏 是 HMI 设备只能通过 HMI 连接访问 PLC 的变量。所以整条链路是IO 模块 → PLC 过程映像区或 DB → SCL 块用 PEEK 逐字节搬运 → 一个字节数组变量 → HMI 变量表指向该数组 → 画面用位显示元素按位取用。中间那个「字节数组」是整个方案的核心。建一个全局 DB例如DB_IO_Monitor里面放若干Array[0..N] of Byte分别对应输入、输出、M 区三段。SCL 块周期性地把过程映像区拷进这些数组。HMI 只需要引用数组里的字节屏幕上用「位」形式的图形元素绑定字节变量加位号一个字节就能显示 8 个点。选型理由很直接HMI 变量数量决定通讯刷新压力把 800 个点位压成 80 个字节变量刷新周期和画面响应都会明显变好。同时点位顺序由数组索引决定改点位只改数组和画面排布不动连接层。2.3 前置组态数组 DB 与 HMI 连接先建 DB注意属性里要取消「优化的块访问」因为 HMI 要按绝对方式访问数组优化访问下没有固定偏移。DB 里建三个数组数组名类型长度对应区域PEEK areaInBytesArray[0..31] of Byte32 字节 256 点输入过程映像16#81OutBytesArray[0..31] of Byte32 字节 256 点输出过程映像16#82MBytesArray[0..31] of Byte32 字节 256 点位存储区 M16#83再建一个 FC 块语言选 SCL命名为FC_MonitorIO在 OB1 里调用或者放到一个 100ms 的循环中断 OB 里避免每个扫描周期都搬运造成无谓负载。HMI 侧在「连接」里确认与 PLC 的 S7 连接正常然后建变量InBytes数据类型选 Array of Byte地址指向DB_IO_Monitor.InBytes。TP900触摸屏 支持数组变量但为了画面绑定方便更稳的做法是建 32 个 Byte 变量分别指向 InBytes[0] 到 InBytes[31]命名成 InByte00 这类可搜索的名字。-- 建变量示例地址用绝对方式缩短刷新周期 -- 变量名: InByte00, 数据类型: Byte, 地址: DB_IO_Monitor.InBytes[0] -- 变量名: InByte01, 数据类型: Byte, 地址: DB_IO_Monitor.InBytes[1] -- 变量名: OutByte00, 数据类型: Byte, 地址: DB_IO_Monitor.OutBytes[0] -- 采集周期统一设为 100 ms与 SCL 搬运节奏对齐采集周期这里有个细节如果 HMI 采集周期比 SCL 搬运周期快画面会读到同一个值好几遍看起来像卡顿如果慢很多则反映迟钝。两者对齐、或让 HMI 略慢于搬运周期是最省心的组合。3. 用 SCL 写 PEEK 搬运块把 IO地址 逐字节拷进数组3.1 最小可运行代码下面这段就是每个扫描或每个中断周期把前 32 字节输入、输出、M 区搬进数组的完整实现。用FOR循环配合 PEEK循环变量作为 byteOffset这样改数量只需要改常量。FUNCTION FC_MonitorIO : Void { S7_Optimized_Access : FALSE } VAR_TEMP i : Int; // 循环索引同时作为字节偏移 END_VAR BEGIN // ---- 输入过程映像区 IB0..IB31 ---- FOR i : 0 TO 31 DO DB_IO_Monitor.InBytes[i] : PEEK( area : 16#81, // 输入过程映像 dbNumber : 0, // 非 DB 区域填 0 byteOffset : i); END_FOR; // ---- 输出过程映像区 QB0..QB31 ---- FOR i : 0 TO 31 DO DB_IO_Monitor.OutBytes[i] : PEEK( area : 16#82, dbNumber : 0, byteOffset : i); END_FOR; // ---- 位存储区 MB0..MB31 ---- FOR i : 0 TO 31 DO DB_IO_Monitor.MBytes[i] : PEEK( area : 16#83, dbNumber : 0, byteOffset : i); END_FOR; END_FUNCTION逻辑说明FOR i : 0 TO 31控制搬运范围byteOffset : i把循环变量直接当作偏移量PEEK 每次返回一个字节。三次循环分别对应三个区域area参数决定去向dbNumber只在 area 为 16#84 时才有效读过程映像和 M 区时填 0。参数说明与调整点要把范围扩到 64 字节把三处31改成63同时把 DB 里数组长度改成Array[0..63]两处必须同步只改一处会越界。要监控某个 DB 里的 IO把 area 改成 16#84、dbNumber 填该 DB 的编号byteOffset 就是 DB 内偏移。分散的多个从站 IO如果它们挂在连续地址上这段代码无需改动如果地址不连续就再写一个循环指向新的起始偏移PEEK 没有「基址偏移」的组合参数起始位置只能通过 byteOffset 表达式给出比如byteOffset : 64 i。3.2 调用位置与周期选择把FC_MonitorIO放在 OB1 末尾调用最省事但如果项目已经接近 CPU 负载上限搬运 96 个字节会成为压垮骆驼的那根草。常见做法是放到循环中断 OB30 里周期设 100ms。100ms 对人工观察足够也能让 HMI 的 100ms 采集刚好追得上。需要注意如果程序在某处对输入过程映像做了刷新例如用PEEK读外设后手动写回 IB搬运块必须放在刷新之后否则画面看到的是上一周期的旧值。同理如果 HMI 上要显示的是输出指令执行后的实际状态FC_MonitorIO要放在所有输出赋值语句之后。3.3 常见报错与定位方式现象可能原因排查入口CPU 停止诊断缓冲区报区域长度错误byteOffset 超出过程映像长度在线看 CPU 属性里输入/输出过程映像大小画面数值全是 0数组 DB 仍为优化访问HMI 读不到DB 属性取消「优化的块访问」只有部分点位有反应数组长度与循环上限不一致对照 DB 数组声明与TO上限数值跳变无规律HMI 采集周期短于搬运周期两边周期对齐或 HMI 改 200ms编译通过但运行无变化FC_MonitorIO未被调用OB1 或 OB30 里检查调用点过程映像大小是在硬件组态里可调的默认值往往小于实际 IO 总量把 IB0 到 IB127 都搬一遍但过程映像只配了 64 字节就会在 i64 处触发错误。这是这套方案最高频的一次性踩坑。4. TP900触摸屏 画面绑定一个字节怎么显示 8 个 IO 点4.1 位显示元素的绑定方法在 TP900触摸屏 的 WinCC 画面编辑器里添加「圆形」或「矩形」图形在动画里选择「外观」绑定变量时不要绑定 Byte 变量本身而要绑定到它的位。做法是在变量选择对话框里对InByte00展开勾选具体位位 0 到位 7然后分别设 0 和 1 两种状态的颜色。这样一个 Byte 变量在画面上对应 8 个图形32 个字节变量就能覆盖 256 个点。相比为 256 个点各建一个 Bool 变量HMI 变量数少了 8 倍刷新负担也按同样比例下降。排列时按物理从站的顺序摆例如 InByte00 的位 0 到位 7 对应 1 号从站的 8 个输入通道下面标上通道号。这样现场人员看画面时能直接对应到端子不用查表。4.2 批量绑定与命名的省事做法手工建 256 个图形元素很枯燥TIA博途 的图形列表和画面模板可以缓解。把 8 个圆形做成一个「组」复制组的时候变量引用会一起复制只需逐个改组内变量的位和字节号。另一种做法是在 Excel 里先按从站和通道排好一张「字节号 / 位号 / 物理点号 / 注释」的对照表再照表操作速度快且不容易错位。命名要能被搜索到。变量名用InByte00这种带前缀的形式画面元素的对象名写成Lamp_InB00_Bit3日后别人接手或自己半年后回来改搜索变量名就能定位。4.3 显示形式与刷新取舍纯指示灯已经够用但如果要同时看字节的十六进制值调试时很有用可以在画面角落放一个 I/O 域绑定同一个 Byte 变量显示格式选十六进制。这样点状态和字节值互相印证出现「灯不亮但字节值不对」的情况时能立刻判断是搬运问题还是绑定问题。刷新上把画面里所有 IO 指示灯的采集周期统一改成一致值不要有的 100ms 有的 1s。混合周期会让画面出现「部分灯先变、部分灯后变」的错觉实际是采集周期差异不是信号问题。5. 把方案做扎实的三个技巧区域切换、数量校验、在线比对前面四章给的是能跑起来的版本真正在现场长时间用还需要处理几个边界下面是常用的三个做法。第一个技巧是给搬运块加区域开关避免读不存在的过程映像。做法是给FC_MonitorIO加输入参数按从站编译出的实际输入输出数量传入循环上限用参数而不是硬编码常量。这样同一份代码在 32 字节和 128 字节的机型上都能安全运行不需要为每个项目改代码。FUNCTION FC_MonitorIO : Void VAR_INPUT inLen : Int; // 实际输入字节数 outLen : Int; // 实际输出字节数 END_VAR VAR_TEMP i : Int; END_VAR BEGIN FOR i : 0 TO inLen - 1 DO DB_IO_Monitor.InBytes[i] : PEEK(area : 16#81, dbNumber : 0, byteOffset : i); END_FOR; FOR i : 0 TO outLen - 1 DO DB_IO_Monitor.OutBytes[i] : PEEK(area : 16#82, dbNumber : 0, byteOffset : i); END_FOR; END_FUNCTION调用时把硬件组态里的实际长度填进去inLen : 32这样传。好处是循环上限与硬件一致不会因为多搬一个字节而触发区域错误也方便在注释里写清这个数是怎么来的。第二个技巧是加一个「搬运计数」和「校验和」字节写进同一个 DB在 HMI 上显示。用一个每次增加的计数器配合各字节异或结果能在画面上快速判断搬运块是不是还在跑、数据有没有停在某一次。调试时遇到过 HMI 画面完全不动最后发现是循环中断 OB 被禁用搬运块根本没执行而画面上看不出任何区别。第三个技巧是用在线比对。CPU 在线后打开DB_IO_Monitor和程序里的监控表放在一起监控表用绝对地址直接写%IB0到%IB31两边同时看。如果监控表有变化而 DB 数组没变问题在搬运块如果 DB 数组变了而 HMI 画面没变问题在 HMI 变量地址或采集周期。这个二分法能覆盖这套方案九成以上的异常比从头翻代码快得多。最后补一个容易被忽略的点PEEK 读到的是过程映像对于高速脉冲或短于搬运周期的信号画面会漏掉。这类点位不要放进这套监控仍然用高精度记录或专门的功能块处理把这套方案用在状态量、阀位反馈、限位这类变化不快的信号上性价比最高。本文还有配套的精品资源点击获取
返回列表