如何使用 PLC 梯形图确定输入方向?意思是,如何保存之前的状态?
之前的输入状态。我需要确定光束被激活的方向……向前或向后。如果它们被反向激活,则执行一项操作。如果它们向前激活,请执行不同的操作。输入标记为 1 到 6。法线方向为 1 到 6。
这是梯形逻辑中锁存器的简单实现:
|-----[ ]-----+-----------------( )--------|
| input | output |
| | |
|-----[ ]-----' |
output
您可以在此处重置输出:
|-----[ ]-------------+---------( )--------|
| input | output |
| | |
|-----[ ]-----[/]-----' |
output reset
这些构成了梯形逻辑内存的基本构建块。我不确定,但这就是您要找的吗?
通常,实现梯形逻辑的语言将具有实现存储器的更高级别元素,例如 D 和 T 触发器。阅读梯形逻辑实现的文档以查看它们是否可用。
好的,从您的评论来看,您想要的是:
// Pseudocode:
// a = sensor 1
// b = sensor 2
if (a) {
a_triggered = true;
}
if (b) {
if (!a_triggered) {
REVERSE_DETECTED();
}
else {
a_triggered = false;
}
}
这假设传感器靠近在一起,使得转换为 10->11->01,这样当物品触发两个传感器时您无法检测到行进方向。以声明方式编写此内容:
a_triggered = (a || a_triggered) && !(b_triggered && !b);
b_triggered = (b || b_triggered) && a_triggered;
reverse_detected = b && !a_triggered;
翻译为:
|-----[ ]---------+-----[/]--------( )--------|
| a | c a_triggered |
| | |
|-----[ ]---------' |
| a_triggered |
| |
|-----[ ]---------+-----[ ]--------( )--------|
| b | a_triggered b_triggered |
| | |
|-----[ ]---------' |
| b_triggered |
| |
|-----[ ]----------[/]-------------( )--------|
| b_triggered b c |
| |
|-----[ ]----------[/]-------------( )--------|
| b a_triggered reverse_detected |
现在您可以使用反向检测到的信号来做您想做的事情。如果您的梯形语言有锁存器,您可以更干净地完成此操作:
| _________ |
|-----[ ]--------------------|set latch|------|
| a | | |
|-----[ ]--------------------|clear | |
| c |_________| |
| a_triggered |
| _________ |
|-----[ ]--------------------|set latch|------|
| b | | |
|-----[/]--------------------|clear | |
| a_triggered |_________| |
| b_triggered |
| |
|-----[ ]----------[/]-------------( )--------|
| b_triggered b c |
| |
|-----[ ]----------[/]-------------( )--------|
| b a_triggered reverse_detected |
使用 DirectLogic 可编程控制器,有一个差分输入,可以使这变得非常容易。我敢打赌大多数 PLC 都有类似的指令。
但是,如果您使用 DirectLogic PLC,它们的 RLL-Plus 阶段编程将是梯形逻辑领域内“状态”编程的更清晰实现。
当输入从低电平变为高电平时,正微分用于执行输出逻辑。它仅适用于一个周期,因此您可能需要接合锁存器或使用“设置”。这取决于光电管重叠:
|
|----] _| [------] [----------------------( set )---|
| 1 2 | reverse detected
| |
|----] _| [------] [--------|
| 2 3 |
| |
|----] _| [------] [--------|
| 3 4 |
| |
|----] _| [------] [--------|
| 4 5 |
| |
|----] _| [------] [--------|
| 5 6
|
|
在这种情况下,如果 2 开启且 1 变高,则设置或锁存反向检测位。如果您关心这些事情,则对每个可能的反转(2 变高而 3 开启)输入逻辑进行或操作会将其保持在单个梯级。
我不清楚光电管是否有重叠。如果不重叠,我可能会这样做更像 slebetman 的答案:
|
|----]|_ [-------------------------------( set )---|
| 2 2 exited
|
|----]|_ [-------------------------------( set )---|
| 3 | 3 exited
| |
| |---( rst )---|
| 2 exited
|
|
|----]|_ [-------------------------------( set )---|
| 4 | 4 exited
| |
| |---( rst )---|
| 3 exited
|
|
|----]|_ [-------------------------------( set )---|
| 5 | 5 exited
| |
| |---( rst )---|
| 4 exited
|
|
|----]|_ [-------------------------------( set )---|
| 6 | 6 exited
| |
| |---( rst )---|
| 5 exited
|
|
|----] _| [------] [----------------------( set )---|
| 1 2 exited | reverse detected
| |
|----] _| [------] [--------|
| 2 3 exited |
| |
|----] _| [------] [--------|
| 3 4 exited |
| |
|----] _| [------] [--------|
| 4 5 exited |
| |
|----] _| [------] [--------|
| 5 6 exited
|
摘自手册:
与正微分指令对串联的常开触点与梯级中的另一个触点进行逻辑与运算。触点的状态将保持打开状态,直到关联的图像寄存器点进行“关闭”到“打开”的转换,并在一次 CPU 扫描期间将其关闭。此后,它保持打开状态,直到再次从关闭到开启转换。