Closed hinxx closed 3 years ago
Those errors are normal. It means that the node exists and that the ADAravis tried to write to it but that the node is not currently writable.
The reason that ExposureTime is not writable is typically because ExposureAuto is On.
AcquisitionFrameRate is not writable either because FrameRateEnable is Off or because GC_AcqFrameRateAuto is On (that is on a camera-specific OPI screen).
The reason that ExposureTime is not writable is typically because ExposureAuto is On.
Confirmed. Now exposure setting works as expected.
AcquisitionFrameRate is not writable..
My camera has no GC_AcqFrameRateAuto PV. Did set FrameRateEnable to Yes, but FrameRateEnable_RBV does not change to Yes; remains No with no errors in IOC shell.
What is your camera model?
It is FLIR BFS-PGE-70S7M.
Can you e-mail me the XML file?
XML is in this PR https://github.com/areaDetector/ADGenICam/pull/19 already.
XML is in this PR areaDetector/ADGenICam#19 already.
Sorry, I've now merged that.
I don't see any Auto features in the template file that would prevent setting the FrameRate.
In your original message you showed this error:
2020/09/15 12:25:27.845 ADAravis:writeInt32 error, status=3 function=95 GC_FRAMERATE_ENABLE, value=0
But then you said:
Did set FrameRateEnable to Yes, but FrameRateEnable_RBV does not change to Yes; remains No with no errors in IOC shell.
What action caused the error shown above?
You can see the values of all the GenICam features with the iocsh command
asynReport 2 ARV1
Scroll back and search for the FrameRateEnable feature and post the values shown.
Here is the output for my FLIR GS3-U3-23S6M. On this model the feature name is AcquisitionFrameRateEnabled (with a "d" at the end), while on yours it is AcquisitionFrameRateEnable.
Node name: AcquisitionFrameRateEnabled
value: true
asynIndex: 95
asynName: GC_FRAMERATE_ENABLE
asynType: 1
isImplemented: true
isAvailable: true
isReadable: true
isWritable: true
Node name: AcquisitionFrameRateEnabled
value: true
asynIndex: 259
asynName: GC_B_AcquisitionFrameRateEnabled
asynType: 1
isImplemented: true
isAvailable: true
isReadable: true
isWritable: true
What action caused the error shown above?
After the initial post, I noticed that the 'Detector state' was showing 'Disconnected' state. I guess this likely caused most of the problems initially posted, but the FrameRateEnable related one remained even after IOC restart.
Here is the info about AcquisitionFrameRateEnable:
Node name: AcquisitionFrameRateEnable
value: false
asynIndex: 95
asynName: GC_FRAMERATE_ENABLE
asynType: 1
isImplemented: true
isAvailable: true
isReadable: true
isWritable: true
Node name: AcquisitionFrameRateEnable
value: false
asynIndex: 115
asynName: GC_B_AcquisitionFrameRateEnable
asynType: 1
isImplemented: true
isAvailable: true
isReadable: true
isWritable: true
I made a little gif of the behavior:
Notice that, upon changing, the value always wobbles between Yes/No for the setter.
Here are couple of more notes about IOC error received right after startup:
2020/09/16 13:18:13.423 Param[GC_TRIGGER_SOFTWARE] GenICamFeature::write: node TriggerSoftware is not writable
2020/09/16 13:18:14.255 Param[ACQ_PERIOD] GenICamFeature::write: node AcquisitionFrameRate is not writable
2020/09/16 13:18:14.308 Param[GAIN] GenICamFeature::write: node Gain is not writable
Node name: TriggerSoftware
value:
asynIndex: 98
asynName: GC_TRIGGER_SOFTWARE
asynType: 1
isImplemented: true
isAvailable: true
isReadable: true
isWritable: false
Node name: AcquisitionFrameRate
value: 15.819627
asynIndex: 78
asynName: ACQ_PERIOD
asynType: 4
isImplemented: true
isAvailable: true
isReadable: true
isWritable: false
Node name: Gain
value: 17.897909
asynIndex: 60
asynName: GAIN
asynType: 4
isImplemented: true
isAvailable: true
isReadable: true
isWritable: false
You can see that all 3 of these features have isWritable=false.
For TriggerSoftware that is probably because TriggerMode=Off or TriggerSource is not Software.
For AcquisitionFrameRate that is because AcquisitionFrameRateEnable=false. We need to figure out why you can't set that to true.
For Gain that is probably because GainAuto=true. I see in your screen shot above that GainAuto should be false. When you are sure that GainAuto is false can you see if you still get an error setting Gain?
I don't understand why you cannot change FrameRateEnable to Yes because asynReport shows that the feature is writable.
I recently updated the ADAravis master branch to use aravis 0.8.0. If it's possible for you to update aravis to 0.8.0 and update ADAravis to master that would be good, since I want to make sure what you are seeing is not a problem with the "unstable" 0.7.2 release.
I have a FLIR Oryx camera connected at work, so I can check if FrameRateEnable is working for me. I also have a FLIR BlackflyS available, but it is not connected so I can't test until I go to the lab, which won't be this week.
You're right for about the TriggerSoftware & Gain; it was the Auto thing. I apologize for, what seem to me, basic user questions. I'm not the end user of the camera but merely providing IOC for it and have not seen such Auto controlled features.
When you are sure that GainAuto is false can you see if you still get an error setting Gain?
Now is OK, the value changes from OPI/IOC perspective.
update aravis to 0.8.0 and update ADAravis to master
Just did that as well couple of hours ago. AFAICT, the issue still persists in regard to the FrameRateEnable. We'll look into it more closely, though.
I guess going down to aravis level and trying to achieve the same feature change using arv-tool might a good way to narrow down where the issue is at.
Thank you for the help so far!
I guess going down to aravis level and trying to achieve the same feature change using arv-tool might a good way to narrow down where the issue is at.
Yes, that is a good idea. You can also try turning on asynTrace and see if there is any useful information when you try changing AcquisitionFrameRateEnable.
Have you tried changing the low-level GC_AcqFraRateEnable PV rather than the high-level FrameRateEnable? It is on the features-1 screen.
Have you tried changing the low-level GC_AcqFraRateEnable PV rather than the high-level FrameRateEnable? It is on the features-1 screen.
Yes. The same effect as from the main screen.
I just tested with a FLIR Oryx 51S5M camera.
I have the same problem with not being able to set or read FrameRateEnable with ADAravis. arv-tool shows that AcquisitionFrameRateEnable=true. But setting it to false in ADAravis does not change the value reported by arv-tool, and the readback value in ADAravis is always false, even when arv-tool says it is true.
However, I can also control this camera with ADSpinnaker on the same Ubuntu 18 system. With ADSpinnaker FrameRateEnable is working fine. I can change it in ADSpinnaker and arv-tool sees the correct new value. The readback value in ADSpinnaker is correct.
This suggests that there is some problem with ADAravis. Both ADAravis and ADSpinnaker use ADGenICam for most of the GenICam feature code, so this is a strange problem.
I found and fixed the problem and pushed to the master branch.
This was the fix:
diff --git a/aravisApp/src/arvFeature.cpp b/aravisApp/src/arvFeature.cpp
index 073bb91..ca7ebbb 100644
--- a/aravisApp/src/arvFeature.cpp
+++ b/aravisApp/src/arvFeature.cpp
@@ -64,11 +64,11 @@ void arvFeature::writeInteger(epicsInt64 value) {
}
bool arvFeature::readBoolean() {
- return arv_device_get_integer_feature_value(mDevice, mFeatureName.c_str(), NULL);
+ return arv_device_get_boolean_feature_value(mDevice, mFeatureName.c_str(), NULL);
}
void arvFeature::writeBoolean(bool value) {
- arv_device_set_integer_feature_value(mDevice, mFeatureName.c_str(), value ? 1 : 0, NULL);
+ arv_device_set_boolean_feature_value(mDevice, mFeatureName.c_str(), value, NULL);
}
I was calling the function for integer features when I should have been calling the function for boolean features.
The fix above indeed fixes the setting of FrameRateEnable for me as well. Great job @MarkRivers !
I'm closing this issue.
I'm getting these messages in IOC shell when trying to talk to FLIR BFS-PGE-70S7M camera:
Not sure why these parameters would not be writable. Aravis lib is tag ARAVIS_0_7_2, if it matters.