From 63fc03a41ee973f3e8d7440dce47d91ec1b5c2d4 Mon Sep 17 00:00:00 2001 From: Douglas Araujo Date: Wed, 24 May 2023 15:30:44 +0200 Subject: [PATCH] Add logic to PV AcquirePeriod controls the EVR pulse period --- ADHamaApp/Db/hama.template | 53 +++++++++++++++++--------------------- ADHamaApp/src/hama.cpp | 34 ++++++++++-------------- cmds/st.cmd | 2 +- 3 files changed, 38 insertions(+), 51 deletions(-) diff --git a/ADHamaApp/Db/hama.template b/ADHamaApp/Db/hama.template index a1395c7..0473265 100644 --- a/ADHamaApp/Db/hama.template +++ b/ADHamaApp/Db/hama.template @@ -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") { diff --git a/ADHamaApp/src/hama.cpp b/ADHamaApp/src/hama.cpp index 4d5bae8..7f7d396 100644 --- a/ADHamaApp/src/hama.cpp +++ b/ADHamaApp/src/hama.cpp @@ -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 diff --git a/cmds/st.cmd b/cmds/st.cmd index ba78033..cca1e4a 100644 --- a/cmds/st.cmd +++ b/cmds/st.cmd @@ -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