Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > SCADA-системы и контроллеры стандарта IEC (МЭК) > ST. Управление освещением на ПЛК на языке ST


Автор: 82Andrey 29.10.2012, 18:23
На входе в квартиру установлены два датчика: один снаружи квартиры, другой внутри. Если 
срабатывает сначала внешний, а потом внутренний датчики, то человек зашел в квартиру. Если 
срабатывает сначала внутренний, а потом внешний датчики, то человек вышел из квартиры. 
Необходимо включать свет в квартире, когда человек зашел у нее, и выключать светло через 
10 секунд после выхода человека из квартиры. Также необходимо считать количество людей, 
которые зашли в квартиру. 

На основе задания разработать : 
a) прикладную программу для ПЛК; 
b) дать описание работы прикладной программы.


проверте пожалуста мне кажется у меня гдето ошибка, и можете обяснить описание работы прикладной программы.

Код

PROGRAM PLC_PRG
VAR
    vh_N: BOOL;
    N: INT;
    vuh_N: BOOL;
    TMR: TOF;
    vuh: BOOL;
    vh: BOOL;
    lamp: BOOL;
END_VAR
 
 
IF vuh AND NOT (vh_N)
THEN;
N:=N+1;
END_IF;
IF vh AND vuh AND NOT (vuh_N)
THEN;
N:=N-1;
END_IF;
IF N>0
THEN;
lamp:=TRUE;
END_IF;
IF N=0
THEN;
lamp:=FALSE;
END_IF;
TMR( IN:=%QX1.0,PT:=T#10s);
vh_N:=vh;
vuh_N:=vuh;




Автор: ama_kid 29.10.2012, 22:31
Цитата(82Andrey @  29.10.2012,  19:23 Найти цитируемый пост)
мне кажется у меня гдето ошибка
Если я правильно понял, то тебе надо написать это дело на CoDeSys? У меня его с собой сейчас нет (я в командировке), но на коленке набросал такой код:
Код
PROGRAM PLC_PRG
VAR
    Sensor_Out AT %IX0.0    : BOOL;
    Sensor_Out_Flag            : BOOL;
    Sensor_In AT %IX0.1        : BOOL;
    Sensor_In_Flag            : BOOL;
    Lamp AT %QX0.0            : BOOL;
    ActiveLamp                : BOOL;
    TD                        : TOF;
    Count                    : INT:=0;
END_VAR

IF Sensor_Out AND NOT Sensor_Out_Flag THEN    // Появился сигнал с первого датчика
    IF Sensor_In_Flag THEN                    // Если уже есть сигнал со второго датчика
        Count:=Count-1;                    // Увеличиваем счетчик людей
    END_IF;
ELSIF Sensor_In AND NOT Sensor_In_Flag THEN    // Появился сигнал со второго датчика
    IF Sensor_Out_Flag THEN                // Если уже есть сигнал с первого датчика
        Count:=Count+1;                    // Уменьшаем счетчик людей
    END_IF;
END_IF;
Count:=SEL(Count<0,Count,0);                // Ограничиваем нулем на всякий случай
TD(IN:=Count>0,PT:=T#10S);                    // Таймер
Lamp:=TD.Q;                                // Формируем выход контроллера

Sensor_Out_Flag:=Sensor_Out;                // Защелка внешнего датчика
Sensor_In_Flag:=Sensor_In;                    // Защелка внутреннего датчика

Чуть более проще можно было бы реализовать с использованием RE-функции R_TRIG, но я хз, нужно тебе это или нет.
В общем, сравнивай и ищи, где у тебя ошибки (а они у тебя практически в каждой строке)

Автор: 82Andrey 30.10.2012, 21:44
огромное спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)