13 #include <epicsMath.h> 15 #define epicsExportSharedSymbols 24 namespace epics {
namespace pvaClient {
33 return pvaClientMultiGetDouble;
36 PvaClientMultiGetDouble::PvaClientMultiGetDouble(
39 : pvaClientMultiChannel(pvaClientMultiChannel),
40 pvaClientChannelArray(pvaClientChannelArray),
41 nchannel(pvaClientChannelArray.
size()),
46 if(PvaClient::getDebug()) cout<<
"PvaClientMultiGetDouble::PvaClientMultiGetDouble()\n";
49 PvaClientMultiGetDouble::~PvaClientMultiGetDouble()
51 if(PvaClient::getDebug()) cout<<
"PvaClientMultiGetDouble::~PvaClientMultiGetDouble()\n";
54 void PvaClientMultiGetDouble::connect()
58 for(
size_t i=0;
i<nchannel; ++
i)
61 pvaClientGet[
i] = pvaClientChannelArray[
i]->createGet(request);
62 pvaClientGet[
i]->issueConnect();
65 for(
size_t i=0;
i<nchannel; ++
i)
69 if(status.
isOK())
continue;
70 string message = string(
"channel ") + pvaClientChannelArray[
i]->getChannelName()
71 +
" PvaChannelGet::waitConnect " + status.
getMessage();
72 throw std::runtime_error(message);
75 isGetConnected =
true;
80 if(!isGetConnected) connect();
83 for(
size_t i=0;
i<nchannel; ++
i)
86 pvaClientGet[
i]->issueGet();
89 for(
size_t i=0;
i<nchannel; ++
i)
93 if(status.
isOK())
continue;
94 string message = string(
"channel ") + pvaClientChannelArray[
i]->getChannelName()
95 +
" PvaChannelGet::waitGet " + status.
getMessage();
96 throw std::runtime_error(message);
100 for(
size_t i=0;
i<nchannel; ++
i)
104 PVStructurePtr pvStructure = pvaClientGet[
i]->getData()->getPVStructure();
105 doubleValue[
i] = getConvert()->toDouble(pvStructure->getSubField<
PVScalar>(
"value"));
PVScalar is the base class for each scalar field.
TODO only here because of the Lockable.
Provides channelGet to multiple channels where each channel has a numeric scalar value field...
const std::string & getMessage() const
size_t size() const
Number of elements visible through this vector.
std::tr1::shared_ptr< PvaClientGet > PvaClientGetPtr
std::tr1::shared_ptr< PVStructure > PVStructurePtr
std::tr1::shared_ptr< PvaClientMultiGetDouble > PvaClientMultiGetDoublePtr
std::tr1::shared_ptr< PvaClientMultiChannel > PvaClientMultiChannelPtr