Pva (Pva PVAccess) is a software library that provides to an EPICS client programmer, a friendly client side programming interface to the data of an EPICS based control system. It is intended for such uses as rapid development of ad hoc programs by controls engineers, or to provide scientists a way to directly develop analytical applications.
Specifically, pva provides a synchronous interface for pvAccess, which is the software support for high speed controls network communications used in EPICS version 4. PvAccess provides a callback based interface, which can be hard to use. Pva provides an interface that does not require callbacks even for monitors.
PvaChannel provides many "convenience" methods to directly get and put scalar and scalarArray data types. Additional methods provide access to the full features of pvAccess.
PvaMultiChannel provides access to data from multiple channels. It can be used directly by a client or via PvaMultiDouble or PvaNTMultiChannel. PvaMultiDouble allows the client to get and put data to multiple channels. But each channel must have a value field that is a numeric scalar. PvaNTMultiChannel allows the client to get and put data to multiple channels. Each channel must have a value field. The data for the channels is presented via normative type NTMultiChannel.
For more information about EPICS generally, please refer to the home page of the Experimental Physics and Industrial Control System.
PvaCPP is ready for use.
Pva is a synchronous API for accessing PVData via PVAccess. It provides an interface to many of the features provided by pvData and pvAccess.
This document describes the layout of the source files in this project.
A user overview is available via pvaOverview.html
Doxygen documentation is available at doxygenDoc
The examples and tests require that an example pvAccess server is runnimg. This distribution has a file exampleDatabasePva.zip. When unzipped this is used to create an example IOC database. The database has the record used by the examples are tests that come with pvaJava. It uses pvDatabaseCPP to build the database.
After unzipping the file:
cd configure cp ExampleRELEASE.local RELEASE.local edit RELEASE.local cd .. make cd iocBoot/exampleDatabase ../../bin/<arch:>/exampleDatabase st.cmd
The tests will fail unless the example database is running.
Once it is running:
make runtests
Examples are in directory pvaExample/src. An example of how to run them is:
mrk> pwd /home/epicsv4/pvAccessCPP/pvaExample mrk> bin/linux-x86_64/examplePvaGet
The following is a brief description of each example. In order to understand each example it helps to also look at the source for the example.
This has a number of examples:
This is an example of creating a monitor on a channel. It monitors a channel that models a powerSupply, i. e. it is not a "standard" record. It does not have a value field.
After starting the example a change can be made to the powerSupply by issuing:
pvput -r "power.value,voltage.value" examplePowerSupply 6 6
This example gets and puts to channel exampleDouble.
This example makes a process request to channel exampleDouble.
This is an example of issuing a channelPutGet.
This is an example of issuing gets and puts to multiple channels where each channel has a numeric scalar value field.
This is an example of using NDMultiChannel to obtain data from multiple channels.
This is an example of issuing a channelRPC request. It does not use pva.