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:
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.
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.