Skip to content
Snippets Groups Projects
EMU_MTR-HOME_AUTO.st 2.89 KiB
Newer Older
/*
#  C.E.A. IRFU/SIS/LDISC
#
*/

program homeMtrAuto
jfdenis's avatar
jfdenis committed
option +r;

%%#include <stdio.h>
%%#include <string.h>
%%#include <stdlib.h>

/***** ARCHIVE ****/
jfdenis's avatar
jfdenis committed
assign ARCHIVING to "{DEVICE}:Archive";
monitor ARCHIVING;
/**** MTR PV ******/
short HOMCPTFLAG;
jfdenis's avatar
jfdenis committed
assign HOMCPTFLAG to "{PMACPREFIX}:{MOTOR_NAME}-HOMCPTFLAG";
short statusMTRMov;
jfdenis's avatar
jfdenis committed
assign statusMTRMov to "{PMACPREFIX}:{MOTOR_NAME}.MOVN";
monitor statusMTRMov;

Jean-François Denis's avatar
Jean-François Denis committed
short mtrPlaced;
jfdenis's avatar
jfdenis committed
assign mtrPlaced to "{PMACPREFIX}:{MOTOR_NAME}-AXISSTS";
Jean-François Denis's avatar
Jean-François Denis committed
monitor mtrPlaced;
evflag mtrPlacedEvent;
sync mtrPlaced mtrPlacedEvent;

short mtrStop;
jfdenis's avatar
jfdenis committed
assign mtrStop to "{PMACPREFIX}:{MOTOR_NAME}.SPMG";
Jean-François Denis's avatar
Jean-François Denis committed
monitor mtrStop;

jfdenis's avatar
jfdenis committed
assign homeCMD to "{PMACPREFIX}:{MOTOR_NAME}-HOMCMD";
Jean-François Denis's avatar
Jean-François Denis committed
short mtrPosCons;
jfdenis's avatar
jfdenis committed
assign mtrPosCons to "{PMACPREFIX}:{MOTOR_NAME}";
Jean-François Denis's avatar
Jean-François Denis committed
monitor mtrPosCons;

short brakeMtrCMD;
jfdenis's avatar
jfdenis committed
assign brakeMtrCMD to "{DEVICE}-PMAC:BRAKE_S";
monitor brakeMtrCMD;

short brakeMtrGET;
jfdenis's avatar
jfdenis committed
assign brakeMtrGET to "{DEVICE}-PMAC:BRAKE_R";
monitor brakeMtrGET;
evflag brakeMtrGETEvent;
sync brakeMtrGET brakeMtrGETEvent;

Jean-François Denis's avatar
Jean-François Denis committed
/**** PS PV ******/
short scanPS_Sts;
assign scanPS_Sts to "{DEVICE}:PS.BUSY";
monitor scanPS_Sts;

/**** MTR PV ******/
short scanMTR_Sts;
assign scanMTR_Sts to "{DEVICE}:MTR.BUSY";
monitor scanMTR_Sts;


/**** PV to start procedure ******/
assign homeSTART to "{DEVICE}:PROC-AUTO-HOME";
monitor homeSTART;
evflag homeSTARTEvent;
sync homeSTART homeSTARTEvent;

/**** PV to read the PLIM status ******/
assign plimSTATUS to "{PMACPREFIX}:{MOTOR_NAME}-PENDLSTS.VAL";
monitor plimSTATUS;

ss ss1
{
	state init {
	    	      when (delay(1.0) && (pvConnectCount() == pvChannelCount())) 
					{
					homeSTART=0;
				    pvPut(homeSTART);
					printf("\nWAIT\n");
					} state waiting
	state waiting
			    {
			    printf("\nSTART HOME PROCEDURE\n");
			    }state startHOME
Jean-François Denis's avatar
Jean-François Denis committed

	state startHOME
Jean-François Denis's avatar
Jean-François Denis committed
		 {	
			when((scanPS_Sts == 0) && (scanMTR_Sts == 0) && (statusMTRMov == 0)){
			printf("\n GO HOME MTR\n");
Jean-François Denis's avatar
Jean-François Denis committed
			brakeMtrCMD=1;
			pvPut(brakeMtrCMD);
			delay(1);
			HOMCPTFLAG=1; // PLIM
			pvPut(HOMCPTFLAG);
			delay(1);
			homeCMD=1;
			pvPut(homeCMD);
			}state limitON
Jean-François Denis's avatar
Jean-François Denis committed
		 }

	state limitON
				printf("\nLIMIT HIGH\n");
				HOMCPTFLAG=0; // HOME
				pvPut(HOMCPTFLAG);
				}state breakON
	state breakON
			when(delay(1.0))
				printf("\nINIT POSITION\n");
				HOMCPTFLAG=0; // HOME
				pvPut(HOMCPTFLAG);
				delay(1);
Jean-François Denis's avatar
Jean-François Denis committed
				printf("\nBRAKE ON\n");
				homeCMD=1;
				pvPut(homeCMD);
				homeSTART=0;
				pvPut(homeSTART);
Jean-François Denis's avatar
Jean-François Denis committed
				brakeMtrCMD=0;
				pvPut(brakeMtrCMD);
				}state stopArchiving
           }
 
 	state stopArchiving
		   {
           		ARCHIVING=0;
Jean-François Denis's avatar
Jean-François Denis committed
				}state init