Fix false warning raise.
Fix concurrency problem. Before this commit, if acquisition was aborted by user before the imagetask had passed through the conditional `if ((epicsTimeDiffInSeconds(¤tAcqTime, &prevAcqTime) > maxAcqusitionTime)`, condition would evaluate to true and raise a warning saying that the acquisition timed out, which is not true. After this, condition evaluates to false and no alarm is raised. Tested several acquisitions and this does not seem to compromise the control flow. It seems to work both with internal and with external triggers.
This commit is contained in:
@@ -779,6 +779,7 @@ void Orca::imageTask(){
|
||||
int evr_counts_since_last_start = 0;
|
||||
int evr_counts_since_last_start_previous = 0;
|
||||
int evr_trigger_dropped = 0;
|
||||
int acqStatus;
|
||||
uint64_t prevAcquisitionCount = 0;
|
||||
DCAMCAP_TRANSFERINFO captransferinfo;
|
||||
epicsTimeStamp prevAcqTime, currentAcqTime;
|
||||
@@ -929,10 +930,12 @@ void Orca::imageTask(){
|
||||
|
||||
|
||||
getDoubleParam(ADAcquirePeriod, &acqusitionRate);
|
||||
getIntegerParam(ADStatus, &acqStatus);
|
||||
maxAcqusitionTime = acqusitionRate * 2;
|
||||
epicsTimeGetCurrent(¤tAcqTime);
|
||||
if (epicsTimeDiffInSeconds(¤tAcqTime, &prevAcqTime) > maxAcqusitionTime) {
|
||||
printf("[DEBUG]::maxAcqusitionTime %f\n", maxAcqusitionTime);
|
||||
if ((epicsTimeDiffInSeconds(¤tAcqTime, &prevAcqTime) > maxAcqusitionTime) &&
|
||||
acqStatus != ADStatusAborted) {
|
||||
printf("[DEBUG]::maxAcqusitionTime %f\n", maxAcqusitionTime);
|
||||
setShutter(0);
|
||||
stopAcquire();
|
||||
setIntegerParam(ADAcquire, 0);
|
||||
|
||||
Reference in New Issue
Block a user