📄 70228a58b55f001d1289bbda6de18a35
字号:
/*
$Log$
*/
/*
** ---------------------------------------------------------------------
** Copyright (c) Bosch Rexroth AG 1997 - 2008
** All Rights Reserved
** ---------------------------------------------------------------------
**
** File: dab_h_toolmanage.c
**
** Responsible: MY
**
** Description of functions:
** test file for cpl management like variable list or debug
**
**
** - CPL Debugger
** - set/delete breakpoint
** - CPL Variable list
** - Add watch point and so on
** - **
**
** ---------------------------------------------------------------------
*/
/*F*/
/*======================================================================
** >>>> Include all necessary headfiles <<<<
** ==================================================================== */
#include "dab_h_cpl.h" /*Jiang add it*/
#include "string.h"
/*F*/
/*======================================================================
** >>>> Local definitions <<<<
** ==================================================================== */
/***********************************************************************/
/** Here are some variables defined used in the CPL debug example.**/
#define MAXFILESIZE 1024*3 /*the size of the buffer saving the context of the NC Program to be showed in the HMI*/
LOCAL struct File_Name_Id{
long fileid;
char filename[15];
}record[100]; /* use it to record the file name and id list in the folder */
IMPORT char Currentfileselect[20]; /*It will save the file name only.*/
char CurrentFileWantToRun[100]; /*It will save the file name and it's path.*/
char Currentpath[20]=""; /*It will save the file path.*/
*F*/
/*
************************************************************************
** >AUTHOR : Jiang
** FUNCTION NAME : DirShowtest
**
** >DESCRIPTION: Example to Load directory into the HMI.
**
**
**
** >NOTES:
**
**
**
** >PARAMETER: none
**
** >RETURN VALUE: none
**
** >INCLUDES : none
**
*/
EXPORT void Directory_Load(void){
char buf[1024];
char *entry;
int ret;
char buffer[4096]="";
char filebuffer[20];
struct stat file_state;
char BufferSelectPath[20]="";
char item_base[5]="item";
char imagebuf[50]="";
char child_item[10]="";
int n=1;
int itemnumber=0;
char tempr[3];
TRT_SetValues(TRT_cid2, "FilesUnderFold",
TRT_ATT_TEXT,"",
NULL);
//Get file path of access from HMI
TRT_GetValues(TRT_cid2,"FoldSelect",
TRT_ATT_TEXT,BufferSelectPath,NULL);
//Mybe at here we will add a procress to modify the pathbuffer by delete redundant '/'!
Delete_RepetCharacter(BufferSelectPath,'/');
TRT_SetValues(TRT_cid2,"FoldSelect",
TRT_ATT_TEXT,BufferSelectPath,NULL);
//How to prepare to add a item to a tree
//at first you should know the parent item id
//at second you should know the item id of itself
//at 3rd you should know the item name which is be added to the tree.
//at last you should add a ico to the item ,but it must not be done.
sprintf(imagebuf,"%s\3%s\3%s\3%s\0",
"item", "item0",BufferSelectPath,"folderop.ico");
/* show root on the Tree view */
TRT_SetValues(TRT_cid2, "Test_tree",
/* del all already exist info on the tree view */
TRT_ATT_LIST_DELETE_ITEMS, -1,
/* add the item with the itemname and its icon */
TRT_ATT_TREE_ITEMS_ADD_ID_IMAGE , imagebuf,
NULL);
//At first you should clear the filelist every time.
TRT_SetValues(TRT_cid2, "FilesUnderFold",
TRT_ATT_LIST_DELETE_ITEMS,-1,
NULL);
//login the file system
Ncs_Fsr_login("root", 0, 0, 0);
//open a directory and record the "context" in the bufferXX
ret=Ncs_Fsr_fopendir(BufferSelectPath,buf,1024);
Ncs_Fsr_chdir(BufferSelectPath);
Ncs_Fsr_getcwd(Currentpath);
if (ret< 0)
{
TRT_SetValues(TRT_cid2,"Message_Display",
TRT_ATT_TEXT,"Read_file_Error!!!",NULL);
return;
}
entry=NULL;
do
{
//extract entry from the bufferXX
ret=Ncs_Fsr_fgetdirentry(buf,&entry);
//Get the entry state
Ncs_Fsr_stat(entry,&file_state);
if(ret>0)
{ //prepare to got a filename;
strcpy(filebuffer,entry);
if(S_ISDIR(file_state.st_mode)!=0){
//make a new item id as
sprintf(tempr,"%d",n);
strcat(item_base,tempr);
strcpy(child_item,item_base);
sprintf(imagebuf,"%s\3%s\3%s\3%s\0",
"item0", child_item, entry, "folder.ico");
TRT_SetValues(TRT_cid2, "Test_tree",
TRT_ATT_TREE_ITEMS_ADD_ID_IMAGE,imagebuf,
NULL);
n++;
}
else{
TRT_SetValues(TRT_cid2, "FilesUnderFold",
TRT_ATT_ITEM_CREATE,entry,
NULL);
//do someting record in order to show file list in this fold
record[itemnumber].fileid=itemnumber;
strcpy(record[itemnumber].filename,entry);
itemnumber++;
}
}
if (ret< 0)
{
TRT_SetValues(TRT_cid2,"Message_Display",
TRT_ATT_TEXT,"Get_Entry_Error!!!",
NULL);
}
} while (ret>0);
strcpy(BufferSelectPath,Currentpath);
TRT_SetValues(TRT_cid2,"FoldSelect",
TRT_ATT_TEXT,BufferSelectPath,
NULL);
Ncs_Fsr_fclosedir(buf);
Ncs_Fsr_logout("root",0);
}
/*F*/
/*
************************************************************************
** >AUTHOR : Jiang
** FUNCTION NAME : FileReadTest
**
** >DESCRIPTION: Example to Load directory into the HMI.
**
**
**
** >NOTES:
**
**
**
** >PARAMETER: none
**
** >RETURN VALUE: none
**
** >INCLUDES : none
**
*/
EXPORT void FileReadTest(void){
char filenamewithpath[20]="";
char fileselect[20]="";
char filecontextfuffer[MAXFILESIZE]; /*have problem here.*/
long itemid=0;
char itemtxt[15]="";
struct stat file_state;
int error;
char* point=NULL; /*check the npg file.*/
int number=0;
int BreakpointPlace[20]={0};
int i=0;
int n=0;
int m=0;
char tempbuffer[4]="";
char tablename_my[20]="";
TRT_SetValues(TRT_cid2, "FileContext", /* At first you shoud clear the old file context! */
TRT_ATT_TEXT,"",
NULL);
error=Ncs_Fsr_login("root", 0, 0, 0);
TRT_GetValues(TRT_cid2,"FoldSelect",
TRT_ATT_TEXT,filenamewithpath,
NULL); /* you can get file path here*/
strcat(filenamewithpath,"/");
strcat(filenamewithpath,Currentfileselect); /* to get the filename*/
Delete_RepetCharacter(filenamewithpath,'/');
error=strcpy(CurrentFileWantToRun,filenamewithpath);
error=Ncs_Fsr_stat(filenamewithpath,&file_state);
error=Ncs_Fsr_read(Ncs_Fsr_open(filenamewithpath,O_RDONLY,0),
filecontextfuffer,
file_state.st_size+10); /*To ensure we have read the file complately.*/
TRT_SetValues(TRT_cid2, "FileContext", /*Send the file context to the Tilcon.*/
TRT_ATT_TEXT,filecontextfuffer,
NULL);
TRT_SetValues(TRT_cid2, "Message_Display",
TRT_ATT_TEXT,"Load file to CPL Successfully!",
NULL);
TRT_SetValues(TRT_cid2, "CurrentProg", /*Show the program name and path*/
TRT_ATT_TEXT,CurrentFileWantToRun,
NULL);
error=Ncs_Fsr_logout("root",0);
}
/*F*/
/*
************************************************************************
** >AUTHOR : Jiang
** FUNCTION NAME : Dab_h_SelContinueMode
**
** >DESCRIPTION: This funciton is used to delete character
** For example //usr//user -> /usr/user
**
** >NOTES:
**
**
** >PARAMETER: none
**
** >RETURN VALUE: none
**
** >INCLUDES : none
**
*/
void Delete_RepetCharacter(char* Changestring,char d){
char *m = Changestring;
char *k =m+1;
char* m1=NULL;
char* k1=NULL;
while(*m != '\0'){
while(*m != '\0'){
if((*m == d)&&(*k == d)) //if we discover the repeat
{
m1=m;
k1=k;
while(*m1 != '\0'){
*m1=*k1;
m1++;
k1++; //we should delete the front one by covering
}
}
else break; //if we found no repeating
}//
m++;
k++;
}
}
/*F*/
/*
************************************************************************
** >AUTHOR : MY
** FUNCTION NAME : Dab_h_SelContinueMode
**
** >DESCRIPTION: Example to set the continue mode
**
**
**
** >NOTES:
**
**
**
** >PARAMETER: none
**
** >RETURN VALUE: none
**
** >INCLUDES : none
**
*/
EXPORT void Dab_h_SelContinueMode(void)
{
int loc_errncs;
int status;
int version;
int savstate;
int ipostate;
int AktOpMode;
Ncs_Error_t Ncs_Error_Code = Ncs_ErrOk;
/*At first compare the NC mode,if there is no change,program will do nothing.*/
Ncs_Error_Code = Ncs_SavGetNcMode(1,&version,&AktOpMode,&savstate);
if (AktOpMode == NCS_SAV_OP_MODE_AUTOMATIC_C)
TRT_SetValues(TRT_cid2,"Message_Display",
TRT_ATT_TEXT,"You have already in the Automatic Mode!",NULL);
else{
/*At first we should know if the program is running*/
loc_errncs = Ncs_SavGetNcState(1,
&version,
&savstate,
&ipostate,
&status);
/*if(savstate==3) that means program is running*/
/*if program is running ,we should tell the user to Reset the Channel*/
if(savstate==3){
TRT_SetValues(TRT_cid2,"Message_Display",
TRT_ATT_TEXT,"The Program is running,You should Reset Channel at first!",NULL);
}
else{
/*if the program is not running,we should switch the NC mode.*/
loc_errncs=Ncs_SavOpModeSelect(1,
NCS_SAV_OP_MODE_AUTOMATIC_C,
&status);
if ((status!=NCS_SAV_SERVICEOK_C) || (loc_errncs!=Ncs_ErrOk))
{
/*Fehlerbehandlung */
}
else
{
/*At last HMI will tell the user success of changing mode.*/
TRT_SetValues(TRT_cid2,"Message_Display",
TRT_ATT_TEXT,"Current mode is Automatic",NULL);
}
}
}
}
/*F*/
/*
************************************************************************
** >AUTHOR : MY
** FUNCTION NAME : Dab_h_SelDebugSTEPMode
**
** >DESCRIPTION: Example to set the step debug mode
**
**
**
** >NOTES:
**
**
**
** >PARAMETER: none
**
** >RETURN VALUE: none
**
** >INCLUDES : none
**
*/
EXPORT void Dab_h_SelDebugSTEPMode(void)
{
int loc_errncs;
int status;
int version;
int savstate;
int ipostate;
int AktOpMode;
Ncs_Error_t Ncs_Error_Code = Ncs_ErrOk;
/*At first compare the NC mode,if there is no change,program will do nothing.*/
Ncs_Error_Code = Ncs_SavGetNcMode(1,&version,&AktOpMode,&savstate);
if (AktOpMode == NCS_SAV_OP_MODE_DEBUG_STEP_C)
TRT_SetValues(TRT_cid2,"Message_Display",
TRT_ATT_TEXT,"You have already in the DubugStep Mode!",NULL);
else{
/*At first we should know if the program is running*/
loc_errncs= Ncs_SavGetNcState(1,
&version,
&savstate,
&ipostate,
&status);
/*if(savstate==3) that means program is running*/
/*if program is running ,we should tell the user to Reset the Channel*/
if(savstate==3){
TRT_SetValues(TRT_cid2,"Message_Display",
TRT_ATT_TEXT,"The Program is running,You should Reset Channel at first!",NULL);
}
else{
/*if the program is not running,we should switch the NC mode.*/
loc_errncs=Ncs_SavOpModeSelect(1,
NCS_SAV_OP_MODE_DEBUG_STEP_C,
&status);
if ((status!=NCS_SAV_SERVICEOK_C) || (loc_errncs!=Ncs_ErrOk))
{
}
else{
/*At last HMI will tell the user success of changing mode.*/
TRT_SetValues(TRT_cid2,"Message_Display",
TRT_ATT_TEXT,"Current mode is DebugStep",NULL);
}
}
}
}
/*F*/
/*
************************************************************************
** >AUTHOR : MY
** FUNCTION NAME : Dab_h_SelDebugPROGMode
**
** >DESCRIPTION: Example to set the program continue debug mode
**
**
**
** >NOTES:
**
**
**
** >PARAMETER: none
**
** >RETURN VALUE: none
**
** >INCLUDES : none
**
*/
EXPORT void Dab_h_SelDebugPROGMode(void)
{
int loc_errncs;
int status;
int version;
int savstate;
int ipostate;
int AktOpMode;
Ncs_Error_t Ncs_Error_Code = Ncs_ErrOk;
/*At first compare the NC mode,if there is no change,program will do nothing.*/
Ncs_Error_Code = Ncs_SavGetNcMode(1,&version,&AktOpMode,&savstate);
if (AktOpMode == NCS_SAV_OP_MODE_DEBUG_CONT_C)
TRT_SetValues(TRT_cid2,"Message_Display",
TRT_ATT_TEXT,"You have already in the DubugProg Mode!",NULL);
else{
/*At first we should know if the program is running*/
loc_errncs= Ncs_SavGetNcState(1,
&version,
&savstate,
&ipostate,
&status);
/*if(savstate==3) that means program is running*/
/*if program is running ,we should tell the user to Reset the Channel*/
if(savstate==3){
TRT_SetValues(TRT_cid2,"Message_Display",
TRT_ATT_TEXT,"The Program is running,You should Reset Channel at first!",NULL);
}
else{
/*if the program is not running,we should switch the NC mode.*/
loc_errncs=Ncs_SavOpModeSelect(1,
NCS_SAV_OP_MODE_DEBUG_CONT_C,
&status);
if ((status!=NCS_SAV_SERVICEOK_C) || (loc_errncs!=Ncs_ErrOk))
{
}
else
{
/*At last HMI will tell the user success of changing mode.*/
TRT_SetValues(TRT_cid2,"Message_Display",
TRT_ATT_TEXT,"Current mode is DebugContinue!",NULL);
}
}
}
}
/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -