logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Bascom - Jak zamienić wartości HEX na DEC dla czasu i daty?

Duch__ 09 Gru 2015 17:31 2031 7
  • #1 15225258
    Duch__
    Poziom 31  
    Witam.

    Mam sterownik który wysyła czas i datę w formie HEX tzn czas wynosi przykładowo:

    &H17 &H28 &H56 - co oznacza godzinę 17:28:56

    Jak zmusić Bascoma żeby zamienić te wartości HEX na DEC tak by były rzeczywiste?

    Myślałem o zamianie na STR (string) a potem VAL, ale Bascom formułki typu STR(hex(wartosc)) nie łyka.
  • #2 15225527
    Konto nie istnieje
    Konto nie istnieje  
  • #3 15225560
    Andrzej__S
    Poziom 28  
    Duch__ napisał:
    Mam sterownik który wysyła czas i datę w formie HEX tzn czas wynosi przykładowo:

    &H17 &H28 &H56 - co oznacza godzinę 17:28:56

    Jak zmusić Bascoma żeby zamienić te wartości HEX na DEC tak by były rzeczywiste?


    Nie rozumiem Twojej matematyki. Mnie uczono, że:
    &H17 = 23 (dec)
    &H28 = 40 (dec)
    &H56 = 86 (dec)
    
    czyli jeśli otrzymujesz wartości &H17 &H28 &H56 to oznaczałoby to godzinę 23:40:86.

    Odwrotnie, godzina 17:28:56 w formacie hex powinna wynosić &H11 &H1C &H38, ponieważ:
    17 (dec) = &H11
    28 (dec) = &H1C
    56 (dec) = &H38

    chyba, że ten sterownik wysyła dane w formacie innym, niż sugerujesz.

    Innymi słowami nie rozumiem, co chcesz na co zamieniać i po co.

    EDIT:
    Możesz zdradzić, co to za sterownik?
    Próbowałeś zwyczajnie każdy odebrany bajt podać jako parametr funkcji STR(), a później połączyć te ciągi oddzielając dwukropkiem?
  • #4 15225704
    BlueDraco
    Specjalista - Mikrokontrolery
    Tak poprawnie, to należałoby napisać, że czas przychodzi w postaci BCD, dość typowej dla zegarków wszelkiej maści.
  • #5 15225758
    Konto nie istnieje
    Konto nie istnieje  
  • #6 15225760
    Andrzej__S
    Poziom 28  
    No tak. Chyba jakieś zaćmienie miałem, że nie pomyślałem o BCD :D
    Chyba czas odpocząć.
  • #7 15225905
    Duch__
    Poziom 31  
    Andrzej__S napisał:
    Nie rozumiem Twojej matematyki. Mnie uczono, że:
    &H17 = 23 (dec)
    &H28 = 40 (dec)
    &H56 = 86 (dec)
    
    czyli jeśli otrzymujesz wartości &H17 &H28 &H56 to oznaczałoby to godzinę 23:40:86.

    [...]
    Możesz zdradzić, co to za sterownik?



    Nie pomyliłem się podając wartość &H17 jako godzinę 17 itd. Właśnie w taki sposób czas jest "kodowany".

    Co do sterownika to jest nim centrala alarmowa Satel Integra 128. Podłączony do niej jestem poprzez złącze RS232 w klawiaturze INT-KLCD-GR. Na złączu tym cały czas przekazywane są dane odnośnie stanu centrali alarmowej, jej awarii, sygnałów alarmowych na jednym ze 128 wejść itd. Ogólnie można wykorzystać do automatyki domowej. Nie trzeba wysyłać żadnych danych do centrali, sama nimi sypie. Oczywiście jest możliwe też sterowanie poprzez wysyłanie rozkazów.
  • #8 15226832
    Andrzej__S
    Poziom 28  
    Duch__ napisał:
    Nie pomyliłem się podając wartość &H17 jako godzinę 17 itd. Właśnie w taki sposób czas jest "kodowany".

    Nie pomyliłeś się co do reprezentacji, za to pomyliłeś się, jeśli chodzi o interpretację:
    Duch__ napisał:
    Mam sterownik który wysyła czas i datę w formie HEX....
    Jak zmusić Bascoma żeby zamienić te wartości HEX na DEC tak by były rzeczywiste?

    Sugerując się tym, co napisałeś, starałem się tylko Tobie uświadomić, jak wygląda zamiana HEX na DEC i że nie spełni Twoich oczekiwań:
    17 (hex) = 1*16+7 = 23 (dec)

    Faktycznie trochę ni wstyd :oops:, że nie zauważyłem tego, co tak oczywiste (o czym napisał kolega BlueDraco), że to kod BCD (spróbuję to zrzucić na karb przemęczenia :)). Niemniej w moim odczuciu trochę nieprecyzyjnie przedstawiłeś swój problem i sposób jego rozwiązania (szczególnie chodzi mi tu o sformułowania "wysyła czas i datę w formie HEX" oraz "zamienić te wartości HEX na DEC", choć tak na prawdę chodziło Ci o konwersję BCD do String) i stąd to zamieszanie.

    Co do BCD:
    Nie znam Bascoma, więc nie wiem jak to tam jest rozwiązane, ale pisząc w C (lub nawet w asm) zamiana BCD do stringa jest banalnie prosta i nie wymaga konwersji wartości BCD na wartość typu całkowitego.
    W Bascom nie pomogę, ale zdaje się, że kolega niveasoft przedstawił już jakieś gotowe rozwiązanie.
REKLAMA