Promotic

PmIEC8705 - Driver do komunikacji poprzez protokół IEC 60870-5

Driver ten służy do komunikacji poprzez protokół według normy IEC 60870-5.

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 PmIEC8705. 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) lub dla łącza szeregowego (COM1, COM2 ...).
- Dla łącza szeregowego jest stosowany protokół IEC 60870-5-101. Obecnie jest zaimplementowany tryb transmisji zrównoważonej (balanced mode). Strona przeciwległa w tym trybie może sama wysyłać dane w razie ich zmiany. W trybie transmisji niezrównoważonej (unbalanced mode), który na razie nie jest zaimplementowany, przebiega komunikacja typu Master-Slave, tzn. strona przeciwległa (Slave) może wysyłać dane tylko jako odpowiedź na wymóg.
- Do Ethernetu jest stosowany protokół IEC 60870-5-104. Protokół ten potrafi na przykład wysłać równocześnie kilka wiadomości i następnie czekać na potwierdzenie wszystkich. W ten sposób można osięgnęć dużych szybkości transmisji, kiedy wiadomość nie musi czekać na dokończenie (potwierdzenie) poprzedniej wiadomości.
W chwili obecnej jest zaimplementowana wyłącznie strona typu klient. To znaczy, że aplikacja PROMOTIC nawiązuje połączenie TCP z drugą stroną, która jest serwerem.
- Driver jest wbudowany do systemu PROMOTIC przy pomocy obiektu PmaComm.
Driver wspiera zastosowanie obiektów PmaCommMsg oraz PmaCommGroup. Dla zwykłych przypadków transmisji danych dogodniejszym jest zastosowanie obiektu PmaCommGroup.
Dla łatwego dodania tego drivera do aplikacji jest dogodne zastosować: Konfiguracje wstępne w grupie "IEC8705"


Zalecone wartości parametrów obiektu PmaComm:

Zalecane wartości dla pozycji Parametry łącza szeregowego:
Prędkość transmisji4800 Bd (i wyższy)
Ilość bitów informacji8 (obowiązkowe)
ParzystośćEVEN (parzysty). Standard IEC 60870-5-101 bezpośrednio nadmienia, że parytet "EVEN (parzysty)" jest wykorzystywany w celu zapewnienia integralności danych "class I2".
Jeżeli jest konieczny inny parytet, wtedy nie musi być zapewniony taki sam poziom integralności danych.
Ilość bitów stopu1 (obowiązkowe)
Zalecane wartości dla pozycji Parametry Ethernet-klient:
Numer zdalnego portu TCP/UDP2404 (według normy IEC 60870-5-104)
 
Patrz: Wikipedia: Lista numerów portów TCP i UDP używanych przez protokoły do uruchamiania aplikacji sieciowych.
Typ transmisji EthernetTCP (obowiązkowe)
Ilość powtórzeń przy nieudanej Master transmisji0 (obowiązkowe)
Timeout transmisji jednego pakietu [ms]2000 (w tym przypadku chodzi tylko o timeout od wysłania wiadomości, nie od odbioru wiadomości.)
Filtrować znaki ECHONie
Podłączyć dopiero przy pierwszej transmisjiNIE zaznaczać (obowiązkowe)
Zamknij połączenie po każdej transmisjiNIE zaznaczać (obowiązkowe)
Opis i zalecane wartości dla pozycji Parametry protokołu dla normy IEC 60870-5-101:
Timeout odbioru odpowiedziOkres czasu (w milisekundach) w którym driver będzie oczekiwać na odpowiedź po odesłaniu wiadomości.
Jeżeli do tego czasu nie zostanie odebrana żadna odpowiedź, wtedy transmisja wiadomości zostanie zakończona (zostanie wywołane zdarzenie onEndOfTransfer z błędem 24 lub 66).
TypOkreśla podstawowy rodzaj transmisji zdefiniowany w normie IEC 60870-5:
1=Tryb zrównoważony (Balanced mode) - Przeciwległa strona w tym trybie sama wysyła dane przy ich zmianie
0=Tryb niezrównoważony - Ten tryb transmisji nie jest na razie zaimplementowany. Chodzi o komunikację typu Master-Slave, kiedy strona przeciwległa (Slave) może przesyłać dane wyłącznie jako odpowiedź na zapytanie.
Wielkość Link adresu stacjiIlość bajtów (oktetów) dla adresu Link (Link address) w protokole: 0/1/2 bajty
Link adres niniejszej stacjiLink adres komputera, na którym jest uruchomiona aplikacja PROMOTIC
Link adres drugiej stacjiLink adres stacji, z którą komunikuje aplikacja PROMOTIC:
Dla "Tryb zrównoważony (Balanced mode)": Komunikacja wyłącznie z jedną stacją. Zmienna LinkAddr w karcie "Dane-wysłanie" każdej Master wiadomości nie jest brana pod uwagę.
Dla "Tryb niezrównoważony": Ten konfigurator nie jest wyświetlany. Adres określa się w zmiennej LinkAddr w karcie "Dane-wysłanie" każdej Master wiadomości.
Opis i zalecane wartości dla pozycji Parametry protokołu dla normy IEC 60870-5-104:
Typ danych protokołuIEC 870-5-104. Dla Ethernetu jest na razie wspierany tylko niniejszy protokół.
k = Maks. ilość wysłanych wiadomości oczekujących potwierdzenia12 (wartość standardowa według normy). Minimum = 1, Maksymum = 32767.
w = Maks. ilość odebranych wiadomości oczekujących potwierdzenia8 (wartość standardowa według normy). Minimum = 1, Maksymum = 32767. Zalecenie: wartość w nie powinna przekroczyć dwu trzecich wartości k.
t0 = Zwłoka podczas nawiązywania połączenia [ms]30000 (wartość standardowa według normy). Minimum = 1000 ms, Maksymum = 255000 ms. Jeżeli połączenie zostanie zakończone, wtedy automatycznie nawiązanie połączenia rozpocznie się dopiero po upływie tej zwłoki.
t1 = Zwłoka [ms] odebrania potwierdzenia wysyłanej wiadomości (S-Frame)15000 (wartość standardowa według normy). Minimum = 1000 ms, Maksymum = 255000 ms.
t2 = Zwłoka [ms] wysłania potwierdzenia odebranej wiadomości (S-Frame)10000 (wartość standardowa według normy). Minimum = 1000 ms, Maksymum = 255000 ms.
t3 = Zwłoka [ms] wysłania testu połączenia (U-Frame TESTFR)20000 (wartość standardowa według normy). Minimum = 1000ms, Maksymum = 48 h = 172800000 ms.
Opis i zalecane wartości dla pozycji Parametry protokołu wspólne dla obu norm:
Wielkość wspólnego adresu ASDUIlość bajtów (oktetów) dla wspólnego adresu (ASDU Common address) danych: 1/2 bajty
Wielkość adresu informacyjnego obiektu ASDUIlość bajtów (oktetów) dla adresu obiektu z danymi: 1/2/3 bajty
Wielkość wartości "przyczyna transmisji"Ilość bajtów (oktetów) dla "przyczyna transmisji".
1 - Wartość w 1 bajcie.
2 - Wartość w 2 bajtach. 1. bajt to przyczyna, 2. bajt to "Adres inicjatora".
Typ zakończenia poleceńPolecenie IEC jest ogólnie transmitowane w kilku wiadomościach komunikacyjnych ("przyczyna transmisji" = 6=act, 7=actcon, 8=deact, 10=actterm ...). W tym miejscu można określić, kiedy transmisja polecenia jest uważana za zakończoną.
0 = czekaj na odbiór jeżeli "przyczyna transmisji"=10=actterm - Transmisja polecenia jest zakończona po odbiorze 10=actterm.
1 = nie czekaj na odbiór - Transmisja polecenia jest zakończona po przesłaniu niniejszego polecenia, nie jest oczekiwany odbiór 10=actterm.
Norma IEC 60870-5 definiuje niektóre parametry komunikacji jako opcjonalne (np. długości adresów). Dla danego systemu komunikacyjnego są takie wartości dane i tutaj jest konieczne ich określenie w parametrach protokołu.

Opis komunikacji przy pomocy obiektu PmaCommGroup

Dla niniejszego drivera można zastosować obiekty PmaCommGroup (na razie jest mośliwy tylko odbiór danych).
Dla zwykłego odbioru ASDU zmiennych jest to bardziej stosowne niż stosowanie obiektu PmaCommMsg ustawiony do komunikatu Slave typu Odbiór danych.
Można odbierać wszystkie typy ASDU danych/poleceń niżej przedstawionych, patrz Lista oraz opis wspieranych ASDU.
Konfigurator "PmaCommGroup > Parametry > Szybkość odświeżania komunikacji [ms]" dla tego drivera nie jest wykorzystany i jest ustawione na 0. Obiekt nie nadaje wezwań do wysłania danych.
Dla IEC 60870-5-101 nadaje jedna strona sama przez się lub można zażądać transmisji danych wysłaniem wiadomości Master typu Żądanie danych (ASDU-100, C_IC_NA_1).
Dla IEC 60870-5-104 jest konieczne po stronie PROMOTIC wywołanie wiadomości Master typu Żądanie danych (ASDU-100, C_IC_NA_1) (patrz Opis zapytania o dane dla IEC 60870-5-104.).


W jednym obiekcie PmaComm może się znajdować kilka obiektów PmaCommGroup. Zmienne zdefiniowane w różnych PmaCommGroup jednak zawsze muszą się różnić wartością wspólnego adresu (ASDU Common Address). To znaczy, że w jednym obiekcie PmaCommGroup mogą być na przykład 2 zmienne każda o innym wspólnym adresie, w dwu obiektach PmaCommGroup jednak nie mogą się znajdować zmienne z takim samym adresem wspólnym.

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 ItemId może mieć wygląd na przykład "CA1501.v6", gdzie:
- 1. część określa wspólny adres (ASDU common address) (CA1501 = Common Address 1501).
- 2. część określa adres obiektu informacyjnego i jego typ wartości tego obiektu (v6 = wartość pod adresem 6). Typy:
v = Value = wartość pozycji
q = Qualif = kwalifikator, patrz Typy oraz wartości kwalifikatorów (Qualif).
t = Time


Opis konfiguratora "PmaCommGroup > Parametry > Parametry specjalne":
Ten konfigurator nie jest stosowany przez dany driver.

Opis komunikacji przy pomocy obiektu PmaCommMsg - Master wiadomości:

- Kontrola połączenia z niniejszej stacji:
Tylko dla normy IEC 870-5-101. Wiadomość ta nawiąże połączenie ze stacją przeciwległą. Wiadomość ta powinna być zastosowana zawsze na początku komunikacji.
Dla normy IEC 870-5-104 kontrola połączenia jest wykonywana automatycznie driverem i projektant ma możliwość wpływu na to wyłącznie przy pomocy parametrów protokołu "t3 = Zwłoka [ms] wysłania testu połączenia (U-Frame TESTFR)".
W karcie "Dane-wysłanie" znajdują się zmienne:
- LinkAddr: (Long) Zmienna ma znaczenie tylko dla IEC 870-5-101 typu 0=Tryb niezrównoważony. Określa link adres stacji, z którą wiadomość ma komunikować się.
W karcie "Dane-odbiór" znajdujuą się zmienne:
- State: (Integer) określa wynik kontroli (0=niezinicjalizowane, 1=kontrola przebiegła poprawnie, 2=kontrola zakończyła się błędem).


- Wysłanie danych:
wiadomość ta prześle dane/polecenie do satcji przeciwległej.
Parametry wiadomości:
Typ wysyłanych danychMoże wysyłać wszystkie typy ASDU danych/poleceń przedstawionych niżej, patrz Lista oraz opis wspieranych ASDU.
Ilość pozycjiTam gdzie jest to możliwe można wysyłać większą ilość danych tego samego typu równocześnie (jest to możliwe w przypadku niektórych typów danych, nie jest to możliwe w przypadku poleceń).
Tryb wysłaniaKonfigurator ten jest widoczny tylko jeżeli protokół jest IEC 870-5-101.
Dla protokołu IEC 870-5-104 transmisja zawsze odbywa się w trybie 0 = Wysłanie nie zażądanych danych.
0 = Wysłanie nie zażądanych danych - Standardowe "Master" przesłanie danych bez uprzedniego czekania na odbiór wymogu.
1 = Wysłanie spontanicznie zażądanych danych - Wysłanie danych po odbiorze wymogu na dane zmianowe (spontaniczne). Dane zostaną wysłane z przyczyną transmisji 3=spont i po wysłaniu danych nie jest oczekiwane żadne potwierdzenie.
2 = Wysłanie danych zażądanych powszechnym pytaniem - Wysłanie danych po odbiorze wymogu na wszystkie dane. Dane zostaną wysłane z przyczyną transmisji 20=inrogen i po wysłaniu danych nie jest oczekiwane żadne potwierdzenie.
W karcie "Dane-wysłanie" znajdują się zmienne:
LinkAddr: (Long) Zmienna ma znaczenie tylko dla IEC 870-5-101 typu 0=Tryb niezrównoważony. Określa link adres stacji, z którą wiadomość ma komunikować się.
CmnAddr: (Long) Common adres of ASDU.

Dalsze zmienne są zależne od wybranego typu i ilości nadawanych danych., Na przykład:
IoAddr: (Long) adres pozycji
Value: (Byte) wartość pozycji
Qualif: (Byte) kwalifikator, patrz Typy oraz wartości kwalifikatorów (Qualif).
W karcie "Dane-odbiór" nie ma żadnej zmiennej.


- Polecenie odczytu (ASDU-102, C_RD_NA_1):
Wiadomość ta zapytuje o 1 zmienną (1 obiekt informacyjny). Po odbiorze tej zmiennej zapisze informację do karty "Dane-odbiór".
W karcie "Dane-wysłanie" znajdują się zmienne:
CmnAddr: (Long) Common adres of ASDU.
IoAddr: (Long) Adres obiektu informacyjnego
OrigAddr: (Long) Adres inicjatora. Ma znaczenie tylko jeżeli konfigurator "Wielkość wartości "przyczyna transmisji"" jest ustawiony na 2.
W karcie "Dane-odbiór" znajdujuą się zmienne:
Value: (Variant) Otrzymana wartość obiektu informacyjnego.
Jeżeli Odebrana wartość zawiera czas typu CP56, wtedy ten czas jest zapisany do właściwości TimeSource.
Quality: (Long) Otrzymana jakość obiektu informacyjnego.
Jest ustawiana tylko jeżeli otrzymany obiekt informacyjny zawiera jakość.


- Żądanie danych (ASDU-100, C_IC_NA_1):
Wiadomość prześle żądanie o dane do przeciwległej stacji. Stacja przeciwległa następnie prześle wszystkie wartości (wartości te będzie odbierać obiekt PmaCommGroup lub wiadomość Slave typu Odbiór danych).
Zasadniczo jest to równoważne z wysłaniem polecenia ASDU-100 przy pomocy Master wiadomości typu Wysłanie danych (tam może być ustawiana również wartość "przyczyna transmisji").
W karcie "Dane-wysłanie" znajdują się zmienne:
LinkAddr: (Long) Zmienna ma znaczenie tylko dla IEC 870-5-101 typu 0=Tryb niezrównoważony. Określa link adres stacji, z którą wiadomość ma komunikować się.
CmnAddr: (Long) Common adres of ASDU.
Oper: (Long) Określa, czy zapotrzebowanie o dane ma zostać zaktywowane (wartość 0) lub dezaktywowane (wartość 1).
Type: (Long) Typ wymaganych danych (20=global, 21=group1, 22=group2 .. 36=group16)
W karcie "Dane-odbiór" znajdujuą się zmienne:
Flag: (Long) Znacznik, czy aktywacja (wartość 7) lub deaktywacja (wartość 9) przebiegła pomyślnie.
Type: (Long) Typ wymaganych danych (20=global, 21=group1, 22=group2 .. 36=group16)


- Polecenie synchronizacji czasu (ASDU-103, C_CS_NA_1):
Wiadomość prześle czas bieżący do stacji przeciwległej.
Obecnie wiadomość ta jest zaimplementowana tylko dla protokołu IEC 870-5-101.
W karcie "Dane-wysłanie" znajdują się zmienne:
LinkAddr: (Long) Zmienna ma znaczenie tylko dla IEC 870-5-101 typu 0=Tryb niezrównoważony. Określa link adres stacji, z którą wiadomość ma komunikować się.
CmnAddr: (Long) Common adres of ASDU.
W karcie "Dane-odbiór" nie ma żadnej zmiennej.

Opis komunikacji przy pomocy obiektu PmaCommMsg - Slave wiadomości:

- Kontrola połączenia z przeciwległej stacji:
Wiadomość przyjmuje komunikaty kontroli połączenia ze stacji przeciwległych i automatycznie na nie odpowiada.
W karcie "Dane-wysłanie" znajdują się zmienne:
- ErrorFlag: (Long) Wartość zmiennej można ustawić jako stałą lub można ją na przykład zmienić po odbiorze w zdarzeniu onDataReceive. Wartość określa, jaka będzie odpowiedź drugiej stronie:
0 = zostanie wysłana odpowiedź z pozytywnym potwierdzeniem kontroli połączenia.
1 = zostanie wysłana odpowiedź z negatywnym potwierdzeniem kontroli połączenia (tylko dla IEC 870-5-101).
2 = odpowiedź nie zostanie w ogóle wysłana.
W karcie "Dane-odbiór" znajdujuą się zmienne:
- MsgType: (Integer) Wartość zmiennej informuje o rodzaju kontroli.
W przypadku protokołu IEC 870-5-104 może mieć tylko jedną wartość:
2=test połączenia (U-Frame TESTFR).
W przypadku protokołu IEC 870-5-101 może mieć następujące wartości:
0=reset połączenia (ResetLink).
2=test połączenia (TestLink).
9=żądanie na przesłanie statusu (ReqLinkStatus).


- Odbiór kiedy nikt nie chce:
Wiadomość przyjmuje wszystkie nadesłane wiadomości ze stacji przeciwległej, których nie chce żadna inna wiadomość komunikacyjna. W ten sposób można identyfikować na przykład nadawanie danych, które nie są skonfigurowane w obiekcie PmaCommGroup lub w wiadomości typu Odbiór danych.
Parametry wiadomości:
Zawartość wiadomościOkreśla, czy i w jaki sposób treść komunikatu ma być przechowywana:
Nie zapisuj - Zawartość odebranej wiadomości nie zostanie zapisana.
Zapisywać do zmiennej "Buffer" jako PmBuffer - Zawartość odebranej wiadomości zostanie zapisana do obiektu PmBuffer a obiekt ten zostanie zapisany w zmiennej Buffer w karcie "Dane-odbiór".
W karcie "Dane-wysłanie" znajdują się zmienne:
- ErrorFlag: (Long) Zmienna ta może być ustawiona albo na wartość stałą (najczęsciej stosowanym bywa 0) lub może być na przykład zmieniana dynamicznie w zdarzeniu onDataReceive według tego, jaki typ wiadomości został odebrany. Wartość określa, jaka będzie odpowiedź drugiej stronie.
- dla normy IEC 870-5-101: jeżeli ErrorFlag posiada wartość:
0 = odpowiada pozytywne potwierdzenie (ACK)
1 = odpowiada negatywne potwierdzenie (NAK)
2 = nie odpowiada w ogóle
- dla normy IEC 870-5-104: jeżeli ErrorFlag posiada wartość:
0 = odpowiada pozytywnym potwierdzeniem (komunikatem systemowym S-FRAME lub w przypadku poleceń wiadomością odpowiadającą ASDU-100 z "przyczyna transmisji"=7=actcon)
2 = nie odpowiada w ogóle
4 = tak samo jak 0 lecz dla poleceń zostanie wysłane 10=actterm
5 = tak samo jak 0 lecz dla poleceń zostanie wysłane 7=actcon oraz 10=actterm

Jeżeli nei byłoby takiej wiadomośći (lub zawsze miała ustawiono ErrorFlag=2), wtedy stacje przeciwległa nie otrzymała by odpowiedź i odłączyła by połączenie.
W karcie "Dane-odbiór" znajdujuą się zmienne:
- CField: (Byte) Wartość ControlField protokołu.
- LinkAddr: (Byte) Adres liniowy
- CmnAddr: (Long) Common adres of ASDU.
- AsduType: (Long) Typ ASDU, patrz Lista oraz opis wspieranych ASDU
- Cause: (Long) przyczyna transmisji, patrz Znaczenie i wartości parametru "przyczyna transmisji"
- NmbObj: (Long) Ilość obiektów danych w odebranej wiadomości
- Buffer: (PmBuffer) Zmienna zawiera obiekt PmBuffer, w którym przechowywana jest treść całej odebranej wiadomości. Zmienna ta zostanie wytworzona, tylko jeżeli jest ustawiony konfigurator "Zawartość wiadomości".


- Polecenie synchronizacji czasu:
Wiadomość przyjmuje czas przesłany ze stacji przeciwległych. W chwili wiadomość ta jest zaimplementowana tylko dla protokołu IEC 870-5-101.
W karcie "Dane-wysłanie" znajdują się zmienne:
- ErrorFlag: (Long) Zmienna ta może być ustawiona albo na wartość stałą (najczęsciej stosowanym bywa 0) lub może być na przykład zmieniana dynamicznie w zdarzeniu onDataReceive według tego, jaki typ wiadomości został odebrany. Wartość określa, jaka będzie odpowiedź drugiej stronie.
0 = zostanie wysłana odpowiedź z pozytywnym potwierdzeniem kontroli połączenia.
1 = zostanie wysłana odpowiedź z negatywnym potwierdzeniem kontroli połączenia.
2 = odpowiedź nie zostanie w ogóle wysłana.
W karcie "Dane-odbiór" znajdujuą się zmienne:
- CmnAddr: (Long) Common adres of ASDU.
- Invalid: (Boolean) Znacznik ważności czasu synchronizacji (false = ważny czas).
- Time: (Date) Czas, podczas którego aplikacja PROMOTIC powinna wykonać synchronizację. Na przykład w zdarzeniu onDataReceive przyszeregować:
Pm.Time = pMe.ReadVars("Time").Value


- Odbiór danych:
Wiadomość ta je przestarzała oraz dogodniejszym jest zastosowanie obiektu PmaCommGroup.
Wiadomość przyjmuje dane przesyłane ze stacji przeciwległych. Stacja przeciwległa przesyła wartości, które zostały zmienione. Można odbierać wszystkie typy ASDU danych/poleceń niżej przedstawionych, patrz Lista oraz opis wspieranych ASDU.
W obiekcie znajduje się parametr wiadomości "Typ informacji o odebranych danych" który można ustawić na 0 lub 1. Parametr ten określa w jaki sposób będzie system informowany o odebranych danych. Dla 0 (wariant mniej ogólny) w karcie "Dane-odbiór" zostaną wytworzone pozycje FillLastIndex oraz FillLastAddr, które przy każdym odbiorze będą zawierać indeks i adres ostatnio odebranej pozycji. Jeżeli są odbierane wiadomości z kilkima danymi, wtedy jest lepiej wybrać parametr 1. Dla 1 zostaną wytworzone pozycje FillIndexes oraz Reserve. Pozycja FillIndexes jest typu Array i zawiera indeksy wszystkich odebranych danych w odebranej wiadomości. Pozycja Reserve nie jest wykorzystana, zawsze jest równa 0.
W karcie "Dane-wysłanie" znajdują się zmienne:
- CmdAddr: (Long) Common adres of ASDU.
W karcie "Dane-odbiór" znajdujuą się zmienne:
- 0. FillCount: (Long) Ilość obiektów danych, które przesłała stacja przeciwległa. Komunikacja jest często ustawiona w ten sposób, że jedna transmisja prześle tylko jeden obiekt. W tym przypadku w tej zmiennej znajduje się zawsze wartość 1.
- 1. FillLastIndex (lub FillIndexes): (Long) Indeks zmiennej (lub pole indeksów zmiennych), do której była zapisana wartość (wartości).
- 2. FillLastAddr (lub Reserve): (Long) IO adres obiektu, którego wartość była ostatnim razem zapisana do odpowiedniej zmiennej (lub nie wykorzystane).
- 3. Z kolei następują dane użytkownika do odbioru obiektów z danymi. Przy pierwszym wytworzeniu driver uzupełni 6 zmiennych jako przykład (zmienne te mogą zostać usunięte, uzupełnione lub zmienione). Nazwy zmiennych mogą być dowolne. Jednak musi być poprawnie wypełniona Notatka. Na tym miejscu określa się adres obiektu według następującego przykładu:
Zmienna pod indeksem 3 (za zmienną FillLastAddr) posiada notatkę: v95 (v jako value)
Zmienna pod indeksem 4 (typu Date) posiada notatkę: t95 (t jako time).
Zmienna pod indeksem 5 (typu Byte) posiada notatkę: q95 (q jako qualifier = kwalifikator).
Zmienna pod indeksem 6 (typu Byte) posiada notatkę : c95 (c jako cause = "przyczyna transmisji").

Jeżeli zostanie przyjęta informacja o obiekcie pod adresem 95, wtedy do zmiennej v95 zostanie zapisana wartość (value) obiektu, do zmiennej t95 zostanie zapisany czas (time) obiektu, do zmiennej q95 zostanie zapisany kwalifikator (qualifier) obiektu oraz do zmiennej c95 zostanie zapisana "przyczyna transmisji". Zmienne t95, q95 oraz c95 nie muszą wystąpić (w tym przypadku jest odebrana tylko wartość) lecz jeżeli występują, wtedy muszę się znajdować (w dowolnej kolejności) bezpośrednio za zmienną v95.
Za zmienną v95 mogą się znajdować następne dane wypełnione według tej samej zasady.
Patrz również: Konfiguracja wstępna "PmIEC8705 - Ethernet 104 - Zestaw komunikacji z danymi i panelem"

Lista oraz opis wspieranych ASDU

Można odbierać następujące typy danych ASDU (w obiekcie PmaCommGroup lub przy pomocy wiadomości Slave typu Odbiór danych) oraz wysyłać (przy pomocy wiadomości Master typu Wysłanie danych):
ASDUs dla informacji zarządzania w kierunku monitorowania:
ASDU-1 (M_SP_NA_1) = Single-point information:
- Wartość (Value) jest typu Byte, 0=Wyłączone, 1=Włączone.
- Kwalifikator (Qualif) typu SIQ
- Czas (Time) nie jest stosowany.
ASDU-2 (M_SP_TA_1) = Single-point information, time CP24:
- Wartość (Value) jest typu Byte, 0=Wyłączone, 1=Włączone.
- Kwalifikator (Qualif) typu SIQ
- Czas (Time) na razie nie jest zaimplementowany.
ASDU-3 (M_DP_NA_1) = Double-point information:
- Wartość (Value) jest typu Byte, 0=Stan nieokreślony lub przejściowy, 1=określony stan Wyłączone, 2=określony stan Włączone, 3=Stan nieokreślony.
- Kwalifikator (Qualif) typu DIQ
- Czas (Time) nie jest stosowany.
ASDU-4 (M_DP_TA_1) = Double-point information, time CP24:
- Wartość (Value) jest typu Byte, 0=Stan nieokreślony lub przejściowy, 1=określony stan Wyłączone, 2=określony stan Włączone, 3=Stan nieokreślony.
- Kwalifikator (Qualif) typu DIQ
- Czas (Time) na razie nie jest zaimplementowany.
ASDU-5 (M_ST_NA_1) = Step position information:
- Wartość (Value) jest typu Byte oraz przedstawia indykację poprzedniego stanu w celu sygnalizacji pozycji. Najwyższy bit wartości: 0 = urządzenie nie znajduje się w stanie przejściowym, 1 = urządzenie znajduje się w stanie przejściowym.
- Kwalifikator (Qualif) typu QDS
- Czas (Time) nie jest stosowany.
ASDU-6 (M_ST_TA_1) = Step position information, time CP24:
- Wartość (Value) jest typu Byte oraz przedstawia indykację poprzedniego stanu w celu sygnalizacji pozycji. Najwyższy bit wartości: 0 = urządzenie nie znajduje się w stanie przejściowym, 1 = urządzenie znajduje się w stanie przejściowym.
- Kwalifikator (Qualif) typu QDS
- Czas (Time) na razie nie jest zaimplementowany.
ASDU-7 (M_BO_NA_1) = Bitstring of 32 bit:
- Wartość (Value) typu Long przedstawia binarną informację 32-bitów o stanie (poszczególne bity można z kolei odczytać na przykład przy pomocy metody GetBit).
- Kwalifikator (Qualif) typu QDS
- Czas (Time) nie jest stosowany.
ASDU-8 (M_BO_TA_1) = Bitstring of 32 bit, time CP24:
- Wartość (Value) typu Long przedstawia binarną informację 32-bitów o stanie (poszczególne bity można z kolei odczytać na przykład przy pomocy metody GetBit).
- Kwalifikator (Qualif) typu QDS
- Czas (Time) na razie nie jest zaimplementowany.
ASDU-9 (M_ME_NA_1) = Measured value, normalised:
- Wartość (Value) jest typu Single, zakres od -1.0 do +1.0.
- Kwalifikator (Qualif) typu QDS
- Czas (Time) nie jest stosowany.
ASDU-10 (M_ME_TA_1) = Measured value, normalised, time CP24:
- Wartość (Value) jest typu Single, zakres od -1.0 do +1.0.
- Kwalifikator (Qualif) typu QDS
- Czas (Time) na razie nie jest zaimplementowany.
ASDU-11 (M_ME_NB_1) = Measured value, with measure:
- Wartość (Value) jest typu Integer (zakres od -32536 do +32535) i przedstawia wartość o ustalonej podziałce (np. napięcie 10.3 kV zostanie przeniesione jako 103).
- Kwalifikator (Qualif) typu QDS
- Czas (Time) nie jest stosowany.
ASDU-12 (M_ME_TB_1) = Measured value, with measure, time CP24:
- Wartość (Value) jest typu Integer (zakres od -32536 do +32535) i przedstawia wartość o ustalonej podziałce (np. napięcie 10.3 kV zostanie przeniesione jako 103).
- Kwalifikator (Qualif) typu QDS
- Czas (Time) na razie nie jest zaimplementowany.
ASDU-13 (M_ME_NC_1) = Measured value, short floating-point:
- Wartość (Value) jest typu Single i można zastosować cały zakres.
- Kwalifikator (Qualif) typu QDS
- Czas (Time) nie jest stosowany.
ASDU-14 (M_ME_TC_1) = Measured value, short floating-point, time CP24:
- Wartość (Value) jest typu Single i można zastosować cały zakres.
- Kwalifikator (Qualif) typu QDS
- Czas (Time) na razie nie jest zaimplementowany.
ASDU-15 (M_IT_NA_1) = Integrated totals:
- Wartość (Value) jest typu Long w całym zakresie.
- Kwalifikator (Qualif) typu BCR
- Czas (Time) nie jest stosowany.
ASDU-16 (M_IT_TA_1) = Integrated totals, time CP24:
- Wartość (Value) jest typu Long w całym zakresie.
- Kwalifikator (Qualif) typu BCR
- Czas (Time) na razie nie jest zaimplementowany.
ASDU-30 (M_SP_TB_1) = Single-point information, time CP56:
- Wartość (Value) jest typu Byte, 0=Wyłączone, 1=Włączone.
- Kwalifikator (Qualif) typu SIQ
- Czas (Time) jest typu Date.
ASDU-31 (M_DP_TB_1) = Double-point information, time CP56:
- Wartość (Value) jest typu Byte, 0=Stan nieokreślony lub przejściowy, 1=określony stan Wyłączone, 2=określony stan Włączone, 3=Stan nieokreślony.
- Kwalifikator (Qualif) typu DIQ
- Czas (Time) jest typu Date.
ASDU-33 (M_BO_TB_1) = Bitstring of 32 bit, time CP56:
- Wartość (Value) typu Long przedstawia binarną informację 32-bitów o stanie (poszczególne bity można z kolei odczytać na przykład przy pomocy metody GetBit).
- Kwalifikator (Qualif) typu QDS
- Czas (Time) jest typu Date.
ASDU-34 (M_ME_TD_1) = Measured value, normalised, time CP56:
- Wartość (Value) jest typu Single, zakres od -1.0 do +1.0.
- Kwalifikator (Qualif) typu QDS
- Czas (Time) jest typu Date.
ASDU-35 (M_ME_TE_1) = Measured value, with measure, time CP56:
- Wartość (Value) jest typu Integer (zakres od -32536 do +32535) i przedstawia wartość o ustalonej podziałce (np. napięcie 10.3 kV zostanie przeniesione jako 103).
- Kwalifikator (Qualif) typu QDS
- Czas (Time) jest typu Date.
ASDU-36 (M_ME_TF_1) = Measured value, short floating-point, time CP56:
- Wartość (Value) jest typu Single i można zastosować cały zakres.
- Kwalifikator (Qualif) typu QDS
- Czas (Time) jest typu Date.
ASDU-37 (M_IT_TB_1) = Integrated totals, time CP56:
- Wartość (Value) jest typu Long w całym zakresie.
- Kwalifikator (Qualif) typu BCR
- Czas (Time) jest typu Date.

ASDUs dla informacji zarządzania w kierunku sterowania:
ASDU-45 (C_SC_NA_1) = Single command:
- Wartość (Value) jest typu Byte, 0=Wyłączone, 1=Włączone.
- Kwalifikator (Qualif) typu QOC
- Czas (Time) nie jest stosowany.
ASDU-46 (C_DC_NA_1) = Double command:
- Wartość (Value) jest typu Byte, 0=niedopuszczalna, 1=Wyłączone, 2=Włączone, 3=niedopuszczalna.
- Kwalifikator (Qualif) typu QOC
- Czas (Time) nie jest stosowany.
ASDU-48 (C_SE_NA_1) = Set-point command, normalised:
- Wartość (Value) jest typu Single, zakres od -1.0 do +1.0.
- Kwalifikator (Qualif) typu QOS
- Czas (Time) nie jest stosowany.
ASDU-49 (C_SE_NB_1) = Set-point command, with measure:
- Wartość (Value) jest typu Integer (zakres od -32536 do +32535) i przedstawia wartość o ustalonej podziałce (np. napięcie 10.3 kV zostanie przeniesione jako 103).
- Kwalifikator (Qualif) typu QOS
- Czas (Time) nie jest stosowany.
ASDU-50 (C_SE_NC_1) = Set-point command, short floating-point:
- Wartość (Value) jest typu Single i można zastosować cały zakres.
- Kwalifikator (Qualif) typu QOS
- Czas (Time) nie jest stosowany.
ASDU-51 (C_BO_NA_1) = Bitstring of 32 bit:
- Wartość (Value) typu Long przedstawia binarną informację 32-bitów o stanie (poszczególne bity można z kolei odczytać na przykład przy pomocy metody GetBit).
- Kwalifikator (Qualif) nie jest stosowany.
- Czas (Time) nie jest stosowany.
ASDU-58 (C_SC_TA_1) = Single command, time CP56:
- Wartość (Value) jest typu Byte, 0=Wyłączone, 1=Włączone.
- Kwalifikator (Qualif) typu QOC
- Czas (Time) jest typu Date.
ASDU-59 (C_DC_TA_1) = Double command, time CP56:
- Wartość (Value) jest typu Byte, 0=niedopuszczalna, 1=Wyłączone, 2=Włączone, 3=niedopuszczalna.
- Kwalifikator (Qualif) typu QOC
- Czas (Time) jest typu Date.
ASDU-60 (C_RC_TA_1) = Regulation step command, time CP56:
- Wartość (Value) jest typu Byte, 0=niedopuszczalna, 1=następny krok Niżej, 2=następny krok Wyżej, 3=niedopuszczalna.
- Kwalifikator (Qualif) typu QOC
- Czas (Time) jest typu Date.
ASDU-61 (C_SE_TA_1) = Set-point command, normalised, time CP56:
- Wartość (Value) jest typu Single, zakres od -1.0 do +1.0.
- Kwalifikator (Qualif) typu QOS
- Czas (Time) jest typu Date.
ASDU-62 (C_SE_TB_1) = Set-point command, with measure, time CP56:
- Wartość (Value) jest typu Integer (zakres od -32536 do +32535) i przedstawia wartość o ustalonej podziałce (np. napięcie 10.3 kV zostanie przeniesione jako 103).
- Kwalifikator (Qualif) typu QOS
- Czas (Time) jest typu Date.
ASDU-63 (C_SE_TC_1) = Set-point command, short floating-point, time CP56:
- Wartość (Value) jest typu Single i można zastosować cały zakres.
- Kwalifikator (Qualif) typu QOS
- Czas (Time) jest typu Date.
ASDU-64 (C_BO_TA_1) = Bitstring of 32 bit, time CP56:
- Wartość (Value) typu Long przedstawia binarną informację 32-bitów o stanie (poszczególne bity można z kolei odczytać na przykład przy pomocy metody GetBit).
- Kwalifikator (Qualif) nie jest stosowany.
- Czas (Time) jest typu Date.

ASDUs dla informacji systemowych w kierunku sterowania:
ASDU-100 (C_IC_NA_1) = Interrogation command:
Wysłanie niniejszego polecenia jest możliwe lecz zasadniczo takie samo jak wysłanie Master wiadomości typu Żądanie danych (ASDU-100, C_IC_NA_1). Dodatkowo można władać "przyczyna transmisji".
- Wartość (Value) jest typu Long. Oznacza "przyczyna transmisji": 6=act, 7=actcon, 8=deact, 9=deactcon, 10=actterm.
- Kwalifikator (Qualif) typu QOI
- Czas (Time) nie jest stosowany.
ASDU-101 (C_CI_NA_1) = Counter Interrogation Command:
- Wartość (Value) jest typu Long. Oznacza "przyczyna transmisji": 6=act, 7=actcon, 10=actterm.
- Kwalifikator (Qualif) typu QCC
- Czas (Time) nie jest stosowany.
ASDU-102 (C_RD_NA_1) = Read Command:
To polecenie można zastosować tylko w obiekcie PmaCommMsg dla typu Polecenie odczytu (ASDU-102, C_RD_NA_1). Chodzi o polecenie odczytu 1 zmiennej.

Typy oraz wartości kwalifikatorów (Qualif)

Kwalifikator pozycji (jakościowy deskryptor) daje więcej informacji na temat pozycji. Informacja może być o jakości wartości (ważne, nieważne ...) ale również o okresie, kolejności, itd.

Typy kwalifikatorów:
- SIQ: Jest typu Byte. Ten kwalifikator jest zawarty w ASDU-(1,2,30).
0 = wartość normalna
bit 5 = 0/1 = nie blokowane/blokowane
bit 6 = 0/1 = nie zmienione/zmienione
bit 7 = 0/1 = aktualna/niaktualna wartość
bit 8 = 0/1 = ważna/nieważna wartość. Jeżeli ustawiono dany bit, wtedy w zmiennej zostanie ustawiona właściwość Quality na "0=Bad:NonSpecific".
- DIQ: Jest typu Byte. Ten kwalifikator jest zawarty w ASDU-(3,4,31).
0 = wartość normalna
bit 5 = 0/1 = nie blokowane/blokowane
bit 6 = 0/1 = nie zmienione/zmienione
bit 7 = 0/1 = aktualna/niaktualna wartość
bit 8 = 0/1 = ważna/nieważna wartość. Jeżeli ustawiono dany bit, wtedy w zmiennej zostanie ustawiona właściwość Quality na "0=Bad:NonSpecific".
- QDS: Jest typu Byte. Ten kwalifikator jest zawarty w ASDU-(5-14,33-36).
0 = wartość normalna
bit 1 = 0/1 = nie przepełnione/przepełnione
bit 5 = 0/1 = nie blokowane/blokowane
bit 6 = 0/1 = nie zmienione/zmienione
bit 7 = 0/1 = aktualna/niaktualna wartość
bit 8 = 0/1 = ważna/nieważna wartość. Jeżeli ustawiono dany bit, wtedy w zmiennej zostanie ustawiona właściwość Quality na "0=Bad:NonSpecific".
- BCR: Jest typu Byte. Ten kwalifikator jest zawarty w ASDU-15,16,37. Zawiera sekwencję rekordów:
- bit 0-4 (SQ) oznacza numer sekwencyjny
- bit 5 (CY) określa, czy w odpowiednim okresie ingegracyjnym 0=nie doszło lub 1=doszło do przepełnienia licznika
- bit 6 (CA) określa, czy od ostatniego odczytu licznik 0=nie został lub 1=zostal ustawiony
- bit 7 (IV) określa, czy odczyt licznika jest 0=ważny lub 1=nie ważny
- QOC: Jest typu Byte. Ten kwalifikator jest zawarty w ASDU-(45,46,58,59,60).
0 = bez dodatkowych informacji
1 = krótka długość sygnału
2 = długa długość sygnału
3 = stałe wyjście
>3 = zarezerwowane
Ponadto jeżeli bit 8 = 0=vykonanie, 1=opcja(przygotowanie)
- QOS: Jest typu Byte. Ten kwalifikator jest zawarty w ASDU-(48,49,50,61,62,63).
0 = domyślne
większe niż 0 = zarezerwowane
Ponadto jeżeli bit 8 = 0=vykonanie, 1=opcja(przygotowanie)
- QOI: Jest typu Byte. Ten kwalifikator jest zawarty w ASDU-100.
20 = zapytanie wysłane do stacji (globalne)
21..36 = zapytanie do grupy 1..16
- QCC: Jest typu Byte. Ten kwalifikator jest zawarty w ASDU-101. Jest to suma dwu liczb:
Pierwsza liczba to RQT żądanie: 0 = nie jest wymagany żaden czytnik, 1-4 = wymóg czytnika grupy 1-4, 5 = całkowite zapytanie do czytnika.
Druga liczba to FRZ zmrożenie: 0 = bez zmrożenia lub zerowania, 64 = zmrożenie czytnika bez zerowania, 128 = zmrożenie czytnika z zerowaniem, 128+64 = zerowanie czytnika.

Znaczenie i wartości parametru "przyczyna transmisji"

W każdej wiadomości jest transmitowana tzw. "przyczyna transmisji", która określa powód transmisji. Wartość może mieć wielkość 1 lub 2 bajty (patrz konfigurator "Wielkość wartości "przyczyna transmisji"").
- Wartości w 1. bajcie:
- bit 0-5 określa powód transmisji:
- 0: nie jest stosowane
- 1=per/cyc: okresowe, cykliczne
- 2=back: odczyt wypełniający
- 3=spont: spontaniczny
- 4=init: inicjalizowany
- 5=req: żądanie lub wymagane
- 6=act: aktywacja
- 7=actcon: potwierdzenie aktywacji
- 8=deact: deaktywacja
- 9=deactcon: potwierdzenie deaktywacji
- 10=actterm: zakończenie aktywacji
- 11=retrem: informacja zwrotna wywołana przez polecenie odległe
- 12=retloc: informacja zwrotne wywołana przez polecenie lokalne
- 13=file: transmisja pliku
- 14-19: zarezerwowane dla następnych kompatybilnych definicji
- 20=inrogen: zażądane przez wymóg powszechny
- 21-36=inro 1-16: zażądane przez wymóg na grupę: 1-16
- 37=reqcogen: zażądane przez wymóg na licznik
- 38-41=reqco 1-4: zażądane przez wymóg na licznik grupy: 1-4
- 42-47: zarezerwowane dla następnych kompatybilnych definicji
- 48-63: do zastosowania specjalnego (zakres prywatny)
- bit 6 (P/N) określa: 0=pomyślne, 1=negatywne potwierdzenie
- bit 7 (T) określa: 0=bez próby, 1=próba
- Wartość w 2. bajcie (opcjonalne) jest "Adres inicjatora" ("originator address") (0=domyślnie).

Opis zapytania o dane dla IEC 60870-5-104.

Strona przeciwległa może sama automatycznie nadawać dane (np. przy zmianie, wtedy bywa "przyczyna transmisji"=3=spont) i takie dane będą odbierane do zmiennych zdefiniowanych w obiekcie PmaCommGroup (lub można je też odbierać przy pomocy Slave wiadomości typu Odbiór danych).
Jeżeli aplikacja PROMOTIC chce jawnie zażądać wysłania swoich danych (wszystkich, nie tylko zmienionych), wtedy aplikacja PROMOTIC musi wysłać Master wiadomość typu Żądanie danych (ASDU-100, C_IC_NA_1). Wiadomość ta spowoduje wysłanie ASDU-100 z "przyczyna transmisji"=6=act i następnie oczekuje odpowiedzi. Druga strona powinna jako odpowiedź wyłać wiadomość tego samego typu z "przyczyna transmisji"=7=actcon.
Druga strona z kolei będzie nadawać wiadomości z danymi (z "przyczyna transmisji"=20=inrogen), które można odbierać do zmiennych zdefiniowanych w obiekcie PmaCommGroup (lub można je odbierać przy pomocy wiadomości Slave typu Odbiór danych).
Po zakończeniu druga strona wyśle wiadomość ASDU-100 z "przyczyna transmisji"=10=actterm - niniejszą wiadomość można odbierać przy pomocy wiadomości Slave typu Odbiór kiedy nikt nie chce.

Oczywiście można postępować także odwrotnie: druga strona również może wysłać ASDU-100 z "przyczyna transmisji"=6=act, to znaczy, że druga strona wymaga dane z aplikacji PROMOTIC. Taką wiadomość można odbierać przy pomocy Slave wiadomości typu Odbiór kiedy nikt nie chce z ustawionym ErrorFlag=0. Po odbiorze wiadomości obiekt sam automatycznie odpowie wiadomością ASDU-100 z "przyczyna transmisji"=7=actcon. Wtedy system PROMOTIC będzie nadawać dane przy pomocy Master wiadomości typu Wysłanie danych. Po wysłaniu wszystkich danych można wysłać (w niektórych przypadkach nie jest to wymagane) wiadomość ASDU-100 z "przyczyna transmisji"=10=actterm - to można ponownie wykonać przy pomocy Master wiadomości typu Wysłanie danych.

Historia:
Pm9.00.22: Nowy konfigurator "Zawartość wiadomości" w wiadomości typu Odbiór kiedy nikt nie chce.
Pm9.00.17: Nowy typ Master wiadomości typu Polecenie odczytu (ASDU-102, C_RD_NA_1).
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.08: Usunięty błąd: Po transmisji 32000 komunikacji dochodziło do zbędnego ponawiania komunikacji.
Pm8.03.05: Uogólnienie o typ ASDU-5 oraz ASDU-6.
Pm8.02.09: Jeżeli zostanie pobrana wartość z znacznikiem niewłaściwego stanu w kwalifikatorze, wtedy danej zmiennej będzie ustawiona właściwość Quality na wartość "0=Bad:NonSpecific".
Pm8.02.06: Usunięty błąd: Uogólnienie o typ ASDU-103.
Pm8.00.11: Usunięty błąd: Były niepoprawnie przechowywane wartości konfiguracyjnego okna parametrów protokołu.
Pm8.00.09: (dla normy 101) Uogólnienie wiadomości Master typu Wysłanie danych o nowy konfigurator "Tryb wysłania" (umożliwia wysyłanie wymaganych danych).
Pm8.00.07:
- Uogólnienie o odczyt sum całkowitych (ASDU 15/16/37).
- Usunięty błąd: obiekt PmaCommGroup błędnie odbierał dane z wiadomości zawierającej kilka pozycji danych.
Pm8.00.05: Usunięty błąd: Podczas ustawienia konfiguratora "Wielkość adresu informacyjnego obiektu ASDU" na wartość 3 nie było możliwe zadresować rejestry o wyższych adresach.
Pm8.00.02: Usunięty błąd: Obiekt PmaCommGroup nie działał
© MICROSYS, spol. s r.o.