You are on page 1of 7

Nama : Lutfito Danuega

NPM : 1306482161
Program Direct Programming
#define S_FUNCTION_LEVEL 2
#define S_FUNCTION_NAME direct
#include "simstruc.h"
#include <math.h>
#define U(element) (*uPtrs[element]) /*Pointer to Input Port0*/
static void mdlInitializeSizes(SimStruct *S)
{
ssSetNumDiscStates(S, 4);
if (!ssSetNumInputPorts(S, 1)) return;
ssSetInputPortWidth(S, 0,1);
ssSetInputPortDirectFeedThrough(S, 0, 1);
ssSetInputPortOverWritable(S, 0, 1);
if (!ssSetNumOutputPorts(S, 1)) return;
ssSetOutputPortWidth(S, 0, 1);
ssSetNumSampleTimes(S, 1);
ssSetOptions(S, (SS_OPTION_EXCEPTION_FREE_CODE
| SS_OPTION_DISCRETE_VALUED_OUTPUT));
}
static void mdlInitializeSampleTimes(SimStruct *S){
ssSetSampleTime(S, 0, 1e-2);
ssSetOffsetTime(S, 0, 0.0);}
#define MDL_INITIALIZE_CONDITIONS
static void mdlInitializeConditions(SimStruct *S){
real_T *x = ssGetRealDiscStates(S);
int_T nXStates = ssGetNumDiscStates(S);
InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);
int_T i;
/* initialize the states to 0.0 */
for (i=0; i < nXStates; i++)
{x[i] = 0.0; }
}
static
real_T
real_T
real_T

void mdlOutputs(SimStruct *S, int_T tid){


*y = ssGetOutputPortRealSignal(S,0);
*x = ssGetRealDiscStates(S);
buff;

y[0] = x[3];
}
#define MDL_UPDATE
static void mdlUpdate(SimStruct *S, int_T tid)
{
real_T *x = ssGetRealDiscStates(S);
real_T t = ssGetT(S);

InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);


real_T y_k1,u_k1,u_k2,u_k3,y_k,h_k ;
u_k1
u_k2
u_k3
y_k1

=
=
=
=

x[0];
x[1];
x[2];
x[3];

y_k = y_k1 + 0.368*u_k1 + 0.478*u_k2 + 0.154*u_k3;


x[0]= U(0);
x[1] = u_k1;
x[2] = u_k2;
x[3] = y_k;

}
static void mdlTerminate(SimStruct *S)
{ } /*Keep this function empty since no memory is allocated*/
#ifdef MATLAB_MEX_FILE
/* Is this file being compiled as a MEX-file? */
#include "simulink.c" /*MEX-file interface mechanism*/
#else
#include "cg_sfun.h" /*Code generation registration function*/
#endif

Program Standart Programming


#define S_FUNCTION_LEVEL 2
#define S_FUNCTION_NAME standart
#include "simstruc.h"
#include <math.h>
#define U(element) (*uPtrs[element]) /*Pointer to Input Port0*/
static void mdlInitializeSizes(SimStruct *S)
{
ssSetNumDiscStates(S, 4);
if (!ssSetNumInputPorts(S, 1)) return;
ssSetInputPortWidth(S, 0,1);
ssSetInputPortDirectFeedThrough(S, 0, 1);
ssSetInputPortOverWritable(S, 0, 1);
if (!ssSetNumOutputPorts(S, 1)) return;
ssSetOutputPortWidth(S, 0, 1);
ssSetNumSampleTimes(S, 1);
ssSetOptions(S, (SS_OPTION_EXCEPTION_FREE_CODE
| SS_OPTION_DISCRETE_VALUED_OUTPUT));
}
static void mdlInitializeSampleTimes(SimStruct *S){
ssSetSampleTime(S, 0, 1e-2);
ssSetOffsetTime(S, 0, 0.0);}
#define MDL_INITIALIZE_CONDITIONS
static void mdlInitializeConditions(SimStruct *S){
real_T *x = ssGetRealDiscStates(S);
int_T nXStates = ssGetNumDiscStates(S);

InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);


int_T i;
/* initialize the states to 0.0 */
for (i=0; i < nXStates; i++)
{x[i] = 0.0; }
}
static
real_T
real_T
real_T

void mdlOutputs(SimStruct *S, int_T tid){


*y = ssGetOutputPortRealSignal(S,0);
*x = ssGetRealDiscStates(S);
buff;

buff = x[3];
y[0] = buff;
}
#define MDL_UPDATE
static void mdlUpdate(SimStruct *S, int_T tid)
{
real_T *x = ssGetRealDiscStates(S);
real_T t = ssGetT(S);
InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);
real_T y_k,h_k1,h_k2,h_k3,h_k;
h_k1 = x[0];
h_k2 = x[1];
h_k3 = x[2];
h_k = U(0)+ h_k1;
y_k = 0.368*h_k1 + 0.478*h_k2 + 0.158*h_k3;
x[0]
x[1]
x[2]
x[3]

=
=
=
=

h_k;
h_k1;
h_k2;
y_k;

}
static void mdlTerminate(SimStruct *S)
{ } /*Keep this function empty since no memory is allocated*/
#ifdef MATLAB_MEX_FILE
/* Is this file being compiled as a MEX-file? */
#include "simulink.c" /*MEX-file interface mechanism*/
#else
#include "cg_sfun.h" /*Code generation registration function*/
#endif

Program Ladder Programming


#define S_FUNCTION_LEVEL 2
#define S_FUNCTION_NAME ladder //
#include "simstruc.h"
#include <math.h>
#define U(element) (*uPtrs[element]) /*Pointer to Input Port0*/
static void mdlInitializeSizes(SimStruct *S) // inisialisasi s-func

{
ssSetNumDiscStates(S, 3); // 3 mewakili jumlah state yang digunakan
if (!ssSetNumInputPorts(S, 1)) return; // standar menggunakan 1 port
ssSetInputPortWidth(S, 0, 1); // yang biasa diubah adalah lebar
port(tergantung kebutuhan)
ssSetInputPortDirectFeedThrough(S, 0, 1);
ssSetInputPortOverWritable(S, 0, 1);
if (!ssSetNumOutputPorts(S, 1)) return; // sama dengan input
ssSetOutputPortWidth(S, 0, 1);
ssSetNumSampleTimes(S, 1);
ssSetOptions(S, (SS_OPTION_EXCEPTION_FREE_CODE
| SS_OPTION_DISCRETE_VALUED_OUTPUT));
}
static void mdlInitializeSampleTimes(SimStruct *S){
ssSetSampleTime(S, 0, 1); // waktu sampling 0.01 s
ssSetOffsetTime(S, 0, 0.0);} // dimulai dari posisi 0 sehingga 0.0
#define MDL_INITIALIZE_CONDITIONS
static void mdlInitializeConditions(SimStruct *S){
real_T *x = ssGetRealDiscStates(S);
int_T nXStates = ssGetNumDiscStates(S);
int_T i;
InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);

/* initialize the states to 0.0 */


for (i=0; i < nXStates; i++)
{x[i] = 0.0; }
}
static
real_T
real_T
real_T

void mdlOutputs(SimStruct *S, int_T tid){


*y = ssGetOutputPortRealSignal(S,0);
*x = ssGetRealDiscStates(S);
buff;

buff = x[0];
y[0] = buff;
}
#define MDL_UPDATE
static void mdlUpdate(SimStruct *S, int_T tid)
{
real_T *x = ssGetRealDiscStates(S);
real_T t = ssGetT(S);
InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);
real_T y_k,p_k,p_k1,u_k;
u_k=U(0);
p_k1=x[1];
p_k= (-1.6)*(u_k-(-0.3125*p_k1));
y_k= 2*u_k + p_k1;
x[1]=p_k;
x[0]=y_k;

}
static void mdlTerminate(SimStruct *S)
{ } /*Keep this function empty since no memory is allocated*/
#ifdef MATLAB_MEX_FILE
/* Is this file being compiled as a MEX-file? */
#include "simulink.c" /*MEX-file interface mechanism*/
#else
#include "cg_sfun.h" /*Code generation registration function*/
#endif

Simulink direct dan standart programming

Simulink ladder programming

Sinyal Keluaran Direct dan standart programming

Sinyal Keluaran ladder programming

You might also like