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


Автор: 82Andrey 30.10.2012, 19:55
В исходном состоянии жидкость в баке отсутствующая, сигнализирует 
уровень сухого хода насосу, включен Насос 1. При достижении жидкостью верхнего 
уровня выключается Насос 1 и включается Насос 2. Если уровень жидкости в баке выше 
верхнего уровня, то контролер об этом сигнализирует 

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

У нас есть код програми 
Код

VAR
    startbtn: BOOL; (* кнопка запуска *)
    starting: BOOL; (* процесс запущен *)
    stop_btn: BOOL; (* кнопка останова *)
    dry_lvl: BOOL; (* датчик сухого уровня *)
    hi_lvl: BOOL; (* датчик верхнего уровня *)
    ns1_start: BOOL; (* насос №1 запушен *)
    ns2_start: BOOL; (* насос №2 запушен *)
    avar_lamp: BOOL; (* лампа аварийного уровня *)
    start_btn: BOOL; (* кнопка запуска *)
    overflov_lvl: BOOL; (* датчик переполнения *)
    dry_lamp: BOOL; (* лампа "сухой бак" *)
    lo_lvl: BOOL; (* датчик нижнего уровня *)
    lo_lvl_lamp: BOOL; (* лампа "нижний уровень" *)
END_VAR
 
 
 (*кнопка запуска, останова, самоблокировка*)
LD      start_btn
OR(     starting
ANDN        stop_btn
    )
ST      starting
 
(*признак запуска, и если не верхнийи или не аварийный датчик - включен насос №1*)
LD      starting
ANDN        hi_lvl
ANDN        overflov_lvl
ST      ns1_start
 
(*признак запуска и если  верхнийи или аварийный датчик и не сухой уровень - включен насос №2 *)
LD      starting
AND(        hi_lvl
OR      overflov_lvl
)
AND     dry_lvl
ST      ns2_start
 
(*если переполнение - включаем аварийную лампу*)
LD      overflov_lvl
ST      avar_lamp
 
(*если сухой бак - включена лампа сухой бак*)
LDN     dry_lvl
ST      dry_lamp
 
(*если сработал датчик нижнего уровня - включаем лампу нижнего уровня*)
LD      lo_lvl
ST      lo_lvl_lamp



Чтобы запустить насос ему нужно присвоить значение TRUE! И хорошо бы использовать действительно Глобальные (то есть те которые на контроллере), а те, что у коде - они локальные

Как присвоит насосу значение TRUE, и использовать Глобальние.

Автор: ama_kid 30.10.2012, 22:17
Цитата(82Andrey @  30.10.2012,  20:55 Найти цитируемый пост)
Как присвоит насосу значение TRUE
Зачем ему TRUE присваивать? У тебя в 29-й строке вроде признак формируется на включение, этого достаточно. Теперь просто на выход контроллера надо подать это значение.
Цитата(82Andrey @  30.10.2012,  20:55 Найти цитируемый пост)
и использовать Глобальние
Глобальные - это те переменные, декларация которых находится в Global Variable List. Открывай его и создавай там переменные, какие тебе надо (например, выхода на насосы).

Автор: 82Andrey 30.10.2012, 23:50
как подать на выход контролера это значение?

Автор: ama_kid 31.10.2012, 06:20
Цитата(82Andrey @  31.10.2012,  00:50 Найти цитируемый пост)
как подать на выход контролера это значение? 
у тебя сейчас переменные     ns1_start: BOOL; (* насос №1 запушен *)
ns2_start: BOOL; (* насос №2 запушен *)
объявлены локально, насколько я понял. Ну, как минимум, они являются нелокализованными
Перетащи их в GVL и объяви с выходным адресом в соответствии с таблицей сигналов. Как-то так:
ns1_start   AT %QX0.0: BOOL; (* насос №1 запушен *)
ns2_start   AT %QX0.1: BOOL; (* насос №2 запушен *)



Автор: 82Andrey 31.10.2012, 22:17
ясно спасибо)

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