Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 18

Тема: Не работает код, таймер

  1. #1

    По умолчанию Не работает код, таймер

    Пытаюсь сделать управление нагревателем, 2 режима. Первый: Нагрев, второй: Поддержание температуры на заданном уровне. Я попробовал описать функциональный блок, но он не работает. Подскажите, как будет правильно реализовать? Может, тут надо таймеры в отдельный функциональный блок как-то вынести?

    Код:
    FUNCTION_BLOCK Heater
    VAR_INPUT
    	Temper_k :WORD; (*Температура с термопары*)
    	Time_grow :TIME; (*Время изменения мощности, скорость нагрева*)
    	Temper_oper: UINT; (*Температура, которую задает оператор*)
    	Time_work_elect_heat :TIME; (*Время поддержания температуры*)
    END_VAR
    VAR_OUTPUT
    	Out_elect_heat :WORD; (*Мощность нагревателя*)
    END_VAR
    VAR
    	Timer_grow : TON;
    	Operation_time: TON;
    	Time_step :TIME;	(*Время приращения мощности ТЭНа*)
    	capacity_ADC :UINT := 4096; (*Разрядность АЦП*)
    	step_grow :UINT := 128; (*Приращение АЦП*)
    	heating_mode :UINT; (*Режим нагревателя, 0 - нагрев, 1 - поддержание температуры*)
    END_VAR
    Код:
    	Time_step := Time_grow / capacity_ADC; (*Это время идет на таймер, который вызывает сигнал Timer*)
    	Timer_grow(IN := 1, PT := Time_step);
    	Operation_time(IN := 1, PT := Time_work_elect_heat);
    	CASE heating_mode OF
    	0:
    		IF Timer_grow.Q AND (Temper_k < Temper_oper) AND Out_elect_heat < capacity_ADC THEN
    			Out_elect_heat := Out_elect_heat + step_grow; (*32 шага при 12-битном АЦП*)
    		ELSIF Timer_grow.Q AND (Temper_k > Temper_oper) AND Out_elect_heat > 0 THEN
    			heating_mode :=1;
    		END_IF
    	1:
    		IF Operation_time.Q AND (Temper_k < Temper_oper) AND Out_elect_heat < capacity_ADC THEN
    			Out_elect_heat := Out_elect_heat + step_grow; (*32 шага при 12-битном АЦП*)
    		ELSIF Operation_time.Q AND (Temper_k > Temper_oper) AND Out_elect_heat > 0 THEN
    			Out_elect_heat := Out_elect_heat - step_grow; (*32 шага при 12-битном АЦП*)
    		ELSE
    			Out_elect_heat := 0;
    		END_IF
    	END_CASE

  2. #2
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,244

    По умолчанию

    чего за понты, ПИД-регулятором не хотели бы воспользоваться для своей задачи
    и точно речь об овеновском плк, так то температуры у нас в REAL-ах, а в словах это у семена

  3. #3

    По умолчанию

    Я не понимаю, где я ошибся, конкретный ПЛК/разрядность и т.д. это второстепенные вопросы. Меня больше интересует, как решить данную проблему.

  4. #4

  5. #5

    По умолчанию

    Спасибо вам! Попробую разобраться что к чему.

  6. #6
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,244

    По умолчанию

    да тут разбираться нечего, Ваш код не будет работать, потому что ))) надо смотреть эпюры
    таймер прокрутится один раз и всё, я не нашел в коде где он перезапускается

  7. #7

    По умолчанию

    Да я это уже понял) Не все мы рождаемся со всеми знаниями, некоторые приобретаем)

  8. #8

    По умолчанию

    Я поправил код, но по какой-то причине не идет время в ET таймера operation_time, в эмуляции устанавливается IN в TRUE, PT тоже время присваивается, но отсчет не начинается. Подскажите, из-за чего так?

    Код:
    	Time_step := Time_grow / capacity_ADC; (*&#221;&#242;&#238; &#226;&#240;&#229;&#236;&#255; &#232;&#228;&#229;&#242; &#237;&#224; &#242;&#224;&#233;&#236;&#229;&#240;, &#234;&#238;&#242;&#238;&#240;&#251;&#233; &#226;&#251;&#231;&#251;&#226;&#224;&#229;&#242; &#241;&#232;&#227;&#237;&#224;&#235; Timer*)
    	Timer_grow(IN := TRUE, PT := Time_step);
    	CASE heating_mode OF
    	0:
    		IF Timer_grow.Q AND (Temper_k < Temper_oper) AND Out_elect_heat < capacity_ADC THEN
    			Timer_grow(IN := FALSE);
    			Operation_time(IN := FALSE);
    			Out_elect_heat := Out_elect_heat + step_grow; (*32 &#248;&#224;&#227;&#224; &#239;&#240;&#232; 12-&#225;&#232;&#242;&#237;&#238;&#236; &#192;&#214;&#207;*)
    		ELSIF Timer_grow.Q AND (Temper_k >= Temper_oper) AND Out_elect_heat > 0 THEN
    			Timer_grow(IN := FALSE);
    			Operation_time(IN := TRUE, PT := Time_work_elect_heat);
    			heating_mode := 1;
    		END_IF
    	1:
    		IF Operation_time.Q AND Timer_grow.Q AND (Temper_k < Temper_oper) AND Out_elect_heat < capacity_ADC THEN
    			Timer_grow(IN := FALSE);
    			Out_elect_heat := Out_elect_heat + step_grow; (*32 &#248;&#224;&#227;&#224; &#239;&#240;&#232; 12-&#225;&#232;&#242;&#237;&#238;&#236; &#192;&#214;&#207;*)
    		ELSIF Operation_time.Q AND Timer_grow.Q AND (Temper_k >= Temper_oper) AND Out_elect_heat > 0 THEN
    			Timer_grow(IN := FALSE);
    			Out_elect_heat := Out_elect_heat - step_grow; (*32 &#248;&#224;&#227;&#224; &#239;&#240;&#232; 12-&#225;&#232;&#242;&#237;&#238;&#236; &#192;&#214;&#207;*)
    		ELSIF NOT Operation_time.Q THEN
    			Operation_time(IN := FALSE);
    			Out_elect_heat := 0;
    		END_IF
    	END_CASE

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

    По умолчанию

    Чтобы работало надо чтобы после отработки таймера перед следующим запуском вход IN сбрасывался в FALSE.

    У вас таймер с задержкой включения. Выход ET изменяется после поступления сигнала на вход IN до тех пор, пока таймер не выдаст сигнал на выходе Q. Следующий раз он будет изменяться только когда очередной раз сбросите и снова включите вход IN.
    Последний раз редактировалось amn; 13.11.2013 в 12:18.

  10. #10

    По умолчанию

    Подскажите, почему при эмуляции Timer1 досчитывает до конца и дальше эмуляция не идет? Я так подозреваю, потому что нет последующего изменения IN на TRUE, после FALSE. Хотя, может в чем-нибудь другом причина?

    Код:
    PROGRAM PLC_PRG
    VAR
    	Timer1 : TON;
    	Timer2 :TP;
    	T1: BOOL := TRUE;
    	T2: BOOL;
    END_VAR
    Код:
    Timer1(IN:=T1, PT:=T#5s);
    Timer2(IN:=T2, PT:=T#10s);
    IF Timer1.Q THEN
    	T1 := FALSE;
    	T2 := TRUE;
    END_IF
    IF NOT Timer2.Q THEN
    	T1 := TRUE;
    	T2 := FALSE;
    END_IF

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. ТРМ-501 - не срабатывает таймер.
    от Kolt в разделе Эксплуатация
    Ответов: 3
    Последнее сообщение: 18.08.2014, 11:21
  2. Не работает таймер автоматической перезагрузки ПМ01
    от Александр85 в разделе Эксплуатация
    Ответов: 12
    Последнее сообщение: 07.02.2013, 11:46
  3. Не работает Pid_Function
    от Игор100 в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 05.05.2010, 10:25
  4. не работает 2-я Pou
    от Дитрих в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 15.01.2009, 09:54
  5. не работает сеть
    от Георгий в разделе Сетевые технологии
    Ответов: 2
    Последнее сообщение: 17.12.2008, 16:37

Ваши права

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