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

Biblioteka do obsługi portu RS-232 w C++ - prosta jak dla AVR-ów

tomek_programista 26 Sie 2010 16:08 3424 6
REKLAMA
  • #1 8441170
    tomek_programista
    Poziom 19  
    Posty: 447
    Pomógł: 3
    Ocena: 5
    Witam
    Poszukuje biblioteki dzięki której mógł bym wysyłać dane przez port rs-232.
    Najlepiej żeby była tak samo prosta jak ta dla AVR-ów
  • REKLAMA
  • REKLAMA
  • #3 8445254
    tomek_programista
    Poziom 19  
    Posty: 447
    Pomógł: 3
    Ocena: 5
    Ale nie ma pliku-w do tego.
    Czy mógł by mi je ktoś przesłać?
  • REKLAMA
  • #4 8453953
    AVRowiec
    Poziom 18  
    Posty: 361
    Pomógł: 11
    Ocena: 6
    jest dobra książka jak to zrobić pod windows. procedury są bardzo proste.
    Tytuł książki: "Praktyczne programowanie od Pascala i C++ do Delphi i Buildera".
    Można obyć się bez gotowych bibliotek.
  • REKLAMA
  • #6 8471446
    TomaszKro
    Poziom 13  
    Posty: 170
    Pomógł: 2
    Dane przez RS'a można przesyłać przez standartowe funkcje plikowe API.
    Handler do RS'a można otrzymać przy pomocy fukcji CreateFie jako nazwę pliku podać "COM1"-"COM4". Jest też jakaś funkcja do ustawiania parametrów transmisji, ale nie pamiętam nazwy. Trzeba ją znależć w bibliotece MSDN.
  • Pomocny post
    #7 8479719
    marcinosko
    Poziom 14  
    Posty: 136
    Pomógł: 7
    Ocena: 5
    to może ja dam swój kod (pozbierane z kilku stron) i zobaczysz sobie jak mam wysyłanie przez rs, może ci sie przyda :D
    
    
    #include <windows.h>
    #include <stdio.h>
    #include <windows.h> 
    #include <stdio.h> 
    #include <cstdlib> 
    #include <iostream> 
    
    using namespace std; 
    byte  keys[256] = {0};
    
    // otworzenie czytywania klawiatury
    bool scankeys(PBYTE keys, int num=-1) {
        if(num>0)
            keys[num]=GetAsyncKeyState(num);
        else
            for(int i=0; i<256; i++) keys[i]=GetAsyncKeyState(i);
        return true;
        }   
      
        
    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 
       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", "COM1", GetLastError()); 
         system("PAUSE"); 
            return 1; 
       } 
       //pobranie aktualnych ustawien portu 
        fSuccess = GetCommState(hCom, &dcb); 
    
       //ustawienie naszej konfiguracji    
       dcb.BaudRate = CBR_1200;     // predkosc transmisji 
       dcb.ByteSize = 8;             // ilosc bitow danych 
       dcb.Parity = NOPARITY;        // brak bitu parzystosci 
       dcb.StopBits = ONESTOPBIT;    // dwa bity stopu 
    
       fSuccess = SetCommState(hCom, &dcb); 
       
     while ( !keys[0] ) {
        scankeys(keys);
    // od tego momentu wpisujesz dane które ma ci wysłać np. RS_buf=107   
        for(int i=0;i<256;i++) if(keys[i])
        { 
        if (i ==115) {
              RS_buf=107;
              fSuccess = WriteFile( hCom, &RS_buf, 1, &RS_ile, 0); 
              }
        if (i ==116) {
              RS_buf=108;
              fSuccess = WriteFile( hCom, &RS_buf, 1, &RS_ile, 0);      
              }
        if (i ==117) {
              RS_buf=109;
              fSuccess = WriteFile( hCom, &RS_buf, 1, &RS_ile, 0);      
              }
        if (i ==118) {
              RS_buf=110;
              fSuccess = WriteFile( hCom, &RS_buf, 1, &RS_ile, 0);      
              }
        if (i ==119) {
              RS_buf=111;
              fSuccess = WriteFile( hCom, &RS_buf, 1, &RS_ile, 0);      
              }
        if (i ==120) {
              RS_buf=112;
              fSuccess = WriteFile( hCom, &RS_buf, 1, &RS_ile, 0);      
              }
        if (i ==121) {
              RS_buf=113;
              fSuccess = WriteFile( hCom, &RS_buf, 1, &RS_ile, 0);      
              }
        if (i ==122) {
              RS_buf=114;
              fSuccess = WriteFile( hCom, &RS_buf, 1, &RS_ile, 0);      
              }
        if (i ==123) {
              RS_buf=115;
              fSuccess = WriteFile( hCom, &RS_buf, 1, &RS_ile, 0);      
              }
    }
        
    }
       return 0; 
    }
    

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik poszukuje biblioteki do obsługi portu RS-232 w C++, która byłaby prosta w użyciu, podobnie jak te dla AVR-ów. W odpowiedziach zasugerowano różne źródła, w tym książkę "Praktyczne programowanie od Pascala i C++ do Delphi i Buildera", która zawiera proste procedury do programowania RS-232. Wskazano również, że dane można przesyłać za pomocą standardowych funkcji plikowych API, a uchwyt do portu RS-232 można uzyskać przy pomocy funkcji CreateFile, podając jako nazwę pliku "COM1" do "COM4". Użytkownik otrzymał także fragment kodu do wysyłania danych przez RS-232, który może być pomocny w implementacji.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA