Sunteți pe pagina 1din 18

Comanda automat a aprinderii succesive a unor leduri

Se va scrie un program pentru comanda unui efect luminos cu opt leduri conectate la ieirile
digitale, astfel nct fiecare led s se aprind succesiv. Trecerea de la un led la altul ne propunem
s se realizeze la o frecven de 2 Hz. Efectul luminos de deplasare va ncepe automat cnd se
pornete controlerul i va continua pn la ntreruperea programului de la un semnal exterior. Nu
sunt prevzute elemente de comand care s influeneze procesul, aadar nu este necesar
scanarea intrrilor automatului. Dup punerea n funciune se va modifica programul inversnduse sensul de aprindere a ledurilor i modificndu-se frecvena la 1 Hz.
Cele dou elemente importante care este necesar s fie programate pentru aceast tem de
automatizare sunt:
durata semnalului de aprindere a fiecrui led,
n scopul definirii duratei semnalului se poate utiliza un bloc funcional pus la dispoziie de
productor n cadrul grupei de temporizatoare (timere). ntruct nu sunt necesare resetri sau
etape similare, cea mai simpl soluie const n folosirea blocului funcional TimePulse (TP).
trecerea de la un led la urmtorul.
Se va scrie un bloc funcional general de comutare a ledurilor care s poat fi utilizat ulterior
pentru alte sarcini similare. Astfel, adresa cuvntului de ieire i valoarea dorit pentru durata
semnalului vor fi transferate ctre blocul funcional din exterior, adic de la POU apelant. Aadar
blocul funcional va putea fi apelat de mai multe ori n cadrul aceluiai program i astfel va fi
posibil comanda chiar a mai multor seturi de 8 leduri de la acelai program.
Se va crea un bloc funcional prin care sunt aprinse i stinse ledurile i este apelat blocul
funcional pus la dispoziie de productor TP pentru definirea duratei semnalului. Vom da acestui
bloc funcional denumirea LIGHT.
Blocul funcional LIGHT va fi apelat din programul principal care va fi denumit EXP-PS4.
Adresa cuvntului de ieire i valoarea duratei semnalului vor fi transferate blocului funcional
LIGHT de ctre POU program atunci cnd acesta l apeleaz.
Blocul funcional care aprinde ledurile
Efectul de lumin care fuge poate fi obinut prin setarea unui singur bit pentru a ncrca o
matrice de bii ntr-un registru la intervale regulate, deplasnd aceast matrice de bii cu un bit i
apoi returnnd-o. Matricea de bii se transfer sub forma unei variabile. Sucusoft permite citirea
unei variabile ca o variabil de intrare i scrierea sa ca o variabil de ieire simultan, variabila
respectiv se va defini ca o variabil de intrare/ieire. O vom declara cu denumirea Light_strip i
cu tipul de date Byte. Cuvntul cheie folosit pentru variabilele de intrare/ieire este
VAR_IN_OUT, iar tagul de sfrit al declarrii este END_VAR.
Adresa fizic nu va fi transferat pn ce variabila nu este apelat de un POU program de nivel
mai nalt. Se va utiliza urmtorul bloc de declarare:

Pentru deplasarea matricei de bii se poate utiliza sau o instruciune de deplasare sau una de
rotaie, sau ctre dreapta sau ctre stnga. Utilizarea unei instruciuni de deplasare necesit
ncrcarea unui 1 logic dup fiecare opt pai de deplasare. Astfel, este mai avantajos i vom
alege s folosim comanda de rotaie. Liniile de instruciuni pe care le vom folos n acest sens
sunt:

Definirea duratei semnalului


Aa cum am mai spus, vom utiliza blocul funcional pus la dispoziie de productor TP
(TimePulse).

Prototipul blocului funcional TP


IN
PT
Q
ET

Condiia iniial
Setarea valorii timpului
Starea binar a timerului
Valoarea curent a timpului

Diagrama de temporizare pentru TP


Timerul pornete cu un vrf de cretere pe intrarea IN i menine starea de 1 pe ieirea boolean
Q pe durata valorii de timp predefinite PT. Ieirea ET indic valoarea curent a timpului. n
timpul care se deruleaz timpul starea de 1 logic de la ieirea Q se pstreaz indiferent de
starea intrrii IN. Operanzii IN i Q sunt operanzi binari. Operanzii PT i ET sunt de tipul de date
standard TIME (avnd valoarea implicit T#0s).
Folosirea blocurilor funcionale

n seciunea de declarare a POU-lui apelant se va crea o copie a fiecrui bloc funcional. n acest
scop se aloc blocului funcional o denumire la liber alegere care trebuie s fie declarat ca o
variabil local. Blocul funcional TP va fi apelat din blocul funcional LIGHT, astfel c TP va fi
declarat n seciunea de declarare din LIGHT. Se va aloca o variabil PULSE acestui bloc
funcional TP prin:

La apelarea unui bloc funcional, valorile de procesat sunt transferate ctre intrrile sale, iar
rezultatele sunt returnate prin variabilele de ieire. Astfel sunt necesare variabile suplimentare n
POU apelant pentru transferul parametrilor i preluarea rezultatelor. Denumirile variabilelor se
pot selecta la libera alegere. S zicem c declarm urmtoarele variabile ce vor utilizate de blocul
funcional TP i sunt declarate n blocul funcional LIGHT:
Start
Pulse_duration
Time_running
Current_time

Condiia de start care se transfer ctre operandul IN


Setarea valorii timp pentru PT
Starea logic a timerului pus la ieire prin operandul Q
Momentul de timp actual transferat la ieire prin operandul ET

Variabila durat a impulsurilor Pulse_duration se declar ca o variabil de intrare astfel nct s i


se poat transfera oricnd valoarea ctre operandul PT al blocului TP la apelarea blocului
LIGHT. Celelalte variabile pot fi declarate ca variabile locale deoarece ele sunt valabile numai n
cadrul blocului LIGHT, nu i n programul apelant EXP_PS4. Iat declararea:

Blocul funcional este apelat prin instruciunea CAL urmat de denumirea instanei ce definete
adresa blocului funcional. n exemplul nostru CAL Pulse.
Sunt trei metode disponibile pentru transferul parametrilor, din care vom descrie aici doar dou:
n cazul primei metode parametri se transfer direct prin apelarea blocului funcional. Ei
se introduc ntre paranteze, separate ntre ele prin virgule. Caracterul I este scris ntre
parametrii de intrare i cei de ieire:

n cazul celei de a doua metode parametrii de intrare sunt ncrcai individual cu ajutorul
comenzii LD i apoi transferate ctre operanzii blocului funcional folosind instruciunea
ST, nainte de apelarea blocului funcional. Operanzii de ieire sunt scanai dup apelarea
blocului funcional. Sintaxa de specificare a operanzilor blocului funcional este:
urmtoarea: Denumirea_instanei.operand. n acest caz codul corespunztor apelrii
blocului funcional este urmtorul:

Oricare dintre aceste metode se poate alege, dup preferine. Unicul avantaj al celei de a doua
metode este acela c este o metod standard IEC de apelare a blocurilor funcionale i astfel
permite reutilizabilitatea n alte sisteme IEC. Prima metod mult mai compact specificarea
parametrilor de ieire dup acel caracter I este specific sistemelor Moeller-Eaton. n exemplul
de mai jos vom apela blocul TP folosind cea de a doua metod din cele 2 prezentate.
Generatorul de impulsuri se creeaz prin returnarea valorii negate a lui Q la intrarea IN:

Ieirea Q are starea logic 1 att timp, ct funcioneaz generatorul de impulsuri. Starea de 0
logic care cauzeaz repornirea timerului este activ pe durata unui ciclu program. Durata ciclului
programului este aproximativ egal ca valoarea lui PT, putndu-se neglija impreciziile, abaterile
de durat ale unui ciclu program.
Liniile de instruciune pentru programarea duratei semnalului sunt urmtoarele:

Acum se poate simplifica programul. Putem porni timerul direct cu starea negat a ieirii Q.
Variabilele Start i Time_running nu mai sunt necesare. Definirea sarcinii de automatizare nu
necesit interogarea valorii curente a timpului; dar variabila Current_time rmne pentru a
permite afiarea duratei de timp scurse n timpul testrii pe viu. Programul devine:

Structura blocului funcional LIGHT


Este necesar deplasarea cu o poziie a matricii de bii dup ce s-a scurs timpul PT. Aceasta se va
implementa cu ajutorul unei etichete de salt care permite s se sar peste operaiunea de rotire
atta timp ct generatorul de impulsuri ruleaz. Matricea de bii a variabilei Light_strip se va
deplasa atunci cnd a trecut timpul adic la starea de 0 logic a ieirii Q. Saltul condiional se
poate programa cu ajutorul comenzii JMPC. Saltul se efectueaz dac n registrul de lucru avem
valoarea de 1 logic. Denumirea etichetei de salt se poate selecta liber, n acest caz vom alege
not_shift:

Acum se poate optimiza programul, adic l putem scurta cu cteva modificri. Instruciunea
LDN Pulse.Q care furnizeaz starea de pornire pentru generatorul de impulsuri poate fi
utilizat simultan i ca o condiie pentru eticheta de salt. Astfel vom nlocui comanda JMPC cu
JMPCN, care determin efectuarea saltului cnd rezultatul curent este 0 logic.

Seciunea de program prin care se deplaseaz biii matricei variabilei Light_strip se proceseaz
numai atunci cnd tocmai a trecut timpul n timerul TP. Apoi timerul se repornete din nou i din
nou sunt srite instruciunile de rotire a biilor.
POU program EXP_PS4
Blocul funcional LIGHT va fi apelat din programul EXP_PS4. Cnd se apeleaz blocul
funcional este necesar transferul urmtorilor doi parametri: valoarea timpului pentru definirea
vitezei de rulare a adresei fizice la care se indic lumina curgtoare.
Se declar mai nti blocul funcional. Se aloc denumirea de instan Light_sequence n
cadrul seciunii de declarare a variabilelor din POU EXP_PS4:

Viteza de rulare va fi definit cu ajutorul unei variabile de tip TIME care se iniializeaz cu
1

valoarea de 500 ms corespunztor frecvenei de 2 Hz ( T f 2 Hz 0,5 s 500 ms ).


Variabila se declar ca o variabil local, ce este necesar numai n cadrul POU. i vom da
denumirea de vitez de rulare, adic Running_speed:

Variabila Display (afiaj) este folosit pentru a furniza la o anumit ieire semnalul de comand a
ledului. Se declar ca o variabil local, reprezentat direct. Declararea variabilei specific
adresa ieirii automatului, n acest caz cuvntul de ieire 0. dup o pornire la rece, variabila
Display se va iniializa la valoarea 1 logic, dup cum urmeaz:

Acelai rezultat se poate obine prin iniializarea cu matricea de bii 00000001:

Este necesar pur i simplu s se apeleze blocul funcional LIGHT (cu denumirea declarat de
Light_sequence) n cadrul seciunii de instruciuni al POU EXP_PS4. Vom utiliza prima metod
pentru transferul parametrilor:

Astfel programul EXP_PS4 arat n felul urmtor:

Scrierea efectiv a aplicaiei n Sucosoft


Paii de urmat pentru implementarea sarcinii de programare sunt urmtorii:
Introducerea FB LIGHT
Introducerea programului EXP_PS4
Declararea variabilelor
Introducerea programului
Configurarea topologiei componentelor sistemului
Generarea codului programului
Transferul programului n automat
Pornirea programului
Testarea programului
n principiu se poate schimba ordinea crerii diferitelor POU, dar este recomandat a se ncepe cu
POU de nivel structural mai sczut (n cazul nostru LIGHT).
Se utilizeaz Navigator pentru a crea un nou director pentru a salva proiectul, de exemplu
learnPS 4 n catalogul PROJECTS. n acest scop se folosete meniul sau butonul
corespunztor. Se creeaz astfel un nou proiect n directorul respectiv.
Pentru a crea blocul funcional se folosete Navigator, se merge n Options / POU Editor sau
se folosete butonul corespunztor de la pe bara de instrumente Sucosoft. Se va deschide
fereastra de editor POU. Se d click pe butonul FB din bara de instrumente standard ntruct
dorim s crem un bloc funcional sau se selecteaz din meniu: Select File / New POU apoi
function block ca tipul noului POU.
Se deschid cele dou ferestre ale seciunilor de declarare i de instruciuni. Vom declara
variabilele n editorul cu controlul sintaxei deoarece acesta ne asigur corectitudinea introducerii
cuvintelor cheie.

Am decis deja anterior cu privire la urmtoarele variabile:

Se poate trece de la un mod de declarare a variabilelor folosind meniul sau butoanele


corespunztoare.
Se ncepe cu variabila Current_time. Pentru tipul de date se deschide lista i se selecteaz tipul
standard TIME. Se introduce drept comentariu preset time. Dac toate acestea s-au introdus
corect, variabila este acceptat cnd trecem la urmtoarea linie. Se declar similar ca o variabil
local i blocul funcional pus la dispoziie de productor TP. Astfel, se introduce denumirea
Pulse la denumirea variabilei, se selecteaz function Block la tipul datelor poziionnd
cursorul mouseului n seciunea de declarare, apoi deschiznd meniul contextual din click
dreapta sau folosind meniul Insert/Data type.

Meniul contextual

Se selecteaz din lista blocurilor funcionale puse la dispoziie i specifice productorului aa


cum ilustreaz figura de mai jos:

Blocurile funcionale definite de productor pentru PS 4-200


Se selecteaz Timer function blocks / TP i apoi se d click pe butonul Accept. Lista se
nchide i apare TP la rubrica Tip din linia de editare.
Se poate introduce un comentariu.
Se d click pe tabul In_Out de la baza ferestrei pentru a declara variabila de intrare/ieire
Light_strip. Se d click pe tabul Input pentru a declara variabila pulse_duration.
Acum s-a finalizat seciunea de declarare a variabilelor. Afiarea tuturor variabilelor declarate
este posibil numai n modul liber de declarare:

Variabilele declarate ale blocului funcional LIGHT


Introducerea instruciunilor n editorul de instruciuni IL
Se trece la seciunea de instruciuni prin click pe ea sau prin combinaia de taste CTRL+TAB. Se
selecteaz din meniu sau din butoanele barei de instrumente metoda IL de introducere a
instruciunilor.
Se introduce programul de mai jos:

Seciunea de instruciuni a blocului funcional LICHT


Se salveaz blocul funcional din comanda File/Save as sau folosind butonul corespunztor din
bara de instrumente n projects\learnPS4 subdirectorul source sub numele de LIGHT. Se
efectueaz o verificare de sintax cu File / Syntax check sau prin click pe butonul
corespunztor.
Introducerea programului EXP_PS4
Se creeaz un nou POU de tip program din meniu sau din butonul corespunztor. Cu privire la
declararea variabilelor am decis deja:

nti se declar blocul funcional LIGHT care va fi apelat de acest POU. n acest scop se
introduce denumirea Light_sequence ca denumirea a variabilei.

Cnd se salveaz blocul funcional LIGHT, acesta a fost automat adugat la lista blocurilor
funcionale definite de utilizator. Astfel poate fi selectat dintr-o list, aa cum a fost cu blocul
funcional definit de productor mai sus. Din nou se selecteaz tipul dnd click dreapta cu
cursorul pe celula Type i deschiznd meniul contextual sau folosind meniul Insert/Data
types. Se deschide fereastra blocurilor funcionale definite de productor / utilizator, se
selecteaz tabul corespunztor celor definite de utilizator (User) i se selecteaz blocul
funcional LIGHT creat anterior. Se d click pe butonul Accept.
Se declar variabila local Running_speed. Se introduce denumirea i tipul variabilei i
valoarea de t#500ms n rubrica Initial Value i se d acceptare.
Se declar variabila local Display. Se introduce denumirea i tipul variabilei i valoarea de 1
n rubrica Initial Value i %QB0.0.0.0 la rubrica de adrese i se d acceptare.

Variabilele declarate ale programului EXP_PS4


Introducerea programului cu list de instruciuni
Se trece din nou la seciunea de instruciuni.
Este necesar apelarea blocului funcional LIGHT prin denumirea declarat n setul de
instruciuni. Apelarea i transferul parametrilor se poate realiza manual sau automat, prin
apelarea predefinit a blocului funcional, cu condiia ca respectivul blocul funcional s fie deja
inclus i introdus n proiectul curent i s nu conin erori de sintax (condiii ndeplinite n cazul
nostru). Pentru integrarea blocului funcional, se d click dreapta deasupra seciunii de
instruciuni pentru a deschide meniul contextual sau se folosete meniul Insert/Insert variable.

Meniul contextual
Se selecteaz Local conform tipului de variabil pentru a se deschide feresastra Insert
Variable: Local selection.
Se selecteaz blocurile funcionale definite de utilizator.

Blocurile funcionale definite de utilizator


Se selecteaz Light_sequence nsemnat cu [FB] i se d click pe butonul Accept.
Se nchide fereastra cu list i sunt introduse automat n seciunea de instruciuni apelarea
blocului funcional, denumirea instanei i operanzii blocului funcional.

Se finalizeaz apelarea blocului funcional prin alocarea variabilelor care conin valoarea curent
a timpului (Running_speed) i a matricii de bii a ledului cu lumin curgtoare (Display) la
operanzii blocului funcional Pulse_duration i Light_strip.

Seciunea de instruciuni a programului EXP_PS4


Se salveaz POU cu numele EXP_PS4. Se efectueaz verificarea de sintax i se efectueaz
eventualele corecturi dac sunt necesare pentru ca verificarea de sintax s dea rezultat
corespunztor. nainte ca exemplul de programare s poat fi verificat i modificat n timpul
rulrii este necesar s se fi efectuat verificarea de sintax i programul s fi fost deja convertit
ntr-un program executabil pentru automat. n acest sens este necesar definirea topologiei i
generarea codului de program.
*****
Testarea i modificarea programului
Fiecare dintre POU poate fi afiat i modificat dac este necesar n timpul rulrii sale n automat.
Vom vedea cum se poate modifica sensul de curgere a luminii prin leduri i, respectiv, viteza
(frecvena) de alternare a aprinderii ledurilor. n acest scop este necesar s fie deschis fereastra
Program, i fie selectat POU LIGHT i s fie afiat seciunea de instruciuni corespunztoare. n
fereastra Connection list se d click pe butonul POU Editor online pentru a deschide
fereastra Program.
La nceput vom vedea numai RESOURCE pe nivelul structural cel mai de sus din fereastra din
partea stng. Nivelele mai de jos ale ntregului program pot fi afiate dnd dublu-click pe
RESOURCE n fereastra din partea stng. Dac un program este supraluminat n fereastra din
partea stng, se afieaz componentele de program ale nivelului inferior urmtor.
Se d dublu-click pe RESOURCE pentru a se afia numele programului POU EXP_PS4 n
fereastra din partea stng.

Se d dublu-click pe EXP_PS4 [EXP_PS4] n fereastra din partea stng pentru a se afia blocul
funcional subordonat LIGHT.
Se d dublu-click pe Light_sequence [LIGHT] n fereastra din partea stng pentru a se afia
blocul funcional TP, care reprezint cel mai de jos nivel, n fereastra din partea dreapt.

Se selecteaz blocul funcional LIGHT_SEQUENCE [LIGHT] i se d click pe butonul


Display/Change PO.
Se deschide IL Online Editor care va ilustra seciunea de declarare i de instruciuni a blocului
funcional. Starea variabilelor se poate afia n aceast fereastr, aspect foarte util pentru
depanare. Se selecteaz n acest sens Status Display.

Pentru a anula actualizarea continu a strii variabilelor, se alege din nou comanda sau butonul
Status Display. Aceasta determin pstrarea pe ecran a valorilor anterior actualizate.
Editorul Online permite modificarea listei de instruciuni n timpul rulrii programului. Astfel se
economisete timp, nefiind necesar modificarea programului n editorul POU i apoi generarea
din nou a codului. Fiecare modificare este automat actualizat n POU, n fiierul cod i n
automat.

Modificarea sensului de curgere a luminii prin leduri


Modificarea sensului de curgere a luminii prin leduri se poate realiza prin nlocuirea comenzii
ROR (rotire dreapta) cu comanda ROL (rotire stnga).
Viteza de curgere a luminii se poate modifica prin redefinirea valorii timpului pentru blocul
funcional TP la 1 secund, corespunztor noii frecvene de 1 Hz.
Se alege Modify din meniul Online, se poziioneaz cursorul n linia de program care
conine comanda ROR i se modific aceasta n comanda ROL, dup care se d click pe
butonul Activate.

S-ar putea să vă placă și