plc - 用于读取和写入 PLC 标签(在 AB Logix 5000 Controller 上)的 CIP 服务是原子的吗?

标签 plc

我正在关注使用 CIP 访问 Controller 数据的 Allen-Bradley 文档,特别是读取标签服务、写入标签服务以及有关读取/写入整个 UDT 的详细信息:https://literature.rockwellautomation.com/idc/groups/literature/documents/pm/1756-pm020_-en-p.pdf .我正在使用 EIP 库来执行读/写标签服务和多服务请求。

我想澄清的是,读取或写入整个 UDT 是否是一项原子操作(使用手册中概述的方法在一个服务请求中执行读/写并理解元数据以对其进行解包)?即,当作为一个整体成功读取/写入时,PLC 或软件端真的不会看到部分更新的 UDT 值吗?

一个相关的问题是:如果我想通过在一个多服务请求中发送多个读/写标签服务请求来读/写多个标签,我对这组标签的同步读/写有任何保证吗?我认为不是,但我似乎无法找到有关该主题的任何权威文档。特别是如果请求在多个 CIP 数据包中被分割。

最佳答案

我能够对此进行测试并确认读/写标签 CIP 服务对于单个 UDT 或数组不是原子的。我最初的担忧是我是否可以安全地写入整个 UDT 或数组,并确保处理该数据的 PLC 将看到该数据处于“写入前”或“写入后”状态,而不是某些部分写入状态。我执行了一些测试,从 CIP 写入标记服务写入一个 10 元素的 DINT 数组。在 PLC 上,我执行同步复制 (CPS) 以将数组复制到另一个标签中,然后检查它以查看数据是否与原子复制一致。我看到数据偶尔处于部分写入状态,这意味着写入标记服务与同步复制指令不同步。请注意,我使用了单个 CIP 服务请求来写入数组,而不是针对每个元素的多个请求。这并非完全出乎意料,但很高兴知道,以便从 CIP 服务读取/写入多个值的任何人都知道缺乏同步。在需要的情况下,我可以添加自己的同步机制。

关于plc - 用于读取和写入 PLC 标签(在 AB Logix 5000 Controller 上)的 CIP 服务是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54695471/

相关文章:

python - 通过pycomm读取标签时超时

c++ - C++中的PLC功能 block 库

plc - IEC61131-3 中 STRING 的默认大小是多少

uml - 如何在SCL中实现 "Generalisation"

algorithm - PLC 校验字节未知

c - 数据记录大小的估计

plc - 倍福 TwinCAT : disadvantages of using C++ instead of Structured Text

plc - PLC梯形图编程的最佳IDE

memory-management - PLC 梯形图逻辑 - 内存和处理管理