12 #include <epicsMath.h> 14 #define epicsExportSharedSymbols 23 namespace epics {
namespace pvaClient {
29 PVStructurePtr
const & pvRequest)
31 UnionConstPtr u = getFieldCreate()->createVariantUnion();
34 return pvaClientNTMultiGet;
37 PvaClientNTMultiGet::PvaClientNTMultiGet(
38 UnionConstPtr
const & u,
41 PVStructurePtr
const & pvRequest)
42 : pvaClientMultiChannel(pvaClientMultiChannel),
43 pvaClientChannelArray(pvaClientChannelArray),
45 nchannel(pvaClientChannelArray.size()),
47 PvaClientNTMultiData::create(
49 pvaClientMultiChannel,
50 pvaClientChannelArray,
54 if(PvaClient::getDebug()) cout<<
"PvaClientNTMultiGet::PvaClientNTMultiGet()\n";
57 PvaClientNTMultiGet::~PvaClientNTMultiGet()
59 if(PvaClient::getDebug()) cout<<
"PvaClientNTMultiGet::~PvaClientNTMultiGet()\n";
62 void PvaClientNTMultiGet::connect()
64 pvaClientGet.resize(nchannel);
65 shared_vector<epics::pvData::boolean> isConnected = pvaClientMultiChannel->getIsConnected();
66 for(
size_t i=0; i<nchannel; ++i)
69 pvaClientGet[i] = pvaClientChannelArray[i]->createGet(pvRequest);
70 pvaClientGet[i]->issueConnect();
73 for(
size_t i=0; i<nchannel; ++i)
76 Status status = pvaClientGet[i]->waitConnect();
77 if(status.isOK())
continue;
78 string message = string(
"channel ") +pvaClientChannelArray[i]->getChannelName()
79 +
" PvaChannelGet::waitConnect " + status.getMessage();
80 throw std::runtime_error(message);
83 this->isConnected =
true;
86 void PvaClientNTMultiGet::get(
bool valueOnly)
88 if(!isConnected) connect();
89 shared_vector<epics::pvData::boolean> isConnected = pvaClientMultiChannel->getIsConnected();
91 for(
size_t i=0; i<nchannel; ++i)
95 pvaClientGet[i]=pvaClientChannelArray[i]->createGet(pvRequest);
96 pvaClientGet[i]->connect();
98 pvaClientGet[i]->issueGet();
101 for(
size_t i=0; i<nchannel; ++i)
104 Status status = pvaClientGet[i]->waitGet();
105 if(status.isOK())
continue;
106 string message = string(
"channel ") +pvaClientChannelArray[i]->getChannelName()
107 +
" PvaChannelGet::waitGet " + status.getMessage();
108 throw std::runtime_error(message);
111 pvaClientNTMultiData->startDeltaTime();
112 for(
size_t i=0; i<nchannel; ++i)
115 pvaClientNTMultiData->setPVStructure(pvaClientGet[i]->getData()->getPVStructure(),i);
118 pvaClientNTMultiData->endDeltaTime(valueOnly);
123 return pvaClientNTMultiData;
epics::pvData::shared_vector< PvaClientChannelPtr > PvaClientChannelArray
std::tr1::shared_ptr< PvaClientNTMultiGet > PvaClientNTMultiGetPtr
Provides channelGet to multiple channels where the value field of each channel is presented as a unio...
std::tr1::shared_ptr< PvaClientNTMultiData > PvaClientNTMultiDataPtr
std::tr1::shared_ptr< PvaClientMultiChannel > PvaClientMultiChannelPtr