0

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

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

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

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

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

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

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

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

谢谢

4

2 回答 2

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

于 2018-10-04T13:03:15.330 回答
1

您的描述听起来很像多进程编程中已知的锁。

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

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

于 2018-10-03T06:33:38.753 回答