diff --git a/ADOrcaApp/src/orca.cpp b/ADOrcaApp/src/orca.cpp index 0556dfa..09bc064 100644 --- a/ADOrcaApp/src/orca.cpp +++ b/ADOrcaApp/src/orca.cpp @@ -783,10 +783,11 @@ void Orca::imageTask(){ DCAMCAP_TRANSFERINFO captransferinfo; epicsTimeStamp prevAcqTime, currentAcqTime; epicsTimeStamp prev_trigger_time, current_trigger_time; - double elapsedTime; + epicsTimeStamp startTimeStamp; + double elapsedTime, elapsedTotalTime; int evr_counts = 0; double exposure_time, readout_time; - + double maxAcqusitionTime; int triggerMode = DCAMPROP_TRIGGERSOURCE__INTERNAL; lock(); @@ -810,6 +811,7 @@ void Orca::imageTask(){ epicsThreadSleep(.1); } else { + epicsTimeGetCurrent(&startTimeStamp); getIntegerParam(ADNumImages, &totalImages); getIntegerParam(ADImageMode, &imageMode); setIntegerParam(ADStatus, ADStatusAcquire); @@ -828,7 +830,7 @@ void Orca::imageTask(){ imageTransferStatus(m_hdcam, captransferinfo); lock(); - if (prevAcquisitionCount < (uint64_t)captransferinfo.nFrameCount) { + if (prevAcquisitionCount < (uint64_t)captransferinfo.nFrameCount) { printf("\nOrca Frame Count: %d\n", captransferinfo.nFrameCount); prevAcquisitionCount = captransferinfo.nFrameCount; @@ -926,6 +928,12 @@ void Orca::imageTask(){ } epicsTimeGetCurrent(¤t_trigger_time); + if (imageMode == ADImageMultiple) { + elapsedTotalTime = epicsTimeDiffInSeconds(¤t_trigger_time, &startTimeStamp); + elapsedTotalTime > maxAcqusitionTime) { + setStringParam(ADStatusMessage, "Acquisition taking too long!"); + } + } if (epicsTimeDiffInSeconds(¤t_trigger_time, &prev_trigger_time) > (exposure_time + readout_time)) { if ((evr_counts_since_last_start) > captransferinfo.nFrameCount ) {