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

Тема: измерение скважности входного шим сигнала

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #16
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,853

    По умолчанию

    Мой вариант
    Захват-1.png

    Прерывания таймера - 40мкс.

    Код:
    PROGRAM PWM_meter
    VAR
    	count: DWORD;		(*счетчик прерываний таймера*)
    	in: BYTE;
    	start1: DWORD;
    	State1: INT;
    	start2: DWORD;
    	State2: INT;
    	start3: DWORD;
    	State3: INT;
    	start4: DWORD;
    	State4: INT;
    END_VAR
    В обработчике прерываний подсчитывается длительность входных импульса - dT в единицах прерывания для каждого входа
    Код:
    count:= count + 1;
    in:= SysPortIn(0);
    
    (*--- Первый вход ПЛК ---*)
    CASE State1 OF
    0:
    IF in.0 THEN
    	start1:= count;
    	State1:= 1;
    END_IF
    1:
    IF NOT in.0 THEN
    	dT1_cycle:= count - start1;
    	State1:= 0;
    END_IF
    END_CASE
    
    (*--- Второй вход ПЛК ---*)
    CASE State2 OF
    0:
    IF in.1 THEN
    	start2:= count;
    	State2:= 1;
    END_IF
    1:
    IF NOT in.0 THEN
    	dT2_cycle:= count - start2;
    	State2:= 0;
    END_IF
    END_CASE
    Полученные значения передаются в PLC_PRG через глобальные переменные
    Код:
    VAR_GLOBAL
    	dT1_cycle: DWORD;
    	dT2_cycle: DWORD;
    	dT3_cycle: DWORD;
    	dT4_cycle: DWORD;
    END_VAR
    Коэффициенты заполнения рассчитываются в PLC_PRG
    Код:
    PROGRAM PLC_PRG
    VAR
    	init:BOOL:=TRUE; (* Переменная для инициализации прерывания таймера при запуске основной программы *)
    	F: REAL := 75.0;		(*Частота ШИМ в Гц*)
    	D1: REAL;	(* коэфф. заполнения 1 в %*)
    	D2: REAL;	(* коэфф. заполнения 2 в %*)
    	D3: REAL;	(* коэфф. заполнения 3 в %*)
    	D4: REAL;	(* коэфф. заполнения 4 в %*)
    END_VAR
    
     (*Инициализируем обработчик прерывания таймера и настраиваем период срабатывания таймерного прерывания*)
    IF (init=TRUE) THEN
    	SetIRQ(40);  (*Период задается в мкс, должен быть кратен 20*)
    	(*ВНИМАНИЕ! Включенный обработчик прерывания работает даже после останове программы,
    	 если необходимо его отключать и повторно включать, то делайте это в обработчике событий  "Stop" и "Start"*)
    	init:=FALSE; (*Обнуление переменной инициализации, чтобы она не происходила на втором и последующих циклах ПЛК*)
    END_IF
    
    (*коэффициент заполнения D= dT/T= dT * F      *)
    D1:= DWORD_TO_REAL(dT1_cycle) * 40 * F / 10000; (* коэфф. заполнения в %*)
    D2:= DWORD_TO_REAL(dT2_cycle) * 40 * F / 10000;
    D3:= DWORD_TO_REAL(dT3_cycle) * 40 * F / 10000;
    D4:= DWORD_TO_REAL(dT4_cycle) * 40 * F / 10000;
    Вложения Вложения
    Последний раз редактировалось petera; 13.11.2018 в 14:25.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

Похожие темы

  1. Ответов: 14
    Последнее сообщение: 04.05.2018, 20:54
  2. Масштабирование входного сигнала
    от rwg в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 15.05.2015, 14:52
  3. ТРМ с аппроксимацией входного сигнала
    от LеShiy в разделе Разработки
    Ответов: 0
    Последнее сообщение: 10.11.2011, 18:34
  4. измерение аналогово сигнала
    от Федин в разделе Эксплуатация
    Ответов: 4
    Последнее сообщение: 08.10.2010, 17:15

Ваши права

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