Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Suma kontrolna tablicy R&G

zonku 09 Mar 2016 19:12 1407 28
  • #1 09 Mar 2016 19:12
    zonku
    Poziom 13  

    Witam. Posiadam tablicę ETLZ z systemu informacji pasażerskiej firmy R&G wraz z oryginalnym sterownikiem. Okazuje się że do moich celów ten sterownik jest niewystarczający. Postanowiłem stworzyć swój sterownik więc do tego podsłuchałem komunikację przy pomocy przejściówki USB->RS485. Informacje odczytałem przy pomocy programu hercules, i tutaj nastąpił problem z obliczeniem sumy kontrolnej.

    Poniżej przedstawiam przykładowe ramki jakie wysyła sterownik żeby wyświetlić napis na tablicy.

    #STX7E06Kier#CR#CR87#ETX - dla braku znaków
    #STX7E07Kier#CR0#CRB8#ETX - dla znaków 0
    #STX7E09Kier#CR000#CR1A#ETX - dla znaków 000
    #STX7E0AKier#CR0000#CR52#ETX -dla znaków 0000

    Przed znakiem końca jest coś w rodzaju sumy kontrolnej. O ile potrafię jakoś przeliczyć tą sumę dla jednego, dwóch i trzech znaków ( w tym przypadku dla znaków "0") to przy większej liczbie (4 znaki do wyświetlenia i więcej) moje obliczenia nie zgadzają się z tym co sterownik wystawia. W ostatnim przykładzie który umieściłem wychodzi 52h, z moich obliczeń wyszło 4Bh.

    0 28
  • #3 09 Mar 2016 19:28
    zonku
    Poziom 13  

    Oczywiście z roztargnienia zapomniałem.

    Więc obliczenie zrobiłem po prostu dla ramki bez żadnych znaków czyli:

    suma kontrolna = 87h+liczba znaków+suma kodów znaków w ASCII


    dla przykładu dla jednej litery "0"

    87h+1h+30h = B8h i tak też jest.

    dla trzech liter "0"

    87h+3h+30h+30h+30h = 11A - i tutaj sterownik wystawia tylko 1A.

    Dla czterech znaków nie wiem jak mam to rozgryźć:

    87h+4h+30h+30h+30h+30h = 14B

    0
  • #4 09 Mar 2016 21:12
    vonar
    Poziom 28  

    Pokaż jeszcze ramki dla pojedynczych cyfr 1 i 2.

    0
  • #5 09 Mar 2016 21:44
    zonku
    Poziom 13  

    Proszę to dla liczby 1, oraz dla 2.

    #STX7E07Kier#CR1#CRB9#ETX

    #STX7E07Kier#CR2#CRBA#ETX

    0
  • #7 09 Mar 2016 22:29
    zonku
    Poziom 13  

    #STX7E07Kier#CR00#CRE9#ETX - dla znaków 00


    87h+2h+30h+30h = E9h

    Dopiero problem zaczyna się od 4 znaków.

    0
  • #9 09 Mar 2016 23:41
    michalko12
    Specjalista - Mikrokontrolery

    zonku napisał:
    Dla czterech znaków nie wiem jak mam to rozgryźć:

    87h+4h+30h+30h+30h+30h = 14B


    14Bh / 4h = 52h

    Może to tylko przypadek.

    0
  • #11 10 Mar 2016 13:34
    zonku
    Poziom 13  

    @_Grzegorz_, możesz wyjaśnić po czym doszedłeś do tych wyników ? Co wystawia sterownik sprawdzę dopiero jak wrócę do domu.

    0
  • #13 10 Mar 2016 20:39
    zonku
    Poziom 13  

    WIęc zrobiłem tak jak mówiliście czyli wywołałem na sterowniku następująće ciągi znaków

    00000 = #STX7E0BKier#CR00000#CR83#ETX
    000000 = #STX7E0CKier#CR000000#CRB4#ETX

    Wychodzi na to _Grzegorz_ że masz rację i chyba wiszę Ci "zimne piwko". Zrobię jeszcze testy na innych ciągach znaków.

    0
  • #14 10 Mar 2016 20:42
    __Grzegorz__
    Poziom 27  

    sprawdź przede wszystkim dłuższe sekwencje, aby upewnić się czy mod f9 jest OK.

    dodawaj co najmniej po 6 zer (6x0x30 = 0x120), aby 'przekręcić' sumator...

    0
  • #15 10 Mar 2016 21:15
    grko
    Poziom 32  

    Cytat:

    @__Grzegorz__
    Wszystko "zgadzia się".
    Tylko trzeba uważnie przeczytać co napisałem...



    Może czegos nie rozmiem z Twojej wypowiedzi ale:
    [ 2 + 7e + (bajt związany z długością) + 1 + znaki] mod f9

    dla
    #STX7E09Kier#CR000#CR1A#ETX - dla znaków 000

    0x02 + 0x7e + 0x09 + 0x01+ 0x30 + 0x30 + 0x30 = 0x11A
    0x11A mod 0xF9 = 0x21

    0
  • #17 10 Mar 2016 21:22
    grko
    Poziom 32  

    Dobra. Bo to nudne sie już robi:) Autor zamiast wygenerować kilkadziesiąt sekwencji i sprawdzić gdzie algorytm sumy kontrolnej "działa" a gdzie "nie działa" daje nam pojedyncze przykłady i każe bawić się w zgadywanie.

    0
  • #18 10 Mar 2016 21:27
    zonku
    Poziom 13  

    Teraz gdy mam ten "wzór" kolegi _Grzegorza_ porównam obliczenia z tym co wygeneruje oryginalny sterownik dla różnych ciągów znaków. Proszę tylko o cierpliwość.

    Nie, nie pomyliłem się. dla "000" sterownik generuje taką sumę (1A)

    0
  • Pomocny post
    #19 11 Mar 2016 13:16
    michalko12
    Specjalista - Mikrokontrolery

    #STX7E09Kier#CR000#CR1A#ETX

    02-
    37 37
    45 7C
    30 AC
    39 E5
    4B 30
    69 99
    65 FE
    72 70
    0D 7D
    30 AD
    30 DD
    30 0D
    0D 1A <----- CRC
    31-
    41-
    03-


    #STX7E0AKier#CR0000#CR52#ETX

    02-
    37 37
    45 7C
    30 AC
    41 ED
    4B 38
    69 A1
    65 06
    72 78
    0D 85
    30 B5
    30 E5
    30 15
    30 45
    0D 52 <----- CRC
    35-
    32-
    03-


    Jak suma to suma. Chyba już prościej CRC liczyć nie można ;^)

    1
  • #20 11 Mar 2016 13:38
    __Grzegorz__
    Poziom 27  

    :arrow: michalko12: :spoko:

    już poprosiłem o zdjęcie "pomocny post" z mojego posta wyżej....

    Moderowany przez dondu:

    Przekazany Michalko12 wedle życzenia wyrażonego "autoraportem" :)

    0
  • Pomocny post
    #21 11 Mar 2016 14:55
    michalko12
    Specjalista - Mikrokontrolery

    Cytat:
    #STX7E09Kier#CR000#CR1A#ETX


    Jak tak przyjrzeć się temu protokołowi to powiem szczerze, że ręce opadają. Znałem człowieka który MODBUS konwertował na tekst, robił operacje na tekście i dopiero z tekstu wyciągał dane i wpisywał je do zmiennych. Podejście wysokopoziomowych artystów jest dzisiaj wysoce abstrakcyjne. Co mnie w tym protokole zastanawia to adres tablicy, prawdopodobnie "Kier". Tablica nad kierowcą autobusu?

    0
  • #22 11 Mar 2016 15:54
    zonku
    Poziom 13  

    Dokładnie z EN57. Dzisiaj zrobię listę ramek dla większej liczby różnych przypadków.


    Wygenerowałem 13 napisów składających się z samych znaków "0"/

    #STX7E07Kier#CR0#CRB8#ETX
    #STX7E08Kier#CR00#CRE9#ETX
    #STX7E09Kier#CR000#CR1A#ETX
    #STX7E0AKier#CR0000#CR52#ETX
    #STX7E0BKier#CR00000#CR83#ETX
    #STX7E0CKier#CR000000#CRB4#ETX
    #STX7E0DKier#CR0000000#CRE5#ETX
    #STX7E0EKier#CR00000000#CR16#ETX
    #STX7E0FKier#CR000000000#CR47#ETX
    #STX7E10Kier#CR0000000000#CR62#ETX
    #STX7E11Kier#CR00000000000#CR93#ETX
    #STX7E12Kier#CR000000000000#CRC4#ETX
    #STX7E13Kier#CR0000000000000#CRF5#ETX

    Niestety kolego michalko12, nie widzę jeszcze tego jak wyciągnąć tą sumę kontrolną. :|

    Po chwili:

    Chyba już załapuję. Każdy element tego ciągu znaków sumujesz.

    0
  • #23 11 Mar 2016 16:16
    grko
    Poziom 32  

    Widzisz, jakbyś od razu wtrzucił tyle wektorów testowych to widać byłoby, że coś jest nie tak z Twoim pierwotnym algorytmem w 2 miejscach:

    #STX7E07Kier#CR0#CRB8#ETX
    #STX7E08Kier#CR00#CRE9#ETX
    #STX7E09Kier#CR000#CR1A#ETX
    #STX7E0AKier#CR0000#CR52#ETX

    #STX7E0BKier#CR00000#CR83#ETX
    #STX7E0CKier#CR000000#CRB4#ETX
    #STX7E0DKier#CR0000000#CRE5#ETX
    #STX7E0EKier#CR00000000#CR16#ETX
    #STX7E0FKier#CR000000000#CR47#ETX
    #STX7E10Kier#CR0000000000#CR62#ETX

    #STX7E11Kier#CR00000000000#CR93#ETX
    #STX7E12Kier#CR000000000000#CRC4#ETX
    #STX7E13Kier#CR0000000000000#CRF5#ETX

    Tak czy inaczej +1 dla kolegi michalko12 :)

    0
  • #24 11 Mar 2016 16:53
    michalko12
    Specjalista - Mikrokontrolery

    zonku napisał:
    Chyba już załapuję. Każdy element tego ciągu znaków sumujesz.

    NIe każdy. Bez STX (02), ETX(03) i dwóch znaków samego CRC.
    Tutaj mylące było wstawienie samych znaków kontrolnych w takiej formie. Zastanawiało mnie dlaczego Kier miałby być poza sumą kontrolną.

    Jeszcze napisz czy Kier to adres/identyfikator tablicy?

    0
  • #25 11 Mar 2016 18:02
    zonku
    Poziom 13  

    Już odpowiadam. Sterownik wpisuje Kier gdy napis jest jeden centralnie. Gdy wybiorę opcję dwóch linii, zamiast "Kier" jest wpisane KierL1 (górna linia) lub KierL2 (dolna linia).

    0
  • #26 11 Mar 2016 18:06
    michalko12
    Specjalista - Mikrokontrolery

    zonku napisał:
    Sterownik wpisuje Kier gdy napis jest jeden centralnie. Gdy wybiorę opcję dwóch linii, zamiast "Kier" jest wpisane KierL1 (górna linia) lub KierL2 (dolna linia).

    OK, ale zastanawiający jest sens tej "komendy". Z treści można wnioskować, że chodzi o tablicę "przy kierowcy" co byłoby trochę śmieszne.

    0
  • #27 12 Mar 2016 22:10
    piotrek2914
    Poziom 16  

    Co to za program ten hercules? Chciałbym nauczyć sie dobierać do protokołów szeregowych i je analizować.. Tylko nie wiem co kupić i jakimi programami wyłuskiwać informacje. Czy do 200zl mozna mieć coś wartościowego?

    0
  • #28 12 Mar 2016 22:22
    zonku
    Poziom 13  

    Tak naprawdę ja używam zwykłego konwertera RS485-USB i po prostu oglądam jakie informacje wysyłane są. Nie ma tam żadnej analizy.

    0
  • #29 12 Mar 2016 22:55
    piotrek2914
    Poziom 16  

    michalko12 napisał:
    #STX7E09Kier#CR000#CR1A#ETX

    02-
    37 37
    45 7C
    30 AC
    39 E5
    4B 30
    69 99
    65 FE
    72 70
    0D 7D
    30 AD
    30 DD
    30 0D
    0D 1A <----- CRC
    31-
    41-
    03-

    Wyjaśni ktoś laikowi co tu zaszło? :-) Próbuję hex edytorem to ogarnąć ale nie widzę tego co wyżej. Co to za program ten hercules?

    0