ssSetInputPortWidth(S,i,1);
ssSetInputPortDirectFeedThrough(S,i,1);
}
if(!
ssSetNumOutputPorts(S,1))return;
ssSetOutputPortWidth(S,0,1);
ssSetNumSampleTimes(S,1);
/*Takecarewhenspecifyingexceptionfreecode-seesfuntmpl_doc.c*/
ssSetOptions(S,SS_OPTION_EXCEPTION_FREE_CODE);
}
/*Function:
mdlInitializeSampleTimes=========================================
*Abstract:
Specifiythatweinheritoursampletimefromthedrivingblock.
*/
staticvoidmdlInitializeSampleTimes(SimStruct*S)
{
ssSetSampleTime(S,0,INHERITED_SAMPLE_TIME);
ssSetOffsetTime(S,0,0.0);
}
//Function:
mdlOutputs=======================================================
staticvoidmdlOutputs(SimStruct*S,int_Ttid)
{
InputRealPtrsTypeuPtrs=ssGetInputPortRealSignalPtrs(S,0);
real_T*y=ssGetOutputPortRealSignal(S,0);
unsignedshortaxis_status,inputs;
unsignedshortaxis_num;
/*setthecurrentaxisnumberasdefinedbyS_functionfirstparameter*/
axis_num=(uint8_T)*(mxGetPr(AXIS_NUM));
inputs=(uint8_T)(*(mxGetPr(NUM_INPUTS)));
if(inputs>=2)
{
zl_set_vel(*uPtrs[0],axis_num-1);
zl_set_acc(*uPtrs[1],axis_num-1);
}
if(inputs>=3)
{
zl_set_pos((long)*uPtrs[2],axis_num-1);
}
if(inputs>=4)
{
zl_set_max_acc(*uPtrs[3],axis_num-1);
}
if(inputs>=5)
{
return;
}
//updatecardparameters
zl_update(axis_num-1);
zl_get_status(&axis_status,axis_num-1);
//axis_status=16&axis_status;
//*y=(axis_status?
1:
0);
*y=axis_status&127;
}
/*Function:
mdlTerminate=====================================================
*Abstract:
*Noterminationneeded,butwearerequiredtohavethisroutine.
*/
staticvoidmdlTerminate(SimStruct*S)
{
}
#ifdefMATLAB_MEX_FILE/*IsthisfilebeingcompiledasaMEX-file?
*/
#include"simulink.c"/*MEX-fileinterfacemechanism*/
#else
#include"cg_sfun.h"/*Codegenerationregistrationfunction*/
#endif
(2)s-functionGetCurPos代码
#defineS_FUNCTION_NAMEGetCurPos
#defineS_FUNCTION_LEVEL2
/*定义函数*/
#include"simstruc.h"
#include"ZLPCIDrv.h"
#include"ZLPCI400d.h"
#include"PendX.h"
/*添加头文件*/
#pragmacomment(lib,"ZLPCIDrv.lib")
#pragmacomment(lib,"ZLPCI400d.lib")
#pragmawarning(disable:
4761)
#pragmawarning(disable:
4244)
/*预定义的标识符,指定注释的类型,指定库函数*/
//--------------------------------------------------------------------------
#defineERR_INVALID_PARAM\
"Invalidaxisnumber.Theparametermustbe\nanunsignedintegernumberbetween1and4."
/*totalnumberofblockparameters*/
enum{PARAM=0,NUM_PARAMS};
#defineAXIS_NUM(ssGetSFcnParam(S,0))
#defineMDL_CHECK_PARAMETERS
staticvoidmdlCheckParameters(SimStruct*S)
{
uint8_Taxis_num;
axis_num=(uint8_T)*(mxGetPr(AXIS_NUM));
if(axis_num<1||axis_num>4){
ssSetErrorStatus(S,ERR_INVALID_PARAM);
return;
}
}
/*Function:
mdlInitializeSizes===============================================
*/
staticvoidmdlInitializeSizes(SimStruct*S)
{
ssSetNumSFcnParams(S,1);
if(ssGetNumSFcnParams(S)==ssGetSFcnParamsCount(S)){
mdlCheckParameters(S);
if(ssGetErrorStatus(S)!
=NULL){
return;
}
}else{
return;/*Simulinkwillreportaparametermismatcherror*/
}
if(!
ssSetNumInputPorts(S,0))return;
if(!
ssSetNumOutputPorts(S,1))return;
ssSetOutputPortWidth(S,0,1);
ssSetNumSampleTimes(S,1);
/*Takecarewhenspecifyingexceptionfreecode-seesfuntmpl_doc.c*/
ssSetOptions(S,SS_OPTION_EXCEPTION_FREE_CODE);
}
/*Function:
mdlInitializeSampleTimes=========================================
*Abstract:
Specifiythatweinheritoursampletimefromthedrivingblock.
*/
staticvoidmdlInitializeSampleTimes(SimStruct*S)
{
ssSetSampleTime(S,0,CONTINUOUS_SAMPLE_TIME);
ssSetOffsetTime(S,0,0.0);
}
//Function:
mdlOutputs=======================================================
staticvoidmdlOutputs(SimStruct*S,int_Ttid)
{
real_T*y=ssGetOutputPortRealSignal(S,0);
uint8_Taxis_num;
longdata;
/*setthecurrentaxisnumberasdefinedbyS_functionfirstparameter*/
axis_num=(uint8_T)*(mxGetPr(AXIS_NUM));
/*getpositionofaxisthatisdefinedbyS-funcparameter*/
zl_get_actl_pos(&data,axis_num-1);
*y=data;
}
/*Function:
mdlTerminate=====================================================
*Abstract:
*Noterminationneeded,butwearerequiredtohavethisroutine.
*/
staticvoidmdlTerminate(SimStruct*S)
{
}
#ifdefMATLAB_MEX_FILE/*IsthisfilebeingcompiledasaMEX-file?
*/
#include"simulink.c"/*MEX-fileinterfacemechanism*/
#else
#include"cg_sfun.h"/*Codegenerationregistrationfunction*/
#endif
s-fuction函数InitOpenIPpos
#defineS_FUNCTION_NAMEInitOpenIPpos
#defineS_FUNCTION_LEVEL2
/*定义函数*
#include"simstruc.h"
#include"ZLPCIDrv.h"
#include"ZLPCI400d.h"
#include"PendX.h"
/*添加头文件*/
#pragmacomment(lib,"ZLPCIDrv.lib")
#pragmacomment(lib,"ZLPCI400d.lib")
#pragmawarning(disable:
4761)
#pragmawarning(disable:
4244)
/*预定义的标识符,指定注释的类型,指定库函数*/
/*Function:
mdlInitializeSizes===============================================
*/
staticvoidmdlInitializeSizes(SimStruct*S)
{
ssSetNumSFcnParams(S,0);
if(ssGetNumSFcnParams(S)!
=ssGetSFcnParamsCount(S)){
return;/*ParametermismatchwillbereportedbySimulink*/
}
if(!
ssSetNumInputPorts(S,1))return;
ssSetInputPortWidth(S,0,1);
ssSetInputPortDirectFeedThrough(S,0,1);
if(!
ssSetNumOutputPorts(S,0))return;
ssSetNumSampleTimes(S,1);
/*Takecarewhenspecifyingexceptionfreecode-seesfuntmpl_doc.c*/
ssSetOptions(S,SS_OPTION_EXCEPTION_FREE_CODE);
}
/*Function:
mdlInitializeSampleTimes=========================================
*Abstract:
Specifiythatweinheritoursampletimefromthedrivingblock.
*/
staticvoidmdlI