Hilfe benötigt: Serielle Schnittstelle in MFC Anwendung



  • Hallo liebe Experten!

    Ich brauche mal Hilfe. Ich habe eine SDI Anwendung erstellt und möchte jetzt Ereignisgesteuert Daten am COM ausgeben und lesen. Habe mir schon die FAQs durchgelesen... leider geht das alles irgendwie nicht!

    z.B. bekomme ich bei diesem http://www.c-plusplus.net/forum/viewtopic-var-t-is-39047.html nur Fehlermeldungen:

    Warnung	1	warning C4244: '=': Konvertierung von 'INT_PTR' in 'int', möglicher Datenverlust	c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\mfc_test_1view.cpp	94
    Warnung	7	warning C4311: 'Typumwandlung': Zeigerverkürzung von 'HANDLE' zu 'int'	c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\seriellport.cpp	93
    Fehler	6	error C2664: 'CreateFileW': Konvertierung des Parameters 1 von 'char [15]' in 'LPCWSTR' nicht möglich	c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\seriellport.cpp	92
    Fehler	4	error C2143: Syntaxfehler: Es fehlt ';' vor '{'	c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\seriellport.cpp	25
    Fehler	5	error C2447: '{': Funktionskopf fehlt - Parameterliste im alten Stil?	c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\seriellport.cpp	25
    Fehler	3	error C2059: Syntaxfehler: '/'	c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\seriellport.cpp	23
    Fehler	2	error C2039: 'm_error': Ist kein Element von 'CSERIELL'	c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\seriellport.cpp	13
    

    Ich benutze Microsoft Visual Studio 2005 Professional.

    Ich hoffe ihr könnt mir helfen 🙄



  • Ich Rate immer etwas fertiges und erprobtes zu verwenden:
    http://www.codeproject.com/KB/system/serial.aspx

    Vermutlich muss Unix-Tom nur mal seine Klasse TCHAR-fähig machen... und mal ein paar Rückgabewerte prüfen... dann geht es wieder... und irgendwie hat entweder das Forum einige Zeilen verschluckt oder es sind noch ein paar Unschönheiten drin...



  • Ja danke! Den Link habe ich auch schon gesehen... wollte mich nur nicht registrieren.



  • Ich glaub ich bin total besch...

    Habe mir jetzt mal die Dateien von dem Link runtergeladen.
    Wie und Was muss ich denn nun zu meinem Projekt hinzufügen?
    Bekomme folgende Fehler:

    Fehler	3	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CSerialEx::CSerialEx(void)" (??0CSerialEx@@QAE@XZ)" in Funktion ""public: __thiscall CSerialWnd::CSerialWnd(void)" (??0CSerialWnd@@QAE@XZ)".	SerialWnd.obj
    Fehler	4	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerialEx::Open(wchar_t const *,unsigned long,unsigned long,bool)" (?Open@CSerialEx@@UAEJPB_WKK_N@Z)".	SerialWnd.obj
    Fehler	5	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::Setup(enum CSerial::EBaudrate,enum CSerial::EDataBits,enum CSerial::EParity,enum CSerial::EStopBits)" (?Setup@CSerial@@UAEJW4EBaudrate@1@W4EDataBits@1@W4EParity@1@W4EStopBits@1@@Z)".	SerialWnd.obj
    Fehler	6	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::SetEventChar(unsigned char,bool)" (?SetEventChar@CSerial@@UAEJE_N@Z)".	SerialWnd.obj
    Warnung	2	warning C4244: '=': Konvertierung von 'LPARAM' in 'LONG', möglicher Datenverlust	c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\serialwnd.cpp	97
    Warnung	1	warning C4244: '=': Konvertierung von 'INT_PTR' in 'int', möglicher Datenverlust	c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\mfc_test_1view.cpp	94
    Fehler	7	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::SetMask(unsigned long)" (?SetMask@CSerial@@UAEJK@Z)".	SerialWnd.obj
    Fehler	8	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::WaitEvent(struct _OVERLAPPED *,unsigned long)" (?WaitEvent@CSerial@@UAEJPAU_OVERLAPPED@@K@Z)".	SerialWnd.obj
    Fehler	9	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::SetupHandshaking(enum CSerial::EHandshake)" (?SetupHandshaking@CSerial@@UAEJW4EHandshake@1@@Z)".	SerialWnd.obj
    Fehler	10	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::SetupReadTimeouts(enum CSerial::EReadTimeout)" (?SetupReadTimeouts@CSerial@@UAEJW4EReadTimeout@1@@Z)".	SerialWnd.obj
    Fehler	11	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual enum CSerial::EBaudrate __thiscall CSerial::GetBaudrate(void)" (?GetBaudrate@CSerial@@UAE?AW4EBaudrate@1@XZ)".	SerialWnd.obj
    Fehler	12	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual enum CSerial::EDataBits __thiscall CSerial::GetDataBits(void)" (?GetDataBits@CSerial@@UAE?AW4EDataBits@1@XZ)".	SerialWnd.obj
    Fehler	13	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual enum CSerial::EParity __thiscall CSerial::GetParity(void)" (?GetParity@CSerial@@UAE?AW4EParity@1@XZ)".	SerialWnd.obj
    Fehler	14	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual enum CSerial::EStopBits __thiscall CSerial::GetStopBits(void)" (?GetStopBits@CSerial@@UAE?AW4EStopBits@1@XZ)".	SerialWnd.obj
    Fehler	15	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual enum CSerial::EHandshake __thiscall CSerial::GetHandshaking(void)" (?GetHandshaking@CSerial@@UAE?AW4EHandshake@1@XZ)".	SerialWnd.obj
    Fehler	16	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual unsigned long __thiscall CSerial::GetEventMask(void)" (?GetEventMask@CSerial@@UAEKXZ)".	SerialWnd.obj
    Fehler	17	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual unsigned char __thiscall CSerial::GetEventChar(void)" (?GetEventChar@CSerial@@UAEEXZ)".	SerialWnd.obj
    Fehler	18	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::Write(char const *,unsigned long *,struct _OVERLAPPED *,unsigned long)" (?Write@CSerial@@UAEJPBDPAKPAU_OVERLAPPED@@K@Z)".	SerialWnd.obj
    Fehler	19	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::Write(void const *,unsigned int,unsigned long *,struct _OVERLAPPED *,unsigned long)" (?Write@CSerial@@UAEJPBXIPAKPAU_OVERLAPPED@@K@Z)".	SerialWnd.obj
    Fehler	20	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::Read(void *,unsigned int,unsigned long *,struct _OVERLAPPED *,unsigned long)" (?Read@CSerial@@UAEJPAXIPAKPAU_OVERLAPPED@@K@Z)".	SerialWnd.obj
    Fehler	21	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerialEx::StartListener(void)" (?StartListener@CSerialEx@@UAEJXZ)".	SerialWnd.obj
    Fehler	22	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerialEx::StopListener(unsigned long)" (?StopListener@CSerialEx@@UAEJK@Z)".	SerialWnd.obj
    Fehler	23	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual __thiscall CSerialEx::~CSerialEx(void)" (??1CSerialEx@@UAE@XZ)" in Funktion ""public: virtual __thiscall CSerialWnd::~CSerialWnd(void)" (??1CSerialWnd@@UAE@XZ)".	SerialWnd.obj
    Fehler	24	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerialEx::Close(void)" (?Close@CSerialEx@@UAEJXZ)" in Funktion ""public: virtual long __thiscall CSerialWnd::Close(void)" (?Close@CSerialWnd@@UAEJXZ)".	SerialWnd.obj
    Fehler	25	fatal error LNK1120: 22 nicht aufgelöste externe Verweise.	C:\Dokumente und Einstellungen\Admin\Eigene Dateien\Visual Studio 2005\Projects\MFC_Test_1\Debug\MFC_Test_1.exe
    


  • Du musst auch *alle* cpp-Dateien in Dein Projekt aufnehmen!



  • Danke Jochen!

    Das war natürlich der richtige Hinweis! Ich bin leider noch nicht so firm mit all dem Zeugs... Konsolenprojekte ok aber naja. Die nächste Frage kommt bestimmt 😃



  • @ Jochen:

    Hast du schon mal mit dieser Klasse gearbeitet?
    Ich komme damit noch nicht ganz klar.



  • Ja. Was hast Du denn für Fragen?



  • Also ich möchte in meiner Anwendung mehrere COM-Ports benutzen.
    Wo sollte man diese da am besten initialisieren?

    Wie werden die Ports initialisiert?

    Auf Knopfdruck (OnButton1) sollen 3 Byte gesendet werden.
    Wie mache ich das?

    Ich weiss, dass die Fragen wahrscheinlich alle doof sind, aber leider fehlt mir eine richtige Dokumentation zu den Dateien...



  • Willst Du mehrere *gleichzeitig* benutzen, oder nacheinander?
    Wenn gleichzeitig, dann musst Du von der entsprechenden Klasse eben mehrere Instanzen anlegen.

    Und wie man damit umgeht, steht eigentlich im Artikel ausführlich drin, z.B. so:

    CSerial serial;

    // Attempt to open the serial port (COM1)
        serial.Open(_T("COM1"));
    
        // Setup the serial port (9600,N81) using hardware handshaking
        serial.Setup(CSerial::EBaud9600,CSerial::EData8,CSerial::EParNone,CSerial::EStop1);
        serial.SetupHandshaking(CSerial::EHandshakeHardware);
    
        // The serial port is now ready and we can send/receive data. If
        // the following call blocks, then the other side doesn't support
        // hardware handshaking.
        serial.Write("Hello world");
    
        // Close the port again
        serial.Close();
    

    Du schreiben kannst Du auch einen Puffer verwenden:

    char data[] = {0x10, 0x20, 0x30};
    serial.Write(data, 3);  // schreibe 3 Byte
    


  • Hallo und gesundes Neues!!

    Leider funktioniert schon das

    serial.Open(_T("COM1"));
    

    nicht! "Funktion akzeptiert keine 1 Argumente"

    Ich habe jetzt mal das .open() und .Setup() in den Ctor der CAnwendungView klasse geschrieben. Kann man das so machen oder gibts dafür ne bessere Stelle?

    Achso und ich möchte an einer Schnittstelle auf ein Datenpaket warten (bei dem ich nicht weiss, wann es kommt) und an der zweiten Schnittstelle immer (zyklisch) einen Befehl (3Byte) senden und die Antwort darauf empfangen.



  • Du musst Dir den Artikel durchlesen. Da wird das alles beschrieben; vor allem auch das Empfangen mit Hilfe der MFC... da musst Du die *richtige* Klasse verwneden und dem Msg-Filter/Command eintragen...



  • Ok wer lesen kann ist klar im Vorteil! 😃

    Allerdings bin ich halt mit der Windowsprogrammierung noch gaaaanz weit am Anfang, daher stellt sich mir jetzt die Frage:

    The hwndDest argument specifies the window, where the message should be sent to

    Welches Fenster sollte ich hier angeben und wie mache ich das?

    2. Frage(OT):

    wie kann ich einen CString so zusammenbasteln, dass exakt(!) 3 Byte (jeweils unsigned char) darin stehen ohne \n und so nen Firlefanz?



  • 1. Das Fenster-Handle Deines Hauptfensters?
    2.

    CString str(_T("ABC"));
    


  • Hallo Jochen!

    ich habe beim Öffnen des Ports jetzt einfach mal "this" angegeben. Hoffe das stimmt so!? Daten gehen jedenfalls korrekt an den Mikrokontroller raus.

    Jetzt möchte ich Daten empfangen. Wenn ich aber

    ON_WM_SERIAL(OnSerialMsg)
    

    in die Messagemap von CmeineAnwendungView.cpp eintrage, bekomme ich nen Fehler "OnSerialMsg" nichtdeklarierter Bezeichner.

    WAS muss ich denn da WO noch einfügen?



  • Das OnSerialMsg musst Du natürlich in die Klasse einfügen, welche die Msg;ap hat. Und dort wowohl in die h-Datei als auch in die cpp-Datei, wo Du dann machen kannst was Du willst...
    Da sind soch MFC Beispiele dabei... schau die Dir doch mal an...



  • Also ich hab mir das MFC Beispiel jetzt zum xten mal ansgesehen und blicke immernoch nicht durch! Ich habe versucht das so weit wie möglich zu übernehmen. Es lässt sich ohne Fehler kompilieren aber beim Ausführen kommt eine Exception-Meldung.

    Ich will doch nur ein Byte senden und dann eine Nachricht haben, wenn die 3 Antwortbytes da sind 😞

    EDIT:

    Ich habe jetzt hier mal den Code:

    // MFC_Test_1View.cpp : Implementierung der Klasse CMFC_Test_1View
    //
    
    #include "stdafx.h"
    #include "MFC_Test_1.h"
    #include "SerialMFC.h"
    
    #include "MFC_Test_1Doc.h"
    #include "MFC_Test_1View.h"
    
    #include "PortsDlg.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    // CMFC_Test_1View
    
    IMPLEMENT_DYNCREATE(CMFC_Test_1View, CFormView)
    
    BEGIN_MESSAGE_MAP(CMFC_Test_1View, CFormView)
    	ON_COMMAND(ID_EINSTELLUNGEN_PORTS, &CMFC_Test_1View::OnEinstellungenPorts)
    	ON_BN_CLICKED(IDC_BUTTON1, &CMFC_Test_1View::OnBnClickedButton1)
    	ON_BN_CLICKED(IDC_BUTTON2, &CMFC_Test_1View::OnBnClickedButton2)
    	ON_BN_CLICKED(IDC_BUTTON3, &CMFC_Test_1View::OnBnClickedButton3)
    	ON_BN_CLICKED(IDC_BUTTON4, &CMFC_Test_1View::OnBnClickedButton4)
    	ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, &CMFC_Test_1View::OnNMCustomdrawSlider1)
    	ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER1, &CMFC_Test_1View::OnNMReleasedcaptureSlider1)
    	ON_BN_CLICKED(IDC_BUTTON5, &CMFC_Test_1View::OnBnClickedButton5)
    	ON_WM_SERIAL(OnSerialMsg)
    END_MESSAGE_MAP()
    
    // CMFC_Test_1View-Erstellung/Zerstörung
    
    CSerialMFC myPort1;
    
    CMFC_Test_1View::CMFC_Test_1View()
    	: CFormView(CMFC_Test_1View::IDD)
    	, wert(0)
    {
    	// TODO: Hier Code zur Konstruktion einfügen
    
    	myPort1.Open(_T("COM1"),this);
    	myPort1.Setup(CSerial::EBaud115200,CSerial::EData8,CSerial::EParNone,CSerial::EStop1);
    	myPort1.SetupHandshaking(CSerial::EHandshakeOff);
    	myPort1.SetupReadTimeouts(CSerial::EReadTimeoutNonblocking);
    }
    
    CMFC_Test_1View::~CMFC_Test_1View()
    {
    	myPort1.Close();
    }
    
    void CMFC_Test_1View::DoDataExchange(CDataExchange* pDX)
    {
    	CFormView::DoDataExchange(pDX);
    	DDX_Text(pDX, IDC_EDIT1, wert);
    	DDV_MinMaxInt(pDX, wert, 0, 1024);
    	DDX_Control(pDX, IDC_SLIDER1, m_CSlider1);
    	DDX_Control(pDX, IDC_EDIT2, Edit_Fuss);
    }
    
    BOOL CMFC_Test_1View::PreCreateWindow(CREATESTRUCT& cs)
    {
    	// TODO: Ändern Sie hier die Fensterklasse oder die Darstellung, indem Sie
    	//  CREATESTRUCT cs modifizieren.
    
    	return CFormView::PreCreateWindow(cs);
    }
    
    void CMFC_Test_1View::OnInitialUpdate()
    {
    	CFormView::OnInitialUpdate();
    	GetParentFrame()->RecalcLayout();
    	ResizeParentToFit();
    	m_CSlider1.SetRange(0,1023,false);
    	m_CSlider1.SetPos(520);
    }
    
    // CMFC_Test_1View-Diagnose
    
    #ifdef _DEBUG
    void CMFC_Test_1View::AssertValid() const
    {
    	CFormView::AssertValid();
    }
    
    void CMFC_Test_1View::Dump(CDumpContext& dc) const
    {
    	CFormView::Dump(dc);
    }
    
    CMFC_Test_1Doc* CMFC_Test_1View::GetDocument() const // Nicht-Debugversion ist inline
    {
    	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMFC_Test_1Doc)));
    	return (CMFC_Test_1Doc*)m_pDocument;
    }
    #endif //_DEBUG
    
    // CMFC_Test_1View-Meldungshandler
    
    void CMFC_Test_1View::OnEinstellungenPorts()
    {
    	// TODO: Fügen Sie hier Ihren Befehlsbehandlungscode ein.
    	CPortsDlg myPortsDlg;
    	int nRetValue;
    	nRetValue = myPortsDlg.DoModal();
    }
    
    void CMFC_Test_1View::OnBnClickedButton1()	// Handgelenk
    {
    	// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
    	CEdit *pEntry = static_cast<CEdit*>(GetDlgItem(IDC_EDIT1));
    	CString EntryText;
    	pEntry->GetWindowTextW(EntryText);
    	int i;
    	i = _wtoi(EntryText);
    	unsigned char achse, hbyte, lbyte;
    	achse = 0xB2;
    	lbyte = i;
    	hbyte = i>>8;
    	myPort1.Write(&achse,1);
    	myPort1.Write(&hbyte,1);
    	myPort1.Write(&lbyte,1);
    }
    
    void CMFC_Test_1View::OnBnClickedButton2()	// Ellbogen
    {
    	// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
    	CEdit *pEntry = static_cast<CEdit*>(GetDlgItem(IDC_EDIT1));
    	CString EntryText;
    	pEntry->GetWindowTextW(EntryText);
    	int i;
    	i = _wtoi(EntryText);
    	unsigned char achse, hbyte, lbyte;
    	achse = 0xB0;
    	lbyte = i;
    	hbyte = i>>8;
    	myPort1.Write(&achse,1);
    	myPort1.Write(&hbyte,1);
    	myPort1.Write(&lbyte,1);
    }
    
    void CMFC_Test_1View::OnBnClickedButton3()	// Schulter
    {
    	// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
    	CEdit *pEntry = static_cast<CEdit*>(GetDlgItem(IDC_EDIT1));
    	CString EntryText;
    	pEntry->GetWindowTextW(EntryText);
    	int i;
    	i = _wtoi(EntryText);
    	unsigned char achse, hbyte, lbyte;
    	achse = 0xB1;
    	lbyte = i;
    	hbyte = i>>8;
    	myPort1.Write(&achse,1);
    	myPort1.Write(&hbyte,1);
    	myPort1.Write(&lbyte,1);
    }
    
    void CMFC_Test_1View::OnBnClickedButton4()	// Fuss
    {
    	// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
    	CEdit *pEntry = static_cast<CEdit*>(GetDlgItem(IDC_EDIT1));
    	CString EntryText;
    	pEntry->GetWindowTextW(EntryText);
    	int i;
    	i = _wtoi(EntryText);
    	unsigned char achse, hbyte, lbyte;
    	achse = 0xB3;
    	lbyte = i;
    	hbyte = i>>8;
    	myPort1.Write(&achse,1);
    	myPort1.Write(&hbyte,1);
    	myPort1.Write(&lbyte,1);
    	m_CSlider1.SetPos(i);
    }
    
    void CMFC_Test_1View::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
    	// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.	
    
    	*pResult = 0;
    }
    
    void CMFC_Test_1View::OnNMReleasedcaptureSlider1(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
    	int i;
    	i = m_CSlider1.GetPos();
    	unsigned char achse, hbyte, lbyte;
    	achse = 0xB3;
    	lbyte = i;
    	hbyte = i>>8;
    	myPort1.Write(&achse,1);
    	myPort1.Write(&hbyte,1);
    	myPort1.Write(&lbyte,1);
    	*pResult = 0;
    }
    
    LRESULT CMFC_Test_1View::OnSerialMsg (WPARAM wParam, LPARAM /*lParam*/)
    {
    	CSerial::EEvent eEvent = CSerial::EEvent(LOWORD(wParam));
    	CSerial::EError eError = CSerial::EError(HIWORD(wParam));
    
    	if (eEvent & CSerial::EEventRecv)
    	{
    		//// Create a clean buffer
    		//DWORD dwRead;
    		//char szData[101];
    		//const int nBuflen = sizeof(szData)-1;
    
    		//// Obtain the data from the serial port
    		//do
    		//{
    		//	m_serial.Read(szData,nBuflen,&dwRead);
    		//	szData[dwRead] = '\0';
    
    		//	// Scan the string for unwanted characters
    		//	for (DWORD dwChar=0; dwChar<dwRead; dwChar++)
    		//	{
    		//		if (!isprint(szData[dwChar]) && !isspace(szData[dwChar]))
    		//		{
    		//			szData[dwChar] = '.';
    		//		}
    		//	}
    		//} while (dwRead == nBuflen);
    	}
    
    	return 0;
    }
    void CMFC_Test_1View::OnBnClickedButton5()
    {
    	// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
    	unsigned char achse, data[3];
    	achse=0xA3;
    	myPort1.Write(&achse,1);
    	//myPort1.Read(data,3);
    	//CString wert_string;
    	//wert_string.AppendFormat(_T("%i"),MAKEWORD(data[2],data[1]));
    	//Edit_Fuss.SetWindowTextW(wert_string);
    }
    

    Ich bekomme aber keine Message!



  • Wie kann man den diese ON_WM_SERIAL Nachricht mithilfe eines Assistenten hinzufügen? Ich glaube, dass da noch irgendwas fehlt, ich weiss aber nicht was!

    Bitte helft mir!



  • Was hast Du denn für ein Projekt? MDI?
    Bist Du sicher, dass Daten ankommen?
    Änder doch auch noch
     ON_WM_SERIAL(OnSerialMsg)
    nach
     ON_WM_SERIAL(&CMFC_Test_1View::OnSerialMsg)
    


  • Nein ich habe eine SDI Anwendung.
    Wenn ich an den µC den das Byte 0xA3 schicke dann antwortet dieser mit z.B. 0xA3 0x01 0x23. Ich weiss auch dass das funktioniert, da das ganze auch ankommt, wenn ich z.B. das hier mache:

    void CMFC_Test_1View::OnBnClickedButton5()
    {
        // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
        unsigned char achse, data[3];
        achse=0xA3;
        myPort1.Write(&achse,1);
        myPort1.Read(data,3);
        CString wert_string;
        wert_string.AppendFormat(_T("%i"),MAKEWORD(data[2],data[1]));
        Edit_Fuss.SetWindowTextW(wert_string);
    }
    

    Nur wird auch hierbei keine Message ausgelöst.

    NACHTRAG: Ich habe ON_WM_SERIAL(&CMFC_Test_1View::OnSerialMsg) geschrieben und es geht trotzdem nicht. Der Breakpoint bei der Funktion CMFC_Test_1View::OnSerialMsg(...) wird nicht erreicht.


Anmelden zum Antworten