Показано с 1 по 10 из 24

Тема: Управление лампой "Авария" сериями импульсов в зависимости от статусов

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #21

    По умолчанию

    Цитата Сообщение от Smitka Посмотреть сообщение
    Доброго дня! Не могу сообразить, как реализовать управление лампой "Авария" импульсами в зависимости от статусов на ПР200. В зависимости от того какая аварийная ситуация, индикатор выдает серию миганий. Мигание индикатора при определении аварии происходит интервально, при этом количество включенных состояний индикатора в серии импульсов показывает номер определенной аварии. Серия из одного импульса, далее пауза 1,5-2 секунды и переход к индикации следующей аварии своим количеством импульсов (два, три и т.д.). Индикация аварий осуществляется циклично.
    Добавляю более читаемый код (разработан в codesys 3.5), который, думаю, можно переделать и для ПР. Остается только коды аварий самому разработать...

    Код:
    PROGRAM PLC_PRG
    VAR
    	ALARMok:			ARRAY [1..VOLUMEofALARM] OF BOOL;	//наличие аварии для данного кода
    	TIMEforEACHcode:		ton;					//таймер на каждую активную аварию
    	NEXTalarm:			INT:= 1;				//номер шага для поиска следующей активной аварии
    	NEXTok:				BOOL;					//следующая активная авария найдена
    	OUTforLAMP:			BOOL;					//выход на сигнализацию
    	i:				INT;					//для цикла
    END_VAR
    VAR CONSTANT
    	VOLUMEofALARM:		INT:= 4;					//количество аварий
    END_VAR
    -----------------------------------------------------------
    //каждые 10 секунд показывать новую аварию
    TIMEforEACHcode(in:= NOT TIMEforEACHcode.q, pt:= T#10S);
    //ограничение по максимуму аварий
    IF NEXTalarm> VOLUMEofALARM THEN
    	NEXTalarm:= 1;
    END_IF
    //поиск следующей активной аварии
    IF NOT ALARMok[NEXTalarm] AND NOT NEXTok THEN
    	NEXTalarm:= NEXTalarm + 1;
    	IF ALARMok[NEXTalarm] THEN
    		NEXTok:= TRUE;
    	END_IF
    END_IF
    //старт поиска следующей активной аварии
    IF TIMEforEACHcode.q THEN
    	NEXTok:= FALSE;
    	NEXTalarm:= NEXTalarm + 1;
    END_IF
    
    //выход на сигнализацию
    //так:
    //OUTforLAMP:= (POU_SIG.OutX[1] AND (NEXTalarm= 1)) OR (POU_SIG.OutX[2] AND (NEXTalarm= 2)) OR (POU_SIG.OutX[3] AND (NEXTalarm= 3)) OR (POU_SIG.OutX[4] AND (NEXTalarm= 4));
    //или так:
    OUTforLAMP:= FALSE;
    FOR i:= 1 TO VOLUMEofALARM DO
    	OUTforLAMP:= OUTforLAMP OR (POU_SIG.OutX[i] AND (NEXTalarm= i));
    END_FOR
    Эх, без аварий - косячит... Надо разбираться. Но все равно, мне на ST больше код удобен, чем на FBD
    Последний раз редактировалось МихаилГл; 26.11.2025 в 12:46.

Похожие темы

  1. Ответов: 1
    Последнее сообщение: 18.08.2021, 09:18
  2. Ответов: 1
    Последнее сообщение: 08.09.2017, 05:55
  3. как выбрать управление "прямое" или "обратное"
    от maxmore в разделе Эксплуатация
    Ответов: 1
    Последнее сообщение: 18.01.2010, 10:13
  4. Ответов: 10
    Последнее сообщение: 11.07.2008, 13:37
  5. МДВВ постоянно уходит в режим "Авария"
    от clockwise в разделе Эксплуатация
    Ответов: 10
    Последнее сообщение: 11.07.2008, 13:37

Ваши права

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