int main(int argc,char *argv[]) { string provider("pva"); if(argc==2 && string(argv[1])==string("-help")) { cout << "provider" << endl; cout << "default" << endl; cout << provider << endl; return 0; } if(argc>1) provider = argv[1]; cout << "_____exampleLinkClient starting_______\n"; PvaClientPtr pva = PvaClient::create(); try { PvaClientPutPtr put = pva->channel("doubleArray",provider,5.0)->put(); PvaClientPutDataPtr putData = put->getData(); PvaClientMonitorPtr monitor = pva->channel("exampleLink")->monitor(""); PvaClientMonitorDataPtr pvaData = monitor->getData(); if(!monitor->waitEvent(0.0)) { cout << "waitEvent returned false. Why???\n"; } else { cout << "exampleLink\n" << pvaData->getPVStructure() << endl; monitor->releaseEvent(); } { size_t nElements = 5; shared_vector<double> value(nElements); for(size_t i=0; i< nElements; ++i) value[i] = 0.0; shared_vector<const double> data(freeze(value)); putData->putDoubleArray(data); put->put(); } if(!monitor->waitEvent(0.0)) { cout<< "waitEvent returned false. Why???\n"; } else { cout << "exampleLink\n" << pvaData->getPVStructure() << endl; monitor->releaseEvent(); } { size_t nElements = 5; shared_vector<double> value(nElements); for(size_t i=0; i< nElements; ++i) value[i] = .1*(i+1); shared_vector<const double> data(freeze(value)); putData->putDoubleArray(data); put->put(); } if(!monitor->waitEvent(0.0)) { cout<< "waitEvent returned false. Why???\n"; } else { cout << "exampleLink\n" << pvaData->getPVStructure() << endl; monitor->releaseEvent(); } } catch (std::runtime_error e) { cout << "exception " << e.what() << endl; return 1; } cout << "_____exampleLinkClient done_______\n"; return 0; }
static void exampleDoubleArray(PvaClientPtr const &pva,string const & channelName,string const & providerName) { cout << "__exampleDoubleArray__ channelName " << channelName << " providerName " << providerName << endl; PvaClientChannelPtr channel = pva->channel(channelName,providerName,2.0); PvaClientPutPtr put = channel->put(); PvaClientPutDataPtr putData = put->getData(); PvaClientMonitorPtr monitor = pva->channel(channelName,providerName,2.0)->monitor("value"); PvaClientMonitorDataPtr monitorData = monitor->getData(); size_t num = 5; shared_vector<double> data(num,0); for(size_t i=0; i<num; ++i) data[i] = .1*i; putData->putDoubleArray(freeze(data)); put->put(); cout << channel->get("field(value)")->getData()->showChanged(cout) << endl; data = shared_vector<double>(num,0); for(size_t i=0; i<num; ++i) data[i] = .1*(i + 1); putData->putDoubleArray(freeze(data)); put->put(); cout << channel->get("field(value)")->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; } }
static void exampleMonitor(PvaClientPtr const &pva,string provider) { PvaClientMonitorPtr monitor = pva->channel("DBRdouble00",provider,2.0)->monitor(""); PvaClientMonitorDataPtr monitorData = monitor->getData(); PvaClientPutPtr put = pva->channel("DBRdouble00",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(.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; } } }
static void exampleDouble(PvaClientPtr const &pva,string const & channelName,string const & providerName) { cout << "__exampleDouble__ channelName " << channelName << " providerName " << providerName << endl; PvaClientChannelPtr channel = pva->channel(channelName,providerName,2.0); PvaClientPutPtr put = channel->put(); PvaClientPutDataPtr putData = put->getData(); PvaClientMonitorPtr monitor = pva->channel(channelName,providerName,2.0)->monitor("value"); PvaClientMonitorDataPtr monitorData = monitor->getData(); putData->putDouble(3.0); put->put(); cout << channel->get("field(value)")->getData()->showChanged(cout) << endl; putData->putDouble(4.0); put->put(); cout << channel->get("field(value)")->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; } }
static void examplePut(PvaClientPtr const &pva) { cout << "example put\n"; 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; } }
void LongArrayMonitor::run() { PvaClientPtr pva(PvaClient::get("pva")); string request("record[queueSize="); char buff[20]; sprintf(buff,"%d",queueSize); request += buff; request += "]field(value,timeStamp,alarm)"; PvaClientMonitorPtr monitor = pva->channel(channelName,providerName,2.0)->monitor(request); TimeStamp timeStamp; TimeStamp timeStampLast; timeStampLast.getCurrent(); long nElements = 0; long nSinceLastReport = 0; int64 first = 0; int64 last = 0; while(true) { if(runStop.tryWait()) { runReturn.signal(); return; } if(!monitor->waitEvent(0.0)) { cout << "waitEvent returned false. Why???" << endl; continue; } PvaClientMonitorDataPtr pvaData = monitor->getData(); PVStructurePtr pvStructure = pvaData->getPVStructure(); PVLongArrayPtr pvValue = pvStructure->getSubField<PVLongArray>("value"); size_t len = pvValue->getLength(); if(len>0) { shared_vector<const int64> data = pvValue->view(); first = data[0]; last = data[len-1]; if(first!=last) cout << "error first=" << first << " last=" << last << endl; } else { cout << "len is 0" << endl; } nElements += len; timeStamp.getCurrent(); double diff = TimeStamp::diff(timeStamp,timeStampLast); if(diff>=1.0) { ostringstream out; out << " monitors/sec " << nSinceLastReport << " "; if(len>0) out << "first " << first << " last " << last ; out << " changed " << *pvaData->getChangedBitSet(); out << " overrun " << *pvaData->getOverrunBitSet(); double elementsPerSec = nElements; elementsPerSec /= diff; if(elementsPerSec>10.0e9) { elementsPerSec /= 1e9; out << " gigaElements/sec " << elementsPerSec; } else if(elementsPerSec>10.0e6) { elementsPerSec /= 1e6; out << " megaElements/sec " << elementsPerSec; } else if(elementsPerSec>10.0e3) { elementsPerSec /= 1e3; out << " kiloElements/sec " << elementsPerSec; } else { out << " Elements/sec " << elementsPerSec; } cout << out.str() << endl; timeStampLast = timeStamp; nSinceLastReport = 0; nElements = 0; } ++nSinceLastReport; monitor->releaseEvent(); } }