这是梯形逻辑中锁存器的简单实现:
|-----[ ]-----+-----------------( )--------|
| input | output |
| | |
|-----[ ]-----' |
output
您可以在此处重置输出:
|-----[ ]-------------+---------( )--------|
| input | output |
| | |
|-----[ ]-----[/]-----' |
output reset
这些构成了梯形逻辑中内存的基本构建块。我不确定,但这就是你要找的吗?
通常,实现梯形逻辑的语言将具有实现内存的更高级别元素,例如 D 和 T 触发器。阅读您的梯形逻辑实现的文档,看看它们是否可用。
好的,从您的 cmets 看来,您想要的是:
// 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 |