Должен признать, что в OwenLogic на данный момент недостаточно возможностей для полноценной реализации алгоритма на четырёхзначной логике, поэтому приведу пример с Открытием/Закрытием ворот в языке программирования ЧПУ Балт-Систем
В данном языке ST переменные уже объявлены и представляют собой «пакеты» (I входа , U-выхода) для которых выделены рабочие зоны. У сигнала U00K00 две составляющие U00 и K00 и память заполняется следующим образом
U00K00, U00K01, U00K02 U00K03, U00K04, U00K05, … U00K31 (U00 – 32 шт.)
U01K00, U01K01, U01K02 U01K03, U01K04, U01K05, … U01K31 (U01 – 32 шт.)
На основе двоичных переменных формируются переменные, состоящие из 8 бит или СЛОВА (Word) с которыми можно работать как с битами 1111 1111 и как с числами 255
W00K00, W00K01, W00K02, W00K03 (W00 – 4 шт. По 8 бит.)
W01K00, W01K01, W01K02, W01K03 (W01 – 4 шт. По 8 бит.)
Логические двоичные операции записываются символами И – (*) ИЛИ – (+) НЕ – (/)
Код:; Входные сигналы ; I00A00 – Кнопка ворота открыть ; I00A01 – Кнопка ворота закрыть ; I00A02 – Кнопка ворота стоп ; I00A03 – Датчик препятствия ; I00A04 – Конечник открыто ; I00A05 – Конечник закрыто ; Выходные сигналы ; U00A00 – Ворота открыть ; U00A01 – Ворота закрыть ; U00A02 – Лампа Стоп ; U00A03 – Лампа Открытие ; U00A04 – Лампа Закрытие ; U00A05 – Лампа Авария ; -------- формирование состояний на основе событий ----------------- ; Если (Кн. ворота стоп+ Датчик препятствия + Конечник открыто + Конечник закрыто) DOF: I00A02 + I00A03 + I00A04 + I00A05 W20K0=0 ; состояние СТОП ENDF ; Если (Кн. ворота открыть + Ворота отрыть) DOF: I00A00 + U00A00 W20K0=1 ; состояние Открытие ворот ENDF ; Если (Кн. ворота закрыть + Ворота закрыть) DOF: I00A01 + U00A01 W20K0=2 ; состояние Закрытие ворот ENDF ; Если (Ворота открыть * Ворота закрыть) DOF: U00A00 * U00A01 W20K0=3 ; состояние Авария ENDF ; --------------- Алгоритм ------------------- ; Ворота открыть = Кн. ворота открыть + Ворота открыть * /Состояние СТОП * /Состояние Авария U00A00 = (I00A00 + U00A00) * /[W20K0=0] * /[W20K0=3] ; Ворота закрыть = Кн. ворота закрыть + Ворота закрыть * /Состояние СТОП * /Состояние Авария U00A01 = (I00A01 + U00A01) * /[W20K0=0] * /[W20K0=3] ; Лампа Стоп U00A02 = [W20K0=0] ; Лампа Открытие U00A03 = [W20K0=1] ; Лампа Закрытие U00A04 = [W20K0=2] ; Лампа Авария U00A05 = [W20K0=3]




Ответить с цитированием