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.