Promotic

PmSNMP - Ovladač pro komunikaci protokolem SNMP

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č zatím nepodporuje SNMP TRAP.
- 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.
- Pro snadné přidání tohoto ovladače do aplikace je vhodné použít: Předkonfigurace ve skupině "SNMP".
- 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:

Doporučené hodnoty pro Parametry Ethernet-klient:
Číslo vzdáleného TCP/UDP portu161 (standardní číslo portu pro protokol SNMP)
 
Viz: Wikipedia: Seznam čísel portů TCP a UDP používaných protokoly pro provoz síťových aplikací.
Typ Ethernet přenosuUDP
Popis a doporučené hodnoty pro Parametry protokolu:
Velikost přijímacího bufferu SNMP agentaMaximá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 ReadOnlyCommunity 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 ReadWriteViz 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živateleJe 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".
HesloTextový ř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.


Popis konfigurátoru "PmaCommGroup > Parametry > Speciální parametry":
Pevná část OIDPočá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é::
ErrCode (Byte) = Číslo chyby. Viz Seznam SNMP chybových kódů.
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é::
ErrCode (Byte) = Číslo chyby. Viz Seznam SNMP chybových kódů.
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.

Historie:
Pm8.03.23: Opravená chyba: V OID adrese nefungovalo číslo větší než 8 388 607 (číslo na 3 bajty).
Pm8.03.17: Zobecnění pro SNMP verze 3 (autorizace a šifrování).
Pm8.03.15: Opravená chyba: zpráva typu SNMP Walk byla předčasně ukončená pokud u některé hodnoty byl StatusError.
Pm8.03.12: Opravená chyba: Při přenosu některých typů zpráv docházelo k ubývání paměti (PmSNMP, PmMBus, PmIEC8705, PmElgas2).
Pm8.03.05: Opravená chyba: Nešlo přijímat proměnné typu Unsigned32 (chyba od verze Pm8.3.4).
Pm8.03.04: Opravená chyba: Opravy chyb při zasíláni a při příjmu hodně dat.
Pm8.03.01: Opravená chyba: Identifikátor požadavku měl špatný formát v přenášených datech. Šlo přenést jen prvních 128 zpráv.
Pm8.02.08: Vytvořeno
© MICROSYS, spol. s r.o.