Страница 4 из 9 ПерваяПервая ... 23456 ... ПоследняяПоследняя
Показано с 31 по 40 из 86

Тема: Помогите разобраться...

  1. #31
    Пользователь
    Регистрация
    13.08.2012
    Адрес
    Питер
    Сообщений
    127

    По умолчанию

    Всем спасибо за участие! Буду пробовать дальше...

  2. #32
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,053

    По умолчанию

    Ты это, аккуратней там с АЭС.. Вишь как бывает

  3. #33
    Пользователь
    Регистрация
    13.08.2012
    Адрес
    Питер
    Сообщений
    127

    По умолчанию

    Что бы два раза не вставать...

    Я тут приложил свой первый проектик умнодомный... Что-то у меня там там в ФБ Prisut не хочет переменная назначаться... Очередная загадка...

    Поможите, кто чем может. На всякие формулы и вычисления можно не обращать внимания - они работают как надо...
    Вложения Вложения

  4. #34
    Пользователь
    Регистрация
    13.08.2012
    Адрес
    Питер
    Сообщений
    127

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    какой смысл вкладывали в эту фразу?
    У Вас TOF_DOWN_D.Q вначале ИСТИНА, соответственно тело условия выполняется, а в нем (в теле) есть присвоение выходу некоторого значения и логичнее всего, это ноль, а далее в следующей строчке после блока, выход присваивается тому что подается на вход, так что идущие приращения до этой точки теряют смысл, тем более Вы из инта превращаете в байт, что ведет к загрублению и опять же в начале все будет равно нулю
    Утром глянул на написанное - действительно фигня какая-то...
    Да и TOF здесь не подойдет... Попробую фомализовать задачу.

    Добавил в ФБ Prisut входную переменную pp - сигнал с датчика движения..
    IF NOT pp THEN (*пропало движение*)
    "начинаем медленно уменьшать яркость (OUT1) до нуля";
    ELSIF pp AND OUT1 > 0 THEN (*пропало движение, но кто-то обратно вошел или пошевелился*)
    OUT1 := light; (*возвращаем яркость как было*)
    END_IF

    Как сделать медленный декремент?

  5. #35
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Вот моя глушилка резких движений для аналогового выхода:
    Код:
    VAR
    	MaxOutputDelta: REAL;
    	PrevScanTimestamp: TIME;
    END_VAR
    
    MaxOutputDelta := TIME_TO_REAL(TIME() - PrevScanTimestamp) * 0.016;
    AO1 := AO1 + LIMIT(-MaxOutputDelta, Power - AO1, MaxOutputDelta);
    PrevScanTimestamp := TIME();
    AO1 — аналоговый выход, Power — уставка, 0.016 — максимальное изменение в вольтах за миллисекунду.
    Последний раз редактировалось Yegor; 20.09.2012 в 08:38.

  6. #36
    Пользователь
    Регистрация
    13.08.2012
    Адрес
    Питер
    Сообщений
    127

    По умолчанию

    Так. Оставим пока в покое медленный декремент, продолжим мозгоштурм.

    Программа:
    Код:
    PROGRAM PLC_PRG
    VAR
    	TT : INT := 100;
    	QQ : INT;
    END_VAR
    
    QQ := TT;
    IF  DI1 AND TT >0 THEN
    	TT := TT - 1;
     ELSE
    	TT := QQ;
    END_IF

    В этом случае QQ будет равно тому, до чего успела уменьшится TT.

    А как сохранить эту QQ ???

  7. #37
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Код:
    VAR RETAIN
    	QQ: INT;
    END_VAR

  8. #38
    Пользователь
    Регистрация
    13.08.2012
    Адрес
    Питер
    Сообщений
    127

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Код:
    VAR RETAIN
    	QQ: INT;
    END_VAR
    Это немного не то. Я так понимаю, что VAR RETAIN - это энергонезависимая переменная. Но она все равно будет меняться с TT.

  9. #39
    Пользователь
    Регистрация
    13.08.2012
    Адрес
    Питер
    Сообщений
    127

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    по этому коду переменная будет равна нулю, Вы ноль хотите сохранить?
    Какая переменная? QQ ? Я же говорю, что она меняется так же, как ТТ... от 100 до 0..

    Но, решение почти есть:
    Код:
    PROGRAM PLC_PRG
    VAR
    	TT : INT := 100;
    	QQ : INT;
    	INIT_VAR : BOOL := 1;
    END_VAR
    
    IF INIT_VAR THEN
    	QQ := TT;
    	INIT_VAR := 0;
    END_IF
    
    IF  DI1 AND TT >0 THEN
    	TT := TT - 1;
     ELSE
    	TT := QQ;
    END_IF
    Осталось вписать его в мой проект...

  10. #40
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Ну так поставьте задачу лучше. Что вы понимаете под сохранением в данном случае?
    Но, решение почти есть
    В вашем решении можно выкинуть INIT_VAR вместе с ифом и написать TT, QQ: INT := 100 ничего при этом не потеряв.
    Последний раз редактировалось Yegor; 20.09.2012 в 11:45.

Страница 4 из 9 ПерваяПервая ... 23456 ... ПоследняяПоследняя

Похожие темы

  1. помогите разобраться
    от Барон в разделе ПЛК1хх
    Ответов: 16
    Последнее сообщение: 17.11.2010, 08:30
  2. помогите разобраться
    от a_l_e_x в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 02.07.2010, 15:51
  3. Помогите разобраться...
    от xaker_tm в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 08.02.2010, 17:33
  4. ТРМ 12, помогите разобраться.
    от SEREG@ в разделе Эксплуатация
    Ответов: 3
    Последнее сообщение: 12.01.2009, 14:21
  5. Помогите разобраться !!
    от viking в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 21.11.2007, 14:31

Ваши права

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