首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方向逻辑PLC

方向逻辑PLC
EN

Stack Overflow用户
提问于 2010-01-23 04:51:27
回答 2查看 869关注 0票数 0

如何在PLC中使用梯形图确定输入方向?也就是说,如何保存之前的状态?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-23 05:10:38

下面是梯形逻辑中一个锁存器的简单实现:

代码语言:javascript
复制
|-----[ ]-----+-----------------( )--------|
|    input    |                output      |
|             |                            |
|-----[ ]-----'                            |
     output

下面是你可以重置输出的地方:

代码语言:javascript
复制
|-----[ ]-------------+---------( )--------|
|    input            |        output      |
|                     |                    |
|-----[ ]-----[/]-----'                    |
    output   reset

这些构成了梯形逻辑中存储器的基本构建块。我不太清楚,但这是你要找的吗?

通常,实现梯形逻辑的语言将具有实现存储器的高级元素,例如D触发器和T触发器。阅读您的梯形图逻辑实现的文档,看看它们是否可用。

好的,从你的评论看,你想要的是:

代码语言:javascript
复制
// 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,这样当物品触发两个传感器时,您就无法检测到移动方向。以声明的方式编写此代码:

代码语言:javascript
复制
a_triggered = (a || a_triggered) && !(b_triggered && !b);
b_triggered = (b || b_triggered) && a_triggered;
reverse_detected = b && !a_triggered;

翻译过来就是:

代码语言:javascript
复制
|-----[ ]---------+-----[/]--------( )--------|
|      a          |      c     a_triggered    |
|                 |                           |
|-----[ ]---------'                           |
|  a_triggered                                |
|                                             |
|-----[ ]---------+-----[ ]--------( )--------|
|      b          | a_triggered  b_triggered  |
|                 |                           |
|-----[ ]---------'                           |
|  b_triggered                                |
|                                             |
|-----[ ]----------[/]-------------( )--------|
|  b_triggered      b               c         |
|                                             |
|-----[ ]----------[/]-------------( )--------|
|      b      a_triggered   reverse_detected  |

现在,您可以使用反向检测到的信号来执行您想要的操作。如果你的阶梯语言有闩锁,你可以这样做:

代码语言:javascript
复制
|                             _________       |
|-----[ ]--------------------|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
EN

Stack Overflow用户

发布于 2010-08-09 01:01:31

使用DirectLogic可编程控制器,有一个差分输入,这将使这一点非常容易。我敢打赌,大多数PLC都有类似的指令。

然而,如果你使用的是DirectLogic PLC,他们的RLL-Plus阶段编程将是梯形逻辑领域内“有状态”编程的更清晰的实现。

当输入从低到高时,正微分将用于执行输出逻辑。它只适用于一个周期,因此您可能需要使用一个闩锁或使用一个"set“。这取决于光电池是否重叠:

代码语言:javascript
复制
|
|----] _| [------] [----------------------( set )---|
|      1          2         |       reverse detected
|                           |
|----] _| [------] [--------|
|      2          3         |  
|                           |
|----] _| [------] [--------|
|      3          4         |  
|                           |
|----] _| [------] [--------|
|      4          5         |
|                           |
|----] _| [------] [--------|
|      5          6         
|
|

在这种情况下,如果2为开,1变为高电平,则设置或锁存反向检测位。或者,如果你关心这样的事情,那么每次可能的反转(2变高,3变高)的输入逻辑都会将其降低到一个梯级。

我不清楚光电池中是否有重叠。如果不是重叠,我可能会更像slebetman的答案:

代码语言:javascript
复制
|
|----]|_ [-------------------------------( 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

与正微分指令

与梯级中的另一个触点串联的常开触点进行逻辑与运算。触点的状态将是打开的,直到相关的图像寄存点进行Off- On转换,关闭它以进行一次CPU扫描。此后,它将保持打开状态,直到另一次从关闭到打开的转换。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2120413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档