Domat IDE
Domů
  • Vývojové prostředí Domat IDE
  • Práce s vývojovým prostředím
  • Regulátor (PLC)
  • Založení projektu
  • HMI Editor (web, LCD menu)
  • Tvorba software
  • Zařízení (hardware)
Kontakt
  • Čeština
  • English
Domů
  • Vývojové prostředí Domat IDE
  • Práce s vývojovým prostředím
  • Regulátor (PLC)
  • Založení projektu
  • HMI Editor (web, LCD menu)
  • Tvorba software
  • Zařízení (hardware)
Kontakt
  • Čeština
  • English
  • Vývojové prostředí Domat IDE
    • Často kladené dotazy na technické podpoře
    • Programovací možnosti
    • Komunikační možnosti
    • Hardwarové možnosti
    • Nároky na uživatele
    • Definice formálních pojmů nezbytných pro práci s Merbon IDE
    • Obecný postup při programování regulátorů
  • Práce s vývojovým prostředím
    • Založení sestavy
    • Založení sestavy - zjednodušený mód
    • Klávesové zkratky
    • Ovládání myší
    • Nastavení
    • Vyhledávání proměnných - Najít
    • Archivace projektu
  • Regulátor (PLC)
    • Přiřazení regulátoru (nastavení typu)
    • Aktualizace RT běžícího na regulátoru
    • Aktualizace HW z knihovny
    • Nahrání programu do regulátoru
    • Online změny
    • Vlastnosti regulátoru
    • Konfigurace regulátoru
    • Reboot PLC
    • Dynamické změny
    • Nastavení času
    • Nastavení firewallu
    • Připojení přes proxy
    • Profily
    • Alarmový log
    • Definice činnosti regulátoru PLC
    • Nastavení komunikačního kanálu
    • Vytváření HW proměnných v komunikačním kanálu
    • Automatické přidání zařízení Domat
    • Export zařízení
    • Import zařízení
    • Vazby mezi hardwarovými I/O
    • Mapování globálních proměnných na HW
    • Přístup k proměnným jiného PLC
    • Nastavení Modbus serveru
    • Nastavení BACnet serveru
    • Nastavení SSCP sériové linky
    • OPC server
    • Transformace a konfigurace analogových vstupů
    • Nastavení ukládání dat do databáze (historie)
    • Přehled alarmů
    • Ladění
    • Licencování PLC
    • Přerušení
    • Body přerušení
    • Výjimky z chodu PLC
    • Ruční režim
    • Srovnání HW platform
    • SSL komunikace
    • Stav systému
    • Využití zdrojů PLC
    • Zálohování proměnných
    • Modbus konfigurátor
    • Porovnání lokálního a vzdáleného projektu
    • Syslog protokol
    • Hromadný zápis do proměnných
  • Popis komunikačních protokolů

    • Komunikační protokol BACnet
    • Komunikační protokol Daikin iTC (.NET)
    • Komunikační protokol Hauser (.NET)
    • Komunikační protokol IEC 60870-5-104
    • Komunikační protokol IEC62056-21
    • Komunikační protokol M-bus
    • Komunikační protokol Modbus
    • Komunikační protokol K-Bus
    • Komunikační protokol SoftPLC Link
    • Komunikační protokol SSCP
    • Komunikační protokol Text Parser (.NET)
  • Založení projektu
    • Nový projekt
    • Definice proměnných
    • Autogen - automatické namapování softwarových proměnných na vstupy a výstupy
    • FUPLA editor
    • ST editor
    • Prohlížeč proměnných
    • Grafy (proměnných)
    • Port monitor
    • Výsledky
    • Výstup
    • Hlídané
  • HMI Editor (web, LCD menu)
    • Popis HMI editoru
    • Binární funkce
    • Práce ve zjednodušeném módu
    • Práce v plném módu
    • Uživatelská politika
    • Textové HMI objekty
    • Tvorba definice LCD displeje pro PLC
    • Tvorba textové definice pro terminál
    • Grafické HMI objekty
    • Tvorba grafické definice pro terminál
    • Vytváření stylů
    • Web server
    • Servisní web
    • PLC jako externí webserver
    • Domat Visual
  • Tvorba software
    • Založení sestavy
    • Založení sestavy - zjednodušený mód
    • Programovací jazyky
    • Přístup k proměnným vnořených bloků
    • Nastavení počáteční hodnoty
    • Společné prvky

      • Identifikátory
      • Klíčová slova
      • Mezery
      • Komentáře
      • Literály
      • Proměnné
      • Konstanty
    • Typy dat

      • Elementární datové typy (BOOL, INT, REAL, STRING, atd.)
      • Rodové datové typy
      • Odvozené (uživatelské) datové typy
      • Implicitní konverze elementárních typu
      • Vyhodnocování výrazu z pohledu císelných typu
    • Objektové programování (OOP)
      • Datový typ pointer
      • Datový typ reference
      • Jmenný prostor (namespace)
    • Programové organizační jednotky (POU)
      • Funkce
      • Standardní funkce
      • Funkční blok
      • Standardní funkční bloky
      • Program
    • Jazyk strukturovaného textu (ST)

      • ST editor
      • Příkazy v jazyce ST
      • Operátory jazyka ST
      • ST drivery
    • Jazyk funkčního blokového schématu (FUPLA)

      • FUPLA editor
      • Spojovací čáry v editoru FUPLA
      • Viditelnost vstupů a výstupů na funkcním bloku
    • Knihovny

      • Vytvoření knihovny
      • Použití vlastní (uživatelské) knihovny
      • Knihovní prototypy
      • Basic Analogue Boxes

        • Composition / Decomposition

          • Bit Composition (BD18)
          • Bit Composition 8bit (BD18)
          • Bit Decomposition (BD19)
          • Bit Decomposition 8bit (BD19)
          • Int Composition (BD55)
          • Int Decomposition (BD54)
        • Controllers

          • Direct Acting (cooling)

            • On-Off Control - Cooling (B30)
            • P-Controller - Cooling (B32)
            • PI-Controller - Cooling (B34)
            • PID-Controller - Cooling (B36)
          • Reverse Acting (heating)

            • On-Off Control - Heating (B31)
            • P-Controller - Heating (B33)
            • PI-Controller - Heating (B35)
            • PID-Controller - Heating (B37)
          • Helpers

            • Helper: Multi In Bool 8
            • Helper: Multi In Lint
            • Helper: Multi In Real
            • Helper: Multi Out Bool
            • Helper: Multi Out Bool 8
            • Helper: Multi Out Lint
            • Helper: Multi Out Real
        • Mathematics

          • ABS
          • ADD
          • AVG
          • CEIL
          • DIV
          • FLOOR
          • MAX
          • MIN
          • MOD
          • MUL
          • Smart Average (B48)
          • SUB
          • TRUNC
          • TRUNC_TO_LINT
          • Compare Functions

            • EQ
            • GE
            • GT
            • LE
            • LT
            • NE
          • Logarithm / Exponential Functions

            • EXP
            • EXP10
            • EXP2
            • EXPT
            • LN
            • LOG
            • SQRT
          • Specials

            • ISINFINITY
            • ISNAN
            • ISNEGATIVEINFINITY
            • ISPOSITIVEINFINITY
          • Time

            • ADD_DT_TIME
            • ADD_LDT_LTIME
            • ADD_TOD_TIME
            • ADD_LTOD_LTIME
            • CONCAT_DATE_TOD
            • DIVTIME
            • MULTIME
            • SUB_DATE_DATE
            • SUB_DT_DT
            • SUB_DT_TIME
            • SUB_TOD_TIME
            • SUB_TOD_TOD
          • Trigonometric Functions

            • ACOS
            • ACOSH
            • ASIN
            • ASINH
            • ATAN
            • ATANH
            • COS
            • COSH
            • SIN
            • SINH
            • TAN
            • TANH
        • Sources

          • B3 Sinusový Generator
          • B4 Pilový Generator
        • Specials

          • Analogue Incremental Counter (B107)
          • Analogue Memory (B105)
          • Analogue Shift Register (B110)
          • Integer Memory (B106)
          • Integer Shift Register (B111)
          • Integrator (B113)
          • RAND
        • Switches

          • Analogue Demultiplexer (B10)
          • Integer Demultiplexer (B12)
          • MUX
          • SEL
        • Time Blocks

          • GETDELTATIME
          • GETDELTATIME4
          • GETDSTOFFSET
          • GETEVALTIME
          • GETEVALTIME4
          • GETLOCALTIME
          • GETTIMEZONEOFFSET
          • GETUTCTIME
          • PLC Time (B99)
          • Time+Date to Total Seconds (B97)
          • Total Seconds to Time+Date (B98)
          • Conversions

            • COMPOSEDATETIME
            • CONVERTTOLOCALTIME
            • CONVERTTOUTCTIME
            • DATETOTALDAYS
            • DATETOTALHOURS
            • DATETOTALMILLISECONDS
            • DATETOTALMINUTES
            • DATETOTALSECONDS
            • DECOMPOSEDATE
            • DECOMPOSETIME
            • Time Conversion (B100)
            • TIMETOTALDAYS
            • TIMETOTALHOURS
            • TIMETOTALMILLISECONDS
            • TIMETOTALMINUTES
            • TIMETOTALSECONDS
        • Time Dependent

          • Filter (B86)
          • Pulse Width Modulation (B87)
          • Slew Rate Limit (B84)
          • Variable Slew Rate Limit (B85)
        • Transfer Function

          • LIMIT
          • Limits (B82)
          • Linear Interpolation (B83)
          • Two-Point Function (B80)
          • Four-Point Function (B81)
        • Type Casts

          • BCD_TO_UDINT
          • BCD_TO_UINT
          • BCD_TO_ULINT
          • BCD_TO_USINT
          • DT_TO_DATE
          • DATE_TO_LDATE
          • DATE_TO_DT
          • DATE_TO_LDT
          • DATE_TO_LTOD
          • DATE_TO_TOD
          • DT_TO_LDT
          • DT_TO_LTOD
          • DT_TO_TOD
          • LDATE_TO_DATE
          • LDATE_TO_DT
          • LDT_TO_DATE
          • LDT_TO_DT
          • LDT_TO_LDATE
          • LDT_TO_LTOD
          • LTIME_TO_TIME
          • LTOD_TO_DT
          • LTOD_TO_LDT
          • LTOD_TO_TOD
          • TO_BCD_BOOL
          • TIME_TO_LTIME
          • TO_BCD_BYTE
          • TO_BCD_DWORD
          • TO_BCD_LWORD
          • TO_BCD_WORD
          • TO_BYTE
          • TO_DINT
          • TO_DWORD
          • TO_INT
          • TO_LINT
          • TO_LREAL
          • TO_LWORD
          • TO_REAL
          • TO_SINT
          • TO_STRING
          • TO_UDINT
          • TO_ULINT
          • TO_USINT
          • TO_WORD
          • TOD_TO_LTOD
      • Basic Digital Boxes

        • Counters

          • Pulse Counter (BD30)
          • Down

            • Counter DINT (IEC 61131)
            • Counter INT (IEC 61131)
            • Counter LINT (IEC 61131)
            • Counter UDINT (IEC 61131)
            • Counter ULINT (IEC 61131)
          • Up

            • Counter DINT (IEC 61131)
            • Counter INT (IEC 61131)
            • Counter LINT (IEC 61131)
            • Counter UDINT (IEC 61131)
            • Counter ULINT (IEC 61131)
          • UpDown

            • Counter DINT (IEC 61131)
            • Counter INT (IEC 61131)
            • Counter LINT (IEC 61131)
            • Counter UDINT (IEC 61131)
            • Counter ULINT (IEC 61131)
        • Logical Operations

          • AND
          • NEG
          • NOT
          • OR
          • ROL
          • ROR
          • SHL
          • SHR
          • XOR
        • Sources

          • Pulse Generator (BD2)
        • Specials

          • Alarm Memory Ext. (BD57)
          • Boolean Memory (BD51)
          • Falling Edge Detection (IEC 61131)
          • Flip Flop (BD52)
          • Latch Flip Flop (BD53)
          • Multiple Alarm Memory (BD50)
          • Rising Edge Detection (IEC 61131)
          • RS FlipFlop (IEC61131)
          • Single Alarm Memory (BD49)
          • Single Alarm Memory w. Delay (BD56)
          • SR FlipFlop (IEC61131)
          • Toggle
        • Switches

          • Digital Demultiplexer (BD11)
        • Time Dependent

          • Digital Filter (BD15)
          • Monostable FlipFlop
          • Monostable FlipFlop (Non Resetable)
          • Pulse Encoder (IEC 61131)
          • Switch-Off Delay (BD13)
          • Switch-Off Delay (IEC 61131)
          • Switch-On Delay (BD12)
          • Switch-On Delay (IEC 61131)
          • Switch-On/Off Delay (BD14)
        • Type Casts

          • TO_BOOL
      • Basic String Boxes

        • BYTES_TO_STRING
        • CONCAT
        • DELETE
        • INSERT
        • FIND
        • LEFT
        • LEN
        • LINT_TO_STRING
        • LREAL_TO_STRING
        • MID
        • REPLACE
        • RIGHT
        • STRING_TO_BYTES
        • TO_STRING
      • Communications

        • Emails

          • Send Mail
          • Send Mail Triggered
          • Send Mail Custom
        • Input / Output Functions

          • Close Port
          • Get Port Status
          • Open Port
          • Read Port
          • Write Port
        • SMS

          • Receive SMS
          • Send SMS
          • Send SMS Triggered
      • HVAC

        • Boiler Shifts

          • Bit Rotation (T14)
        • Others

          • E-max (T34)
          • Heat / Cool Recovery Block (T39)
          • Heating Curve (T1)
          • Min / Max Controller (T33)
          • Operating Hours (T32)
          • Power Meter (T36)
          • Pump Switch (T35)
          • Average Power Meter (T37)
        • Physics

          • Dew Point (T28)
          • Enthalpy (T29)
          • Solar Calculator (T40)
        • Time Programs

          • Bool Scheduler (T17)
          • Bool Scheduler Basic (T17)
          • Integer Scheduler (T19)
          • Integer Scheduler Basic (T19)
          • Real Scheduler (T18)
          • Real Scheduler Basic (T18)
        • Valve Controls

          • Three Point Control - Feedback (T6)
          • Three Point Control (T2)
          • Three Point P-Controller (T8)
      • System Function

        • Get Exception Error Code
          • Get Startup Flags
          • Mutex Lock
          • Mutex Unlock
          • Resume Normal Tasks
          • Set System Time
          • Stop Interface Entry Point
        • Dynamic Parameters

          • HwConfiguration

            • DateTime Settings
            • Domat DB Parameters
            • Networking
            • Proxy Parameters
            • Restart PLC
            • SSCP Parameters
            • Storage
            • Users Definition
          • Image

            • Alarm

              • GSM
              • SMTP
            • Device

              • BACnet Client Device
              • BACnet Server Device
              • Daikin iTC Device
              • Mbus Device
              • Modbus RTU Device
              • Modbus TCP Device
              • SoftPLC Link Device
              • SSCP TCP Device
            • Channel

              • Serial Channel
              • TCP/UDP Channel
  • Zařízení (hardware)
    • PLC

      • mark130.2
      • mark220
      • mark220LX
      • mark320
      • mark320LX
      • mark520
      • markMX
      • markMX.2
      • markMX.3
      • markMXL
      • Windows RT
      • ICIO205.2
      • IMIO105.2
      • IMIO110.2
      • w750-8101
      • w750-8102
      • w751-9301
      • wCIO
      • wCIOcom
      • wMX
      • wMXcom
    • Terminálová zařízení

      • HT102
      • HT104
      • HT200
      • HT3xx
    • Zařízení

      • ECIO2 - Kompaktní I/O modul, Ethernet
      • EPC102 - Regulátor topení
      • FC010 - Regulátor fancoilu, komunikativní
      • FC013 - Komunikativní regulátor teploty pro topné a chladicí panely a VAV klapku
      • FC015 - Komunikativní regulátor teploty a CO2 pro topné a chladicí panely a VAV klapku
      • FC020 - Komunikativní regulátor fancoilu
      • FCR010 - Regulátor fancoilu, komunikativní
      • FCR011 - Regulátor fancoilu, komunikativní s napájením 230V AC
      • FCR013 - Komunikativní regulátor teploty pro topné a chladicí panely a VAV klapku
      • FCR015 - Komunikativní regulátor teploty a CO2 pro topné a chladicí panely a VAV klapku
      • M090 - Převodník Modbus TCP / DALI
      • M100 - Teplotní čidlo
      • M200 - Modul digitálních výstupů
      • M210 - Modul 8 digitálních výstupů
      • M215 - Modul 8 digitálních výstupů s ručním přeřízením
      • M300 - Modul digitálních výstupů
      • M312, M313 - Triakový výstupní modul PWM
      • M315 - 8 SSR výstupů s ručním přeřízením
      • M320 - Modul 16 digitálních výstupů
      • M325 - Modul 16 digitálních výstupů s ručním přeřízením
      • M400, M401, M410, M411 - Moduly digitálních vstupů
      • M420 - Modul 16 digitálních vstupů
      • M430 - Modul 32 digitálních vstupů
      • M500 - Modul 8 analogových vstupů
      • M504 - Modul analogových vstupů
      • M560 - Modul univerzálních analogových vstupů
      • M580 - Modul pro měření stringových proudů
      • M610 - Modul analogových výstupů
      • M620 - Modul analogových proudových výstupů
      • M710 - Čítačový modul, 4 vstupy
      • MC102 - Regulátor topení
      • MCIO2 - Kompaktní I/O modul
      • MLIO - Malý distribuovaný I/O modul
      • MMIO - Malý kompaktní I/O modul
      • MT020 - Poruchový transparent
      • MTala010 - Alarmové tablo
      • MW100 - Vrátník
      • MW240, MW240-B, MW241 - Malý I/O modul pro řízení
      • MW501 - Modul analogového vstupu
      • MXIO - Kompaktní I/O modul
      • Stelix DIP200 - Čidlo osvitu a pohybu
      • R060 - Převodník Modbus TCP, RTU/MP-Bus
      • R065 - Převodník Modbus TCP/DMX512
      • R091 - Převodník Modbus TCP/DALI
      • R220 - Modul 12 digitálních výstupů
      • R312, R313 - Triakový výstupní modul PWM
      • R320 - Modul 16 digitálních výstupů
      • R330 - Modul 32 digitálních výstupů
      • R420 - Modul 16 digitálních vstupů
      • R430 - Modul 32 digitálních vstupů
      • R500 - Modul univerzálních analogových vstupů
      • R560 - Modul univerzálních analogových vstupů
      • R610 - Modul analogových výstupů
      • R710 - Čítačový modul, 4 vstupy
      • R800 - Modul 8 AI a 8 AO
      • RCIO - Kompaktní I/O modul
      • RMIO - Malý kompaktní I/O modul
      • RXIO - Kompaktní I/O modul
      • UC102 - Regulátor topení, komunikativní
      • UC120 - Komunikativní regulátor topení s výstupem 0..10V
      • UC150 - Regulátor topení s komunikací Ethernet
      • UC200 - Regulátor topení a chlazení, komunikativní
      • UC210 - Regulátor topení, komunikativní
      • UC211 - Regulátor topení a chlazení
      • UC220 - Komunikativní regulátor topení a chlazení s výstupem 0...10V
      • UC250 - Regulátor topení a chlazení s komunikací Ethernet
      • UC300 - Regulátor podlahového topení, komunikativní
      • UI0xx - pokojový ovladač
      • UI0xxBL pokojový ovladač s podsvíceným displejem
      • UI410 - Modul pro měření a hlášení
      • UI415 - Integrátor slunečního osvitu
      • UI3xx - pokojový ovladač
      • UI5xx - pokojový ovladač, ethernet
      • UI6xx - pokojový ovladač, ethernet, PoE
      • UI9xx pokojový ovladač s CO2
      • UI9xxBL pokojový ovladač s CO2 a podsvíceným displejem
      • US100 - Komunikativní regulátor topení s ovládáním žaluzií
      • UX0xx - pokojový ovladac pro řízení topení, vzduchotechniky, klimatizace a žaluzií
    • Čidla

      • UT090 - Pokojové čidlo teploty, vlhkosti a CO2
    • Wago moduly

      • w704-2054 - 16×; DI nebo 16×; DO
      • w750-404 - sestupný/vzestupný čítač
      • w750-404-000-005 - 16bitový vzestupný čítač
      • w750-450 - 4×; AI pro měření odporu/teploty
      • w750-451 - 8×; AI pro měření odporu/teploty
      • w750-453 - 4×; AI pro proud 0...20 mA
      • w750-455 - 4×; AI pro proud 4...20 mA
      • w750-457 - 4×; AI pro napětí -10...10V
      • w750-458 - 8×; AI pro termočlánky
      • w750-459 - 4×; AI pro napětí 0...10V
      • w750-496 - 8×; AI pro proud 0..20mA, 4...20mA a 3,6...21mA
      • w750-497 - 8×; AI pro napětí 0...10V ss nebo ±10V ss
      • w750-511 - generátor PWM
      • w750-515 - 4×; relé
      • w750-517 - 2kanálový reléový výstup
      • w750-530 - 8×; DI
      • w750-553 - 4×; AO pro proud 0...20mA
      • w750-555 - 4×; AO pro proud 4...20 mA
      • w750-556 - 2×; AO pro napětí ±10 V
      • w750-559 - 4×; AO pro napětí 0...10V
      • w750-597 - 8×; AO pro napětí 0...10 V a ±10 V
      • w750-600 - zakončovací modul sběrnice
      • w750-602 - napájecí modul vnitřních sběrnic (10 A)
      • w750-613 - napájecí modul vnitřních sběrnic (2 A)
      • w750-627 - zakončovací modul pro prodloužení sběrnice
      • w750-628 - modul pro prodloužení sběrnice
      • w750-638 - čítač binárních impulzů
      • w750-642 - rádiový příjímač EnOcean
      • w750-652 - komunikační modul (RS-485, RS-422, RS-232)
      • w750-960 - konektor sběrnice PROFIBUS
      • w750-1400 - 16×; DI
      • w750-1405 - 16×; DI
      • w750-1406 - 16×; DI

Objektové programování (OOP)

DomatIDE dovoluje používat některé z objektových vlastností používaných v jazycích jako je Java, .NET nebo C++. Základním typem pro využívání těchto vlastností je funkční blok. Je možné využívat následující konstrukty:

  • Zapouzdření
  • Metody, včetně virtuálních metod
  • Odkazovat se na předka (SUPER)
  • Hierarchické struktury a dědění
  • Definovat a implementovat rozhraní (interfaces)
  • Polymorfismus

Všechny zvyklosti (RETAIN, INPUT, OUTPUT, INOUT, ...) jsou shodné s klasickým použitím funkčního bloku.

Motivační příklad - counter

Následující příklad ukazuje implementaci jednoduchého čítače, který má maximum, minimum, možnost čítat nahoru nebo dolu a umí vracet aktuálně načítanou hodnotu:

FUNCTION_BLOCK CCounter
    VAR
        m_iCurrentValue: INT;
        m_bCountUp: BOOL:=TRUE;
    END_VAR
    
    VAR
        m_iUpperLimit: INT:=+10000;
        m_iLowerLimit: INT:=-10000;
    END_VAR

METHOD GetCount : INT
    GetCount := m_iCurrentValue;
END_METHOD

METHOD Count
    IF (m_bCountUp AND m_iCurrentValuem_iLowerLimit) THEN
        m_iCurrentValue:= m_iCurrentValue-1;
    END_IF;
END_METHOD

METHOD SetDirection
    VAR_INPUT
        bCountUp: BOOL;
    END_VAR

    m_bCountUp:=bCountUp;
END_METHOD

END_FUNCTION_BLOCK

Použití takto definovaného bloku je v rámci deklarace stejné jako u jakéhokoliv jiného bloku, včetně explicitní inicializace. Jednotlivé metody se pak volají následujícím způsobem:

PROGRAM main
    VAR
        counter1 : CCounter;
        counter2 : CCounter := (m_iUpperLimit := 15000, m_iLowerLimit := -10);
        current_value : int;
    END_VAR

    counter1.SetDirection(bCountUp := true);

    counter1.Count();
    
    current_value := counter1.GetCount();

    counter2.Count();
END_PROGRAM

Metody funkčního bloku

Koncept metod v DomatIDE je stejný jako u jiných objektově orientovaných jazyků. Metody definují operace v rámci jednotlivých instancí funkčního bloku a operují nad daty dostupnými instanci funkčního bloku.

Deklarace metody je uzavřena mezi klíčovými slovy METHOD a END_METHOD.

Metody lze přirovnat k funkcím. Stejným způsobem se jim definuje jméno, parametry (vstupní, výstupní, lokální) a jejich návratová hodnota. Kromě jejich vlastních parametrů mohou pracovat nad společnými daty funkčního bloku.

V jednom funkčním bloku může být více metod a metody mohou volat další metody.

V současné verzi neexistuje podpora pro práci s metodami v grafických jazycích. Je možné je využívat pouze v jazyku ST. Implementace metod v DomatIDE má podporu pro EN a ENO.

Dědičnost

Koncept dědičnosti v DomatIDE je stejný jako u jiných objektově orientovaných jazyků. Lze definovat hierarchii funkčních bloků, kde zpravidla předek představuje obecnější strukturu a potomek nějakou konkretizaci. DomatIDE nepodporuje vícenásobnou dědičnost. Podporuje však možnost implementovat více rozhraní (interfaces). Viz dále. Hierarchický vztah se definuje klíčovým slovem EXTENDS.

Př.:

FUNCTION_BLOCK Circle EXTENDS GeomShape.

Potomek (odděděný funkční blok) má k dispozici všechny proměnné a metody funkčního bloku, ze které dědí. K této funkčnosti může přidávat další metody a data.

Virtuální metody

Virtuální metody jsou takové metody, kterým je možné v hierarchii funkčních bloků měnit implementaci. Pokud se metoda zavolá na instanci předka, bude zavolána odpovídající implementace potomka. Například v hierarchii máme základní funkční blok GeometryShape, který definuje metodu "Area" na výpočet obsahu geometrického obrazce.

Virtuální metoda musí být označena klíčovým slovem VIRTUAL a stejně označené metody v potomcích musí toto slovo uvádět také. Není možné změnit typ metody. "Virtuálnost" musí odpovídat předkovi, a to až na úroveň první deklarace.

Jako příklad uvidíme konkrétní hierarchii geometrických obrazců s obdélníkem a kruhem a u nich implementaci odpovídajícího matematického vzorce.

FUNCTION_BLOCK GeomShape

    (* abstracktni metoda predka *)
    METHOD VIRTUAL Area : REAL
    END_METHOD;

END_FUNCTION_BLOCK

FUNCTION_BLOCK Rectangle EXTENDS GeomShape
    VAR_INPUT
        x, y : real;
    END_VAR

    (* konkretni implementace potomka *)
    METHOD VIRTUAL Area : REAL
        Area := x * y;
    END_METHOD;

END_FUNCTION_BLOCK

FUNCTION_BLOCK Circle EXTENDS GeomShape
    VAR_INPUT
        radius : real;
    END_VAR

    (* konkretni implementace potomka *)
    METHOD VIRTUAL Area : REAL
        Area := 3.14 * radius * radius;
    END_METHOD;

END_FUNCTION_BLOCK

Využití je pak možné následovné:

PROGRAM geom_shapes
    VAR
        rect1 : Rectangle := (x := 10, y := 20);
        circle1 : Circle := (radius := 10);

        shape : REF_TO GeomShape;

        rect_area, circle_area : REAL;
    END_VAR

    (* obecny predek, kteremu muzeme priradit referenci na jakehokoliv potomka *)
    shape := REF rect1;

    (* shape nyni predstavuje Rectangle -> spocita obsah obdelniku *)
    (* rect_area bude po provedeni mit hodnotu 200 *)    
    rect_area := shape.Area();

    shape := REF circle1;

    (* shape nyni predstavuje Circle -> spocita obsah kruhu *)
    (* circle_area bude po provedeni mit hodnotu 314 *)
    circle_area := shape.Area();

END_PROGRAM

Přístup k vlastním položkám a položkám předků

Občas je potřeba, aby potomek přistoupil na položku předka nebo naopak vynutil přístup ke své položce. K tomu slouží klíčová slova SUPER (přístup k předkovi) a THIS (přístup k vlastní položce).

V následujícím příkladu existuje abstraktní předek Car s potomkem StreetCar, který má potomka Bmw. V metodě Description lze zjistit popis předka a spojit ho s vlastním popisem.

FUNCTION_BLOCK Car

 METHOD VIRTUAL Description : STRING
 END_METHOD

END_FUNCTION_BLOCK


FUNCTION_BLOCK StreetCar EXTENDS Car

 METHOD VIRTUAL Description : STRING
  Description := "STREET CAR";
 END_METHOD

END_FUNCTION_BLOCK


FUNCTION_BLOCK Bmw EXTENDS StreetCar

 METHOD VIRTUAL Description : STRING
  (* vrati text od predka a prida k nemu svuj *)
  (* Vysledkem metody tedy bude "STREET CAR BMW" *)
  Description := CONCAT(SUPER.Description(), " BMW");
 END_METHOD

END_FUNCTION_BLOCK

Další příklad:

FUNCTION_BLOCK Base

    METHOD VIRTUAL Description : STRING

        Description := "Base";

    END_METHOD

END_FUNCTION_BLOCK

FUNCTION_BLOCK Descendant EXTENDS Base

    METHOD VIRTUAL Description : STRING

        Description := "Descendant";

    END_METHOD

    METHOD SuperDescription : STRING

        (* Přesně specifikujeme, že jde o konkrétní metodu na předkovi. *)
        SuperDescription := SUPER.Description();

    END_METHOD

    METHOD ThisDescription : STRING

        (* THIS se nemusí uvádět. Implicitně se předpokládá jako nejbližší scope. *)
        ThisDescription := THIS.Description();

    END_METHOD

END_FUNCTION_BLOCK
 
PROGRAM this_super_prg
    VAR
        fb : Descendant;

        desc, this_desc, super_desc : STRING;
    END_VAR

    desc := fb.Description();                // returns "Descendant"
    this_desc := fb.ThisDescription();        // returns "Descendant"
    super_desc := fb.SuperDescription();    // returns "Base"

END_PROGRAM

Vlastní kód výpočtu funkčního bloku

Klasický výpočet (tj. bez objektových rozšíření) funkčního bloku si lze v rámci metod představit jakožto metodu "main". Nemá vstupní parametry ani výstupní parametry a pracuje nad daty dostupnými z kódu výpočtu.

Tento kód je také možné pojmout jako virtuální. A to označením celého funkčního bloku jakožto virtuálního.

Př.:

FUNCTION_BLOCK VIRTUAL ScheduleBase

Rozhraní - Interface

Koncept rozhraní umožňuje oddělit implementaci a specifikaci vlastností, které musí implementace splňovat. Interface obsahuje množinu prototypů metod a neobsahuje jakékoliv datové položky a proměnné. Definice rozhraní je ohraničena klíčovými slovy INTERFACE a END_INTERFACE.

Užití interface je možné v definici funkčního bloku, což pak znamená, že funkční blok musí všechny metody předepsané interfacem implementovat. Na toto slouží klíčové slovo IMPLEMENTS. Druhé možné využití je specifikace typu proměnné. Do proměnná typu interface pak mohou být přiřazeny funkční bloky, které samy nebo v rámci nějakého předka, implementují interface.

Každý funkční blok může implementovat libovolné množství interface.

V následujícím příkladu existuje interface Room, který definuje metody, které se mají volat běhen dne a během noci. Tento interface je implementován funkčním blokem LightRoom, který reprezentuje pokoj s žárovkou. Během dne ji vypíná, v noci zapíná.

INTERFACE Room
    METHOD DayTime END_METHOD // Called in day-time
    METHOD NightTime END_METHOD // in night-time
END_INTERFACE

FUNCTION_BLOCK LightRoom IMPLEMENTS Room
    VAR
        Light: BOOL;
    END_VAR

    METHOD DayTime
        Light:= FALSE;
    END_METHOD
    
    METHOD NightTime
        Light:= TRUE;
    END_METHOD

END_FUNCTION_BLOCK

Využití v programu:

PROGRAM light_rooms
    VAR
        kitchen : LightRoom;
        
        room_interf : REF_TO Room;
    END_VAR; // class instantiation

    room_interf := REF kitchen;
    
    room_interf.DayTime();
    
END_PROGRAM

Dědění interface

Dědění interface je obdobné jako dědění funkčních bloků. Také využívá klíčového slova EXTENDS. Stejně tak interface nemůže dědit více interface.

Funkční blok, který implementuje děděný nebo děděné interface musí implementovat sjednocení metod ze všech interface.

Příklad:

INTERFACE BaseA

    METHOD A END_METHOD

END_INTERFACE


INTERFACE BaseB

    METHOD B END_METHOD

END_INTERFACE

INTERFACE BaseC EXTENDS BaseA

    METHOD C END_METHOD

END_INTERFACE

INTERFACE BaseD

    METHOD D END_METHOD

END_INTERFACE


FUNCTION_BLOCK C IMPLEMENTS BaseC, BaseD

    METHOD A END_METHOD
    METHOD B END_METHOD
    METHOD C END_METHOD
    METHOD D END_METHOD

END_FUNCTION_BLOCK

Polymorfismus

Již z předešlého textu a příkladů je vidět, že v různých situacích může vystupovat předem neznámý typ. Až v době běhu programu dochází k aplikaci konkrétní instance. Toho lze velmi výhodně využít v zabstraktňování problému. Obecný algoritmus může řešit vše nad abstraktními typy a konkrétní implementace pak mohou být poskytovány i zcela jiným subjektem, než je tvůrce knihovny.

Polymorfismus lze využít v následujících případech:

  • Interface - jelikož interface nijak nespecifikuje implementaci, ale pouze kontakt s okolím, je vhodný pro oddělení algoritmů a implementace. Dobrým příkladem z jsou třeba transformace IO. GUI a celý systém předpokládá, že existuje interface definující transformace. Uživatel si pak může udělat libovolnou implementaci pro svá zařízení (př. různé rozsahy teploměrů apod.)
  • Hierarchie funkčních bloků - velmi podobné využití interface. Předkové mohou sloužit v obecnějších voláních a knihovnách podobně jako interface.
  • Virtuální metody - v případě volání na THIS je i v případě, že vlastní instance je předkem, volána vždy až metoda na posledním potomkovi.
  • REF_TO - do proměnných je možné přiřazovat odvozený funkčního bloku nebo interface (viz příklady).
Next
Programové organizační jednotky (POU)