Top.Mail.Ru
Odot Automation: Пример управления дискретными выходами

Odot Automation: Модуль CT-222F Быстрый старт

Данный пример демонстрирует создание эффекта «бегущего огня» на модуле дискретных выходов CT-222F с использованием процессора C4374.

Используемое оборудование:
  • Процессор: Odot C4374
  • Модуль расширения: CT-222F (16 дискретных выходов, PNP)

Описание алгоритма

Программа реализует циклическое переключение 16 выходов (от 0 до 15) и обратно. Интервал переключения составляет 300 мс.

Примечание для новичков: Мы используем переменную OutputWord типа WORD, чтобы подготовить состояние всех выходов сразу, а затем одним махом записываем её в физический адрес %QW0.

Код программы (ST - Structured Text)

PROGRAM PLC_PRG
VAR
    // Таймер для создания задержки между шагами
    TimerRun: TON;
    
    // Счетчик текущего активного выхода (0-15)
    StepCounter: INT := 0;
    
    // Направление движения: TRUE = вперед (0->15), FALSE = назад (15->0)
    Direction: BOOL := TRUE;
    
    // Переменная для формирования состояния всех 16 выходов
    OutputWord: WORD;
END_VAR

// 1. Настройка таймера на 300 мс в режиме автогенерации
TimerRun(IN := NOT TimerRun.Q, PT := T#300ms);

// 2. Обработка логики шагов по срабатыванию таймера
IF TimerRun.Q THEN
    IF Direction THEN
        StepCounter := StepCounter + 1;
        IF StepCounter >= 15 THEN
            Direction := FALSE; // Дошли до края, меняем направление
        END_IF;
    ELSE
        StepCounter := StepCounter - 1;
        IF StepCounter <= 0 THEN
            Direction := TRUE; // Вернулись в начало, идем вперед
        END_IF;
    END_IF;
END_IF;

// 3. Формирование выходного сигнала
OutputWord := 0; // Сначала обнуляем все биты

// Включаем бит, соответствующий текущему шагу
CASE StepCounter OF
    0: OutputWord.0 := 1;
    1: OutputWord.1 := 1;
    2: OutputWord.2 := 1;
    3: OutputWord.3 := 1;
    4: OutputWord.4 := 1;
    5: OutputWord.5 := 1;
    6: OutputWord.6 := 1;
    7: OutputWord.7 := 1;
    8: OutputWord.8 := 1;
    9: OutputWord.9 := 1;
    10: OutputWord.10 := 1;
    11: OutputWord.11 := 1;
    12: OutputWord.12 := 1;
    13: OutputWord.13 := 1;
    14: OutputWord.14 := 1;
    15: OutputWord.15 := 1;
END_CASE;

// Подсказка: Вместо CASE можно использовать лаконичную команду сдвига:
// OutputWord := SHL(1, StepCounter);

// 4. Привязка к физическому модулю CT-222F
%QW0 := OutputWord;