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

program homeMtrAuto

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

/**** MTR PV ******/
short HOMCPTFLAG;
assign HOMCPTFLAG to "{PMACPREFIX}:{MOTOR_NAME1}-HOMCPTFLAG";
monitor HOMCPTFLAG;

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

short mtrStop;
assign mtrStop to "{PMACPREFIX}:{MOTOR_NAME1}.SPMG";
monitor mtrStop;

short homeCMD;
assign homeCMD to "{PMACPREFIX}:{MOTOR_NAME1}-HOMCMD";
monitor homeCMD;

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

short brakeMtrCMD;
assign brakeMtrCMD to "{PREFIX}:PBI-EM:VER-BRAKE_SET";
monitor brakeMtrCMD;

short brakeMtrGET;
assign brakeMtrGET to "{PREFIX}:PBI-EM:VER-BRAKE_GET";
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;

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

/**** PV to read the PLIM status ******/
short plimSTATUS;
Jean-François Denis's avatar
Jean-François Denis committed
assign plimSTATUS to "{PMACPREFIX}:{MOTOR_NAME1}-PENDLSTS";
monitor plimSTATUS;
evflag plimSTATUSEvent;
sync plimSTATUS plimSTATUSEvent;

ss ss1
{
	state init {
	    	      when (delay(1.0) && (pvConnectCount() == pvChannelCount())) 
					{
					homeSTART=0;
				        pvPut(homeSTART);
Jean-François Denis's avatar
Jean-François Denis committed
					printf("\nINIT\n");
Jean-François Denis's avatar
Jean-François Denis committed
		      when(efTestAndClear(homeSTARTEvent)&&(homeSTART==1))
			{
			pvPut(mtrStop);	
			mtrStop=0;
			printf("\nSTOP MTR\n");
			}state stopMTR
Jean-François Denis's avatar
Jean-François Denis committed

	state stopMTR
		 {	
			when((efTestAndClear(mtrPlacedEvent) && (mtrPlaced ==1) && (scanPS_Sts==0)) || ((mtrPlaced ==1)&&(scanPS_Sts==0)))
			{
			printf("\nSTART HOME\n");
			brakeMtrCMD=1;
			pvPut(brakeMtrCMD);
			delay(1);
			HOMCPTFLAG=1; // PLIM
			pvPut(HOMCPTFLAG);
			delay(1);
			homeCMD=1;
			pvPut(homeCMD);
			}state home
		 }

	state home
		   {
			when(efTestAndClear(plimSTATUSEvent)&&(plimSTATUS==1))
				{
Jean-François Denis's avatar
Jean-François Denis committed
				printf("\nSTART INIT\n");
				HOMCPTFLAG=0; // HOME
				pvPut(HOMCPTFLAG);
				}state stop
		   }

	state stop
		   {
Jean-François Denis's avatar
Jean-François Denis committed
			when((mtrPlaced ==1)&& delay(2.0))
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);
Jean-François Denis's avatar
Jean-François Denis committed
				}state init