@@ -9199,6 +9199,9 @@ FB_SXU
9199
9199
VAR
9200
9200
// From lcls-srv01: grep -e KDes /u1/lcls/epics/ioc/data/sioc-unds-uc*/iocInfo/IOC.pvlist |sort
9201
9201
9202
+ {attribute 'pytmc' := 'pv: 21; link: 2150:'}
9203
+ fbSegment_21 : FB_UndulatorSegment;
9204
+
9202
9205
{attribute 'pytmc' := 'pv: 22; link: 2250:'}
9203
9206
fbSegment_22 : FB_UndulatorSegment;
9204
9207
@@ -9289,7 +9292,7 @@ FB_SXU
9289
9292
{attribute 'pytmc' := '
9290
9293
pv: FirstSegment
9291
9294
io: i'}
9292
- iLowBound : UDINT := 22 ;
9295
+ iLowBound : UDINT := 21 ;
9293
9296
{attribute 'pytmc' := '
9294
9297
pv: LastSegment
9295
9298
io: i'}
@@ -9333,6 +9336,7 @@ FB_SXU
9333
9336
IF fbSegment[iIndex] <> 0 THEN
9334
9337
fbCurrentSegment REF= fbSegment[iIndex]^;
9335
9338
fbCurrentSegment(fbElectronEnergy:=fbElectronEnergy);
9339
+ fbCurrentSegment.fPeriod_mm := fbCurrentSegment.fLambda_U*1000;
9336
9340
9337
9341
//Mark the seed undulator, first undulator operating within K bounds
9338
9342
IF fbCurrentSegment.xActive AND nSeedUndulator = 0 THEN
@@ -9365,15 +9369,17 @@ FB_SXU
9365
9369
fbCurrentSegment REF= fbSegment[iIndex]^;
9366
9370
fbCurrentSegment.fLowK := fLowK;
9367
9371
fbCurrentSegment.fHiK := fHiK;
9368
- IF (iIndex >= 26) THEN fbCurrentSegment.fPeriod_mm := fPeriod_39_mm;
9369
- ELSE fbCurrentSegment.fPeriod_mm := fPeriod_56_mm;
9370
- END_IF
9371
9372
END_IF
9372
9373
END_FOR
9373
9374
bInitialized := TRUE;
9374
9375
END_ACTION
9375
9376
9376
9377
ACTION UndAdrUpdate:
9378
+ fbSegment[21] := 0;
9379
+ fbSegment[22] := ADR(fbSegment_22);
9380
+ fbSegment[23] := ADR(fbSegment_23);
9381
+ fbSegment[24] := ADR(fbSegment_24);
9382
+ fbSegment[25] := ADR(fbSegment_25);
9377
9383
fbSegment[26] := ADR(fbSegment_26);
9378
9384
fbSegment[27] := ADR(fbSegment_27);
9379
9385
fbSegment[28] := ADR(fbSegment_28);
@@ -9516,8 +9522,9 @@ FB_UndulatorSegment
9516
9522
9517
9523
FUNCTION_BLOCK FB_UndulatorSegment
9518
9524
VAR_INPUT
9519
- (* Undulator period in millimeters, to be set by subclasses *)
9525
+ (* Undulator period in millimeters, to be set by subclasses for HXR, read by pv for SXR, left here for backward compatability *)
9520
9526
fPeriod_mm : LREAL := 1.0;
9527
+
9521
9528
fbElectronEnergy : REFERENCE TO FB_LREALFromEPICS;
9522
9529
9523
9530
fLowK : LREAL := 0;
@@ -9570,7 +9577,14 @@ FB_UndulatorSegment
9570
9577
'}
9571
9578
fKDes : LREAL;
9572
9579
9573
- {attribute 'pytmc' := '
9580
+ {attribute 'pytmc' := '
9581
+ pv: Lambda_U
9582
+ io: i
9583
+ field: DESC Period in m
9584
+ '}
9585
+ fLambda_U : LREAL;
9586
+
9587
+ {attribute 'pytmc' := '
9574
9588
pv: KActValid
9575
9589
io: i
9576
9590
field: DESC Current K Readback Valid
@@ -9584,6 +9598,14 @@ FB_UndulatorSegment
9584
9598
'}
9585
9599
bKDesValid : BOOL;
9586
9600
9601
+ {attribute 'pytmc' := '
9602
+ pv: lambdaValid
9603
+ io: i
9604
+ field: DESC lambda_U Readback Valid
9605
+ '}
9606
+ blambdaValid : BOOL;
9607
+
9608
+
9587
9609
END_VAR
9588
9610
9589
9611
VAR
@@ -9599,18 +9621,27 @@ FB_UndulatorSegment
9599
9621
'}
9600
9622
fbKActual : FB_LREALFromEPICS;
9601
9623
9624
+ {attribute 'pytmc' := '
9625
+ pv: lambda_U
9626
+ link: lambda_U
9627
+ '}
9628
+ fblambda_U : FB_LREALFromEPICS;
9629
+
9602
9630
END_VAR
9603
9631
fbKDesired();
9604
9632
fbKActual();
9633
+ fblambda_U();
9605
9634
9606
9635
fKAct := fbKActual.fValue;
9607
9636
bKActValid := fbKActual.bValid;
9608
9637
fKDes := fbKDesired.fValue;
9609
9638
bKDesValid := fbKDesired.bvalid;
9639
+ fLambda_U := fblambda_U.fValue;
9640
+ blambdaValid:= fblambda_U.bValid;
9610
9641
9611
9642
IF __ISVALIDREF(fbElectronEnergy) THEN
9612
9643
9613
- IF fbKActual.bValid AND fbElectronEnergy.bValid THEN
9644
+ IF fbKActual.bValid AND fblambda_U.bValid AND fbElectronEnergy.bValid THEN
9614
9645
fPhotonEnergyAct := F_CalculatePhotonEnergy(
9615
9646
fElectronEnergy_GeV:=fbElectronEnergy.fValue,
9616
9647
fUndulatorPeriod_mm:=fPeriod_mm,
@@ -9630,7 +9661,7 @@ FB_UndulatorSegment
9630
9661
(NOT fbKDesired.bValid OR NOT fbKDesired.bValid);
9631
9662
END_IF
9632
9663
9633
- IF fbKDesired.bValid AND fbElectronEnergy.bValid THEN
9664
+ IF fbKDesired.bValid AND fblambda_U.bValid AND fbElectronEnergy.bValid THEN
9634
9665
fPhotonEnergyDes := F_CalculatePhotonEnergy(
9635
9666
fElectronEnergy_GeV:=fbElectronEnergy.fValue,
9636
9667
fUndulatorPeriod_mm:=fPeriod_mm,
0 commit comments