Skip to content
This repository has been archived by the owner on May 17, 2023. It is now read-only.

Commit

Permalink
Merge branch 'devel'
Browse files Browse the repository at this point in the history
  • Loading branch information
melissa-aguiar committed May 13, 2022
2 parents 707be47 + 3fbc38b commit f41f23a
Show file tree
Hide file tree
Showing 9 changed files with 2,536 additions and 2,164 deletions.
36 changes: 29 additions & 7 deletions FOFBApp/Db/FOFBRtm.template
Original file line number Diff line number Diff line change
Expand Up @@ -285,26 +285,44 @@ record(longin,"$(P)$(R)TestPIDacCntMax-RB"){
field(INP,"@asynMask($(PORT),$(ADDR),0xFFFFFFFF,$(TIMEOUT))RTMLAMP_OHWR_PI_OL_DAC_CNT_MAX_DATA")
}

record(longout,"$(P)$(R)TestCurrLowLim-SP"){
record(longout,"$(P)$(R)TestLowLim-SP"){
field(DTYP,"asynUInt32Digital")
field(DESC,"set PI setpoint inferior limit")
field(SCAN,"Passive")
field(OUT,"@asynMask($(PORT),$(ADDR),0xFFFFFFFF,$(TIMEOUT))RTMLAMP_OHWR_PI_SP_LIM_INF_DATA")
field(PINI,"YES")
}
record(longin,"$(P)$(R)TestCurrLowLim-RB"){
record(longin,"$(P)$(R)TestLowLim-RB"){
field(DTYP,"asynUInt32Digital")
field(DESC,"get PI setpoint inferior limit")
field(SCAN,"I/O Intr")
field(INP,"@asynMask($(PORT),$(ADDR),0xFFFFFFFF,$(TIMEOUT))RTMLAMP_OHWR_PI_SP_LIM_INF_DATA")
}

record(longout,"$(S)$(RTM_CHAN)TestHighLim-SP"){
field(DTYP,"asynUInt32Digital")
field(DESC,"set PI setpoint parameter")
field(SCAN,"Passive")
field(OUT,"@asynMask($(PORT),$(ADDR),0xFFFFFFFF,$(TIMEOUT))RTMLAMP_OHWR_CH_0_PI_SP_DATA")
field(PINI,"YES")
}

record(longin,"$(S)$(RTM_CHAN)TestHighLim-RB"){
field(DTYP,"asynUInt32Digital")
field(DESC,"get PI setpoint parameter in ADC counts")
field(SCAN,"I/O Intr")
field(INP,"@asynMask($(PORT),$(ADDR),0xFFFFFFFF,$(TIMEOUT))RTMLAMP_OHWR_CH_0_PI_SP_DATA")
field(FLNK,"$(S)$(RTM_CHAN)CurrentConv2-SP CPP NMS")
}

record(ao,"$(S)$(RTM_CHAN)Current-SP"){
field(DESC,"set PI setpoint parameter")
field(PINI,"YES")
field(SCAN,"Passive")
field(PREC,"15")
field(FLNK,"$(S)$(RTM_CHAN)CurrentConv-SP CPP NMS")
field(DESC,"set PI setpoint parameter")
field(PINI,"YES")
field(SCAN,"Passive")
field(PREC,"15")
field(DRVH, "0.95")
field(DRVL, "-0.95")
field(FLNK,"$(S)$(RTM_CHAN)CurrentConv-SP CPP NMS")
}
record(calcout,"$(S)$(RTM_CHAN)CurrentConv-SP"){
field(DESC,"set PI setpoint parameter in ADC counts")
Expand All @@ -320,6 +338,8 @@ record(longout,"$(S)$(RTM_CHAN)CurrentRaw-SP"){
field(DTYP,"asynUInt32Digital")
field(DESC,"set PI setpoint parameter")
field(SCAN,"Passive")
field(DRVH, "15200")
field(DRVL, "-15200")
field(OUT,"@asynMask($(PORT),$(ADDR),0xFFFFFFFF,$(TIMEOUT))RTMLAMP_OHWR_CH_0_PI_SP_DATA")
field(PINI,"YES")
}
Expand Down Expand Up @@ -347,4 +367,6 @@ record(ai,"$(S)$(RTM_CHAN)Current-RB"){
field(DESC,"get PI setpoint parameter")
field(SCAN,"Passive")
field(PREC,"15")
field(FLINK, "$(S)$(RTM_CHAN)TestHighLim-RB CA NMS")
}

3 changes: 2 additions & 1 deletion FOFBApp/Db/FOFBRtm_settings.req
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ $(S)$(RTM_CHAN)DacWr-Cmd
$(S)$(RTM_CHAN)CtrlLoopKp-SP
$(S)$(RTM_CHAN)CtrlLoopTi-SP
$(P)$(R)TestPIDacCntMax-SP
$(P)$(R)TestCurrLowLim-SP
$(P)$(R)TestLowLim-SP
$(S)$(RTM_CHAN)TestHighLim-SP
$(S)$(RTM_CHAN)$(GAIN)-SP
$(S)$(RTM_CHAN)$(OFFSET)-SP
$(S)$(RTM_CHAN)CurrentRaw-SP
Expand Down
184 changes: 95 additions & 89 deletions scripts/python/all_racks_set_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,124 +40,130 @@
print(' # # # # # # # # # # # # # # # # # # # # # # # # # #\n')

for crate_number in crates:

# PV prefixes

prefix_fofb = "IA-" + crate_number + "RaBPM:BS-FOFBCtrl:"

prefix_rtmch00 = "SI-" + crate_number + "M1:PS-FCH:"
prefix_rtmch01 = "SI-" + crate_number + "M1:PS-FCV:"
prefix_rtmch02 = "SI-" + crate_number + "M2:PS-FCH:"
prefix_rtmch03 = "SI-" + crate_number + "M2:PS-FCV:"
prefix_rtmch04 = "SI-" + crate_number + "C2:PS-FCH:"
prefix_rtmch05 = "SI-" + crate_number + "C2:PS-FCV:"
prefix_rtmch06 = "SI-" + crate_number + "C3:PS-FCH:"
prefix_rtmch07 = "SI-" + crate_number + "C3:PS-FCV:"
prefix_rtmch08 = "SI-" + crate_number + "XX:PS-FC08:"
prefix_rtmch09 = "SI-" + crate_number + "XX:PS-FC09:"
prefix_rtmch10 = "SI-" + crate_number + "XX:PS-FC10:"
prefix_rtmch11 = "SI-" + crate_number + "XX:PS-FC11:"

prefix_rtm = [prefix_rtmch00, prefix_rtmch01, prefix_rtmch02, prefix_rtmch03, prefix_rtmch04, prefix_rtmch05,
prefix_rtmch06, prefix_rtmch07, prefix_rtmch08, prefix_rtmch09, prefix_rtmch10, prefix_rtmch11]
# PV prefixes

# global PVs
prefix_fofb = "IA-" + crate_number + "RaBPM:BS-FOFBCtrl:"

pv_acq_trigger_rep = str(prefix_fofb) + str("ACQTriggerRep-Sel")
pv_acq_trigger_event = str(prefix_fofb) + str("ACQTriggerEvent-Sel")
pv_acq_samples_pre = str(prefix_fofb) + str("ACQSamplesPre-SP")
pv_current_setpoint_inf = str(prefix_fofb) + str("TestCurrLowLim-SP")
pv_dac_cnt_max = str(prefix_fofb) + str("TestPIDacCntMax-SP")
prefix_rtmch00 = "SI-" + crate_number + "M1:PS-FCH:"
prefix_rtmch01 = "SI-" + crate_number + "M1:PS-FCV:"
prefix_rtmch02 = "SI-" + crate_number + "M2:PS-FCH:"
prefix_rtmch03 = "SI-" + crate_number + "M2:PS-FCV:"
prefix_rtmch04 = "SI-" + crate_number + "C2:PS-FCH:"
prefix_rtmch05 = "SI-" + crate_number + "C2:PS-FCV:"
prefix_rtmch06 = "SI-" + crate_number + "C3:PS-FCH:"
prefix_rtmch07 = "SI-" + crate_number + "C3:PS-FCV:"
prefix_rtmch08 = "SI-" + crate_number + "XX:PS-FC08:"
prefix_rtmch09 = "SI-" + crate_number + "XX:PS-FC09:"
prefix_rtmch10 = "SI-" + crate_number + "XX:PS-FC10:"
prefix_rtmch11 = "SI-" + crate_number + "XX:PS-FC11:"

# PVs per channel
prefix_rtm = [prefix_rtmch00, prefix_rtmch01, prefix_rtmch02, prefix_rtmch03, prefix_rtmch04, prefix_rtmch05,
prefix_rtmch06, prefix_rtmch07, prefix_rtmch08, prefix_rtmch09, prefix_rtmch10, prefix_rtmch11]

pv_current_ArrayDataRAW = []
pv_current_gain = []
pv_voltage_gain = []
pv_current_offset = []
pv_voltage_offset = []
pv_current_setpoint = []
pv_amp_enable = []
pv_pi_enable = []
pv_pi_kp = []
pv_pi_ti = []
# global PVs

# getting lists of PV names, so we can reutilize them in all tests
pv_acq_trigger_rep = str(prefix_fofb) + str("ACQTriggerRep-Sel")
pv_acq_trigger_event = str(prefix_fofb) + str("ACQTriggerEvent-Sel")
pv_acq_samples_pre = str(prefix_fofb) + str("ACQSamplesPre-SP")
pv_setpoint_inf = str(prefix_fofb) + str("TestLowLim-SP")
pv_dac_cnt_max = str(prefix_fofb) + str("TestPIDacCntMax-SP")

for i in range(0, channels):
pv_current_ArrayDataRAW.append(str(prefix_fofb) + str("GEN_CH") + str(i) + str("ArrayData"))
# PVs per channel

for pv_prefix in prefix_rtm:
pv_current_gain.append( str(pv_prefix) + str("CurrGain") + str("-SP"))
pv_voltage_gain.append( str(pv_prefix) + str("VoltGain") + str("-SP"))
pv_current_offset.append( str(pv_prefix) + str("CurrOffset") + str("-SP"))
pv_voltage_offset.append( str(pv_prefix) + str("VoltOffset") + str("-SP"))
pv_current_setpoint.append( str(pv_prefix) + str("Current") + str("-SP"))
pv_amp_enable.append( str(pv_prefix) + str("PwrState") + str("-Sel"))
pv_pi_enable.append( str(pv_prefix) + str("CtrlLoop") + str("-Sel"))
pv_pi_kp.append( str(pv_prefix) + str("CtrlLoopKp") + str("-SP"))
pv_pi_ti.append( str(pv_prefix) + str("CtrlLoopTi") + str("-SP"))
pv_current_ArrayDataRAW = []
pv_current_gain = []
pv_voltage_gain = []
pv_current_offset = []
pv_voltage_offset = []
pv_current_setpoint = []
pv_amp_enable = []
pv_pi_enable = []
pv_pi_kp = []
pv_pi_ti = []
pv_square_wave_openloop = []
pv_test_high_lim = []

# getting lists of PV names, so we can reutilize them in all tests

print('\n--------------------------------------------------------------------------')
print('>> Set parameters for RACK', crate_number)
print('--------------------------------------------------------------------------\n')
for i in range(0, channels):
pv_current_ArrayDataRAW.append(str(prefix_fofb) + str("GEN_CH") + str(i) + str("ArrayData"))

print('>>> Set initial values for gain, offset, PI Kp and PI Ti ...')
for pv_prefix in prefix_rtm:
pv_current_gain.append( str(pv_prefix) + str("CurrGain") + str("-SP"))
pv_voltage_gain.append( str(pv_prefix) + str("VoltGain") + str("-SP"))
pv_current_offset.append( str(pv_prefix) + str("CurrOffset") + str("-SP"))
pv_voltage_offset.append( str(pv_prefix) + str("VoltOffset") + str("-SP"))
pv_current_setpoint.append( str(pv_prefix) + str("Current") + str("-SP"))
pv_test_high_lim.append( str(pv_prefix) + str("TestHighLim")+ str("-SP"))
pv_amp_enable.append( str(pv_prefix) + str("PwrState") + str("-Sel"))
pv_pi_enable.append( str(pv_prefix) + str("CtrlLoop") + str("-Sel"))
pv_pi_kp.append( str(pv_prefix) + str("CtrlLoopKp") + str("-SP"))
pv_pi_ti.append( str(pv_prefix) + str("CtrlLoopTi") + str("-SP"))
pv_square_wave_openloop.append(str(pv_prefix) + str("TestOpenLoopSquare") + str("-Sel"))

# initializing some PVs with default values

for i in range(0, channels):
PV(pv_current_gain[i]).put(current_gain, wait=True)
PV(pv_current_offset[i]).put(current_offset, wait=True)
PV(pv_voltage_gain[i]).put(voltage_gain, wait=True)
PV(pv_voltage_offset[i]).put(voltage_offset, wait=True)
PV(pv_pi_kp[i]).put(pi_kp, wait=True)
PV(pv_pi_ti[i]).put(pi_ti, wait=True)
PV(pv_amp_enable[i]).put(0, wait=True)
PV(pv_pi_enable[i]).put(0, wait=True)
print('\n--------------------------------------------------------------------------')
print('>> Set parameters for RACK', crate_number)
print('--------------------------------------------------------------------------\n')

print('>>> Set initial values for gain, offset, PI Kp and PI Ti... Done!\n')
print('>>> Set initial values for gain, offset, PI Kp and PI Ti ...')

print('>>> Set the period for 10ms...')
# initializing some PVs with default values

PV(pv_dac_cnt_max).put(dac_cnt_max, wait=True)
for i in range(0, channels):
PV(pv_current_gain[i]).put(current_gain, wait=True)
PV(pv_current_offset[i]).put(current_offset, wait=True)
PV(pv_voltage_gain[i]).put(voltage_gain, wait=True)
PV(pv_voltage_offset[i]).put(voltage_offset, wait=True)
PV(pv_pi_kp[i]).put(pi_kp, wait=True)
PV(pv_pi_ti[i]).put(pi_ti, wait=True)
PV(pv_amp_enable[i]).put(0, wait=True)
PV(pv_pi_enable[i]).put(0, wait=True)
PV(pv_square_wave_openloop[i]).put(0, wait=True)

print('>>> Set the period for 10ms... Done!\n')
print('>>> Set initial values for gain, offset, PI Kp and PI Ti... Done!\n')

print('>>> Set zero for the current setpoints...')
print('>>> Set the period for 10ms...')

for i in range(0, channels):
PV(pv_current_setpoint[i]).put(0, wait=True)
PV(pv_current_setpoint_inf).put(0, wait=True)
PV(pv_dac_cnt_max).put(dac_cnt_max, wait=True)

print('>>> Set zero for the current setpoints... Done!')
print('>>> Set the period for 10ms... Done!\n')

print('\n>>> New acquisition...')
print('>>> Set zero for the current setpoints...')

# do an acquisition and stop the event,
# so the array data will be the same until we do another acquisition
for i in range(0, channels):
PV(pv_current_setpoint[i]).put(0, wait=True)
PV(pv_test_high_lim[i]).put(0, wait=True)
PV(pv_setpoint_inf).put(0, wait=True)

PV(pv_acq_samples_pre).put(samples, wait=True)
PV(pv_acq_trigger_rep).put(0, wait=True)
PV(pv_acq_trigger_event).put(0, wait=True)
time.sleep(0.5) # just to see the waveform change in graphical interface
PV(pv_acq_trigger_event).put(1, wait=True)
print('>>> Set zero for the current setpoints... Done!')

print('>>> New acquisition... Done!')
print('\n>>> New acquisition...')

new_offset = np.zeros(channels)
for i in range(0, channels):
new_offset[i] = int(np.mean(PV(pv_current_ArrayDataRAW[i]).get()))
# do an acquisition and stop the event,
# so the array data will be the same until we do another acquisition

print('\n>> New current offset values: \n', new_offset)
PV(pv_acq_samples_pre).put(samples, wait=True)
PV(pv_acq_trigger_rep).put(0, wait=True)
PV(pv_acq_trigger_event).put(0, wait=True)
time.sleep(0.5) # just to see the waveform change in graphical interface
PV(pv_acq_trigger_event).put(1, wait=True)

print('\n>>> Set the new current offset for all channels...')
print('>>> New acquisition... Done!')

for i in range(0, channels):
PV(pv_current_offset[i]).put(new_offset[i])
new_offset = np.zeros(channels)
for i in range(0, channels):
new_offset[i] = int(np.mean(PV(pv_current_ArrayDataRAW[i]).get()))

print('>>> Set the new current offset for all channels... Done!')
print('\n>> New current offset values: \n', new_offset)

print('\n>>> Set the new current offset for all channels...')

for i in range(0, channels):
PV(pv_current_offset[i]).put(new_offset[i])

print('>>> Set the new current offset for all channels... Done!')

print('\n--------------------------------------------------------------------------')
print('----------------------------------- END ----------------------------------')
Expand Down
4 changes: 2 additions & 2 deletions scripts/python/all_racks_test_open_loop.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
pv_acq_trigger_rep = str(prefix_fofb) + str("ACQTriggerRep-Sel")
pv_acq_trigger_event = str(prefix_fofb) + str("ACQTriggerEvent-Sel")
pv_acq_samples_pre = str(prefix_fofb) + str("ACQSamplesPre-SP")
pv_current_setpoint_inf = str(prefix_fofb) + str("TestCurrLowLim-SP")
pv_current_setpoint_inf = str(prefix_fofb) + str("TestLowLim-SP")
pv_dac_cnt_max = str(prefix_fofb) + str("TestPIDacCntMax-SP")
pv_dac_data_wb = str(prefix_fofb) + str("DacDataSrc-Sel")

Expand Down Expand Up @@ -117,7 +117,7 @@
pv_voltage_gain.append( str(pv_prefix) + str("VoltGain") + str("-SP"))
pv_current_offset.append( str(pv_prefix) + str("CurrOffset") + str("-SP"))
pv_voltage_offset.append( str(pv_prefix) + str("VoltOffset") + str("-SP"))
pv_current_setpoint.append( str(pv_prefix) + str("CurrentRaw") + str("-SP"))
pv_current_setpoint.append( str(pv_prefix) + str("TestHighLim")+ str("-SP"))
pv_amp_enable.append( str(pv_prefix) + str("PwrState") + str("-Sel"))
pv_pi_enable.append( str(pv_prefix) + str("CtrlLoop") + str("-Sel"))
pv_pi_kp.append( str(pv_prefix) + str("CtrlLoopKp") + str("-SP"))
Expand Down
Loading

0 comments on commit f41f23a

Please sign in to comment.