Domů Nápověda Vyhledávání Přihlásit Registrovat
Novinky:               PROSÍME VŠECHNY UŽIVATELE, PŘED POUŽITÍM DISKUSÍ ČTĚTE MÍSTNÍ PRAVIDLA! ZDE ...!


+  Diskuse Elektrika.cz
|-+  HYBRIDNÍ zóna
| |-+  Firemní podpora
| | |-+  TECO - Foxtrot chytré instalace. ODBORNÍCI radí spotřebitelům!
| | | |-+  Technická podpora výrobce TECO Kolín radí odborníkům
| | | | |-+  Ako spravit funkcny blok stmievanie?
0 uživatelů a 1 Host prohlíží toto téma. « předchozí další »
Stran: [1] Dolů Poslední příspěvky Tisk

Upozornění!
Odpovědi na témata nejsou právně závazné!
Na elektrickém zařízení smí pracovat pouze osoba s příslušnou kvalifikací dle nařízení vlády 194/2022 Sb. Podrobnosti zde!

Autor Téma: Ako spravit funkcny blok stmievanie?  (Přečteno 3040 krát)
Alan
Neverifikovaný uživatel @2
*
Offline Offline



« kdy: 15.02.2017, 13:12 »

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

Pravidla diskusí   Nahlásit moderátorovi   Stěžovat si na moderátora   Zaznamenáno
Alan
Neverifikovaný uživatel @2
*
Offline Offline



« Odpověď #1 kdy: 15.02.2017, 13:12 »

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
Pravidla diskusí   Nahlásit moderátorovi   Stěžovat si na moderátora   Zaznamenáno
Juraj Rojko
*
Offline Offline



« Odpověď #2 kdy: 16.02.2017, 00:08 »

Myslím, že byste měl začít něčím jednodušším a až získáte cit pro ST, tak postupně přidávat funkčnost. Na první pohled tam vidím dva zásadní problémy.

1. U těch prvních dvou IFů vám zřejmě chybí ELSE. Pokud je out true, a stisknete tlačítko, tak se v prvním IF sice out nastaví na false, ale hned potom ze zase vrátí na true v tom druhém IF. Takže to nevypnete.

2. fbTimeToDOWN je celý špatně. Např. proměnnou start, potažmo IN funkčního bloku TON máte pořád true, takže to celé udělá jen jeden pulz. (To nastavení na false uvnitř if nemá na nic vliv.) Dále pak délka smyčky pravděpodobně bude silně překračovat čas potřebný pro jeden krok, takže to nebude dělat v čase to, co očekáváte. A když to rozpohybujete, tak vám to bude počítat do nekonečna (s přetečením outlevel, dostanete na výstupu průběh pilového tvaru). Podívejte se pro inspiraci do knihovny OSCAT, jak se dají řešit časové rampy.


Pravidla diskusí   Nahlásit moderátorovi   Stěžovat si na moderátora   Zaznamenáno
Alan
Neverifikovaný uživatel @2
*
Offline Offline



« Odpověď #3 kdy: 16.02.2017, 09:24 »

No v tom je najvacsi problem.
Programujem OOP a vela krat ked nieco napisem tak to nieje ST a musim prepisovat do ST.
Uprimne nemam cas studovat dokumentaciu.
Potrebujem to napisat teraz a nie pol roka studovat aby som to o rok napisal. =)
Preto napiem sem aby ste mi poradili kde robim chybu.
Prosim Vas moze mi niekto poradit presnejsie bez odkazu na studium?
Toto je jedine miesto kde sa toto da riesit ani google nepomaha.
Pravidla diskusí   Nahlásit moderátorovi   Stěžovat si na moderátora   Zaznamenáno
Stran: [1] Nahoru Poslední příspěvky Tisk 
« předchozí další »

Příbuzné diskuse a články z Elektrika.cz

Příbuzné diskuse a články z Kutil.elektrika.cz



Poháněno MySQL Poháněno PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Validní XHTML 1.0! Validní CSS!
+420 910 100 100
Stránka vytvořena za 0.037 sekund, 23 dotazů.