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

Problemy z odczytem danych RS232 w C++ Builder - brak wartości

Michalus Avrus 12 Paź 2011 07:45 1215 0
REKLAMA
  • #1 10018277
    Michalus Avrus
    Poziom 9  
    Posty: 38
    Witam
    Pierwszy raz pracuje na builderze i zaczely sie problemy z komunikacja przez rs232. Niestety nie wyswietla mi wartosci lub nie zczytuje informacji z rs232.

    Kod programu:

    
    
    void __fastcall TKom::BitBtn_PolaczenieClick(TObject *Sender)
    {
    
     HANDLE hNumPort;
     char lpBuffor_read[1];
     DWORD RS_ile;
     DCB dcb;
     int retGetCommState;
    
    char bufor_nowy[256];
    
    for( int i = 0; i <= sizeof(bufor_nowy) ; i++) { bufor_nowy[i] = '0'; }
    
    
    hNumPort = CreateFile("COM1", GENERIC_WRITE |
    GENERIC_READ, 0, NULL,
    OPEN_EXISTING, 0, NULL);
    
    if(hNumPort == INVALID_HANDLE_VALUE) {
    
    Label_odczyt->Caption = "Error: CreateFile";
    Label_odczyt->Caption += GetLastError();
    
    }
    //SecureZeroMemory(&dcb, sizeof(DCB));
    
    //retGetCommState = GetCommState(hNumPort , &dcb)
    
    if(!GetCommState(hNumPort , &dcb)) {
    
    Label_odczyt->Caption = "Error: GetCommState";
    Sleep(2000);
    }
    
    dcb.DCBlength = sizeof(dcb);
    
    dcb.BaudRate = CBR_9600;
    dcb.fParity = FALSE;
    dcb.Parity = EVENPARITY;
    dcb.StopBits = ONESTOPBIT;
    dcb.ByteSize =8;
    
    
    
    dcb.fDtrControl = DTR_CONTROL_ENABLE;
    dcb.fRtsControl = RTS_CONTROL_ENABLE;
    
    dcb.fOutxCtsFlow = FALSE;
    dcb.fOutxDsrFlow = FALSE;
    dcb.fDsrSensitivity = FALSE;
    dcb.fAbortOnError = FALSE;
    dcb.fOutX = FALSE;
    dcb.fInX = FALSE;
    dcb.fErrorChar = FALSE;
    dcb.fNull = FALSE;
    
    
    if(!SetCommState(hNumPort, &dcb) ) {
    
    Label_odczyt->Caption = "Error: SetCommState";
    Sleep(2000);
    }
    
    if(!ReadFile(hNumPort, &bufor_nowy, sizeof(bufor_nowy), &RS_ile, 0) ) {
    
    Label_odczyt->Caption = "Error: ReadFile";
    
    Sleep(2000);
    }
    
    CloseHandle(hNumPort);
    
    Label_odczyt->Caption = bufor_nowy;
    
    
    }
    
    



    Program ma za zadanie zczytac wartosc z rs232 oraz wyswietlicz ja na Label_odczyt. Układ nadaje sygnal po rs232 (sprawdzone terminalem). Zadne bledy nie wystepuje ( sprawdzone instrukcjami warunkowymi umieszczonymi w kodzie powyzej). W Visual c++ program funkcjonuje. Byl pobrany z aplikacji ktora wczesniej pisałem. Niestety nie wiem gdzie szukać przyczyny. Pozdrawiam.

    P.S. Poprawka w Visual tez nie działa. Wyrzuca mi same zera z bufora (bufor_nowy jest zerowany na poczatku funkcji).

    Dodano po 2 [godziny] 5 [minuty]:

    Problem rozwiazany. Za funkcja CreateFile należało dodać opóźnienie Sleep(400).
    Pozdrawiam.
  • REKLAMA
REKLAMA