Potrebujem vytvorit vlastny fnkcny blok na stvmievanie svetiel.
Stimevanie ma ovladat 1 rele, 1 stmievany kanal a led na vypinaci.
Ako vstupy do FB potrebujem mat:
- tlacidlo on/off (dolezite je aby to bolo jedno tlacidlo na vypinaci ktore aj zapne aj vypne)
- tlacidlo stmievanie up
- tlacidlo stmievanie down
- LED dioda na ovladaci ktora ma svietit
- casovac (RupUP) ako dlho m trvat kym sa svetlo po vypnuti uplne zhasne
- casovac ako dlho ma trvat kym sa svetlao zhasne automaticky
- casovac ako dlho pred automatickym zhasnutim ma LED dioda zhasnut
- nastavenie maximalnej hodnoty stmievania (niektore stmievace mam v rozsahu od 0-100 ine od 50-255)
- nastavenie minimalnej hodnoty stmievania
- cas ako dlho musim drzat button na to aby som dosiahol maximalne alebo minimalne svetelne podmienky
- central off signal
Ako vystupy:
- zopnutie rele
- vysledna hodnota
- zapnutie LED
Snad som na nic nezabudol.
Ked som to napisal ja tak som mal problem stym aby sa mi svetlo rozsvietilo ci zhaslo.
Musel som viac krat po sebe kliknut aby sa rozsvietilo a viac krat kliknut aby sa zhaslo.
Prosim Vas viete mi poradit?
Dakujem
-- Spojený príspevok 23 Feb 2017, 15:30 --
Prikladam aj moj NEFUNKCNY KOD:
FUNCTION_BLOCK fbDimmableLigh ts
VAR_INPUT
lightON_OF :BOOL R_EDGE;
centallOFF :BOOL R_EDGE;
levelUP :BOOL;
levelDOWN :BOOL;
minLevel :INT;
maxLevel :INT;
setTimeRamp :TIME;
//name :STRING;
END_VAR
VAR_OUTPUT
out :BOOL;
levelOut :USINT;
END_VAR
VAR_IN_OUT
lastIntensity:INT;
END_VAR
VAR
setUP : fbTimeToUP;
setDOWN : fbTimeToDOWN;
timeStep : TIME;
level : INT;
END_VAR
VAR_TEMP
END_VAR
//Zapnutie svetla
if out AND lightON_OF
THEN
out := FALSE;
levelOut := INT_TO_USINT(lastIntensity);
END_IF;
//Vypnutie svetla
if out = FALSE AND lightON_OF
THEN
out := TRUE;
lastIntensity := USINT_TO_INT(levelOut);
END_IF;
//STMIEVANIE
//Prve sputenie
level := maxLevel-minLevel;
timeStep := setTimeRamp/level;
//UP
IF levelUP
THEN
setUP(time_to := timeStep, start_pos := lastIntensity, outLevel => levelOut);
END_IF;
//DOWN
IF levelDOWN
THEN
setDOWN(time_to := timeStep, start_pos := lastIntensity, outLevel => levelOut);
END_IF;
//VYPNUTIE
if centallOFF
THEN out := FALSE;
lastIntensity := USINT_TO_INT(levelOut);
END_IF;
END_FUNCTION_B LOCK
FUNCTION_BLOCK fbTimeToDOWN
VAR_INPUT
time_to :TIME;
start_pos:INT;
END_VAR
VAR_OUTPUT
outLevel :USINT;
END_VAR
VAR
timer : TON;
output : BOOL;
start : BOOL;
et : TIME;
END_VAR
start:=TRUE;
timer(IN :=start,PT := time_to,Q =>output, ET => et);
IF timer.IN AND timer.Q
THEN
outLevel := INT_TO_USINT(start_pos) - 1;
start:=FALSE;
END_IF;
END_FUNCTION_B LOCK
Ako spravit funkcny blok stmievania v ST pre PLC?
Moderátori: Drakoush, Moderátori
Re: Ako spravit funkcny blok stmievania v ST pre PLC?
Fuj skoro som sa
Tak za 1 - aký je to automat. Skratka PLC vôbec nestačí
2 - čo je to ST? nemyslel si STL?
3 - FB fakt to musí byť funkcia FB? Nestačí to zapúzdriť do FC?
4 - ten kód som sa normálne zježil a predpokladám že sa to vyjasní už pri bode č.1
Tak za 1 - aký je to automat. Skratka PLC vôbec nestačí
2 - čo je to ST? nemyslel si STL?
3 - FB fakt to musí byť funkcia FB? Nestačí to zapúzdriť do FC?
4 - ten kód som sa normálne zježil a predpokladám že sa to vyjasní už pri bode č.1
0
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 7 Odpovedí
- 1639 Zobrazení
-
Posledný príspevok od používateľa kapor
-
- 1 Odpovedí
- 1346 Zobrazení
-
Posledný príspevok od používateľa Ado_PO
-
- 0 Odpovedí
- 401 Zobrazení
-
Posledný príspevok od používateľa lato
-
- 13 Odpovedí
- 1674 Zobrazení
-
Posledný príspevok od používateľa hal_sk
-
- 17 Odpovedí
- 1875 Zobrazení
-
Posledný príspevok od používateľa kapor