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 zastosowanie 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 odczytywać bazę danych
MIB 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 jako łańcuch tekstowy) (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 zawartość 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: Liczba 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 biegu runtime 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 w prawo od konfiguratora.
Do wprowadzania 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 za tym adresem można 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ępują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 ustawienie 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 odczytywać 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. |