Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



Chyba portu

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Chyba portu

Autor: almirith

8:58:38 09.11.2011

Zdravim delam na programu ktery testuje jednotlive panely..ty se spousteji postupne v intervalu Time1 a po zapnuti vsech panelu se s casem Time2 ceka na vypnuti pote nasleduji cykly PocC.
Prvni celej cyklus mi udela spravne probehnou vsechny testovane panely ale pri dalsim cyklu mi to skoci na chybu portu.

Pokud byste nekdo vedel co stim tak prosim dejte vedet.diky

/*
seznam komponent:
AUTORADIOBUTTON 104 spustit
AUTORADIOBUTTON 105 pozastavit
AUTORADIOBUTTON 106 pokračovat
AUTORADIOBUTTON 109 ukončit
CTEXT 110 výpis čísla aktuálního cyklu
EDITTEXT 108 zadání Time1
EDITTEXT 113 zadání Time2
EDITTEXT 115 zadání počtu cyklů
PUSHBUTTON 116 uložit
PUSHBUTTON 117 zapnout
PUSHBUTTON 118 vypnout
CTEXT 119 výpis hlášení při kontrole programu


*/
#include
#include
#include
#include
#include
#include
#include
#include "tester2res.h"
#define ID_TIMER 1

/* prototype for the dialog box function. */
static BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
/*
Win main just registers a class of the same type that the dialog class, and
then calls DialogBox. Then it exits. The return value is the return value of
the dialog procedure.
*/

int APIENTRY WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASS wc;
INITCOMMONCONTROLSEX cc;

memset(&wc,0,sizeof(wc));
wc.lpfnWndProc = DefDlgProc;
wc.cbWndExtra = DLGWINDOWEXTRA;
wc.hInstance = hinst;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
wc.lpszClassName = "tester";
RegisterClass(&wc);
memset(&cc,0,sizeof(cc));
cc.dwSize = sizeof(cc);
cc.dwICC = 0xffffffff;
InitCommonControlsEx(&cc);

return DialogBox(hinst, MAKEINTRESOURCE(100), NULL, (DLGPROC) DialogFunc);

}

/*File Handle souboru set */
int *hwndSet;
/* File Handle komponent */
int *hwnd108;
int *hwnd110;
int *hwnd113;
int *hwnd115;
int *hwnd119;

/* File Handle portu COM */
int *hwndCom;

/* název portu COM */
char ComName[5];
char *lpComName = &ComName[0];

/* text hlášení */
char ComHl[18];
char *lpComHl = &ComHl[0];

/* struktury s parametry portu COM */
DCB dcb;
COMMTIMEOUTS CommTimeouts;

/* cesta do aktuálního adresáře */
char FileAct[MAX_PATH+1];
char *lpFileAct = &FileAct[0];

/* text s názvem */
char SetFile[12];
char *lpSetFile = &SetFile[0];

/* příznak nalezení souboru Set*/
int Pnal = 0;


/* byte pro znak */
unsigned char Znak[1];
char *lpZnak = &Znak[0];

/* byte pro počet přijatých nebo vyslaných znaků */
int Poc[1];
int *lpPoc = &Poc[0];

/* příznak zadání Time1 */
int PzT1 = 0;
/* součet příznaků */
int Pzs=0;

/* příznak zadání Time2 */
int PzT2 = 0;
/* zadaná honota Time1*/
int Time1= 0;

/* zadaná honota Time2*/
int Time2= 0;
/*zadaný počet cyklů */
int PocC =0;
/*číslo posledního cyklu */
int Cposl=0;
/* příznak zadání počtu cyklů */
int PzPc = 0;
/* příznak stisku tlačítka zapnout */
int Ptzap = 0;
/* číslo aktuálního cyklu,*/
int Numcyk;
/*příznak uložení nstavení */
int Puln =0;

/*příznak konce cyklu po dosažení Znak [0] =33*/
int PkonC =0;
/* buffer s texty pro zápis do souboru set */
char TxtTime1[6];
char *lpTxtTime1 =&TxtTime1[0];
char TxtTime2[6];
char *lpTxtTime2 =&TxtTime2[0];
char TxtPocC[6];
char *lpTxtPocC =&TxtPocC[0];

/* příznak běhu testů */
int PbehT = 0;
/* pomocná konstanta */
int Pomk = 0;

/* buffer pro text */
char Bute[25];
char *lpBute = &Bute[0];
/* struktury pro parametry portů */
DCB dcb;
COMMTIMEOUTS CommTimeouts;


/*
You should add your initialization code here. This function will be called
when the dialog box receives the WM_INITDIALOG message.
*/
static int InitializeApp(HWND hDlg,WPARAM wParam, LPARAM lParam)
{
sprintf(ComName,"COM1");
sprintf(ComHl,"Otevřen port COM1");
hwnd108 = GetDlgItem(hDlg,108);
hwnd110 = GetDlgItem(hDlg,110);
hwnd113 = GetDlgItem(hDlg,113);
hwnd115 = GetDlgItem(hDlg,115);
hwnd119 = GetDlgItem(hDlg,119);
sprintf(lpSetFile,"tester.set");
SendMessage(hwnd108,EM_SETLIMITTEXT,4,0);
SendMessage(hwnd113,EM_SETLIMITTEXT,4,0);
hwndSet = CreateFile(lpSetFile,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
if(hwndSet != INVALID_HANDLE_VALUE) goto Read;
MessageBox(hDlg,"Chyba při otevření souboru set","chyba",MB_OK);
Read: ReadFile(hwndSet,lpTxtTime1,5,lpPoc,NULL);
ReadFile(hwndSet,lpTxtTime2,5,lpPoc,NULL);
ReadFile(hwndSet,lpTxtPocC,5,lpPoc,NULL);
if(Poc[0] ==5) goto Uloz;
MessageBox(hDlg,"Chyba při čtení ze souboru set","chyba",MB_OK);
goto ComPort;

Uloz: CloseHandle(hwndSet);
Time1 = atoi(lpTxtTime1);
Time2 = atoi(lpTxtTime2);
PocC = atoi(lpTxtPocC);

CloseHandle(hwndSet);
Puln =1;
ComPort: hwndCom = CreateFile(lpComName,GENERIC_READ|GENERIC_WRITE,0,NULL,
OPEN_EXISTING,0,NULL);
if (hwndCom == INVALID_HANDLE_VALUE) goto Onext;
goto Hla1;

Onext: sprintf(ComName,"COM2");
sprintf(ComHl,"Otevřen port COM2");
hwndCom = CreateFile(lpComName,GENERIC_READ|GENERIC_WRITE,0,NULL,
OPEN_EXISTING,0,NULL);
if (hwndCom == INVALID_HANDLE_VALUE) {
MessageBox(hDlg,"Sériový port nelze otevřít",0,MB_ICONERROR);
EndDialog(hDlg,0);
return 1;
}
Hla1: MessageBox(hDlg,lpComHl,"informace",MB_ICONINFORMATION);
GetCommState(hwndCom,&dcb);
dcb.BaudRate = CBR_19200;
dcb.StopBits = 0;
SetCommState(hwndCom,&dcb);
EscapeCommFunction(hwndCom,SETRTS);
EscapeCommFunction(hwndCom,CLRDTR);
GetCommTimeouts(hwndCom,&CommTimeouts);
CommTimeouts.ReadIntervalTimeout=10;
CommTimeouts.ReadTotalTimeoutMultiplier=10;
CommTimeouts.ReadTotalTimeoutConstant=20;
SetCommTimeouts(hwndCom,&CommTimeouts);

Znak[0]= 'T'; /* ve finále zadat 'T' */
WriteFile(hwndCom,lpZnak,1,lpPoc,NULL);
ReadFile(hwndCom,lpZnak,1,lpPoc,NULL);
if( Znak[0]== 'P') goto HlasPrip;
MessageBox(hDlg,"Tester se nehlásí","chyba",MB_OK);
EndDialog(hDlg,0);
return 1;

HlasPrip: MessageBox(hDlg,"Tester připojen","informace",MB_OK);
return 1;
}

/*
This is the main function for the dialog. It handles all messages. Do what your
application needs to do here.
*/
/* procedura časovače, komunikace s přípravkem */
VOID CALLBACK TimerProc(HWND hwndDlg, UINT msg, UINT iTimerID,DWORD dwTime)
{
if(PbehT== 0) goto Nebeh;
WriteFile(hwndCom,lpZnak,1,lpPoc,NULL);
Poc[0] =0;
ReadFile(hwndCom,lpZnak,1,lpPoc,NULL);
sprintf(lpBute,"%u",Znak[0]);
if(Ptzap == 1) goto Vypis;
if(Poc[0] ==1) goto Vypis;
sprintf(lpBute,"Chyba portu");
SetDlgItemText(hwndDlg,119,lpBute);
Vypis: SetDlgItemText(hwndDlg,119,lpBute);
sprintf(lpBute,"%u",Numcyk);
SetDlgItemText(hwndDlg,110,lpBute);
Znak[0] ++;
if(Znak[0]==33) goto KonecC;
if(Znak[0]==34) goto NovyCyk;
if(Znak[0]==35) goto Dect;
return;

Dect:
Znak[0] --;
if(Znak[0]==0)return;


KonecC: if(Ptzap == 1) goto KonecTestu;
KillTimer (hwndDlg,ID_TIMER);
SetTimer(hwndDlg,ID_TIMER,Time2,TimerProc);
return;

NovyCyk: Znak[0]=1;
Numcyk ++;
if(Numcyk == Cposl) goto KonecTestu;
KillTimer(hwndDlg,ID_TIMER);
SetTimer(hwndDlg,ID_TIMER,Time1,TimerProc);
return;
KonecTestu: PbehT= 0;
KillTimer(hwndDlg,ID_TIMER);
if(Ptzap == 1) goto Nebeh;
sprintf(lpBute,"skončen %u.",Numcyk);
SetDlgItemText(hwndDlg,110,lpBute);
Nebeh: return;

}

static BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg) {

case WM_INITDIALOG:
InitializeApp(hwndDlg,wParam,lParam);
SetDlgItemText(hwndDlg,108,lpTxtTime1);
SetDlgItemText(hwndDlg,113,lpTxtTime2);
SetDlgItemText(hwndDlg,115,lpTxtPocC);
return TRUE;
/* By default, IDOK means close this dialog returning 1, IDCANCEL means
close this dialog returning zero
*/
case WM_COMMAND:
switch (LOWORD(wParam)) {
case 104: /*spustit testy*/
if(Puln ==0) goto Nezap;
SetTimer(hwndDlg,ID_TIMER,Time1,TimerProc);
PbehT= 1;
Ptzap = 0;
Znak[0] =1;
Numcyk = 1;
Cposl= PocC;
Nesp: return 1;

case 105: /*pozastavit testy */
PbehT = 0;
return 1;
case 106: /*pokračovat testy */
PbehT = 1;
return 1;

case 109: /* ukončit testy */
KillTimer (hwndDlg,ID_TIMER);
sprintf(lpBute,"skončen %u.",Numcyk);
SetDlgItemText(hwndDlg,110,lpBute);
return 1;

case 108: /*zadání Time1 */
PzT1 = 1;
return 1;

case 113: /* zadání Time2 */
PzT2 = 1;
return 1;

case 115: /* zadání počtu cyklů */
PzPc =1;

return 1;

case 116: /* stisk tlačítka uložit */
if( PzT1 ==0) goto Chyba;
if( PzT2 ==0) goto Chyba;
if( PzPc ==0) goto Chyba;

GetDlgItemText(hwndDlg,108,lpTxtTime1,5);
Time1 = atoi(lpTxtTime1);
GetDlgItemText(hwndDlg,113,lpTxtTime2,5);
Time2 = atoi(lpTxtTime2);
GetDlgItemText(hwndDlg,115,lpTxtPocC,5);
PocC = atoi(lpTxtPocC);
hwndSet = CreateFile(lpSetFile,GENERIC_WRITE,0,NULL,OPEN_ALWAYS,0,NULL);
WriteFile(hwndSet,lpTxtTime1,5,lpPoc,NULL);
WriteFile(hwndSet,lpTxtTime2,5,lpPoc,NULL);
WriteFile(hwndSet,lpTxtPocC,5,lpPoc,NULL);
CloseHandle(hwndSet);
Puln =1;
return 1;

case 117: /* stisk tlačítka zapnout */
if(PbehT == 1) goto Nezap;
if(Puln ==0) goto Nezap;
PbehT= 1;
Znak[0] =1;
Numcyk = 0;
Ptzap = 1;
SetTimer(hwndDlg,ID_TIMER,Time1,TimerProc);
return 1;
Nezap: MessageBox(hwndDlg,"vyplňte a uložte zadání Time1,Time2 a počtu cyklů","chyba",MB_OK);
return 1;


case 118: /* stisk tlačítka vypnout */
PbehT = 0;
KillTimer (hwndDlg,ID_TIMER);
Znak[0] =33;
WriteFile(hwndCom,lpZnak,1,lpPoc,NULL);
sprintf(lpBute,"%u",Znak[0]);
SetDlgItemText(hwndDlg,119,lpBute);
Ptzap = 0;
return 1;

Chyba: MessageBox(hwndDlg,"zkontrolujte a doplňte zadání Time1,Time2 a počtu cyklů","chyba",MB_OK);
return 1;




}
break;

case WM_CLOSE:
CloseHandle(hwndCom);
KillTimer (hwndDlg,ID_TIMER);
EndDialog(hwndDlg,0);
return TRUE;

}
return FALSE;
}

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: