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

Czy istnieje lekarstwo na RS232 i BASCOM

TomekMus 13 Kwi 2009 02:26 1649 10
  • #1 6408004
    TomekMus
    Poziom 17  
    Witam

    Chcę napiszać taki programik:

    Const BajtStart   = 10
    Const BajtKoniec = 13
    
    Dim A1 as Byte
    Dim A2 as Byte
    Dim A3 as Byte
    Dim Buffor(16) as Byte
    
    Do
      ...
      Inne instrukcje co się wykonują
      Zajmują np. 3min
      Po czym chcę jak się zakończą to połączyć się z PC i pozmienniać
      zmienne programu i  tak w pętli 
      ...
    
      Call Czytaj_RS232
    Loop
    
    Sub Czytaj_RS232
      A1 = Inkey()                       'Bajt START
      A2 = Inkey()                       'Bajt Rozkaz 
      For i=1 to 16                       '16 Bajtów zmiennych do jakiś rozkazów
         Buffor(i) = Inkey()
      Next I
      A3 = Inkey()                       'Bajt KONIEC
      
      If A1 = BajtStart and A3 = BajtKoniec then
        select case A2
           Case 1:
               ......
           Case 2:
              .............
        end select
      end if
    
    end sub


    I jak wysyłam z PC 19 Bajtów (1+1+16+1) by uruchomić jakiś proces to nie działa mi, nawet jak buforuje Serialin
  • Pomocny post
    #2 6408262
    ZbeeGin
    Poziom 39  
    Wszystko powinno wyjaśnić to:

    ZbeeGin w swoim helpie napisał:
    Jeśli w buforze nie ma żadnego znaku funkcja zwraca zero. Można najpierw sprawdzić czy w buforze transmisji znajduje się jakikolwiek znak. W tym celu należy skorzystać z funkcji ISCHARWAITING().

    Nie sprawdzasz wogóle czy znak jest w buforze, zatem dostajesz głupoty.
  • Pomocny post
    #3 6408271
    PiotrEtenM500
    Poziom 19  
    Moze zrob tak

    
    
    Do
    
                RS = Inkey()                             ' czyta RS232
                If RS = 13 Then Exit Do              ' szuka znak konca linii
                Ramka = Ramka + Chr(RS)         ' Odczytana ramka z PC
    Loop 
    
    
  • Pomocny post
    #4 6408752
    mirley
    Poziom 17  
    Witam

    Możesz spróbować zrobić też w taki sposób:

    
    Do
     D = Inkey() 
     If D > 0 Then     'jeśli coś jest odczytane to wtedy to zapisz do tablicy
       W(n) = D
       Incr N              'przejdz do czytania kolejnego elementu tablicy
       If N = 16 Then
         N = 1
           'wykonywanie operacji na całej tablicy itp.
       End If
     End If
    Loop
    


    cały czas odczytujesz znaki a jeśli bufor nie będzie pusty to wpisze do tablicy kolejny znak. Korzystam z takiej procedury jak musze przesłać do mikrokontrolera kilka bajtów
  • Pomocny post
    #5 6408816
    ZbeeGin
    Poziom 39  
    Co będzie jak jednym z kodów przesłanych do mikrokontrolera będzie znak o kodzie 0? Odp: Nie zostanie zauważony.

    Dlatego INKEY() powinno się poprzedzać operacją sprawdzenia zajętości bufora UDR.
  • Pomocny post
    #6 6408874
    Konto nie istnieje
    Poziom 1  
  • #7 6409328
    TomekMus
    Poziom 17  
    Nadal nic nie działa

    Działa mi tyklo jak nie buforuje transmisji i chce odebrać jeden bajt

    do
      if Ischarwaiting() <> 0 then
        A = Inkey()
        if A = 100 then
           ' ..... I W TEN SPOSÓB TO DZIAŁA
        end if
      end if
    loop



    ale jak chcę odczytać więcej to poprostu nie działa kod
  • #8 6409798
    mirekk36
    Poziom 42  
    TomekMus -> piszą ci i podają sposoby jak na patelni, żeby nie powiedzieć więcej .... - mowa tu o funkcji ISCHARWAITING - a ty z uporem .... godnym siebie nadal to pomijasz i nadal wyrażasz zdumienie i zdziwienie dlaczego mi to nie działa??.

    Nie wspominając już o dziwnym temacie, który powinien być poprawiony bo nie potrzeba żadnego lekarstwa na RS232 i BASCOM - natomiast może być potrzebne lekarstwo (wiedzy) dla programisty, który się dopiero uczy i nie wie jak skorzystać z Bascoma. Bo zapewniam cię, że RS232 i BASCOM - od lat mają się bardzo dobrze i zdrowo ;)
  • #9 6410428
    TomekMus
    Poziom 17  
    mirekk36

    Niestety to co koledzy podają nie sprawdza się. Programuje w Bascom już którąś aplikacje i ciągle są problemy po RS'ie przy odbieraniu wiekszej ilości bajtów i przypisywaniu ich do zmiennych
  • #10 6410580
    ZbeeGin
    Poziom 39  
    Skoro kolega nie pokazuje jak tworzy na bieżąco ten program to skąd mamy wiedzieć, czy robisz to dobrze? To nie forum jasnowidzów.

    Zdawkowe informacje, że zastosowałeś się do propozycji nie dokumentując tego nie pozwala nam Tobie skutecznie pomóc. To samo dotyczy dyrdymałów, że to któryś program i akurat Tobie on nie działa. W ten sposób do niczego nie dojdzie-sz(-my).

    Jak masz stałe "ramki komunikacyjne" to skorzystaj z INPUTBIN i ładuj dane do tablicy.

    Czekamy na konkretny kod! :evil:
  • #11 6410588
    mirekk36
    Poziom 42  
    TomekMus -> a wiesz kto ci doradzał ???? ... sam ZbeeGin , a kto jak kto - ale on na prawdę dużo wie tutaj n/t Bascoma. I ty mówisz, że to co koledzy podają nie sprawdza się ????

    sorki, ale pleciesz mega bzdury. Wiesz ilu ludzi , w tym moja skromna osoba, napisało spore aplikacje do transmisji dużych ilości bajtów , baaaardzo dużych ilości bajtów w Bascomie - i wszystkim działa to bezbłędnie!

    (ty po prostu nie wiesz jak do tego się zabrać i to obojętnie w jakim języku byś to pisał, w związku z tym polecam ci najpierw sporo poczytać - a jak widzę to w twoim przypadku wystarczy kilka razy poczytać helpa do Bascoma , zresztą autorstwa kolegi ZbeeGin - po polsku. A nie opowiadać bajki o tym, że jakiś tam kompilator języka nie radzi sobie z transmisją RS232 , bo to zaczyna być bardzo śmieszne)

    tą drogą daleko nie zajdziesz ;) ....
REKLAMA