Hilfe bei der automatischen Abfrage der seriellen Schnittstelle



  • Hallo !

    Ich benötige Hilfe bei der Programmierung einer automatischen Abfrage der seriellen Schnittstelle.

    Im Moment habe ich das Programm so laufen, dass Werte der seriellen Schnittstelle (RFID Karte ist dort angeschlossen) über die Betätigung des Buttons eingelesen und in einem Fenster angezeigt werden.) Ich möchte dieses aber gerne in kurzen Abständen, wiederholt automatisch ablaufen lassen. bedeutet ohne betätigung des vorhandenen Buttons.

    kann mir irgendeiner helfen? Bitte Bitte.... ist wirklich wichtig

    Gruß Heiko



  • Hallo,

    nutze bzw. informiere dich über Timer.

    MfG,

    Probe-Nutzer



  • 😕 mhh....hilft mir leider auch nicht ganz weiter:)

    Ist es in ordnung, wenn ich den bisherigen code hier einfüge und mir kann da einer tipps geben? bitte bitte 🙂

    mfg heiko



  • Feel free. Aber wieso hilft Dir ein Timer nicht?



  • Hallo!

    mhhh....leider scheine ich einfach zu blöd für eine solche Programmierung zu sein.... ich habe mal den bisherigen Code eingefügt....vielleicht kann mir einer helfen!?

    die so gewonnenen Daten bzw Zeichensätze (werden bisher in IDC_Ausgabe angezeigt) sollen in eine Datenbank oder Excel geschickt werden um sie dort weiter verarbeiten zu können. 🙂

    Gruß Heiko

    [code]
    #include "stdafx.h"

    BOOL WINAPI UEBUNG4(HWND hwndDlg, UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
    int n;
    char buf[20];
    char buffer[50];

    switch(uMsg)
    {

    case WM_COMMAND:
    switch (LOWORD(wParam))
    {
    case IDC_INIT:
    wsprintf(buf,"COM11");
    SetWindowText(GetDlgItem(hwndDlg,IDC_EDIT1),buf);
    SioKeyCode(WSC_KEY_CODE);

    n=SioParms(-1,WSC_NoParity,WSC_OneStopBit,WSC_WordLength8);
    wsprintf((LPSTR)buf,"[%d Parms]",n);
    MessageBox(NULL,buf,buf,MB_OK);

    SioReset(-1,1,1);

    n=SioReset(COM11,1024,1024);
    wsprintf((LPSTR)buf,"[%d Reset]",n);
    MessageBox(NULL,buf,buf,MB_OK);

    n=SioBaud(COM11,9600);
    wsprintf((LPSTR)buf,"[%d Baud]",n);
    MessageBox(NULL,buf,buf,MB_OK);

    SioRxClear(COM11);
    SioTxClear(COM11);

    break;

    //Der START-Teil des Programms

    case IDC_START: //diese Abfrage soll automatisiert werden 🙂 Bisher ja über einen Button

    wsprintf(buffer," ");
    SetWindowText(GetDlgItem(hwndDlg,IDC_AUSGABE),buffer);
    SioDTR(COM11,WSC_SET_LINE); //Anforderungsleitung
    Sleep (500);
    SioRTS(COM11,WSC_SET_LINE); //
    Sleep(500);
    SioPutc(COM11,'D');
    SioFlow(COM11,'N');
    n = SioRxQue(COM11);
    // wsprintf((LPSTR)buffer,"[%d RX queue]",n);
    // MessageBox(NULL,buffer,buffer,MB_OK);
    SioGets(COM11,(LPSTR)buffer,n);
    buffer[n]=' \0';
    SetWindowText(GetDlgItem(hwndDlg,IDC_AUSGABE),buffer);
    SioRxClear(COM11);

    break;

    case IDCANCEL:

    SioDone(COM11);
    EndDialog(hwndDlg,wParam);

    return TRUE;
    }

    }

    return FALSE;
    }

    int APIENTRY WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow )

    {
    DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)
    UEBUNG4);

    return 0;
    }



  • Hast du dir mal die Funktion SetTimer bzw. die Nachricht WM_TIMER angeschaut? btw. falsches Forum 😉
    Edit: kannst Du bitte noch die code tags setzen, das machts einfacher!



  • connan schrieb:

    Hast du dir mal die Funktion SetTimer bzw. die Nachricht WM_TIMER angeschaut? btw. falsches Forum 😉
    Edit: kannst Du bitte noch die code tags setzen, das machts einfacher!

    Hallo connan 🙂

    mhhh, ich hoffe jetzt ist das richtig so 🙂 Warum falsches Forum? Ist doch Visual C++ 🙂

    Naja, ich habe schon mit dem Timer versucht rumzuspielen jedoch hab ich nicht hinbekommen.... deswegen frage ich ja hier, denn es gibt hier bestimmt jemanden, der da viiiiiiiel mehr Ahnung hat als ich 🙂 Wenn diese Abfrage schon mal laufen würde, wäre ich sehr sehr dankbar und froh :xmas1:

    Viele Grüße Heiko

    #include "stdafx.h"
    
    //HWND hwnd;
    //HANDLE x,y;
    
    //bool a=FALSE,b=FALSE,c=FALSE;
    
    BOOL WINAPI UEBUNG4(HWND hwndDlg, UINT uMsg,WPARAM   wParam,LPARAM lParam)
    {
    	int n;
    	char buf[20];
    	char buffer[50];
    
    	 //DWORD dwThreadID1;//hinzugefügz am 6.01.10
    switch(uMsg)
        {
    
    case WM_COMMAND:
    	switch (LOWORD(wParam))
    	{
    		case IDC_INIT:
    			wsprintf(buf,"COM11");
    			SetWindowText(GetDlgItem(hwndDlg,IDC_EDIT1),buf);
    			SioKeyCode(WSC_KEY_CODE);
    
    			n=SioParms(-1,WSC_NoParity,WSC_OneStopBit,WSC_WordLength8);  //Parität  geändert hier müssen die Parameter des Messgerätes eingetragen werden
    			wsprintf((LPSTR)buf,"[%d  Parms]",n);
    			MessageBox(NULL,buf,buf,MB_OK);
    
    			SioReset(-1,1,1);
    
    			n=SioReset(COM11,1024,1024);
    			wsprintf((LPSTR)buf,"[%d  Reset]",n);
    			MessageBox(NULL,buf,buf,MB_OK);
    
    			n=SioBaud(COM11,9600);	  // hier wird der Port und die Baudrate eingestellt
    			wsprintf((LPSTR)buf,"[%d  Baud]",n);
    			MessageBox(NULL,buf,buf,MB_OK);
    
    			SioRxClear(COM11);
    			SioTxClear(COM11);
    
    			break;
    
    //Der START-Teil des Programms
    
            case IDC_START:	
    			//x=CreateThread(NULL,0,Zaehler1,(LPWORD)hwndDlg,0,&dwThreadID1);
    
    			//DWORD WINAPI Zahler1(LPVOID hwndDlg) ;
    
                            wsprintf(buffer," ");
    			SetWindowText(GetDlgItem(hwndDlg,IDC_AUSGABE),buffer);
    			SioDTR(COM11,WSC_SET_LINE); 	 //Anforderungsleitung
    			 Sleep (500);
    			 SioRTS(COM11,WSC_SET_LINE);	//
    			 Sleep(500);
    			SioPutc(COM11,'D');
                            SioFlow(COM11,'N');
                            n = SioRxQue(COM11);
               // wsprintf((LPSTR)buffer,"[%d  RX queue]",n);
               // MessageBox(NULL,buffer,buffer,MB_OK);
    			SioGets(COM11,(LPSTR)buffer,n);
    			buffer[n]=' \0';
    			SetWindowText(GetDlgItem(hwndDlg,IDC_AUSGABE),buffer);
                           SioRxClear(COM11);
    
    			break;
    
    //Der Abbruch des Programms
    
    	case IDCANCEL:
    
                 SioDone(COM11);
     EndDialog(hwndDlg,wParam);
    
    	return TRUE;
    }
    	}
    
    return FALSE;
    }
    
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow )
    
    {
    DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)
    UEBUNG4);
    
    	return 0;
    }
    


  • Zauberfuchs2003 schrieb:

    Warum falsches Forum? Ist doch Visual C++ 🙂

    Aber hier wird MFC benahndelt, das was du da machst ist API, wie unschwer am Funktionsnamen der ersten Funktion zu erkennen ist.
    Aber zu deinem Problem mit dem Timer. Du kannst alles, was zyklisch ausgeführt werden soll, in ein separate Timer-Methode (unter MFC heißt das Ding OnTimer) packen. Irgendwo startest du den Timer, der dann eine WM_Timer-Nachricht abschickt, die dann wiederum in der Nachrichtenbehandlung die Timer-Routine startet.



  • Ruf einfach im case IDC_START SetTimer auf. Dann solltest Du auch WM_TIMER Nachrichten bekommen. Wie Du Nachrichten behandelst weisst Du ja offensichtlich schon 😉
    btw.: C++ sieht anders aus, was Du hier machst ist reines C.


Anmelden zum Antworten