====== Komunikační protokol BACnet ====== BACnet (Building Automation Control Network) je komunikační protokol, navržený pro použití v systémech řízení budov. Mervis IDE u vybraných platforem obsahuje jak [[:cs:mervis-ide:35-help:015-plc:115-bacnet_server|BACnet server]], tak BACnet klient. Driver BACnet pracuje jako BACnet klient - je schopen číst a zapisovat data na server, kterým může být cizí zařízení, jako VZT jednotka, zabezpečovací systém atd. Pro integraci dat z Mervis RT do nadřazeného systému (SCADA) použijte BACnet server. BACnet klient se používá pro integraci cizích systémů na automatizační úrovní - "do PLC".\\ ===== Podporované platformy ===== Podporované hardwarové platformy jsou tyto: * Domat * mark220 * mark320 * markMX * IMIO105 * IMIO110 * ICIO205 * mark125 * wall - všechny typy * Windows RT * Unip - všechny typy * Wago - všechny typy Na ostatních platformách není BACnet klient podporován. BACnet standard popisuje několik komunikačních médií, jako UDP/IP, Ethernet, RS485 (MS/TP), LON atd. Mervis využívá pro přenos protokol UDP/IP na sběrnici Ethernet. (Nezaměňovat s druhým způsobem, BACnet over Ethernet, který pro adresování nepoužívá IP adresy, ale MAC adresy síťových karet.) Linku RS485 tedy aktuálně použít nelze, pro komunikaci se zařízeními BACnet MS/TP je nutné nasadit BACnet router jiného výrobce.\\ ===== Typy objektů a vlastností BACnet a jejich mapování na proměnné Mervis ===== Driver je psán tak, že umožňuje volné přiřazování vybraného typu a instance objektu a jeho vlastnosti (Property) na proměnnou Mervis IDE. Je možné vybrat libovolný typ i vlastnost včetně vlastností specifických pro výrobce (vendor-specific), protože v parametrech proměnné lze zadat i "uživatelskou" (specifickou) vlastnost jako číslo. Při přiřazování je nutné respektovat datové typy tak, aby typ proměnné v IDE odpovídal typu vlastnosti BACnet objektu. U běžných typů objektů, jako Analog Input, Multistate Value atd. nenastává problém, protože u nich se obvykle používá vlastnost Present Value (85). V případě jiné vlastnosti je nutné ověřit její datový typ podle standardu BACnet a v mapování proměnné zvolit správný typ hodnoty a index pole, který určuje, která část dat bude mapována. Komplexní objekty typu Schedule tímto způsobem na časové programy v Mervis IDE mapovat není možné. Koncept integrace toto ani nepředpokládá: editovatelné objekty jako týdenní programy by z BACnet serveru měly být integrovány přímo do HMI, tedy např. programu SCADA.\\ ===== Nastavení v Mervis IDE ===== Nejprve je nutné založit a nastavit komunikační kanál. Ten bude mít protokol BACnet a Linkový protokol UDP. {{:cs:mervis-ide:35-help:bacnet_client_channel.png}} Do kanálu vložíme zařízení (device). To pak bude obsahovat jednotlivé datové body. {{:cs:mervis-ide:35-help:bacnet_client_device.png}} **Vlastnosti zařízení** * **Název** - jméno zařízení pro lepší orientaci v projektu, bude součástí vygenerovaného jména proměnné * **Povolit** - pro řádnou funkci musí být zařízení povoleno. Nastavením False je zablokováno a při kompilaci se neuvažuje. * **Rozšíření zařízení** - v této verzi se nepoužívá **Parametry UDP** * **IP adresa zařízení** - adresa BACnet serveru, se kterým chceme komunikovat. * **Místní port** - číslo UDP portu pro odchozí telegramy. Běžně se nechává 0 (automatické přiřazení z rozsahu "volných portů" 49152-65535 podle specifikace IANA), nicméně některé servery vyžadují, aby klient používal standardní číslo portu vyhrazené pro BACnet, tedy 47808. Při potížích ověřte v dokumentaci cizího BACnet serveru. V tomto parametru lze odchozí port nastavit ručně. * **Port zařízení** - číslo UDP portu cizího BACnet serveru. Standardní hodnota je 47808. Při potížích ověřte v dokumentaci cizího BACnet serveru. **Parametry zařízení BACnet** * **Instance objektu Device** - každý server BACnet má jako povinný objekt instanci objektu typu Device. Ten obsahuje jednak obecné informace o zařízení (výrobce, verze firmwaru, popis, název, komunikační parametry - možnosti segmentace, max. délka paketu), jednak seznam všech ostatních objektů, která server obsahuje. Číslo instance objektu Device bývá obvykle 1. * **Typ síťové adresy** - příprava pro případná rozšíření komunikačních možností. Pro BACnet/UDP zvolte Žádný. **BACnet - parametry pro Žádný** Podle typu síťové adresy mohou být vyžadovány další parametry. Pro Žádný nejsou žádné parametry nutné. **Definice prototypu** Tato sekce se vyplňuje v případě, že chcete z generického zařízení udělat knihovní zařízení, tzv. prototyp. Podle vyplněných parametrů se pak prototyp v knihovně třídí, hledá atd. * **ID modelu** - název prototypu, obvykle typové označení výrobce * **ID verze přístroje** - alfanumerické označení verze přístroje pro případ, že by výrobce uvedl na trh více verzí, mezi nimiž je potřeba rozlišovat * **ID výrobce** - označení firmy výrobce zařízení, obvykle zkratka - používá se pro snadnou identifikaci prototypu v knihovně * **Zámek pro linkový protokol** - nastavte False. * **Verze prototypu** - verze knihovního zařízení Mervis; verze se mohou lišit například počtem komunikovaných proměnných. Číslo verze se zadává ve formátu vX_Y, například "v1_0". * **Stav** - Vývoj, Test, Vydání, Zastaralý, Porušený, Nepodporován. Stav je možné nastavit podle toho, do jaké míry je zařízení "rozpracováno" nebo připraveno k plnému nasazení. Tento parametr může ovlivňovat viditelnost zařízení v knihovně. * Vývoj - na zařízení se pracuje * Test - definice hotova, nutno otestovat v reálné komunikaci * Vydání (Release) - zařízení připraveno k nasazení, otestováno * Zastaralý - existuje jiná, novější verze zařízení, jejíž použití se doporučuje * Porušený - odštěpená verze od hlavní větve, již není udržována * Nepodporován - v knihovně je pouze z historických důvodů nebo kvůli kompatibilitě se starými projekty, nenasazovat. **Informace o zařízení** Volitelně vyplňované údaje. * **Model** - Název přístroje tak, jak ho udává výrobce. * **Verze** - Verze přístroje tak, jak ji udává výrobce. * **Výrobce** - Celý název výrobce zařízení. * **Cesta kategorie** - Text, který určuje cestu ve stromu pro výběr zařízení v knihovně, např. "IRC\Topeni". Jednotlivé úrovně lze oddělit znakem "\". Dalším krokem je přidání komunikační skupiny. Skupina (Group) sdružuje I/O datové body. Klikněte pravým tlačítkem do pracovní plochy Zařízení a vyberte Přidat skupinu. {{:cs:mervis-ide:35-help:bacnet_client_group.png}} **Vlastnosti skupiny** * **Název** - libovolný název skupiny * **DataPoint.SortOrder** - nevyplňujte * **Interval čtení / zápis** - lze nastavit, jak často bude skupina vyčítána nebo zapisována. Pro průběžnou aktualizaci nechte hodnotu 0 ms. * **Je specifický box** - nevyplňovat * **Typ skupiny** - vyberte, zda skupina bude obsahovat proměnné pro čtení nebo pro zápis. **Parametry skupiny BACnet** * **Skupinová akce** - v této verzi nevyplňujte * **Zápis pouze při změně** - u skupiny pro zápis nastavte na True Ve skupině již můžeme definovat jednotlivé I/O datové body s vyplněnými parametry pro komunikaci BACnet. Datové body v rámci jedné skupiny se komunikují v jednom dotazu, což může zefektivnit komunikaci. Pokud by ale byla skupina příliš velká, může dojít k překročení max. délky telegramu (APDU), kterou je protistrana schopna akceptovat. Doporučujeme definovat cca. 20 datových bodů ve skupině. **Pozor**: Maximální počet proměnných v zařízení je cca. 150. Pokud nastanou problémy s komunikací, zkuste zmenšit počet proměnných v zařízení, resp. rozdělit proměnné do dvou zařízení. Klikněte pravým tlačítkem do pracovní plochy Zařízení a vyberte Přidat datový bod. Vyplníme jeho vlastnosti. {{:cs:mervis-ide:35-help:bacnet_client_variable.png}} **Vlastnosti datového bodu** * **Název** - není-li níže definováno jinak, tento název se použije jako část jména proměnné při automatickém generování globálních proměnných funkcí Autogen. * **DataPoint.SortOrder** - nevyplňujte * **Interval čtení / zápis** - přebírá se z vlastností skupiny * **Je specifický box** - přebírá se z vlastností skupiny * **Skupina** - vyberte skupinu, do níž je proměnná přiřazena * **Typ skupiny** - pro info, přebírá se z vlastností skupiny * **Typ mapované komunikační hodnoty** - obvykle BuiltIn, pouze pokud je proměnná typu Binary Input/Output/Value, tak Bit * **Typ ST** - u analogových proměnných obvykle REAL, u multistate proměnných nějaký z celočíselných typů (INT...) * **Transformace** - obvykle Identity; proměnné BACnet již není nutné nijak škálovat, linearizovat atd. **Autogen** * **Povolit Autogen** - True, pokud chceme, aby se automaticky generovala i příslušná globální proměnná pro použití ve FUPLA nebo ST * **Cílový projekt (SWAutogen)**  - vyberte projekt, v němž se mají proměnné automaticky založit * **Generovaná proměnná (SW Autogen)** - název automaticky generované proměnné, pro informaci * **Generované jméno proměnné (SW Autogen)** - pokud se má generovaná proměnná jmenovat jinak, než datový bod, zadejte její název zde. Obvykle se nechává prázdný. * **Retain (SW Autogen)** - pokud je True, hodnota proměnné se ukládá do paměti NVRAM nebo Flash. Obvykle se nechává False. **Parametry dat. bodů zařízení BACnet** Tyto parametry poskytne dodavatel integrovaného zařízení - BACnet serveru. Obvykle jsou k dispozici v podobě tabulky v dokumentaci, nebo jako soubor EDE. Lze je i vyčíst ze zařízení pomocí BACnet browseru (např. Yabe). * **Typ objektu** - Typ objektu BACnet (BACnet Object Type), buď vyberte z předdefinovaných běžných typů, nebo zvolte Specifický a v následující položce Specifický typ objektu zadejte jeho číslo. To se používá u těch typů objektů, které nejsou uvedeny ve standardu BACnet a výrobci si je definují sami. * **Instance objektu** - BACnet Object Instance, neboli číslo objektu určitého typu v rámci zařízení (BACnet Device). * **ID vlastnosti** - Objekt má více vlastností (BACnet Properties), které lze mapovat na proměnné Mervis. Standardní vlastnosti mají definovaná čísla - Property ID, výrobce si může definovat i specifické vlastnosti s Property ID 512 a vyšším. Obvykle nás zajímá vlastnost 85, Aktuální hodnota (Present Value). Pokud chceme jinou vlastnost než Present Value, vybereme Custom a ID vlastnosti zadáme v následujícím parametru. * **Specifické ID vlastnosti** - vyplňuje se pouze v případě, když chceme jinou vlastnost než Present Value. * **Priorita** - zápis do objektů BACnet se provádí s určitou prioritou a lze ho provést pouze tehdy, má-li objekt, do něhož se zapisuje, aktuálně nastavenou prioritu stejnou nebo nižší (tedy s vyšším číslem priority). (Priorit je celkem 16, nejvyšší priorita je 1 = Manual Life Safety.) Doporučujeme výchozí hodnotu nechat Neurčeno a pokud se zápis nedaří, kontaktovat dodavatele zařízení. Neuvážené použití priorit může narušit zamýšlenou funkci zařízení! * **Typ hodnoty** - Typ hodnoty v protokolu BACnet (BACnet Application Datatype). Měl by odpovídat ST typu zadanému výše. Pro binární typy (bool) lze podle standardu BACnet použít typ Enumerated (nejtypičtější), BoolApl nebo BoolCtx, v případě pochyb při volbě je nutné odzkoušet v praxi nebo kontaktovat dodavatele BACnet serveru. * **Index pole** - normálně není použit, hodnota je -1. Následně projekt zkompilujeme a vygenerované proměnné můžeme použít v programu FUPLA nebo ST stejně jako jiné globální proměnné.