恭喜,你发布的帖子
发布于 2021-02-26 09:01:18
7楼
这个问题涉及到数据一致性。
之前一直以为HMI的通信等级最低,在OB1扫描完成之后,更新HMI通信数据。
刚翻了一下S7-1200的系统手册,上有这么两段话:
说明
包括HMI 通信在内的通信不能中断程序循环OB 以外的其它OB。
(// 是否可以这样理解:HMI通信可以中断 OB1的扫描 ?)
HMI 设备或另一个CPU 发出的通信请求也能够中断程序循环OB 的执行。通信请求也会导
致与数据一致性相关的问题。CPU 确保基本数据类型始终由用户程序指令执行一致地读取
和写入。由于通信会周期性地中断用户程序,因而不能保证HMI 能够同时更新CPU 中的
多个值。例如,给定HMI 画面上显示的值可能来自CPU 的不同扫描周期。
PtP(Point-to-Point,点到点)指令、PROFINET 指令(例如,TSEND_C 和TRCV_C)和
PROFINETS 分布式I/O 指令(页385)和PROFIBUS 分布式I/O 指令(页385)可用于传送
被中断的数据缓冲区。通过避免对程序循环OB 和中断OB 中的缓冲区进行任何读/写操作,
可以确保数据缓冲区的数据一致性。如果需要在中断OB 中修改这些指令的缓冲区值,请使
用DIS_AIRT 指令延迟所有中断(中断OB 或源自HMI 或另一个CPU 的通信中断),直到
执行了EN_AIRT 指令。
说明
使用DIS_AIRT 指令延迟中断OB 的处理,直到执行了EN_AIRT 指令,以此影响用户程序
的中断等待时间(从事件发生到执行中断OB 的时间)。
请填写推广理由:
分享
只看
楼主