Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DEV: Mono SC implementation #101

Merged
merged 3 commits into from
Sep 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion GratingMonoScope/VSSettings/.vsm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<Node>
<Title>Scope YT NC Project</Title>
<Expanded>True</Expanded>
<FileName>C:\Users\nrw\plcprojs\lcls-plc-rixs-optics\GratingMonoScope\Scope YT NC Project.tcscopex</FileName>
<FileName>C:\Github (mghaly)\lcls-plc-rixs-optics\GratingMonoScope\Scope YT NC Project.tcscopex</FileName>
<Children>
<Node>
<Title>DataPool</Title>
Expand Down
32 changes: 16 additions & 16 deletions lcls-plc-rixs-optics/_Config/PLC/rixs_optics.xti
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,15 @@
</Format>
</DataType>
<DataType>
<Name GUID="{D03D69A1-BF28-445B-838B-E78D4A687778}" Namespace="lcls_twincat_motion" AutoDeleteType="true">EL5042_Status</Name>
<Name GUID="{7CC27056-D141-4DE4-95D2-6B65B10B6AB4}" Namespace="lcls_twincat_motion" AutoDeleteType="true">EL5042_Status</Name>
<BitSize>0</BitSize>
<BaseType GUID="{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}"/>
<Hides>
<Hide GUID="{3FFD09D1-96AE-4CA8-9F3B-B190ED4E3132}"/>
<Hide GUID="{D03D69A1-BF28-445B-838B-E78D4A687778}"/>
</Hides>
</DataType>
<DataType>
<Name GUID="{FB7D5431-7B7B-4738-9231-480B0E95EB4A}" Namespace="lcls_twincat_motion" AutoDeleteType="true">ST_RenishawAbsEnc</Name>
<Name GUID="{C13F2823-EEBD-4580-AF38-47D327636A15}" Namespace="lcls_twincat_motion" AutoDeleteType="true">ST_RenishawAbsEnc</Name>
<Comment>
<![CDATA[Renishaw BiSS-C absolute encoder used with an EL5042]]>
</Comment>
Expand All @@ -106,7 +106,7 @@
</SubItem>
<SubItem>
<Name>Status</Name>
<Type GUID="{D03D69A1-BF28-445B-838B-E78D4A687778}" Namespace="lcls_twincat_motion">EL5042_Status</Type>
<Type GUID="{7CC27056-D141-4DE4-95D2-6B65B10B6AB4}" Namespace="lcls_twincat_motion">EL5042_Status</Type>
<Comment>
<![CDATA[Status struct placeholder]]>
</Comment>
Expand All @@ -123,7 +123,7 @@
<BitOffs>64</BitOffs>
</SubItem>
<Hides>
<Hide GUID="{C983838E-0160-447A-9028-BAAB11793078}"/>
<Hide GUID="{FB7D5431-7B7B-4738-9231-480B0E95EB4A}"/>
</Hides>
</DataType>
<DataType>
Expand Down Expand Up @@ -1377,7 +1377,7 @@ External Setpoint Generation:
<Comment>
<![CDATA[ Encoders]]>
</Comment>
<Type GUID="{FB7D5431-7B7B-4738-9231-480B0E95EB4A}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<Type GUID="{C13F2823-EEBD-4580-AF38-47D327636A15}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<SubVar>
<Name>Count</Name>
<Comment>
Expand All @@ -1399,7 +1399,7 @@ External Setpoint Generation:
</Var>
<Var>
<Name>PRG_MR1K1_BEND.M1K1.fbRunHOMS.stYdwnEnc</Name>
<Type GUID="{FB7D5431-7B7B-4738-9231-480B0E95EB4A}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<Type GUID="{C13F2823-EEBD-4580-AF38-47D327636A15}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<SubVar>
<Name>Count</Name>
<Comment>
Expand All @@ -1421,7 +1421,7 @@ External Setpoint Generation:
</Var>
<Var>
<Name>PRG_MR1K1_BEND.M1K1.fbRunHOMS.stXupEnc</Name>
<Type GUID="{FB7D5431-7B7B-4738-9231-480B0E95EB4A}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<Type GUID="{C13F2823-EEBD-4580-AF38-47D327636A15}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<SubVar>
<Name>Count</Name>
<Comment>
Expand All @@ -1443,7 +1443,7 @@ External Setpoint Generation:
</Var>
<Var>
<Name>PRG_MR1K1_BEND.M1K1.fbRunHOMS.stXdwnEnc</Name>
<Type GUID="{FB7D5431-7B7B-4738-9231-480B0E95EB4A}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<Type GUID="{C13F2823-EEBD-4580-AF38-47D327636A15}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<SubVar>
<Name>Count</Name>
<Comment>
Expand Down Expand Up @@ -1673,7 +1673,7 @@ Emergency Stop for MR1K1]]>
<Comment>
<![CDATA[ Encoders]]>
</Comment>
<Type GUID="{FB7D5431-7B7B-4738-9231-480B0E95EB4A}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<Type GUID="{C13F2823-EEBD-4580-AF38-47D327636A15}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<SubVar>
<Name>Count</Name>
<Comment>
Expand All @@ -1695,7 +1695,7 @@ Emergency Stop for MR1K1]]>
</Var>
<Var>
<Name>PRG_MR1K2_SWITCH.M1K2.fbRunHOMS.stYdwnEnc</Name>
<Type GUID="{FB7D5431-7B7B-4738-9231-480B0E95EB4A}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<Type GUID="{C13F2823-EEBD-4580-AF38-47D327636A15}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<SubVar>
<Name>Count</Name>
<Comment>
Expand All @@ -1717,7 +1717,7 @@ Emergency Stop for MR1K1]]>
</Var>
<Var>
<Name>PRG_MR1K2_SWITCH.M1K2.fbRunHOMS.stXupEnc</Name>
<Type GUID="{FB7D5431-7B7B-4738-9231-480B0E95EB4A}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<Type GUID="{C13F2823-EEBD-4580-AF38-47D327636A15}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<SubVar>
<Name>Count</Name>
<Comment>
Expand All @@ -1739,7 +1739,7 @@ Emergency Stop for MR1K1]]>
</Var>
<Var>
<Name>PRG_MR1K2_SWITCH.M1K2.fbRunHOMS.stXdwnEnc</Name>
<Type GUID="{FB7D5431-7B7B-4738-9231-480B0E95EB4A}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<Type GUID="{C13F2823-EEBD-4580-AF38-47D327636A15}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<SubVar>
<Name>Count</Name>
<Comment>
Expand Down Expand Up @@ -2192,7 +2192,7 @@ External Setpoint Generation:
</Var>
<Var>
<Name>PRG_SP1K1_MONO.mpi_upe</Name>
<Type GUID="{FB7D5431-7B7B-4738-9231-480B0E95EB4A}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<Type GUID="{C13F2823-EEBD-4580-AF38-47D327636A15}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<SubVar>
<Name>Count</Name>
<Comment>
Expand All @@ -2214,7 +2214,7 @@ External Setpoint Generation:
</Var>
<Var>
<Name>PRG_SP1K1_MONO.gpi_upe</Name>
<Type GUID="{FB7D5431-7B7B-4738-9231-480B0E95EB4A}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<Type GUID="{C13F2823-EEBD-4580-AF38-47D327636A15}" Namespace="lcls_twincat_motion">ST_RenishawAbsEnc</Type>
<SubVar>
<Name>Count</Name>
<Comment>
Expand Down Expand Up @@ -8722,8 +8722,8 @@ External Setpoint Generation:
<TaskPouOids>
<TaskPouOid Prio="19" OTCID="#x08502004"/>
<TaskPouOid Prio="1" OTCID="#x08502001"/>
<TaskPouOid Prio="3" OTCID="#x08502002"/>
<TaskPouOid Prio="20" OTCID="#x08502003"/>
<TaskPouOid Prio="3" OTCID="#x08502002"/>
</TaskPouOids>
</Instance>
</Project>
Expand Down
147 changes: 36 additions & 111 deletions lcls-plc-rixs-optics/rixs_optics/POUs/PRG_ZeroOrder_PMPS.TcPOU
Original file line number Diff line number Diff line change
Expand Up @@ -10,46 +10,57 @@ VAR
i_Desc := 'Faults when Zero order beam safe conditions are not met',
i_TypeCode := 16#F506);
{attribute 'pytmc' := '
pv: SIM:SafeBenderRange
pv: @(PREFIX)SafeBenderRange
field: ZNAM FALSE
field: ONAM TRUE
'}
bSafeBenderRange : BOOL;

{attribute 'pytmc' := '
pv: SIM:LRG_Grating_IN
pv: @(PREFIX)LRG_Grating_IN
field: ZNAM FALSE
field: ONAM TRUE
'}
bLRG_Grating_IN : BOOL;

{attribute 'pytmc' := '
pv: SIM:ZOS_IN
pv: @(PREFIX)ZOS_IN
field: ZNAM FALSE
field: ONAM TRUE
'}
bZOS_IN : BOOL;

{attribute 'pytmc' := '
pv: SIM:ZOB_on_Lower_Stopper
pv: :@(PREFIX)ZOB_on_Lower_Stopper
field: ZNAM FALSE
field: ONAM TRUE
'}
bZOB_on_Lower_Stopper : BOOL;

{attribute 'pytmc' := '
pv: SIM:MR1K1_Inserted
pv: @(PREFIX)MR1K1_Inserted
field: ZNAM FALSE
field: ONAM TRUE
'}
bMR1K1_Inserted : BOOL;



{attribute 'pytmc' := '
pv: @(PREFIX)MachineMode
field: ZRST NC
field: ONST SC
field: TWST Misconfig
field: THST UnInit
'}
nMachineMode : INT;

{attribute 'pytmc' := '
pv: SIM:ZeroOrderBeam
pv: @(PREFIX)BeamPermitted
field: ZNAM FALSE
field: ONAM TRUE
'}
bZeroOrderBeam : BOOL;
bBeamPermitted : BOOL;


Pm3 : LREAL;
Expand Down Expand Up @@ -86,33 +97,35 @@ VAR CONSTANT
Zmon : LREAL:=739.622;//m
Zpiv : LREAL:= 739.762 ; //m
Zzos : LREAL:= 741.422;//m
Pm1Offset: LREAL:= 18181;//=18310-129
Pm2Offset: LREAL:= -90641;
Pm3Offset: LREAL:= -63300;//urad, could depend on the inserted grating
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[
ffZeroOrderBeam.i_xOK := SafeBenderRange() OR (bLRG_Grating_IN AND bZOS_IN AND bZeroOrderBeam AND MR1K1_Inserted());
ffZeroOrderBeam.i_xOK := (SafeBenderRange() AND (((PMPS_GVL.stCurrentBeamParameters.nMachineMode =1(*SC*)) AND (PMPS_GVL.stCurrentBeamParameters.nBeamClass <=6)) OR (PMPS_GVL.stCurrentBeamParameters.nMachineMode =0(*NC*))))
OR (bLRG_Grating_IN AND bZOS_IN AND bZOB_on_Lower_Stopper AND MR1K1_Inserted()(*NC or SC Any Beamclass with beam at ZOS*));
ffZeroOrderBeam(io_fbFFHWO := GVL_PMPS.fbFastFaultOutput1);
bZOB_on_Lower_Stopper := ffZeroOrderBeam.i_xOK;
bBeamPermitted := ffZeroOrderBeam.i_xOK;

//Diagnostics
bSafeBenderRange := SafeBenderRange();
//bLRG_Grating_IN := LRG_Grating_IN();
//bZOS_IN := ZOS_IN();
bZOB_on_Lower_Stopper := ZOB_on_Lower_Stopper();
nMachineMode := PMPS_GVL.stCurrentBeamParameters.nMachineMode;
bMR1K1_Inserted := MR1K1_Inserted();
//bZeroOrderBeam := ffZeroOrderBeam.i_xOK;




//TRUE if hb0m3(Zzoz) - Hzos > D

//TRUE if Hzos - hb0m3(Zzoz) > D
Ans := (Hzos*1E3) - Hb0m3; //um
IF GVL_PMPS.rPhotonEnergy <550 THEN
bZeroOrderBeam := Ans > 3*1E3;
bZOB_on_Lower_Stopper := Ans > 3*1E3;
ELSIF GVL_PMPS.rPhotonEnergy <1000 THEN
bZeroOrderBeam := Ans > 2.5*1E3;
bZOB_on_Lower_Stopper := Ans > 2.5*1E3;
ELSIF GVL_PMPS.rPhotonEnergy >=1000 THEN
bZeroOrderBeam := Ans > 2*1E3;
bZOB_on_Lower_Stopper := Ans > 2*1E3;
END_IF

//
Expand All @@ -126,16 +139,16 @@ ACT_ExitSlitsGap();]]></ST>
<ST><![CDATA[///calc
//Hm1 = 1400000+mr1k1 ben Y up
Hm1:= 1400000+M12.fPosition; //um
//Pm1 = 18310 - 281 + mr1k1 bend pitch
Pm1 := 18310 - 281 + Main.M16.fPosition; //urad
//Pm1 = Pm1Offset + mr1k1 bend pitch
Pm1 := Pm1Offset + Main.M16.fPosition; //urad
//Hpiv = 1.620305 + 0.001 // m 0.001 is correction from nominal
Hpiv:= (1.620305 + 0.001)*1E6; //um
//Pm2 = mono mirror pitch - 90700 urad
Pm2 := Main.M6.fPosition - 90700;//urad
//Pm2 = mono mirror pitch + Pm2Offset urad
Pm2 := Main.M6.fPosition + Pm2Offset;//urad
//Hm3 = Hpiv + 0.006 m
Hm3:= Hpiv + (0.006*1E6); //um
//Pm3 = mono grating pitch - 63300 urad
Pm3 := Main.M7.fPosition - 63300; //urad
//Pm3 = mono grating pitch + Pm3Offset urad
Pm3 := Main.M7.fPosition + Pm3Offset; //urad
//Hzos = 1824.3 + st1k1_zos mm
Hzos:= 1824.3 + M24.fPosition; //mm

Expand Down Expand Up @@ -204,93 +217,5 @@ END_VAR
GVL_M1K1_BENDER_Constants.nM1K1bendDS_PMPS_LowerLimit < M18.nEncoderCount AND M18.nEncoderCount < GVL_M1K1_BENDER_Constants.nM1K1bendDS_PMPS_UpperLimit;]]></ST>
</Implementation>
</Method>
<Method Name="ZOB_on_Lower_Stopper" Id="{1038aeb1-9507-4623-b455-ede771c58d51}">
<Declaration><![CDATA[METHOD ZOB_on_Lower_Stopper : BOOL
VAR_INPUT
END_VAR
VAR
Pm3 : LREAL;
Pm2: LREAL;
Pm1: LREAL;
Hm1: LREAL;
HZos:LREAL;
Zbm1: LREAL;
Zbm2: LREAL;
Zbm3: LREAL;
Hbm1: LREAL;
Hbm2: LREAL;
Hbm3: LREAL;
Hb0m3:LREAL;
//fixed calc
Hm3 : LREAL;
Hpiv : LREAL;
Theta_m1: LREAL;
Theta_m2: LREAL;
Theta_m3: LREAL;
Delta : LREAL;
Ans : LREAL;
END_VAR

VAR CONSTANT
Hi2 :LREAL:=1.4;//m
Zi2: LREAL :=731.613;//m
Theta0 : LREAL:=0;
Zm1 : LREAL:=733.772;//m
Zmon : LREAL:=739.622;//m
Zpiv : LREAL:= 739.622 ; //m
Zzos : LREAL:= 741.422;//m
END_VAR

]]></Declaration>
<Implementation>
<ST><![CDATA[

//Hm1 = 1400000+mr1k1 ben Y up
Hm1:= 1400000+M12.fPosition; //um
//Pm1 = 18310 - 281 + mr1k1 bend pitch
Pm1 := 18310 - 281 + Main.M16.fPosition; //urad
//Hpiv = 1.620305 + 0.001 // m 0.001 is correction from nominal
Hpiv:= (1.620305 + 0.001)*1E6; //um
//Pm2 = mono mirror pitch - 90700 urad
Pm2 := Main.M6.fPosition - 90700;//urad
//Hm3 = Hpiv + 0.006 m
Hm3:= Hpiv + (0.006*1E6); //um
//Pm3 = mono grating pitch - 63300 urad
Pm3 := Main.M7.fPosition - 63300; //urad
//Hzos = 1824.3 + st1k1_zos mm
Hzos:= 1824.3 + M24.fPosition; //mm


//urad
Theta_m1 := 2*Pm1 - Theta0;
Theta_m2 := 2*Pm2 - Theta_m1;
Theta_m3 := 2 *Pm3 - 2 * Pm2 + 2* Pm1 - Theta0;

// fix units
//um
Zbm1 := (Hm1 - TAN(Pm1)* (Zm1*1E6) - (Hi2*1E6) + TAN(Theta0) *(Zi2*1E6))/(TAN(Theta0) - TAN(Pm1));
hbm1 := TAN(Pm1)*Zbm1 + Hm1 - TAN(Pm1)*(Zm1*1E6);
//u?
Zbm2 := (Hbm1 - TAN(Theta_m1)*Zbm1 - Hpiv + TAN(Pm2)*(Zpiv*1E6))/ (TAN(Pm2) - TAN(Theta_m1));
Hbm2 := TAN(Pm2)*Zbm2 + Hpiv - TAN(Pm2)*(Zpiv*1E6);

Zbm3 := (Hbm2 - TAN(Theta_m2)*Zbm2 - Hm3 + TAN(Pm3)*(Zpiv*1E6))/ (TAN(Pm3) - TAN(Theta_m2));
Hbm3 := TAN(Pm3) * Zbm3 + Hm3 - TAN(Pm3)*(Zpiv*1E6);

Hb0m3 := TAN(Theta_m3)*(Zzos*1E6) + Hbm3 - TAN(Theta_m3)*Zbm3;


//TRUE if hb0m3(Zzoz) - Hzos > D
Ans := Hb0m3 - (Hzos*1E3); //um
IF GVL_PMPS.rPhotonEnergy <550 THEN
ZOB_on_Lower_Stopper := Ans > 6*1E3;
ELSIF GVL_PMPS.rPhotonEnergy <1000 THEN
ZOB_on_Lower_Stopper := Ans > 3.2*1E3;
ELSIF GVL_PMPS.rPhotonEnergy >=1000 THEN
ZOB_on_Lower_Stopper := Ans > 2.5*1E3;
END_IF
]]></ST>
</Implementation>
</Method>
</POU>
</TcPlcObject>
Loading