COM PORT
-
Halli hallo allterseits
ich hab mal ein paar fragen zum COM Port Programierung
1. Liegt am COM ausgängen immer 10 V an weil an meine TXD ausgang dauerhaft 10V anliegen.
2.
wie setzte ich am die Klasse am FAq "Ströme lenken" von AJ richtig ein.
ich hab die so eingesetz aber ich glaube ich hab das voll Falsch eingesetz.
es kommt bei mir immer ein Fehler(hab die so um gebaut das es mir dann ein Fehler zurück gibt).
Wär Nett wenn jemand mir ein bisl unetr die arme grefien würde!!!:-)Datei cport.c
.... int main() { ComPort comp,comp2,com3,com4,com5,com6; int port =1; comp.OpenCom(port); comp2.SetTXD(1); comp2.SetTXD(0); Sleep(1000); comp.CloseCom(); return 0; }
das is die Klasse
#include "cport.h" #include <windows.h> #include <iostream> using namespace std; ComPort::ComPort(void) { hCom=INVALID_HANDLE_VALUE; } ComPort::~ComPort(void) { CloseCom(); } HANDLE ComPort::GetHCom(void) { return hCom; } int ComPort::OpenCom(int portnr) { DCB dcb; BOOL res; if(portnr<0||portnr>MAX_PORT) { return(WRONG_PORT); } hCom = CreateFile(GetCP(portnr-1), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if(hCom==INVALID_HANDLE_VALUE) return(OPEN_ERR); res=GetCommState(hCom, &dcb); if(!res) { CloseCom(); return(STATE_ERR); } return(COMM_OK); } void ComPort::CloseCom() { CloseHandle(hCom); hCom=INVALID_HANDLE_VALUE; } BOOL ComPort::SetUART(DCB *dcb) { if(hCom!=INVALID_HANDLE_VALUE) return(SetCommState(hCom, dcb)); else return(false); } BOOL ComPort::SetUART(long baud, char bytes, char parity, char stopbit) { if(hCom!=INVALID_HANDLE_VALUE) { DCB dcb; dcb.BaudRate=baud; dcb.ByteSize=bytes; dcb.Parity=parity; dcb.StopBits=stopbit; return(SetCommState(hCom, &dcb)); } else return(false); } BOOL ComPort::SetTimeouts(COMMTIMEOUTS *timeouts) { if(hCom!=INVALID_HANDLE_VALUE) return(SetCommTimeouts(hCom, timeouts)); else return(false); } BOOL ComPort::SetTimeouts(long interval, int multiplier, int constant) { if(hCom!=INVALID_HANDLE_VALUE) { COMMTIMEOUTS timeouts; timeouts.ReadIntervalTimeout=interval; timeouts.ReadTotalTimeoutMultiplier=multiplier; timeouts.ReadTotalTimeoutConstant=constant; return(SetCommTimeouts(hCom, &timeouts)); } else return(false); } void ComPort::SetDTR(int kz) { if(hCom!=INVALID_HANDLE_VALUE) if(kz==ON) EscapeCommFunction(hCom, SETDTR); // setzen else EscapeCommFunction(hCom, CLRDTR); // Loeschen } void ComPort::SetRTS(int kz) { if(hCom!=INVALID_HANDLE_VALUE) if(kz==ON) EscapeCommFunction(hCom, SETRTS); // setzen else EscapeCommFunction(hCom, CLRRTS); // Loeschen } void ComPort::SetTXD(int kz) { if(hCom!=INVALID_HANDLE_VALUE) { if(kz==ON) EscapeCommFunction(hCom, SETBREAK); // setzen else EscapeCommFunction(hCom, CLRBREAK); // Loeschen } else cout<<"Fehler"<<endl; } void ComPort::SetAll(int kz) { SetAll(kz, kz, kz); } void ComPort::SetAll(int dtr, int rts, int txd) { SetDTR(dtr); SetRTS(rts); SetTXD(txd); } BOOL ComPort::GetCTS(void) { if(hCom!=INVALID_HANDLE_VALUE) { DWORD COMStatus; GetCommModemStatus(hCom, &COMStatus); if(COMStatus & MS_CTS_ON) return ON; return OFF; } else return OFF; } BOOL ComPort::GetDSR(void) { if(hCom!=INVALID_HANDLE_VALUE) { DWORD COMStatus; GetCommModemStatus(hCom, &COMStatus); if(COMStatus & MS_DSR_ON) return ON; return OFF; } else return OFF; } unsigned long ComPort::Send(const char *text) { if(hCom!=INVALID_HANDLE_VALUE) { unsigned long sent; WriteFile(hCom, text, strlen(text), &sent, NULL); return(sent); } else return(0); } unsigned long ComPort::Receive(char *text, size_t maxsize) { if(hCom!=INVALID_HANDLE_VALUE) { unsigned long received; ReadFile(hCom, text, maxsize, &received, NULL); text[received]=0; return(received); } else return(0); } const char *ComPort::GetCP(int index) { static const char *CP[]={"COM1","COM2","COM3","COM4","COM5","COM6"}; if(index>-1&&index<ComPort::MAX_PORT) return(CP[index]); else return(""); }
mfg freaki
-
comp.OpenCom(port); comp2.SetTXD(1);
Eine Instanz (comp) mit COM1 initialisieren und eine andere, nicht initialisierte (comp2) benutzen - was erwartest Du denn Anderes als einen Fehler ("Fehler" in ::SetTXD)?
Blackbird
-
Danke schön an mr unbekannt
es funz superMFG freaki