MQTT
V Mervis IDE je protokol MQTT technicky implementován jako klientský driver. Protože však Mervis RT dokáže data jak publikovat (poskytovat), tak i odebírat (přijímat), funguje efektivně oběma směry. Do sekce serverových protokolů je zařazen proto, že prostřednictvím centrálního Brokeru funguje jako poskytovatel dat pro ostatní systémy.
Data jsou organizována pomocí „Topics“, což jsou hierarchické struktury fungující jako cesty, kam jsou data publikována. Například základní složka může být building/hvac, se podsložkami jako building/hvac/temp.
(Poznámka k organizaci: Mervis podporuje Prototypy, které pomáhají systematicky organizovat pojmenování v rozsáhlých projektech. Nebudeme se jim zde detailně věnovat, ale jejich použití je velmi doporučeno pro udržení přehlednosti proměnných.)
Krok 1: Nastavení připojení k brokeru
1. Konfigurace TCP parametrů
- Pro testování: Můžete použít veřejný broker jako
broker.emqx.iona portu 1883. Pozor: Toto je pouze pro testování a nikdy by nemělo být použito pro produkční data. - Pro produkci (KRITICKÉ): Použijte šifrovanou a autentizovanou komunikaci. Nastavte adresu vašeho privátního brokeru, povolte TLS/SSL a použijte port 8883.
2. Konfigurace parametrů zařízení
- Ujistěte se, že máte zvolenou správnou verzi MQTT pro vaši aplikaci (např. MQTT v5.0).
- Definujte vaše Client ID (např. MervisClient). Obvykle je k dispozici API přístup pro přihlašovací údaje, pokud broker vyžaduje autentizaci.
- Nastavte Base Topic (hlavní datovou složku) na
building/hvac.
Užitečné makra Při nastavování Client ID nebo Topics můžete použít makra (nerozlišují velikost písmen), která automaticky doplní systémová data. Tím zajistíte plný kontext bez nutnosti opakovaného psaní.
| Makro | Popis |
|---|---|
ClientId | Vloží definované MQTT Client ID. |
PlcName | Vloží přiřazený název PLC. |
system.rtc | Vloží systémový reálný čas (lokální čas). |
system.rtcutc | Vloží systémový čas v UTC (Coordinated Universal Time). |
3. Nastavení rozumného intervalu čtení/zápisu (KRITICKÉ)
- Výchozí hodnota intervalu Read/Write může být nastavena na 0 ms.
- Je nutné ji změnit na rozumnou hodnotu (např. 1m nebo 2m).
- Pokud zůstane 0 ms, dojde k zahlcení brokeru a neustálým komunikačním chybám.
Krok 2: Organizace skupin pro čtení a zápis
1. Read Group (Subscribing)
Mervis RT používá Read Group pro odběr topicu, parsování dokumentu a aktualizaci hodnot v programu.
- Vytvořte skupinu s názvem
Read_Group. - Nastavte formát payloadu podle toho, co broker odesílá.
- Pro čtení a odběr Mervis nativně podporuje JSON, CSV a prostý text.
2. Write Group (Publishing) & šablony
Mervis RT používá tuto skupinu pro vytvoření dokumentu a jeho odeslání do brokeru.
- Vytvořte skupinu s názvem
Write_Group. - Zde definujete Publish Template, který přesně určuje strukturu odchozích dat.
- Do této šablony můžete psát libovolný formát—JSON, CSV, XML apod.
- Řídicí blok
foreachje velmi užitečný pro iteraci přes více proměnných, ale není povinný. Šablonu lze vytvořit i kompletně ručně.
Krok 3: Vytváření a mapování datových bodů
(Poznámka pro nové uživatele: Mapování datových bodů a práce s Enumy je obecná vlastnost klientských kanálů v Mervis. Pokud jste již používali Modbus nebo jiné protokoly v Mervis, bude vám tento proces velmi povědomý.)
1. Mapování vstupních proměnných
Uvnitř Read_Group vytvořte datový bod pro vstup.
- Mapování na interní proměnnou: Nastavte
IO ⇒ STna cílovou proměnnou. - Data Locator: Použijte Value Path (např.
$.temppro JSON), aby Mervis přesně věděl, kde hledat hodnotu v příchozím payloadu. Pro CSV použijte vlastnost Index k určení přesné pozice hodnoty (indexování od 1). - Přeskočení chybějících dat: Nastavte Ignore Missing Data na True. Pokud hodnota v payloadu chybí, systém ji přeskočí bez vyvolání komunikační chyby.
2. Mapování výstupních proměnných
Uvnitř Write_Group vytvořte datový bod pro výstup (např. Total).
- Mapování na výstup: Namapujte interně vypočtenou proměnnou na výstup pomocí
ST ⇒ IO. - Je důležité zdůraznit, že tato proměnná musí být globální, aby správně fungovala.
Krok 4: Logika funkčních bloků
Po namapování komunikačních proměnných je můžete použít ve standardní logice IEC 61131-3.
V praktické aplikaci můžete například mapovat dva MQTT vstupy (např. Power_Zone_1 a Power_Zone_2) a sečíst je pro výpočet celkové spotřeby energie objektu. Matematický blok vypočítá součet a výsledek se zapíše přímo do globální MQTT výstupní proměnné (Calculated_Total).
Krok 5: Testování pomocí MQTTX
Pro ověření správné funkčnosti použijte desktopového klienta, jako je MQTTX, který simuluje reálný datový provoz. Umožní vám vidět výsledky Publish Templates vytvořených v Kroku 2.
- 1. Připojení: Připojte MQTTX k brokeru (
broker.emqx.io:1883). - 2. Odběr (Subscribe): Přihlaste odběr
building/hvac/#, abyste mohli sledovat veškerá data v rámci base topicu. - 3. Simulace vstupu: Publikujte payload na
building/hvac/temp. Použijte nastavený formát (např. JSON:{„temp“:5,„humidity“:50}nebo standardní CSV řádek). - 4. Ověření výstupu: Sledujte příchozí zprávy v MQTTX. Měli byste vidět, že Mervis okamžitě publikuje novou zprávu obsahující vypočtenou hodnotu přesně ve formátu definovaném vaší šablonou.







