【问题标题】:Interlock Objects with Integer [closed]用整数联锁对象[关闭]
【发布时间】:2019-03-07 23:44:14
【问题描述】:

我有一堆对象,每个对象都有一个唯一的 ID。

我需要互锁对象,以便一次只允许其中一个对象执行特定操作。

我有一个想法来定义一个所有对象都可以访问的整数。

如果互锁是空闲的,则整数包含一个零。然后允许对象将其自己的唯一 ID 放入整数中,执行操作并在之后放回零。

如果任何其他对象在锁定整数时检查该整数,它将看到一个不同于其自身 ID 的非零值并退出。

感觉几乎 100% 肯定我在这里重新发明了一个旧原则,但没有受过 CS 教育,我什至不知道它叫什么,所以我不知道要搜索什么。

我锁定声音的方法/有缺陷吗?我应该阅读什么内容?

请注意,这是相当低级的 61131-3/PLC 编程,因此没有单例模式等。

谢谢

【问题讨论】:

  • 无法使用 C# 或 ST?
  • 它的结构化文本
  • 听起来您可以将对象转换为数组,然后生成一个将作为索引的整数并仅处理当前索引的对象并关闭所有其他对象。事实上,你的描述非常抽象。如果您要说出您要解决的实际任务是什么,可能有完全不同的方法可以使用。

标签: locking low-level-code iec61131-3


【解决方案1】:

您的描述听起来很像多进程编程中的

如果您只使用一个进程或 PLC 扫描,那么您使用通用整数的想法会奏效。否则你将不得不做更多的事情来防止你的对象同时锁定。此外,您应该在程序中添加功能以摆脱死锁,即如果一个对象生成了锁并且不再释放它。

这是 Wiki 对 lock 的解释: https://en.wikipedia.org/wiki/Lock_(computer_science)

【讨论】:

    【解决方案2】:

    根据您使用的 PLC 品牌,使用锁会有所不同,但您没有提及。例如,如果您使用 TwinCAT3,您可以使用“FB_IecCriticalSection”,如下所述:

    https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/9007201580758155.html&id=7922950705104221030

    有关该主题的更多信息(对于 TwinCAT): https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/18014403093939979.html&id=3121411705348577788

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 2021-10-12
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      相关资源
      最近更新 更多