Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Parameter Serielle Schnittstelle
Hallo zusammen, ich möchte Daten vom PC zum Controller senden. In meinem C++ Programm habe ich folgende Einstellungen vorgenommen:
hSerial = CreateFile("COM4",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
...
dcbSerialParams.BaudRate=CBR_19200; //CBR_57600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONE5STOPBITS;//ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
Leider klappt das Senden nicht.:(
Mit den Einstellungen, die ich in Putty vorgenommen habe, klappt es.
Die Einstellungen in Putty habe ich per jpg-Datei beigefügt.
Wo liegt der Fehler?
Vielen Dank im Voraus.
Grüße
datatom
DanielSan
16.08.2011, 09:00
Hi,
muss das wirklich so?
dcbSerialParams.StopBits=ONE5STOPBITS;
Nein, hab ich wieder geändert.
Hier mal der komplette Code:
// SerielleSchnittstelle.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "windows.h"
#include "strsafe.h"
void ErrorExit(LPTSTR lpszFunction);
int i = 1234567;
HANDLE hSerial;
COMMTIMEOUTS timeouts;
DCB dcbSerialParams;
char szBuff;
char szBuff1[8];
char szBuff2[8];
char szBuff3[8];
DWORD dwBytesRead;
DWORD dwBytesWrite;
int n = 8; //4096;
int _tmain(int argc, _TCHAR* argv[])
{
hSerial = CreateFile("COM4",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if(hSerial==INVALID_HANDLE_VALUE)
{
if(GetLastError()==ERROR_FILE_NOT_FOUND)
{
// Generate an error
// Fehlercode ausgeben
if(!GetProcessId(NULL))
{
ErrorExit(TEXT("GetProcessId"));
}
//serial port does not exist. Inform user.
printf("Fehler bei CreateFile. Serial Port existiert nicht!\n");
}
//some other error occurred. Inform user.
printf("Fehler bei CreateFile. Sonstiger Fehler!\n");
}
else
{
printf("Kein Fehler bei CreateFile!\n");
}
//////////////////////////////
if (!GetCommState(hSerial, &dcbSerialParams))
{
//error getting state
printf("Fehler bei GetCommState!\n");
}
else
{
printf("Kein Fehler bei GetCommState!\n");
}
/*dcbSerialParams.BaudRate=CBR_19200; //CBR_57600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
dcbSerialParams.fOutX=1;
dcbSerialParams.fInX=1;*/
dcbSerialParams.BaudRate=CBR_19200;//a; /* oder was Anders */
dcbSerialParams.DCBlength=sizeof(DCB); /* !!! */
dcbSerialParams.fBinary=1;
dcbSerialParams.fOutxCtsFlow=0;
dcbSerialParams.fOutxDsrFlow=0;
dcbSerialParams.fDtrControl=DTR_CONTROL_ENABLE;
dcbSerialParams.fDsrSensitivity=0;
dcbSerialParams.fRtsControl=RTS_CONTROL_ENABLE;
if(!SetCommState(hSerial, &dcbSerialParams))
{
//error setting serial port state
printf("Fehler bei GetCommState beim Parameter belegen!\n");
}
else
{
printf("Kein Fehler bei GetCommState beim Parameter belegen!\n");
}
///////////////////////////////
timeouts.ReadIntervalTimeout=50;
timeouts.ReadTotalTimeoutConstant=50;
timeouts.ReadTotalTimeoutMultiplier=10;
timeouts.WriteTotalTimeoutConstant=50;
timeouts.WriteTotalTimeoutMultiplier=10;
if(!SetCommTimeouts(hSerial, &timeouts))
{
//error occureed. Inform user
printf("Fehler bei Timeout!\n");
}
else
{
printf("Kein Fehler bei Timeout!\n");
}
//////////////////////////////////
while(i < 9999999)
{
i = 0;
if(!ReadFile(hSerial, &szBuff2, n, &dwBytesRead, NULL))
{
//error occurred. Report to user.
printf("Fehler bei ReadFile!\n");
}
else
{ i = atoi(szBuff2);
_itoa_s(i,szBuff3,10);
printf (szBuff3);
printf ("\n");
}
////////////////////////////////
//szBuff[0] = 'r';
i = 1234569;
_itoa_s(i,szBuff1,10);
if(!WriteFile(hSerial, &szBuff1, n, &dwBytesWrite, NULL))
{
//error occurred. Report to user.
printf("Fehler bei WriteFile!\n");
}
else
{
printf (szBuff1);
printf ("\n");
}
}
///////////////////////////////
CloseHandle(hSerial);
////////////////////////////////
system("pause");
return 0;
}
// Fehlerfunktion
void ErrorExit(LPTSTR lpszFunction)
{
// Retrieve the system error message for the last-error code
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
// Display the error message and exit the process
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
(lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR));
StringCchPrintf((LPTSTR)lpDisplayBuf,
LocalSize(lpDisplayBuf) / sizeof(TCHAR),
TEXT("%s failed with error %d: %s"),
lpszFunction, dw, lpMsgBuf);
MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK);
LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf);
ExitProcess(dw);
}
Hubert.G
16.08.2011, 11:19
Wenn ich Verbindungen PC - Kontroller mache, dann schalte ich immer die Flow-Control aus, da sie auf der Kontrollerseite bei mir nie aktiv ist.
Wenn ich Verbindungen PC - Kontroller mache, dann schalte ich immer die Flow-Control aus, da sie auf der Kontrollerseite bei mir nie aktiv ist.
Welchen Parameter meinst du?
Klappt jetzt. Ich habe am Ende \r angefügt und nun werden Daten gesendet. Die Infos habe ich von einem anderen User. Danke an alle die mit Rat und Tat zur Seite waren. Grüße datatom
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.