Com Port Ansteuerungs Problem
-
Hallo,
ich habe von einem Projekt die ComPort-Ansteuerung übernommen. Bei mir Funktioniert sie leider nicht mehr egal ob ich ein Objekt in der Klasse erstelle oder ob ich mit new immer ein neues pro klick erzeuge. Kann mir jemand weiterhelfen? oder mir den Fehler im Programm verraten ( ;In dem alten Projekt wird sie so verwendet:
Button1:
CComp* port= new CComp(); port->putchar('2'); delete port;Comp.h:
// Comp.h: Schnittstelle für die Klasse CComp. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_COMP_H__28679F38_7391_4954_A7CF_9356AD1AB01D__INCLUDED_) #define AFX_COMP_H__28679F38_7391_4954_A7CF_9356AD1AB01D__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CComp { public: unsigned char getchar(); void putchar(unsigned char befehl); void close(); BOOLEAN setting(); void open(); CComp(); virtual ~CComp(); HANDLE comport; BOOL m_bPortReady ; }; #endif // !defined(AFX_COMP_H__28679F38_7391_4954_A7CF_9356AD1AB01D__INCLUDED_)Comp.cpp
// Comp.cpp: Implementierung der Klasse CComp. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "stdafx.h" #include "Comp.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif CComp::CComp() { setting(); open(); } CComp::~CComp() { close(); } void CComp::close() { CloseHandle(comport); } BOOLEAN CComp::setting() { DCB dcb; FillMemory(&dcb, sizeof(dcb), 0); //FileHandle für den Comport wird erstellt dcb.DCBlength = sizeof(dcb); if (!BuildCommDCB("baud=9600 parity=N data=8 stop=1", &dcb)) { //Parameter gesetzt } return TRUE; } void CComp::open() { CString gszPort ="COM2"; // der Wert dieser Varible bestimmt den zu verwendenen ComPort comport = CreateFile( gszPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (comport != INVALID_HANDLE_VALUE) { m_bPortReady = SetupComm(comport, 8, 8); } } void CComp::putchar(unsigned char befehl) //sendet 1 Byte (entspricht hier einem Befehl) { //zum µController if(m_bPortReady) { DWORD byteswritten; WriteFile(comport,(LPCVOID)&befehl, 1, (LPDWORD)&byteswritten, NULL); if(byteswritten == 1); //hier kann kontrolliert werden, // ob das Byte komplett geschrieben worden ist } } unsigned char CComp::getchar() //wenn diese Funktion aufgerufen wird muss man beachten, { //dass solange an dieser Stelle gewartet wird bis ein Zeichen unsigned char result = '\0'; //empfangen ist DWORD bytesread; ReadFile(comport, (LPVOID)&result,1,(LPDWORD)&bytesread,NULL); if(bytesread == 1) return result; else return '\0'; }
-
Bei mir Funktioniert sie leider nicht mehr
Ahja... und was funktioniert nicht mehr?
Hast Du gedebuggt?
Gibts Fehler Meldungen?
Luafzeit oder Kompilierzeit Fehler?
...
-
also ich bekomm keine komp. fehler er sendet nur nichts auf dem comport
-
ok laeuft mein atmega hat nur nicht reagiert da der nicht die 2 in char umgewandelt hat sondern 2 als char sendete
danke trozdem
-
mh so einfach wars wohl doch nicht ... ich hab einfach mal 2 pcs verbunden und nach einem neustart des sende pc's sowie des programms bekomme ich nur 00000000 am empfangs pc(simulation für atmega) nachdem ich ein terminal programm gestartet habe und ein zeichen gesendet habe(danach schließen des terminal programms) funktioniert auch mein programm .... hat jemand ne idee woran das liegen kann ? der code ist der gleiche