epics-pva-client

Implements EPICS PV Access client and server operations in C++.

1|1|Updated Apr 14, 2026
One-click install
npx skills add https://github.com/BCDA-APS/opencode-skills --skill epics-pva-client
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: epics-pva-client
Source: https://github.com/BCDA-APS/opencode-skills/tree/main/pvAccessCPP-client
Command: npx skills add https://github.com/BCDA-APS/opencode-skills --skill epics-pva-client

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

This skill helps you write correct, production-ready EPICS PV Access (PVA) client and server code in C++ so you can exchange structured data, perform atomic updates, and expose RPC services without reinventing the protocol plumbing.

Core Features & Use Cases

  • Client operations with pvac::: Connect to PVs, issue blocking gets, perform fluent puts, and manage monitors reliably.
  • Structured data with pvData: Define PVStructure types using FieldBuilder, access fields safely, and handle arrays with shared_vector for efficient transfers.
  • Server-side SharedPV patterns: Implement mailbox/read-only PVs and handle custom put processing via SharedPV handlers.
  • Normative Types and PVA patterns: Use epics::nt normative types (NTScalar, NTTable, NTNDArray, etc.) for standard layouts.
  • QSRV group exposure via info(Q:group): Group IOC records into atomic PVA PV updates and configure triggers.
  • Quick CLI parity: Use pvget/pvput/pvmonitor/pvinfo/pvlist/pvcall as practical development and debugging companions.

Quick Start

Use the epics-pva-client skill to generate a C++ PVAccess client that connects to a PVA PV, performs a get with selected fields, and prints the returned PVStructure.

Frequently Asked Questions about epics-pva-client

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I write a C++ EPICS PV Access client to connect and get PV data?

Use the pvac::ClientChannel API to connect to a PVA PV and issue a blocking get with selected fields. The returned epics::pvData PVStructure provides safe, structured access to the requested channel data.

How do I implement a read-only PV Access server using SharedPV in C++?

Implement an EPICS PVA server using the SharedPV mailbox pattern for read-only PVs. You open the SharedPV, populate it with a pvData PVStructure, and clients can connect and monitor the value without custom put handlers.

How do I group EPICS IOC records into atomic PVA updates with QSRV?

Use the info(Q:group) metadata in your EPICS IOC record definitions to group records into a single PVA PV. This QSRV mechanism configures trigger conditions and exposes grouped records as one atomic PVStructure update.

What is the best way to handle structured PV data and arrays in PVAccess C++?

Use the epics::pvData FieldBuilder to define PVStructure types and shared_vector for efficient array transfers. This framework provides safe field access and optimized memory management for structured PVAccess data exchange.

Can I use standard normative types like NTScalar and NTTable with PVA clients?

Yes, use the epics::nt normative types such as NTScalar, NTTable, and NTNDArray to standardize PVStructure layouts. PVA clients and servers exchange these structured types seamlessly during channel get, put, and monitor operations.

Why do I need pvData structures when performing PVA put and monitor operations?

PVAccess put and monitor operations require epics::pvData structures to correctly format and interpret the exchanged data. Proper pvData type construction ensures atomic updates and reliable polling semantics during pvac client channel operations.