COM-Gerät



  • Hallo,
    ich habe ein COM-Gerät welches bei Bedienung Daten an den Computer sendet.
    Das Empfangen klappt bei mir wunderbar, jedoch muss ich halt immer einen Button drücken welcher dann eine Zählschleife auslöst und ich dann nur in diesem Zeitraum die Daten bekomme 😛
    Jetzt will ich diese aber immer bekommen, d.h. ich starte das Programm und die Daten sollen dann erscheinen wenn sie gesendet werden, mein Problem ist, dass ich nicht weiß wie das gehen soll 😕
    Könnte mir da vllt jemand helfen?
    saludo
    lokko
    achja, ist ein mfc dialogbasierendes Projekt.



  • Unter "COM" verstehst Du vermutlich eine serielle Schnittstelle, oder?
    Verwende die folgende Klasse, die Benachrichtigt Dich, wenn Daten ankommen:
    http://www.codeproject.com/system/serial.asp



  • Hallo,
    die Seite ist wirklich gut, habe auch den Abschnitt " Using the library with MFC" versucht umzusetzen, da dieser für meine MFC Anweundung geignet ist.
    Jedoch habe ich ein Problem mit dem ON_WM_SERIAL(OnSerialMsg), dort bringt mir VC++ immer den Fehler: error C2065: 'ON_WM_SERIAL' : nichtdeklarierter Bezeichner
    Wie kann ich diesen Fehler beheben? Habe es Kopiert und angepasst, es gab ja die Beispieldatei, jedoch klappt es nicht -.-
    Wäre sehr dankbar für eure Hilfe!
    MfG
    lokko



  • Am einfachsten durch

    #include "SerialMFC.h"
    




  • Hallo,
    gibt es da keine einfachere Lösung? Bei mir kommen, wenn ich die Headerdateien include ein Haufen Fehler 😛
    Bsp.:
    test1.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: virtual __thiscall CSerialWnd::~CSerialWnd(void)" (??1CSerialWnd@@UAE@XZ)

    wenn mir jetzt jemand sagen kann wie ich solche Fehler wegbekomme, wäre ich ihm dankbar oder er eine andere Lösungsmöglichkeit kennt 🙂
    saludo
    lokko



  • Du musst vermutlich libraries mitlinken.



  • Du musst keine Libraries linken, sondern einfach die entsprechenden (oder alle "Serial*") Source-Files in Dein Projekt aufnehmen.



  • Da kannste auch Recht haben (was du vermutlich auch hast ;)).
    Sry, für meine Falschaussage.



  • Hallo,
    habe jetzt echt alles versucht 😞 libs eingebunden und die ganzen serial dateien rein, aber es will nicht gehen 😞 brauche es doch so dringend.
    falls jemand mal lust hat, habe die mfc dateien mal hochgeladen:
    http://www.bigshare.de/download.php?file=1bc68063747c6cb0a12159651d7d2e0b
    würde mich echt freuen, falls jemand es nicht will, hier die fehlermeldungen:

    Test1Dlg.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: virtual long __thiscall CSerialWnd::Open(char const *,struct HWND__ *,unsigned int,long,unsigned long,unsigned long)" (?Open@CSerialWnd@@UAEJPBDPAUHWND__@@IJKK@Z)

    test1Dlg.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: virtual long __thiscall CSerialEx::Open(char const *,unsigned long,unsigned long,bool)" (?Open@CSerialEx@@UAEJPBDKK_N@Z)
    Debug/test1.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise



  • Dann nimm halt bitte noch die Serial.cpp, SerialEx.cpp und SerialWnd.cpp in Dein Projekt auf...

    PS: Und die LIB brauchst Du nicht einzubinden...
    PPS: Und korrigier mal Deine CCOMPort::Receive; da kommt bei mir "not all control paths return a value"



  • Hallo,
    vielen Dank für eure Hilfe, mittlerweile startet das Programm, das einzige was jetzt noch fehlt ist die Datenübertragung, hoffe mal dass ich es noch hinbekommen werde 🙂
    Vielen Dank, seid echt super!
    saludo
    lokko



  • Hallo,
    habe jetzt doch noch ein kleines Problem.
    Ich weiß, dass dieser Code jetzt nicht stimmen kann: http://rafb.net/paste/results/mulhLP38.html
    Wo muss ich jetzt dem Programm beim Starten mitteilen, welcher Port usw? Habe es mal in den Konstruktor eingebaut, wird zwar ein Signal an die 3d maus gesendet, aber danach passiert nichts 😞
    Wäre echt dankbar für eure Hilfe 🙂
    saludo
    lokko



  • Hallo, mittlerweile bin ich weiter gekommen...
    Habe jetzt alles so wie in dem Bsp geschrieben umgesetzt.
    Jetzt habe ich bloß noch ein Problem mit der Open-Funktion.
    Ich weiß nicht genau, was für Parameter ich der übergeben muss 😕
    Im Moment sieht sie so aus: m_serial2.Open(_T("COM1"),0,0,false);
    m_serial2 ist ein Objekt der Klasse CSerial.
    Hoffe es weiß jemand 😕
    saludo
    lokko



  • CSerial Serial;
    
    Serial.Open(iComPort,iBaudRate);
    

    Arbeite auch gerade mit der seriellen Schnittstelle, bei Open mußt du nur den Port und die Baudrate übergeben!

    also zb.

    Serial.Open(3,9600);
    


  • Hallo,
    vielen Dank, jetzt wirds wenigstens erstellt.
    Aber ich bekomme keine Daten.
    In den OnInitDialog habe ich jetzt folgende Zeilen:

    m_serial2.Open(_T("COM1"), GetSafeHwnd());
    serial.Setup(CSerial::EBaud9600,CSerial::EData8,CSerial::EParNone,CSerial::EStop2);
    //Baud 9600 , 8 Databits und zwei Stobits
    

    Die Funktion dann so:

    afx_msg LRESULT CTest1Dlg::OnSerialMsg (WPARAM wParam, LPARAM lParam)
    {
    const CSerialMFC::EEvent eEvent = CSerialMFC::EEvent(LOWORD(wParam));
    const CSerialMFC::EError eError = CSerialMFC::EError(HIWORD(wParam));
    
    if (eEvent & CSerial::EEventRecv)
    	{
    		// Create a clean buffer
    		DWORD dwRead;
    		char szData[8];
    		const int nBuflen = sizeof(szData)-1;
    
    		// Obtain the data from the serial port
    		do
    		{
    			m_serial.Read(szData,nBuflen,&dwRead);
    			//szData[dwRead] = '0'; hiermit überprüfe ich ob er in die Funktion reingeht
    
    			SetDlgItemText(IDC_STATIC, szData);
    		} while (dwRead == nBuflen);
    	}
    return 0
    }
    

    Jetzt bekommt er zwar einen Anstoss, also verändert das Textfeld, aber nicht mit den empfangenen Werten!
    Hoffe einer kann mir helfen!
    saludo
    lokko


Anmelden zum Antworten