恭喜,你发布的帖子
发布于 2021-12-18 23:10:45
1楼
用法和DP下,一摸一样的。
只不过是叫 DPRD_DAT/DPWR_DAT而已。
要知道:你的块移动,移动的是啥?你只是把IO映像区数据复制到DB,又不是与真实IO交换数据。用这个指令做啥?这个指令是当存在中断会用到这个DB时,防止中断修改DB数据完整性。中断在此指令之后执行。
DP也好,PN也好,都是使用通讯芯片的。它按自己的速率更新IO数据;和程序扫描周期是异步的!
在程序周期扫描这个节点,真实IO状态复制到IO映像区过程中,那个通讯芯片的更新报文字并不见得完整。一条8字长的报文,可能更新到一半时,遇到扫描程序的IO数据交换时间节点。这中间不存在谁等待谁。这就会造成不一致(你读到的速度、电流、转矩、电压,可能不是同一个报文的,不是同一时刻的!)
而调用SFC14/15,调用DPRD_DAT/DPWR_DAT,则是调用的当时,与DP/PN的芯片IO交换数据。这样来保证数据的一致性。你读到的速度、电流、电压、转矩甚至位置等等是同一时刻的!
当然了,你就是用标准报文1,或者没有这些控制要求,就是看看。那就无所谓了。反正DP/PN的芯片刷新时钟最慢也是1毫秒。前1毫秒的也没关系。
记住:所有的IO(本体的,扩展的,远程的)都一样,程序中处理的Ix.x、Qx.x,都是在处理映像区的。只有程序扫描执行结束,进入到数据交换节点时,才与真实IO交换数据。然后,重复开始新的一轮你的程序执行。
所以,你用不可中断的块移动、普通的块移动、甚至用字的MOVE,都是一样的。甚至移动之后,另外的程序再次移动,也没关系。I区不会变的。
请填写推广理由:
分享
只看
楼主