program WFG
%%#include <math.h>
%%#define PI 3.14159265
int SET;
assign SET to "TDL:WFG:SET";
monitor SET;
int FUNC;
assign FUNC to "TDL:WFG:FUNC";
double WAVE[500];
assign WAVE to "TDL:WFG:WAVE";
double AMP;
double PERIOD;
assign AMP to "TDL:WFG:AMP";
assign PERIOD to "TDL:WFG:PERIOD";
int i;
double a;
ss function_generator
{
state init
{
when()
{
for (i=0;i<500;i++)
{
WAVE[i]=0;
}
} state fg
}
state fg
{
when(SET == 1){
SET=0;
pvPut(SET);
pvGet(AMP);
pvGet(PERIOD);
if (PERIOD <1e-3) PERIOD=1e-3;
pvGet(FUNC);
%{
switch (FUNC){
case 0 :for (i=0;i<500;i++)
{
WAVE[i]=AMP*sin(2*PI/PERIOD*i);
}
break;
case 1 :
for (i=0;i<500;i++) {
WAVE[i]=AMP/PERIOD*(fmod(i*1.0,PERIOD));
}
break;
case 2 : for (i=0;i<500;i++){
if (fmod(i*1.0,PERIOD)>PERIOD/2.0) WAVE[i]=AMP;
else WAVE[i]=-AMP;
}
break;
}
}%
pvPut(WAVE);
} state fg
}
}