回复:关于Profinet 数据的一致性读取到DB块中指令的选择

已锁定

yming

西门子1847工业学习平台

  • 帖子

    23796
  • 精华

    920
  • 被关注

    1291

论坛等级:至圣

注册时间:2004-03-06

钻石 钻石 如何晋级?

发布于 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区不会变的。

学而时习之,不亦说乎?温故而知新,不亦乐乎?
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有11206条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。