【问题标题】:OPC Da Write Bit in WordOPC Da 在字中写入位
【发布时间】:2013-06-01 00:59:36
【问题描述】:

我正在使用 OPC DA 自动化包装器连接到 AllenBradley PLC。

我现在需要在一个单词中设置一个位,独立于任何其他位。

有什么方法可以严格实现这个功能?

我尝试过的两个选项是:

在 OPC 服务器 (Kepware) 中将字设置为单独的位。所以换句话说,我有 16 个标签,每个标签都有一点,标签名称看起来像:

[FULLTAGNAME].0
[FULLTAGNAME].1
[FULLTAGNAME].2

但这意味着我需要保留许多单独的 OPCItem 对象

另一种方法是读取整个字,使用BitConverter将其转换为位,更改我需要更改的位,然后将保持字写回PLC。

但是在测试过程中我发现线程 1 可以读取这个词。 然后线程 2 将写入字,更改位 2。然后线程 1 将更改位 4 并将整个字写回,而对位 2 的更改将被覆盖。

有谁知道我可以拥有一个 OPCItem 并写入特定位的方法?还是我坚持有很多与某个位相关的 OPCItems??

谢谢

【问题讨论】:

  • 我认为您基本上已经列出了选项。就个人而言,我觉得将位捆绑成单词是不好的做法。将它们分开 - 它更清洁、更易于阅读、使用和调试。是的,您需要更多标签,但如果您从一开始就进行明智的设计,您可以通过编程方式生成标签文件,并且无需额外工作。见:stackoverflow.com/a/1168196/327083
  • 很公平。我同意你的观点,将比特构建成单词有点讨厌。我只是希望有一些我不知道的事情。我以前使用过很多单独的位,但我从不喜欢 OPCItem[] Word1Bits = GenerateOpcItmes(); 之类的外观。感谢您的帮助。
  • 这不仅仅是一个 OPC 问题,也是底层 PLC 协议问题。此 PLC 协议的“OPC 驱动程序”可能只是将修改 WORD 的单个位作为读-修改-写操作(即,它读取整个字,调整“写入”的位,然后写回整个字,所以你的多线程问题仍然存在)。您认为它只是执行位写入,但它正在模拟位写入。我会对其进行测试,除非您知道实际协议的详细信息以及该协议的 OPC 驱动程序。

标签: c# word plc opc opc-da


【解决方案1】:

设置 OPC 驱动程序以使用位数组。 PLC 本身将接受对内存的引用作为带有偏移的位数组。之后,只是 OPC 驱动程序如何实际实现这一点的问题。我很确定 Kepware 会接受这种方式。

【讨论】:

    猜你喜欢
    • 2022-08-09
    • 2021-01-07
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    相关资源
    最近更新 更多