rs 232 - odczyt, zapis

0

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;

}

0

z zasady jestem za leniwy na czytanie cudzych kodów (tak jest i w tym przypadku), ale kiedyś odczytywałem coś z COM; może masz zły kabel? chodzi o zapętlenie lini modemowych i tryb null-modem. czyli może np. ty działasz na null-modem a multimetr normalnie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1