• 19.07.2025, 17:15
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

m0p3d

Senior Member

rs232 Programmierung

Dienstag, 16. Juni 2009, 15:00

Ich würde gerne die rs232 unter XP ansprechen. Sprich daten Senden bzw empfangen.

Das ganze sollte so einfach wie möglich funktionieren. Am liebsten würde ich eine Consolenapp schreiben mit Dev C++

http://www.codeproject.com/KB/system/serial_com.aspx
http://www.codeproject.com/KB/system/cserialport.aspx

Das habe ich dazu gefunden anfangen kann ich damit allerdings nichts. Funktioniert in dem Dev compiler anscheind nicht ?
oder was mache ich falsch

elbarto`

God

Dienstag, 16. Juni 2009, 15:48

wenns so einfach wie möglich sein soll würde ich schonmal die finger von c++ lassen ;)
mit python und http://pyserial.wiki.sourceforge.net/pySerial sollte das wohl ziehmlich einfach gehen

m0p3d

Senior Member

Dienstag, 16. Juni 2009, 18:56

Hat einer ne Ahnung warum ich immer das Auslese was ich auch sende ?

Compuler Dev c++


#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <windows.h>

//#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
//#include <bios.h>
//#include <afxwin.h> // serial.cpp : Defines the entry point for the console application.

//#include "stdafx.h"
#include <string.h>
#include "serial.h"

// Flow control flags

#define FC_DTRDSR 0x01
#define FC_RTSCTS 0x02
#define FC_XONXOFF 0x04

// ascii definitions

#define ASCII_BEL 0x07
#define ASCII_BS 0x08
#define ASCII_LF 0x0A
#define ASCII_CR 0x0D
#define ASCII_XON 0x11
#define ASCII_XOFF 0x13
using namespace std;
// variables used with the com port
BOOL bPortReady;
DCB dcb;
COMMTIMEOUTS CommTimeouts;
BOOL bWriteRC;
BOOL bReadRC;
DWORD iBytesWritten;
DWORD iBytesRead;

HANDLE SerialInit(char *ComPortName, int BaudRate)
{
HANDLE hCom;

hCom = CreateFile(ComPortName,
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security
OPEN_EXISTING,
0, // no overlapped I/O
NULL); // null template

bPortReady = SetupComm(hCom, 2, 128); // set buffer sizes


bPortReady = GetCommState(hCom, &dcb);
dcb.BaudRate = BaudRate;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
// dcb.Parity = EVENPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fAbortOnError = TRUE;

// set XON/XOFF
dcb.fOutX = FALSE; // XON/XOFF off for transmit
dcb.fInX = FALSE; // XON/XOFF off for receive
// set RTSCTS
dcb.fOutxCtsFlow = TRUE; // turn on CTS flow control
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; //
// set DSRDTR
dcb.fOutxDsrFlow = FALSE; // turn on DSR flow control
dcb.fDtrControl = DTR_CONTROL_ENABLE; //
// dcb.fDtrControl = DTR_CONTROL_DISABLE; //
// dcb.fDtrControl = DTR_CONTROL_HANDSHAKE; //

bPortReady = SetCommState(hCom, &dcb);

// Communication timeouts are optional

bPortReady = GetCommTimeouts (hCom, &CommTimeouts);

CommTimeouts.ReadIntervalTimeout = 5000;
CommTimeouts.ReadTotalTimeoutConstant = 5000;
CommTimeouts.ReadTotalTimeoutMultiplier = 1000;
CommTimeouts.WriteTotalTimeoutConstant = 5000;
CommTimeouts.WriteTotalTimeoutMultiplier = 1000;

bPortReady = SetCommTimeouts (hCom, &CommTimeouts);
cout<<"RDY";
return hCom;
}

char SerialGetc(HANDLE *hCom)
{
char rxchar;
BOOL bReadRC;
static DWORD iBytesRead;

bReadRC = ReadFile(*hCom, &rxchar, 1, &iBytesRead, NULL);
cout<<"Buchstabe wurde geholt"<<rxchar<<"\n";
return rxchar;
}

void SerialPutc(HANDLE *hCom, char txchar)
{
BOOL bWriteRC;
static DWORD iBytesWritten;

bWriteRC = WriteFile(*hCom, &txchar, 1, &iBytesWritten,NULL);
cout<<"Geschrieben"<<txchar<<"\n";
return;
}

int main()
{
HANDLE my=SerialInit("3",38400); //com1
char letter;
char letter2='F';
HANDLE *ptr;
*ptr=my;
SerialPutc(ptr,'x');
letter2=SerialGetc(ptr);
cout<<"Buchstabe wurde geholt"<<letter2;

getch();

return 0;
}

Ähnliche Themen