Protokół AQT-BUS
Transkrypt
Protokół AQT-BUS
Produkt:
DOKUMENTACJA SERWISOWO-SZKOLENIOWA
Typ:
SUPERCAL
Wersja:
431/ 432/ 437/ 439
Temat:
Protokól AQT-BUS.doc
PROTOKÓŁ AQT-BUS
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
Start
t
Stop
D0 D1 D2 D3 D4 D5 D6 D7 Parity
Format ramki
Ramka transmisji pomiędzy Master a Slave posiada następującą postać:
byte 1
byte 2
Pierwszy bajt transmisji zawiera adres Slave.
Drugi bajt zawsze ma wartość 3.
adres
#03
Następne bajty zawierają przekazywaną
informację. Ramka zawsze zakończona jest
dwu bajtową sumą kontrolną CRC. Ramka
transmitowana jest jako pojedynczy blok danych.
byte 3
dane
byte n-1
dane
byte n
CRC16
LSB
MSB
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
0
1..250
251..253
254
255
Strona 1 z 6
opis
adres początkowy ( brak ustawienia )
adresy normalne dla urządzeń połączonych w sieć ( max 250 urządzeń )
zarezerwowany
adres uniwersalny
zarezerwowany
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
CRC16( #$FE#$03#$00#$3F#$00#$08 )
wynik
$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
adres
byte 2
byte 3
#03
byte 4
numer bloku
MSB
byte 5
byte 6
#00
#08
byte 7
byte 8
CRC16
LSB
LSB
MSB
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
adres
#03
#16
byte 4
byte 5
pakiet 0
MSB
LSB
byte 6
byte 7
pakiet 1
MSB
LSB
byte 8..17
pakiety 2..6
MSB
LSB
byte 18
byte 19
pakiet 7
MSB
LSB
byte 20
CRC16
LSB
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 (LSB)
pakietu 0, a kończąc na najstarszym bicie (MSB) 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
byte 21
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.
nazwa
IDNUM
block
255
pos.
4
size
28
dziedzina
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.
nazwa
RUBNUM
Strona 3 z 6
block
1559
pos.
64
size
16
dziedzina
0..65'535
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
godzina (0..11)
b7
b6
b5
b4
b3
b2
b1
b0
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
rok (0..99)
b8
b7
b6
b5
miesiąc (1..12)
b4
b3
b2
b1
b0
dzień (1..31)
If date.year < 90
Then date.year:= 2000 + date.year
Else date.year:= 1900 + date.year;
nazwa
TIME
DATE
block
351
319
pos.
0
112
size
12
16
dziedzina
0:00..23:59
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.
nazwa
HOURS
block
351
pos.
12
size
20
dziedzina
0..150'000
nazwa
ERRORS
block
287
pos.
0
size
16
dziedzina
Błędy
Kodowanie rejestru ERRORS:
bit
0
1
2
3
4
5
6
7
8
9..10
11
12
13..14
15
Strona 4 z 6
wartość
<> 0
<> 0
<> 0
<> 0
<> 0
<> 0
<> 0
<> 0
<> 0
<> 0
<> 0
<> 0
<> 0
przyczyna błędu
zwarcie
rozwarcie
czujnik temperatury niskiej
niestabilność
inwersja temperatur
zwarcie
rozwarcie
czujnik temperatury wysokiej
niestabilność
zarezerwowane
błąd autokalibracji
nadmierny przepływ
błąd na liczniku A
błąd na liczniku B
błąd EEPROM
koniec baterii
kod na SUPERCAL
Err 001
Err 004
Err 002
Err 008
Err 016
Err 032
Err 064
Err 128
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.
nazwa
TEMPH
TEMPL
block
287
287
pos.
64
80
size
16
16
dziedzina
0..50'000 ( 0..250°C)
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ść [m3].
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
KPOSFL = 1
nazwa
KPOSFL
-
powrót
zasilanie
block
63
pos.
56
size
1
dziedzina
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
rejestru ENERGY
w zależności od GJ_MG_FL
WH_ REG 9
J_FL b3 b2 b1 b0
[Wh]
=0
=1
[kJ]
123 45678 MWh
123456 78 kWh
0
x 0 0 0
1
3,6
1234 5678 MWh
1234567 8 kWh
0
x 1 0 0
10
36
12345
678
MWh
12345678 kWh
0
x 1 1 0
100
360
123456 78 MWh
12345678 kWh
0
x 1 1 1
1.000
3.600
123
45678
GJ
123456 78 MJ
1
x 0 0 0
1/3.6
1
1234 5678 GJ
1234567 8 MJ
1
x 1 0 0
10/3.6
10
12345
678
GJ
12345678 MJ
1
x 1 1 0
100/3.6
100
123456 78 GJ
12345678 MJ
1
x 1 1 1
1000/3.6
1.000
.
.
.
.
.
.
.
.
nazwa
WH_J_FL
GJ_MJ_FL
REG09
ENERGY
Strona 5 z 6
block
63
63
63
255
pos.
43
42
44
96
size
1
1
4
32
dziedzina
0,4,6,7,8,12,14,15
0..999'999'999
.
.
.
.
uwagi
odczyt w Wh lub J
odczyt w GJ lub MJ
współczynnik impulsowania
licznik energii
Objętość
Stan licznika wody zapamiętana jest w 32-bitowym rejestrze VOLUME.
Poniższa tabela pozwala przeliczyć wartość zużycia wody:
wartość jednostki
wskazanie
REG 9
rejestru VOLUME
b3 b2 b1 b0
[m3] SUPERCAL
[l]
3
0 0 0 0
1 E-06
123.45678 m
0,001
3
1 0 0 0
1 E-05
1234.5678 m
0,01
3
0 1 0 0
1 E-05
1234.5678 m
0,01
3
1 1 0 0
1 E-04
12345.678 m
0,1
3
0 1 1 0
1 E-04
12345.678 m
0,1
3
1 1 1 0
1 E-03
123456.78 m
1
3
0 1 1 1
1 E-03
123456.78 m
1
3
1 1 1 1
1 E-03
123456.78 m
1
nazwa
REG09
VOLUME
block
63
287
pos.
44
32
size
4
32
dziedzina
0,4,6,7,8,12,14,15
0..999'999'999
uwagi
współczynnik impulsowania
licznik objętości
Rejestry
nazwa
DATE
block
319
pos.
112
size
16
ENERGY
ERRORS
GJ_MJ_FL
HOURS
IDNUM
KPOSFL
REG09
RUBNUM
TEMPH
TEMPL
TIME
VOLUME
WH_J_FL
255
287
63
351
255
63
63
1559
287
287
351
287
63
96
0
42
12
4
56
44
64
64
80
0
32
43
32
16
1
20
28
1
4
16
16
16
12
32
1
dziedzina
1/1/1990
..31/12/2089
0..999'999'999
0..150'000
0..99'999'999
0, 4, 6, 7, 8, 12, 14, 15
0..65’535
0..50'000
0..50'000
0:00..23:59
0..999'999'999
Uwagi końcowe:
W przypadku dodatkowych pytań, wyjaśnień prosimy o kontakt.
Strona 6 z 6
uwagi
data
licznik ENERGII
kod błędu
jednostki GJ lub Mj
godziny pracy
numer identyfikacyjny
miejsce montażu przetwornika przepływu
współczynnik impulsowania
typ i werja przelicznika
temperatura zasilania (0 - 250 °C)
temperatura powrotu (0 - 250 °C)
czas
licznik objętości
jednostki Wh lub J