定向逻辑PLC

时间:2010-01-22 20:51:27

标签: logic plc

如何使用PLC的梯形图确定输入方向?意思是,你如何保存以前的状态?

以前的输入状态。我需要确定光束被激活的方向..正向或反向。如果它们反向激活,请执行一个操作。如果它们被激活,则执行不同的操作。标记为1到6的输入。法线方向为1到6.

2 个答案:

答案 0 :(得分:1)

这是梯形逻辑中锁存器的简单实现:

|-----[ ]-----+-----------------( )--------|
|    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  |

答案 1 :(得分:1)

使用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      
|                           

来自Manual

  

和正差分指令逻辑上将常开触点与梯级中的另一个触点串联。触点的状态将一直打开,直到相关的图像寄存器点进行从关闭到开启的转换,关闭它进行一次CPU扫描。此后,它将继续开放,直到另一个Off-to-On过渡。