使用整数互锁对象

时间:2018-10-02 19:38:57

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

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

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

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

如果互锁为空,则整数包含零。然后,允许对象将其自己的唯一ID放入整数,执行操作,然后再放回零。

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

几乎100%可以肯定的是,我在这里重塑了一个古老的原则,但是没有受过CS的教育,我什至不知道它叫什么,所以我也不知道要搜索什么。

我是锁定声音/瑕疵的方法吗,我应该读些什么?

请注意,这是61131-3 / PLC编程的较低级别,因此没有Singleton模式等。

谢谢

2 个答案:

答案 0 :(得分:1)

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

如果仅使用一个过程或PLC扫描,则使用公共整数的想法将起作用。否则,您将不得不做更多的事情以防止对象同时锁定。另外,您还应该在程序中添加功能以摆脱死锁,即,如果某个对象进行了锁定却再也没有释放它。

以下是Wiki对锁的解释: https://en.wikipedia.org/wiki/Lock_(computer_science)

答案 1 :(得分:1)

根据您所使用的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