program PLL
%%#include <math.h>
int COUNT1;
assign COUNT1 to "FBM:SR830:COUNT1";
monitor COUNT1;
int COUNTP;
double SNAP[10];
assign SNAP to "FBM:SR830:SNAPREAD";
double FREQ_SET;
assign FREQ_SET to "FBM:SR830:FREQ:SET";
double FREQ_NOW;
double FREQ_LOWLIM;
double FREQ_UPLIM;
double ACCFAC;
assign FREQ_LOWLIM to "FBM:SR830:FREQ:LOWLIM";
assign FREQ_UPLIM to "FBM:SR830:FREQ:UPLIM";
assign ACCFAC to "FBM:SR830:ACCFAC";
double SLOPE1;
double SLOPE2;
int i;
ss state_pll
{
state init
{
when()
{
pvGet(COUNT1);
pvGet(SNAP);
FREQ_SET = SNAP[4];
COUNTP = COUNT1;
pvGet(FREQ_LOWLIM);
pvGet(FREQ_UPLIM);
pvGet(ACCFAC);
SLOPE1 = 0.016911031*1000;
SLOPE2 = 0.03*1000;
}state lock
}
state lock
{
when(COUNT1 != COUNTP)
{
COUNTP=COUNT1;
pvGet(SNAP);
pvGet(FREQ_LOWLIM);
pvGet(FREQ_UPLIM);
pvGet(ACCFAC);
if (SNAP[3] >80)
FREQ_SET = FREQ_SET + floor(SLOPE2*ACCFAC*SNAP[3]);
else if (SNAP[3] >0)
FREQ_SET = FREQ_SET +floor(SLOPE1*ACCFAC*SNAP[3]);
else if (SNAP[3]> -80)
FREQ_SET = FREQ_SET + ceil(SLOPE1*ACCFAC*SNAP[3]);
else
FREQ_SET = FREQ_SET +ceil(SLOPE2*ACCFAC*SNAP[3]);
if (FREQ_SET > FREQ_UPLIM)
FREQ_SET = FREQ_UPLIM;
if (FREQ_SET <FREQ_LOWLIM)
FREQ_SET = FREQ_LOWLIM;
pvPut(FREQ_SET);
} state lock
}
}
mailto: makoto.tobiyama@kek.jp
Last update: 16/Sep/2011