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

PC - RS232 - uP 89Cxx51 - VB - wysyłanie bajtu, nie znaku

fafal23 10 Sty 2011 08:50 1850 5
REKLAMA
  • #1 8985109
    fafal23
    Poziom 12  
    Posty: 112
    Pomógł: 1
    Ocena: 1
    Witam

    Zwracam się z pytaniem do kolegów po fachu.
    Trochę poszukałem po necie ale nie znalazłem odpowiedzi na moje pytanie.

    W jaki sposób, za pomocą VB wysłać bajt przez port szeregowy jako zmienną liczbową?

    Dokładam kolejne funkcjonalności do mojego starego projektu. Wcześniej miałem połączone dwa procesory po RS232 i przesyłały pomiędzy sobą dane jako normalne bajty (liczby).
    Teraz dokładam połączenie up - PC.
    Jeśli wysyłam liczbę z uP do PC to PC widzi to jako znak. W VB mogę przekonwertować to do postaci liczby i mam liczbę.
    Jeśli chcę wysłać liczbę z PC do uP to muszę ją wysłać jako znak.
    Używam kontrolki MSComm. Jeśli do txtboxa wpiszę powiedzmy wartość 100 i będę chciał wysłać zawartość txtboxa przez RS232, to kontrolka wyśle trzy bajty jako kody ASCII 1 0 0, a ja chcę jeden bajt!
    Próbowałem to konwertować przed wysłaniem przez CSng potem CByte, na różne sposoby ale wtedy wywala mi błąd że dana nie jest prawidłowego typu.

    Oczywiście można wysyłać 100 jako trzy znaki 1 0 0 ale wtedy muszę przerabiać program po stronie uP i dokładać konwersję powrotną na liczbę 100, a wolałbym tego nie robić. Poza tym po co wysyłać trzy razy więcej bajtów przez port!

    Proszę o pomoc,
    pozdrawiam!
  • REKLAMA
  • #2 8985161
    viayner
    Poziom 43  
    Posty: 10580
    Pomógł: 1557
    Ocena: 2012
    Witam,
    Nie jestem pewien czy dobrze sie rozumiemy.
    Skoro w VB textboxie wpisujesz 100 to VB interpretuje to jako tekst "100" ty chcesz wyslac liczbe 100, to czemu tego nie przekonwertujesz na liczbe funkcja np Val ?
    Nie pamietam dokladnie kontrolki MSComm czy akceptuje liczby czy teksy ale nawet w tym drugim przypadku mozna zrobic tak:

    VAL(text1.text,zmienna)
    MSComm1.Output = Chr$(zmienna)

    to ci powinno wyslac znak o kodzie zawartym w zmiennej "zmienna" no nalezalo by uwzglednic czy aby na pewno text1.text zawiera liczbe ale to masz we wlasnosciach textboxa.
    Pozdrawiam
  • REKLAMA
  • #3 8985192
    fafal23
    Poziom 12  
    Posty: 112
    Pomógł: 1
    Ocena: 1
    Dobrze się rozumiemy :-)
    Z VAL próbowałem ale jak dobrze pamiętam efekt był ten sam.
    Tej drugiej konstrukcji nie próbowałem, jak tylko będę w domu sprawdzę i dam znać.
  • REKLAMA
  • #4 8989177
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    asc(liczba) zamiana na znak
    chr("znak") zamiana na liczbę

    pozr.
  • REKLAMA
  • #5 8989216
    Jaca
    Poziom 32  
    Posty: 1332
    Pomógł: 239
    Ocena: 216
    sivex napisał:
    asc(liczba) zamiana na znak
    chr("znak") zamiana na liczbę

    pozr.


    Popraw to zanim ktoś zobaczy. :)
  • #6 8989330
    fafal23
    Poziom 12  
    Posty: 112
    Pomógł: 1
    Ocena: 1
    Witam.

    Przetestowałem wczoraj i działa na wyrażeniu:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    samo:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    wywala błąd!

    odwrotnie funkcja Asc:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Bardzo dziękuję za pomoc!

    Jednak mam problemy z odbiorem bajtów.
    Wpierw kombinowałem tylko z jedną instrukcją uruchamianą za pomocą timera:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    ale nie mogłem odebrać całej wiadomości tylko jeden bajt (pierwszy)
    potem znalazłem taką konstrukcję:

    Kod: text
    Zaloguj się, aby zobaczyć kod

    i tutaj w jednym okienku, po przecinkach otrzymuję trzy wysłane bajty z uP
    Ale to działa tylko jak ja wyśle do uP a on zaraz odpowie.
    Jeśli program w VB jest uruchomiony a uP sam wyśle komunikat składający się z 3 bajtów to w okienku nic nie ma. Pewnie mam jeszcze jakiś błąd ale muszę nad tym posiedzieć.

    Jak powinna wyglądać prawidłowa funkcja odbierająca bajty w VB?

    Proszę pamiętać o używaniu znaczników code. - arnoldziq
REKLAMA