Driver jest używany do komunikacji z urządzeniami, które obsługują protokół
SNMP - patrz
Komunikacja poprzez protokół SNMP.
Przed zastosowaniem tego drivera w aplikacji PROMOTIC należy obejżeć "
PROMOTIC wideo kurs 4 - Drivery komunikacyjne".
Podstawowe właściwości drivera:
- Zastosowanie tego drivera wymaga zakup
licencji PmSNMP. Podczas wytwarzania aplikacji w trybie freeware
PmFree lub z
licencją deweloperską oraz podczas jej testowania w runtime element ten jest zawsze funkcjonalny.
- Komunikacja jest dla Ethernetu (aplikacja PROMOTIC jest klientem). Komunikacja przebiega poprzez protokół UDP/IP na porcie 161.
- Aplikacja PROMOTIC jest z punktu widzenia tej komunikacji Master (to znaczy, że wywołuje transmisję danych).
- Driver wspiera:
- SNMP wersja 1 (SNMPv1) (rok 1988, RFC1155, RFC1156, RFC1157).
- SNMP wersja 3 (SNMPv3) (RFC3411 ... RFC3418)
Umożliwia zabezpieczenie z upoważnieniem oraz z szyfrowaniem. Upoważnienie przebiega z wykorzystaniem algorytmu MD5 a szyfrowanie kryptem DES.
- Driver jest wbudowany do systemu PROMOTIC przy pomocy obiektu
PmaComm.
- Driver wspiera stosowanie obiektu
PmaCommGroup (do odczytu i zapisu zmiennych w agentowi
SNMP / serwerze / sterowniku PLC ...).
- Obiekt
PmaCommMsg jest stosowany tylko do specjalnej pomocniczej wiadomości, która stwierdzi nazwy zmiennych, które można odczytywać z urządzenia (patrz dalej). Wiadomość ta jest na razie wspierane tylko w wersji
SNMPv1.
- Driver nie korzysta z
MIB bazy danych. Przy pomocy zewnętrznych oprgramowań można bazę danych
MIB odczytać i w taki sposób stwierdzić adresy (
OID) żądanych parametrów.
Wspierane typy danych:
-
Integer:
4-bajtowa liczba całkowita (od
-2 147 483 648 do
+2 147 483 647) (do odczytu i zapisu).
- Unsigned32: 4-bajtowa liczba całkowita (od 0 do +4 294 967 295) (do odczytu i zapisu).
- Counter: 4-bajtowa liczba całkowita (od 0 do +4 294 967 295) (do odczytu i zapisu).
-
OctetString:
Tekst w formacie
HexaString (dane binarne w formie heksadecymalnym wartości zapisanych w łańcuchu tekstowym) (do odczytu i zapisu).
Jest to typ uniwersalny umożliwiający nieść kilka następnych nie specyfikowanych typów. Na przykład łańcuch tekstowy, data oraz czas, adres fizyczny (MAC), tablica, itd. Niestety dane tego typu nie niosą informacji o typu danych w nim zapakowanych. Dlatego do rozszyfrowania zawartości jest konieczne znajomość bazy danych
MIB.
Wskazówka: W metodzie
Pm.TransformValue jest zaimplementowane wsparcie dla pracy z typem
HexaString.
W driverze można znaczenie zawartości tego typu określić dodatkową informacją (patrz opis
ItemId). Chodzi o następujące "podtypy" (w
SNMP określa się nazwą
"Composed syntax"):
- DisplayString = w typie OctetString jest zapisany łańcuch tekstowy
- DateTime = w typie OctetString jest zapisana data oraz czas
-
ObjectIdentifier: Łańcuch tekstowy zawierający
OID (tylko do odczytu).
- TimeTicks: Ilość sekund od włączenia urządzenia (tylko do odczytu).
- IpAddress: Łańcuch tekstowy w formacie adresu IPv4 (tylko do odczytu).
Zalecone wartości parametrów obiektu PmaComm:
Wielkość bufora odbiorczego agenta SNMP | Maksymalna długość wiadomości zapytania (w bajtach), które może driver wysłac do agenta SNMP. Według tej wartości są później rozdzielone zmienne z jednego obiektu PmaCommGroup do wiadomości komunikacyjnych.
Domyślną wartością jest 512. |
Wersja | Numer wersji protokołu SNMP.
Dla dostępu w skrypcie dana ta posiada identyfikator: "snmpVer".
SNMP v1 - Podstawowa wersja protokołu SNMP. Brak ochrony wobec "podsłuchu".
SNMP v3 - Wersja protokołu SNMP, która umożliwia upoważnienie oraz szyfrowanie. |
Parametry protokołu dla SNMP wersji 1: |
Nazwa społeczności dla ReadOnly | Community string to tekstowy parametr, który identyfikuje tzw. społeczność SNMP, do której należe nadawca oraz odbiorca. Jest on używany w celu wdrożenia prostego mechanizmu zabezpieczeń opartego na społecznościach.
Dla dostępu "ReadOnly" jest często stosowany community string "public".
Dla dostępu w skrypcie dana ta posiada identyfikator: "commRO". |
Nazwa społeczności dla ReadWrite | Patrz poprzedni opis "Nazwa społeczności dla ReadOnly".
Dla dostępu "ReadWrite" jest często stosowany community string "private".
Dla dostępu w skrypcie dana ta posiada identyfikator: "commRW". |
Parametry protokołu dla SNMP wersji 3: |
Poziom zabezpieczenia |
Z upoważnieniem, bez szyfrowania
Z upoważnieniem oraz szyfrowaniem |
Nazwa użytkownika | Określono w agencie SNMP. Nazwem tym określa się poziom dostępu do systemu.
Dla dostępu w skrypcie dana ta posiada identyfikator: "usrName". |
Hasło | Łańcuch tekstowy wykorzystany do upoważnienia z serwerem SNMP. Minimalna długość to 8 znaków.
Dla dostępu w skrypcie dana ta posiada identyfikator: "psw". |
Klucz szyfrowania | Łańcuch tekstowy, który będzie wykorzystany do szyfrowania transferowanych danych. Minimalna długość to 8 znaków.
Konfigurator ten jest widoczny tylko jeżeli to poziom zabezpieczenia z szyfrowaniem.
Dla dostępu w skrypcie dana ta posiada identyfikator: "privKey".
Jeżeli nie jest ustawione, wtedy chodzi o SNMP bez szyfrowania. |
---|
Zmiany parametrów protokołu SNMP:
Parametry protokołu można zmienić podczas uruchomionej aplikacji oraz odczytać w skrypcie przy pomocy metod:
PmaComm.SetProtParam("ProtType") oraz
PmaComm.GetProtParam("ProtType"). Dane są tutaj w formacie
KeyVal, na przykład:
- dla SNMP wersja 1: "snmpVer:1;commRO:public;commRW:private;"
- dla SNMP wersja 3: "snmpVer:3;usrName:user1;psw:auth1;privKey:priv1;"
Opis komunikacji przy pomocy obiektu PmaCommGroup
Dla niniejszego drivera komunikacyjnego można zastosować obiekty
PmaCommGroup.
Zmiennych w obiekcie
PmaCommGroup (lub jeszcze lepiej zmiennych w obiekcie
PmaData z rozszerzeniem danych
ExtComm) może być dowolna ilości, mogą być dowolnego typu danych i w dowolnej kolejności. Driver sam w zoptymalizowany sposób odczyta dane z urządzenia przy pomocy wewnętrznie wytworzonych wiadomości komunikacyjnych.
Odczytywane są wszystkie zmienne (jeżeli konfigurator "
Odświeżanie danych zezwolone" jest zaznaczony). Przy zapisie do zmiennej do urządzenia jest odesłana tylko zapisywana zmienna (jeżeli konfigurator "
Automatycznie przesyłaj przy zapisie do pozycji" jest zaznaczony).
Opis konfiguratora "ItemId":
ItemId jest identyfikator tekstowy pozycji, który służy do adresacji pozycji w urządzeniu. Z konfiguratora
ItemId driver stwierdzi, w jaki sposób ma zostać wartość pozycji wczytana lub wysłana.
Tekst można albo wpisać ręcznie, lub ułożyć w oknie, które zostanie otwarte przy pomocy przycisku wprawo od konfiguratora.
Do wprowadzenia można zastosować
Makro wyrażenie (wartość jest obliczana po uruchomieniu aplikacji).
Identyfikator to zazwyczaj tylko adres
OID. Te adresy można stwierdzić albo w bazie danych
MIB lub przy pomocy wiadomości typu
SNMP Walk - patrz dalej. Można wprowadzić tylko adresy
OID, które praedstawiają wartość o wspieranym typie danych.
Opcjonalnie można tym adresem wprowadzić znak "średnik" a za nim umieścić podtyp - to określa się tylko dla parametru typu
OctetString - patrz
Wspierane typy danych.
Przykłady:
1.3.6.1.2.1.1.1.0 = Adres dla parametru, w którym znajduje się wartość opisu urządzenia. Wartość ta jest wszak zapisana w typie
OctetString. Uzyskana wartość będzie zawierać całkiem nieczytelny tekst w formie
HexaString. Właściwy tekst można uzyskać opracowaniem tej wartości metodą
TransformValue(241), lub prościej określić w
ItemId oraz podtyp:
1.3.6.1.2.1.1.1.0;DisplayString = Wartość opisu urządzenia z transformacją
HexaString na dekodowany tekst.
1.3.6.1.4.1.18248.20.1.2.1.1.2.1 = Wartość temperetury (typ
Integer) termometra firmy
Papouch.
Część stała OID | Adres początkowy OID, który będzie się powtarzać w ItemId wielu zmiennych. Jeżeli tu zostanie wprowadzony adres początkowy, wtedy w ItemId tych zmiennych można wprowadzić tylko resztę tego adresu. |
---|
Opis komunikacji przy pomocy obiektu PmaCommMsg
Obiekt
PmaCommMsg można zastosować do specjalnych komunikacji, których nie można wykonać przy pomocy obiektu
PmaCommGroup. W przypadku tego drivera są zaimplementowane następojące wiadomości:
-
SNMP Get: Zwraca wartość parametru wraz z jego typem danych.
-
W karcie "Dane-wysłanie" znajdują się zmienne::
OID (
String) =
OID adres parametru
-
W karcie "Dane-odbiór" znajdujuą się zmienne::
DType (String) = Nazwa typu danych parametru.
Value (Variant) = Wartość parametru.
-
SNMP GetNext: Identycznie jak poprzednia wiadomość
"SNMP Get" ale ponadto zwraca adres
OID "następnego" parametru.
-
W karcie "Dane-wysłanie" znajdują się zmienne::
OID (
String) =
OID adres parametru
-
W karcie "Dane-odbiór" znajdujuą się zmienne::
NextOID (
String) =
OID adres następnego parametru.
DType (String) = Nazwa typu danych parametru.
Value (Variant) = Wartość parametru.
-
SNMP Walk:
Wiadomość ta periodycznie przenosi wiadomości typu
"SNMP GetNext" a to w taki sposób, że odczytana wartość
"NextOID" w aktualnym odczycie jest wykorzystana jako
OID w następującym odczycie. To wykonuje tak długo aż do otrzymania błednej odpowiedzi. W taki sposób
"SNMP Walk" "przejdie" całe drzewo parametrów.
-
W karcie "Dane-wysłanie" znajdują się zmienne::
OID (String) = Adres początkowego parametru. Wskazanym jest wprowadzenie wartości 1.3.6.1.2.1.1.1.
-
W karcie "Dane-odbiór" znajdujuą się zmienne::
Content (
String) = Tekst zawierający zazwyczaj wiele wierszy. W każdym wierszu znajdują się informacje o jednym parametrze (
OID adres, typ danych, wartość).
Lista kodów błędów SNMP
Wartość kodu błędu można odczytać ze zmiennej
ErrCode w karcie "
Dane-odbiór" obiektu
PmaCommMsg.
Wartość |
Opis |
0 = NoError |
Błąd nie wystątił. |
1 = TooBig |
Wielkość odpowiedzi jest za duża do transmisji. |
2 = NoSuchName |
Nie odnaleziono obiektu o wymaganej nazwie. |
3 = BadValue |
Wymagana operacja SNMP próbowała zmienić zmienną ale wystąpił błąd albo składni lub wartości. |
4 = ReadOnly |
Wymagana operacja SNMP próbowała zmienić zmienną, której nie można zmieniać. |
5 = GenErr |
Ogólny, bliżej nie określony błąd. |
6 = NoAccess |
Określona zmienna SNMP nie jest dostępna. |
7 = WrongType |
Wartość jest typu, który nie jest zgodny z wymaganym typem danych zmiennej. |
8 = WrongLength |
Wartość jest takiej długości, która nie jest zgodna z wymaganą długością dla danej zmiennej. |
9 = WrongEncoding |
Wartość zawiera Abstract Syntax Notation One (ASN.1) encoding, która nie jest zgodna z tagiem pola ASN.1. |
10 = WrongValue |
Wartość nie może być przypisana do zmiennej. |
11 = NoCreation |
Zmienna nie istnieje i nie można ją wytworzyć. |
12 = InconsistentValue |
Wartość nie jest zgodna z wartościami innych obiektów. |
13 = ResourceUnavailable |
Przyszeregowanie wartości do zmiennej wymaga alokację źródeł, które nie są dostępne. |
14 = CommitFailed |
Nie udało się ustawić zmiennej, która jest częścią składową grupy zmiennych. |
15 = UndoFailed |
Nie udało się ustawić zmiennej, która jest częścią składową grupy zmiennych oraz również nie udało się zwrotnie ustawić inne zmienne. |
16 = AuthorizationError |
Wystąpił błąd upoważnienia. |
17 = NotWritable |
Do zmiennej nie można zapisać lub nie można ją wytworzyć. |
18 = InconsistentName |
Zmienna nie istnieje. Nie można ją wytworzyć, ponieważ w taki sposób nazwany obiekt nie jest zgodny z resztą obiektów. |