Promotic
WikipediaLinkedInYoutubeTwitterFacebook

PmSNMP - Driver do komunikacji poprzez protokół SNMP

Driver jest używany do komunikacji z urządzeniami, które obsługują protokół SNMP - patrz Komunikacja przy pomocy protokołów SNMP.
 
Przed zastosowaniem tego drivera w aplikacji PROMOTIC należy zaznajomić się z rozdziałem: Komunikacja przy pomocy driverów PROMOTIC.
 
Podstawowe właściwości drivera:
- Wykorzystanie tego drivera jest powiązane z zakupem licencji: PmSNMP. Z wersją freeeware PmFree lub przy opracowywaniu aplikacji (z licencją deweloperską w celach testowania) element ten zawsze funkcjonuje.
- Komunikacja przebiega poprzez Ethernet. Komunikacja przebiega protokołem UDP/IP na porcie 161.
- Aplikacja PROMOTIC jest z punktu widzenia tej komunikacji MASTER (tzn. wywołuje transmisję danych).
- Driver wspiera:
- SNMP wersji 1 (SNMPv1).
- SNMP wersji 3 (SNMPv3) i to w poziomach zabezpieczenia z uwierzytelnieniem i z szyfrowaniem. Uwierzytelnianie przebiega z wykorzystaniem algorytmu MD5 a szyfrowanie kryptem DES.
- Driver narazie nie wspiera SNMP TRAP.
- Driver jest wbudowany do systemu PROMOTIC przy pomocy obiektu PmComm.
- Driver wspiera stosowanie obiektu PmCommData (do odczytu i zapisu zmiennych w agentowi SNMP / serwerze / sterowniku PLC ..).
- Obiekt PmCommMsg jest stosowany tylko do specjalnej pomocniczej wiadomości, która stwierdzi nazwy zmiennych, które można odczytywać z urządzenia (patrz dalej). To powiadomienie jest narazie wspierane tylko w wersji SNMPv1.
- Dla łatwego dodania tego drivera do aplikacji jest dogodne zastosować: Konfiguracje wstępne w grupie "SNMP protokół komunikacyjny".
- 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 formacie 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 i 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 konieczna 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 i 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:

Zalecane wartości dla pozycji Parametry Ethernet:
Numer portu TCP/UDP161 (standardowy numer łącza dla protokołu SNMP)
Typ transmisji EthernetUDP
Opis i zalecane wartości dla pozycji Parametry protokołu:
Wielkość bufora odbiorczego agenta SNMPMaksymalna długość zapytania (w bajtach), które może driver wysłac do agenta SNMP. Wg tej wartości są później rozdzielone zmienne z jednego obiektu PmCommData do powiadomień komunikacyjnych.

Wstępnie ustawioną 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 uwierzytelnienie 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 uwierzytelnieniem, bez szyfrowania
Z uwierzytelnieniem 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 uwierzytelnienia 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: PmComm.SetProtParam("ProtType") i PmComm.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 obiektów PmCommData

Dla niniejszego drivera komunikacyjnego można stosować obiekty PmCommData.

Zmiennych w obiekcie PmCommData (albo jeszcze lepiej zmiennych w obiekcie PmData 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 jest włączony konfigurator Odświeżanie danych zezwolone). Przy zapisie do zmiennej do urządzenia jest odesłana tylko zapisywana zmienna (jeżeli jest wybrany konfigurator Automatycznie przesyłaj przy zapisie do pozycji).

 
Opis konfiguratora ItemID:

ItemId jest identyfikatorem tekstowym pozycji, który służy do adresacji parametru 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ć przy pomocy okna, które zostanie otwarte przy pomocy przycisku wprawo od konfiguratora. Do wprowadzenia można wykorzystać Makro wyrażenie (wartość jest obliczana przy uruchomieniu aplikacji).

Identyfikator to w większości 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 wprowadzać 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. Ta wartość jest wszak zapisana w typie OctetString. Uzyskana wartość będzie zawierać całkiem nieczytelny tekst w formacie 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 PmCommData > 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 obiektów PmCommMsg

Obiekty PmCommMsg można wykorzystać do specjalnych komunikacji, których nie można wykonać przy pomocy obiektu PmCommData. W przypadku tego drivera są zaimplementowane następojące wiadomości:
 
- SNMP Get: Zwraca wartość parametru wraz z jego typem danych.
- W zakładce Dane-wysłanie znajdują się zmienne::
OID (String) = OID adres parametru
- W zakładce 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 zakładce Dane-wysłanie znajdują się zmienne::
OID (String) = OID adres parametru
- W zakładce 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: Ta wiadomość cyklicznie 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 zakładce 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 zakładce Dane-odbiór znajdujuą się zmienne::
Content (String) = Tekst zawierający w większości 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 zakładce Dane-odbiór obiektu PmCommMsg.
Wartość Opis
0 = NoError Błąd nie wystątił.
1 = TooBig Wielkość odpowiedzi jest za duża dla transferu.
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 uwierzytelniania.
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.
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice