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(&currentAcqTime, &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:
marcofilho
2024-08-26 16:17:55 +02:00
parent 4bc89278fe
commit 634c3b12ba
+5 -2
View File
@@ -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(&currentAcqTime);
if (epicsTimeDiffInSeconds(&currentAcqTime, &prevAcqTime) > maxAcqusitionTime) {
printf("[DEBUG]::maxAcqusitionTime %f\n", maxAcqusitionTime);
if ((epicsTimeDiffInSeconds(&currentAcqTime, &prevAcqTime) > maxAcqusitionTime) &&
acqStatus != ADStatusAborted) {
printf("[DEBUG]::maxAcqusitionTime %f\n", maxAcqusitionTime);
setShutter(0);
stopAcquire();
setIntegerParam(ADAcquire, 0);