Hallo Helfer?
Hilfe!
Ich habe den Auftrag bekommen, Daten eines Gertes abzufragen, welche an einer seriellen Schnittstelle (COM1) angeschlossen ist. (RS-485)
Ich habe schon alle Posts durchgewälzt, jedoch nichts brauchbares gefunden.
Das Device, welches ich am Port angeschlossen habe, sollte bei jeder Bewegung einen anderen Wert senden.....tut es aber nicht....sonder immer das gleiche.
Nämlich: 1243596
mehr nicht.
Ich brauche aber die wirklichen Werte....die bekomme ich aber nicht.....da kann ich das Gerät bewegen, wie ich will.
Was mache ich falsch?
Ich der Code, den ich zum Testen schrieb (nicht lachen, falls das Müll ist):
#include <windows.h>
#include <stdio.h>
int main(int argc,char** argv)
{
DCB dcb;
COMMTIMEOUTS CTO;
COMMCONFIG CC;
ZeroMemory (&dcb, sizeof(dcb));
if(!BuildCommDCB("COM1 baud=19200 parity=N data=8 stop=2",&dcb))
{
MessageBox(0,"Error BuildCommDCB","Test",MB_OK);
}
HANDLE hFile = NULL;
hFile = CreateFile("COM1",GENERIC_READ,0,0,OPEN_EXISTING,0,NULL);
if(hFile == NULL)
{
MessageBox(0,"Error CreateFile","Test",MB_OK);
}
if(!GetCommState(hFile, &dcb))
{
MessageBox(0,"Error GetCommState","Test",MB_OK);
}
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = CBR_19200;
dcb.ByteSize = (BYTE)8;
dcb.StopBits = (BYTE)2;
dcb.fBinary = TRUE;
dcb.fParity = FALSE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fDsrSensitivity = FALSE;
dcb.fTXContinueOnXoff = TRUE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fErrorChar = FALSE;
dcb.fNull = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fAbortOnError = FALSE;
dcb.wReserved = 0;
CTO.ReadIntervalTimeout = 500;
CTO.ReadTotalTimeoutConstant = 500;
CTO.ReadTotalTimeoutMultiplier = 500;
CTO.WriteTotalTimeoutConstant = 500;
CTO.WriteTotalTimeoutMultiplier = 500;
if(!SetCommTimeouts(hFile,&CTO))
{
MessageBox(0,"Error CommTimeouts","Test",MB_OK);
}
if(!SetCommState(hFile,&dcb))
{
DWORD error = GetLastError();
char cerr[64];
char cerr2[16];
itoa((int)error,cerr2,10);
strcpy(cerr,"Error SetCommState: ");
strcat(cerr,cerr2);
MessageBox(0,cerr,"Test",MB_OK);
}
if(!SetDefaultCommConfig("COM1",&CC,sizeof(CC)))
{
MessageBox(0,"Error SetDefaultCommConfig","Test",MB_OK);
}
if(hFile == INVALID_HANDLE_VALUE)
MessageBox(0, "Fehler 1", "", 0);
char buff;
DWORD dlength = 0;
char sBuffer[1024];
while(1)
{
ReadFile(hFile,&buff,1,&dlength,NULL);
sBuffer[0] = buff;
printf("%d\n",sBuffer);
}
return 0;
}
Hilfe!
Ich habe den Auftrag bekommen, Daten eines Gertes abzufragen, welche an einer seriellen Schnittstelle (COM1) angeschlossen ist. (RS-485)
Ich habe schon alle Posts durchgewälzt, jedoch nichts brauchbares gefunden.
Das Device, welches ich am Port angeschlossen habe, sollte bei jeder Bewegung einen anderen Wert senden.....tut es aber nicht....sonder immer das gleiche.
Nämlich: 1243596
mehr nicht.
Ich brauche aber die wirklichen Werte....die bekomme ich aber nicht.....da kann ich das Gerät bewegen, wie ich will.
Was mache ich falsch?
Ich der Code, den ich zum Testen schrieb (nicht lachen, falls das Müll ist):
#include <windows.h>
#include <stdio.h>
int main(int argc,char** argv)
{
DCB dcb;
COMMTIMEOUTS CTO;
COMMCONFIG CC;
ZeroMemory (&dcb, sizeof(dcb));
if(!BuildCommDCB("COM1 baud=19200 parity=N data=8 stop=2",&dcb))
{
MessageBox(0,"Error BuildCommDCB","Test",MB_OK);
}
HANDLE hFile = NULL;
hFile = CreateFile("COM1",GENERIC_READ,0,0,OPEN_EXISTING,0,NULL);
if(hFile == NULL)
{
MessageBox(0,"Error CreateFile","Test",MB_OK);
}
if(!GetCommState(hFile, &dcb))
{
MessageBox(0,"Error GetCommState","Test",MB_OK);
}
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = CBR_19200;
dcb.ByteSize = (BYTE)8;
dcb.StopBits = (BYTE)2;
dcb.fBinary = TRUE;
dcb.fParity = FALSE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fDsrSensitivity = FALSE;
dcb.fTXContinueOnXoff = TRUE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fErrorChar = FALSE;
dcb.fNull = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fAbortOnError = FALSE;
dcb.wReserved = 0;
CTO.ReadIntervalTimeout = 500;
CTO.ReadTotalTimeoutConstant = 500;
CTO.ReadTotalTimeoutMultiplier = 500;
CTO.WriteTotalTimeoutConstant = 500;
CTO.WriteTotalTimeoutMultiplier = 500;
if(!SetCommTimeouts(hFile,&CTO))
{
MessageBox(0,"Error CommTimeouts","Test",MB_OK);
}
if(!SetCommState(hFile,&dcb))
{
DWORD error = GetLastError();
char cerr[64];
char cerr2[16];
itoa((int)error,cerr2,10);
strcpy(cerr,"Error SetCommState: ");
strcat(cerr,cerr2);
MessageBox(0,cerr,"Test",MB_OK);
}
if(!SetDefaultCommConfig("COM1",&CC,sizeof(CC)))
{
MessageBox(0,"Error SetDefaultCommConfig","Test",MB_OK);
}
if(hFile == INVALID_HANDLE_VALUE)
MessageBox(0, "Fehler 1", "", 0);
char buff;
DWORD dlength = 0;
char sBuffer[1024];
while(1)
{
ReadFile(hFile,&buff,1,&dlength,NULL);
sBuffer[0] = buff;
printf("%d\n",sBuffer);
}
return 0;
}