Promotic
WikipediaLinkedInYoutubeTwitterFacebook

PmSNMP - Ovladač pro komunikaci protokolem SNMP

Ovladač slouží 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é přečíst kapitolu: Komunikace pomocí PROMOTIC ovladačů.
 
Základní vlastnosti ovladače:
- Použití tohoto ovladače je vázáno na zakoupení licence: PmSNMP. S freeeware verzí PmFree nebo při vývoji aplikace (s vývojovou licencí pro testovací účely) je tato komponenta funkční vždy.
- Komunikace je přes Ethernet. Komunikace probíhá protokolem UDP/IP s cílovým portem 161.
- Aplikace PROMOTIC je z hlediska této komunikace vždy MASTER (tzn. že dává podnět k přenosu dat).
- Ovladač podporuje:
- SNMP verze 1 (SNMPv1).
- SNMP verze 3 (SNMPv3) a to v úrovních zabezpečení s autorizací a se šifrováním. Autorizuje se algoritmem MD5 a šifruje se kryptem DES.
- Ovladač zatím nepodporuje SNMP TRAP.
- Ovladač je začleněn do systému PROMOTIC pomocí objektu PmComm.
- Ovladač podporuje použití objektu PmCommData (pro čtení i zápis proměnných v SNMP agentovi / serveru / PLC zařízení ..).
- Objekt PmCommMsg 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 komunikační protokol".
- 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 ve formátu 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 proto nutná znalost 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ů:

Doporučené hodnoty pro Parametry Ethernet:
Číslo TCP/UDP portu161 (standardní číslo portu pro SNMP protokol)
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 PmCommData do komunikačních zpráv.

Přednastavená hodnota je 512.

VerzeČíslo verze SNMP protokolu.

Pro přístup ve skriptu má tento údaj identifikátor: "snmpVer".

SNMP v1 - Základní verze SNMP protokolu. Není zabezpečena proti "odposlouchávání".
SNMP v3 - Verze SNMP protokolu, 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. Tímto názvem se určuje úroveň přístupu k systému.

Pro přístup ve skriptu má tento údaj identifikátor: "usrName".

HesloŘ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íčŘ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í uveden, pak jde o SNMP bez šifrování.

 
Změny parametrů SNMP protokolu:

Parametry protokolu lze za běhu aplikace změnit a přečíst ve skriptu pomocí metod: PmComm.SetProtParam("ProtType") a PmComm.GetProtParam("ProtType").

Údaje jsou zde ve formátu PmNamedValues, 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í objektů PmCommData

Pro tento ovladač lze používat objekty PmCommData.

Proměnné v objektu PmCommData (nebo ještě lépe proměnné v objektu PmData 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 je povolen konfigurátor Obnovování dat povoleno). Při zápisu do proměnné se posílá do zařízení jen tato jedna proměnná (pokud je povolen konfigurátor Automaticky zasílat při zápisu do položky).

 
Popis konfigurátoru ItemID:

ItemId je textový identifikátor položky, který slouží k adresaci veličiny 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 pomocí okna, které se otevře tlačítkem vpravo od konfigurátoru. Pro zadání lze použít Makro výraz (vyhodnocuje se při spouštění aplikace).

Identifikátor je většinou jen OID adresa. Tyto adresy lze zjistit buď v MIB databázi nebo pomocí zprávy typu SNMP Walk - viz dále. Lze zadávat 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 ve formatu 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 PmCommData > 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í objektů PmCommMsg

Objekty PmCommMsg lze použít pro speciální komunikace, které nelze provést objektem PmCommData. 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 záložce Data-zaslání jsou proměnné::
OID (String) = OID adresa parametru
- V záložce 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 záložce Data-zaslání jsou proměnné::
OID (String) = OID adresa parametru
- V záložce 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 cyklicky 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 záložce 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 záložce Data-příjem jsou proměnné::
Content (String) = Text obsahující většinou mnoho řádků. V každém řádku jsou informace o jednom parametru (OID adresa, datový typ, hodnota).

Seznam SNMP chybových kódů

Hodnotu chybového kódu lze přečíst z proměnné ErrCode v záložce Data-příjem objektu PmCommMsg.
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 tágem 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 nekonzistetní 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 pojmenovaný objekt je nekonzistentní s ostatními objekty.
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice