Produkt: DOKUMENTACJA SERWISOWO-SZKOLENIOWA Typ: Temat: Wersja: SUPERCAL 431/ 432/ 437/ 439 PROTOKÓŁ AQT-BUS Protokól AQT-BUS.doc Data utworzenia 02-07-16 Wstęp Niniejszy opis skierowany jest wyłącznie do osób opracowujących oprogramowanie, które pragną stworzyć program do odczytywania danych urządzeń z protokołem AQT-BUS. W dokumencie znajdują się szczegółowe wyjaśnienia dotyczące formatów ramek przekazywanych między urządzeniami, a komputerem oraz wyjaśnienia dotyczące interpretacji danych otrzymanych z licznika energii cieplnej SUPERCAL model 431. Zasady funkcjonowania W zakresie sprzętowym sieć AQT-BUS jest identyczna z siecią M-BUS. W zakresie sprzętowym i protokołu rozróżniamy dwa typy urządzeń: Master i Slave. Master organizuje wymianę danych i zapewnia wznowienie w razie zakłóceń. Do sieci może być podłączony jednorazowo tylko jeden Master. Slave y ograniczają się do reagowania na zapytania Master i nie mogą komunikować się między sobą. Ich ilość jest ograniczona. Mogą być zdalnie zasilane przez Master. W celu uzyskania połączenia punktowego Master może wykorzystywać specjalny adres zmuszający Slave do udzielenia odpowiedzi. W celu umożliwienia komunikowania z urządzeniami komputer musi być wyposażony w port komunikacyjny szeregowy asynchroniczny. Master Slave 1 Slave 2 Slave 3 Konfiguracja portu szeregowego Wymagana konfiguracja portu szeregowego komputera została przedstawiona w tabeli : transmisja połączenie prędkość dane parzystość bit stopu asynchroniczna szeregowa simplex 2400 bauds 8 bits 1 bit, odd parity 1 bit t Start D0 D1 D2 D3 D4 D5 D6 D7 Parity Stop Format ramki Ramka transmisji pomiędzy Master a Slave posiada następującą postać: Pierwszy bajt transmisji zawiera adres Slave. byte 1 byte 2 byte 3 byte n-1 byte n Drugi bajt zawsze ma wartość 3. Następne bajty zawierają przekazywaną adres #03 dane dane CRC16 informację. Ramka zawsze zakończona jest dwu bajtową sumą kontrolną CRC. Ramka transmitowana jest jako pojedynczy blok danych. Adres Pierwszy bajt ramki jest zawsze adresem. Master używa adresu aby wybrać właściwy Slave. Każdy Slave powinien posiadać swój adres. Slave zawsze odpowie na adres 254. Lista dostępnych adresów : adres opis 0 adres początkowy ( brak ustawienia ) 1..250 adresy normalne dla urządzeń połączonych w sieć ( max 250 urządzeń ) 251..253 zarezerwowany 254 adres uniwersalny 255 zarezerwowany Strona 1 z 6
Suma Kontrolna CRC16 Algorytm wyliczania sumy kontrolnej CRC16 został przedstawiony jako funkcja napisana w języku Borland Pascal : Function CRC16( frame : string ): word; Const polynominal = $A001; Var crc : word; index, bit : integer; Begin crc:= $FFFF; For index:= 1 to Length( frame ) do Begin crc:= crc xor Ord( frame[index] ); For bit:= 0 to 7 do If Odd( crc ) Then crc:= ( crc shr 1 ) xor polynominal Else crc:= crc shr 1; end;{ for n } CRC16:= crc; end;{ CRC16 } Przykład obliczeń : funkcja wynik CRC16( #$FE#$03#$00#$3F#$00#$08 ) $0F60 Zapytanie wysyłane przez Master Master może odczytywać część wewnętrznej pamięci Slave. Pamięć Slave zorganizowana jest w blokach po 128 bitów. Master może odczytać jednocześnie tylko jeden blok pamięci. Ramka zapytania wysyłana przez Master ma następującą postać : byte 1 byte 2 byte 3 byte 4 byte 5 byte 6 byte 7 byte 8 adres #03 numer bloku #00 #08 CRC16 Bajty 3 i 4 zawierają numer bloku, który ma być odczytany. Bajt 5 zawsze ma wartość 0. Bajt 6 zawsze ma wartość 8.Przed wysłaniem ramki należy wysłać znak #FF celem obudzenia Slave. Odpowiedź Slave W odpowiedzi na zapytanie przesłane od Master Slave przesyła dane. Ramka odpowiedzi wysyłana przez Slave ma następującą postać: byte 1 byte 2 byte 3 byte 4 byte 5 byte 6 byte 7 byte 8..17 byte 18 byte 19 byte 20 b adres #03 #16 pakiet 0 pakiet 1 pakiety 2..6 pakiet 7 CRC1 Dane przesyłane są w ośmiu pakietach. Każdy pakiet jest 16-bitowym słowem. Do dalszej interpretacji danych zakłada się, że bity numerowane są od 0 do 127 zaczynając od najmłodszego bitu () pakietu 0, a kończąc na najstarszym bicie () pakietu 7. Bajt 2 zawsze ma wartość 3. Bajt 3 zawsze ma wartość 16. Slave powinien odpowiedzieć po czasie 0,4 do 1,6 sekundy od momentu odebrania zapytania od Master. Jeżeli po czasie 1,6 sekundy Slave nie odpowie należy powtórzyć zapytanie. Brak odpowiedzi po 3 lub 4 krotnym powtórzeniu zapytania oznacza błąd. Strona 2 z 6
Konwersja danych Każda wartość danych odczytana z urządzenia definiowana jest przez trzy parametry: - block number - numer bloku ( każdy blok zawiera 128 bitów ) - position - numer bitu określający początek danej wartości - size - liczba bitów danej wartości Aby otrzymać wartość liczbową danej wielkości można zastosować następującą funkcję: { Pascal-Borland } Type BlocMem : array[0..7]of word; Function Wartosc( bloc : BlocMem; position, size : integer ): longint; Var v : longint; p : integer; Begin v:= 0; For p:= position + size - 1 downto position do If ( bloc[ p div 16 ] and ( 1 shl ( p mod 16 ) ) ) <> 0 Then v:= ( v shl 1 ) + 1 Else v:= v shl 1; Wartosc:= v; end;{ Wartosc } Przykład: Wartość odpowiadająca pozycji 18 i mająca wielkość 3 obliczana jest w następujący sposób: bit2*2^0 + bit3*2^1 + bit4*2^2 pakietu 1. INTERPRETACJA DANYCH Numer identyfikacyjny Numer identyfikacyjny - jak nazwa wskazuje - służy do zidentyfikowania urządzenia w sposób jednoznaczny podczas odczytu stanu. Numer ten składa się z 8 cyfr. Zawiera w sobie rok i miesiąc produkcji oraz numer fabryczny. IDNUM 255 4 28 0..99'999'999 Wersja przelicznika Zmienna RUBNUM zawiera typ i wersję przelicznika. Typ i wersja przelicznika jest umieszczona na etykiecie bocznej np.: 431R530. Ten sam numer wyświetlany jest na wyświetlaczu przelicznika w trybie serwisowym np.: 431530. Ponieważ pierwszą cyfrą jest zawsze 4 zmienna RUBNUM zawiera ostatnie 5 cyfr. Do wyniku trzeba zawsze dodać 400000. RUBNUM 1559 64 16 0..65'535 Strona 3 z 6
Data i czas SUPERCAL wyposażony jest w wewnętrzny zegar czasu rzeczywistego. Zegar ten fabrycznie ustawiony jest na czas zimowy. b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 godzina (0..11) PM (0) minuta (0..59) W celu uzyskania godziny w formacie europejskim od 0 do 23 wystarczy dodać 12 do wartości godziny jeżeli bit 7 (PM) wynosi 1: If time.pm = 1 Then time.hour:= time.hour + 12; Kalendarz uwzględnia lata przestępne. b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 rok (0..99) miesiąc (1..12) dzień (1..31) If date.year < 90 Then date.year:= 2000 + date.year Else date.year:= 1900 + date.year; TIME 351 0 12 0:00..23:59 DATE 319 112 16 1/1/1990.. 31/12/2089 Godziny pracy Licznik ten podaje liczbę godzin pracy jaka pozostała przy korzystaniu z zasilania bateryjnego do wyczerpania baterii. HOURS 351 12 20 0..150'000 Błędy Strona 4 z 6 ERRORS 287 0 16 Kodowanie rejestru ERRORS: bit wartość przyczyna błędu kod na SUPERCAL 0 <> 0 zwarcie 1 <> 0 rozwarcie czujnik temperatury niskiej Err 001 2 <> 0 niestabilność 3 <> 0 inwersja temperatur Err 004 4 <> 0 zwarcie 5 <> 0 rozwarcie czujnik temperatury wysokiej Err 002 6 <> 0 niestabilność 7 zarezerwowane 8 <> 0 błąd autokalibracji Err 008 9..10 <> 0 nadmierny przepływ Err 016 11 <> 0 błąd na liczniku A Err 032 12 <> 0 błąd na liczniku B Err 064 13..14 <> 0 błąd EEPROM Err 128 15 <> 0 koniec baterii Batt
Temperatura Temperatura wody ciepłej (zasilanie) przechowywana jest w rejestrze TEMPH, a temperatura wody zimnej (powrót) w rejestrze TEMPL. Rozdzielczość obydwu rejestrów wynosi 0,005 C. TEMPH 287 64 16 0..50'000 ( 0..250 C) TEMPL 287 80 16 0..50'000 ( 0..250 C) Miejsce montażu przetwornika przepływu Wodomierz może być montowany na zasilaniu (wyższej temperaturze) lub na powrocie (niższej temperaturze). Energia cieplna wyliczana jest na podstawie masy wody [kg], wodomierz mierzy objętość [m 3 ]. Przelicznik dokonuje przeliczenia objętości na masę, dlatego bardzo ważne jest właściwe określenie miejsca zamontowania przetwornika przepływu. Informacja o tym zawarta jest w rejestrze KPOSFL: KPOSFL = 0 - powrót KPOSFL = 1 - zasilanie KPOSFL 63 56 1 Energia cieplna Dane pochodzące z licznika energii przechowywane są w 32-bitowym rejestrze ENERGY. Jednostki w jakich przedstawione są te dane zależą od konfiguracji urządzenia. Poniższa tabela pozwala przeliczyć wartość energii: wartość jednostki wskazanie SUPERCAL WH_ REG 9 rejestru ENERGY w zależności od GJ_MG_FL J_FL b3 b2 b1 b0 [kj] [Wh] =0 =1 0 x 0 0 0 3,6 1 123.45678 MWh 123456.78 kwh 0 x 1 0 0 36 10 1234.5678 MWh 1234567.8 kwh 0 x 1 1 0 360 100 12345.678 MWh 12345678 kwh 0 x 1 1 1 3.600 1.000 123456.78 MWh 12345678 kwh 1 x 0 0 0 1 1/3.6 123.45678 GJ 123456.78 MJ 1 x 1 0 0 10 10/3.6 1234.5678 GJ 1234567.8 MJ 1 x 1 1 0 100 100/3.6 12345.678 GJ 12345678 MJ 1 x 1 1 1 1.000 1000/3.6 123456.78 GJ 12345678 MJ uwagi WH_J_FL 63 43 1 odczyt w Wh lub J GJ_MJ_FL 63 42 1 odczyt w GJ lub MJ REG09 63 44 4 0,4,6,7,8,12,14,15 współczynnik impulsowania ENERGY 255 96 32 0..999'999'999 licznik energii Strona 5 z 6
Objętość Stan licznika wody zapamiętana jest w 32-bitowym rejestrze VOLUME. Poniższa tabela pozwala przeliczyć wartość zużycia wody: wartość jednostki REG 9 rejestru VOLUME wskazanie b3 b2 b1 b0 [l] [m3] SUPERCAL 0 0 0 0 0,001 1 E-06 123.45678 m 3 1 0 0 0 0,01 1 E-05 1234.5678 m 3 0 1 0 0 0,01 1 E-05 1234.5678 m 3 1 1 0 0 0,1 1 E-04 12345.678 m 3 0 1 1 0 0,1 1 E-04 12345.678 m 3 1 1 1 0 1 1 E-03 123456.78 m 3 0 1 1 1 1 1 E-03 123456.78 m 3 1 1 1 1 1 1 E-03 123456.78 m 3 uwagi REG09 63 44 4 0,4,6,7,8,12,14,15 współczynnik impulsowania VOLUME 287 32 32 0..999'999'999 licznik objętości Rejestry uwagi DATE 319 112 16 1/1/1990 data..31/12/2089 ENERGY 255 96 32 0..999'999'999 licznik ENERGII ERRORS 287 0 16 kod błędu GJ_MJ_FL 63 42 1 jednostki GJ lub Mj HOURS 351 12 20 0..150'000 godziny pracy IDNUM 255 4 28 0..99'999'999 numer identyfikacyjny KPOSFL 63 56 1 miejsce montażu przetwornika przepływu REG09 63 44 4 0, 4, 6, 7, 8, 12, 14, 15 współczynnik impulsowania RUBNUM 1559 64 16 0..65 535 typ i werja przelicznika TEMPH 287 64 16 0..50'000 temperatura zasilania (0-250 C) TEMPL 287 80 16 0..50'000 temperatura powrotu (0-250 C) TIME 351 0 12 0:00..23:59 czas VOLUME 287 32 32 0..999'999'999 licznik objętości WH_J_FL 63 43 1 jednostki Wh lub J Uwagi końcowe: W przypadku dodatkowych pytań, wyjaśnień prosimy o kontakt. Strona 6 z 6