EPICS pvaClientCPP

EPICS V4 Working Group, Working Draft, 26-June-2015

This version:
pvaClientCPP.html
Latest version:
pvaClientCPP_20150626.html
Previous version:
easyPVA_20150609.html
Editors:
Marty Kraimer, BNL

Abstract

pvaClient 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, pvaClient 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. pvaClient provides an interface that does not require callbacks even for monitors.

pvaClientChannel provides many "convenience" methods to directly get and put scalar and scalarArray data types. Additional methods provide access to the full features of pvAccess.

pvaClientMultiChannel provides access to data from multiple channels. It can be used directly by a client or via pvaClientMultiDouble or pvaClientNTMultiChannel. pvaClientMultiDouble allows the client to get and put data to multiple channels. But each channel must have a value field that is a numeric scalar. pvaClientNTMultiChannel 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.

Status of this Document and of the pvaClient Software

pvaClientCPP is ready for use.

Table of Contents


Introduction

pvaClient 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 pvaClientOverview.html

Doxygen documentation is available at doxygenDoc

Example Database

The examples require that an example pvAccess server is runnimg. To get the test database go to:

pvaClientTestCPP/database.zip Then select "raw file" and You will be able to download the zip file.

When unzipped this is used to create an example IOC database.

After unzipping the file:

cd database/configure
cp ExampleRELEASE.local RELEASE.local
edit RELEASE.local
cd ..
make
cd iocBoot/exampleDatabase
../../bin/<arch:>/exampleDatabase st.cmd

Examples

Examples are in directory example/src. An example of how to run them is:

mrk> pwd
/home/epicsv4/pvaClientCPP/example
mrk> bin/linux-x86_64/examplePvaClientGet 

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.

examplePvaClientGet

This has a number of examples:

exampleDouble
This shows two methods for getting data from a channel that has a numeric scalar value field.
exampleDoubleArray
This shows two methods for getting data from a channel that has a double array value field.
exampleCADouble
This is like exampleDouble except it uses provider ca.
exampleCADoubleArray
This is like exampleDoubleArray except it uses provider ca.
examplePowerSupply
This is an example of getting data from a channel that does not have a value field.

examplePvaClientMonitor

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

examplePvaClientPut

This example gets and puts to channel exampleDouble.

examplePvaClientProcess

This example makes a process request to channel exampleDouble.

helloWorldPutGet

This is an example of issuing a channelPutGet.

examplePvaClientMultiDouble

This is an example of issuing gets and puts to multiple channels where each channel has a numeric scalar value field.

examplePvaClientNTMultiChannel

This is an example of using NDMultiChannel to obtain data from multiple channels.

helloWorldRPC

This is an example of issuing a channelRPC request. It does not use pva.