GPA Logo   Technology Show All...

Most GPA code is a part of a foundational code library. These libraries include hundreds of components that extend or expand the functionality included in the standard .NET Framework. Use of these common components assures that complex .NET features are consistently implemented reliably and securely.

Included here are also links to a number of miscellaneous open source tools which GPA has developed.

Code Libraries


Additional Technologies and Tools


Code Libraries

Gemstone Libraries

GPA Gemstone Code Libraries - GitHub Repository

The Gemstone Libraries are a new collection of useful open source .NET code based largely on the extensive Grid Solutions Framework (GSF) that has been in continuous development and refinement by GPA since 2004. The GSF, with over 800,000 lines of code, is currently the foundation for GPA's open source projects, and it is actively being used by electric power utilities world-wide to support their internal development projects.

The GPA Gemstone Libraries are a focused re-envisioning of the very best code, i.e., the “gems”, from the GSF that have been refactored to compile with the flexible, cross-platform .NET Core code components. In releasing the open-source .NET Core framework, Microsoft seeks to improve security as performance is significantly increased on all platforms.

Grid Solutions Framework

Grid Solutions Framework - GitHub Repository

The Grid Solutions Framework (GSF) is a comprehensive collection of classes and methods useful for any .NET project. The GSF is the foundational code library for all GPA products. It includes hundreds of class libraries that extend or expand the functionality included in the .NET Framework. The GSF makes many of the more complex .NET features (e.g., sockets and encryption) easier to implement and adds functions not included within .NET. The GSF has over 860,000 lines of actual code and 225,000 lines of comments spanning more than 75 assemblies

See: GSF documentation for complete class details.

Time-Series Library

Time-Series LibraryGitHub Repository

The Time-Series Library (TSL) included within the Grid Solutions Framework is a powerful collection of methods to process real-time streaming data. Implemented with an adapter-based extensibility model for pluggable inputs, actions and outputs, the TSL allows fully customizable real-time data processing. Systems using the TSL inherit the ability to manage, process and respond to fast-moving time-series data at low latency.

See the full list of TLS Adapters that are available with the Grid Solutions Framework.

SNAPdb Engine

SNAP Database Engine - GitHub Repository

The SNAPdb Engine is a high-performance key/value pair archiving system. The SNAPdb is the archiving engine for the openHistorian 2.0. This technology was developed as a core data archival and retrieval system designed to significantly improve the ability to archive extremely large volumes of real-time streaming data and directly serve these large data volumes to consuming applications and systems. The SNAPdb code is contained within the Grid Solutions Framework.



Gateway Exchange Protocol

Streaming Telemetry Transport Protocol - GitHub Repository

The Streaming Telemetry Transport Protocol (STTP) has been developed through DOE Project DE-OE-859 to replace GPA's Gateway Exchange Protocol (GEP) for synchrophasor data. Like GEP, STTP is a publish-subscribe data transfer protocol that has been optimized for exchanging streaming time-series style data -- like synchrophasor data. The specification for STTP as the specification was used for the DOE project was developed in the open on GitHub.

STTP supports transferring both real-time and historical time-series data at full or down-sampled resolutions. The value of STTP is fully realized at scale when transferring a large volume of time-series data points with low latency requirements.

A detailed comparison of STTP, IEEE C37.118 and IEC 61850-90.5 is available from Pacific Northwest National Laboratory.


STTP Connection Tester - STTP Connection Tester on GitHub

The Streaming Telemetry Transport Protocol (STTP / IEEE 2664) Subscription Tester is a tool used to validate that an STTP subscription based connection is working as expected.

The application is a simple graphical program that uses the STTP data subscription API to display trending lines for each subscribed measurement in the specified filter expression. Trend lines are updated as values are received in real-time. Mouse controls (or finger gestures) will allow rotation and zoom, arrows keys will adjust X/Y location. Clicking on the "Subscription Controls" area at the bottom of the screen will pop-up a control window to allow you to change connection information (e.g., server/port to connect to), the filter expression and even replay data if a historian is enabled.

See usage documentation.

Gateway Exchange Protocol

Gateway Exchange Protocol - GitHub Repository

The Gateway Exchange Protocol (GEP) is a measurement-based publish/subscribe transport protocol used for efficiently exchanging time-series data. Through use of a command channel it can also automatically synchronize meta-data among applications. The protocol supports sending real-time and historical data at full or down-sampled resolutions. When sending historical data, the communications speed can be controlled dynamically to provide data as quickly as possible, e.g., a data download, or slowed for visualization streaming.


GEP Subscription Tester - GitHub Repository

The Gateway Exchange Protocol (GEP) Connection Tester is a tool used to validate that a GEP subscription based connection is working as expected. It can also be used to validate filter expressions that can be used to select a set of points in the openPDC and other GPA synchrophasor products, e.g., SIEGate for use as inputs or outputs for any adapter.

See usage documenation.


GEP Data Extractor - GitHub Repository

The Gateway Exchange Protocol (GEP) Data Extraction Utility is used to export data from a system that has access to a time-series archive and is automatically included with GPA time-series products, e.g., the openHistorian. The tool is used to export selected signals from a given time-range to a CSV file with options to separate exported files based on signal type and exclude points that do not meet minimum quality criteria. The tool allows exports from any system that supports a GEP data publisher and has an attached time-series archive by making a temporal subscription to historical data.


C37.118 Serial Port Scanner - GitHub Repository

The IEEE C37.118 Serial Port Scanner and Configuration Loader tool is used to automatically scan a system's serial ports and query each port for an active C37 connection. When an active connection is found, the scanner will query the latest configuration and automatically add, or update an existing, connection in the target synchrophasor system configuration. If the source serial ports are known, these can be provided as an input file to reduce the scan to particular ports.


UDP-2-Serial - GitHub Repository

The UDP to Serial tool is a simple multi-platform console-based application that takes data received on a UDP/IP socket and forwards it to a serial port. The tool is fully configurable for source IP, i.e., source network interface and IP version; as well as target serial settings, i.e., baud rate, data bits, parity, stop bits, and DTR/RTS signaling.

The tool runs on Linux, Windows and OS X.


Additional Technologies and Tools

Applied Resiliency for More Trustworthy Grid Operation

ARMOREGitHub Repository

ARMORE is software for a substation appliance that performs inspection of network packets and alarms on communications that does not comply with specified ARMORE policy. ARMORE is capable of blocking traffic based on deep inspection of common substation communications protocols, such as DNP3. ARMORE is also capable of encapsulating and encrypting legacy communications and resiliently exchanging this information among ARMORE nodes.

See: ARMORE Project FactSheet


PTP Sync - GitHub Repository

The Precision Time Protocol (PTP) Synchronization Service is a Windows service and associated tools used synchronize a Windows system with PTP.

The Precision Time Protocol (PTP) defined in IEEE 1588 is a protocol used to synchronize clocks over a network. It represents a major improvement over NTP. On a local area network, it can achieve clock synchronization in the sub-microsecond range, making it ideal for time-sensitive Windows-hosted measurement systems like the openPDC and substationSBG.

Note that newer versions of Windows, specifically Windows Server 2019 and post 2018 releases of Windows 10, already support PTP - so this tool is useful for other Windows versions where PTP support is unavailable.


SIM-Prox Service - GitHub Repository

The Simple Network Management Protocol (SNMP) InterMediary Proxy Service (SIMProx) is a Windows service that provides a junction between SNMP V3 traps and relational database operations using expression based translations. The service can also be used as a singleton forwarding proxy agent for SNMP messages from and number of configured agent sources.

A database is required for local configuration metadata. The local configuration database can be used as the target for database operations, but the target operations database and metadata database can also be different.

Broccoli Sharp

Broccoli SharpGitHub Repository

Developed as part of the ARMORE project, Broccoli Sharp is a C#-based API wrapper for the Bro intrusion detection system API called Broccoli, the "Bro client communications library". This interface allows Bro users to leverage existing .NET technologies such as the the Grid Solution Framework when using Bro. The library consists of a set of managed C# based .NET classes and structures that wrap Broccoli functionality.


Go-To-C#GitHub Repository

The "Go-to-C-Sharp" project is a console application that converts Go language code to C#. It is targeted toward developers wanting to bring native Go source code into a .NET development environment.

The project includes functionality targeted for structural code conversions and will produce proper function signatures. The converted code requires .NET version 4.7.1+ and C# 7.2+ to accommodate return by-ref functionality for structures


Tag Update Utility - GitHub Repository

The Update Point Tag Name tool is used update the point tag naming expression used to automate naming of measurement points tags in time-series databases. The tool is automatically included with all GPA time-series products and is used to allow the user to specify a new point tag name expression and apply it to the target database, thus renaming all point tags according to the newly updated expression.


TSL Adapter Explorer - GitHub Repository

The Adapter Explorer tool is used analyze the current time-series adapter configuration of a Time-Series Library (TSL) based system and validate inputs, outputs and current values. The tool is automatically included with all GPA time-series products and is used for configuration and operational diagnostics related to adapter configurations including connection string, input measurements and output measurements along with current values and timestamps.


Global Action Adapter Calculation State Manager - GitHub Repository

The Bulk Calculation State Utility is used control the enabled state for dynamic calculations running in a time-series configuration. The tool is automatically included with the GPA openHistorian product and is used to search and filter action-adapter based dynamic calculations so that calculations can be easily started or stopped in bulk based on search criteria.

Dynamic system calculations can now be added in bulk by the openHistorian web-based input device wizard. These calculations can also include calculation outputs that may only be useful during initial device checkout. For large systems this step can create an exponential number of calculations, this tool is used to help manage which calculations should be running.


GSF Log View Utility - GitHub Repository

The Grid Solutions Framework (GSF) Log File Viewer tool is used to examine and filter log data archived with the GSF diagnostics logging system and is automatically included with all GPA products. The tool is used to perform detailed analysis and filtering of archived log information.


Grafana Data PlugIns - GitHub Repository

GPA provides two Grafana Datasource Plugins for accessing time-series data from within Grafana:

Grafana can be hosted internally to the openHistorian and allows the user to build various real time and historic dashboards.

A number of Utilities use Grafana in conjunctions with GPA's plug-in to visualize and monitor the status of their PMUs as well as display phasor data in real time operation environments.


Grafana Panel PlugIn Collection - GitHub Repository

GPA provides a number of Grafana Panel Plug-ins to visualize Phasor data and Device Status:

  • GPA Phasor Map shows Phasor Data on a geographic Map. This panel also supports a variety of different overlay and background maps as well as customizable overlays for Transmission maps and similar features.
  • Datadownload Panel is a Grafana panel to download openHistorian data as a .csv file. Tis panel can be used to supplement various data visualization dashboards.
  • Device Dashboard Panel is a Grafana panel that shows the status of all PMUs connected to the openHistorian and provides some low level troubleshooting functionality.
  • Phasor Clock Panel is a Grafana Panel that shows phasors provided by the openHistorian in a polar form.

Grafana can be hosted internally to the openHistorian and allows the user to build various real time and historic dashboards. The above panel plug-ins can be used in conjunction with the openHistorian Grafana Data plug-in.

A number of Utilities use Grafana in conjunctions with GPA's plug-in to visualize and monitor the status of their PMUs as well as display synchrophasor data in real-time operation environments.


Security Patch Manager - openSPM On GitHub

open Security Patch Manager (openSPM) is a browser-based tool to assist utilities in managing CIP-007 R2 compliance. It provides documentation for:

  • Discovery of security patches for CCA
  • The decision for the application of security patches within 35 days
  • The implementation of patches within an additional 35 days
  • Any needed mitigation plans, along with their action items. See MiPlan

Alarms are raised and emails sent to responsible staff as compliance due dates approach. For more info: openSPM Overview


MiPlan - GitHub Repository

MiPlan is a highly customizable, browser-based action plan tracking tool that can send emails to responsible individuals automatically as target dates approach or are passed. MiPlan provides a mechanism to track large lists of action items on multiple plans simultaneously. Users can see the status of all items on plans of which they are a part, and owners of individual action items can change the status of completion of their items.

MiPlan is integrated with openSPM so that MiPlan can be used to track the completion of remediation plan action items that are required for NERC compliance.


CSV-2-DB Utility - GitHub Repository

The CSV Data Manager tool is used for bulk database operations and is automatically included with all GPA time-series products. The tool is used to allow CSV based input and output operations associated with a target database. Specifically the tool will export all data from a selected table to a CSV file and will also import/apply a CSV file to the target table using one of the following database operations: insert, update or delete.


Data Migration Utility - GitHub Repositoryb

The Data Migration Utility is used to copy a database from one schema to another and is automatically included with all GPA time-series products. The tool is typically used during a product upgrade to migrate to a new a schema but can also be used to convert from one relational database system to another, e.g., migrating from SQLite to SQL Server.

Leveraged Technology

GPA utilizes leading-edge technologies in the development of new products. The specific technology selected varies based on the target platform and suitability to the deliverable. Unless there is a clear advantage from a competing technology, GPA uses .NET when possible because of its rich set of development tools and wide deployment options; however, our expertise includes many other platforms and technologies.


Products Summary Page      Product and Tools Index