Направленная логика PLC - PullRequest
0 голосов
/ 22 января 2010

Как вы определяете направление входов, используя лестничные диаграммы с ПЛК? То есть как сохранить предыдущее состояние?

Предыдущее состояние входов. Мне нужно определить направление, в котором были активированы фотобучки .. вперед или назад. Если они активированы в обратном порядке, выполните одно действие. Если они активированы вперед, выполните другое действие. Входы обозначены от 1 до 6. Нормальное направление от 1 до 6.

Ответы [ 2 ]

1 голос
/ 08 августа 2010

Используя программируемые контроллеры DirectLogic, есть дифференциальный вход, который сделает это очень легко. Я был бы готов поспорить, что большинство ПЛК имеют аналогичные инструкции.

Однако, если вы используете 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      
|                           

Из Руководства :

Инструкция «И положительный дифференциал» логически И является нормально разомкнутым контактом, включенным последовательно с другим контактом в цепочке. Статус контакта будет разомкнут до тех пор, пока соответствующая точка регистрации изображения не выполнит переход «Откл. К Вкл.», Закрывая его для одного сканирования процессора. После этого он остается открытым до следующего перехода между выключениями и включением.

1 голос
/ 23 января 2010

Вот простая реализация защелки в лестничной логике:

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