Add logic to PV AcquirePeriod controls the EVR pulse period
This commit is contained in:
+24
-29
@@ -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
@@ -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
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user