?? 006c6438a95f001d1289bbda6de18a35
字號:
/*$Log$*//*** ---------------------------------------------------------------------** Copyright (c) Bosch Rexroth AG 1997 - 2007** All Rights Reserved** ---------------------------------------------------------------------**** File: dab_h_startgra.c** ** Responsible: AB** ** Description of functions:** This file is the main File of the graphic task.** It contain the needed steps to interface to NC Kernel** on the basis of NCS and to interface to the Tilcon EVE** There are a few platform-specific commands that need ** to be compiled into the program: ** We define one of the following according to which ** platform we use:** 1. #define CC_TRT_DOS and #define HWDS_WINDOWS for** a Win32 applications** OR** 2. #define CC_TRT_VXWORKS for an applications running ** on BRC Target whith Vxworks**** ** in this file we will:** - Start the GUI task ** - Connect the GUI task to NCS ** - InitializeApp (Start the Tilcon Engine EVE,** - Open channel to the EVE,Initialize Callbacks** Loead Window...)** - wait for events from EVE** - call callback Funktion as example to get ** axis values, axis number.... ** ** ---------------------------------------------------------------------*//*F*/
/*======================================================================
** >>>> Include all necessary headfiles <<<<
** ==================================================================== */
#include "dab_h_allheadfiles.h"
#include "dab_h_callbacks.h" /*the Header file with Callback Funktions*/
/*F*//*======================================================================** >>>> Local definitions <<<<** ==================================================================== *//* Plattform specifacation for Tilcon EVE */#ifdef CC_TRT_VXWORKS /* if the Engine (EVE) will run on Vxworks*/#define OS_TYPE TRT_VXWORKS#endif#ifdef CC_TRT_DOS /*if the Engine (EVE) will run on a windows PC*/#define OS_TYPE TRT_MS_WINDOWS #endifEXPORT pid_t TRT_cid;EXPORT TRT_ReceiveData rec_data;EXPORT int EngineStatus;
/*
************************************************************************
** > AUTHOR : Jiang
** > The define variable and function is only used in the CPL function test.
*/
#define MAXWatchNr 40 /*we can monitor only 40 watchponts at same time.*/
char FileFoldBuf[100]; /*it will save Directory you select.*/
char Currentfileselect[20]=""; /*It will save the file name only.*/
long WatchPointRecordNr=0; /*Use it help me to operate the Watchpoint record.*/
struct WatchPoint_ID{
char Name[20]; /*"@1"*/
int ID; /*save ID gived by system*/
int Index; /*watchpoint element place in the array.*/
int Value; /*watchpoint element value in the array.*/
}WatchPointRecord[MAXWatchNr]; /*Use it to Save the Watchpoint*/
/*Note: Some changing of MainEventLoop is to support the directroy tree*/
/*
************************************************************************
**This function can help us to get correct file path.
**For example "\usr\user"--->"/usr/user"
*/
void ChangeChar(char *Setence,char oldchar, char newchar)
{
char* p= Setence;
while(*p !='\0')
{
if(*p == oldchar)
*p = newchar;
p++;
}
}
void Find_PermVariable(char* source)
{
char* Hold=source;
char* p;
char* q;
q=Hold;
while(*q!=0) q++;
p=q;
while(*p!='@')p--;
TRT_SetValues(TRT_cid2, "WatchSelect",
TRT_ATT_TEXT,p,
NULL);
}/*F*//*************************************************************************** >AUTHOR : AB** FUNCTIONNAME : ChangeConnectSymbol** ** >DESCRIPTION: this funktion is an example function for Display and hid** the connect Symbol on the Window** ** >NOTES:** ** >PARAMETER: status =1 -> connected to target** =0 -> Disconnected** ** >RETURN VALUE:** ** >INCLUDES:** */LOCAL void ChangeConnectSymbol(char status){ long Error=0; if (status ==1) { /* Hide the disconnected symbol */ Error=TRT_Hide(TRT_cid, DISCONNEC_SYMBOL_ICON_ID); /* Display the connected symbol*/ Error+=TRT_Display(TRT_cid, CONNEC_SYMBOL_ICON_ID); } else if(status==0) { /* Hide the connect symbol */ Error=TRT_Hide(TRT_cid, CONNEC_SYMBOL_ICON_ID); /* Display the disconnect symbol*/ Error+=TRT_Display(TRT_cid, DISCONNEC_SYMBOL_ICON_ID); } if(Error) {/*Traitment of Error*/ }} /* OF ChangeConnectSymbol *//*F*//*************************************************************************** >AUTHOR : AB** FUNCTION NAME : On_Chan_Lang_Button** ** >DESCRIPTION: Example function for changing the GUI Language* ** >NOTES:** ** >PARAMETER:** ** >RETURN VALUE:** ** >INCLUDES:** */LOCAL void On_Chan_Lang_Button(void)
{
static char LanguageFlag=0;
long Error=0;
char TextBuffer[100];
/*China Language */
if(LanguageFlag==0)
{
/* Call the Tilcon funkion to load a Language file in the GUI */
/*the Language file coud be created with Tilcon Interface Builder.*/
/* For mor informations see the Tilcon Help*/
/* Load China Language*/
Error= TRT_ChangeLanguage(TRT_cid,"HermesGuiLang_086.twl",0);
/* Change the system Language */
if(Ncs_Bap_IniWeraLang_Cmd("086")) /* 086 for China language*/
{/* Traitement of the error*/}
/************** Example A ***********************/
/* Report an error or warning with a number xxxxx
** this number muss be previously intred into the WERA database
** the begin of the error numbers is 100000*/
Ncs_WeaSetErrWar(100004,/* Error Number*/
/* note: the Error number mus be defined
** and ties to an error text.*/
""); /* string used to specify the format of
**additional optional parameter */
Ncs_WeaSetErrWar(100002,"");
/************** END Of Example A ****************/
/************* Example B *******************/
/* get a text from NC and display it on the GUI */
/*the text will be in the curent Language(in this case china Lang)*/
/* if ther is no text defined to the text number you will get*/
/*a default syntax= "Text fehlt"*/
/* get the text from NC Kernel over NCS */
Ncs_Bap_nlscat(40100, /*Text number*/
0,/*Codepage*/
TextBuffer,/*pointer on the Buffer to store the text*/
100); /* Size of the text to store */
/*set the Text on the GUI*/
(void)TRT_SetValues (TRT_cid,
"ErrorDeskr_Multitext1",
TRT_ATT_TEXT,
TextBuffer, NULL);
/************** END Of Example B ****************/
LanguageFlag=1;
}
/* English Language*/
else
{
LanguageFlag=0;
/*Load English Language for GUI */
Error= TRT_ChangeLanguage(TRT_cid,"HermesGuiLang_044.twl",0);
/* Change the system Language */
if(Ncs_Bap_IniWeraLang_Cmd("044")) /** 044 is for English*/
{/* Traitement of the Error*/
}
/************** Example A ***********************/
Ncs_WeaSetErrWar(100001,"Tetst1");
Ncs_WeaSetErrWar(100002,"Tetst2");
/************** END Of Example A ****************/
/************* Example B *******************/
/* get a text from NC and display it on the GUI */
/*the text will be in the curent Language(in this case English)*/
/* if ther is no text defined to the text number you will get*/
/*a default syntax= "Text missing"*/
/* get the text from NC Kernel over NCS */
Ncs_Bap_nlscat(40013, /*Text number*/
0,/*Codepage*/
TextBuffer,/*pointer on the Buffer to store the text*/
100); /* Size of the text to store */
/*set the Text on the GUI*/
(void)TRT_SetValues (TRT_cid,
"ErrorDeskr_Multitext1",
TRT_ATT_TEXT,
TextBuffer, NULL);
/************** END Of Example B ****************/
}
if(Error)
{
/*Traitment of Error*/
}
} /* OF On_Chan_Lang_Button *//*F*//*************************************************************************** >AUTHOR : AB** FUNCTIONNAME : ConnectGUItoNCS** ** >DESCRIPTION: Connect the GUI task to NCS** ** >NOTES: there is a deference in the call of NC_OPEN()** between the PC variante and the BRC Target variante. ** ** >PARAMETER:** ** >RETURN VALUE: No one** ** >INCLUDES:** */LOCAL void ConnectGUItoNCS(void){ Ncs_Mbx_t HMI_EventHandlerMailbox;/* MailBox for receive ncs Responce*/ #ifdef HWDS_WINDOWS HWND hWnd = (HWND) NULL;#endif /* get the ID of the mail box of the event handler mailbox created from event handler task*/ dab_h_GetEvHanMailbox(&HMI_EventHandlerMailbox); #ifdef HWDS_WINDOWS /* for PC variante the hwnd is the ID of the Mailbox */ hWnd = (HWND) HMI_EventHandlerMailbox; /* Register the GUI-Task by NCS */ /* for synchron and asynchron Requests */ /*the response of synchron requests will be Processed in this Task*/ /*the response of asynchron requests will be*/ /* Processed in Event Handler Task*/ if (Ncs_Open(NCS_SYNC_LENT_C,/*synchronous and asynchronous requests */ /* For asynchronous requests, a socket that has */ /* already be created for asynchronous requests.*/ /* we use this parameter because an Ncs_open with*/ /* NCS_SYNC_ASYNC_C */ /*is already occurred in evant handler Task.*/ // "192.168.1.186", /* IP Adresse of the Target.*/
"10.110.241.88",
//"localhost", /*change as necessary*/ hWnd, /* Windows handle of the calling program*/ WM_ASYNC_READ, /* Message that is sent to the*/ /*hWnd window in*/ /*the case of an asynchronous response.*/ /* The MessageNumber must be higher than*/ /* WM_USER + 0x100*/ /* we use #define WM_ASYNC_READ (WM_USER+0x101);*/ 5) /*Time in seconds after which a timeout shall */ /*occur for a */ /*synchronous call. 0 disables the timeout.*/ != Ncs_ErrOk) { /* Error Traitement */ Ncs_WeaSetCritSysErr(0,""); }#else /* GUI is running on Target */ /*the NCS_Open will be called as below*/ if (Ncs_Open( NCS_SYNC_LENT_C, &HMI_EventHandlerMailbox, TRUE, /*ResourceWaitMode:what to do if the Sendepuffer*/ /* is occupied bei belegten Sendepuffern.*/ /* TRUE -> wait of free Sendebuffer*/ /* FALSE-> dont wait,beack off with Error*/ 0) /*Time in seconds after which a */ /*timeout shall occur for a */ /*synchronous call. 0 disables the timeout.*/ != Ncs_ErrOk) { /* Error Traitement */ Ncs_WeaSetCritSysErr(0,""); }#endif} /* OF ConnectGUItoNCS *//*F*//*************************************************************************** >AUTHOR : AB** FUNCTIONNAME : Dab_h_WaitForEngineStart** ** >DESCRIPTION: the event handler task will try to open a channel to ** Tilcon EVE but for a communication with Tilcon EVE the EVE** mus be started first.this function synchronise the start. ** ** >NOTES: this function will be called from event handler task ** in module dab_h_evhan.c** ** >PARAMETER: void** ** >RETURN VALUE: void ** ** >INCLUDES: "ab_h_startgra.h"** */EXPORT void Dab_h_WaitForEngineStart(void){ boolean WaitingForEngine= TRUE; while (WaitingForEngine == TRUE) { if(EngineStatus == 0) { #ifndef HWDS_WINDOWS (void)Pxr_Delay(500,1); /* Wait */#endif WaitingForEngine = TRUE; } else { WaitingForEngine = FALSE; } } } /* OF Dab_h_WaitForEngineStart *//*F*//*************************************************************************** >AUTHOR : AB** FUNCTIONNAME : InitializeApp** ** >DESCRIPTION: Do everything that can be done before getting an event ** from outside.** Start timers, clocks, etc. Load/display primery windows.** Update their objects. Initialize data/structures. ** A local Tilcon EVE wil be launched.** we will open a channel to the EVE kernel (TRT_cid) and ** tell it to display the display the primery window **** ** >NOTES: for more Information see the Tilcon Help** ** >PARAMETER: void** ** >RETURN VALUE: errorcode if an error is occurred else 0** ** >INCLUDES:** */LOCAL long InitializeApp(void){ long errorcode = 0;
TRT_StartData StartData; /* Strucktur of start data */
StartData.Os_Env = OS_TYPE; /* Opereting system is seting at */ /*the beginning of this file */ StartData.Display = NULL; /* we use 1 Display. muss be null */ StartData.IPAddr = NULL; /*IP addr if the Engine will be used in*/ /* a remote mode.Hier is NULL */ StartData.AppName = "HermesHMI"; /* the name of this aplikation */ /*if you change it hier you have*/ /*to change it in*/ /*dab_h_evhan.c too*/ StartData.Userprog = "GUI_TASK"; /* a name of user Programe*/ /*can be changed too*/ StartData.Flags = FALSE;
errorcode =TRT_StartEx (0, &StartData); /* Start the Tilcon EVE */ if(errorcode) {/*Traitment of Error*/ } EngineStatus=1; /* Engine is started ->*/ /* set the syncronisation signal*/ TRT_cid = StartData.TRT_CID; /*get the channel ID GUITask <-> EVE */
/*Ennable Blink */ errorcode = TRT_BlinkOn(TRT_cid, 1, 10);/*10x50=500ms on and 500ms off*/ if(errorcode) {/*Traitment of Error*/ } /*Load/display preliminary windows.*/ if(TRT_WindowLoad(TRT_cid, MAIN_WINDOW_FILE) ) { /*Traitement of Error for example : Display Messagebox*/ return -1; }
#ifdef HWDS_WINDOWS
/*Load/display preliminary windows.*/
if(TRT_WindowLoad(TRT_cid, MOP_WINDOW_FILE) )
{
/*Traitement of Error for example : Display Messagebox*/
return -1;
}
#endif
/*Initialize Callbacks.*/ /*For mor Information and example about*/ /*how does the callback mechanismus work*/ /*please see the Tilcon Help*/ errorcode = TRT_WindowCallbacks(TRT_cid, MAIN_WINDOW_ID, (char*)Callb_Struct_callback, sizeof(Callb_Struct_callback)); if(errorcode) {/*Traitment of Error*/ } if(TRT_WindowDisplay(TRT_cid, MAIN_WINDOW_ID) ) { /*Traitement of Error*/ }
#ifdef HWDS_WINDOWS
if(TRT_WindowDisplay(TRT_cid, MOP_WINDOW_ID) )
{
/*Traitement of Error*/
}
#endif
return errorcode;} /* OF InitializeApp *//*F*//*************************************************************************** >AUTHOR : AB** FUNCTIONNAME : MainEventLoop** ** >DESCRIPTION:stay in this loop until some event signals us to exit. ** Check TRT_GetInput() to see if a Tilcon event occurred** the event can be a notification from a button... ** If an event did occur, take appropriate action. ** ** >NOTES: for more Information see the Tilcon Help** ** >PARAMETER: void** ** >RETURN VALUE: errorcode if an error is occurred else 0**
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -