Add logic to PV AcquirePeriod controls the EVR pulse period

This commit is contained in:
Douglas Araujo
2023-05-24 15:30:44 +02:00
committed by Iocuser
parent 7b73325de8
commit 63fc03a41e
3 changed files with 38 additions and 51 deletions
+24 -29
View File
@@ -90,15 +90,19 @@ record(mbbi, "$(P)$(R)ColorMode_RBV") {
field(SVVL, "")
}
record(ao, "$(P)$(R)ExtTriggerFreq-S") {
field(DESC, "External trigger frequency")
field(PREC, "3")
field(EGU, "Hz")
field(DRVL, "0")
field(DRVH, "500")
record("*", "$(P)$(R)AcquirePeriod_RBV")
{
field(FLNK, "$(P)$(R)#EVRAcquireTime-S.PROC PP MS")
}
record(calcout, "$(P)$(R)#EVRAcquireTime-S") {
field(DESC, "Set EVR acquire time in seconds")
field(CALC, "A=0?B:A*B")
field(INPA, "$(P)$(R)AcquirePeriod_RBV")
field(INPB, "88052500")
field(OUT, "$(EVR):PS-1-Div-SP PP")
}
record(stringin, "$(P)$(R)#EVRTimeProc") {
field(DESC, "Start proce the EVRTime record")
field(DTYP, "Soft Timestamp")
@@ -118,14 +122,6 @@ record(stringout, "$(P)$(R)EVRTime-R") {
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))EVR_TIMESTAMP")
}
record(calcout, "$(P)$(R)#EVRAcquireTime-S") {
field(DESC, "Set EVR acquire time in seconds")
field(CALC, "A=0?B:(1/A)*B")
field(INPA, "$(P)$(R)ExtTriggerFreq-S")
field(INPB, "88052500")
field(OUT, "$(EVR):PS-1-Div-SP PP")
}
record(ai, "$(P)$(R)FrameRate-R") {
field(DESC, "Acquisition frame rate")
field(DTYP, "asynFloat64")
@@ -442,21 +438,20 @@ record(mbbi, "$(P)$(R)BitPerChannel-RB") {
##########################################################################
# Trigger source (mode 4)
record(mbbo, "$(P)$(R)TriggerSource-S") {
field(DESC,"")
field(PINI, "YES")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "Internal")
field(ONVL, "2")
field(ONST, "External")
field(TWVL, "3")
field(TWST, "Software")
field(THVL, "4")
field(THST, "Master Pulse")
# field(DRVL, "1")
# field(DRVH, "4")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_TRIGGER_SOURCE")
field(VAL, "1")
field(DESC,"")
field(PINI, "YES")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "Internal")
field(ONVL, "2")
field(ONST, "External")
field(TWVL, "3")
field(TWST, "Software")
field(THVL, "4")
field(THST, "Master Pulse")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_TRIGGER_SOURCE")
field(VAL, "1")
field(FLNK, "$(P)$(R)AcquirePeriod.PROC PP MS")
}
record(mbbi, "$(P)$(R)TriggerSource-RB") {
+13 -21
View File
@@ -1642,35 +1642,27 @@ asynStatus Hama::writeFloat64(asynUser *pasynUser, epicsFloat64 value){
//-- Feature
if(index == ADAcquireTime) {
printf("[DEBUG]::function ADAcquireTime from camera: %f\n", value);
status = setFeature(DCAM_IDPROP_EXPOSURETIME, value);
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue);
if(failed(m_err)) {
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
status = asynError;
}
/* int trigger_mode = 0;
int trigger_mode = 0;
getIntegerParam(hTriggerSource, &trigger_mode);
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue);
if (trigger_mode != DCAMPROP_TRIGGERSOURCE__EXTERNAL) {
if (trigger_mode == DCAMPROP_TRIGGERSOURCE__EXTERNAL) {
if (dvalue <= value) status = asynError;
}
else {
status = setFeature(DCAM_IDPROP_EXPOSURETIME, value);
m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue);
if(failed(m_err)) {
printError(m_hdcam, m_err, "dcamprop_setgetvalue()", "IDPROP:0x%08x, VALUE:%f\n", index, dvalue);
}
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue);
double acquire_period = 0;
status = getDoubleParam(ADAcquirePeriod, &acquire_period);
if (value >= acquire_period) {
status = setDoubleParam(ADAcquirePeriod, 0);
status = setFeature(DCAM_IDPROP_TRIGGERSOURCE, DCAMPROP_TRIGGERSOURCE__INTERNAL);
status = setIntegerParam(hTriggerSource, DCAMPROP_TRIGGERSOURCE__INTERNAL);
callParamCallbacks();
}
}
else status = asynError;
*/
}
}
else if(index == ADAcquirePeriod) {
@@ -1679,13 +1671,11 @@ asynStatus Hama::writeFloat64(asynUser *pasynUser, epicsFloat64 value){
int trigger_mode = 0;
getIntegerParam(hTriggerSource, &trigger_mode);
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue);
if (trigger_mode != DCAMPROP_TRIGGERSOURCE__EXTERNAL) {
m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_EXPOSURETIME, &dvalue);
if (value <= dvalue) {
status = setFeature(DCAM_IDPROP_TRIGGERSOURCE, DCAMPROP_TRIGGERSOURCE__INTERNAL);
status = setIntegerParam(hTriggerSource, DCAMPROP_TRIGGERSOURCE__INTERNAL);
value = 0;
}
else {
status = setFeature(DCAM_IDPROP_TRIGGERSOURCE, DCAMPROP_TRIGGERSOURCE__MASTERPULSE);
@@ -1698,7 +1688,9 @@ asynStatus Hama::writeFloat64(asynUser *pasynUser, epicsFloat64 value){
status = setIntegerParam(hMasterPulseMode, DCAMPROP_MASTERPULSE_MODE__CONTINUOUS);
}
}
else status = asynError;
else {
if (value <= dvalue) status = asynError;
}
}
//-- Trigger
+1 -1
View File
@@ -67,7 +67,7 @@ dbpf Hama:image1:EnableCallbacks 1
dbpf Hama:Kfk1:EnableCallbacks 1
dbpf Hama:cam1:AcquireTime .05
dbpf Hama:cam1:TriggerSource-S 1 # external
#dbpf Hama:cam1:TriggerSource-S 1 # external
#dbpf Hama:cam1:NumImages 10
#dbpf Hama:cam1:ImageMode 1