1. Закон де Моргана
Закон де Моргана позволяет преобразовывать логические выражения, содержащие отрицание нескольких условий. Для логической операции AND он записывается так:
NOT(A AND B) = NOT A OR NOT BИными словами, условие «не выполняются одновременно A и B» равносильно условию «не выполняется A или не выполняется B».
Существует и второй закон де Моргана:
NOT(A OR B) = NOT A AND NOT BОтрицание группы условий меняет AND на OR, а OR на AND. При этом отрицание применяется к каждому отдельному условию.
2. Проверка по таблице истинности
Проверим первый закон для всех четырёх комбинаций входов A и B.
| A | B | A AND B | Y1 = NOT(A AND B) | NOT A | NOT B | Y2 = NOT A OR NOT B |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 0 | 0 | 0 | 0 |
Во всех четырёх комбинациях результаты Y1 и Y2 совпадают. Следовательно, обе схемы логически эквивалентны.
3. Практический пример
Предположим, что оборудование разрешено запускать только при одновременном выполнении двух условий:
- A — защитная дверь закрыта;
- B — давление воздуха в норме.
Разрешение работы можно записать так:
RunPermit = DoorClosed AND PressureOKСигнал запрета можно получить отрицанием общего разрешения:
Block = NOT(DoorClosed AND PressureOK)По закону де Моргана это выражение можно переписать:
Block = NOT DoorClosed OR NOT PressureOKВторая форма часто удобнее для диагностики: она прямо показывает, что блокировка возникает при открытой двери или недостаточном давлении.
4. Проверка закона в FBD-симуляторе
Программа к уроку строит обе эквивалентные ветви. Верхняя ветвь вычисляет Y1 = NOT(A AND B), нижняя — Y2 = NOT A OR NOT B. Блок EQ сравнивает результаты и формирует выход Y_EQUAL.
1. Откройте программу в симуляторе. 2. Запустите режим симуляции. 3. Установите A = FALSE и B = FALSE, затем выполните цикл. 4. Повторите проверку для комбинаций FALSE/TRUE, TRUE/FALSE и TRUE/TRUE. 5. Сравнивайте выходы Y1 и Y2 с таблицей истинности. 6. Убедитесь, что Y_EQUAL остаётся TRUE при всех четырёх комбинациях.
Если Y_EQUAL становится FALSE, две ветви больше не эквивалентны: проверьте соединения и расположение блоков NOT.
5. Где закон применяется в сложных схемах
Цепи разрешений и блокировок
В промышленных программах запуск механизма обычно зависит от нескольких условий:
Permit = SafetyOK AND DriveReady AND PressureOK AND ProductPresentОтрицание общего разрешения можно представить как объединение отдельных неисправностей:
NotPermit =
NOT SafetyOK
OR NOT DriveReady
OR NOT PressureOK
OR NOT ProductPresentТакую запись проще использовать для формирования общей аварии и отдельных диагностических сообщений.
Обработка нормально замкнутых сигналов
Аварийные кнопки, защитные двери и некоторые датчики часто подключаются по нормально замкнутой схеме. Поэтому в программе встречается много инверсных сигналов. Законы де Моргана помогают правильно переносить отрицание через группы AND и OR, не изменяя смысл алгоритма.
Формирование общей аварии
Например, готовность системы задаётся так:
SystemReady = Drive1Ready AND Drive2Ready AND RobotReadyТогда общее состояние неисправности:
CommonFault = NOT SystemReadyэквивалентно выражению:
CommonFault =
NOT Drive1Ready
OR NOT Drive2Ready
OR NOT RobotReady6. Упрощение и нормализация программ
Закон де Моргана применяется при:
- оптимизации сложных логических выражений;
- преобразовании алгоритмов между FBD и LD;
- анализе таблиц истинности;
- построении карт Карно;
- автоматической компиляции логических схем;
- устранении лишних инверсий.
Эквивалентные ветви полезны для обучения и тестирования, но не образуют полноценное резервирование безопасности: обе ветви используют одинаковые входные данные и логически зависят друг от друга.
7. Краткий итог
Законы де Моргана позволяют переносить отрицание через группы логических условий без изменения результата:
NOT(A AND B) = NOT A OR NOT B
NOT(A OR B) = NOT A AND NOT BВ FBD это помогает преобразовывать разрешения в диагностические признаки запрета, работать с инверсными сигналами и проверять эквивалентность разных представлений одной логики.
Практический блок
Откройте связанный пример в редакторе, запустите симуляцию и повторите упражнение из статьи. JSON можно скачать отдельно для просмотра или переноса.