Promotic

PmSNMP - Driver do komunikacji poprzez protokół SNMP

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 narazie nie wspiera SNMP TRAP.
- 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 narazie wspierane tylko w wersji SNMPv1.
- Dla łatwego dodania tego drivera do aplikacji jest dogodne zastosować: Konfiguracje wstępne w grupie "SNMP".
- 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), pole, 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:

Zalecane wartości dla pozycji Parametry Ethernet-klient:
Numer zdalnego portu TCP/UDP161 (standardowy numer portu dla protokołu SNMP)
 
Patrz: Wikipedia: Lista numerów portów TCP i UDP używanych przez protokoły do uruchamiania aplikacji sieciowych.
Typ transmisji EthernetUDP
Opis i zalecane wartości dla pozycji Parametry protokołu:
Wielkość bufora odbiorczego agenta SNMPMaksymalna 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.
WersjaNumer 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 ReadOnlyCommunity 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 ReadWritePatrz 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żnnieniem oraz szyfrowaniem
Nazwa użytkownikaOkreś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 zmieniać 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 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.


Opis konfiguratora "PmaCommGroup > Parametry > Parametry specjalne":
Część stała OIDAdres 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::
ErrCode (Byte) = Numer błędu. Patrz Lista kodów błędów SNMP.
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::
ErrCode (Byte) = Numer błędu. Patrz Lista kodów błędów SNMP.
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ć z 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 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 zostać 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.

Historia:
Pm8.03.23: Usunięty błąd: W adresie OID nie nożna było odczytać większej liczby niż 8 388 607 (liczba na 3 bajty).
Pm8.03.17: Uogólnienie dla wersji 3 SNMP (upoważnienie oraz szyfrowanie).
Pm8.03.15: Usunięty błąd: wiadomość typu SNMP Walk zostało przedwcześnie zakończone jeżeli niektóra z wartości zawierała StatusError.
Pm8.03.12: Usunięty błąd: Podczas transmisji niektórych typów wiadomości dochodziło do ubytku pamięci (PmSNMP, PmMBus, PmIEC8705, PmElgas2).
Pm8.03.05: Usunięty błąd: Nie było możliwe pozyskiwać zmienne typu Unsigned32 (błąd pojawił się w wersji Pm8.3.4).
Pm8.03.04: Usunięty błąd: Korekty błędów podczas wysyłania i odbioru dużej ilości danych.
Pm8.03.01: Usunięty błąd: Identyfikator polecenia posiadał błędny format w przenoszonych danych. Możliwym było przeniesienie tylko pierwszych 128 wiadomości.
Pm8.02.08: Wytworzono
© MICROSYS, spol. s r.o.