Ovladač je určen pro komunikaci se zařízeními, které podporují protokol
SNMP - viz
Komunikace protokolem SNMP.
Před použitím tohoto ovladače v aplikaci PROMOTIC je vhodné shlédnout "
PROMOTIC video kurz 4 - Komunikační ovladače".
Základní vlastnosti ovladače:
- Použití tohoto ovladače vyžaduje zakoupení
licence PmSNMP. Při vývoji aplikace ve freeware módu
PmFree nebo s
vývojovou licencí a při jejím testování v runtime je tato komponenta vždy funkční.
- Komunikace je pro Ethernet (aplikace PROMOTIC je klient). Komunikace probíhá protokolem UDP/IP na portu 161.
- Aplikace PROMOTIC je z hlediska této komunikace vždy Master (to znamená, že dává podnět pro přenos dat).
- Ovladač podporuje:
- SNMP verze 1 (SNMPv1) (rok 1988, RFC1155, RFC1156, RFC1157).
- SNMP verze 3 (SNMPv3) (RFC3411 ... RFC3418)
Umožňuje zabezpečení s autorizací a se šifrováním. Autorizace se provádí algoritmem MD5 a šifruje se kryptem DES.
- Ovladač je začleněn do systému PROMOTIC pomocí objektu
PmaComm.
- Ovladač podporuje použití objektu
PmaCommGroup (pro čtení i zápis proměnných v
SNMP agentovi / serveru / PLC zařízení ...).
- Objekt
PmaCommMsg se používá pouze pro speciální pomocné zprávy, které zjistí názvy proměnných, které lze vyčítat ze zařízení (viz dále). Tato zpráva je prozatím podporována pouze pro
SNMP verze 1.
- Ovladač nepoužívá
MIB databázi. Externími programy však lze
MIB databázi číst a tak zjistit adresy (
OID) požadovaných parametrů.
Podporované datové typy:
-
Integer:
4-bajt celé číslo (od
-2 147 483 648 do
+2 147 483 647) (pro čtení i zápis).
- Unsigned32: 4-bajt celé číslo (od 0 do +4 294 967 295) (pro čtení i zápis).
- Counter: 4-bajt celé číslo (od 0 do +4 294 967 295) (pro čtení i zápis).
-
OctetString:
Text ve formátu
HexaString (binární data v podobě hexadecimálních hodnot uložených v textovém řetězci) (pro čtení i zápis).
Je to univerzální typ umožňující nést řadu dalších nespecifikovaných typů. Například textový řetězec, datum a čas, fyzická adresa (MAC), pole, atd. Bohužel data tohoto typu nenesou informaci o typu dat v něm zabalených. K rozšifrování obsahu je nutno znát obsah databáze
MIB.
Tip: V metodě
Pm.TransformValue je implementována podpora pro práci s typem
HexaString.
V ovladači lze význam obsahu tohoto typu upřesnit dodatečnou informací (viz popis
ItemId). Jedná se o tyto "podtypy" (v
SNMP se tomu říká
"Composed syntax"):
- DisplayString = v typu OctetString je uložen textový řetězec
- DateTime = v typu OctetString je uložen datum a čas
-
ObjectIdentifier: Textový řetězec obsahující
OID (jen pro čtení).
- TimeTicks: Počet sekund od zapnutí zařízení (jen pro čtení).
- IpAddress: Textový řetězec ve formátu IPv4 adresy (jen pro čtení).
Doporučené hodnoty parametrů objektu PmaComm:
Velikost přijímacího bufferu SNMP agenta | Maximální délka požadavkové zprávy (v bajtech), kterou může ovladač poslat do SNMP agenta. Podle této hodnoty se pak rozdělují proměnné z jednoho objektu PmaCommGroup do komunikačních zpráv.
Výchozí hodnota je 512. |
Verze | Číslo verze protokolu SNMP.
Pro přístup ve skriptu má tento údaj identifikátor: "snmpVer".
SNMP v1 - Základní verze protokolu SNMP. Není zabezpečena proti "odposlouchávání".
SNMP v3 - Verze protokolu SNMP, která umožňuje autorizaci a kryptování. |
Parametry protokolu pro SNMP verze 1: |
Název komunity pro ReadOnly | Community string je textový parametr, který identifikuje tzv. SNMP komunitu, ve které jsou odesilatel a příjemce členy. To je použito k implementaci jednoduchého bezpečnostního mechanismu založeného na komunitách.
Pro "ReadOnly" přístup je často používán community string "public".
Pro přístup ve skriptu má tento údaj identifikátor: "commRO". |
Název komunity pro ReadWrite | Viz předchozí popis u "Název komunity pro ReadOnly".
Pro "ReadWrite" přístup je často používán community string "private".
Pro přístup ve skriptu má tento údaj identifikátor: "commRW". |
Parametry protokolu pro SNMP verze 3: |
Úroveň zabezpečení |
S autorizací, bez šifrování
S autorizací a se šifrováním |
Jméno uživatele | Je zadáno v SNMP agentu. Název určuje úroveň přístupu k systému.
Pro přístup ve skriptu má tento údaj identifikátor: "usrName". |
Heslo | Textový řetězec použitý k autorizaci se SNMP serverem. Minimální délka je 8 znaků.
Pro přístup ve skriptu má tento údaj identifikátor: "psw". |
Šifrovací klíč | Textový řetězec, který bude použit pro šifrování přenášených dat. Minimální délka je 8 znaků.
Tento konfigurátor je viditelný pouze pokud je úroveň zabezpečení se šifrováním.
Pro přístup ve skriptu má tento údaj identifikátor: "privKey".
Pokud není nastaveno, pak jde o SNMP bez šifrování. |
---|
Změny parametrů protokolu SNMP:
Parametry protokolu lze za běhu aplikace změnit a přečíst ve skriptu pomocí metod:
PmaComm.SetProtParam("ProtType") a
PmaComm.GetProtParam("ProtType"). Údaje jsou zde ve formátu
KeyVal, například:
- pro SNMP verze 1: "snmpVer:1;commRO:public;commRW:private;"
- pro SNMP verze 3: "snmpVer:3;usrName:user1;psw:auth1;privKey:priv1;"
Popis komunikace pomocí objektu PmaCommGroup
Pro tento ovladač lze použít objekty
PmaCommGroup.
Proměnné v objektu
PmaCommGroup (nebo ještě lépe proměnné v objektu
PmaData s datovým rozšířením
ExtComm) mohou být v libovolném množství, libovolného typu v libovolném pořadí. Ovladač sám optimálním způsobem vnitřně vytvořenými komunikačními zprávami vyčítá data ze zařízení.
Proměnné se vyčítají všechny (pokud konfigurátor "
Obnovování dat povoleno" je zatržen). Při zápisu do proměnné se posílá do zařízení jen tato jedna proměnná (pokud konfigurátor "
Automaticky zasílat při zápisu do položky" je zatržen).
Popis konfigurátoru "ItemId":
ItemId je textový identifikátor položky, který slouží k adresaci položky v zařízení. Z konfigurátoru
ItemId ovladač pozná, jak se má hodnota položky přijímat nebo vysílat.
Text lze buď napsat ručně, nebo sestavit v okně, které se otevře tlačítkem vpravo od konfigurátoru.
Pro zadání lze použít
Makro výraz (vyhodnocuje se po spuštění aplikace).
Identifikátor je obvykle jen
OID adresa. Tyto adresy lze zjistit buď v
MIB databázi nebo pomocí zprávy typu
SNMP Walk - viz dále. Lze zadat jen
OID adresy, které představují hodnotu s podporovaným datovým typem.
Volitelně lze za touto adresou zadat znak "středník" a za ním uvést podtyp - to se zadává pouze pro parametr typu
OctetString - viz
Podporované datové typy.
Příklady:
1.3.6.1.2.1.1.1.0 = Adresa pro parametr, ve kterém je hodnota popisu zařízení. Tato hodnota je však uložena v typu
OctetString. Získaná hodnota tedy bude obsahovat celkem nečitelný text v podobě
HexaString. Skutečný text lze získat zpracováním této hodnoty metodou
TransformValue(241), nebo jednodušeji zadat v
ItemId i podtyp:
1.3.6.1.2.1.1.1.0;DisplayString = Hodnota popisu zařízení s převodem
HexaString na dekódovaný text.
1.3.6.1.4.1.18248.20.1.2.1.1.2.1 = Hodnota teploty (typ
Integer) teploměru firmy
Papouch.
Pevná část OID | Počáteční adresa OID, která se bude opakovat v ItemId více proměnných. Pokud se zde zadá tato počáteční adresa, pak v ItemId těchto proměnných lze zadat jen zbytek této adresy. |
---|
Popis komunikace pomocí objektu PmaCommMsg
Objekt
PmaCommMsg lze použít pro speciální komunikace, které nelze provést objektem
PmaCommGroup. V případě tohoto ovladače jsou implementovány následující zprávy:
-
SNMP Get: Vrací hodnotu parametru spolu s jeho datovým typem.
-
V kartě "Data-zaslání" jsou proměnné::
OID (
String) =
OID adresa parametru
-
V kartě "Data-příjem" jsou proměnné::
DType (String) = Název datového typu parametru.
Value (Variant) = Hodnota parametru.
-
SNMP GetNext: Stejné jako předchozí zpráva
"SNMP Get" ale navíc vrací adresu
OID "dalšího" parametru.
-
V kartě "Data-zaslání" jsou proměnné::
OID (
String) =
OID adresa parametru
-
V kartě "Data-příjem" jsou proměnné::
NextOID (
String) =
OID adresa dalšího parametru.
DType (String) = Název datového typu parametru.
Value (Variant) = Hodnota parametru.
-
SNMP Walk:
Tato zpráva periodicky přenáší zprávy typu
"SNMP GetNext" a to tak, že vyčtená hodnota
"NextOID" v aktuálním čtení je použita jako
OID v následujícím čtení. Toto provádí tak dlouho dokud nedostane chybovou odpověď.
"SNMP Walk" tímto postupem "projde" celý strom parametrů.
-
V kartě "Data-zaslání" jsou proměnné::
OID (String) = Adresa počátečního parametru. Je vhodné zadat hodnotu 1.3.6.1.2.1.1.1.
-
V kartě "Data-příjem" jsou proměnné::
Content (
String) = Text obsahující obvykle mnoho řádků. V každém řádku jsou informace o jednom parametru (
OID adresa, datový typ, hodnota).
Seznam SNMP chybových kódů
Hodnotu kódu chyby lze přečíst z proměnné
ErrCode v kartě "
Data-příjem" objektu
PmaCommMsg.
Hodnota |
Popis |
0 = NoError |
Nebyla žádná chyba. |
1 = TooBig |
Velikost odpovědi je příliš velká pro přenos. |
2 = NoSuchName |
Nebyl nalezen objekt s požadovaným názvem. |
3 = BadValue |
Požadovaná SNMP operace chtěla změnit proměnnou ale je chyba syntaxe nebo hodnoty. |
4 = ReadOnly |
Požadovaná SNMP operace chtěla změnit proměnnou, kterou není povoleno změnit. |
5 = GenErr |
Obecná, blíže nespecifikovaná chyba. |
6 = NoAccess |
Daná SNMP proměnná není přístupná. |
7 = WrongType |
Hodnota je typu, který není konzistentní s požadovaným typem dané proměnné. |
8 = WrongLength |
Hodnota má délku, která je nekonzistentní s požadovanou délkou pro danou proměnnou. |
9 = WrongEncoding |
Hodnota obsahuje Abstract Syntax Notation One (ASN.1) encoding, který je nekonzistentní s tagem pole ASN.1. |
10 = WrongValue |
Hodnota nemůže být přiřazena do proměnné. |
11 = NoCreation |
Proměnná neexistuje a nelze ji vytvořit. |
12 = InconsistentValue |
Hodnota je nekonzistentní s hodnotama jiných objektů. |
13 = ResourceUnavailable |
Přiřazení hodnoty do proměnné vyžaduje alokaci zdrojů, které nejsou dostupné. |
14 = CommitFailed |
Selhalo nastavení proměnné, která je součástí skupiny proměnných. |
15 = UndoFailed |
Selhalo nastavení proměnné, která je součástí skupiny proměnných a také selhalo zpětné nastavení jiných proměnných. |
16 = AuthorizationError |
Nastala chyba autorizace. |
17 = NotWritable |
Do proměnné nelze zapsat nebo ji nelze vytvořit. |
18 = InconsistentName |
Proměnná neexistuje. Nelze ji vytvořit, protože takto nazvaný objekt je nekonzistentní s ostatními objekty. |