miernik parametrów sieci
Transkrypt
miernik parametrów sieci
LUBUSKIE ZAK£ADY APARATÓW ELEKTRYCZNYCH LUMEL Spó³ka Akcyjna ul. Sulechowska 1, 65-950 Zielona Góra MIERNIK PARAMETRÓW SIECI Typu N10 Instrukcja obs³ugi interfejsu szeregowego 1 SPIS TRECI 1. WSTÊP ..................................................................................... 3 2. OPIS PROTOKO£U MODBUS ................................................ 3 2.1 Ramka w trybie ASCII ........................................................ 5 2.2 Ramka w trybie RTU .......................................................... 5 2.3 Charakterystyka pól ramki ................................................. 6 2.4 Wyznaczenie LRC ............................................................. 7 2.5 Wyznaczenie CRC ............................................................. 8 2.6 Format znaku przy transmisji szeregowej ......................... 8 2.7 Przerwanie transakcji ......................................................... 9 3. OPIS FUNKCJI ....................................................................... 10 3.1 Odczyt n-rejestrów (kod 03) ............................................. 10 3.2 Zapis wartoci do rejestru (kod 06) ................................. 11 3.3 Zapis do n-rejestrów (kod 16) .......................................... 12 3.4 Raport identyfikuj¹cy urz¹dzenie (kod 17) ...................... 12 4. KODY B£ÊDÓW ..................................................................... 13 5. MAPA REJESTRÓW MIERNIKA N10 ................................... 16 DODATEK A OBLICZANIE SUMY KONTROLNEJ ................ 28 PROGRAM DO MIERNIKÓW N10 ............................................ 33 2 1. WSTÊP Cyfrowy programowalny miernik N10 przeznaczony do pomiaru parametrów sieci energetycznych zosta³ wyposa¿ony w ³¹cze szeregowe w standardzie RS485 do komunikacji z innymi urz¹dzeniami. Na ³¹czu szeregowym zosta³ zaimplementowany asynchroniczny znakowy protokó³ komunikacyjny MODBUS. Konfiguracja parametrów ³¹cza szeregowego zosta³a opisana w instrukcji obs³ugi miernika N10. Zestawienie parametrów ³¹cza szeregowego miernika N10: - 1...247 - 300, 600, 1200, 2400, 4800, 9600, 19200 bit/s, l tryby pracy - ASCII, RTU, l jednostka informacyjna - ASCII: 8N1, 7E1, 7O1; RTU: 8N2, 8E1, 8O1, l maksymalny czas odpowiedzi - 600 ms. l l adres miernika prêdkoæ transmisji 2. OPIS PROTOKO£U MODBUS Interfejs MODBUS jest standardem przyjêtym przez producentów sterowników przemys³owych dla asynchronicznej, znakowej wymiany informacji pomiêdzy urz¹dzeniami systemów pomiarowo kontrolnych. Posiada on takie cechy jak: l prosta regu³a dostêpu do ³¹cza oparta na zasadzie master-slave, l zabezpieczenie przesy³anych komunikatów przed b³êdami, l potwierdzenie wykonywania rozkazów zdalnych i sygnalizacja b³êdów, l skuteczne mechanizmy zabezpieczaj¹ce przed zawieszeniem systemu, l wykorzystanie asynchronicznej transmisji znakowej. 3 Kontrolery urz¹dzeñ pracuj¹cych w systemie MODBUS komunikuj¹ siê ze sob¹ przy wykorzystaniu protoko³u typu master-slave, w którym tylko jedno urz¹dzenie mo¿e inicjalizowaæ transakcje (jednostka nadrzêdna-master), a pozosta³e (jednostki podrzêdneslave) odpowiadaj¹ jedynie na zdalne zapytania jednostki nadrzêdnej. Transakcja sk³ada siê z polecenia wysy³anego z jednostki master do slave oraz z odpowiedzi przesy³anej w odwrotnym kierunku. Odpowied zawiera dane ¿¹dane przez master lub potwierdzenie realizacji jego polecenia. Master mo¿e przesy³aæ informacjê do pojedynczych odbiorców lub informacje rozg³oszeniowe (broadcast), przeznaczone dla wszystkich urz¹dzeñ podrzêdnych w systemie (na polecenia rozg³oszeniowe master nie otrzymuje odpowiedzi). Format przesy³anych informacji jest nastêpuj¹cy: ⇒slave: adres odbiorcy, kod reprezentuj¹cy ¿¹dane polecel master⇒ nie, dane, s³owo kontrolne zabezpieczaj¹ce przesy³an¹ wiadomoæ, ⇒master: l slave⇒ adres nadawcy, potwierdzenie realizacji rozkazu, dane ¿¹dane przez master, s³owo kontrolne zabezpieczaj¹ce odpowied przed b³êdami. Je¿eli urz¹dzenie slave wykryje b³¹d przy odbiorze wiadomoci, lub nie mo¿e wykonaæ polecenia, przygotowuje specjalny komunikat o wyst¹pieniu b³êdu i przesy³a go jako odpowied do mastera. Urz¹dzenia pracuj¹ce w protokole MODBUS mog¹ byæ ustawione na komunikacjê przy u¿yciu jednego z dwóch trybów transmisji: ASCII lub RTU. U¿ytkownik wybiera ¿¹dany tryb wraz z parametrami portu szeregowego (prêdkoæ transmisji, jednostka informacyjna), podczas konfiguracji ka¿dego urz¹dzenia. W systemie MODBUS przesy³ane wiadomoci s¹ zorganizowane w ramki o okrelonym pocz¹tku i koñcu. Pozwala to urz¹dzeniu odbieraj¹cemu na odrzucenie ramek niekompletnych i sygnalizacjê zwi¹zanych z tym b³êdów. 4 Ze wzglêdu na mo¿liwoæ pracy w jednym z dwóch ró¿nych trybów transmisji (ASCII lub RTU), definiuje siê dwie ramki. 2.1. Ramka w trybie ASCII W trybie ASCII ka¿dy bajt wiadomoci przesy³any jest w postaci dwóch znaków ASCII. Podstawow¹ zalet¹ tego trybu jest to, i¿ pozwala on na d³ugie odstêpy miêdzy znakami (do 1s) bez powodowania b³êdów. Format ramki przedstawiono poni¿ej: Znacznik pocz¹tku Adres Funkcja 1 znak «:» 2 znaki 2 znaki Dane Kontrola LRC n znaków 2 znaki Znacznik koñca 2 znaki CR LF Znacznikiem pocz¹tku jest znak dwukropka (:- ASCII 3 Ah), natomiast znacznikiem koñca dwa znaki CR i LF. Czêæ informacyjn¹ ramki zabezpiecza siê kodem LRC (Longitudinal Redundancy Check). 2.2. Ramka w trybie RTU W trybie RTU wiadomoci rozpoczynaj¹ i koñcz¹ siê odstêpem trwaj¹cym minimum 3.5 x (czas trwania pojedynczego znaku), w którym panuje cisza na ³¹czu. Najprostsz¹ implementacj¹ wymienionego interwa³u czasowego jest wielokrotne odmierzanie czasu trwania znaku przy zadanej szybkoci bodowej przyjêtej na ³¹czu. Format ramki przedstawiono poni¿ej: Znacznik pocz¹tku Adres Funkcja T1-T2-T3-T4 8 bitów 8 bitów Dane Kontrola CRC n x 8 bitów 16 bitów Znacznik koñca T1-T2-T3-T4 5 Znaczniki pocz¹tku i koñca zaznaczono symbolicznie jako odstêp równy czterem d³ugociom znaku (jednostki informacyjnej). S³owo kontrolne jest 16 bitowe i powstaje jako rezultat obliczenia CRC (Cyclical Redundancy Check) na zawartoci ramki. 2.3. Charakterystyka pól ramki Pole adresowe Pole adresowe w ramce zawiera dwa znaki (w trybie ASCII) lub osiem bitów (w trybie RTU). Zakres adresów jednostek slave wynosi 0 - 247. Master adresuje jednostki slave umieszczaj¹c jej adres na polu adresowym ramki. Kiedy jednostka slave wysy³a odpowied, umieszcza swój w³asny adres na polu adresowym ramki, co pozwala masterowi sprawdziæ, z któr¹ jednostk¹ realizowana jest transakcja. Adres 0 jest wykorzystywany jako adres rozg³oszeniowy, rozpoznawany przez wszystkie jednostki slave pod³¹czone do magistrali. Pole funkcji Pole funkcji zawiera dwa znaki w trybie ASCII lub 8-bitów w trybie RTU. Zakres kodów funkcji od 1 - 255. Przy transmisji polecenia z jednostki master do slave, pole funkcji zawiera kod rozkazu, okrelaj¹cy dzia³anie, które ma podj¹æ jednostka slave na ¿¹danie mastera. Kiedy jednostka slave odpowiada masterowi, pole funkcji wykorzystuje do potwierdzenia wykonania polecenia lub sygnalizacji b³êdu, je¿eli z jakich przyczyn nie mo¿e wykonaæ polecenia. Potwierdzenie pozytywne realizowane jest poprzez umieszczenie na polu funkcji kodu wykonanego rozkazu. W przypadku stwierdzenia b³êdu, jednostka slave umieszcza na polu funkcji szczególn¹ odpowied, któr¹ stanowi kod funkcji z ustawionym na 1 najstarszym bitem. Kod b³êdu umieszczany jest na polu danych ramki odpowiedzi. 6 Pole danych Pole danych tworzy zestaw dwucyfrowych liczb heksadecymalnych, o zakresie 00-FF. Liczby te przy transmisji w trybie ASCII reprezentowane s¹ dwoma znakami, a przy transmisji w trybie RTU jednym. Pole danych ramki polecenia zawiera dodatkowe informacje potrzebne jednostce slave do wykonania rozkazu okrelonego kodem funkcji. Mog¹ to byæ adresy rejestrów, liczba bajtów w polu danych, dane itp. W niektórych ramkach pole danych mo¿e posiadaæ zerow¹ d³ugoæ. Tak jest zawsze, gdy operacja okrelona kodem nie wymaga ¿adnych parametrów. Pole kontrolne W protokole MODBUS s³owo kontrolne zabezpieczaj¹ce czêæ informacyjn¹ zale¿y od zastosowanego trybu transmisji. W trybie ASCII pole kontrolne sk³ada siê z dwóch znaków ASCII, które s¹ rezultatem obliczenia Longitudinal Redundancy Check (LRC) na zawartoci czêci informacyjnej ramki (bez znaczników pocz¹tku i koñca). Znaki LRC s¹ do³¹czane do wiadomoci jako ostatnie pole ramki, bezporednio przed znacznikiem koñca (CR,LF). W trybie RTU s³owo kontrolne jest 16-bitowe i powstaje jako rezultat obliczenia Cyclical Redundancy Check (CRC) na zawartoci ramki. Pole kontrolne zajmuje dwa bajty do³¹czane na koñcu ramki. Jako pierwszy przesy³any jest mniej znacz¹cy bajt, jako ostatni starszy bajt, który jest jednoczenie znakiem koñcz¹cym ramkê. 2. 4. Wyznaczenie LRC Obliczanie LRC polega na sumowaniu kolejnych 8-bitowych bajtów wiadomoci, odrzuceniu przeniesieñ i na koniec wyznaczeniu uzupe³nienia dwójkowego wyniku. Sumowanie obejmuje ca³¹ 7 wiadomoæ za wyj¹tkiem znaczników pocz¹tku i koñca ramki. Wartoæ 8-bitowa sumy LRC jest umieszczana na koñcu ramki w postaci dwóch znaków ASCII, najpierw znak zawieraj¹cy starsz¹ tetradê, a za nim znak zawieraj¹cy m³odsz¹ tetradê LRC. 2.5. Wyznaczenie CRC Obliczanie CRC realizowane jest wed³ug nastêpuj¹cego algorytmu: 1. Za³adowanie FFFFh do 16-bitowego rejestru CRC. 2. Pobranie bajtu z bloku danych i wykonanie operacji EXOR z m³odszym bajtem rejestru CRC. Umieszczenie rezultatu w rejestrze CRC. 3. Przesuniêcie zawartoci rejestru CRC w prawo o jeden bit po³¹czone z wpisaniem 0 na najbardziej znacz¹cy bit (MSB=0). 4. Sprawdzenie stanu najm³odszego bitu (LSB) wysuniêtego z rejestru CRC w poprzednim kroku. Je¿eli jego stan równa siê 0, to nastêpuje powrót do kroku 3 (kolejne przesuniecie), je¿eli 1, to wykonywana jest operacja EXOR rejestru CRC ze sta³¹ A001h. 5. Powtórzenie kroków 3 i 4 osiem razy, co odpowiada przetworzeniu ca³ego bajtu. 6. Powtórzenie sekwencji 2,3,4,5 dla kolejnego bajtu wiadomoci. Kontynuacja tego procesu a¿ do przetworzenia wszystkich bajtów wiadomoci. 7. Zawartoæ CRC po wykonaniu wymienionych operacji jest poszukiwan¹ wartoci¹ CRC. 8. Wartoæ CRC jest umieszczana na koñcu ramki najpierw mniej znacz¹cy bajt, a za nim bardziej znacz¹cy bajt. 2.6. Format znaku przy transmisji szeregowej W protokole MODBUS znaki s¹ przesy³ane od najm³odszego do najstarszego bitu. 8 Organizacja jednostki informacyjnej w trybie ASCII: • 1 bit startu, • 7 bitów pola danych, • 1 bit kontroli parzystoci (nieparzystoci) lub brak bitu kontroli parzystoci, • 1 bit stopu przy kontroli parzystoci lub 2 bity stopu przy braku kontroli parzystoci. Organizacja jednostki informacyjnej w trybie RTU: • 1 bit startu, • 8 bitów pola danych, • 1 bit kontroli parzystoci (nieparzystoci) lub brak bitu kontroli parzystoci, • 1 bit stopu przy kontroli parzystoci lub 2 bity stopu przy braku kontroli parzystoci. 2.7. Przerwanie transakcji W jednostce master u¿ytkownik ustawia wa¿ny parametr jakim jest maksymalny czas odpowiedzi na ramkê zapytania, po którego przekroczeniu transakcja jest przerywana. Czas ten dobiera siê tak, aby ka¿da jednostka slave pracuj¹ca w systemie (nawet ta najwolniejsza) zd¹¿y³a normalnie odpowiedzieæ na ramkê zapytania. Przekroczenie tego czasu wiadczy zatem o b³êdzie i tak jest traktowane przez jednostkê master. Je¿eli jednostka slave wykryje b³¹d transmisji, nie wykonuje polecenia oraz nie wysy³a ¿adnej odpowiedzi. Spowoduje to przekroczenie czasu oczekiwania na ramkê odpowiedzi i przerwanie transakcji. W mierniku N10 maksymalny czas odpowiedzi na ramkê zapytania wynosi 600 ms. 9 3. OPIS FUNKCJI W mierniku N10 zaimplementowane zosta³y nastêpuj¹ce funkcje protoko³u: kod 03 znaczenie odczyt n-rejestrów 06 zapis pojedynczego rejestru 16 zapis n-rejestrów 17 identyfikacja urz¹dzenia slave 3.1. Odczyt n-rejestrów (kod 03) ¯¹danie: Funkcja umo¿liwia odczyt wartoci zawartych w rejestrach w zaadresowanym urz¹dzeniu slave. Rejestry s¹ 16 lub 32-bitowymi jednostkami, które mog¹ zawieraæ wartoci numeryczne zwi¹zane ze zmiennymi procesowymi itp. Ramka ¿¹dania okrela 16bitowy adres pocz¹tkowy rejestru oraz liczbê rejestrów do odczytania. Znaczenie zawartoci rejestrów o danych adresach mo¿e byæ ró¿ne dla ró¿nych typów urz¹dzeñ. Funkcja nie jest dostêpna w trybie rozg³oszeniowym. Przyk³ad. Odczyt 3 rejestrów zaczynaj¹c od rejestru o adresie 6Bh adres funkcja 11 03 10 adres adres liczba liczba suma rejestru rejestru rejestrów rejestrów kontrolna Hi Lo Hi Lo 00 6B 00 03 7E LRC Odpowied: Dane rejestrów s¹ pakowane pocz¹wszy od najmniejszego adresu: najpierw starszy bajt, potem m³odszy bajt rejestru. Przyk³ad. Ramka odpowiedzi adres fun- liczba wart. w wart. w wart. w wart. w wart. w wart. w suma kcja bajtów rej.107 rej.107 rej.108 rej.108 rej.109 rej.109 konHi Lo Hi Lo Hi Lo trolna 11 03 06 02 2B 00 00 00 64 55 LRC 3.2. Zapis wartoci do rejestru (kod 06) ¯¹danie: Funkcja umo¿liwia modyfikacjê zawartoci rejestru. Jest dostêpna w trybie rozg³oszeniowym. Przyk³ad. adres 11 funkcja 06 adres adres rejestru rejestru Hi Lo 00 87 wartoæ wartoæ suma Hi Lo kontrolna 03 9E C1 LRC Odpowied: Prawid³ow¹ odpowiedzi¹ na ¿¹danie zapisu wartoci do rejestru jest retransmisja komunikatu po wykonaniu operacji. Przyk³ad. adres 11 funkcja 06 adres adres wartoæ wartoæ suma rejestru rejestru Hi Lo kontrolna Hi Lo 00 87 03 9E LRC C1 11 3.3. Zapis do n-rejestrów (kod 16) ¯¹danie: Funkcja dostêpna w trybie rozg³oszeniowym. Umo¿liwia modyfikacje zawartoci rejestrów. Przyk³ad. Zapis dwóch rejestrów pocz¹wszy od rejestru o adresie 136 adres funk- adres adres liczba liczba liczba dane dane dane dane suma cja rej. rej. rej. rej. bajtów Hi Lo Hi Lo konHi Lo Hi Lo trolna 11 10 00 87 00 02 04 00 0A 01 02 45 LRC Odpowied: Prawid³owa odpowied zawiera adres jednostki slave, kod funkcji, adres pocz¹tkowy oraz liczbê zapisanych rejestrów. Przyk³ad. adres funkcja adres rej. Hi adres rej. Lo liczba rej. Hi liczba rej. Lo 11 10 00 87 00 02 suma kontrolna 56 3. 4. Raport identyfikuj¹cy urz¹dzenie (kod 17) ¯¹danie: Funkcja pozwala u¿ytkownikowi uzyskaæ informacje o typie urz¹dzenia, statusie i zale¿nej od tego konfiguracji. Przyk³ad. Adres funkcja 11 11 12 suma kontrolna DE LRC LRC Odpowied: Pole identyfikator urz¹dzenia w ramce odpowiedzi oznacza unikalny identyfikator danej klasy urz¹dzeñ, natomiast pozosta³e pola zawieraj¹ parametry zale¿ne od typu urz¹dzenia. Przyk³ad dla miernika N10. Adres funkcja liczba identyfikator stan urz¹slave 11 bajtów urz¹dzenia 11 6 50 dzenia FF zakres zakres suma napiêciowy pr¹dowy kontrolna 0064 0001 4. KODY B£ÊDÓW Gdy urz¹dzenie master wysy³a ¿¹danie do urz¹dzenia slave, to za wyj¹tkiem komunikatów w trybie rozg³oszeniowym, oczekuje prawid³owej odpowiedzi. Po wys³aniu ¿¹dania jednostki master mo¿e wyst¹piæ jedno z czterech mo¿liwych zdarzeñ: r je¿eli jednostka slave odbiera ¿¹danie bez b³êdu transmisji oraz mo¿e je wykonaæ prawid³owo, wówczas zwraca prawid³ow¹ odpowied, r je¿eli jednostka slave nie odbiera ¿¹dania, ¿adna odpowied nie jest zwracana; w programie urz¹dzenia master zostan¹ spe³nione warunki timeout dla ¿¹dania, r je¿eli jednostka slave odbiera ¿¹danie, ale z b³êdami transmisji (b³¹d parzystoci, sumy kontrolnej LRC lub CRC), ¿adna odpowied nie jest zwracana; w programie urz¹dzenia master zostan¹ spe³nione warunki timeout dla ¿¹dania, r je¿eli jednostka slave odbiera ¿¹danie bez b³êdu transmisji, ale nie mo¿e go wykonaæ prawid³owo (np. je¿eli ¿¹daniem jest odczyt nie istniej¹cego wyjcia bitowego lub rejestru), wówczas zwraca 13 odpowied zawieraj¹c¹ kod b³êdu, informuj¹cy urz¹dzenie master o przyczynie b³êdu. Komunikat z b³êdn¹ odpowiedzi¹ zawiera dwa pola odró¿niaj¹ce go od prawid³owej odpowiedzi: Pole kodu funkcji: W prawid³owej odpowiedzi, jednostka slave retransmituje kod funkcji z komunikatu ¿¹dania na polu kodu funkcji odpowiedzi. Wszystkie kody funkcji maj¹ najbardziej znacz¹cy bit (MSB) równy 0 (wartoci kodów s¹ poni¿ej 80 h). W b³êdnej odpowiedzi urz¹dzenie slave ustawia bit MSB kodu funkcji na 1. To powoduje, ¿e wartoæ kodu funkcji w b³êdnej odpowiedzi jest dok³adnie o 80 h wiêksza ni¿ by³aby w prawid³owej odpowiedzi. Na podstawie kodu funkcji z ustawionym bitem MSB program urz¹dzenia master mo¿e rozpoznaæ b³êdn¹ odpowied i mo¿e sprawdziæ na polu danych kod b³êdu. Pole danych: W prawid³owej odpowiedzi, urz¹dzenie slave mo¿e zwróciæ dane na polu danych (pewne informacje ¿¹dane przez jednostkê master). W b³êdnej odpowiedzi, urz¹dzenie slave zwraca kod b³êdu na polu danych. Okrela on warunki urz¹dzenia slave, które spowodowa³y b³¹d. Poni¿ej przedstawiono przyk³ad ¿¹dania urz¹dzenia master i b³êdn¹ odpowied urz¹dzenia slave. Dane s¹ w postaci heksadecymalnej. Przyk³ad: ¿¹danie adres funkcja slave 0A 14 adres adres liczba zmiennej zmiennej zmiennych 01 liczba suma zmiennych kontrolna Hi Lo Hi Lo 04 A1 00 01 4F LRC Przyk³ad: b³êdna odpowied adres slave 0A funkcja 81 kod b³êdu suma kontrolna 02 73 LRC W tym przyk³adzie urz¹dzenie master adresuje ¿¹danie do jednostki slave o numerze 10 (0Ah). Kod funkcji (01) s³u¿y do operacji odczytu stanu wyjcia bitowego. Ta ramka oznacza wiêc ¿¹danie odczytu statusu jednego wyjcia bitowego o adresie 1245 (04A1h). Je¿eli w urz¹dzeniu slave nie ma wyjcia bitowego o podanym adresie, wówczas urz¹dzenie zwróci b³êdn¹ odpowied z kodem b³êdu nr 02. Oznacza on niedozwolony adres danych w urz¹dzeniu slave. W poni¿szej tabeli przedstawione s¹ mo¿liwe kody b³êdów i ich znaczenie. kod znaczenie 01 niedozwolona funkcja 02 niedozwolony adres danych 03 niedozwolona wartoæ danej 04 uszkodzenie w przy³¹czonym urz¹dzeniu 05 potwierdzenie 06 zajêty, komunikat usuniêty 07 negatywne potwierdzenie 08 b³¹d parzystoci pamiêci 15 5. MAPA REJESTRÓW MIERNIKA N10 W mierniku N10 dane umieszczone s¹ w rejestrach 16 bitowych lub 32 bitowych. Zmienne procesowe i parametry miernika umieszczone s¹ w przestrzeni adresowej rejestrów w sposób zale¿ny od typu wartoci zmiennej. Bity w rejestrze 16 bitowym numerowane s¹ od najm³odszego do najstarszego(b0-b15). Rejestry 32-bitowe zawieraj¹ liczby typu float w standardzie IEEE-745. Mapa rejestrów podzielona zosta³a na nastêpuj¹ce obszary: Zakres adresów Typ wartoci Opis 4000 - 4031 integer (16 bitów) Wartoæ umieszczona jest w jednym rejestrze 16 bitowym. Opis rejestrów zawiera Tabela 1. Rejestry mog¹ byæ odczytywane i zapisywane. 7000 - 7223 float (32 bity) Wartoæ umieszczona jest w dwóch kolejnych rejestrach 16 bitowych. Rejestry zawieraj¹ te same dane co rejestry 32 bitowe z obszaru 7500 - 7611. Przyk³ad: rejestry 7000 i 7001 zawieraj¹ wartoæ z rejestru 7500, rejestry 7002 i 7003 zawieraj¹ wartoæ z rejestru 7501 itd. Rejestry s¹ tylko do odczytu. 7500 - 7779 float (32 bity) Wartoæ umieszczona jest w rejestrze 32 bitowym. Opis rejestrów zawiera Tabela 2. Rejestry s¹ tylko do odczytu. 16 Zawartoæ rejestrów 16-bitowych o adresach od 4000 do 4031. Tabela 1 Lp. adres rejestru symbol zakres jednostka 1 4000 tr_I 1... 20000 Przek³adnia przek³adnika pr¹dowego 2 4001 tr_U 1... 4000 Przek³adnia przek³adnika napiêciowego 3 4002 Ao_n 0... 34 4 4003 Ao_L 80... 120% 5 4004 Ao_0 0,1 Zakres wyjcia ci¹g³ego: 0- 0... 20 mA, 1- 4... 20 mA 6 4005 Po_n 0, 35... 37 Wielkoæ na wyjciu impulsowym, kod z Tabeli 2 7 4006 Po_c 0... 9999 Sta³a wyjcia impulsowego 8 4007 PI_n 0; 38... 40 Wielkoæ na wejciu impulsowym, kod z Tabeli 2 9 4008 PI_c 1... 9999 Sta³a zewnêtrznego licznika energii (wejcia impulsowego) 10 4009 PI_0 1 Kasowanie zewnêtrznego licznika energii (licznika wejcia impulsowego) 11 4010 EnP0 1 Kasowanie licznika energii czynnej 12 4011 Enq0 1 Kasowanie licznika energii biernej 13 4012 EnS0 1 Kasowanie licznika energii pozornej 14 4013 PA_0 1 Kasowanie mocy czynnej 15 min PAV (wart. max i min) 4014 PA_t 1, 2, 3 15 opis Wielkoæ na wyjciu ci¹g³ym, kod z Tabeli 2 Wspó³czynnik przeskalowuj¹cy wyjcie Czas uredniania mocy PAV : 1- 15 min, 2- 30 min, 3- 60 min 17 16 4015 17 4016 18 4017 A1_n 0, 1...34 19 4018 A1on 0...120 [%] Wyjcie dwustanowe 1 - wartoæ za³¹czenia 20 4019 A1oF 0...120 [%] Wyjcie dwustanowe 1 - wartoæ wy³¹czenia 21 4020 A2_n 0, 1...34 22 4021 A2on 0...120 [%] Wyjcie dwustanowe 2 - wartoæ za³¹czenia 23 4022 A2oF 0...120 [%] Wyjcie dwustanowe 2 - wartoæ wy³¹czenia 24 4023 A3_n 0, 1...34 25 4024 A3on 0...120 [%] Wyjcie dwustanowe 3 - wartoæ za³¹czenia 26 4025 A3oF 0...120 [%] Wyjcie dwustanowe 3 - wartoæ wy³¹czenia 27 4026 AL_dt 0...100 sek. Zw³oka w dzia³aniu alarmów 28 4027 Year 1998-2083 rok 29 4028 MonDay data w formacie: miesi¹æ*100+dzieñ 30 4029 HourMin czas w formacie: godzina*100+minuta 31 4030 ALR 0...7 stany wyjæ przekanikowych A1=b0, A2=b1, A3=b2, 1- wyjcie za³¹czone 32 4031 Harm 0,1 W³¹czenie trybu obliczania harmonicznych 18 PA_S 0,1 0000...9999 Synchronizacja uredniania mocy PAV z zegarem rzeczywistym Zmiana kodu dostêpu Wyjcie dwustanowe 1 - wielkoæ, kod z Tabeli2 Wyjcie dwustanowe 2 - wielkoæ, kod z Tabeli 2 Wyjcie dwustanowe 3 - wielkoæ, kod z Tabeli 2 Zawartoæ rejestrów 32-bitowych o adresach od 7500 do 7779. Tabela 2 Lp kod adres symbol jednostka rejestru nazwa wielkoci 1 00 bez wielkoci - wywietlacz wygaszony 2 01 7500 U1 V 3 02 7501 I1 A Pr¹d fazy L1 4 03 7502 P1 W Moc czynna fazy L1 Napiêcie fazy L1 5 04 7503 Q1 VAr Moc bierna fazy L1 6 05 7504 S1 VA Moc pozorna fazy L1 7 06 7505 Pf1 Pf Wspó³czynnik mocy czynnej fazy L1 8 07 7506 tϕ1 tϕ Stosunek mocy biernej do czynnej fazy L1 Napiêcie fazy L2 9 08 7507 U2 V 10 09 7508 I2 A Pr¹d fazy L2 11 10 7509 P2 W Moc czynna fazy L2 12 11 7510 Q2 VAr Moc bierna fazy L2 13 12 7511 S2 VA Moc pozorna fazy L2 14 13 7512 Pf2 Pf Wspó³czynnik mocy czynnej fazy L2 15 14 7513 tϕ2 tϕ Stosunek mocy biernej do czynnej fazy L2 16 15 7514 U3 V Napiêcie fazy L3 17 16 7515 I3 A Pr¹d fazy L3 18 17 7516 P3 W Moc czynna fazy L3 19 18 7517 Q3 VAr Moc bierna fazy L3 20 19 7518 S3 VA Moc pozorna fazy L3 21 20 7519 Pf3 Pf Wspó³czynnik mocy czynnej fazy L3 22 21 7520 tϕ3 tϕ Stosunek mocy biernej do czynnej fazy L3 23 22 7521 Us V Napiêcie 3-fazowe rednie 24 23 7522 Is A Pr¹d 3-fazowy redni 19 25 24 7523 P W Moc czynna 3-fazowa 26 25 7524 Q VAr Moc bierna 3-fazowa 27 26 7525 S VA Moc pozorna 3-fazowa 28 27 7526 Pf Pf Wspó³czynnik mocy czynnej 29 28 7527 tϕ tϕ Stosunek mocy biernej do czynnej 3-fazowy redni, tϕ= Q/ P. 30 29 7528 f Hz Czêstotliwoæ 31 30 7529 U12 V Napiêcie miêdzyfazowe L1-L2 32 31 7530 U23 V Napiêcie miêdzyfazowe L2-L3 33 32 7531 U31 V Napiêcie miêdzyfazowe L3-L1 34 33 7532 U123 V Napiêcie miêdzyfazowe rednie 35 34 7533 PAV W Moc czynna rednia np.15 min. 36 35 7534 EnP Wh Energia czynna 3-fazowa 37 36 7535 Enb VArh Energia bierna 3-fazowa 38 37 7536 EnS VAh Energia pozorna 3-fazowa 39 38 7537 EnPz Wh Energia czynna z licznika zewnêtrznego 40 38 7538 Enbz VArh Energia bierna z licznika zewnêtrznego 41 40 7539 EnSz VA 42 41 7540 Data - dzieñ, miesi¹c 43 42 7541 Data - rok 44 43 7542 Czas - godziny, minuty 45 44 7543 Energia pozorna z licznika zewnêtrznego Czas - sekundy 46 7544 , 7545 U1 V Napiêcie fazy L1 - min, max 47 7546, 7547 U2 V Napiêcie fazy L2 - min, max 48 7548, 7549 U3 V Napiêcie fazy L3 - min, max 49 7550, 7551 I1 A Pr¹d fazy L1 - min, max 50 7552, 7553 I2 A Pr¹d fazy L2 - min, max 51 7554, 7555 I3 A Pr¹d fazy L3 - min, max 52 7556, 7557 P1 W Moc czynna fazy L1 - min, max 20 53 7558, 7559 P2 W 54 7560, 7561 P3 W Moc czynna fazy L2 - min, max Moc czynna fazy L3 - min, max 55 7562, 7563 S1 VA Moc pozorna fazy L1 - min, max 56 7564, 7565 S2 VA Moc pozorna fazy L2 - min, max 57 7566, 7567 S3 VA Moc pozorna fazy L3 - min, max 58 7568, 7569 Q1 VAr Moc bierna fazy L1 - min, max 59 7570, 7571 Q2 VAr Moc bierna fazy L2 - min, max 60 7572, 7573 Q3 VAr Moc bierna fazy L3 - min, max 61 7574, 7575 Pf1 Pf Wspó³czynnik mocy czynnej fazy L1 - min, max 62 7576, 7577 Pf2 Pf Wspó³czynnik mocy czynnej fazy L2 - min, max 63 7578, 7579 Pf3 Pf Wspó³czynnik mocy czynnej fazy L3 - min, max 64 7580, 7581 tϕ1 tϕ1 = Q1/ P1 fazy L1 - min, max 65 7582, 7583 tϕ2 tϕ2 = Q2/ P2 fazy L2 - min, max 66 7584, 7585 tϕ3 67 7586, 7587 Us 68 7588, 7589 69 7590, 7591 70 tϕ3 = Q2/ P3 fazy L3 - min, max V Napiêcie 3-fazowe rednie - min, max Is A Pr¹d 3-fazowy redni - min, max P W Moc czynna 3-fazowa - min, max 7592, 7593 Q VAr Moc bierna 3-fazowa - min, max 71 7594, 7595 S VA Moc pozorna 3-fazowa - min, max 72 7596, 7597 Pf Pf Wspó³czynnik mocy czynnej - min, max 73 7598, 7599 tϕ tϕ Wspó³czynnik mocy biernej do czynnej 3-fazowy redni - min, max 74 7600, 7601 f Hz Czêstotliwoæ - min, max 75 7602, 7603 U12 V Napiêcie miêdzyfazowe L1-L2 - min, max 76 7604, 7605 U23 V Napiêcie miêdzyfazowe L2-L3 - min, max 77 7606, 7607 U31 V Napiêcie miêdzyfazowe L3-L1 - min, max 21 78 7608, 7609 U123 V Napiêcie miêdzyfazowe rednie min, max 79 7610, 7611 PAV W Moc czynna rednia np.15 min. min, max 80 45 7612 THDU1 % Wspó³czynnik zawartoci harmonicznych napiêcia fazy L1 81 46 7613 THDU2 % Wspó³czynnik zawartoci harmonicznych napiêcia fazy L2 82 47 7614 THDU3 % Wspó³czynnik zawartoci harmonicznych napiêcia fazy L3 83 48 7615 THDI1 % Wspó³czynnik zawartoci harmonicznych pr¹du fazy L1 84 49 7616 THDI2 % Wspó³czynnik zawartoci harmonicznych pr¹du fazy L2 85 50 7617 THDI3 % Wspó³czynnik zawartoci harmonicznych pr¹du fazy L3 86 7618, 7619 THDU1 % Wspó³czynnik zawartoci harmonicznych napiêcia fazy L1 - min, max 87 7620, 7621 THDU2 % Wspó³czynnik zawartoci harmonicznych napiêcia fazy L2 - min, max 88 7622, 7623 THDU3 % Wspó³czynnik zawartoci harmonicznych napiêcia fazy L3 - min, max 89 7624, 7625 THDI1 % Wspó³czynnik zawartoci harmonicznych pr¹du fazy L1 - min, max 90 7626, 7627 THDI2 % Wspó³czynnik zawartoci harmonicznych pr¹du fazy L2 - min, max 91 7628, 7629 THDI3 % Wspó³czynnik zawartoci harmonicznych pr¹du fazy L3 - min, max 92 7630 HarU1[1] % 1 Harmoniczna napiêcia fazy L1 93 7631 HarU1[2] % 2 Harmoniczna napiêcia fazy L1 22 94 7632 HarU1[3] % 3 Harmoniczna napiêcia fazy L1 95 7633 HarU1[4] % 4 Harmoniczna napiêcia fazy L1 96 7634 HarU1[5] % 5 Harmoniczna napiêcia fazy L1 97 7635 HarU1[6] % 6 Harmoniczna napiêcia fazy L1 98 7636 HarU1[7] % 7 Harmoniczna napiêcia fazy L1 99 7637 HarU1[8] % 8 Harmoniczna napiêcia fazy L1 100 7638 HarU1[9] % 9 Harmoniczna napiêcia fazy L1 101 7639 HarU1[10] % 10 Harmoniczna napiêcia fazy L1 11 Harmoniczna napiêcia fazy L1 102 7640 HarU1[11] % 103 7641 HarU1[12] % 12 Harmoniczna napiêcia fazy L1 104 7642 HarU1[13] % 13 Harmoniczna napiêcia fazy L1 105 7643 HarU1[14] % 14 Harmoniczna napiêcia fazy L1 106 7644 HarU1[15] % 15 Harmoniczna napiêcia fazy L1 107 7645 HarU1[16] % 16 Harmoniczna napiêcia fazy L1 108 7646 HarU1[17] % 17 Harmoniczna napiêcia fazy L1 109 7647 HarU1[18] % 18 Harmoniczna napiêcia fazy L1 110 7648 HarU1[19] % 19 Harmoniczna napiêcia fazy L1 111 7649 HarU1[20] % 20 Harmoniczna napiêcia fazy L1 112 7650 HarU1[21] % 21 Harmoniczna napiêcia fazy L1 113 7651 HarU1[22] % 22 Harmoniczna napiêcia fazy L1 114 7652 HarU1[23] % 23 Harmoniczna napiêcia fazy L1 115 7653 HarU1[24] % 24 Harmoniczna napiêcia fazy L1 116 7654 HarU1[25] % 25 Harmoniczna napiêcia fazy L1 117 7655 HarU2[1] % 1 Harmoniczna napiêcia fazy L2 118 7656 HarU2[2] % 2 Harmoniczna napiêcia fazy L2 119 7657 HarU2[3] % 3 Harmoniczna napiêcia fazy L2 120 7658 HarU2[4] % 4 Harmoniczna napiêcia fazy L2 121 7659 HarU2[5] % 5 Harmoniczna napiêcia fazy L2 122 7660 HarU2[6] % 6 Harmoniczna napiêcia fazy L2 123 7661 HarU2[7] % 7 Harmoniczna napiêcia fazy L2 124 7662 HarU2[8] % 8 Harmoniczna napiêcia fazy L2 23 125 7663 HarU2[9] % 9 Harmoniczna napiêcia fazy L2 126 7664 HarU2[10] % 10 Harmoniczna napiêcia fazy L2 11 Harmoniczna napiêcia fazy L2 127 7665 HarU2[11] % 128 7666 HarU2[12] % 12 Harmoniczna napiêcia fazy L2 129 7667 HarU2[13] % 13 Harmoniczna napiêcia fazy L2 130 7668 HarU2[14] % 14 Harmoniczna napiêcia fazy L2 131 7669 HarU2[15] % 15 Harmoniczna napiêcia fazy L2 132 7670 HarU2[16] % 16 Harmoniczna napiêcia fazy L2 133 7671 HarU2[17] % 17 Harmoniczna napiêcia fazy L2 134 7672 HarU2[18] % 18 Harmoniczna napiêcia fazy L2 135 7673 HarU2[19] % 19 Harmoniczna napiêcia fazy L2 136 7674 HarU2[20] % 20 Harmoniczna napiêcia fazy L2 137 7675 HarU2[21] % 21 Harmoniczna napiêcia fazy L2 138 7676 HarU2[22] % 22 Harmoniczna napiêcia fazy L2 139 7677 HarU2[23] % 23 Harmoniczna napiêcia fazy L2 140 7678 HarU2[24] % 24 Harmoniczna napiêcia fazy L2 141 7679 HarU2[25] % 25 Harmoniczna napiêcia fazy L2 142 7680 HarU3[1] % 1 Harmoniczna napiêcia fazy L3 143 7681 HarU3[2] % 2 Harmoniczna napiêcia fazy L3 144 7682 HarU3[3] % 3 Harmoniczna napiêcia fazy L3 145 7683 HarU3[4] % 4 Harmoniczna napiêcia fazy L3 146 7684 HarU3[5] % 5 Harmoniczna napiêcia fazy L3 147 7685 HarU3[6] % 6 Harmoniczna napiêcia fazy L3 148 7686 HarU3[7] % 7 Harmoniczna napiêcia fazy L3 149 7687 HarU3[8] % 8 Harmoniczna napiêcia fazy L3 150 7688 HarU3[9] % 9 Harmoniczna napiêcia fazy L3 151 7689 HarU3[10] % 10 Harmoniczna napiêcia fazy L3 11 Harmoniczna napiêcia fazy L3 152 7690 HarU3[11] % 153 7691 HarU3[12] % 12 Harmoniczna napiêcia fazy L3 154 7692 HarU3[13] % 13 Harmoniczna napiêcia fazy L3 155 7693 HarU3[14] % 14 Harmoniczna napiêcia fazy L3 24 156 7694 HarU3[15] % 15 Harmoniczna napiêcia fazy L3 157 7695 HarU3[16] % 16 Harmoniczna napiêcia fazy L3 158 7696 HarU3[17] % 17 Harmoniczna napiêcia fazy L3 159 7697 HarU3[18] % 18 Harmoniczna napiêcia fazy L3 160 7698 HarU3[19] % 19 Harmoniczna napiêcia fazy L3 161 7699 HarU3[20] % 20 Harmoniczna napiêcia fazy L3 162 7700 HarU3[21] % 21 Harmoniczna napiêcia fazy L3 163 7701 HarU3[22] % 22 Harmoniczna napiêcia fazy L3 164 7702 HarU3[23] % 23 Harmoniczna napiêcia fazy L3 165 7703 HarU3[24] % 24 Harmoniczna napiêcia fazy L3 166 7704 HarU3[25] % 25 Harmoniczna napiêcia fazy L3 167 7705 HarI1[1] % 1 Harmoniczna pr¹du fazy L1 168 7706 HarI1[2] % 2 Harmoniczna pr¹du fazy L1 169 7707 HarI1[3] % 3 Harmoniczna pr¹du fazy L1 170 7708 HarI1[4] % 4 Harmoniczna pr¹du fazy L1 171 7709 HarI1[5] % 5 Harmoniczna pr¹du fazy L1 172 7710 HarI1[6] % 6 Harmoniczna pr¹du fazy L1 173 7711 HarI1[7] % 7 Harmoniczna pr¹du fazy L1 174 7712 HarI1[8] % 8 Harmoniczna pr¹du fazy L1 175 7713 HarI1[9] % 9 Harmoniczna pr¹du fazy L1 176 7714 HarI1[10] % 10 Harmoniczna pr¹du fazy L1 177 7715 HarI1[11] % 11 Harmoniczna pr¹du fazy L1 178 7716 HarI1[12] % 12 Harmoniczna pr¹du fazy L1 179 7717 HarI1[13] % 13 Harmoniczna pr¹du fazy L1 180 7718 HarI1[14] % 14 Harmoniczna pr¹du fazy L1 181 7719 HarI1[15] % 15 Harmoniczna pr¹du fazy L1 182 7720 HarI1[16] % 16 Harmoniczna pr¹du fazy L1 183 7721 HarI1[17] % 17 Harmoniczna pr¹du fazy L1 184 7722 HarI1[18] % 18 Harmoniczna pr¹du fazy L1 185 7723 HarI1[19] % 19 Harmoniczna pr¹du fazy L1 186 7724 HarI1[20] % 20 Harmoniczna pr¹du fazy L1 25 187 7725 HarI1[21] % 21 Harmoniczna pr¹du fazy L1 188 7726 HarI1[22] % 22 Harmoniczna pr¹du fazy L1 189 7727 HarI1[23] % 23 Harmoniczna pr¹du fazy L1 190 7728 HarI1[24] % 24 Harmoniczna pr¹du fazy L1 191 7729 HarI1[25] % 25 Harmoniczna pr¹du fazy L1 192 7730 HarI2[1] % 1 Harmoniczna pr¹du fazy L2 193 7731 HarI2[2] % 2 Harmoniczna pr¹du fazy L2 194 7732 HarI2[3] % 3 Harmoniczna pr¹du fazy L2 195 7733 HarI2[4] % 4 Harmoniczna pr¹du fazy L2 196 7734 HarI2[5] % 5 Harmoniczna pr¹du fazy L2 197 7735 HarI2[6] % 6 Harmoniczna pr¹du fazy L2 198 7736 HarI2[7] % 7 Harmoniczna pr¹du fazy L2 199 7737 HarI2[8] % 8 Harmoniczna pr¹du fazy L2 200 7738 HarI2[9] % 9 Harmoniczna pr¹du fazy L2 201 7739 HarI2[10] % 10 Harmoniczna pr¹du fazy L2 202 7740 HarI2[11] % 11 Harmoniczna pr¹du fazy L2 203 7741 HarI2[12] % 12 Harmoniczna pr¹du fazy L2 204 7742 HarI2[13] % 13 Harmoniczna pr¹du fazy L2 205 7743 HarI2[14] % 14 Harmoniczna pr¹du fazy L2 206 7744 HarI2[15] % 15 Harmoniczna pr¹du fazy L2 207 7745 HarI2[16] % 16 Harmoniczna pr¹du fazy L2 208 7746 HarI2[17] % 17 Harmoniczna pr¹du fazy L2 209 7747 HarI2[18] % 18 Harmoniczna pr¹du fazy L2 210 7748 HarI2[19] % 19 Harmoniczna pr¹du fazy L2 211 7749 HarI2[20] % 20 Harmoniczna pr¹du fazy L2 212 7750 HarI2[21] % 21 Harmoniczna pr¹du fazy L2 213 7751 HarI2[22] % 22 Harmoniczna pr¹du fazy L2 214 7752 HarI2[23] % 23 Harmoniczna pr¹du fazy L2 215 7753 HarI2[24] % 24 Harmoniczna pr¹du fazy L2 216 7754 HarI2[25] % 25 Harmoniczna pr¹du fazy L2 217 7755 HarI3[1] % 1 Harmoniczna pr¹du fazy L3 26 218 7756 HarI3[2] % 2 Harmoniczna pr¹du fazy L3 219 7757 HarI3[3] % 3 Harmoniczna pr¹du fazy L3 220 7758 HarI3[4] % 4 Harmoniczna pr¹du fazy L3 221 7759 HarI3[5] % 5 Harmoniczna pr¹du fazy L3 222 7760 HarI3[6] % 6 Harmoniczna pr¹du fazy L3 223 7761 HarI3[7] % 7 Harmoniczna pr¹du fazy L3 224 7762 HarI3[8] % 8 Harmoniczna pr¹du fazy L3 225 7763 HarI3[9] % 9 Harmoniczna pr¹du fazy L3 226 7764 HarI3[10] % 10 Harmoniczna pr¹du fazy L3 227 7765 HarI3[11] % 11 Harmoniczna pr¹du fazy L3 228 7766 HarI3[12] % 12 Harmoniczna pr¹du fazy L3 229 7767 HarI3[13] % 13 Harmoniczna pr¹du fazy L3 230 7768 HarI3[14] % 14 Harmoniczna pr¹du fazy L3 231 7769 HarI3[15] % 15 Harmoniczna pr¹du fazy L3 232 7770 HarI3[16] % 16 Harmoniczna pr¹du fazy L3 233 7771 HarI3[17] % 17 Harmoniczna pr¹du fazy L3 234 7772 HarI3[18] % 18 Harmoniczna pr¹du fazy L3 235 7773 HarI3[19] % 19 Harmoniczna pr¹du fazy L3 236 7774 HarI3[20] % 20 Harmoniczna pr¹du fazy L3 237 7775 HarI3[21] % 21 Harmoniczna pr¹du fazy L3 238 7776 HarI3[22] % 22 Harmoniczna pr¹du fazy L3 239 7777 HarI3[23] % 23 Harmoniczna pr¹du fazy L3 240 7778 HarI3[24] % 24 Harmoniczna pr¹du fazy L3 241 7779 HarI3[25] % 25 Harmoniczna pr¹du fazy L3 27 DODATEK A OBLICZANIE SUMY KONTROLNEJ W dodatku tym przedstawiono przyk³ady funkcji w jêzyku C, obliczaj¹ce sumê kontroln¹ LRC dla trybu ASCII oraz CRC dla trybu RTU. Funkcja do obliczenia LRC ma dwa argumenty: unsigned char *outMsg; Wskanik do bufora komunikacyjnego, zawieraj¹cego dane binarne, z których nale¿y obliczyæ LRC unsigned short usDataLen; Liczba bajtów w buforze komunikacyjnym Funkcja zwraca LRC typu unsigned char. static unsigned char LRC(outMsg, usDataLen) unsigned char *outMsg; /* bufor do obliczenia LRC */ unsigned short usDataLen; /* liczba bajtów w buforze */ { unsigned char uchLRC = 0; /* inicjalizacja LRC */ while (usDataLen- -) uchLRC += *outMsg++; /* dodaj bajt bufora bez przeniesienia */ return ((unsigned char)(-(char uchLRC))); /* zwraca sumê w kodzie uzupe³nienia do dwóch */ } Poni¿ej przedstawiono przyk³ad funkcji w jêzyku C obliczaj¹cej sumê CRC. Wszystkie mo¿liwe wartoci sumy CRC s¹ umieszczone w dwóch tablicach. Pierwsza tablica zawiera starszy bajt wszystkich z 256 mo¿liwych wartoci 16-bitowego pola CRC, natomiast druga tablica m³odszy bajt. Wyznaczenie sumy CRC poprzez indeksowanie tablic jest o wiele 28 szybsze ni¿ obliczenie nowej wartoci CRC dla ka¿dego znaku z bufora komunikacyjnego. Uwaga: Poni¿sza funkcja przestawia bajty sumy CRC starszy/m³odszy, tak ¿e wartoæ CRC zwracana przez funkcjê mo¿e byæ bezporednio umieszczona w buforze komunikacyjnym. Funkcja do obliczenia CRC ma dwa argumenty: unsigned char *puchMsg; unsigned short usDataLen; Wskanik do bufora komunikacyjnego, zawieraj¹cego dane binarne, z których nale¿y obliczyæ CRC Liczba bajtów w buforze komunikacyjnym Funkcja zwraca CRC typu unsigned short. unsigned short CRC16(puchMsg, usDataLen) unsigned char *puchMsg; /* bufor do obliczenia CRC */ unsigned short usDataLen; /* liczba bajtów w buforze */ { unsigned char uchCRChi = 0xFF; /* inicjalizacja starszego bajtu CRC */ unsigned char uchCRClo = 0xFF; /* inicjalizacja m³odszego bajtu CRC */ while (usDataLen- -) { uIndex = uchCRChi ^ *puchMsg++; /* obliczenie CRC */ uchCRChi = uchCRClo ^ crc_hi[uIndex]; uchCRClo = crc_lo[uIndex]; } return(uchCRChi<<8 | uchCRClo); } 29 30 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 }; //tablica starszego bajtu CRC const unsigned char crc_hi[ ]={ 31 0x00, 0x04, 0x08, 0x1D, 0x11, 0x37, 0x3B, 0x2E, 0x22, 0x62, 0x6E, 0x7B, 0x77, 0x51, 0x5D, 0x48, 0x44, 0x40 }; 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, //tablica mlodszego bajtu CRC const unsigned char crc_lo[ ]={ 32