Страница 27 из 35 ПерваяПервая ... 172526272829 ... ПоследняяПоследняя
Показано с 261 по 270 из 343

Тема: ПР200 на четырёхзначной логике

  1. #261

    По умолчанию

    МихаилГл Я чот подумал, глядя на это.
    Я без претензий.
    А не получится это всё как-то хитро формализовать? Бахнуть какой-то массив, в него подсунуть данные из этого массива и все эти AND ещё и в цикле вычислять?
    Я имею ввиду что-то типа внутреннго таблично-массивного скриптового языка, чтобы там можно было описать условия красиво табличкой =)
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  2. #262

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    МихаилГл Я чот подумал, глядя на это.
    Я без претензий.
    А не получится это всё как-то хитро формализовать? Бахнуть какой-то массив, в него подсунуть данные из этого массива и все эти AND ещё и в цикле вычислять?
    Я имею ввиду что-то типа внутреннго таблично-массивного скриптового языка, чтобы там можно было описать условия красиво табличкой =)
    Так и сделано, просто это на визуализацию плк выводится.

    А индекс я использую уже из массива:
    Код:
    	For_Ind_00X1:		ARRAY [0..16] OF DWORD:=   [    16#FFFFFFFF,       16#FF808080,    16#FFFFFFFF,           16#FFFFFF80,           16#FFFFFF80,   16#FFFFFF80,   16#FFFFFF80, 16#FF80FF80, 16#FF80FF80,       16#FFFFFF80,       16#FFFFFF80,       16#FFFF0000, 16#FFFF0000, 16#FFFF0000,       16#FFFF8080, 16#FFFF8080, 16#FFFF8080];
    	For_Ind_00X2:		ARRAY [0..16] OF DWORD:=   [    16#FFFFFFFF,       16#FF808080,    16#FFFFFFFF,           16#FFFFFF80,           16#FFFFFF80,   16#FFFFFF80,   16#FFFFFF80, 16#FF80FF80, 16#FF80FF80,       16#FFFFFF80,       16#FFFFFF80,       16#FFFF0000, 16#FFFF0000, 16#FFFF0000,       16#FFFF8080, 16#FFFF8080, 16#FFFF8080];
    	For_Ind_00X3:		ARRAY [0..16] OF WSTRING:= ["НЕ ОПРЕДЕЛЕНО", "НЕ В ГОТОВНОСТИ", "В ГОТОВНОСТИ", "ПРЕДПУСКОВАЯ СИГН-Я", "ПРЕДПУСКОВАЯ СИГН-Я", "ЗАПУСКАЕТСЯ", "ЗАПУСКАЕТСЯ",  "В РАБОТЕ",  "В РАБОТЕ", "ОСТАНАВЛИВАЕТСЯ", "ОСТАНАВЛИВАЕТСЯ",          "АВАРИЯ",    "АВАРИЯ",    "АВАРИЯ",          "АВАРИЯ",    "АВАРИЯ",    "АВАРИЯ"];
    	For_Ind_00X4:		ARRAY [0..16] OF DWORD:=   [    16#FFFFFFFF,       16#FF808080,    16#FFFFFFFF,           16#FFFFFF80,           16#FFFFFF80,   16#FFFFFF80,   16#FFFFFF80, 16#FF80FF80, 16#FF80FF80,       16#FFFFFF80,       16#FFFFFF80,       16#FFFF0000, 16#FFFF0000, 16#FFFF0000,       16#FFFF8080, 16#FFFF8080, 16#FFFF8080];
    	For_Ind_00X5:		ARRAY [0..16] OF DWORD:=   [    16#FFFFFFFF,       16#FF808080,    16#FFFFFFFF,           16#FFFFFFFF,           16#FFFFFFFF,   16#FF80FF80,   16#FF80FF80, 16#FF80FF80, 16#FF80FF80,       16#FF80FF80,       16#FF80FF80,       16#FFFF0000, 16#FFFF0000, 16#FFFF0000,       16#FFFF8080, 16#FFFF8080, 16#FFFF8080];
    	For_Ind_00X6:		ARRAY [0..16] OF WSTRING:= ["НЕ ОПРЕДЕЛЕНО",                "",   "ОСТАНОВЛЕН",              "ВПЕРЕД",               "НАЗАД",      "ВПЕРЕД",       "НАЗАД",    "ВПЕРЕД",     "НАЗАД",          "ВПЕРЕД",           "НАЗАД", "НЕ В ГОТОВНОСТИ",    "ВПЕРЕД",     "НАЗАД", "НЕ В ГОТОВНОСТИ",    "ВПЕРЕД",     "НАЗАД"];
    И далее общая программка, которая раньше была в 300 строк:
    Код:
    FOR Ind_01:= 1 TO Num_Of_Mec DO
    	//----------1ый индикатор----------
    	InfoX[1, Ind_01].Info_Color_A:= For_Ind_00X1[Ind_00X[Ind_01]];
    	InfoX[1, Ind_01].Info_Color_B:= For_Ind_00X2[Ind_00X[Ind_01]];
    	InfoX[1, Ind_01].Info_Text:= For_Ind_00X3[Ind_00X[Ind_01]];
    	InfoX[1, Ind_01].Text_Color_X:= 16#FF000000 + 16#00FFFF00 * TO_UDINT(Ind_00Y[Ind_01]) * TO_UDINT(Info_Color_X);
    	//----------2ой индикатор----------
    	InfoX[2, Ind_01].Info_Color_A:= For_Ind_00X4[Ind_00X[Ind_01]];
    	InfoX[2, Ind_01].Info_Color_B:= For_Ind_00X5[Ind_00X[Ind_01]];
    	InfoX[2, Ind_01].Info_Text:= For_Ind_00X6[Ind_00X[Ind_01]];
    	InfoX[2, Ind_01].Text_Color_X:= 16#FF000000 + 16#00FFFF00 * TO_UDINT(Ind_00Y[Ind_01]) * TO_UDINT(Info_Color_X);
    END_FOR
    Короче мне уже надоело оптимизировать, надо уже сдавать объект.

    PS Можно в принципе и условия состояний в массив запихнуть, и вместо 17 строк одну... Но это уже не в этом проекте

  3. #263

    По умолчанию

    Цитата Сообщение от МихаилГл Посмотреть сообщение
    Вместо параметров типа: Концевой датчик закрытия/открытия в сработке (4х), Аварийный концевой датчик закрытия/открытия в сработке (4х), Датчик момента закрытия/открытия в сработке (4х), я хочу применять не 0 и 1, а 4хвариантное значение с этих датчиков, а именно: 0 - датчик не в сработке, 1 - датчик в сработке, 2 - кз линии датчика, 3 - обрыв линии датчика.
    Хочу в итоге получить такое же значение сигнала Общий запрет закрытия/открытия задвижки (4х), согласен на следующий приоритет выдачи этого сигнала: 3 - наивысший, 0 - низший. Т.е. если хотя бы на одном из датчиков состояние наивысшего приоритета, то общий сигнал должен соответствовать ему (это как раз для вас упрощает задачу, а то начнете, что нельзя так делать с разными состояниями).

    Вперед и с песней.
    У вас интересная задача!

    Давайте начнём сначала, есть объект ЗАДВИЖКА (gate), который можно представить в 4-х значной логике в виде СОСТОЯНИЙ
    0 – задвижка находиться в состоянии СТОП
    1 – задвижка ОТКРЫВАЕТСЯ
    2 - задвижка ЗАКРЫВАЕТСЯ
    3 – АВАРИЯ
    IF Концевой датчик открытия в сработке OR Концевой датчик закрытия в сработке
    Задвижка = СТОП
    END
    IF NOT (Концевой датчик открытия в сработке) AND Управление отрытие
    Задвижка = ОТКРЫВАЕТСЯ
    END
    IF NOT (Концевой датчик Закрытия в сработке) AND Управление закрытие
    Задвижка = ЗАКРЫВАЕТСЯ
    END
    IF Датчик момента открытия в сработке OR Авария датчика концевика
    Задвижка = Авария
    END
    Затем Состояния можно использовать в алгоритме в виде событий gate.0 gate.1 gate.2 gate.3

    Датчики на 4 положения по сути дела являются обычными дискретными датчиками с определением собственной аварии.

  4. #264

    По умолчанию

    IF Концевой датчик открытия в сработке OR Концевой датчик закрытия в сработке
    Задвижка = СТОП
    END
    Неприемлемо. Согласно этого условия задвижка никуда не поедет после сработки концевого, никогда и уже ни в какую сторону. Так как всегда выдается стоп. А если это только состояние, то нафиг оно вообще, так как для системы важны 2 состояния, в каком именно крайнем она стоит.

  5. #265

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    Я вот от Вас не могу названия всего этого добра добиться(пока намёками), в смысле, в двоичной логике единица хранения информации - бит, в троичной - трит(насколько понимаю), короче, а в четверичной логике как называется единица хранения информации? Без этого, самого элементарного, кто бы чего не писал, каждый может понимать по-своему, то есть неибежны проблемы взаимного непонимания!
    Это же очень важно, понимать друг друга, а Вы почему то это упускаете, вызывая неизбежное взаимонепонимание, короче, может, для начала, разобраться с самым элементарным, придумать им названия, я так понимаю, до Вас этим никто не заморачивался, Вы первооткрыватель, тогда тем более надо быть последовательным и логичным, хотя бы для того чтобы Вас поняли, Вы согласны?
    Сергей0308, хороший вопрос... Как назвать комбинацию из двух бит 00 01 10 11, которой можно закодировать четыре состояния. Такого термина действительно нет.
    Предлагаю назвать единицу хранения четверичной информации - Сет. Сет - общий термин для группы из 4-х состояний.

  6. #266

    По умолчанию

    Я конечно понимаю, пол часа позора, и ты кандидат наук... Как у нас говорил один профессор. Но лучше вам не упоминать нигде про четырехзначную и пр. Введите свою формулировку понятий, как выше сами уже начали. А 4хзначность это не об этой теме. Вы похоже сами запутались, или ваш наставник вас запутал.

  7. #267
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    12,991

    По умолчанию

    из 4-х бит называется тетрада. Ну и напишите полу-тетрада

  8. #268

    По умолчанию

    Цитата Сообщение от МихаилГл Посмотреть сообщение
    Я конечно понимаю, пол часа позора, и ты кандидат наук... Как у нас говорил один профессор. Но лучше вам не упоминать нигде про четырехзначную и пр. Введите свою формулировку понятий, как выше сами уже начали. А 4хзначность это не об этой теме. Вы похоже сами запутались, или ваш наставник вас запутал.
    Давайте введём терминологию

    ОБЪЕКТ - это например ЗАДВИЖКА (GATE) у которого может быть 4-ре состояния 0 (00) - СТОП, 1 (01) - открывается, 2 (10) - закрывается, 3 (11) - в аварии
    СОСТОЯНИЕ - то что протекает во времени. Единица информации Сет или два бита.
    СОБЫТИЕ - это срабатывание дискретного датчика или переход из одного состояния в другое. Происходит мгновенно, во времени не протекает. Единица информации Бит.

    Для любой задачи известен набор датчиков (событий), которые могут произойти.
    1. Исходя из известных событий необходимо определить СОСТОЯНИЕ объекта

    IF событие1 оr событие2
    GATE = 0
    END

    IF событие1 and событие2
    GATE = 1
    END

    IF событие2 and событие3
    GATE = 2
    END

    IF событие4 оr событие5
    GATE = 3
    END

    Следующий этап - это написание алгоритма перехода из одного состояния в другое. Благодаря возможностям языка ST, состояние может участвовать в логике как событие. То есть если задвижка закрывается, то состояние ЗАКРЫТИЕ может рассматриваться как событие GATE.2=true

    Это простейший случая для одного ОБЪЕКТА. Таких объектов может быть несколько, например 3 задвижки и в этом случае можно в алгоритме анализировать в каком состоянии находится ОБЪЕКТЫ

    IF GATE1.3=true оr GATE3.3=true
    GATE3 = 3
    END
    Последний раз редактировалось Geenerator; 06.05.2025 в 13:41.

  9. #269
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    12,991

    По умолчанию

    Сет = ByteX and 3

    IF (Сет > 0)
    IF (Сет > 0 || Сет < 3)
    IF (Сет == 0 )
    IF (Сет == 3 )

    кто-то мешает ? И наверное правильнее не Объект, а Устройство тут. Хотя мне пофигу...

  10. #270

    По умолчанию

    Сейчас хочу показать небольшой фокус, который показывает что двоичная логика на самом деле является троичной

    Если следовать И - ЦЗИН, то в начале всего лежит НЕОПРЕДЕЛЁННОСТЬ, которая разделяется на две составляющие ИНЬ и ЯН

    То есть 1 и 0 обладают изначальным состоянием - философия однако.

    Изображения Изображения
    • Тип файла: jpg log.jpg (68.5 Кб, Просмотров: 2)

Страница 27 из 35 ПерваяПервая ... 172526272829 ... ПоследняяПоследняя

Похожие темы

  1. Ответов: 0
    Последнее сообщение: 08.01.2025, 19:16
  2. ПР200 на троичной логике
    от Geenerator в разделе Программируемые реле
    Ответов: 177
    Последнее сообщение: 04.07.2021, 21:14
  3. ПР200 + ПР200 (или МВ110, МУ110)
    от antonlis в разделе Программируемые реле
    Ответов: 32
    Последнее сообщение: 27.06.2017, 12:07
  4. ПР200 Пропадание связи USB - ПР200. Решено
    от PGK в разделе Программируемые реле
    Ответов: 0
    Последнее сообщение: 18.01.2017, 11:37
  5. ПР200+НПТ1 Пределы измерения ПР200 в режиме 4-20ma
    от Алексей Геннадьевич в разделе Программируемые реле
    Ответов: 13
    Последнее сообщение: 06.04.2016, 20:19

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •