TRANSMISJA DANYCH do i od sondy (UMPP) ilości (poziomu) paliwa w zbiorniku pojazdu drogowego z interface'm cyfrowym (serial port)
I. SPRZĘT 1. Realizacja układowa RS485 2. Parametry transmissji szybkość: 4800 bitów/sek format danych: 8-bitów danej, bez bitu parzystości, 1-bit stopu
II. OPROGRAMOWANIE 1. Sonda bez wprowadzonej charakterystyki objętościowej zbiornika Istnieje możliwość odczytu wartości poziomu paliwa w zbiorniku pojazdu drogowego. Próba odczytu objętości spowoduje odpowiedź błędną opisaną poniżej (punkt II 1.1.2). 1.1 Formaty zapytania 1.1.1) Poziom paliwa a) system z jednym urządzeniem UMPP lub urządzenie nie ma wprowadzonego numeru format zapytania (3-bajty): '#', '?', '!' odpowiedź (7-bajtów): kolejne cyfry wyniku (zera wiodące wyprowadzane jako spacje), poprzedzone znakami LF line feed i CR cariage return w formacie dziesiętnym (dokładność wyniku 0,1 mm). b) system z kilkoma urządzeniami UMPP lub sonda ma wprowadzony numer format zapytania (4-bajty): '#', 'numer','?', '!' 'numer' należy do zbioru {'1', '2', '3', '4', '5', '6', '7', '8', '9'} odpowiedź (9-bajtów): w następującej kolejności: 2 - znaki: LF line feed CR cariage return 1 znak: 'numer' = {'1', '2', '3', '4', '5', '6', '7', '8', '9'} 1 znak: '@' 5 znaków: kolejne cyfry wyniku (zera wiodące wyprowadzane jako spacje) w formacie dziesiętnym (dokładność wyniku 0,1 mm).
1.1.2) Objętość paliwa a) system z jednym urządzeniem UMPP lub urządzenie nie ma wprowadzonego numeru format zapytania (3-bajty): STX, '?', ETX STX = 0x02 ETX = 0x03 odpowiedź (5-bajtów): NAK, ERROR_CODE, CSUM1, CSUM2, ETX NAK = 0x15 ERROR_CODE = {'0', '1',..., 'E', 'F'} CSUM1, CSUM2 bajty sumy kontrolnej = {'0', '1',..., 'F'}, tak by: bajt(error_code) + bajt(csum1, CSUM2) = 0 kody błędów: '1' sonda nie ma wprowadzonej charakterystyki objętościowej zbiornika b) system z kilkoma urządzeniami UMPP lub sonda ma wprowadzony numer format zapytania (4-bajty): STX,'numer','?', ETX STX = 0x02 'numer' = {'1', '2', '3', '4', '5', '6', '7', '8', '9'} ETX = 0x03 odpowiedź (7-bajtów): NAK, 'numer', '@', ERROR_CODE, CSUM1, CSUM2, ETX NAK = 0x15 ERROR_CODE = {'0', '1',..., 'E', 'F'} CSUM1, CSUM2 bajty sumy kontrolnej = {'0', '1',..., 'F'}, tak by: bajt('numer' + '@' + ERROR_CODE) + bajt(csum1, CSUM2) = 0 kody błędów: '1' sonda nie ma wprowadzonej charakterystyki objętościowej zbiornika
2. Sonda z wprowadzoną charakterystyką objętościową zbiornika Istnieje możliwość odczytu wartości poziomu w zbiorniku pojazdu drogowego lub jego objętości po uprzednim zaprogramowaniu charakterystyki objętościowej zbiornika jako funkcji wysokości (poziomu paliwa). V[l] = f(poziom paliwa) Jest też możliwe przywrócenie stanu początkowego urządzenia tak by działało jak urządzenie bez wprodzonej charakterystyki objętościowej zbiornika (patrz punkt II 5). 2.1 Formaty zapytania 2.1.1) Poziom paliwa zgodnie z opisem w punkcie II.1.1.1 podpunkty a) i b). 2.1.2) Objętość paliwa a) system z jednym urządzeniem UMPP lub urządzenie nie ma wprowadzonego numeru format zapytania (3-bajty): STX, '?', ETX STX = 0x02 ETX = 0x03 odpowiedź (7-bajtów): ACK, C1, C2, C3, CSUM1, CSUM2, ETX ACK = 0x06 C1, C2, C3 kolejne bajty objętości = {'0', '1',..., 'E', 'F'} CSUM1, CSUM2 bajty sumy kontrolnej = {'0', '1',..., 'F'}, tak by: bajt(c1 + C2 + C3) + bajt(csum1, CSUM2) = 0 odpowiedź (5-bajtów): NAK, ERROR_CODE, CSUM1, CSUM2, ETX zgodnie z opisem w punkcie II.1.1.2.a).
b) system z kilkoma urządzeniami UMPP lub sonda ma wprowadzony numer format zapytania (4-bajty): STX,'numer','?', ETX STX = 0x02 'numer' = {'1', '2', '3', '4', '5', '6', '7', '8', '9'} ETX = 0x03 odpowiedź (9-bajtów): ACK, 'numer', '@', C1, C2, C3, CSUM1, CSUM2, ETX ACK = 0x06 C1, C2, C3 kolejne bajty objętości = {'0', '1',..., 'E', 'F'} CSUM1, CSUM2 bajty sumy kontrolnej = {'0', '1',..., 'F'}, tak by: bajt('numer' + '@' + C1 + C2 + C3) + bajt(csum1, CSUM2) = 0 odpowiedź (7-bajtów): NAK, 'numer', '@', ERROR_CODE, CSUM1, CSUM2, ETX zgodnie z opisem w punkcie II.1.1.2.b). 3. Autodiagnostyka sondy pomiarowej Niezależnie od stanu zaprogramowania urządzenia UMPP posiada ono funkcję samotestującą stan techniczny bądź wykryte błędy pomiarowe. Jeżeli w wyniku zapytania urządzenia z wczytaną charakterystyką bądź odbioru danych z sondy bez wprowadzonej charakterystyki zbiornika otrzymamy wartości 1, 2, 3 lub 4 to sygnalizują one następujące błędy: 1 brak pomiaru w czujniku wzorcowym (rurka krótka pozioma) 2 brak pomiaru w czujniku pomiarowym (rurka długa pionowa) 3 brak pomiaru w obydwu czujnikach wzorcowym i pomiarowym 4 pomiar w czujniku wzorcowym jest po za normą dla oleju napędowego
4. Zapis i kasowanie numeru urządzenia (tylko pierwsze 30 sekund od załączenia zasilania) Nadawanie lub kasowanie numeru urządzenia jest możliwe tylko w czasie pierwszych 30 sekund od momentu zasilenia urządzenia. W tym czasie jeżeli urządzenie nie ma zaprogramowanego jeszcze numeru po otrzymaniu ciągu znaków: $ADDRESS='numer'! (przykładowo - $ADDRESS=2!) przyjmie, że uzżytkownik nadał mu żądany 'numer' (przykładowo 2) i w odpowiedzi odeśle komunikat: $'numer'@ok! (przykład - $2@OK!) co oznacza potwierdzenie nadania odpowiedniego numeru. Jeżeli urządzenie posiada juz zaprogramowany numer to w czasie tych pierwszych 30 sekund pracy istnieje możliwość skasowania go i przywrócenia stanu wyjściowego, to jest takiego jak urządzenia bez wprowadzonego numeru. W tym celu należy do urządzenia wysłać następującą komendę: $'numer'null_address! (przykład - $2NULL_ADDRESS) W odpowiedzi urządzenie wykonując polecenie odeśle ciąg znaków: co oznacza skasowanie żądanego numeru. $OK! UWAGA!!! Nadawanie numeru urządzenia w systemie wielopomiarowym jest możliwe jezeli w trakcie pierwszych 30 sekund od włączenia zasilania systemu znajduje się w nim tylko 1 (jedno) urządzenie UMPP bez nadanego numeru. Ewentualnie kolejne urządzenia UMPP (bez wprowadzonego numeru) są załaczane po upływie tego czasu.
5. Wprowadzanie i odczyt charakterystyki objętościowej zbiornika Wprowadzenie do urządzenia UMPP charakterystyki objętościowej zbiornika polega na wysłaniu po interface'sie szeregowym odpowiednio przygotowanego zbioru tekstowego (przykład poniżej) a) dla urządzenia bez wprowadzonego numeru $BEGIN! $H00000!$V00000! $NEXT! $H01000!$V00100! $NEXT! $H05000!$V00500! $NEXT! $H09000!$V00900! $NEXT! $H09999!$V00999! $REJESTR!$WI77236! $END! b) dla urządzenia z wprowadzonym numerem = {'1', '2',..., '8', '9'} $'numer'begin! $H00000!$V00000! $'numer'next! $H01000!$V00100! $'numer'next! $H05000!$V00500! $'numer'next! $H09000!$V00900! $'numer'next! $H09999!$V00999! $'numer'rejestr!$wi77236! $'numer'end! Dla przykładu, jeżeli numer = '2' to zbiór ma postać: $2BEGIN! $H00000!$V00000! $2NEXT! $H01000!$V00100! $2NEXT! $H05000!$V00500! $2NEXT! $H09000!$V00900! $2NEXT! $H09999!$V00999! $2REJESTR!$WI77236! $2END!
Powyższy przykład dotyczy idealnie liniowej charakterystyki objętościowej zbiornika, gdzie na każde 100 litrów wlanego paliwa wypada przyrost 100,0mm poziomu paliwa, zaś charakterystyka dotyczy zbiornika pojazdu o numerze rejestracyjnym WI 77236. Po przesłaniu w/w zbioru tekstowego urządzenie potwierdzi wprowadzanie przesłanej charakterystyki odpowiedzią tekstową: $OK! lub $'numer'@ok! (dla przykładu powyżej 2@OK! ) co sygnalizuje, że urządzenie jest gotowe do normalnej pracy w pojeździe. W przypadku braku takiej odpowiedzi nalezy sprawdzic czy istnieje połączenie między urządzeniem programującym (np. komputer PC), a sondą pomiarową oraz czy zbiór został przygotowany poprawnie i ewentualnie wysłac go ponownie. Jezeli urządzenie odpowie tekstem $ERROR! lub 'numer'@error! oznacza to, że: (a) wprowadzone w zbiorze tekstowym wartosci przy literach H oraz V nie są wartosciami monotonicznie rosnącymi, czyli wartości te w każdej niższej linii winny być większe od wartosci z linii poprzedniej. (b) wprowadzono zbyt dużo punktów charakterystyki objętościowej zbiornika (maksymalnie 100 punktów). (c) nie przy wszystkich słowach kluczowych użyto tego samego numeru (d) popełniono inny nieoczekiwany błąd w formacie pliku charakterystyki Każdy z punktow odpowiada jednej linii w zbiorze tekstowym: $H0xxxx!$V0xxxx! Niezbędnym jest by pierwszy punkt charakterystyki miał postac: $H00000!$V00000! a ostatni: $H09999!$V00xxx! xxx jest maxymalną objętością zbiornika zwiekszoną o 20 litrów Istnieje możliwość odczytu charakterstyki zbiornika w zaprogramowanym urządzeniu. W tym celu należy wysłać do sondy polecenie tekstowe: $GET! lub $'numer'get! w odpowiedzi urządzenie odpowie ciągiem tekstowym w formacie jak powyżej prezentując wprowadzoną ostatnio charakterstykę objętościową zbiornika, lub odpowie ciągiem znakowym: $NONE! lub $'numer'@none! co oznacza, że urządzenie nie ma wprodzonej charakterstyki objętościowej zbiornika.
6. Przywracanie stanu początkowego urządzenia (kasowanie charakterystyki objętościowej) Jeżeli sonda ma już wprodzoną charakterystykę objętościową zbiornika można przywrócić stan początkowy tak by urządzenie pracowało tak jak bez wrowadzonej charakterystyki. W ten sposób mozliwe jest powtórne wpisanie np: zweryfikowanej charakterystyki objętościowej zbiornika. Realizacje tej funkcji uzyskuje się przez wysłanie polecenia tekstowego: $CLEAR! lub $'numer'clear! W wyniku poprawnie wykonanego polecenia urządzenie odpowie ciągiem znakowym: $OK! lub $'numer'@ok! brak odpowiedzi oznacza, że operacja nie powiodła się i należy ją powtórzyć. 7. Informacje o wersji zainstalowanego oprogramowania Istnieje możliwość odczytu informacji o wersji i czasie wykonania zainstalowanego w urządzeniu oprogramowania. W tym celu należy w pierwszej kolejności skonfigurować urządzenie jako nie posiadające wprowadzonego numeru a następnie do urządzenia wysłać komendę tekstową: $VERSION! w odpowiedzi urządzenie prześle następujący ciąg znakowy: (LF)(CR) Version: UMPP_x.x Compiled: (miesiąc) (dzień) (rok) Time: (godzina):(minuta):(sekunda) (LF)(CR) x.x oznacza numer zainstalowanego oprogramowania