Hello Jeff,
· The issue is not only with caget but also in application programs getting data through monitor and the routine ca_add_event_array to get the data.
· I do not know now about other record types. The record used is the following:
§ Record(waveform, “$(NAME)”) {field(FTVL, “CHAR”) field(NELM, “128”) field(SCAN, “1 second”)} in softioc.
· Caget reports for .NORD 0. Caget gives 128 characters back with first character as garbage. Caget –c does not give any value back. Ca_add_event array gives 128 characters back while 128 were requested with first character as garbage
· The behavior stays the same after new subscriptions
· I work with 3.14.12. However when specifying 0 elements in the request, the issue is solved, while then dynamic array behavior is used and 0 elements are then given back.
Best regards
Anton
__________________________________________
Paul Scherrer Institut
Dr. Anton Christian Mezger
WBGB/103
CH-5232 Villigen PSI
Telefon: +41 56 310 34 06
E-Mail: [email protected]
Hi Anton,
Thanks for taking some time to report this issue.
I will emulate the typical computer support personal and respond to a question with an escalating number of questions :-).
Ø The Array has zero length (NORD=0) after boot. Then I get garbage as first
Ø character while the number of elements is 128 in my case and this number
Ø was requested. When specifying 0 at request I get args.count=0 as it should
Ø with 3.14.12.
o Is this issue repeatable when testing with a different client side code other than caget? If so, which ca client code is in use?
o Is this issue repeatable when testing with multiple record types and or multiple device support modules?
o You mention that the issue is related to NORD being zero just after booting the IOC. Does the problem persist or does it happen only once; if it doesn’t persist then what is the action that causes an improvement? For example, I could imagine some different scenarios where the behavior might improve the second time that a CA client attaches, in a particular client’s second subscription update, the first time that the record processes, or the second time that the record processes.
o In what versions of EPICS does it fail, and in what versions does it work correctly; is it working correctly in 3.14.12?
Thanks for your help.
best regards,
Jeff
Hi Jeff,
The Array has zero length (NORD=0) after boot. Then I get garbage as first character while the number of elements is 128 in my case and this number was requested. When specifying 0 at request I get args.count=0 as it should with 3.14.12.
Regards
Anton
__________________________________________
Paul Scherrer Institut
Dr. Anton Christian Mezger
WBGB/103
CH-5232 Villigen PSI
Telefon: +41 56 310 34 06
E-Mail: [email protected]
From: Hill, Jeff [mailto:[email protected]]
Sent: Donnerstag, 16. Januar 2014 17:20
To: Mezger Anton Christian
Subject: RE: garbage in zero length arrays
Anton,
As memory serves, a request for a zero length subscription will probably be rejected by an old version of the CA server.
Jeff
Thank you Jeff,
this confirms that I can set 0 in the ca_add_event_array. In any case of epics combinations (ioc, client) that would work properly at monitor receive.
Thanks and best regards
Anton
__________________________________________
Paul Scherrer Institut
Dr. Anton Christian Mezger
WBGB/103
CH-5232 Villigen PSI
Telefon: +41 56 310 34 06
E-Mail: [email protected]
Ø My question is: when specifying 0, how does that behave in older epics versions and channel
Ø access gateways. Does it use then the maximum amount of elements ?
When a channel connects the maximum number of elements is supplied by the server as a channel attribute. In newer versions of EPICS the current number of elements is returned with each subscription update. In older versions the maximum number of elements was always returned; when the current number of elements was less than the maximum number then any additional elements at the end were zero padded.
Jeff
Hi all,
When monitoring a non initialized char array with ca_add_event_array, one gets most of the time in the first element of the array.
This only when the request uses ca_element_count(chid) which is non zero. When using the dynamic behavior by specifiying 0 elements, the received args.count correspond to the actual size of the array, including zero when not initialized.
My question is: when specifying 0, how does that behave in older epics versions and channel access gateways. Does it use then the maximum amount of elements ?
Anton
__________________________________________
Paul Scherrer Institut
Dr. Anton Christian Mezger
WBGB/103
CH-5232 Villigen PSI
Telefon: +41 56 310 34 06
E-Mail: [email protected]