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 TREŒCI 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 wartoœci 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: l adres miernika - 1...247 l prêdkoœæ transmisji - 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. 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: l master slave: adres odbiorcy, kod reprezentuj¹cy ¹dane polecenie, dane, s³owo kontrolne zabezpieczaj¹ce przesy³an¹ wiadomoœæ, l slave master: 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 wiadomoœci, 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 wiadomoœci s¹ zorganizowane w ramki o okreœlonym 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 wiadomoœci 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 Adres Funkcja Dane Kontrola Znacznik pocz¹tku LRC koñca 1 znak «:» 2 znaki 2 znaki n znaków 2 znaki 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 wiadomoœci 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 szybkoœci bodowej przyjêtej na ³¹czu. Format ramki przedstawiono poni ej: Znacznik Adres Funkcja Dane Kontrola Znacznik pocz¹tku CRC koñca T1-T2-T3-T4 8 bitów 8 bitów n x 8 bitów 16 bitów T1-T2-T3-T4 5
Znaczniki pocz¹tku i koñca zaznaczono symbolicznie jako odstêp równy czterem d³ugoœciom znaku (jednostki informacyjnej). S³owo kontrolne jest 16 bitowe i powstaje jako rezultat obliczenia CRC (Cyclical Redundancy Check) na zawartoœci 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, okreœlaj¹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 okreœlonego 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 okreœlona 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 zawartoœci czêœci informacyjnej ramki (bez znaczników pocz¹tku i koñca). Znaki LRC s¹ do³¹czane do wiadomoœci jako ostatnie pole ramki, bezpoœrednio 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 zawartoœci 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 jednoczeœnie znakiem koñcz¹cym ramkê. 2. 4. Wyznaczenie LRC Obliczanie LRC polega na sumowaniu kolejnych 8-bitowych bajtów wiadomoœci, 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 zawartoœci 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 wiadomoœci. Kontynuacja tego procesu a do przetworzenia wszystkich bajtów wiadomoœci. 7. Zawartoœæ CRC po wykonaniu wymienionych operacji jest poszukiwan¹ wartoœci¹ 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 parzystoœci (nieparzystoœci) lub brak bitu kontroli parzystoœci, 1 bit stopu przy kontroli parzystoœci lub 2 bity stopu przy braku kontroli parzystoœci. Organizacja jednostki informacyjnej w trybie RTU: 1 bit startu, 8 bitów pola danych, 1 bit kontroli parzystoœci (nieparzystoœci) lub brak bitu kontroli parzystoœci, 1 bit stopu przy kontroli parzystoœci lub 2 bity stopu przy braku kontroli parzystoœci. 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 znaczenie 03 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 wartoœci zawartych w rejestrach w zaadresowanym urz¹dzeniu slave. Rejestry s¹ 16 lub 32-bitowymi jednostkami, które mog¹ zawieraæ wartoœci numeryczne zwi¹zane ze zmiennymi procesowymi itp. Ramka ¹dania okreœla 16- bitowy adres pocz¹tkowy rejestru oraz liczbê rejestrów do odczytania. Znaczenie zawartoœci 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 adres adres liczba liczba suma rejestru rejestru rejestrów rejestrów kontrolna Hi Lo Hi Lo 11 03 00 6B 00 03 7E LRC 10
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 kon- Hi Lo Hi Lo Hi Lo trolna 11 03 06 02 2B 00 00 00 64 55 LRC 3.2. Zapis wartoœci do rejestru (kod 06) ¹danie: Funkcja umo liwia modyfikacjê zawartoœci rejestru. Jest dostêpna w trybie rozg³oszeniowym. Przyk³ad. adres funkcja adres adres wartoœæ wartoœæ suma rejestru rejestru Hi Lo kontrolna Hi Lo 11 06 00 87 03 9E C1 LRC OdpowiedŸ: Prawid³ow¹ odpowiedzi¹ na ¹danie zapisu wartoœci do rejestru jest retransmisja komunikatu po wykonaniu operacji. Przyk³ad. adres funkcja adres adres wartoœæ wartoœæ suma rejestru rejestru Hi Lo kontrolna Hi Lo 11 06 00 87 03 9E C1 LRC 11
3.3. Zapis do n-rejestrów (kod 16) ¹danie: Funkcja dostêpna w trybie rozg³oszeniowym. Umo liwia modyfikacje zawartoœci 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 kon- Hi 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 adres liczba liczba suma rej. rej. rej. rej. kontrolna Hi Lo Hi Lo 11 10 00 87 00 02 56 LRC 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 suma kontrolna 11 11 DE LRC 12
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¹- zakres zakres suma slave bajtów urz¹dzenia dzenia napiêciowy pr¹dowy kontrolna 11 11 6 50 FF 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 parzystoœci, 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 wyjœcia 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 (wartoœci 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. Okreœla 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 adres adres liczba liczba suma slave zmiennej zmiennej zmiennych zmiennych kontrolna Hi Lo Hi Lo 0A 01 04 A1 00 01 4F LRC 14
Przyk³ad: b³êdna odpowiedÿ adres slave funkcja kod b³êdu suma kontrolna 0A 81 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 wyjœcia bitowego. Ta ramka oznacza wiêc ¹danie odczytu statusu jednego wyjœcia bitowego o adresie 1245 (04A1h). Je eli w urz¹dzeniu slave nie ma wyjœcia 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 parzystoœci 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 wartoœci 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 wartoœci 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 symbol zakres opis rejestru 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 Wielkoœæ na wyjœciu ci¹g³ym, kod z Tabeli 2 4 4003 Ao_L 80... 120% Wspó³czynnik przeskalowuj¹cy wyjœcie 5 4004 Ao_0 0,1 Zakres wyjœcia ci¹g³ego: 0-0... 20 ma, 1-4... 20 ma 6 4005 Po_n 0, 35... 37 Wielkoœæ na wyjœciu impulsowym, kod z Tabeli 2 7 4006 Po_c 0... 9999 Sta³a wyjœcia impulsowego 8 4007 PI_n 0; 38... 40 Wielkoœæ na wejœciu impulsowym, kod z Tabeli 2 9 4008 PI_c 1... 9999 Sta³a zewnêtrznego licznika energii (wejœcia impulsowego) 10 4009 PI_0 1 Kasowanie zewnêtrznego licznika energii (licznika wejœcia 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 P AV (wart. max i min) 15 4014 PA_t 1, 2, 3 Czas uœredniania mocy PAV : 1-15 min, 2-30 min, 3-60 min 17
16 4015 PA_S 0,1 Synchronizacja uœredniania mocy PAV z zegarem rzeczywistym 17 4016 0000...9999 Zmiana kodu dostêpu 18 4017 A1_n 0, 1...34 Wyjœcie dwustanowe 1 - wielkoœæ, kod z Tabeli2 19 4018 A1on 0...120 [%] Wyjœcie dwustanowe 1 - wartoœæ za³¹czenia 20 4019 A1oF 0...120 [%] Wyjœcie dwustanowe 1 - wartoœæ wy³¹czenia 21 4020 A2_n 0, 1...34 Wyjœcie dwustanowe 2 - wielkoœæ, kod z Tabeli 2 22 4021 A2on 0...120 [%] Wyjœcie dwustanowe 2 - wartoœæ za³¹czenia 23 4022 A2oF 0...120 [%] Wyjœcie dwustanowe 2 - wartoœæ wy³¹czenia 24 4023 A3_n 0, 1...34 Wyjœcie dwustanowe 3 - wielkoœæ, kod z Tabeli 2 25 4024 A3on 0...120 [%] Wyjœcie dwustanowe 3 - wartoœæ za³¹czenia 26 4025 A3oF 0...120 [%] Wyjœcie 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œæ przekaÿnikowych A1=b0, A2=b1, A3=b2, 1- wyjœcie za³¹czone 32 4031 Harm 0,1 W³¹czenie trybu obliczania harmonicznych 18
Zawartoœæ rejestrów 32-bitowych o adresach od 7500 do 7779. Tabela 2 Lp kod adres symbol jednostka nazwa wielkoœci rejestru 1 00 bez wielkoœci - wyœwietlacz wygaszony 2 01 7500 U1 V Napiêcie fazy L1 3 02 7501 I 1 A Pr¹d fazy L1 4 03 7502 P 1 W Moc czynna fazy L1 5 04 7503 Q 1 VAr Moc bierna fazy L1 6 05 7504 S 1 VA Moc pozorna fazy L1 7 06 7505 Pf 1 Pf Wspó³czynnik mocy czynnej fazy L1 8 07 7506 tϕ 1 tϕ Stosunek mocy biernej do czynnej fazy L1 9 08 7507 U 2 V Napiêcie fazy L2 10 09 7508 I 2 A Pr¹d fazy L2 11 10 7509 P 2 W Moc czynna fazy L2 12 11 7510 Q 2 VAr Moc bierna fazy L2 13 12 7511 S 2 VA Moc pozorna fazy L2 14 13 7512 Pf 2 Pf Wspó³czynnik mocy czynnej fazy L2 15 14 7513 tϕ 2 tϕ Stosunek mocy biernej do czynnej fazy L2 16 15 7514 U 3 V Napiêcie fazy L3 17 16 7515 I 3 A Pr¹d fazy L3 18 17 7516 P 3 W Moc czynna fazy L3 19 18 7517 Q 3 VAr Moc bierna fazy L3 20 19 7518 S 3 VA Moc pozorna fazy L3 21 20 7519 Pf 3 Pf Wspó³czynnik mocy czynnej fazy L3 22 21 7520 tϕ 3 tϕ Stosunek mocy biernej do czynnej fazy L3 23 22 7521 U s V Napiêcie 3-fazowe œrednie 24 23 7522 I s 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 U 12 V Napiêcie miêdzyfazowe L1-L2 32 31 7530 U 23 V Napiêcie miêdzyfazowe L2-L3 33 32 7531 U 31 V Napiêcie miêdzyfazowe L3-L1 34 33 7532 U 123 V Napiêcie miêdzyfazowe œrednie 35 34 7533 P AV 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 EnP z Wh Energia czynna z licznika zewnêtrznego 40 38 7538 Enb z VArh Energia bierna z licznika zewnêtrznego 41 40 7539 EnS z VA Energia pozorna z licznika zewnêtrznego 42 41 7540 Data - dzieñ, miesi¹c 43 42 7541 Data - rok 44 43 7542 Czas - godziny, minuty 45 44 7543 Czas - sekundy 46 7544, 7545 U 1 V Napiêcie fazy L1 - min, max 47 7546, 7547 U 2 V Napiêcie fazy L2 - min, max 48 7548, 7549 U 3 V Napiêcie fazy L3 - min, max 49 7550, 7551 I 1 A Pr¹d fazy L1 - min, max 50 7552, 7553 I 2 A Pr¹d fazy L2 - min, max 51 7554, 7555 I 3 A Pr¹d fazy L3 - min, max 52 7556, 7557 P 1 W Moc czynna fazy L1 - min, max 20
53 7558, 7559 P 2 W Moc czynna fazy L2 - min, max 54 7560, 7561 P 3 W Moc czynna fazy L3 - min, max 55 7562, 7563 S 1 VA Moc pozorna fazy L1 - min, max 56 7564, 7565 S 2 VA Moc pozorna fazy L2 - min, max 57 7566, 7567 S 3 VA Moc pozorna fazy L3 - min, max 58 7568, 7569 Q 1 VAr Moc bierna fazy L1 - min, max 59 7570, 7571 Q 2 VAr Moc bierna fazy L2 - min, max 60 7572, 7573 Q 3 VAr Moc bierna fazy L3 - min, max 61 7574, 7575 Pf 1 Pf Wspó³czynnik mocy czynnej fazy L1 - min, max 62 7576, 7577 Pf 2 Pf Wspó³czynnik mocy czynnej fazy L2 - min, max 63 7578, 7579 Pf 3 Pf Wspó³czynnik mocy czynnej fazy L3 - min, max 64 7580, 7581 tϕ 1 tϕ1 = Q 1 / P1 fazy L 1 - min, max 65 7582, 7583 tϕ 2 tϕ2 = Q 2 / P2 fazy L 2 - min, max 66 7584, 7585 tϕ 3 tϕ3 = Q 2 / P3 fazy L 3 - min, max 67 7586, 7587 U s V Napiêcie 3-fazowe œrednie - min, max 68 7588, 7589 I s A Pr¹d 3-fazowy œredni - min, max 69 7590, 7591 P W Moc czynna 3-fazowa - min, max 70 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 U 12 V Napiêcie miêdzyfazowe L1-L2 - min, max 76 7604, 7605 U 23 V Napiêcie miêdzyfazowe L2-L3 - min, max 77 7606, 7607 U 31 V Napiêcie miêdzyfazowe L3-L1 - min, max 21
78 7608, 7609 U 123 V Napiêcie miêdzyfazowe œrednie - min, max 79 7610, 7611 P AV W Moc czynna œrednia np.15 min. - min, max 80 45 7612 THD U1 % Wspó³czynnik zawartoœci harmonicznych napiêcia fazy L1 81 46 7613 THD U2 % Wspó³czynnik zawartoœci harmonicznych napiêcia fazy L2 82 47 7614 THD U3 % Wspó³czynnik zawartoœci harmonicznych napiêcia fazy L3 83 48 7615 THD I1 % Wspó³czynnik zawartoœci harmonicznych pr¹du fazy L1 84 49 7616 THD I2 % Wspó³czynnik zawartoœci harmonicznych pr¹du fazy L2 85 50 7617 THD I3 % Wspó³czynnik zawartoœci harmonicznych pr¹du fazy L3 86 7618, 7619 THD U1 % Wspó³czynnik zawartoœci harmonicznych napiêcia fazy L1 - min, max 87 7620, 7621 THD U2 % Wspó³czynnik zawartoœci harmonicznych napiêcia fazy L2 - min, max 88 7622, 7623 THD U3 % Wspó³czynnik zawartoœci harmonicznych napiêcia fazy L3 - min, max 89 7624, 7625 THD I1 % Wspó³czynnik zawartoœci harmonicznych pr¹du fazy L1 - min, max 90 7626, 7627 THD I2 % Wspó³czynnik zawartoœci harmonicznych pr¹du fazy L2 - min, max 91 7628, 7629 THD I3 % Wspó³czynnik zawartoœci 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 102 7640 HarU1[11] % 11 Harmoniczna napiêcia fazy L1 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 127 7665 HarU2[11] % 11 Harmoniczna napiêcia fazy L2 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 152 7690 HarU3[11] % 11 Harmoniczna napiêcia fazy L3 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; WskaŸnik 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 wartoœci sumy CRC s¹ umieszczone w dwóch tablicach. Pierwsza tablica zawiera starszy bajt wszystkich z 256 mo liwych wartoœci 16-bitowego pola CRC, natomiast druga tablica m³odszy bajt. Wyznaczenie sumy CRC poprzez indeksowanie tablic jest o wiele 28
szybsze ni obliczenie nowej wartoœci 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æ bezpoœrednio umieszczona w buforze komunikacyjnym. Funkcja do obliczenia CRC ma dwa argumenty: unsigned char *puchmsg; WskaŸnik do bufora komunikacyjnego, zawieraj¹cego dane binarne, z których nale y obliczyæ CRC unsigned short usdatalen; 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
//tablica starszego bajtu CRC const unsigned char crc_hi[ ]={ 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 }; 30
//tablica mlodszego bajtu CRC const unsigned char crc_lo[ ]={ 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 }; 31
32