This document is derived from the openPDC project's document: Device to Data in 5 Easy Steps
The procedure is the same. There are only a few minor code changes.
The first thing you need to do is create a console application in Microsoft Visual Studio 2008. The following are detailed steps to guide you through the process.
In order to get the code to run, you will need to add references to the openPDC assemblies. The following are detailed steps to guide you through the process.
Note: In order to complete this step, you will need to
build openPDC.
Now you are ready to copy the source code that will interface with your device. Remove everything in Program.cs and replace it with the following code snippet.
using System; using System.Collections.Generic; using System.Text; using TVA; using TVA.PhasorProtocols; namespace GTosPMUtoData { /// <summary> /// Sample Program adapted for the GridTrak Open Source SynchroPhasor PMU /// from openPDC sample: Device to Data in 5 Easy Steps. /// References: http://openpdc.codeplex.com and http://gtospmu.codeplex.com /// /// Mar 28, 2011 Updated /// </summary> class Program { static MultiProtocolFrameParser parser; static long frameCount; static void Main(string[] args) { Console.WriteLine("GTosPMU to Data for openPDC Test"); // Create a new protocol parser parser = new MultiProtocolFrameParser(); // Attach to desired events parser.ConnectionAttempt += parser_ConnectionAttempt; parser.ConnectionEstablished += parser_ConnectionEstablished; parser.ConnectionException += parser_ConnectionException; parser.ParsingException += parser_ParsingException; parser.ReceivedConfigurationFrame += parser_ReceivedConfigurationFrame; parser.ReceivedDataFrame += parser_ReceivedDataFrame; // Define the connection string parser.ConnectionString = "phasorProtocol=IeeeC37_118V1; transportProtocol=Serial; accessID=2; " + "port=COM1; baudrate=115200; parity=None; stopbits=One; databits=8; " + "dtrenable=False; rtsenable=False; autoStartDataParsingSequence = false;"; // Start frame parser parser.AutoStartDataParsingSequence = true; parser.Start(); // Hold the console open until the operator hits the <Enter> key Console.ReadLine(); } static void parser_ReceivedDataFrame(object sender, EventArgs<IDataFrame> e) { // Increase the frame count each time a frame is received frameCount++; // Print information each time we receive 60 frames (every 2 seconds @ 30 fps) // Also check to make sure we have at least one protocol cell in the DataFrame; else ignore processing it. if ((frameCount % 60 == 0) && (e.Argument.Cells.Count > 0)) { IDataCell device = e.Argument.Cells[0]; Console.WriteLine("Received data frames so far = " + frameCount.ToString()); Console.WriteLine(" Last frequency = ", device.FrequencyValue.Frequency.ToString("00.0000") + " Hz"); for (int ii= 0; ii < device.PhasorValues.Count; ii++) { Console.WriteLine(" Last phase angle[" + ii.ToString() + "] = " + device.PhasorValues[ii].Angle.ToString("##0.0000") + " rad"); Console.WriteLine(" Last magnitude[" + ii.ToString() + "] = " + device.PhasorValues[ii].Magnitude.ToString("##0.000") + " {device units}"); } Console.WriteLine(" Last Timestamp = " +((DateTime)device.Timestamp).ToString("yyyy-MM-dd HH:mm:ss.fff")); } } static void parser_ReceivedConfigurationFrame(object sender, EventArgs<IConfigurationFrame> e) { // Notify the user when a configuration frame is received Console.WriteLine("Received configuration frame with {0} device(s)", e.Argument.Cells.Count); } static void parser_ParsingException(object sender, EventArgs<Exception> e) { // Output the exception to the user Console.WriteLine("Parsing exception: {0}", e.Argument); } static void parser_ConnectionException(object sender, EventArgs<Exception, int> e) { // Display which connection attempt failed and the exception that occurred Console.WriteLine("Connection attempt {0} failed due to exception: {1}", e.Argument2, e.Argument1); } static void parser_ConnectionEstablished(object sender, EventArgs e) { // Notify the user when the connection is established Console.WriteLine("Initiating {0} {1} based connection...", parser.PhasorProtocol.GetFormattedProtocolName(), parser.TransportProtocol.ToString().ToUpper()); } static void parser_ConnectionAttempt(object sender, EventArgs e) { // Let the user know we are attempting to connect Console.WriteLine("Attempting connection..."); } } }
Just connect the GTosPMU sensor to the host PC serial or USB port and and plug in the transformer.
If you followed all the other steps correctly, you should be able to run the project by pressing "F5" from within Microsoft Visual Studio. The result should look something like the example image below.