added support for multi channel double
This commit is contained in:
@@ -33,6 +33,13 @@ examplePvaClientMonitor_LIBS += pvAccess
|
||||
examplePvaClientMonitor_LIBS += pvData
|
||||
examplePvaClientMonitor_LIBS += Com
|
||||
|
||||
PROD_HOST += examplePvaClientMultiDouble
|
||||
examplePvaClientMultiDouble_SRCS += examplePvaClientMultiDouble.cpp
|
||||
examplePvaClientMultiDouble_LIBS += pvaClient
|
||||
examplePvaClientMultiDouble_LIBS += pvAccess
|
||||
examplePvaClientMultiDouble_LIBS += pvData
|
||||
examplePvaClientMultiDouble_LIBS += Com
|
||||
|
||||
PROD_HOST += helloWorldRPC
|
||||
helloWorldRPC_SRCS += helloWorldRPC.cpp
|
||||
helloWorldRPC_LIBS += pvaClient
|
||||
|
||||
@@ -22,25 +22,29 @@ using namespace epics::pvAccess;
|
||||
using namespace epics::pvaClient;
|
||||
|
||||
|
||||
static void exampleMonitor(PvaClientPtr const &pva)
|
||||
static void exampleMonitor(PvaClientPtr const &pva,string provider)
|
||||
{
|
||||
PvaClientMonitorPtr monitor = pva->channel("exampleDouble")->monitor("");
|
||||
PvaClientMonitorDataPtr pvaData = monitor->getData();
|
||||
PvaClientPutPtr put = pva->channel("exampleDouble")->put("");
|
||||
PvaClientMonitorPtr monitor = pva->channel("double00",provider,2.0)->monitor("");
|
||||
PvaClientMonitorDataPtr monitorData = monitor->getData();
|
||||
PvaClientPutPtr put = pva->channel("double00",provider,2.0)->put("");
|
||||
PvaClientPutDataPtr putData = put->getData();
|
||||
for(size_t ntimes=0; ntimes<5; ++ntimes)
|
||||
{
|
||||
double value = ntimes;
|
||||
cout << "put " << value << endl;
|
||||
putData->putDouble(value); put->put();
|
||||
if(!monitor->waitEvent()) {
|
||||
if(!monitor->waitEvent(.1)) {
|
||||
cout << "waitEvent returned false. Why???";
|
||||
continue;
|
||||
} else while(true) {
|
||||
cout << "monitor " << monitorData->getDouble() << endl;
|
||||
cout << "changed\n";
|
||||
monitorData->showChanged(cout);
|
||||
cout << "overrun\n";
|
||||
monitorData->showOverrun(cout);
|
||||
monitor->releaseEvent();
|
||||
if(!monitor->poll()) break;
|
||||
}
|
||||
cout << "changed\n";
|
||||
pvaData->showChanged(cout);
|
||||
cout << "overrun\n";
|
||||
pvaData->showOverrun(cout);
|
||||
monitor->releaseEvent();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +52,10 @@ static void exampleMonitor(PvaClientPtr const &pva)
|
||||
int main(int argc,char *argv[])
|
||||
{
|
||||
PvaClientPtr pva = PvaClient::create();
|
||||
exampleMonitor(pva);
|
||||
cout << "exampleMonitor pva\n";
|
||||
exampleMonitor(pva,"pva");
|
||||
cout << "exampleMonitor ca\n";
|
||||
exampleMonitor(pva,"ca");
|
||||
cout << "done\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
79
example/src/examplePvaClientMultiDouble.cpp
Normal file
79
example/src/examplePvaClientMultiDouble.cpp
Normal file
@@ -0,0 +1,79 @@
|
||||
/*examplePvaClientMultiDouble.cpp */
|
||||
/**
|
||||
* Copyright - See the COPYRIGHT that is included with this distribution.
|
||||
* EPICS pvData is distributed subject to a Software License Agreement found
|
||||
* in file LICENSE that is included with this distribution.
|
||||
*/
|
||||
/**
|
||||
* @author mrk
|
||||
*/
|
||||
|
||||
/* Author: Marty Kraimer */
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include <pv/pvaClientMultiChannel.h>
|
||||
|
||||
using namespace std;
|
||||
using namespace epics::pvData;
|
||||
using namespace epics::pvAccess;
|
||||
using namespace epics::pvaClient;
|
||||
|
||||
static void example(
|
||||
PvaClientPtr const &pva,
|
||||
string provider,
|
||||
shared_vector<const string> const &channelNames)
|
||||
{
|
||||
|
||||
size_t num = channelNames.size();
|
||||
cout << "num " << num << " names " << channelNames << endl;
|
||||
PvaClientMultiChannelPtr multiChannel(
|
||||
PvaClientMultiChannel::create(pva,channelNames,provider));
|
||||
PvaClientMultiGetDoublePtr multiGet(multiChannel->createGet());
|
||||
PvaClientMultiPutDoublePtr multiPut(multiChannel->createPut());
|
||||
PvaClientMultiMonitorDoublePtr multiMonitor(multiChannel->createMonitor());
|
||||
shared_vector<double> data(num,0);
|
||||
for(double value = 0.0; value< 1.0; value+= .2) {
|
||||
try {
|
||||
for(size_t i=0; i<num; ++i) data[i] = value + i;
|
||||
cout << "put " << data << endl;
|
||||
multiPut->put(data);
|
||||
data = multiGet->get();
|
||||
cout << "get " << data << endl;
|
||||
bool result = multiMonitor->waitEvent(.1);
|
||||
while(result) {
|
||||
cout << "monitor data " << multiMonitor->get() << endl;
|
||||
result = multiMonitor->poll();
|
||||
}
|
||||
} catch (std::runtime_error e) {
|
||||
cout << "exception " << e.what() << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc,char *argv[])
|
||||
{
|
||||
PvaClientPtr pva = PvaClient::create();
|
||||
size_t num = 5;
|
||||
shared_vector<string> channelNames(num);
|
||||
channelNames[0] = "double01";
|
||||
channelNames[1] = "double02";
|
||||
channelNames[2] = "double03";
|
||||
channelNames[3] = "double04";
|
||||
channelNames[4] = "double05";
|
||||
cout << "double pva\n";
|
||||
shared_vector<const string> names(freeze(channelNames));
|
||||
example(pva,"pva",names);
|
||||
cout << "double ca\n";
|
||||
example(pva,"ca",names);
|
||||
channelNames = shared_vector<string>(num);
|
||||
channelNames[0] = "exampleDouble01";
|
||||
channelNames[1] = "exampleDouble02";
|
||||
channelNames[2] = "exampleDouble03";
|
||||
channelNames[3] = "exampleDouble04";
|
||||
channelNames[4] = "exampleDouble05";
|
||||
names = freeze(channelNames);
|
||||
cout << "exampleDouble pva\n";
|
||||
example(pva,"pva",names);
|
||||
return 0;
|
||||
}
|
||||
@@ -26,11 +26,20 @@ static void examplePut(PvaClientPtr const &pva)
|
||||
PvaClientChannelPtr channel = pva->channel("exampleDouble");
|
||||
PvaClientPutPtr put = channel->put();
|
||||
PvaClientPutDataPtr putData = put->getData();
|
||||
PvaClientMonitorPtr monitor = pva->channel("exampleDouble")->monitor("");
|
||||
PvaClientMonitorDataPtr monitorData = monitor->getData();
|
||||
try {
|
||||
putData->putDouble(3.0); put->put();
|
||||
cout << channel->get("field()")->getData()->showChanged(cout) << endl;
|
||||
putData->putDouble(4.0); put->put();
|
||||
cout << channel->get("field()")->getData()->showChanged(cout) << endl;
|
||||
if(!monitor->waitEvent()) {
|
||||
cout << "waitEvent returned false. Why???";
|
||||
} else while(true) {
|
||||
cout << "monitor changed\n" << monitorData->showChanged(cout);
|
||||
monitor->releaseEvent();
|
||||
if(!monitor->poll()) break;
|
||||
}
|
||||
} catch (std::runtime_error e) {
|
||||
cout << "exception " << e.what() << endl;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user