Skip to content

GSF v2.1.468 Release Notes

J. Ritchie Carroll edited this page Mar 17, 2017 · 2 revisions

Critical Fixes
New Features / Optimizations
GSF Time-Series Library Updates
GSF Core Updates
GSF PQDIF / EMAX / SEL File Parser Updates
Other GSF Project Updates

Critical Fixes

  • PhasorProtocolAdapters: Fixed issue in custom IEEE C37.118 concentrator output streams where phasors were being reordered if a cell had 10 or more phasors.
  • PhasorProtocolAdapters: Updated IEEE C37.118 concentrator to allow an explicit config frame 1 to be returned when requested instead of defaulting to config frame 2 - this corrects issues with SEL RTAC devices connecting to openPDC.
  • PhasorProtocolAdapters: Corrected issue for output stream mappings when using PMU source device acronyms that are longer than 16 characters.
  • DataSubscriber: Updated measurements received with GEP to apply any linear adjustments defined in the local configuration.
  • GSF.Core: Added code to ensure that log files won't become deadlocked if an error occurs during rollover.
  • GSF.TimeSeries: Updated DataSubscriber meta-data synchronization to exclude calculation and alarm signals from the device measurement removal processing such that if a local subscription creates new calculations associated with a subscribed device, the locally created measurements will not get automatically removed at the next synchronization.

New Features / Optimizations

  • GrafanaAdapters: Added full set of aggregation and operational functions that operate on a per-series or per-set for all data sources that implement Grafana interfaces. See documentation.
  • PowerCalculations: Added calculators for wrapping angle difference and line impedance with resistance, reactance, conductance and susceptance results - includes both rectangular and polar based outputs.
  • LogFileViewer: Added new enhanced general logging capabilities along with a new application, Log File Viewer, that is used to analyze logs.
  • GSF.TimeSeries: Added an enhanced version of the time-series special compression algorithm.
  • GSF.TimeSeries: Created a lookup cache for the main adapter meta-data using dictionary based lookups. This improved load times for input adapters on large systems (e.g., from 160 seconds to less than 1 second in some cases).
  • GSF.TimeSeries: Added a configuration setting that allows the use of a new RouteMappingHighLatencyLowCpu routing method. This routing method can be considered when a system has high CPU utilization and does not have many cascading dependencies. This method adds mandatory wait times in the routing table so that multiple frames will be routed together as a group instead of one frame at a time.
  • GSF.Core: Added a static timer class to allow many hundreds of scheduled events that run at the same interval to be associated with a single wait event instead of creating a new timer for each event (e.g., as hundreds of devices needing to check statistics every second) - this alleviates thread pool exhaustion that can occur when hundreds of timer events get executed at the same time.
  • GSF.TimeSeries: Updated measurement definitions to carry meta-data as part of measurement key with an internal reference inside measurement implementations to reduce total memory footprint requirements for new measurements.
  • GSF.TimeSeries: Added "supportsTemporalProcessing" connection string parameter to DataSubscriber to allow data gap recovery requests to be proxied from remote subscriptions, e.g., where a historian subscribed to a PDC subscribed to remote sources, the historian could enable data gap recovery and have temporal requests proxied through PDC connection simply by setting supportsTemporalProcessing = true in the PDC subscriptions.
  • GSF.TimeSeries: Added up-time statistics for system, subscriber, publisher, input streams and output streams
  • PowerCalculations: Updated average frequency calculator to (1) exclude NaN values from average results, (2) allow definable unreasonable thresholds, (3) improve flat-line value detection to throw out repeating values, and (4) added flag to AverageFrequency calculator to allow unreasonable results, e.g., zero, to be reported as NaN.
  • GSF.TimeSeries: Updated ServiceClientBase to make it easier to pipe commands from the command prompt.
  • GSF.PhasorProtocols.UI: Updated OutputStream data model to accommodate auto-assignment of "auto public config frame flag" based on current channel definitions

GSF Time-Series Library Updates

  • GSF.TimeSeries: Fixed a race condition that could cause the system to become unresponsive when a GEP client disconnects.
  • GSF.TimeSeries: Added MeasurementReportingInterval to data publisher primary configuration settings to control reporting interval of connected client subscribers.
  • GSF.TimeSeries: Fixed a bug in the HighLatencyLowCpu routing table.
  • GSF.TimeSeries: Added overloads to ServiceHostBase.DisplayStatusMessage so that messages being relayed to ServiceHelper can be bypassed when needed.
  • GSF.TimeSeries: Added measurement reporting interval setting for GEP data publisher to allow control volume of data processed messaging updates.
  • GSF.TimeSeries: Added user commands and responses to GEP to allow for additional extensibility.
  • GSF.TimeSeries: Updated application of MeasurementValueFilterFunction to occur when default measurement key cache is established.
  • GSF.TimeSeries: Updated DataGapRecoverer to better maintain data source and filter expressions when parent subscription gets updated.
  • GSF.TimeSeries: Updated order of operations for MeasurementKey and MeasurementMetadata since they have a circular reference so prevent unintended null reference exceptions
  • GSF.TimeSeries: Fixed issue where DataGapRecoverer would not process the full collection of outages because the temporal subscription class was being disconnected.
  • GSF.TimeSeries: Added logging path and max log file settings to config file for new logging engine.
  • GSF.TimeSeries: Updated log path directory creation to fall-back on common log location when an alternate path is specified and service doesn't have rights.
  • GSF.TimeSeries: Updated concurrent calling of QueueMeasurementsForProcessing for safer/proper TSSC processing.
  • GSF.TimeSeries: Implemented new ConnectionInfo property for common synchrophasor adapters for enhanced connection source logging.
  • GSF.TimeSeries: Updated DataSubscriber to not query statistics nor register device statistics during data gap recovery operations.
  • GSF.TimeSeries: Added device statistic for tracking the number of defined measurements per frame.
  • GSF.TimeSeries: Corrected DataPublisher meta-data response messages.
  • GSF.TimeSeries: Fixed augmentation of statistics when adding new UpTime stat for existing subscribers.
  • GSF.TimeSeries: Fixed all input stream and output stream statistic descriptions for the average number of measurements per second.
  • GSF.TimeSeries: Fixed edge case in metadata synchronization when the subscriber gets the rug ripped out from under him - such as deleting the subscriber in the middle of metadata synchronization.

GSF Core Updates

  • GSF.Core: Added ability to model expression amendments for SQL statements in modeled tables used with TableOperations using an [AmendExpressionAttribute] - this includes the ability to use run-time token replacements for modeled amendments, e.g., "TOP {count}" where count was configurable at run-time.
  • GSF.Core: Added a dictionary cache to assembly type lookup functions (see AssemblyInfo.FindType) to speed searches for loaded types.
  • GSF.Core: Added a per processing thread cancellation token that can be checked in user defined processing function, e.g., m_processQueue.CancellationToken.Iscancelled, so that when a timeout occurs, function can exit gracefully.
  • GSF.Core: Added ShutdownHandler so ScheduledTask objects can be signaled and disposed of when the application shuts down. Also modified the WeakAction class to be more intuitive.
  • GSF.Core: Added a way to implement various optimizations through the SystemSettings config file.
  • GSF.Core: Added a new logging method for GSF.ServiceProcess: ServiceHelper.cs This is a first attempt to improve the existing StatusLog.txt and ErrorLog.txt error logging method. The utitlity for viewing these logs is call 'LogFileViewer'.
  • GSF.Core: Removed factor of 3 from active and reactive power calculations in GSF.Units.EE.Phasor.
  • GSF.Core: Added cross platform GetAvailableFreeSpace function to GSF.IO.Common.
  • GSF.Core: Updated IFormattable implementations to use default ToString implementations when no format is specified.
  • GSF.Core: Updated ToElaspsedTimeString to better estimate times that span years.
  • GSF.Core: Updated StandardDeviation extension methods to include option to calculate result for an estimated population size (i.e., a sample) - default remains to calculate for a full population.
  • GSF.Core: Updated CRON schedule parser to support range with interval syntax, i.e., start-stop/interval
  • GSF.Core: Fixed implementations using RegisterWaitForSingleObject in Mono.
  • GSF.Core: NullableWeakReference.cs - Replaced improper use of setting a WeakReference.Target to null.
  • GSF.Core: Fixed an issue with ArrayExtensions.IndexOf when finding sub-expressions towards the end of a string.

GSF PQDIF / EMAX / SEL File Parser Updates

  • GSF.SELEventParser: Added ability to parse .cev files.
  • GSF.EMAX: Added logic to invalidate timestamps and event groups if there weren't enough bytes in the frame to get their actual values.
  • GSF.EMAX: Fixed issues with parsing certain data formats.
  • GSF.EMAX: Fixed time zone of corrected timestamps in the EMAX file parser.
  • GSF.EMAX: Modified timestamp validation in the parser to flag time errors for binary-encoded decimal digits that are larger than 9.
  • GSF.EMAX: Fixed timestamp parsing code to set the m_timestamp member variable of the Parser class.

Other GSF Project Updates

  • GSF.Communication: Ignored object disposed exceptions on client disconnects as a race condition can occur between dispose and disconnect under some conditions.
  • GSF.Communication: Added using statements when setting m_connectState, m_receiveState, and m_sendState member variables to ensure SocketAsyncEventArgs objects are properly disposed on reconnect - this mainly affected use-cases where sockets were being reused throughout system lifetime.
  • GSF.COMTRADE: Updated parser to accept SEL comtrade files from other instrumentation sources.
  • GSF.COMTRADE: Modified writer to use invariant culture for floating-point numbers.
  • GSF.ServiceProcess: Added overloads to ServiceHelper.UpdateStatus so that logger messages can be bypassed when needed, e.g., to remove duplicate log messages.
  • GSF.ServiceProcess: Improved logic in the StatusLog_LogException handler.
  • GSF.ServiceProcess: Added a time-out to the client connection method while waiting for an authentication response - there can be cross-domain cases where this will never come.
  • GSF.Historian: Updated 1.0 historian archive writes to not report time-tag exceptions for historical writes that are out of range.
  • GSF.Historian: Updated ArchiveDataPoint class binary image parsing to properly validate timestamp value before property assignment.
  • GSF.Historian: Improved handling of roll-over situations when using ArchvieReaders.
  • GSF.Historian: Improved error logic in ArchiveFile to close the file stream when errors occur.
  • HistorianAdapters: Modified LocalOutputAdapter startup message to use the correct archive file path when reading the path from the configuration file.
  • GSF.Net: Updated FTP engine to refresh response code before testing transfer completion result.
  • GSF.PhasorProtocols: Fixed an error during IEEE C37.118 binary frame generation for Second of Century for frame of data received with an invalid timestamp.
  • GSF.PhasorProtocols: Updated check for configuration changes to safely ignore any issues with configuration frame generation when comparing received versus cached binary images.
  • GSF.PhasorProtocols.UI: Added frame rate field to the input wizard.
  • PhasorProtocolAdapters: Updated common phasor services function to establish default measurement key cache to trim and received signal type from database query in case source field length is a fixed string greater then four characters.
  • PhasorProtocolAdapters: Fixed CommonPhasorServices.ValidateStatistics which was failing due to an unescaped SQL string.
  • GSF.TimeSeries.UI: Turned off pattern compression in Manager alarm state subscription.
  • GSF.TimeSeries.UI.WPF: Modified measurement groups page to issue ReloadConfig command to update the security context in the DataPublisher.
  • GSF.TimeSeries.Transport.UI: Modified internal subscription page to save the device without initializing when the user clicks the 'Next' button.
  • GSF.TimeSeries.Transport.UI.WPF: Modified internal subscription page to automatically set the historian of the new subscription to the first historian which is not STAT.
  • GSF.TimeSeries.Transport.UI.WPF: Added code to check if frequencyRangeMin > frequencyRangeMax.
  • GSF.TimeSeries.Transport.UI.WPF: Updated internal subscription default connection strings to enable compression by default.
  • GSF.PhasorProtocols.UI: Fixed errors that occurred as a result of returning null when querying an empty list of devices.
  • GSF.PhasorProtocols.UI.WPF: Added validation to input device wizard to prevent accidental assignment of a device acronym that matches a PDC acronym.
  • GSF.PhasorProtocols.UI.WPF: Added Code to Validate settings before writing to IsolatedStorage.
  • GSF.PhasorProtocols.UI.WPF: Added code to handle users entering negative values of m_numberOfDataPointsToPlot and m_frequencyRangeMin > m_frequencyRangeMax.
  • GSF.PhasorProtocols.UI.WPF: Fixed NullReferenceException when saving a device without a concentrator.
  • GSF.Security: Added Searchable attribute to applicable model fields.
  • GSF.Web: Added Search field to the Users.cshtml and the required code to the SecurityHub for the filterText.
  • GSF.Net: Added a timeout parameter to the FtpClient class.
  • GSF.Net: Fixed FtpResponse.GetLine() to handle messages without carriage returns.
  • GSF.Net: Fixed issue where FTP command channel was timing out waiting for a second response from file transfer commands.
  • GSF.Net: Added more detail to the FtpcommandExeption in GetPassivePort function.
  • GSF.Net: Modified FTP data stream to use the configured timeout for the FTPClient.
  • GSF.Web: Updated HubClientOperationsBase to make EndSession virtual so that extra shutdown steps can be accommodated by implementors.
  • GSF.Web: Fixed null reference exceptions that can occur when attempting to reference client script for local self-created hub instances.
  • GSF.Web: Updated ClientScript property of HubClientBase to handle null reference issues internally.
  • LogFileViewer: Improved the ability to filter log messages.
  • LogFileViewer: Fixed issue when a filter will still be added even though it was cancelled.
  • LogFileViewer: Added some better filtering options.
  • LogFileViewer: Cleaned up code for consistency, added icon and proper assembly info.
  • HistorianView: Simplified DateTime handling to help prevent culture-related issues.
  • HistorianView: Modified file exports to handle different cultures better.
  • StatHistorianReportGenerator: Set run-time culture to invariant to reduce risk of culture specific failures when generating a long date for a report that may include high-order Unicode characters that are outside the range of what can be produced by Report.NET library since it is only capable of using the standard AFM fonts that are expected to be supported by all PDF readers.
  • StatHistorianReportGenerator: Modified the completeness report to use the term 'Availability' instead of 'Quality'.
  • StatHistorianReportGenerator: Modified correctness report to count measurements received while the device was reporting an error.
  • StatHistorianReportGenerator: Fixed an error that occurred when duplicate system up-time statistics were created in the STAT historian as a result of changing point IDs over time.
  • DataQualityMonitoring: Updated AlarmAdapter to set false as default value for AlarmLog property.
  • GSF.InstallerActions: Improved error handling by logging more exception details in the Windows event log.
  • MultiProtocolFrameParser: Adds a new method to support sending Raw (16 bits) commands to the device (Vizimax PR).