====== Dynamické změny ======
Dynamické změny jsou pokročilé funkce, pomocí kterých můžeme měnit buď konfiguraci PLC, nebo samotné vlastnosti komunikačních kanálů nahraných do PLC. Tudíž není potřeba provádět konfiguraci přímo v IDE, ale lze jednotlivé konfigurační proměnné vytáhnout například do HMI.
Pomocí funkcí popsaných níže je možné naprogramovat v ST vlastní funkční bloky podle toho, co je zrovna v projektu vyžadováno.
====== dynpar.setdynamicparamstr ======
===== Popis =====
Funkce slouží k zápisu textových řetězců.
===== Použití v ST =====
WriteResult := dynpar.setdynamicparamstr(id := ParamId, value := ParamToWrite);
===== Vstupy =====
* **id:** string_ref - název parametru
* **value:** string_ref - hodnota parametru k zapsání
===== Výstupy =====
* Žádné výstupní parametry
===== Návratové hodnoty =====
* **0** - žádná chyba
* **-1** - záznam neexistuje
* **-2** - neznámý požadovaný typ (v praxi nemůže nastat)
* **-3** - nesoulad velikosti uloženého záznamu a požadovaného záznamu (např. uložen datový typ bool a čteme datový typ int)
* **-4** - interní chyba kódu
====== dynpar.setdynamicparamint ======
===== Popis =====
Funkce slouží k zápisu celočíselné hodnoty.
===== Použití v ST =====
WriteResult := dynpar.setdynamicparamint(id := ParamId, value := ParamToWrite);
===== Vstupy =====
* **id:** string_ref - název parametru
* **value:** int - hodnota parametru k zapsání
===== Výstupy =====
* Žádné výstupní parametry
===== Návratové hodnoty =====
* **0** - žádná chyba
* **-1** - záznam neexistuje
* **-2** - neznámý požadovaný typ (v praxi nemůže nastat)
* **-3** - nesoulad velikosti uloženého záznamu a požadovaného záznamu (např. uložen datový typ bool a čteme datový typ int)
* **-4** - interní chyba kódu
====== dynpar.setdynamicparambool ======
===== Popis =====
Funkce slouží k zápisu logické hodnoty.
===== Použití v ST =====
WriteResult := dynpar.setdynamicparambool(id := ParamId, value := ParamToWrite);
===== Vstupy =====
* **id:** string_ref - název parametru
* **value:** bool - hodnota parametru k zapsání
===== Výstupy =====
* Žádné výstupní parametry
===== Návratové hodnoty =====
* **0** - žádná chyba
* **-1** - záznam neexistuje
* **-2** - neznámý požadovaný typ (v praxi nemůže nastat)
* **-3** - nesoulad velikosti uloženého záznamu a požadovaného záznamu (např. uložen datový typ bool a čteme datový typ int)
* **-4** - interní chyba kódu
====== dynpar.setdynamicparamtime ======
===== Popis =====
Funke slouží k zápisu časové hodnoty.
===== Použití v ST =====
WriteResult := dynpar.setdynamicparamtime(id := ParamId, value := ParamToWrite);
===== Vstupy =====
* **id:** string_ref - název parametru
* **value:** time - hodnota parametru k zapsání
===== Výstupy =====
* Žádné výstupní parametry
===== Návratové hodnoty =====
* **0** - žádná chyba
* **-1** - záznam neexistuje
* **-2** - neznámý požadovaný typ (v praxi nemůže nastat)
* **-3** - nesoulad velikosti uloženého záznamu a požadovaného záznamu (např. uložen datový typ bool a čteme datový typ int)
* **-4** - interní chyba kódu
===== dynpar.setdynamicparamdt =====
===== Popis =====
Funkce slouží k zápisu data a časové hodnoty.
===== Použití v ST =====
WriteResult := dynpar.setdynamicparamdt(id := ParamId, value := ParamToWrite);
===== Vstupy =====
* **id:** string_ref - název parametru
* **value:** dt - hodnota parametru k zapsání
===== Výstupy =====
* Žádné výstupní parametry
===== Návratové hodnoty =====
* **0** - žádná chyba
* **-1** - záznam neexistuje
* **-2** - neznámý požadovaný typ (v praxi nemůže nastat)
* **-3** - nesoulad velikosti uloženého záznamu a požadovaného záznamu (např. uložen datový typ bool a čteme datový typ int)
* **-4** - interní chyba kódu
====== dynpar.trygetdynamicparamstr ======
===== Popis =====
Funkce slouží ke čtení textového řetězce.
===== Použití v ST =====
ReadResult := dynpar.trygetdynamicparamstr(id := ParamId, value => ReturnValue);
===== Vstupy =====
* **id:** string_ref - název parametru
===== Výstupy =====
* **value:** string - vrácená hodnota parametru
===== Návratové hodnoty =====
* **0** - žádná chyba
* **-1** - záznam neexistuje
* **-2** - neznámý požadovaný typ (v praxi nemůže nastat)
* **-3** - nesoulad velikosti uloženého záznamu a požadovaného záznamu (např. uložen datový typ bool a čteme datový typ int)
* **-4** - interní chyba kódu
==== Funkce dynpar.trygetdynamicparamint ====
Slouží ke čtení celočíselné hodnoty.
===== Použití v ST =====
ReadResult := dynpar.trygetdynamicparamint(id:= ParamId, value => ReturnValue);
===== Vstupy =====
* **id:** string_ref - název parametru
===== Výstupy =====
* **value:** int - vrácená hodnota parametru
===== Návratové hodnoty =====
* **0** - žádná chyba
* **-1** - záznam neexistuje
* **-2** - neznámý požadovaný typ (v praxi nemůže nastat)
* **-3** - nesoulad velikosti uloženého záznamu a požadovaného záznamu (např. uložen datový typ bool a čteme datový typ int)
* **-4** - interní chyba kódu
====== dynpar.trygetdynamicparambool ======
===== Popis =====
Funkce slouží ke čtení logické hodnoty.
===== Použití v ST =====
ReadResult := dynpar.trygetdynamicparambool(id:= ParamId, value => ReturnValue);
===== Vstupy =====
* **id:** string_ref - název parametru
===== Výstupy =====
* **value:** bool - vrácená hodnota parametru
===== Návratové hodnoty =====
* **0** - žádná chyba
* **-1** - záznam neexistuje
* **-2** - neznámý požadovaný typ (v praxi nemůže nastat)
* **-3** - nesoulad velikosti uloženého záznamu a požadovaného záznamu (např. uložen datový typ bool a čteme datový typ int)
* **-4** - interní chyba kódu
====== dynpar.trygetdynamicparamtime ======
Funkce slouží ke čtení časové hodnoty.
===== Použití v ST =====
ReadResult := dynpar.trygetdynamicparamtime(id:= ParamId, value => ReturnValue);
===== Vstupy =====
* **id:** string_ref - název parametru
===== Výstupy =====
* **value:** time - vrácená hodnota parametru
===== Návratové hodnoty =====
* **0** - žádná chyba
* **-1** - záznam neexistuje
* **-2** - neznámý požadovaný typ (v praxi nemůže nastat)
* **-3** - nesoulad velikosti uloženého záznamu a požadovaného záznamu (např. uložen datový typ bool a čteme datový typ int)
* **-4** - interní chyba kódu
==== dynpar.trygetdynamicparamdt ====
===== Popis =====
Funkce slouží ke čtení data a časové hodnoty.
===== Použití v ST =====
ReadResult := dynpar.trygetdynamicparamdt(id:= ParamId, value => ReturnValue);
===== Vstupy =====
* **id:** string_ref - název parametru
===== Výstupy =====
* **value:** dt - vrácená hodnota parametru
===== Návratové hodnoty =====
* **0** - žádná chyba
* **-1** - záznam neexistuje
* **-2** - neznámý požadovaný typ (v praxi nemůže nastat)
* **-3** - nesoulad velikosti uloženého záznamu a požadovaného záznamu (např. uložen datový typ bool a čteme datový typ int)
* **-4** - interní chyba kódu
====== dynpar.deletedynamicparam ======
===== Popis =====
Funkce slouží ke smazání dynamického parametru. Dynamické parametry je možné hromadně smazat při nahrání sestavy.
===== Použití v ST =====
DeleteResult := dynpar.deletedynamicparam(ParamToDelete);
===== Vstupy =====
* **id:** string_ref - název parametru
===== Výstupy =====
* Žádné výstupní parametry
===== Návratové hodnoty =====
* **0** - žádná chyba
* **-1** - záznam neexistuje
* **-2** - neznámý požadovaný typ (v praxi nemůže nastat)
* **-3** - nesoulad velikosti uloženého záznamu a požadovaného záznamu (např. uložen datový typ bool a čteme datový typ int)
* **-4** - interní chyba kódu
====== dynpar.commithwconfiguration ======
===== Popis =====
Funkce slouží pro uložení celého stromu HW konfigurace do paměti PLC. Nemá žádné parametry.
===== Použití v ST =====
CommitResult := dynpar.commithwconfiguration();
===== Návratové hodnoty =====
* **0** - žádná chyba
* **-1** - záznam neexistuje
* **-2** - neznámý požadovaný typ (v praxi nemůže nastat)
* **-3** - nesoulad velikosti uloženého záznamu a požadovaného záznamu (např. uložen datový typ bool a čteme datový typ int)
* **-4** - interní chyba kódu
==== Funkce ReloadApplication ====
Slouží k restartu PLC. Je možné si podle daného flagu určit jaký typ restartu se má provést. Pokud se nenastaví žádný flag, tak se PLC restartuje standardním způsobem (Warm Restart).
===== Použití v ST =====
RestartResult := reloadapplication(Flag);
**Vstupní parametry - Flags (udint)**
* **0x00** - Warm Restart
* **0x01** - Cold Restart
* **0x02** - Restart celého systému (reboot)
===== Výstupy =====
* Žádné výstupní parametry
===== Návratové hodnoty =====
* **0** - žádná chyba
* **-1** - záznam neexistuje
* **-2** - neznámý požadovaný typ (v praxi nemůže nastat)
* **-3** - nesoulad velikosti uloženého záznamu a požadovaného záznamu (např. uložen datový typ bool a čteme datový typ int)
* **-4** - interní chyba kódu
====== Klíče pro konfiguraci PLC ======
Tyto klíče se dají najít v adresáři projektu v adresáři bin, kde se nachází soubor s příponou .XML, který se dá otevřít v textovém editoru. Tento soubor vzniká nahráním konfigurace do PLC.
Před klíče pro konfiguraci PLC se dává předpona "hwcfg". V XML souboru se pohybujeme po jednotlivých uzlech, kde například pro nastavení IP adresy PLC musíme napsat klíč ve tvaru "hwcfg.hwconfiguration.runtime.lwip.ipv4.@ipaddress".
===== Tabulka klíčů pro konfiguraci PLC =====
==== Networking ====
^Typ klíče ^Klíč ^
|IP Address |hwcfg.hwconfiguration.runtime.lwip.ipv4.@ipaddress |
|Network Mask |hwcfg.hwconfiguration.runtime.lwip.ipv4.@mask |
|Gateway |hwcfg.hwconfiguration.runtime.lwip.ipv4.@gateway |
|DNS |hwcfg.hwconfiguration.runtime.lwip.ipv4.@nameserver |
|Static/DHCP |hwcfg.hwconfiguration.runtime.lwip.ipv4.@mode |
|Network Interface Controller Count|hwcfg.hwconfiguration.runtime.advanced.@niccount |
|Enable Configuration over UDP |hwcfg.hwconfiguration.runtime.configservice.@enabled|
|Config Service Port |hwcfg.hwconfiguration.runtime.configservice.@port |
|Enable HTTP |hwcfg.hwconfiguration.runtime.httpservice.@enabled |
|HTTP Port |hwcfg.hwconfiguration.runtime.httpservice.@port |
|Enable HTTPS |hwcfg.hwconfiguration.runtime.httpsservice.@enabled |
|HTTPS Port |hwcfg.hwconfiguration.runtime.httpsservice.@port |
|Redirect HTTP to HTTPS |hwcfg.hwconfiguration.runtime.httpservice.@redirect |
==== SSCP Parameters ====
^Typ klíče ^Klíč ^
|SSCP Address |hwcfg.hwconfiguration.runtime.sscp.@slaveid |
|Number of Registrable Groups |hwcfg.hwconfiguration.runtime.sscp.@groupscount |
|Number of Variables in Group |hwcfg.hwconfiguration.runtime.sscp.@groupvariablecount|
|Enable TCP Server |hwcfg.hwconfiguration.runtime.sscp.tcp.@enabled |
|TCP Server Port |hwcfg.hwconfiguration.runtime.sscp.tcp.@port |
|Enable SSCP Serial |hwcfg.hwconfiguration.runtime.sscp.serial.@enabled |
|SSCP Serial Port |hwcfg.hwconfiguration.runtime.sscp.serial.@port |
|SSCP Serial Baudrate |hwcfg.hwconfiguration.runtime.sscp.serial.@baudrate |
|SSCP Serial Mode (Server/Router)|hwcfg.hwconfiguration.runtime.sscp.serial.@mode |
|Enable SSL Server |hwcfg.hwconfiguration.runtime.sscp.ssl.@enabled |
|SSL Server Port |hwcfg.hwconfiguration.runtime.sscp.ssl.@port |
==== Users Definition ====
^Typ klíče ^Klíč ^
|Engineering |hwcfg.hwconfiguration.runtime.sscp.users.user[1].@name |
|Full Control|hwcfg.hwconfiguration.runtime.sscp.users.user[2].@name |
|Read Only |hwcfg.hwconfiguration.runtime.sscp.users.user[3].@name |
|First User |hwcfg.hwconfiguration.runtime.sscp.users.user[first()].@name|
|Last User |hwcfg.hwconfiguration.runtime.sscp.users.user[last()].@name |
==== Database Parameters ====
^Typ klíče ^Klíč ^
|Enabled |hwcfg.hwconfiguration.runtime.rcwaredb.@enabled |
|Protocol |hwcfg.hwconfiguration.runtime.rcwaredb.urls.url[1].@protocol |
|Host |hwcfg.hwconfiguration.runtime.rcwaredb.urls.url[1].@host |
|Path |hwcfg.hwconfiguration.runtime.rcwaredb.urls.url[1].@path |
|Port |hwcfg.hwconfiguration.runtime.rcwaredb.urls.url[1].@port |
|User Name |hwcfg.hwconfiguration.runtime.rcwaredb.urls.url[1].@username |
|Password |hwcfg.hwconfiguration.runtime.rcwaredb.urls.url[1].@password |
|Certificate Validation|hwcfg.hwconfiguration.runtime.rcwaredb.urls.url[1].@certificatevalidation|
|Communication Period |hwcfg.hwconfiguration.runtime.rcwaredb.@updateperiod |
==== Proxy Parameters ====
^Typ klíče ^Klíč ^
|Enabled |hwcfg.hwconfiguration.runtime.proxy.@enabled |
|Proxy ID |hwcfg.hwconfiguration.runtime.proxy.@id |
|Protocol |hwcfg.hwconfiguration.runtime.proxy.urls.url[1].@protocol |
|Host |hwcfg.hwconfiguration.runtime.proxy.urls.url[1].@host |
|Path |hwcfg.hwconfiguration.runtime.proxy.urls.url[1].@path |
|Port |hwcfg.hwconfiguration.runtime.proxy.urls.url[1].@port |
|Certificate Validation|hwcfg.hwconfiguration.runtime.proxy.urls.url[1].@certificatevalidation|
|Keep-alive Period |hwcfg.hwconfiguration.runtime.proxy.@keepalive |
==== Date/Time Settings ====
^Typ klíče ^Klíč ^
|UTC Offset |hwcfg.hwconfiguration.runtime.sscp.users.user[1].@name |
|Daylight Offsets Number|hwcfg.hwconfiguration.runtime.sscp.users.user[2].@name |
|Year 1 |hwcfg.hwconfiguration.timetransformation.daylights.daylight[1].@year |
|Year 20 |hwcfg.hwconfiguration.timetransformation.daylights.daylight[20].@year |
|First Year |hwcfg.hwconfiguration.timetransformation.daylights.daylight[first].@year |
|Last Year |hwcfg.hwconfiguration.timetransformation.daylights.daylight[last].@year |
|Offset Start |hwcfg.hwconfiguration.timetransformation.daylights.daylight[1].@start |
|Offset End |hwcfg.hwconfiguration.timetransformation.daylights.daylight[1].@end |
|Daylight Offsets |hwcfg.hwconfiguration.timetransformation.daylights.daylight[1].@daylightoffset|
==== NTP Server ====
^Typ klíče ^Klíč ^
|Protocol |hwcfg.hwconfiguration.timetransformation.ntp.urls.url[1].@protocol |
|Host |hwcfg.hwconfiguration.timetransformation.ntp.urls.url[1].@host |
|Path |hwcfg.hwconfiguration.timetransformation.ntp.urls.url[1].@path |
|Port |hwcfg.hwconfiguration.timetransformation.ntp.urls.url[1].@port |
|Certificate Validation|hwcfg.hwconfiguration.timetransformation.ntp.urls.url[1].@certificatevalidation|
|Keep-alive Period |hwcfg.hwconfiguration.timetransformation.ntp.@keepalive |
==== SD Card ====
^Typ klíče ^Klíč ^
|Use for History|hwcfg.hwconfiguration.memorylayout.sdcard.@useforhistory|
|History Size |hwcfg.hwconfiguration.memorylayout.sdcard.@historysize |
====== Klíče pro dynamické změny v image ======
Klíče pro dynamické změny v image se vypisují v záložce "Výstup" ve formátu "OEM Key "channel>ComPort" -> 9698843FC46A2D1A, datatype: SignedInteger32", kde "channel" je název kanálu a "ComPort" daný parametr, z kterého chceme číst nebo do něj zapisovat. Za klíčem se dále vypíše, jakého datového typu je daný parametr. V tomto případě bychom pro čtení tohoto klíče vybrali funkci dynpar.trygetdynamicparamint a pro zápis dynpar.setdynamicparamint.
U klíčů pro změnu v image je potřeba přidat před vypsané klíče ještě předponu "image". Pro příklad pro změnu komunikačního portu u modbusového sériového kanálu s názvem "modbus_channel" by bylo potřeba napsat klíč ve tvaru "image.modbus_channel>ComPort".
===== Tabulka klíčů pro dynamické změny vlastností komunikačních protokolů =====
==== Modbus Serial ====
^Typ klíče ^Klíč ^
|Port Number |image."channel_name">ComPort |
|Baud Rate |image."channel_name">Baudrate |
|Data Bits |image."channel_name">Databits |
|Parity |image."channel_name">Parity |
|Stop Bits |image."channel_name">Stopbits |
|Channel Enable|image."channel_name">Enable |
|Device Address|image."channel_name"."device_name">Address|
|Device Enable |image."channel_name"."device_name">Enable |
==== Modbus TCP ====
^Typ klíče ^Klíč ^
|Channel Enable|image."channel_name">Enable |
|Device Enable |image."channel_name"."device_name">Enable |
|IPv4 |image."channel_name"."device_name">Ipv4 |
|Port |image."channel_name"."device_name">Port |
|Host |image."channel_name"."device_name">Host |
|Address |image."channel_name"."device_name">Address|
==== BACnet Client ====
^Typ klíče ^Klíč ^
|IPv4 |image."channel_name"."device_name">Ipv4 |
|Port |image."channel_name"."device_name">Port |
|Host |image."channel_name"."device_name">Host |
|Device Instance|image."channel_name"."device_name">DeviceInstance|
==== BACnet Server ====
^Typ klíče ^Klíč ^
|IPv4 |image."channel_name"."device_name">Ipv4 |
|Port |image."channel_name"."device_name">Port |
|Device Instance |image."channel_name"."device_name">DeviceInstance|
|Management Password|image."channel_name"."device_name">MgmtPassword |
==== Daikin ====
^Typ klíče^Klíč ^
|IPv4 |image."channel_name"."device_name">Ipv4|
|Port |image."channel_name"."device_name">Port|
|Host |image."channel_name"."device_name">Host|
==== IEC ====
^Typ klíče ^Klíč ^
|Port Number|image."channel_name">ComPort |
|Baud Rate |image."channel_name">Baudrate|
|Data Bits |image."channel_name">Databits|
|Parity |image."channel_name">Parity |
|Stop Bits |image."channel_name">Stopbits|
==== Mbus ====
^Typ klíče ^Klíč ^
|Port Number |image."channel_name">ComPort |
|Baud Rate |image."channel_name">Baudrate |
|Data Bits |image."channel_name">Databits |
|Parity |image."channel_name">Parity |
|Stop Bits |image."channel_name">Stopbits |
|Primary Address |image."channel_name"."device_name">Primary |
|Secondary Address |image."channel_name"."device_name">Secondary |
|Use Secondary Address|image."channel_name"."device_name">UseSecondary|
|Device Enable |image."channel_name"."device_name">Enable |
==== Modbus Server Serial ====
^Typ klíče ^Klíč ^
|Port Number |image."channel_name">ComPort |
|Baud Rate |image."channel_name">Baudrate |
|Data Bits |image."channel_name">Databits |
|Parity |image."channel_name">Parity |
|Stop Bits |image."channel_name">Stopbits |
|Device Address|image."channel_name".“device_name“>Address|
==== Modbus Server TCP ====
^Typ klíče ^Klíč ^
|Channel Enable|image."channel_name">Enable |
|IPv4 |image."channel_name"."device_name">Ipv4 |
|Port |image."channel_name"."device_name">Port |
|Device Address|image."channel_name"."device_name">Address|
|Device Enable |image."channel_name"."device_name">Enable |
===== Tabulka klíčů pro dynamické změny vlastností alarmových kanálů =====
==== SMTP ====
^Typ klíče ^Klíč ^
|Server |image."channel_name".Host |
|Port |image."channel_name".Port |
|Use Authentication |image."channel_name".UseAuth |
|Username |image."channel_name".Username |
|Password |image."channel_name".Password |
|Enable SSL |image."channel_name".Ssl |
|Certificate Validation|image."channel_name".CertificateValidation|
==== GSM ====
^Typ klíče ^Klíč ^
|Port Number|image."channel_name".ComPort |
|Baud Rate |image."channel_name".Baudrate|
|Data Bits |image."channel_name".Databits|
|Parity |image."channel_name".Parity |
|Stop Bits |image."channel_name".Stopbits|