> Only the data for fields that change value between requests are sent.”
A more precise statement would be, "only data for fields marked as changed will be sent".
So this is only done if the server (or ChannelProvider generally) manages a "what changed" bit set.
Setting bit #0 is the shorthand for "everything changed".
eg. QSRV does this tracking for Monitor, but not Get.
https://github.com/mdavidsaver/pva2pva/blob/master/pdbApp/pdbsingle.cpp#L410-L411
... as I think about it, it should (now) be possible to remove these two lines.
On 08/14/2018 09:12 AM, Heinz Junkes wrote:
> I have a question about bitSets.
>
> I use the example program from exampleCPP get.cpp
> with the code fragment
>
> PvaClientGetDataPtr data = pvaClientGet->getData();
> BitSetPtr bitSet = data->getChangedBitSet();
>
> Cardinality is "1" although obviously nothing changes.
> Bit #0 is set “structure”.
>
> Now to my question. Is bitSet set by the server?
>
> And then I don't understand that either (from the documentation).
>
> "Only fields that change are transmitted.
> Only the data for fields that change value between requests are sent.”
>
> in the pvaGet I only request “value”.
>
> The PV I am looking at is a classic V3 PV (ca) and on my server runs pvAccess-Server (qsrv).
>
> ioc:
>
> dbpr CRYAFM:AWG0:DDSA:SetDDSFreq,4
>
> ACKS: NO_ALARM ACKT: YES ADEL: 0 ALST: 123456
> AOFF: 0 ASG: ASLO: 0 ASP: 0x0
> BKLNK: 00 00 00 00 00 00 00 00 00 00 00 00 BKPT: 00
> DESC: Frequency DDS DDSA: DISA: 0 DISP: 0
> DISS: NO_ALARM DISV: 1 DOL:CONSTANT DPVT: 0x19df880
> DRVH: 0 DRVL: 0 DSET: 0x4fb724 DTYP: asynFloat64
> EGU: Hz EGUF: 0 EGUL: 0 EOFF: 0
> ESLO: 1 EVNT: FLNK:CONSTANT 0 HHSV: NO_ALARM
> HIGH: 0 HIHI: 0 HOPR: 0 HSV: NO_ALARM
> HYST: 0 INIT: 0 IVOA: Continue normally
> IVOV: 0 LALM: 123456 LBRK: 0 LCNT: 0
> LINR: NO CONVERSION LLSV: NO_ALARM LOLO: 0 LOPR: 0
> LOW: 0 LSET: 0x1942808 LSV: NO_ALARM MDEL: 0
> MLIS: 00 00 00 00 00 00 00 00 00 00 00 00 MLOK: 01 94 e7 40
> MLST: 123456 NAME: CRYAFM:AWG0:DDSA:SetDDSFreq NSEV: NO_ALARM
> NSTA: NO_ALARM OIF: Full OLDSIMM: NO OMOD: 0
> OMSL: supervisory ORAW: 123456 ORBV: 0 OROC: 0
> OUT:INST_IO @asyn(awg0, 0)DDS Frequency OVAL: 123456 PACT: 0
> PBRK: 0x0 PHAS: 0 PINI: NO PPN: 0x0
> PPNR: 0x0 PREC: 3 PRIO: LOW PROC: 0
> PUTF: 0 PVAL: 123456 RBV: 0 RDES: 0xcdc5d0
> ROFF: 0 RPRO: 0 RSET: 0x4fbac8 RVAL: 123456
> SCAN: Passive SDIS:CONSTANT SDLY: -1 SEVR: NO_ALARM
> SIML:CONSTANT SIMM: NO SIMPVT: 0x0 SIMS: NO_ALARM
> SIOL:CONSTANT SPVT: 0x0 SSCN: <nil> STAT: NO_ALARM
> TIME: 2018-08-14 08:51:37.697697041 TPRO: 0 TSE: 0
> TSEL:CONSTANT UDF: 0 UDFS: INVALID VAL: 123456
>
> humma-kavula:examples junkes$ cainfo CRYAFM:AWG0:DDSA:SetDDSFreq
> CRYAFM:AWG0:DDSA:SetDDSFreq
> State: connected
> Host: cry-test.rz-berlin.mpg.de:5064
> Access: read, write
> Native data type: DBF_DOUBLE
> Request type: DBR_DOUBLE
> Element count: 1
>
>
> humma-kavula:examples junkes$ pvinfo CRYAFM:AWG0:DDSA:SetDDSFreq
> CHANNEL : CRYAFM:AWG0:DDSA:SetDDSFreq
> STATE : CONNECTED
> ADDRESS : 141.14.128.53:5075
> epics:nt/NTScalar:1.0
> double value
> alarm_t alarm
> int severity
> int status
> string message
> time_t timeStamp
> long secondsPastEpoch
> int nanoseconds
> int userTag
> display_t display
> double limitLow
> double limitHigh
> string description
> string format
> string units
> control_t control
> double limitLow
> double limitHigh
> double minStep
> valueAlarm_t valueAlarm
> boolean active
> double lowAlarmLimit
> double lowWarningLimit
> double highWarningLimit
> double highAlarmLimit
> int lowAlarmSeverity
> int lowWarningSeverity
> int highWarningSeverity
> int highAlarmSeverity
> double hysteresis
>
>
> get, nothing is changing ???
>
> code fragment:
>
> void get()
> {
>
> if(!channelConnected) {
> cout << channelName << " channel not connected\n";
> return;
> }
> if(!getConnected) {
> cout << channelName << " channelGet not connected\n";
> return;
> }
> pvaClientGet->get();
> PvaClientGetDataPtr data = pvaClientGet->getData();
> BitSetPtr bitSet = data->getChangedBitSet();
> cout << "bitset Cardinality : " << bitSet->cardinality() << endl;
> if(bitSet->cardinality()>0) {
> cout << "changed " << channelName << endl;
> data->showChanged(cout);
> cout << "bitSet " << *bitSet << endl;
> }
> }
>
>
> output:
>
> channelGetConnect CRYAFM:AWG0:DDSA:SetDDSFreq status Status [type=OK]
> channelGetDone CRYAFM:AWG0:DDSA:SetDDSFreq status Status [type=OK]
> bitset Cardinality : 1
> changed CRYAFM:AWG0:DDSA:SetDDSFreq
> = epics:nt/NTScalar:1.0
> double value 123456
> alarm_t alarm
> int severity 0
> int status 0
> string message NO_ALARM
> time_t timeStamp
> long secondsPastEpoch 1534254697
> int nanoseconds 697697041
> int userTag 0
> display_t display
> double limitLow 0
> double limitHigh 0
> string description Frequency DDS DDSA:
> string format
> string units Hz
> control_t control
> double limitLow 0
> double limitHigh 0
> double minStep 0
> valueAlarm_t valueAlarm
> boolean active false
> double lowAlarmLimit nan
> double lowWarningLimit nan
> double highWarningLimit nan
> double highAlarmLimit nan
> int lowAlarmSeverity 0
> int lowWarningSeverity 0
> int highWarningSeverity 0
> int highAlarmSeverity 0
> double hysteresis 0
>
> bitSet {0}
>
>
> channelGetDone CRYAFM:AWG0:DDSA:SetDDSFreq status Status [type=OK]
> bitset Cardinality : 1
> changed CRYAFM:AWG0:DDSA:SetDDSFreq
> = epics:nt/NTScalar:1.0
> double value 123456
> alarm_t alarm
> int severity 0
> int status 0
> string message NO_ALARM
> time_t timeStamp
> long secondsPastEpoch 1534254697
> int nanoseconds 697697041
> int userTag 0
> display_t display
> double limitLow 0
> double limitHigh 0
> string description Frequency DDS DDSA:
> string format
> string units Hz
> control_t control
> double limitLow 0
> double limitHigh 0
> double minStep 0
> valueAlarm_t valueAlarm
> boolean active false
> double lowAlarmLimit nan
> double lowWarningLimit nan
> double highWarningLimit nan
> double highAlarmLimit nan
> int lowAlarmSeverity 0
> int lowWarningSeverity 0
> int highWarningSeverity 0
> int highAlarmSeverity 0
> double hysteresis 0
>
> bitSet {0}
>
>
>
>
> ----------------------------------------------------------------------
> Das FHI verarbeitet, speichert und loescht Daten im Rahmen seiner
> Geschaeftstaetigkeit gemaess der Datenschutz-Grundverordnung (DSGVO)
> [General Data Protection Regulation (GDPR)] der Europaeischen Union.
>
- References:
- bitSets and PVStructure Heinz Junkes
- Navigate by Date:
- Prev:
bitSets and PVStructure Heinz Junkes
- Next:
Re: bitSets and PVStructure Marty Kraimer
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
<2018>
2019
2020
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
bitSets and PVStructure Heinz Junkes
- Next:
Re: bitSets and PVStructure Marty Kraimer
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
<2018>
2019
2020
2021
2022
2023
2024
|