Schnittstelle Daten sende win32

skaoson

Grünschnabel
Hallo Leute,
Ich habe dieses Problem, ich möchte die Messergebnisse eines Messgerätes an den PC übertragen(unter Windows) und ich habe dieses Programme geschrieben.
Code:
#include <stdio.h>

#include <stdlib.h>

#include <windows.h>

#include <conio.h>

int main(void) {



	DCB dcb;

	HANDLE hPort;



	COMMTIMEOUTS cto;

	DWORD dw;

	unsigned char buf[0x100];





	dcb.DCBlength=sizeof(DCB);

	dcb.BaudRate=CBR_9600;

	dcb.ByteSize=8;

	dcb.Parity=NOPARITY;

	dcb.StopBits=ONESTOPBIT;

	cto.ReadIntervalTimeout=50;

    cto.ReadTotalTimeoutConstant=50;

	cto.WriteTotalTimeoutMultiplier=10;

	cto.WriteTotalTimeoutConstant=40;



	hPort=CreateFile( "COM1",GENERIC_READ | GENERIC_WRITE,0, NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);



	if (hPort==INVALID_HANDLE_VALUE)

        {

            printf("CreateFile\n"); return 1;

            //printf("Create\n");

        }

      

    while(1)

    {

    if(!ReadFile(hPort, buf, 1, &dw,NULL))

        {

            //error occurred. Report to user.

            //sBuffer[0] = buff;

            //printf("%d\n",sBuffer);

        }

    printf("%d\n",buf[0]);

    }



CloseHandle(hPort);

return 0;

}

Mein Problem ist bei der Ausgabe, es werden einfach Zahlen, die kein Sinn haben ausgegeben ausgeben. Die Ausgabe unter der Hyperterminal ist sehr anderes, da ist sogar Text dabei, da das Messgerät prüft die Sicherheit von elektrischen Geräte. Ich hoffe ihr könnt mir weiter helfen.
mfg
 
Hallo,
Das Programm funktioniert soweit bei mir
Ich habe sogar ein paar Sachen ergänzt. Bei mir hat alles klapp, außer
dass ich von der Schleife nicht rauskomme. Mit einem break komme ich raus, es wird jedoch gar nicht gelesen....
Weiß vielleicht wie man das programmiert

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
int main(void)
{
DCB dcb;
FILE *datei;
HANDLE hPort;
COMMTIMEOUTS cto;
DWORD dw;
unsigned char buf[0x100];
cto.ReadIntervalTimeout=50;
cto.ReadTotalTimeoutConstant=50;
cto.WriteTotalTimeoutMultiplier=10;
cto.WriteTotalTimeoutConstant=40;
hPort=CreateFile( "COM1",GENERIC_READ | GENERIC_WRITE,0, NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

if (hPort==INVALID_HANDLE_VALUE)
{
printf("CreateFile\n"); return 1;
}

GetCommState(hPort, &dcb);
BuildCommDCB("9600,n,8,1", &dcb);
SetCommState(hPort, &dcb);

while(hPort!=NULL)//Ich komme nicht aus der Schleife raus
{
ReadFile(hPort, buf, 1, &dw,NULL);
printf("%c",buf[0]);
datei=fopen("Messung.txt", "a+");
fprintf(datei,"%c",buf[0]);
fclose (datei);
}
CloseHandle(hPort);

return 0;
}
 
Moin,

Bei mir hat alles klapp, außer dass ich von der Schleife nicht rauskomme. Mit einem break komme ich raus, es wird jedoch gar nicht gelesen....

Ich verstehe Dein Problem nicht ganz genau ... was meinst Du denn mit "es wird jedoch gar nicht gelesen" :confused:
Entweder verlässt Du die Scheife wirklich mit einem "break" oder indem Du "hPort" auf NULL setzt!
Ohne diese Abbruchbedingungen hast Du halt eine Endlosschleife :p


Bsp.:
C++:
while(hPort!=NULL)//Ich komme nicht aus der Schleife raus
{
    ReadFile(hPort, buf, 1, &dw,NULL);
    printf("%c",buf[0]);
    datei=fopen("Messung.txt", "a+");
    fprintf(datei,"%c",buf[0]);
    fclose (datei);

// dann entweder
        break;
// oder
        hPort = NULL;
}

Gruß
Klaus
 
Zuletzt bearbeitet von einem Moderator:
Wenn ich diese Abbruchsbedingungen nutze, kann ich leider nicht lesen bzw. wird irgendwie die Schleife sofort abgebrochen. Ich habe beide Varianten versucht.
Vielleicht ist die Bedinung irgendwie falsch, vielleicht muss dort etwas anders als hPort?
Ich habe es auch so versucht
C++:
while(hPort!=NULL)//Ich komme nicht aus der Schleife raus
{
    ReadFile(hPort, buf, 1, &dw,NULL);
    printf("%c",buf[0]);
    datei=fopen("Messung.txt", "a+");
    fprintf(datei,"%c",buf[0]);
    fclose (datei);
 if(kbhit())if (getchar()=='q') break; //nach dem printf von buf, kann ich keine taste drucken :S:S
}
 
Zuletzt bearbeitet von einem Moderator:
Zurück