Witam !
Mam mały problem i chciałbym aby ktoś z was udzieliłby mi pomocy.
Mam program napisany w C ofc. którego zadaniem jest odczyt danych z com'a i zapisanie ich do pliku. Gdy do com'a nic nie jest podłączone to program sie uruchamia i niby że czeka na jakies dane z com'a ale gdy podłączyłem multimetr protek 506 i ustawiłem w nim rs'a to program wyświetla mi komunikat że nie może otworzyć portu. Poniżej zamieszcze kod programu. Prosze aby ktoś kto programuje w C to przejżał i wskazał ew. błedy. Z góry dziekuje za pomoc i poświeconą uwage...
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <string.h>
#define CBR_110 110
#define CBR_300 300
#define CBR_600 600
#define CBR_1200 1200
#define CBR_2400 2400
#define CBR_4800 4800
#define CBR_9600 9600
#define CBR_14400 14400
#define CBR_19200 19200
#define CBR_38400 38400
#define CBR_56000 56000
#define CBR_57600 57600
#define CBR_115200 115200
#define CBR_128000 128000
#define CBR_256000 256000
/* stale zmienne */
HANDLE hFile,hMutex;
DCB dcb;
DWORD fdwEvtMask;
COMSTAT Stat;
DWORD Errors;
DWORD NumberOfBytesWritten;
DWORD NumberOfBytesRead;
DWORD thread_id;
DWORD WINAPI ReadThreadFunc( LPVOID );
char bufor, temp[16];
int com1, i, k, ilosc_pom, opoznienie;
int ilosc_bitowC1, szybkoscC1, send_bajtC1, parityC1;
unsigned char bajt;
FILE *file, *konfigC1, *konfigC2, *konfigC3, *konfigC4, *pomiary;
/* bebchy programu */
int main(int argc, char argv[])
{
/ for settings */
pomiary=fopen("pomcfg.ini", "r");
if(pomiary==NULL)
{
printf("Nie moge otworzyc pliku pomcfg.ini!\n");
getchar();
return 1;
}
printf("----- Ustawienia pomiarow -----\n");
fgets(temp, 16, pomiary);
ilosc_pom=atoi(temp);
printf("Ilosc pomiarow: %d\n", ilosc_pom);
fgets(temp, 16, pomiary);
opoznienie=atoi(temp);
printf("Opoznienie: %d\n", opoznienie);
printf("-------------------------------\n");
fclose(pomiary);
/* for COM1 */
konfigC1=fopen("cfgC1.ini", "r");
if(konfigC1==NULL)
{
printf("Nie skonfigurowano portu COM1\n");
printf("-------------------------------\n");
}
else
{
printf("---- Ustawienia portu COM1 ----\n");
fgets(temp, 16, konfigC1);
if(strcmp(temp, "TRUE\n")==0)
{
parityC1=1;
}
else
{
parityC1=0;
}
printf("Parity: %d\n", parityC1);
fgets(temp, 16, konfigC1);
ilosc_bitowC1=atoi(temp);
printf("Ilosc bitow: %d\n", ilosc_bitowC1);
fgets(temp, 16, konfigC1);
szybkoscC1=atoi(temp);
printf("Szybkosc: %d\n", szybkoscC1);
fgets(temp, 16, konfigC1);
if(strcmp(temp, "SEND\n")==0)
{
send_bajtC1=1;
}
else
{
send_bajtC1=0;
}
printf("Send bajt: %d\n", send_bajtC1);
printf("-------------------------------\n");
fclose(konfigC1);
}
/* koniec zczytywania ustawień dla portu COM1 /
/ zaczynamy odczyt */
printf("Odczyt rozpoczety\n\n");
hFile=CreateFile("COM1",GENERIC_WRITE|GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
if(hFile==INVALID_HANDLE_VALUE) // sprawdza czy port jest otwarty prawidlowo
{
printf("Nie moge otworzyc portu !\n");
getchar();
return FALSE;
}
SetupComm(hFile,10,10); // inicjalizuje parametry komunikacyjne portu (wskaznik i bufory)
dcb.DCBlength = sizeof(dcb); // aktualny rozmiar struktury DCB
GetCommState(hFile, &dcb); // udostepnienie aktualnych parametrow DCB
//---- parametry komunikacyjne -----
dcb.BaudRate = szybkoscC1; // predkosc transmisji
/* switch dla parzystosci */
switch(parityC1)
{
case 0: dcb.fParity = FALSE; break;
case 1: dcb.fParity = TRUE; break;
default: dcb.fParity = FALSE; break;
}
dcb.StopBits = ONESTOPBIT; // bity stopu
dcb.ByteSize = ilosc_bitowC1; // rozmiar danych
dcb.fDtrControl = DTR_CONTROL_ENABLE; // liniia DTR stale aktywna
dcb.fRtsControl = RTS_CONTROL_ENABLE; // linia RTS nieaktywna - aktywowana podczas nadawania
if(!SetCommState(hFile,&dcb))
{
printf("Nie moge otworzyc portu !\n");
getchar();
return FALSE;
}
GetCommMask(hFile, &fdwEvtMask);
SetCommMask(hFile, EV_RXCHAR);
file=fopen("rs_log.txt","w");
for (k=0; k < ilosc_pom; k++)
{
if (send_bajtC1 != 0)
{
WriteFile(hFile,&bajt,1,&NumberOfBytesWritten,NULL);
printf ("Wyslano jeden bajt na port COM1\n");
}
Sleep(1000);
printf ("Pomiar:", k,"\n");
ReadFile(hFile,&bufor,1,&NumberOfBytesRead,NULL);
fprintf(file,"%c\n",bufor);
printf("Odebralem znak o numerze %i\n",bufor);
}
fclose(file);
CloseHandle(hFile);
return 0;
}