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

[c#] Asynchroniczny RS232C, czy jest możliwa realizacja?

nxc 20 Lis 2009 15:43 1705 4
REKLAMA
  • #1 7285863
    nxc
    Poziom 2  
    Posty: 3
    Witam.

    Mam do napisania program który będzie się komunikował za pośrednictwem RS232C ale w trybie asynchronicznym (wymóg urządzenia z którym się łączę). Piszę w MS VS2005.

    Używam klasy SerialPort (http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx) i jak się doczytałem obsługuje ona transfer synchroniczny i "event-driven I/O" (rozumiem że sterowanie za pośrednictwem zdarzeń ale czy to się jakoś przekłada na tryb asynchroniczny? nie bardzo się orientuję).

    Podejrzałem co się dzieje na porcie gdy łączę się z urządzeniem innym programem (oryginalny program do obsługi, działa - ale mało funkcjonalny) i okazuje się że podczas połączenia zanim zacznie się transmisja danych przynajmniej kilkukrotnie zmieniają się parametry transmisji. (Zapis logu w załączniku). Czy jest możliwe żeby program wysyłał w części uznawanej za odpowiedzialną za parametry transmisji komendy do urządzenia? Do podglądu użyłem programu Serial Monitor (by Alex Bessonov).

    Może ktoś z was się orientuje czy jest możliwe zrealizowanie z użyciem tej klasy transmisji asynchronicznej? Czy może trzeba będzie skorzystać z czegoś innego?

    Dzięki z góry za wszelką pomoc, pozdrawiam :)
    Załączniki:
    • log.txt (877 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 7286121
    inot
    Poziom 38  
    Posty: 3626
    Pomógł: 450
    Ocena: 819
    Można skorzystać z elementu OCX "CCommCtrl".
  • REKLAMA
  • #3 7290178
    gmp
    Poziom 19  
    Posty: 434
    Pomógł: 29
    Ocena: 28
    nxc napisał:
    ...
    Mam do napisania program który będzie się komunikował za pośrednictwem RS232C ale w trybie asynchronicznym (wymóg urządzenia z którym się łączę). Piszę w MS VS2005.

    Używam klasy SerialPort .... (rozumiem że sterowanie za pośrednictwem zdarzeń ale czy to się jakoś przekłada na tryb asynchroniczny? nie bardzo się orientuję).
    .............

    Interfejs 232 uzywa asynchronicznego spsobu przesylania danych, co oznacza ze w sygnale elektrycznym niem ma sygnalu zegara, co wymusza ustawienie tej samej predkoscia transmisji w nadajniku i odbiorniku.

    Co do klasy SerialPort to odbieranie z portu mozna obslugiwac za pomoca zdarzen, co tez jest nazwane 'asynchronicznym' bo nie ma nic wspolnego z 'przeplywem' programu ( mozna to nazwac przerwaniem).

    Stad wniosek ze to samo pojecie w odniesieniu do interfejsuRS i VS2005 ma zupelnie inne znaczenie ajak widze Tobie sie to myli.
    Idac dalej , nie masz wplywu na interfejsRS bo czy chesz czy nie , on jest i bedzie asynchroniczny. Twoje zadania to ustawic takie parametry transmisji jakich oczekuje urzadzenie do ktorego gada twoj program.
    A twoj program to do wyboru, jak go napiszesz taki bedzie .
    Wyprzedzajc problem jaki napotkasz uzywajc Event tzn crossthread, to w programie bedziesz musial uzyc delagatow i metody InvoekRequired (czy jakos tak).
  • REKLAMA
  • #4 7292380
    jestam
    Specjalista Automatyk
    Posty: 1799
    Pomógł: 210
    Ocena: 145
    Cytat:

    Wyprzedzajc problem jaki napotkasz uzywajc Event tzn crossthread, to w programie bedziesz musial uzyc delagatow i metody InvoekRequired (czy jakos tak).

    Taka informacja to dezinformacja. Tłumacząc na polski: klasa SerialPort używa dodatkowych wątków, w których zgłasza zdarzenia. Modyfikację kontrolek GUI można zrobić tylko z wątku, który je utworzył (czyli głównego wątku programu). Chcąc zmienić coś w kontrolkach na formularzu w metodzie obsługującej zdarzenia z SerialPort, trzeba skorzystać z metody Invoke():

    
    if(myform.InvokeRequired())
    {
        Invoke((MethodInvoker) delegate {
            myform.myTextBox.Text = "text";
        });
    }
    


    Pisane z palca, nie testowane.

    Do autora: SerialPort będzie OK, ale możesz użyć też tego
  • #5 7311238
    nxc
    Poziom 2  
    Posty: 3
    Dzięki za okazaną pomoc. Okazało się jednak że problem leży zupełnie gdzie indziej ;) Aczkolwiek zapewne wasze rady przydadzą się w późniejszym czasie :)

    Pozdrawiam
REKLAMA