Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Komponent ComPort i kompilator Dev-C++ - obsługa rs232

klops_mops 24 Feb 2009 09:44 6739 4
  • #1
    klops_mops
    Level 17  
    Witam!

    Dopiero zaczynam swoją przygodę z programowaniem w C. Z programowaniem miałem trochę wspólnego, ale nigdy z C itp. Najbardziej interesuje mnie kwestia obsługi port COM. Chcę nadawać/odbierać dane właśnie przez rs232. Poszukałem trochę i mam kompilator Dev-C++, oraz komponent ComPort, zastanawiam się teraz czy współpracuje on z tym kompilatorem, czy tylko z Delphi i Borland B++ Bulider. Może są jakieś inne sposoby na obsługę portu RS232? Proszę o tak zwane słowa kluczowe, po których znajdę materiały na temat obsługi portu Com w C.

    Kolejne moje pytanie..
    Znalazłem prosty program w C, wrzucam do kompilatora, kompiluje, wszystko jest ok, po czym chcę uruchomić - powinno pokazać się to czarne okienko Windows'a (linij poleceń), tak też jest, lecz pojawia się na ułamek sekundy, po czym znika. Co jest przyczyna tego?

    Pozdrawiam i z góry dziękuję za wszelką pomoc. Najbardziej zależy mi na obsłudze rs232 :)

    PS. Ewentualnie mógłbym jeszcze pouczyć się obsługi rs232 w Microsoft Visual Studio Basic.
  • #2
    webmortiz
    Level 20  
    Nie wgłębiałem się zbytnio w treść ale wystarczy wpisać "dev C++ rs232" i już masz pełno odnośników, chociażby :

    https://www.elektroda.pl/rtvforum/topic590501.html

    A okno Ci się wyłącza bo kończy się program, musisz na samym końcu main (jeszcze przed return jeśli main nie jest typu void) dać coś co zatrzyma program, coś w stylu while(!kbhit()) <- z tym że tak się robiło w starym ansi C a tutaj to nie wiem, ewentualnie możesz dać instrukcję wczytania klawisza albo oczekiwanie na enter.
  • #3
    User removed account
    User removed account  
  • #4
    klops_mops
    Level 17  
    Bardzo dziękuję za odpowiedzi!

    Dziś pierwszy dzień w którym zacząłem uczyć się C++, udało mi się napisać takie coś:
    
    #include <windows.h>
    #include <stdio.h>
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
       HANDLE hCom;    //uchwyt portu
       DCB dcb;        //konfiguracja portu
       BOOL fSuccess;  //flaga pomocnicza
       INT RS_buf;    //bufor danej
       DWORD RS_ile;   //ilosc bitow wyslanych
       int numer;
       
       //otwarcie portu COM1 z prawami RW
       
              cout << "Wpisz numer portu COM:";
    cin >> numer;
    
    
       
       hCom = CreateFile( TEXT("COM1"), GENERIC_READ | GENERIC_WRITE,
            0,    // exclusive access
            NULL, // default security attributes
            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
     
       if (hCom == INVALID_HANDLE_VALUE)
       {
            printf("Brak polaczenia z portem nr. %u !!   Blad: %d.\n", numer, GetLastError());
         system("PAUSE");
            return 1;
       }
    
       //pobranie aktualnych ustawien portu
        fSuccess = GetCommState(hCom, &dcb);
    
    
       //ustawienie naszej konfiguracji
       dcb.BaudRate = CBR_19200;     // predkosc transmisji
       dcb.ByteSize = 8;             // ilosc bitow danych
       dcb.Parity = NOPARITY;        // brak bitu parzystosci
       dcb.StopBits = TWOSTOPBITS;    // dwa bity stopu
    
       fSuccess = SetCommState(hCom, &dcb);
    
       //wyslanie 1 bajta przez RS
       RS_buf='00000001';
        fSuccess = WriteFile( hCom, &RS_buf, 1, &RS_ile, 0);
        printf ("Wyslalem: %f \n", RS_buf);
        if (!fSuccess)
        {
          printf ("Nie moge wyslac!! %d.\n", GetLastError());
          system("PAUSE");
          return 4;
        }
       system("PAUSE");
       return 0;
    }
    


    Rozumiem działanie programu itp... Chciałbym teraz wybierać numer portu (patrz kod) do zmiennej numer - tak też się dzieje. Natomiast nie wiem jak załadować wartość tej zmiennej do funkcji portu rs232:

    ... hCom = CreateFile( TEXT("COMnumer"),....

    Bardzo dziękuję za poświęcenie czasu, pozdrawiam