Merge branch 'v1.6_develop' into v1.6_develop_488

v1.6
Michael Zillgith 1 month ago
commit cd10e14790

@ -1,9 +1,16 @@
Changes to version 1.6.1
------------------------
-.NET Tools: in the Tools folder you can find the .net project to generate Static and Dynamic Models
New features and improvements:
- .NET API: IEC61850ServerAPI -> LogStorage function wrapper added.
- .NET API: MmsValue -> MmsValue_encodeMmsData and MmsValue_decodeMmsData added.
- .NET API: Fixed issue of not printing log entries in log_client and log_server examples.
- .NET Tools: in the Tools folder you can find the .net project to generate Static and Dynamic Models
- SCLParser: also available on tools, you can load your SCL model and use it with our library
Changes to version 1.6.0
------------------------

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("IEC61850 API for C#")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("MZ Automation GmbH")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("Michael Zillgith")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,56 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{C35D624E-5506-4560-8074-1728F1FA1A4D}</ProjectGuid>
<TargetFramework>netstandard2.0</TargetFramework>
<OutputType>Library</OutputType>
<RootNamespace>iec61850dotnet</RootNamespace>
<AssemblyName>iec61850dotnet</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>IEC61850 API for C#</AssemblyTitle>
<Company>MZ Automation GmbH</Company>
<Copyright>Michael Zillgith</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
<Compile Include="MmsValue.cs" />
<Compile Include="DataSet.cs" />
<Compile Include="ReportControlBlock.cs" />
<Compile Include="IEC61850ClientAPI.cs" />
<Compile Include="Reporting.cs" />
<Compile Include="Control.cs" />
<Compile Include="IsoConnectionParameters.cs" />
<Compile Include="MmsVariableSpecification.cs" />
<Compile Include="IEC61850ServerAPI.cs" />
<Compile Include="IEC61850CommonAPI.cs" />
<Compile Include="TLS.cs" />
<Compile Include="SampledValuesControlBlock.cs" />
<Compile Include="GooseControlBlock.cs" />
<Compile Include="GooseSubscriber.cs" />
<Compile Include="SampledValuesSubscriber.cs" />
<Compile Include="IedServerConfig.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>

@ -1264,7 +1264,6 @@ namespace IEC61850
moreFollows = moreFollowsVal;
return WrapNativeLogQueryResult(linkedList);
}
/// <summary>
@ -1725,7 +1724,6 @@ namespace IEC61850
if (error != 0)
throw new IedConnectionException("Error uploading file", error);
}
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
@ -2109,7 +2107,6 @@ namespace IEC61850
if (error != 0)
throw new IedConnectionException("Failed to create data set", error);
}
/// <summary>
@ -2544,7 +2541,6 @@ namespace IEC61850
handler(invokeId, handlerParameter, clientError);
}
public UInt32 WriteValueAsync(string objectReference, FunctionalConstraint fc, MmsValue value, WriteValueHandler handler, object parameter)
{
int error;

@ -22,9 +22,11 @@
*/
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using IEC61850.Common;
using IEC61850.TLS;
using static IEC61850.Client.IedConnection;
// IEC 61850 API for the libiec61850 .NET wrapper library
namespace IEC61850
@ -2159,6 +2161,11 @@ namespace IEC61850
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr SqliteLogStorage_createInstance(string filename);
/// <summary>
/// Create a new LogStorage instance using the embedded sqlite database
/// </summary>
/// <param name="filename">name of the sqlite database file to be used</param>
/// <returns></returns>
public static LogStorage CreateLogStorage(string filename)
{
try
@ -2186,10 +2193,26 @@ namespace IEC61850
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern int LogStorage_getMaxLogEntries(IntPtr self);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern int LogStorage_addEntry(IntPtr self, long time);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern bool LogStorage_addEntryData(IntPtr self, int entryID, string dataRef, byte[] data, int dataSize, int reasonCode);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate bool LogEntryCallback(IntPtr self, long timeStamp, long entryID, bool moreFollows);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate bool LogEntryDataCallback(IntPtr self, string dataRef, byte[] data, int dataSize, int reasonCode, bool moreFollows);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern bool LogStorage_getEntries(IntPtr self, long startingTime, long endingTime, LogEntryCallback entryCallback, LogEntryDataCallback entryDataCallback, object parameter);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern void LogStorage_destroy(IntPtr self);
private IntPtr self = IntPtr.Zero;
private IntPtr self;
internal IntPtr GetNativeInstance()
{
@ -2201,16 +2224,64 @@ namespace IEC61850
this.self = self;
}
/// <summary>
/// Set the maximum number of log entries for this log
/// </summary>
/// <param name="maxEntries">the maximum number of log entries</param>
private void SetMaxLogEntries(int maxEntries)
{
LogStorage_setMaxLogEntries(self, maxEntries);
}
/// <summary>
/// Get the maximum allowed number of log entries for this log
/// </summary>
/// <returns>the maximum number of log entries</returns>
private int GetMaxLogEntries()
{
return LogStorage_getMaxLogEntries(self);
}
/// <summary>
/// Manually add an entry to the log
/// </summary>
/// <remarks>Usually this has not to be done by the user
/// but is done automatically by the library</remarks>
/// <param name="time">the entry time of the new entry in ms</param>
/// <returns>the entryID of the new log entry</returns>
public int AddEntry(long time)
{
return LogStorage_addEntry(self, time);
}
/// <summary>
/// Add new entry data to an existing log entry
/// </summary>
/// <param name="entryID">the ID of the log entry where the data will be added</param>
/// <param name="dataRef">the data reference of the log entry data</param>
/// <param name="data">the data content as an unstructured binary data block</param>
/// <param name="dataSize">the size of the binary data block</param>
/// <param name="reasonCode">the reasonCode of the LogEntryData</param>
/// <returns>true if the entry data was successfully added, false otherwise</returns>
public bool AddEntryData(int entryID, string dataRef, byte[] data, int dataSize, int reasonCode)
{
return LogStorage_addEntryData(self, entryID, dataRef, data, dataSize, reasonCode);
}
/// <summary>
/// Get log entries specified by a time range
/// </summary>
/// <param name="startingTime">start time of the time range</param>
/// <param name="endingTime">end time of the time range</param>
/// <param name="entryCallback"></param>
/// <param name="entryDataCallback"></param>
/// <param name="parameter"></param>
/// <returns></returns>
public bool GetEntries(long startingTime, long endingTime, LogEntryCallback entryCallback, LogEntryDataCallback entryDataCallback, object parameter)
{
return LogStorage_getEntries(self, startingTime, endingTime, entryCallback, entryDataCallback, parameter);
}
/// <summary>
/// The maximum allowed number of log entries in the log storage
/// </summary>
@ -2315,6 +2386,12 @@ namespace IEC61850
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr IedServer_getFunctionalConstrainedData(IntPtr self, IntPtr dataObject, int fc);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
public static extern void IedServer_setListObjectsAccessHandler(IntPtr self, IedServer_ListObjectsAccessHandler handler, IntPtr parameter);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate bool IedServer_ListObjectsAccessHandler(IntPtr parameter, ClientConnection connection, ACSIClass acsiClass, LogicalDevice ld, LogicalNode ln, string objectName, string subObjectName, FunctionalConstraint fc);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate int InternalControlPerformCheckHandler (IntPtr action, IntPtr parameter, IntPtr ctlVal, [MarshalAs(UnmanagedType.I1)] bool test, [MarshalAs(UnmanagedType.I1)] bool interlockCheck);
@ -2538,6 +2615,11 @@ namespace IEC61850
}
}
public void SetListObjectsAccessHandler(IedServer_ListObjectsAccessHandler handler, System.IntPtr parameter)
{
IedServer_setListObjectsAccessHandler(self, handler, parameter);
}
private Dictionary<IntPtr, WriteAccessHandlerInfo> writeAccessHandlers = new Dictionary<IntPtr, WriteAccessHandlerInfo> ();
private void ConnectionIndicationHandlerImpl (IntPtr iedServer, IntPtr clientConnection, bool connected, IntPtr parameter)

@ -206,7 +206,13 @@ namespace IEC61850
static extern void MmsValue_setElement(IntPtr complexValue, int index, IntPtr elementValue);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr MmsVariableSpecification_getChildValue(IntPtr self, IntPtr value, string childId);
static extern IntPtr MmsVariableSpecification_getChildValue(IntPtr self, IntPtr value, string childId);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern int MmsValue_encodeMmsData(IntPtr self, byte[] buffer, int bufPos, bool encode);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern int MmsValue_decodeMmsData(IntPtr self, int bufPos, int bufferLength, IntPtr endBufPo);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr MmsValue_clone(IntPtr self);
@ -220,8 +226,19 @@ namespace IEC61850
valueReference = value;
this.responsableForDeletion = false;
}
internal MmsValue (IntPtr value, bool responsableForDeletion)
public int EncodeMmsData(byte[] buffer, int bufPos, bool encode)
{
return MmsValue_encodeMmsData(this.valueReference, buffer, bufPos, encode);
}
public int DecodeMmsData(int bufPos, int bufferLength, IntPtr endBufPo)
{
return MmsValue_decodeMmsData(this.valueReference, bufPos, bufferLength, endBufPo);
}
internal MmsValue (IntPtr value, bool responsableForDeletion)
{
valueReference = value;
this.responsableForDeletion = responsableForDeletion;

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("authenticate")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("mzillgit")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,50 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{0BECEC77-2315-4B95-AFF9-E6007E644BBF}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>authenticate</RootNamespace>
<AssemblyName>authenticate</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>authenticate</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<Deterministic>false</Deterministic>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Main.cs" />
<Compile Include="AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
</Project>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("client_example_async")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("mzillgit")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,50 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{71902641-776A-47D8-9C0E-9ACBBEAC1370}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>client_example_async</RootNamespace>
<AssemblyName>client_example_async</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>client_example_async</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
</Project>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("client-example-setting-group")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("mzillgit")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,48 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{0DA95476-B149-450B-AC36-01CEECFC1A43}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>clientexamplesettinggroup</RootNamespace>
<AssemblyName>client-example-setting-group</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>client-example-setting-group</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
</Project>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("control")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("mzillgit")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,50 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{C351CFA4-E54E-49A1-86CE-69643535541A}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>control</RootNamespace>
<AssemblyName>control</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>control</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
<Compile Include="ControlExample.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
</Project>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("datasets")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("mzillgit")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,50 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{D5C7DD38-032A-49B6-B74F-FFD9724A8AE4}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>datasets</RootNamespace>
<AssemblyName>datasets</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>datasets</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
<Compile Include="DataSetExample.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
</Project>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("example1")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("mzillgit")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,50 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{C616A6DF-831E-443C-9310-3F343A6E3D1A}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>example1</RootNamespace>
<AssemblyName>example1</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>example1</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Main.cs" />
<Compile Include="AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
</Project>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("example2")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("mzillgit")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,50 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{2A226B6D-1D1F-4BFE-B8CC-158116F71270}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>example2</RootNamespace>
<AssemblyName>example2</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>example2</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
<Compile Include="WriteValueExample.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
</Project>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("example3")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("mzillgit")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,50 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{5E5D0FE0-DF44-48D8-A10E-1FB07D34DEA2}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>example3</RootNamespace>
<AssemblyName>example3</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>example3</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Main.cs" />
<Compile Include="AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
</Project>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("files")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("mzillgit")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,50 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{77127456-19B9-4D1A-AEF9-40F8D1C5695E}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>files</RootNamespace>
<AssemblyName>files</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>files</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
<Compile Include="FileServicesExample.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
</Project>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle ("goose_subscriber")]
[assembly: AssemblyDescription ("")]
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("")]
[assembly: AssemblyProduct ("")]
[assembly: AssemblyCopyright ("mzillgit")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion ("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,48 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{1285372C-2E62-494A-A661-8D5D3873318C}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>goose_subscriber</RootNamespace>
<AssemblyName>goose_subscriber</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>goose_subscriber</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
</Project>

@ -10,7 +10,7 @@ namespace log_client
private static void PrintJournalEntries(List<MmsJournalEntry> journalEntries) {
foreach (MmsJournalEntry entry in journalEntries) {
Console.WriteLine("EntryID: " + BitConverter.ToString(entry.GetEntryID()));
Console.WriteLine(" occurence time: " + MmsValue.MsTimeToDateTimeOffset(entry.GetOccurenceTime()).ToString());
Console.WriteLine(" occurence time: " + MmsValue.MsTimeToDateTimeOffset(entry.GetOccurenceTime()).ToString());
foreach (MmsJournalVariable variable in entry.GetJournalVariables()) {
Console.WriteLine(" variable: " + variable.GetTag());
Console.WriteLine(" value: " + variable.GetValue().ToString());
@ -47,12 +47,14 @@ namespace log_client
Console.WriteLine("LD: " + deviceName);
List<string> deviceDirectory = con.GetLogicalDeviceDirectory(deviceName);
foreach (string lnName in deviceDirectory) {
foreach (string lnName in deviceDirectory)
{
Console.WriteLine(" LN: " + lnName);
List<string> lcbs = con.GetLogicalNodeDirectory(deviceName + "/" + lnName, IEC61850.Common.ACSIClass.ACSI_CLASS_LCB);
foreach(string lcbName in lcbs) {
foreach (string lcbName in lcbs)
{
Console.WriteLine(" LCB: " + lcbName);
MmsValue lcbValues = con.ReadValue(deviceName + "/" + lnName + "." + lcbName, FunctionalConstraint.LG);
@ -62,7 +64,8 @@ namespace log_client
List<string> logs = con.GetLogicalNodeDirectory(deviceName + "/" + lnName, IEC61850.Common.ACSIClass.ACSI_CLASS_LOG);
foreach(string logName in logs) {
foreach (string logName in logs)
{
Console.WriteLine(" LOG: " + logName);
}
}
@ -72,7 +75,10 @@ namespace log_client
Console.WriteLine("\nQueryLogAfter:");
List<MmsJournalEntry> journalEntries = con.QueryLogAfter("simpleIOGenericIO/LLN0$EventLog",
Console.WriteLine(DateTime.UtcNow);
List<MmsJournalEntry> journalEntries = con.QueryLogAfter("simpleIOGenericIO/LLN0$EventLog",
new byte[]{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0, out moreFollows);
PrintJournalEntries(journalEntries);

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle ("log_client")]
[assembly: AssemblyDescription ("")]
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("")]
[assembly: AssemblyProduct ("")]
[assembly: AssemblyCopyright ("mzillgit")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion ("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,50 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{14C71267-2F38-460D-AA55-6803EE80AFB4}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>log_client</RootNamespace>
<AssemblyName>log_client</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>log_client</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
</Project>

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8.1" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
</configuration>
</configuration>

@ -2,10 +2,15 @@
using IEC61850.Server;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data.Common;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static IEC61850.Server.IedServer;
using static IEC61850.Server.LogStorage;
namespace log_server
{
@ -13,6 +18,25 @@ namespace log_server
{
public static void Main(string[] args)
{
bool entryCallback(System.IntPtr self, long timestamp, long entryID1, bool moreFollow)
{
if (moreFollow)
Console.WriteLine($"Found entry ID:{entryID1} timestamp:{timestamp}");
return true;
}
bool entryDataCallback(System.IntPtr self, string dataRef, byte[] data, int dataSize, int reasonCode, bool moreFollow)
{
if (moreFollow)
{
Console.WriteLine($"EntryData: ref: {dataRef}\n");
}
return true;
}
bool running = true;
/* run until Ctrl-C is pressed */
@ -41,7 +65,37 @@ namespace log_server
iedServer.SetLogStorage("GenericIO/LLN0$EventLog", statusLog);
iedServer.Start(10002);
long time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
int entryID = statusLog.AddEntry(time);
MmsValue value = new MmsValue(123);
byte[] blob = new byte[256];
int blobSize = value.EncodeMmsData(blob, 0, true);
bool restun = statusLog.AddEntryData(entryID, "GenericIO/GGIO1.SPCSO1$stVal", blob, blobSize, 0);
value.Dispose();
ulong unixTimeMs = (ulong)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
entryID = statusLog.AddEntry((long)unixTimeMs);
value = MmsValue.NewUtcTime(unixTimeMs);
blob = new byte[256];
blobSize = value.EncodeMmsData(blob, 0, true);
value.Dispose();
bool restun1 = statusLog.AddEntryData(entryID, "simpleIOGenerioIO/GPIO1$ST$SPCSO1$t", blob, blobSize, 0);
bool return3 = statusLog.GetEntries(0, DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), (LogEntryCallback)entryCallback, (LogEntryDataCallback)entryDataCallback, (System.IntPtr)null);
iedServer.Start(102);
if (iedServer.IsRunning())
{
@ -67,7 +121,11 @@ namespace log_server
stVal = !stVal;
iedServer.LockDataModel();
var ts = new Timestamp(DateTime.Now);
long unixSeconds = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
DateTime utcTime = DateTimeOffset.FromUnixTimeSeconds(unixSeconds).UtcDateTime;
var ts = new Timestamp(utcTime);
iedServer.UpdateTimestampAttributeValue(ggio1AnIn1T, ts);
iedServer.UpdateFloatAttributeValue(ggio1AnIn1magF, floatVal);
iedServer.UpdateTimestampAttributeValue(ggio1Spcso1T, ts);
@ -86,6 +144,7 @@ namespace log_server
}
iedServer.Destroy();
statusLog.Dispose();
}
}
}

@ -1,16 +1,6 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("log_server")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("log_server")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@ -21,16 +11,3 @@ using System.Runtime.InteropServices;
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("96124f40-d38e-499b-9968-674e0d32f933")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

@ -1,17 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{96124F40-D38E-499B-9968-674E0D32F933}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>log_server</RootNamespace>
<AssemblyName>log_server</AssemblyName>
<TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
@ -27,52 +17,22 @@
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<AssemblyTitle>log_server</AssemblyTitle>
<Product>log_server</Product>
<Copyright>Copyright © 2024</Copyright>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
<FileVersion>1.0.0.0</FileVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="model.cfg">
<None Update="model.cfg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.8.1">
@ -86,5 +46,4 @@
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("model_browsing")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("mzillgit")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,50 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{59B85486-F48D-4978-BD35-8F5C3A8288D4}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>model_browsing</RootNamespace>
<AssemblyName>model_browsing</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>model_browsing</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
<Compile Include="ModelBrowsing.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
</Project>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("report_new_dataset")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("mzillgit")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,50 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{71485F99-2976-45E6-B73D-4946E594C15C}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>report_new_dataset</RootNamespace>
<AssemblyName>report_new_dataset</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>report_new_dataset</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Main.cs" />
<Compile Include="AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
</Project>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle("reporting")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("mzillgit")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,28 +0,0 @@
namespace reporting.Properties {
// This class allows you to handle specific events on the settings class:
// The SettingChanging event is raised before a setting's value is changed.
// The PropertyChanged event is raised after a setting's value is changed.
// The SettingsLoaded event is raised after the setting values are loaded.
// The SettingsSaving event is raised before the setting values are saved.
internal sealed partial class Settings {
public Settings() {
// // To add event handlers for saving and changing settings, uncomment the lines below:
//
// this.SettingChanging += this.SettingChangingEventHandler;
//
// this.SettingsSaving += this.SettingsSavingEventHandler;
//
}
private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
// Add code to handle the SettingChangingEvent event here.
}
private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
// Add code to handle the SettingsSaving event here.
}
}
}

@ -1,12 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{9E29B4CE-EE5F-4CA6-85F6-5D1FF8B27BF8}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>reporting</RootNamespace>
<AssemblyName>reporting</AssemblyName>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
@ -22,43 +17,24 @@
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>reporting</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<UseVSHostingProcess>true</UseVSHostingProcess>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
<Compile Include="ReportingExample.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.0">
@ -82,7 +58,4 @@
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
</Project>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle ("server1")]
[assembly: AssemblyDescription ("")]
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("")]
[assembly: AssemblyProduct ("")]
[assembly: AssemblyCopyright ("mzillgit")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion ("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,52 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{9286D2AB-96ED-4631-AB3C-ED20FF5D6E6C}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>server1</RootNamespace>
<AssemblyName>server1</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>server1</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="model.cfg">
<None Update="model.cfg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>

@ -1,16 +1,6 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("server_goose_publisher")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("server_goose_publisher")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@ -21,16 +11,3 @@ using System.Runtime.InteropServices;
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("c14bb883-86b8-401c-b3d6-b655f55f3298")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

@ -1,63 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{C14BB883-86B8-401C-B3D6-B655F55F3298}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>server_goose_publisher</RootNamespace>
<AssemblyName>server_goose_publisher</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<AssemblyTitle>server_goose_publisher</AssemblyTitle>
<Product>server_goose_publisher</Product>
<Copyright>Copyright © 2021</Copyright>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
<FileVersion>1.0.0.0</FileVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="ServerExampleWithGoosePublisher.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="simpleIO_direct_control_goose.cfg">
<None Update="simpleIO_direct_control_goose.cfg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{c35d624e-5506-4560-8074-1728f1fa1a4d}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle ("sv_subscriber")]
[assembly: AssemblyDescription ("")]
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("")]
[assembly: AssemblyProduct ("")]
[assembly: AssemblyCopyright ("mzillgit")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion ("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,50 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{44651D2D-3252-4FD5-8B8B-5552DBE1B499}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>sv_subscriber</RootNamespace>
<AssemblyName>sv_subscriber</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>sv_subscriber</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
</Project>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle ("tls_client_example")]
[assembly: AssemblyDescription ("")]
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("")]
[assembly: AssemblyProduct ("")]
[assembly: AssemblyCopyright ("mzillgit")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion ("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,56 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{6734BF52-2D0D-476B-8EA2-C9C2D1D69B03}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>tls_client_example</RootNamespace>
<AssemblyName>tls_client_example</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>tls_client_example</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="client1.cer">
<None Update="client1.cer">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="client1-key.pem">
<None Update="client1-key.pem">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="root.cer">
<None Update="root.cer">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>

@ -1,24 +1,8 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following attributes.
// Change them to the values specific to your project.
[assembly: AssemblyTitle ("tls_server_example")]
[assembly: AssemblyDescription ("")]
[assembly: AssemblyConfiguration ("")]
[assembly: AssemblyCompany ("")]
[assembly: AssemblyProduct ("")]
[assembly: AssemblyCopyright ("mzillgit")]
[assembly: AssemblyTrademark ("")]
[assembly: AssemblyCulture ("")]
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion ("1.0.*")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.

@ -1,59 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{B63F7A81-1D3A-4F2F-A7C2-D6F77E5BD307}</ProjectGuid>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<RootNamespace>tls_server_example</RootNamespace>
<AssemblyName>tls_server_example</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<TargetFrameworkProfile />
<AssemblyTitle>tls_server_example</AssemblyTitle>
<Copyright>mzillgit</Copyright>
<AssemblyVersion>1.0.%2a</AssemblyVersion>
<Deterministic>false</Deterministic>
<Deterministic>false</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Externalconsole>true</Externalconsole>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<ProjectReference Include="..\IEC61850forCSharp\IEC61850.NET.csproj">
<Project>{C35D624E-5506-4560-8074-1728F1FA1A4D}</Project>
<Name>IEC61850.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="server-key.pem">
<None Update="server-key.pem">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="server.cer">
<None Update="server.cer">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="root.cer">
<None Update="root.cer">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="model.cfg">
<None Update="model.cfg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>

@ -6,7 +6,6 @@ add_subdirectory(server_example_control)
add_subdirectory(server_example_dynamic)
add_subdirectory(server_example_config_file)
add_subdirectory(server_example_complex_array)
add_subdirectory(server_example_CMV)
add_subdirectory(server_example_threadless)
add_subdirectory(server_example_61400_25)
add_subdirectory(server_example_setting_groups)

@ -15,7 +15,6 @@ EXAMPLE_DIRS += server_example_control
EXAMPLE_DIRS += server_example_config_file
EXAMPLE_DIRS += server_example_dynamic
EXAMPLE_DIRS += server_example_complex_array
EXAMPLE_DIRS += server_example_SMV
EXAMPLE_DIRS += server_example_61400_25
EXAMPLE_DIRS += server_example_threadless
EXAMPLE_DIRS += server_example_setting_groups

@ -1,21 +0,0 @@
include_directories(
.
)
set(server_example_SMV_SRCS
server_example_SMV.c
static_model.c
)
IF(MSVC)
set_source_files_properties(${server_example_SMV_SRCS}
PROPERTIES LANGUAGE CXX)
ENDIF(MSVC)
add_executable(server_example_SMV
${server_example_SMV_SRCS}
)
target_link_libraries(server_example_SMV
iec61850
)

@ -1,26 +0,0 @@
LIBIEC_HOME=../..
PROJECT_BINARY_NAME = server_example_SMV
PROJECT_SOURCES = server_example_SMV.c
PROJECT_SOURCES += static_model.c
PROJECT_ICD_FILE = sampleModel.cid
include $(LIBIEC_HOME)/make/target_system.mk
include $(LIBIEC_HOME)/make/stack_includes.mk
all: $(PROJECT_BINARY_NAME)
include $(LIBIEC_HOME)/make/common_targets.mk
model: $(PROJECT_ICD_FILE)
java -jar $(LIBIEC_HOME)/tools/model_generator/genmodel.jar $(PROJECT_ICD_FILE)
$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
$(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS)
clean:
rm -f $(PROJECT_BINARY_NAME)

@ -1,313 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<SCL xmlns="http://www.iec.ch/61850/2003/SCL">
<Header id="" nameStructure="IEDName">
</Header>
<Communication>
<SubNetwork name="subnetwork1" type="8-MMS">
<ConnectedAP iedName="test" apName="accessPoint1">
<Address>
<P type="IP">0.0.0.0</P>
<P type="IP-SUBNET">255.255.255.0</P>
<P type="IP-GATEWAY">192.168.2.1</P>
<P type="OSI-AP-Title">1,3,9999,33</P>
<P type="OSI-AE-Qualifier">33</P>
<P type="OSI-PSEL">00000001</P>
<P type="OSI-SSEL">0001</P>
<P type="OSI-TSEL">0001</P>
<P type="MMS-Port">102</P>
</Address>
</ConnectedAP>
</SubNetwork>
</Communication>
<IED name="test">
<Services>
<DynAssociation />
<GetDirectory />
<GetDataObjectDefinition />
<GetDataSetValue />
<DataSetDirectory />
<ReadWrite />
<GetCBValues />
<ConfLNs fixPrefix="true" fixLnInst="true" />
</Services>
<AccessPoint name="accessPoint1">
<Server>
<Authentication />
<LDevice inst="ComplexArray">
<LN0 lnClass="LLN0" lnType="LLN01" inst="">
<DOI name="Mod">
<DAI name="ctlModel">
<Val>status-only</Val>
</DAI>
</DOI>
</LN0>
<LN lnClass="LPHD" lnType="LPHD1" inst="1" prefix="">
<DOI name="PhyHealth">
<DAI name="stVal">
<Val>ok</Val>
</DAI>
</DOI>
</LN>
<LN lnClass="GGIO" lnType="GGIO1" inst="1" prefix="">
<DOI name="Mod">
<DAI name="stVal">
<Val>on</Val>
</DAI>
<DAI name="ctlModel">
<Val>status-only</Val>
</DAI>
</DOI>
<DOI name="Beh">
<DAI name="stVal">
<Val>on</Val>
</DAI>
</DOI>
<DOI name="Health">
<DAI name="stVal">
<Val>ok</Val>
</DAI>
</DOI>
<DOI name="SPCSO1">
<DAI name="ctlModel">
<Val>direct-with-normal-security</Val>
</DAI>
</DOI>
<DOI name="SPCSO2">
<DAI name="ctlModel">
<Val>direct-with-normal-security</Val>
</DAI>
</DOI>
<DOI name="SPCSO3">
<DAI name="ctlModel">
<Val>direct-with-normal-security</Val>
</DAI>
</DOI>
<DOI name="SPCSO4">
<DAI name="ctlModel">
<Val>direct-with-normal-security</Val>
</DAI>
</DOI>
</LN>
<LN lnClass="MHAI" lnType="MHAI1" inst="1" prefix="">
<DataSet name="TestMHAI">
<FCDA ldInst="ComplexArray" lnClass="MHAI" lnInst="1" doName="HA" fc="MX" daName="phsAHar(7)" ix="7"/>
<FCDA ldInst="ComplexArray" lnClass="MHAI" lnInst="1" doName="HA" fc="MX" daName="phsAHar(8)" ix="8"/>
<FCDA ldInst="ComplexArray" lnClass="MHAI" lnInst="1" doName="HA" fc="MX" daName="phsAHar(9).cVal" ix="9"/>
<FCDA ldInst="ComplexArray" lnClass="MHAI" lnInst="1" doName="HA" fc="MX" daName="phsAHar(10).cVal.mag" ix="10"/>
<FCDA ldInst="ComplexArray" lnClass="MHAI" lnInst="1" doName="HA" fc="MX" daName="phsAHar(11).cVal.mag.f" ix="11"/>
</DataSet>
<ReportControl name="MHAIRCB" confRev="1" datSet="TestMHAI" rptID="TestMHAI" buffered="false" intgPd="1000" bufTime="50">
<TrgOps period="true" />
<OptFields seqNum="true" timeStamp="true" dataSet="true" reasonCode="true" configRef="true" />
<RptEnabled max="1" />
</ReportControl>
<DOI name="HA">
<DAI name="numHar">
<Val>16</Val>
</DAI>
</DOI>
</LN>
</LDevice>
</Server>
</AccessPoint>
</IED>
<DataTypeTemplates>
<LNodeType id="LLN01" lnClass="LLN0">
<DO name="Mod" type="ENC_1_Mod" />
<DO name="Beh" type="ENS_1_Beh" />
<DO name="Health" type="ENS_2_Health" />
<DO name="NamPlt" type="LPL_1_NamPlt" />
</LNodeType>
<LNodeType id="LPHD1" lnClass="LPHD">
<DO name="PhyNam" type="DPL_1_PhyNam" />
<DO name="PhyHealth" type="ENS_2_Health" />
<DO name="Proxy" type="SPS_1_Proxy" />
</LNodeType>
<LNodeType id="GGIO1" lnClass="GGIO">
<DO name="Mod" type="ENC_1_Mod" />
<DO name="Beh" type="ENS_1_Beh" />
<DO name="Health" type="ENS_2_Health" />
<DO name="NamPlt" type="LPL_2_NamPlt" />
<DO name="AnIn1" type="MV_1_AnIn1" />
<DO name="AnIn2" type="MV_1_AnIn1" />
<DO name="AnIn3" type="MV_1_AnIn1" />
<DO name="AnIn4" type="MV_1_AnIn1" />
<DO name="SPCSO1" type="SPC_1_SPCSO1" />
<DO name="SPCSO2" type="SPC_2" />
<DO name="SPCSO3" type="SPC_2" />
<DO name="SPCSO4" type="SPC_2" />
<DO name="Ind1" type="SPS_1_Proxy" />
<DO name="Ind2" type="SPS_1_Proxy" />
<DO name="Ind3" type="SPS_1_Proxy" />
<DO name="Ind4" type="SPS_1_Proxy" />
</LNodeType>
<LNodeType id="MHAI1" lnClass="MHAI">
<DO name="HA" type="HWYE_1_HA" />
</LNodeType>
<DOType id="ENC_1_Mod" cdc="ENC">
<DA name="stVal" bType="Enum" type="Beh" fc="ST" dchg="true" />
<DA name="q" bType="Quality" fc="ST" qchg="true" />
<DA name="t" bType="Timestamp" fc="ST" />
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
</DOType>
<DOType id="ENS_1_Beh" cdc="ENS">
<DA name="stVal" bType="Enum" type="Beh" fc="ST" dchg="true" />
<DA name="q" bType="Quality" fc="ST" qchg="true" />
<DA name="t" bType="Timestamp" fc="ST" />
</DOType>
<DOType id="ENS_2_Health" cdc="ENS">
<DA name="stVal" bType="Enum" type="HealthKind" fc="ST" dchg="true" />
<DA name="q" bType="Quality" fc="ST" qchg="true" />
<DA name="t" bType="Timestamp" fc="ST" />
</DOType>
<DOType id="HWYE_1_HA" cdc="HWYE">
<SDO name="phsAHar" type="CMV_1_phsAHar" count="16" />
<DA name="numHar" bType="INT16U" fc="CF" dchg="true" />
<DA name="numCyc" bType="INT16U" fc="CF" dchg="true" />
<DA name="evalTm" bType="INT16U" fc="CF" dchg="true" />
<DA name="frequency" bType="FLOAT32" fc="CF" dchg="true" />
</DOType>
<DOType id="CMV_1_phsAHar" cdc="CMV">
<DA name="cVal" bType="Struct" type="Vector" fc="MX" dchg="true" dupd="true" />
<DA name="q" bType="Quality" fc="MX" qchg="true" />
<DA name="t" bType="Timestamp" fc="MX" />
</DOType>
<DOType id="LPL_1_NamPlt" cdc="LPL">
<DA name="vendor" bType="VisString255" fc="DC" />
<DA name="swRev" bType="VisString255" fc="DC" />
<DA name="d" bType="VisString255" fc="DC" />
<DA name="configRev" bType="VisString255" fc="DC" />
<DA name="ldNs" bType="VisString255" fc="EX" />
</DOType>
<DOType id="LPL_2_NamPlt" cdc="LPL">
<DA name="vendor" bType="VisString255" fc="DC" />
<DA name="swRev" bType="VisString255" fc="DC" />
<DA name="d" bType="VisString255" fc="DC" />
<DA name="dU" fc="DC" bType="Unicode255"/>
</DOType>
<DOType id="DPL_1_PhyNam" cdc="DPL">
<DA name="vendor" bType="VisString255" fc="DC" />
</DOType>
<DOType id="SPS_1_Proxy" cdc="SPS">
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
<DA name="q" bType="Quality" fc="ST" qchg="true" />
<DA name="t" bType="Timestamp" fc="ST" />
</DOType>
<DOType id="MV_1_AnIn1" cdc="MV">
<DA name="mag" type="AnalogueValue_1" bType="Struct" fc="MX" dchg="true" />
<DA name="q" bType="Quality" fc="MX" qchg="true" />
<DA name="t" bType="Timestamp" fc="MX" />
</DOType>
<DOType id="SPC_1_SPCSO1" cdc="SPC">
<DA name="origin" fc="ST" type="Originator_1" bType="Struct" />
<DA name="ctlNum" fc="ST" bType="INT8U" />
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
<DA name="q" bType="Quality" fc="ST" qchg="true" />
<DA name="t" bType="Timestamp" fc="ST" />
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
<DA name="Oper" type="SPCOperate_1" bType="Struct" fc="CO" />
</DOType>
<DOType id="SPC_2" cdc="SPC">
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
<DA name="q" bType="Quality" fc="ST" qchg="true" />
<DA name="Oper" type="SPCOperate_1" bType="Struct" fc="CO" />
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
<DA name="t" bType="Timestamp" fc="ST" />
</DOType>
<DAType id="Vector">
<BDA name="mag" bType="Struct" type="AnalogueValue_1" />
<BDA name="ang" bType="Struct" type="AnalogueValue_1" />
</DAType>
<DAType id="AnalogueValue_1">
<BDA name="f" bType="FLOAT32" />
</DAType>
<DAType id="Originator_1">
<BDA name="orCat" type="OrCat" bType="Enum" />
<BDA name="orIdent" bType="Octet64" />
</DAType>
<DAType id="SPCOperate_1">
<BDA name="ctlVal" bType="BOOLEAN" />
<BDA name="origin" type="Originator_1" bType="Struct" />
<BDA name="ctlNum" bType="INT8U" />
<BDA name="T" bType="Timestamp" />
<BDA name="Test" bType="BOOLEAN" />
<BDA name="Check" bType="Check" />
</DAType>
<EnumType id="Beh">
<EnumVal ord="1">on</EnumVal>
<EnumVal ord="2">blocked</EnumVal>
<EnumVal ord="3">test</EnumVal>
<EnumVal ord="4">test/blocked</EnumVal>
<EnumVal ord="5">off</EnumVal>
</EnumType>
<EnumType id="HealthKind">
<EnumVal ord="1">ok</EnumVal>
<EnumVal ord="2">warning</EnumVal>
<EnumVal ord="3">alarm</EnumVal>
</EnumType>
<EnumType id="CtlModels">
<EnumVal ord="0">status-only</EnumVal>
<EnumVal ord="1">direct-with-normal-security</EnumVal>
<EnumVal ord="2">sbo-with-normal-security</EnumVal>
<EnumVal ord="3">direct-with-enhanced-security</EnumVal>
<EnumVal ord="4">sbo-with-enhanced-security</EnumVal>
</EnumType>
<EnumType id="OrCat">
<EnumVal ord="0">not-supported</EnumVal>
<EnumVal ord="1">bay-control</EnumVal>
<EnumVal ord="2">station-control</EnumVal>
<EnumVal ord="3">remote-control</EnumVal>
<EnumVal ord="4">automatic-bay</EnumVal>
<EnumVal ord="5">automatic-station</EnumVal>
<EnumVal ord="6">automatic-remote</EnumVal>
<EnumVal ord="7">maintenance</EnumVal>
<EnumVal ord="8">process</EnumVal>
</EnumType>
</DataTypeTemplates>
</SCL>

@ -1,193 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<SCL xmlns="http://www.iec.ch/61850/2003/SCL">
<Header id="" />
<Communication>
<SubNetwork name="Subnetwork">
<ConnectedAP iedName="SampleIED" apName="accessPoint1">
<GSE cbName="NewGSEControl" ldInst="Device1">
<Address>
<P type="MAC-Address">01-0C-CD-04-00-01</P>
<P type="APPID">4000</P>
<P type="VLAN-PRIORITY">4</P>
<P type="VLAN-ID">123</P>
</Address>
</GSE>
</ConnectedAP>
</SubNetwork>
</Communication>
<IED name="SampleIED">
<Services>
<DynAssociation />
<GetDirectory />
<GetDataObjectDefinition />
<GetDataSetValue />
<DataSetDirectory />
<ReadWrite />
<GetCBValues />
<ConfLNs fixPrefix="true" fixLnInst="true" />
<FileHandling />
<TimerActivatedControl />
</Services>
<AccessPoint name="accessPoint1">
<Server>
<Authentication />
<LDevice inst="Device1">
<LN0 lnClass="LLN0" lnType="LLN01" inst="">
<DataSet name="dataset1" desc="">
<FCDA ldInst="Device1" lnClass="LLN0" fc="ST" doName="Mod" daName="q" />
<FCDA ldInst="Device1" lnClass="MMXU" fc="ST" lnInst="1" doName="Mod" daName="q" />
<FCDA ldInst="Device1" lnClass="MMXU" fc="CF" lnInst="1" doName="Mod" daName="ctlModel" />
</DataSet>
<ReportControl name="LLN0_Events_BuffRep" rptID="LLN0$RP$brcbEV1" datSet="dataset1" confRev="1" buffered="true" desc="Events brcb buffered report" intgPd="900000" bufTime="50">
<TrgOps dchg="true" qchg="false" dupd="false" period="true" />
<OptFields seqNum="true" timeStamp="true" dataSet="true" reasonCode="true" dataRef="false" entryID="true" configRef="true" bufOvfl="true" />
<RptEnabled max="1" />
</ReportControl>
<GSEControl name="NewGSEControl" appID="NewGSEControl" />
<DOI name="Mod">
<DAI name="ctlModel">
<Val>status-only</Val>
</DAI>
</DOI>
</LN0>
<LN lnClass="LPHD" lnType="LPHD1" inst="1" prefix="" />
<LN lnClass="DGEN" lnType="DGEN1" inst="1" prefix="">
<DOI name="Mod">
<DAI name="ctlModel">
<Val>status-only</Val>
</DAI>
</DOI>
</LN>
<LN lnClass="DSCH" lnType="DSCH1" inst="1" prefix="">
<DOI name="Mod">
<DAI name="ctlModel">
<Val>status-only</Val>
</DAI>
</DOI>
</LN>
<LN lnClass="MMXU" lnType="MMXU1" inst="1" prefix="">
<DOI name="Mod">
<DAI name="ctlModel">
<Val>status-only</Val>
</DAI>
</DOI>
</LN>
<LN lnClass="MMXU" lnType="MMXU2" inst="2" prefix="">
<DOI name="Mod">
<DAI name="ctlModel">
<Val>status-only</Val>
</DAI>
</DOI>
</LN>
</LDevice>
</Server>
</AccessPoint>
</IED>
<DataTypeTemplates>
<LNodeType id="LLN01" lnClass="LLN0">
<DO name="Mod" type="INC_1_Mod" />
<DO name="Beh" type="INS_1_Beh" />
<DO name="Health" type="INS_1_Beh" />
<DO name="NamPlt" type="LPL_1_NamPlt" />
</LNodeType>
<LNodeType id="LPHD1" lnClass="LPHD">
<DO name="PhyNam" type="DPL_1_PhyNam" />
<DO name="PhyHealth" type="INS_1_Beh" />
<DO name="Proxy" type="SPS_1_Proxy" />
</LNodeType>
<LNodeType id="MMXU2" lnClass="MMXU" desc="Measurement">
<DO name="Mod" type="INC_1_Mod" />
<DO name="Beh" type="INS_1_Beh" />
<DO name="Health" type="INS_1_Beh" />
<DO name="NamPlt" type="LPL_2_NamPlt" />
<DO name="TotW" type="MV_1_TotWh" />
</LNodeType>
<LNodeType id="DGEN1" lnClass="DGEN" desc="DER unit generator">
<DO name="Mod" type="ENC_1_Mod" />
<DO name="Beh" type="ENS_1_Beh" />
<DO name="Health" type="ENS_1_Beh" />
<DO name="NamPlt" type="LPL_2_NamPlt" />
<DO name="OpTmh" type="INS_1_Beh" />
<DO name="GnOpSt" type="ENS_1_Beh" />
<DO name="OpTmsRs" type="INS_1_Beh" />
<DO name="TotWh" type="MV_1_TotWh" />
</LNodeType>
<LNodeType id="DSCH1" lnClass="DSCH" desc="DER energy and/or ancillary services schedule">
<DO name="Mod" type="ENC_1_Mod" />
<DO name="Beh" type="ENS_1_Beh" />
<DO name="Health" type="ENS_1_Beh" />
<DO name="NamPlt" type="LPL_2_NamPlt" />
<DO name="SchdSt" type="INS_1_Beh" />
<DO name="SchdId" type="ING_1_SchdId" />
<DO name="SchdCat" type="ING_1_SchdId" />
<DO name="SchdTyp" type="ING_1_SchdId" />
<DO name="SchdAbsTm" type="SCA_1_SchdAbsTm" />
</LNodeType>
<LNodeType id="MMXU1" lnClass="MMXU" desc="Measurement">
<DO name="Mod" type="INC_1_Mod" />
<DO name="Beh" type="INS_1_Beh" />
<DO name="Health" type="INS_1_Beh" />
<DO name="NamPlt" type="LPL_2_NamPlt" />
</LNodeType>
<DOType id="INC_1_Mod" cdc="INC">
<DA name="q" bType="Quality" fc="ST" qchg="true" />
<DA name="t" bType="Timestamp" fc="ST" />
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
</DOType>
<DOType id="INS_1_Beh" cdc="INS">
<DA name="stVal" bType="INT32" fc="ST" dchg="true" />
<DA name="q" bType="Quality" fc="ST" qchg="true" />
<DA name="t" bType="Timestamp" fc="ST" />
</DOType>
<DOType id="LPL_1_NamPlt" cdc="LPL">
<DA name="vendor" bType="VisString255" fc="DC" />
<DA name="swRev" bType="VisString255" fc="DC" />
<DA name="d" bType="VisString255" fc="DC" />
<DA name="configRev" bType="VisString255" fc="DC" />
<DA name="ldNs" bType="VisString255" fc="EX" />
</DOType>
<DOType id="DPL_1_PhyNam" cdc="DPL">
<DA name="vendor" bType="VisString255" fc="DC" />
</DOType>
<DOType id="SPS_1_Proxy" cdc="SPS">
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
<DA name="q" bType="Quality" fc="ST" qchg="true" />
<DA name="t" bType="Timestamp" fc="ST" />
</DOType>
<DOType id="LPL_2_NamPlt" cdc="LPL">
<DA name="vendor" bType="VisString255" fc="DC" />
<DA name="swRev" bType="VisString255" fc="DC" />
<DA name="d" bType="VisString255" fc="DC" />
</DOType>
<DOType id="ENC_1_Mod" cdc="ENC">
<DA name="q" bType="Quality" fc="ST" qchg="true" />
<DA name="t" bType="Timestamp" fc="ST" />
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
</DOType>
<DOType id="ENS_1_Beh" cdc="ENS">
<DA name="stVal" bType="INT32" fc="ST" dchg="true" />
<DA name="q" bType="Quality" fc="ST" qchg="true" />
<DA name="t" bType="Timestamp" fc="ST" />
</DOType>
<DOType id="MV_1_TotWh" cdc="MV">
<DA name="mag" type="AnalogueValue_1" bType="Struct" fc="MX" dchg="true" />
<DA name="q" bType="Quality" fc="MX" qchg="true" />
<DA name="t" bType="Timestamp" fc="MX" />
</DOType>
<DOType id="SCA_1_SchdAbsTm" cdc="SCA">
<DA name="val" bType="FLOAT32" count="255" fc="SP" dchg="true" />
<DA name="time" bType="Timestamp" count="255" fc="SP" dchg="true" />
</DOType>
<DOType id="ING_1_SchdId" cdc="ING" />
<DAType id="AnalogueValue_1">
<BDA name="f" bType="FLOAT32" />
</DAType>
<EnumType id="CtlModels">
<EnumVal ord="0">status-only</EnumVal>
<EnumVal ord="1">direct-with-normal-security</EnumVal>
<EnumVal ord="2">sbo-with-normal-security</EnumVal>
<EnumVal ord="3">direct-with-enhanced-security</EnumVal>
<EnumVal ord="4">sbo-with-enhanced-security</EnumVal>
</EnumType>
</DataTypeTemplates>
</SCL>

@ -1,136 +0,0 @@
/*
* server_example_SMV.c
*
* This example shows how to handle complex arrays (arrays of data objects).
*/
#include "iec61850_server.h"
#include "hal_thread.h"
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include "static_model.h"
#include <assert.h>
static int running = 0;
static void
sigint_handler(int signalId)
{
running = 0;
}
static void
updateCMVArrayElement(IedServer server, DataObject* phsAHar, int idx, float magnitude, float angle, Quality quality, Timestamp timestamp)
{
DataObject* phsAHarArrayElem = (DataObject*)ModelNode_getChildWithIdx((ModelNode*)phsAHar, idx);
if (phsAHarArrayElem) {
DataAttribute* mag = (DataAttribute*)ModelNode_getChild((ModelNode*)phsAHarArrayElem, "cVal.mag.f");
DataAttribute* ang = (DataAttribute*)ModelNode_getChild((ModelNode*)phsAHarArrayElem, "cVal.ang.f");
DataAttribute* q = (DataAttribute*)ModelNode_getChild((ModelNode*)phsAHarArrayElem, "q");
DataAttribute* t = (DataAttribute*)ModelNode_getChild((ModelNode*)phsAHarArrayElem, "t");
if (mag && ang && q && t) {
IedServer_updateQuality(server, q, quality);
IedServer_updateTimestampAttributeValue(server, t, &timestamp);
IedServer_updateFloatAttributeValue(server, mag, magnitude);
IedServer_updateFloatAttributeValue(server, ang, angle);
}
else {
printf("one of mag, ang, q, t not found\n");
}
}
else {
printf("Element with index %i not found\n", idx);
}
}
int
main(int argc, char **argv)
{
int tcpPort = 102;
if (argc > 1) {
tcpPort = atoi(argv[1]);
}
IedServer iedServer = IedServer_create(&iedModel);
LogicalDevice* logicalDevice = iedModel.firstChild;
LogicalNode* logicalNode = LogicalDevice_getLogicalNode(logicalDevice, "666LLN051");
SVControlBlock* sMVcontrolBlock =
(SVControlBlock*)IedModel_getSVControlBlock(&iedModel, logicalNode, "NewSMVControl");
///* Get access to the MHAI1.HA data object handle - for static and dynamic model*/
//DataObject* mhai1_ha_phsAHar = (DataObject*)
// IedModel_getModelNodeByShortObjectReference(&iedModel, "ComplexArray/MHAI1.HA.phsAHar");
///* assuming the array has 16 elements */
//float mag = 200.f;
//float angle = 0.01f;
/*Quality quality = QUALITY_VALIDITY_GOOD;
Timestamp timestamp;
Timestamp_setTimeInMilliseconds(&timestamp, Hal_getTimeInMs());
int i;
for (i = 0; i < 16; i++) {
updateCMVArrayElement(iedServer, mhai1_ha_phsAHar, i, mag, angle, quality, timestamp);
mag += 1.f;
angle += 0.01f;
}*/
/* MMS server will be instructed to start listening to client connections. */
IedServer_start(iedServer, tcpPort);
if (!IedServer_isRunning(iedServer)) {
printf("Starting server failed! Exit.\n");
IedServer_destroy(iedServer);
exit(-1);
}
running = 1;
signal(SIGINT, sigint_handler);
int counter = 0;
while (running) {
Thread_sleep(1000);
//Timestamp_setTimeInMilliseconds(&timestamp, Hal_getTimeInMs());
IedServer_lockDataModel(iedServer);
/*for (i = 0; i < 16; i++) {
updateCMVArrayElement(iedServer, mhai1_ha_phsAHar, i, mag, angle, quality, timestamp);
mag += 0.1f;
angle += 0.05f;
}*/
IedServer_unlockDataModel(iedServer);
//if (counter == 10) {
// /* Now a problem occurs - measurements are invalid */
// quality = QUALITY_VALIDITY_INVALID | QUALITY_DETAIL_FAILURE;
//}
//counter++;
}
/* stop MMS server - close TCP server socket and all client sockets */
IedServer_stop(iedServer);
/* Cleanup - free all resources */
IedServer_destroy(iedServer);
return 0;
} /* main() */

@ -1,371 +0,0 @@
/*
* static_model.c
*
* automatically generated from ICDFiles/simpleIO_smv.icd
*/
#include "static_model.h"
static void initializeValues();
LogicalDevice iedModel_GenericIO = {
LogicalDeviceModelType,
"GenericIO",
(ModelNode*) &iedModel,
NULL,
(ModelNode*) &iedModel_GenericIO_666LLN051,
NULL
};
LogicalNode iedModel_GenericIO_666LLN051 = {
LogicalNodeModelType,
"666LLN051",
(ModelNode*) &iedModel_GenericIO,
NULL,
(ModelNode*) &iedModel_GenericIO_666LLN051_Mod
};
DataObject iedModel_GenericIO_666LLN051_Mod = {
DataObjectModelType,
"Mod",
(ModelNode*) &iedModel_GenericIO_666LLN051,
(ModelNode*) &iedModel_GenericIO_666LLN051_Beh,
(ModelNode*) &iedModel_GenericIO_666LLN051_Mod_stVal,
0,
-1
};
DataAttribute iedModel_GenericIO_666LLN051_Mod_stVal = {
DataAttributeModelType,
"stVal",
(ModelNode*) &iedModel_GenericIO_666LLN051_Mod,
(ModelNode*) &iedModel_GenericIO_666LLN051_Mod_q,
NULL,
0,
-1,
IEC61850_FC_ST,
IEC61850_ENUMERATED,
0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE + TRG_OPT_QUALITY_CHANGED,
NULL,
0
};
DataAttribute iedModel_GenericIO_666LLN051_Mod_q = {
DataAttributeModelType,
"q",
(ModelNode*) &iedModel_GenericIO_666LLN051_Mod,
(ModelNode*) &iedModel_GenericIO_666LLN051_Mod_t,
NULL,
0,
-1,
IEC61850_FC_ST,
IEC61850_QUALITY,
0,
NULL,
0
};
DataAttribute iedModel_GenericIO_666LLN051_Mod_t = {
DataAttributeModelType,
"t",
(ModelNode*) &iedModel_GenericIO_666LLN051_Mod,
(ModelNode*) &iedModel_GenericIO_666LLN051_Mod_ctlModel,
NULL,
0,
-1,
IEC61850_FC_ST,
IEC61850_TIMESTAMP,
0,
NULL,
0
};
DataAttribute iedModel_GenericIO_666LLN051_Mod_ctlModel = {
DataAttributeModelType,
"ctlModel",
(ModelNode*) &iedModel_GenericIO_666LLN051_Mod,
NULL,
NULL,
0,
-1,
IEC61850_FC_CF,
IEC61850_ENUMERATED,
0,
NULL,
0
};
DataObject iedModel_GenericIO_666LLN051_Beh = {
DataObjectModelType,
"Beh",
(ModelNode*) &iedModel_GenericIO_666LLN051,
(ModelNode*) &iedModel_GenericIO_666LLN051_Health,
(ModelNode*) &iedModel_GenericIO_666LLN051_Beh_stVal,
0,
-1
};
DataAttribute iedModel_GenericIO_666LLN051_Beh_stVal = {
DataAttributeModelType,
"stVal",
(ModelNode*) &iedModel_GenericIO_666LLN051_Beh,
(ModelNode*) &iedModel_GenericIO_666LLN051_Beh_q,
NULL,
0,
-1,
IEC61850_FC_ST,
IEC61850_ENUMERATED,
0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE + TRG_OPT_QUALITY_CHANGED,
NULL,
0
};
DataAttribute iedModel_GenericIO_666LLN051_Beh_q = {
DataAttributeModelType,
"q",
(ModelNode*) &iedModel_GenericIO_666LLN051_Beh,
(ModelNode*) &iedModel_GenericIO_666LLN051_Beh_t,
NULL,
0,
-1,
IEC61850_FC_ST,
IEC61850_QUALITY,
0,
NULL,
0
};
DataAttribute iedModel_GenericIO_666LLN051_Beh_t = {
DataAttributeModelType,
"t",
(ModelNode*) &iedModel_GenericIO_666LLN051_Beh,
NULL,
NULL,
0,
-1,
IEC61850_FC_ST,
IEC61850_TIMESTAMP,
0,
NULL,
0
};
DataObject iedModel_GenericIO_666LLN051_Health = {
DataObjectModelType,
"Health",
(ModelNode*) &iedModel_GenericIO_666LLN051,
(ModelNode*) &iedModel_GenericIO_666LLN051_NamPlt,
(ModelNode*) &iedModel_GenericIO_666LLN051_Health_stVal,
0,
-1
};
DataAttribute iedModel_GenericIO_666LLN051_Health_stVal = {
DataAttributeModelType,
"stVal",
(ModelNode*) &iedModel_GenericIO_666LLN051_Health,
(ModelNode*) &iedModel_GenericIO_666LLN051_Health_q,
NULL,
0,
-1,
IEC61850_FC_ST,
IEC61850_ENUMERATED,
0 + TRG_OPT_DATA_CHANGED + TRG_OPT_DATA_UPDATE + TRG_OPT_QUALITY_CHANGED,
NULL,
0
};
DataAttribute iedModel_GenericIO_666LLN051_Health_q = {
DataAttributeModelType,
"q",
(ModelNode*) &iedModel_GenericIO_666LLN051_Health,
(ModelNode*) &iedModel_GenericIO_666LLN051_Health_t,
NULL,
0,
-1,
IEC61850_FC_ST,
IEC61850_QUALITY,
0,
NULL,
0
};
DataAttribute iedModel_GenericIO_666LLN051_Health_t = {
DataAttributeModelType,
"t",
(ModelNode*) &iedModel_GenericIO_666LLN051_Health,
NULL,
NULL,
0,
-1,
IEC61850_FC_ST,
IEC61850_TIMESTAMP,
0,
NULL,
0
};
DataObject iedModel_GenericIO_666LLN051_NamPlt = {
DataObjectModelType,
"NamPlt",
(ModelNode*) &iedModel_GenericIO_666LLN051,
NULL,
(ModelNode*) &iedModel_GenericIO_666LLN051_NamPlt_vendor,
0,
-1
};
DataAttribute iedModel_GenericIO_666LLN051_NamPlt_vendor = {
DataAttributeModelType,
"vendor",
(ModelNode*) &iedModel_GenericIO_666LLN051_NamPlt,
(ModelNode*) &iedModel_GenericIO_666LLN051_NamPlt_swRev,
NULL,
0,
-1,
IEC61850_FC_DC,
IEC61850_VISIBLE_STRING_255,
0,
NULL,
0
};
DataAttribute iedModel_GenericIO_666LLN051_NamPlt_swRev = {
DataAttributeModelType,
"swRev",
(ModelNode*) &iedModel_GenericIO_666LLN051_NamPlt,
(ModelNode*) &iedModel_GenericIO_666LLN051_NamPlt_d,
NULL,
0,
-1,
IEC61850_FC_DC,
IEC61850_VISIBLE_STRING_255,
0,
NULL,
0
};
DataAttribute iedModel_GenericIO_666LLN051_NamPlt_d = {
DataAttributeModelType,
"d",
(ModelNode*) &iedModel_GenericIO_666LLN051_NamPlt,
(ModelNode*) &iedModel_GenericIO_666LLN051_NamPlt_configRev,
NULL,
0,
-1,
IEC61850_FC_DC,
IEC61850_VISIBLE_STRING_255,
0,
NULL,
0
};
DataAttribute iedModel_GenericIO_666LLN051_NamPlt_configRev = {
DataAttributeModelType,
"configRev",
(ModelNode*) &iedModel_GenericIO_666LLN051_NamPlt,
(ModelNode*) &iedModel_GenericIO_666LLN051_NamPlt_ldNs,
NULL,
0,
-1,
IEC61850_FC_DC,
IEC61850_VISIBLE_STRING_255,
0,
NULL,
0
};
DataAttribute iedModel_GenericIO_666LLN051_NamPlt_ldNs = {
DataAttributeModelType,
"ldNs",
(ModelNode*) &iedModel_GenericIO_666LLN051_NamPlt,
NULL,
NULL,
0,
-1,
IEC61850_FC_EX,
IEC61850_VISIBLE_STRING_255,
0,
NULL,
0
};
extern SettingGroupControlBlock iedModel_GenericIO_666LLN051_sgcb;
SettingGroupControlBlock iedModel_GenericIO_666LLN051_sgcb = {
&iedModel_GenericIO_666LLN051,
98,
77,
0,
false,
0,
0,
NULL,
};
extern SVControlBlock iedModel_GenericIO_666LLN051_smv0;
extern SVControlBlock iedModel_GenericIO_666LLN051_smv1;
static PhyComAddress iedModel_GenericIO_666LLN051_smv0_address = {
4,
123,
4000,
{0x1, 0xc, 0xcd, 0x4, 0x0, 0x1}
};
SVControlBlock iedModel_GenericIO_666LLN051_smv0 = {
&iedModel_GenericIO_666LLN051,
"NewSMVControl",
"666655dd",
"Events2",
23,
1,
555,
5,
&iedModel_GenericIO_666LLN051_smv0_address,
true,
98,
&iedModel_GenericIO_666LLN051_smv1
};
static PhyComAddress iedModel_GenericIO_666LLN051_smv1_address = {
4,
123,
4000,
{0x1, 0xc, 0xcd, 0x4, 0x0, 0x1}
};
SVControlBlock iedModel_GenericIO_666LLN051_smv1 = {
&iedModel_GenericIO_666LLN051,
"NewSMVControl1",
NULL,
"Events2",
0,
NULL,
-1,
-1,
&iedModel_GenericIO_666LLN051_smv1_address,
false,
-1,
NULL
};
IedModel iedModel = {
"simpleIO",
&iedModel_GenericIO,
NULL,
NULL,
NULL,
&iedModel_GenericIO_666LLN051_smv0,
&iedModel_GenericIO_666LLN051_sgcb,
NULL,
NULL,
initializeValues
};
static void
initializeValues()
{
iedModel_GenericIO_666LLN051_Mod_stVal.mmsValue = MmsValue_newIntegerFromInt32(1);
iedModel_GenericIO_666LLN051_Mod_ctlModel.mmsValue = MmsValue_newIntegerFromInt32(0);
iedModel_GenericIO_666LLN051_Beh_stVal.mmsValue = MmsValue_newIntegerFromInt32(1);
iedModel_GenericIO_666LLN051_Health_stVal.mmsValue = MmsValue_newIntegerFromInt32(1);
iedModel_GenericIO_666LLN051_NamPlt_vendor.mmsValue = MmsValue_newVisibleString("MZ Automation");
iedModel_GenericIO_666LLN051_NamPlt_swRev.mmsValue = MmsValue_newVisibleString("1.3.0");
iedModel_GenericIO_666LLN051_NamPlt_d.mmsValue = MmsValue_newVisibleString("libiec61850 server example");
}

@ -1,62 +0,0 @@
/*
* static_model.h
*
* automatically generated from ICDFiles/simpleIO_smv.icd
*/
#ifndef STATIC_MODEL_H_
#define STATIC_MODEL_H_
#include <stdlib.h>
#include "iec61850_model.h"
extern IedModel iedModel;
extern LogicalDevice iedModel_GenericIO;
extern LogicalNode iedModel_GenericIO_666LLN051;
extern DataObject iedModel_GenericIO_666LLN051_Mod;
extern DataAttribute iedModel_GenericIO_666LLN051_Mod_stVal;
extern DataAttribute iedModel_GenericIO_666LLN051_Mod_q;
extern DataAttribute iedModel_GenericIO_666LLN051_Mod_t;
extern DataAttribute iedModel_GenericIO_666LLN051_Mod_ctlModel;
extern DataObject iedModel_GenericIO_666LLN051_Beh;
extern DataAttribute iedModel_GenericIO_666LLN051_Beh_stVal;
extern DataAttribute iedModel_GenericIO_666LLN051_Beh_q;
extern DataAttribute iedModel_GenericIO_666LLN051_Beh_t;
extern DataObject iedModel_GenericIO_666LLN051_Health;
extern DataAttribute iedModel_GenericIO_666LLN051_Health_stVal;
extern DataAttribute iedModel_GenericIO_666LLN051_Health_q;
extern DataAttribute iedModel_GenericIO_666LLN051_Health_t;
extern DataObject iedModel_GenericIO_666LLN051_NamPlt;
extern DataAttribute iedModel_GenericIO_666LLN051_NamPlt_vendor;
extern DataAttribute iedModel_GenericIO_666LLN051_NamPlt_swRev;
extern DataAttribute iedModel_GenericIO_666LLN051_NamPlt_d;
extern DataAttribute iedModel_GenericIO_666LLN051_NamPlt_configRev;
extern DataAttribute iedModel_GenericIO_666LLN051_NamPlt_ldNs;
#define IEDMODEL_GenericIO (&iedModel_GenericIO)
#define IEDMODEL_GenericIO_666LLN051 (&iedModel_GenericIO_666LLN051)
#define IEDMODEL_GenericIO_666LLN051_Mod (&iedModel_GenericIO_666LLN051_Mod)
#define IEDMODEL_GenericIO_666LLN051_Mod_stVal (&iedModel_GenericIO_666LLN051_Mod_stVal)
#define IEDMODEL_GenericIO_666LLN051_Mod_q (&iedModel_GenericIO_666LLN051_Mod_q)
#define IEDMODEL_GenericIO_666LLN051_Mod_t (&iedModel_GenericIO_666LLN051_Mod_t)
#define IEDMODEL_GenericIO_666LLN051_Mod_ctlModel (&iedModel_GenericIO_666LLN051_Mod_ctlModel)
#define IEDMODEL_GenericIO_666LLN051_Beh (&iedModel_GenericIO_666LLN051_Beh)
#define IEDMODEL_GenericIO_666LLN051_Beh_stVal (&iedModel_GenericIO_666LLN051_Beh_stVal)
#define IEDMODEL_GenericIO_666LLN051_Beh_q (&iedModel_GenericIO_666LLN051_Beh_q)
#define IEDMODEL_GenericIO_666LLN051_Beh_t (&iedModel_GenericIO_666LLN051_Beh_t)
#define IEDMODEL_GenericIO_666LLN051_Health (&iedModel_GenericIO_666LLN051_Health)
#define IEDMODEL_GenericIO_666LLN051_Health_stVal (&iedModel_GenericIO_666LLN051_Health_stVal)
#define IEDMODEL_GenericIO_666LLN051_Health_q (&iedModel_GenericIO_666LLN051_Health_q)
#define IEDMODEL_GenericIO_666LLN051_Health_t (&iedModel_GenericIO_666LLN051_Health_t)
#define IEDMODEL_GenericIO_666LLN051_NamPlt (&iedModel_GenericIO_666LLN051_NamPlt)
#define IEDMODEL_GenericIO_666LLN051_NamPlt_vendor (&iedModel_GenericIO_666LLN051_NamPlt_vendor)
#define IEDMODEL_GenericIO_666LLN051_NamPlt_swRev (&iedModel_GenericIO_666LLN051_NamPlt_swRev)
#define IEDMODEL_GenericIO_666LLN051_NamPlt_d (&iedModel_GenericIO_666LLN051_NamPlt_d)
#define IEDMODEL_GenericIO_666LLN051_NamPlt_configRev (&iedModel_GenericIO_666LLN051_NamPlt_configRev)
#define IEDMODEL_GenericIO_666LLN051_NamPlt_ldNs (&iedModel_GenericIO_666LLN051_NamPlt_ldNs)
#endif /* STATIC_MODEL_H_ */

File diff suppressed because it is too large Load Diff

@ -1,567 +0,0 @@
/*
* static_model.h
*
* automatically generated from mhai_array.cid
*/
#ifndef STATIC_MODEL_H_
#define STATIC_MODEL_H_
#include <stdlib.h>
#include "iec61850_model.h"
extern IedModel iedModel;
extern LogicalDevice iedModel_ComplexArray;
extern LogicalNode iedModel_ComplexArray_LLN0;
extern DataObject iedModel_ComplexArray_LLN0_Mod;
extern DataAttribute iedModel_ComplexArray_LLN0_Mod_stVal;
extern DataAttribute iedModel_ComplexArray_LLN0_Mod_q;
extern DataAttribute iedModel_ComplexArray_LLN0_Mod_t;
extern DataAttribute iedModel_ComplexArray_LLN0_Mod_ctlModel;
extern DataObject iedModel_ComplexArray_LLN0_Beh;
extern DataAttribute iedModel_ComplexArray_LLN0_Beh_stVal;
extern DataAttribute iedModel_ComplexArray_LLN0_Beh_q;
extern DataAttribute iedModel_ComplexArray_LLN0_Beh_t;
extern DataObject iedModel_ComplexArray_LLN0_Health;
extern DataAttribute iedModel_ComplexArray_LLN0_Health_stVal;
extern DataAttribute iedModel_ComplexArray_LLN0_Health_q;
extern DataAttribute iedModel_ComplexArray_LLN0_Health_t;
extern DataObject iedModel_ComplexArray_LLN0_NamPlt;
extern DataAttribute iedModel_ComplexArray_LLN0_NamPlt_vendor;
extern DataAttribute iedModel_ComplexArray_LLN0_NamPlt_swRev;
extern DataAttribute iedModel_ComplexArray_LLN0_NamPlt_d;
extern DataAttribute iedModel_ComplexArray_LLN0_NamPlt_configRev;
extern DataAttribute iedModel_ComplexArray_LLN0_NamPlt_ldNs;
extern LogicalNode iedModel_ComplexArray_LPHD1;
extern DataObject iedModel_ComplexArray_LPHD1_PhyNam;
extern DataAttribute iedModel_ComplexArray_LPHD1_PhyNam_vendor;
extern DataObject iedModel_ComplexArray_LPHD1_PhyHealth;
extern DataAttribute iedModel_ComplexArray_LPHD1_PhyHealth_stVal;
extern DataAttribute iedModel_ComplexArray_LPHD1_PhyHealth_q;
extern DataAttribute iedModel_ComplexArray_LPHD1_PhyHealth_t;
extern DataObject iedModel_ComplexArray_LPHD1_Proxy;
extern DataAttribute iedModel_ComplexArray_LPHD1_Proxy_stVal;
extern DataAttribute iedModel_ComplexArray_LPHD1_Proxy_q;
extern DataAttribute iedModel_ComplexArray_LPHD1_Proxy_t;
extern LogicalNode iedModel_ComplexArray_GGIO1;
extern DataObject iedModel_ComplexArray_GGIO1_Mod;
extern DataAttribute iedModel_ComplexArray_GGIO1_Mod_stVal;
extern DataAttribute iedModel_ComplexArray_GGIO1_Mod_q;
extern DataAttribute iedModel_ComplexArray_GGIO1_Mod_t;
extern DataAttribute iedModel_ComplexArray_GGIO1_Mod_ctlModel;
extern DataObject iedModel_ComplexArray_GGIO1_Beh;
extern DataAttribute iedModel_ComplexArray_GGIO1_Beh_stVal;
extern DataAttribute iedModel_ComplexArray_GGIO1_Beh_q;
extern DataAttribute iedModel_ComplexArray_GGIO1_Beh_t;
extern DataObject iedModel_ComplexArray_GGIO1_Health;
extern DataAttribute iedModel_ComplexArray_GGIO1_Health_stVal;
extern DataAttribute iedModel_ComplexArray_GGIO1_Health_q;
extern DataAttribute iedModel_ComplexArray_GGIO1_Health_t;
extern DataObject iedModel_ComplexArray_GGIO1_NamPlt;
extern DataAttribute iedModel_ComplexArray_GGIO1_NamPlt_vendor;
extern DataAttribute iedModel_ComplexArray_GGIO1_NamPlt_swRev;
extern DataAttribute iedModel_ComplexArray_GGIO1_NamPlt_d;
extern DataAttribute iedModel_ComplexArray_GGIO1_NamPlt_dU;
extern DataObject iedModel_ComplexArray_GGIO1_AnIn1;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn1_mag;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn1_mag_f;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn1_q;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn1_t;
extern DataObject iedModel_ComplexArray_GGIO1_AnIn2;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn2_mag;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn2_mag_f;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn2_q;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn2_t;
extern DataObject iedModel_ComplexArray_GGIO1_AnIn3;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn3_mag;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn3_mag_f;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn3_q;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn3_t;
extern DataObject iedModel_ComplexArray_GGIO1_AnIn4;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn4_mag;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn4_mag_f;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn4_q;
extern DataAttribute iedModel_ComplexArray_GGIO1_AnIn4_t;
extern DataObject iedModel_ComplexArray_GGIO1_SPCSO1;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_origin;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_origin_orCat;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_origin_orIdent;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_ctlNum;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_stVal;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_q;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_t;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_ctlModel;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_ctlVal;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_origin;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_origin_orCat;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_origin_orIdent;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_ctlNum;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_T;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_Test;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO1_Oper_Check;
extern DataObject iedModel_ComplexArray_GGIO1_SPCSO2;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_stVal;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_q;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_ctlVal;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_origin;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_origin_orCat;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_origin_orIdent;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_ctlNum;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_T;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_Test;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_Oper_Check;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_ctlModel;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO2_t;
extern DataObject iedModel_ComplexArray_GGIO1_SPCSO3;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_stVal;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_q;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_ctlVal;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_origin;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_origin_orCat;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_origin_orIdent;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_ctlNum;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_T;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_Test;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_Oper_Check;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_ctlModel;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO3_t;
extern DataObject iedModel_ComplexArray_GGIO1_SPCSO4;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_stVal;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_q;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_ctlVal;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_origin;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_origin_orCat;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_origin_orIdent;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_ctlNum;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_T;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_Test;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_Oper_Check;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_ctlModel;
extern DataAttribute iedModel_ComplexArray_GGIO1_SPCSO4_t;
extern DataObject iedModel_ComplexArray_GGIO1_Ind1;
extern DataAttribute iedModel_ComplexArray_GGIO1_Ind1_stVal;
extern DataAttribute iedModel_ComplexArray_GGIO1_Ind1_q;
extern DataAttribute iedModel_ComplexArray_GGIO1_Ind1_t;
extern DataObject iedModel_ComplexArray_GGIO1_Ind2;
extern DataAttribute iedModel_ComplexArray_GGIO1_Ind2_stVal;
extern DataAttribute iedModel_ComplexArray_GGIO1_Ind2_q;
extern DataAttribute iedModel_ComplexArray_GGIO1_Ind2_t;
extern DataObject iedModel_ComplexArray_GGIO1_Ind3;
extern DataAttribute iedModel_ComplexArray_GGIO1_Ind3_stVal;
extern DataAttribute iedModel_ComplexArray_GGIO1_Ind3_q;
extern DataAttribute iedModel_ComplexArray_GGIO1_Ind3_t;
extern DataObject iedModel_ComplexArray_GGIO1_Ind4;
extern DataAttribute iedModel_ComplexArray_GGIO1_Ind4_stVal;
extern DataAttribute iedModel_ComplexArray_GGIO1_Ind4_q;
extern DataAttribute iedModel_ComplexArray_GGIO1_Ind4_t;
extern LogicalNode iedModel_ComplexArray_MHAI1;
extern DataObject iedModel_ComplexArray_MHAI1_HA;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_0;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_0_t;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_1;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_1_t;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_2;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_2_t;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_3;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_3_t;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_4;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_4_t;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_5;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_5_t;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_6;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_6_t;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_7;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_7_t;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_8;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_8_t;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_9;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_9_t;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_10;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_10_t;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_11;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_11_t;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_12;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_12_t;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_13;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_13_t;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_14;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_14_t;
extern DataObject iedModel_ComplexArray_MHAI1_HA_phsAHar_15;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang_f;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_q;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_phsAHar_15_t;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_numHar;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_numCyc;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_evalTm;
extern DataAttribute iedModel_ComplexArray_MHAI1_HA_frequency;
#define IEDMODEL_ComplexArray (&iedModel_ComplexArray)
#define IEDMODEL_ComplexArray_LLN0 (&iedModel_ComplexArray_LLN0)
#define IEDMODEL_ComplexArray_LLN0_Mod (&iedModel_ComplexArray_LLN0_Mod)
#define IEDMODEL_ComplexArray_LLN0_Mod_stVal (&iedModel_ComplexArray_LLN0_Mod_stVal)
#define IEDMODEL_ComplexArray_LLN0_Mod_q (&iedModel_ComplexArray_LLN0_Mod_q)
#define IEDMODEL_ComplexArray_LLN0_Mod_t (&iedModel_ComplexArray_LLN0_Mod_t)
#define IEDMODEL_ComplexArray_LLN0_Mod_ctlModel (&iedModel_ComplexArray_LLN0_Mod_ctlModel)
#define IEDMODEL_ComplexArray_LLN0_Beh (&iedModel_ComplexArray_LLN0_Beh)
#define IEDMODEL_ComplexArray_LLN0_Beh_stVal (&iedModel_ComplexArray_LLN0_Beh_stVal)
#define IEDMODEL_ComplexArray_LLN0_Beh_q (&iedModel_ComplexArray_LLN0_Beh_q)
#define IEDMODEL_ComplexArray_LLN0_Beh_t (&iedModel_ComplexArray_LLN0_Beh_t)
#define IEDMODEL_ComplexArray_LLN0_Health (&iedModel_ComplexArray_LLN0_Health)
#define IEDMODEL_ComplexArray_LLN0_Health_stVal (&iedModel_ComplexArray_LLN0_Health_stVal)
#define IEDMODEL_ComplexArray_LLN0_Health_q (&iedModel_ComplexArray_LLN0_Health_q)
#define IEDMODEL_ComplexArray_LLN0_Health_t (&iedModel_ComplexArray_LLN0_Health_t)
#define IEDMODEL_ComplexArray_LLN0_NamPlt (&iedModel_ComplexArray_LLN0_NamPlt)
#define IEDMODEL_ComplexArray_LLN0_NamPlt_vendor (&iedModel_ComplexArray_LLN0_NamPlt_vendor)
#define IEDMODEL_ComplexArray_LLN0_NamPlt_swRev (&iedModel_ComplexArray_LLN0_NamPlt_swRev)
#define IEDMODEL_ComplexArray_LLN0_NamPlt_d (&iedModel_ComplexArray_LLN0_NamPlt_d)
#define IEDMODEL_ComplexArray_LLN0_NamPlt_configRev (&iedModel_ComplexArray_LLN0_NamPlt_configRev)
#define IEDMODEL_ComplexArray_LLN0_NamPlt_ldNs (&iedModel_ComplexArray_LLN0_NamPlt_ldNs)
#define IEDMODEL_ComplexArray_LPHD1 (&iedModel_ComplexArray_LPHD1)
#define IEDMODEL_ComplexArray_LPHD1_PhyNam (&iedModel_ComplexArray_LPHD1_PhyNam)
#define IEDMODEL_ComplexArray_LPHD1_PhyNam_vendor (&iedModel_ComplexArray_LPHD1_PhyNam_vendor)
#define IEDMODEL_ComplexArray_LPHD1_PhyHealth (&iedModel_ComplexArray_LPHD1_PhyHealth)
#define IEDMODEL_ComplexArray_LPHD1_PhyHealth_stVal (&iedModel_ComplexArray_LPHD1_PhyHealth_stVal)
#define IEDMODEL_ComplexArray_LPHD1_PhyHealth_q (&iedModel_ComplexArray_LPHD1_PhyHealth_q)
#define IEDMODEL_ComplexArray_LPHD1_PhyHealth_t (&iedModel_ComplexArray_LPHD1_PhyHealth_t)
#define IEDMODEL_ComplexArray_LPHD1_Proxy (&iedModel_ComplexArray_LPHD1_Proxy)
#define IEDMODEL_ComplexArray_LPHD1_Proxy_stVal (&iedModel_ComplexArray_LPHD1_Proxy_stVal)
#define IEDMODEL_ComplexArray_LPHD1_Proxy_q (&iedModel_ComplexArray_LPHD1_Proxy_q)
#define IEDMODEL_ComplexArray_LPHD1_Proxy_t (&iedModel_ComplexArray_LPHD1_Proxy_t)
#define IEDMODEL_ComplexArray_GGIO1 (&iedModel_ComplexArray_GGIO1)
#define IEDMODEL_ComplexArray_GGIO1_Mod (&iedModel_ComplexArray_GGIO1_Mod)
#define IEDMODEL_ComplexArray_GGIO1_Mod_stVal (&iedModel_ComplexArray_GGIO1_Mod_stVal)
#define IEDMODEL_ComplexArray_GGIO1_Mod_q (&iedModel_ComplexArray_GGIO1_Mod_q)
#define IEDMODEL_ComplexArray_GGIO1_Mod_t (&iedModel_ComplexArray_GGIO1_Mod_t)
#define IEDMODEL_ComplexArray_GGIO1_Mod_ctlModel (&iedModel_ComplexArray_GGIO1_Mod_ctlModel)
#define IEDMODEL_ComplexArray_GGIO1_Beh (&iedModel_ComplexArray_GGIO1_Beh)
#define IEDMODEL_ComplexArray_GGIO1_Beh_stVal (&iedModel_ComplexArray_GGIO1_Beh_stVal)
#define IEDMODEL_ComplexArray_GGIO1_Beh_q (&iedModel_ComplexArray_GGIO1_Beh_q)
#define IEDMODEL_ComplexArray_GGIO1_Beh_t (&iedModel_ComplexArray_GGIO1_Beh_t)
#define IEDMODEL_ComplexArray_GGIO1_Health (&iedModel_ComplexArray_GGIO1_Health)
#define IEDMODEL_ComplexArray_GGIO1_Health_stVal (&iedModel_ComplexArray_GGIO1_Health_stVal)
#define IEDMODEL_ComplexArray_GGIO1_Health_q (&iedModel_ComplexArray_GGIO1_Health_q)
#define IEDMODEL_ComplexArray_GGIO1_Health_t (&iedModel_ComplexArray_GGIO1_Health_t)
#define IEDMODEL_ComplexArray_GGIO1_NamPlt (&iedModel_ComplexArray_GGIO1_NamPlt)
#define IEDMODEL_ComplexArray_GGIO1_NamPlt_vendor (&iedModel_ComplexArray_GGIO1_NamPlt_vendor)
#define IEDMODEL_ComplexArray_GGIO1_NamPlt_swRev (&iedModel_ComplexArray_GGIO1_NamPlt_swRev)
#define IEDMODEL_ComplexArray_GGIO1_NamPlt_d (&iedModel_ComplexArray_GGIO1_NamPlt_d)
#define IEDMODEL_ComplexArray_GGIO1_NamPlt_dU (&iedModel_ComplexArray_GGIO1_NamPlt_dU)
#define IEDMODEL_ComplexArray_GGIO1_AnIn1 (&iedModel_ComplexArray_GGIO1_AnIn1)
#define IEDMODEL_ComplexArray_GGIO1_AnIn1_mag (&iedModel_ComplexArray_GGIO1_AnIn1_mag)
#define IEDMODEL_ComplexArray_GGIO1_AnIn1_mag_f (&iedModel_ComplexArray_GGIO1_AnIn1_mag_f)
#define IEDMODEL_ComplexArray_GGIO1_AnIn1_q (&iedModel_ComplexArray_GGIO1_AnIn1_q)
#define IEDMODEL_ComplexArray_GGIO1_AnIn1_t (&iedModel_ComplexArray_GGIO1_AnIn1_t)
#define IEDMODEL_ComplexArray_GGIO1_AnIn2 (&iedModel_ComplexArray_GGIO1_AnIn2)
#define IEDMODEL_ComplexArray_GGIO1_AnIn2_mag (&iedModel_ComplexArray_GGIO1_AnIn2_mag)
#define IEDMODEL_ComplexArray_GGIO1_AnIn2_mag_f (&iedModel_ComplexArray_GGIO1_AnIn2_mag_f)
#define IEDMODEL_ComplexArray_GGIO1_AnIn2_q (&iedModel_ComplexArray_GGIO1_AnIn2_q)
#define IEDMODEL_ComplexArray_GGIO1_AnIn2_t (&iedModel_ComplexArray_GGIO1_AnIn2_t)
#define IEDMODEL_ComplexArray_GGIO1_AnIn3 (&iedModel_ComplexArray_GGIO1_AnIn3)
#define IEDMODEL_ComplexArray_GGIO1_AnIn3_mag (&iedModel_ComplexArray_GGIO1_AnIn3_mag)
#define IEDMODEL_ComplexArray_GGIO1_AnIn3_mag_f (&iedModel_ComplexArray_GGIO1_AnIn3_mag_f)
#define IEDMODEL_ComplexArray_GGIO1_AnIn3_q (&iedModel_ComplexArray_GGIO1_AnIn3_q)
#define IEDMODEL_ComplexArray_GGIO1_AnIn3_t (&iedModel_ComplexArray_GGIO1_AnIn3_t)
#define IEDMODEL_ComplexArray_GGIO1_AnIn4 (&iedModel_ComplexArray_GGIO1_AnIn4)
#define IEDMODEL_ComplexArray_GGIO1_AnIn4_mag (&iedModel_ComplexArray_GGIO1_AnIn4_mag)
#define IEDMODEL_ComplexArray_GGIO1_AnIn4_mag_f (&iedModel_ComplexArray_GGIO1_AnIn4_mag_f)
#define IEDMODEL_ComplexArray_GGIO1_AnIn4_q (&iedModel_ComplexArray_GGIO1_AnIn4_q)
#define IEDMODEL_ComplexArray_GGIO1_AnIn4_t (&iedModel_ComplexArray_GGIO1_AnIn4_t)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1 (&iedModel_ComplexArray_GGIO1_SPCSO1)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_origin (&iedModel_ComplexArray_GGIO1_SPCSO1_origin)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_origin_orCat (&iedModel_ComplexArray_GGIO1_SPCSO1_origin_orCat)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_origin_orIdent (&iedModel_ComplexArray_GGIO1_SPCSO1_origin_orIdent)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_ctlNum (&iedModel_ComplexArray_GGIO1_SPCSO1_ctlNum)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_stVal (&iedModel_ComplexArray_GGIO1_SPCSO1_stVal)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_q (&iedModel_ComplexArray_GGIO1_SPCSO1_q)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_t (&iedModel_ComplexArray_GGIO1_SPCSO1_t)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_ctlModel (&iedModel_ComplexArray_GGIO1_SPCSO1_ctlModel)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_Oper (&iedModel_ComplexArray_GGIO1_SPCSO1_Oper)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_Oper_ctlVal (&iedModel_ComplexArray_GGIO1_SPCSO1_Oper_ctlVal)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_Oper_origin (&iedModel_ComplexArray_GGIO1_SPCSO1_Oper_origin)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_Oper_origin_orCat (&iedModel_ComplexArray_GGIO1_SPCSO1_Oper_origin_orCat)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_Oper_origin_orIdent (&iedModel_ComplexArray_GGIO1_SPCSO1_Oper_origin_orIdent)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_Oper_ctlNum (&iedModel_ComplexArray_GGIO1_SPCSO1_Oper_ctlNum)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_Oper_T (&iedModel_ComplexArray_GGIO1_SPCSO1_Oper_T)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_Oper_Test (&iedModel_ComplexArray_GGIO1_SPCSO1_Oper_Test)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO1_Oper_Check (&iedModel_ComplexArray_GGIO1_SPCSO1_Oper_Check)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO2 (&iedModel_ComplexArray_GGIO1_SPCSO2)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO2_stVal (&iedModel_ComplexArray_GGIO1_SPCSO2_stVal)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO2_q (&iedModel_ComplexArray_GGIO1_SPCSO2_q)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO2_Oper (&iedModel_ComplexArray_GGIO1_SPCSO2_Oper)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO2_Oper_ctlVal (&iedModel_ComplexArray_GGIO1_SPCSO2_Oper_ctlVal)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO2_Oper_origin (&iedModel_ComplexArray_GGIO1_SPCSO2_Oper_origin)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO2_Oper_origin_orCat (&iedModel_ComplexArray_GGIO1_SPCSO2_Oper_origin_orCat)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO2_Oper_origin_orIdent (&iedModel_ComplexArray_GGIO1_SPCSO2_Oper_origin_orIdent)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO2_Oper_ctlNum (&iedModel_ComplexArray_GGIO1_SPCSO2_Oper_ctlNum)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO2_Oper_T (&iedModel_ComplexArray_GGIO1_SPCSO2_Oper_T)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO2_Oper_Test (&iedModel_ComplexArray_GGIO1_SPCSO2_Oper_Test)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO2_Oper_Check (&iedModel_ComplexArray_GGIO1_SPCSO2_Oper_Check)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO2_ctlModel (&iedModel_ComplexArray_GGIO1_SPCSO2_ctlModel)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO2_t (&iedModel_ComplexArray_GGIO1_SPCSO2_t)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO3 (&iedModel_ComplexArray_GGIO1_SPCSO3)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO3_stVal (&iedModel_ComplexArray_GGIO1_SPCSO3_stVal)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO3_q (&iedModel_ComplexArray_GGIO1_SPCSO3_q)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO3_Oper (&iedModel_ComplexArray_GGIO1_SPCSO3_Oper)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO3_Oper_ctlVal (&iedModel_ComplexArray_GGIO1_SPCSO3_Oper_ctlVal)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO3_Oper_origin (&iedModel_ComplexArray_GGIO1_SPCSO3_Oper_origin)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO3_Oper_origin_orCat (&iedModel_ComplexArray_GGIO1_SPCSO3_Oper_origin_orCat)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO3_Oper_origin_orIdent (&iedModel_ComplexArray_GGIO1_SPCSO3_Oper_origin_orIdent)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO3_Oper_ctlNum (&iedModel_ComplexArray_GGIO1_SPCSO3_Oper_ctlNum)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO3_Oper_T (&iedModel_ComplexArray_GGIO1_SPCSO3_Oper_T)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO3_Oper_Test (&iedModel_ComplexArray_GGIO1_SPCSO3_Oper_Test)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO3_Oper_Check (&iedModel_ComplexArray_GGIO1_SPCSO3_Oper_Check)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO3_ctlModel (&iedModel_ComplexArray_GGIO1_SPCSO3_ctlModel)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO3_t (&iedModel_ComplexArray_GGIO1_SPCSO3_t)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO4 (&iedModel_ComplexArray_GGIO1_SPCSO4)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO4_stVal (&iedModel_ComplexArray_GGIO1_SPCSO4_stVal)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO4_q (&iedModel_ComplexArray_GGIO1_SPCSO4_q)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO4_Oper (&iedModel_ComplexArray_GGIO1_SPCSO4_Oper)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO4_Oper_ctlVal (&iedModel_ComplexArray_GGIO1_SPCSO4_Oper_ctlVal)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO4_Oper_origin (&iedModel_ComplexArray_GGIO1_SPCSO4_Oper_origin)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO4_Oper_origin_orCat (&iedModel_ComplexArray_GGIO1_SPCSO4_Oper_origin_orCat)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO4_Oper_origin_orIdent (&iedModel_ComplexArray_GGIO1_SPCSO4_Oper_origin_orIdent)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO4_Oper_ctlNum (&iedModel_ComplexArray_GGIO1_SPCSO4_Oper_ctlNum)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO4_Oper_T (&iedModel_ComplexArray_GGIO1_SPCSO4_Oper_T)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO4_Oper_Test (&iedModel_ComplexArray_GGIO1_SPCSO4_Oper_Test)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO4_Oper_Check (&iedModel_ComplexArray_GGIO1_SPCSO4_Oper_Check)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO4_ctlModel (&iedModel_ComplexArray_GGIO1_SPCSO4_ctlModel)
#define IEDMODEL_ComplexArray_GGIO1_SPCSO4_t (&iedModel_ComplexArray_GGIO1_SPCSO4_t)
#define IEDMODEL_ComplexArray_GGIO1_Ind1 (&iedModel_ComplexArray_GGIO1_Ind1)
#define IEDMODEL_ComplexArray_GGIO1_Ind1_stVal (&iedModel_ComplexArray_GGIO1_Ind1_stVal)
#define IEDMODEL_ComplexArray_GGIO1_Ind1_q (&iedModel_ComplexArray_GGIO1_Ind1_q)
#define IEDMODEL_ComplexArray_GGIO1_Ind1_t (&iedModel_ComplexArray_GGIO1_Ind1_t)
#define IEDMODEL_ComplexArray_GGIO1_Ind2 (&iedModel_ComplexArray_GGIO1_Ind2)
#define IEDMODEL_ComplexArray_GGIO1_Ind2_stVal (&iedModel_ComplexArray_GGIO1_Ind2_stVal)
#define IEDMODEL_ComplexArray_GGIO1_Ind2_q (&iedModel_ComplexArray_GGIO1_Ind2_q)
#define IEDMODEL_ComplexArray_GGIO1_Ind2_t (&iedModel_ComplexArray_GGIO1_Ind2_t)
#define IEDMODEL_ComplexArray_GGIO1_Ind3 (&iedModel_ComplexArray_GGIO1_Ind3)
#define IEDMODEL_ComplexArray_GGIO1_Ind3_stVal (&iedModel_ComplexArray_GGIO1_Ind3_stVal)
#define IEDMODEL_ComplexArray_GGIO1_Ind3_q (&iedModel_ComplexArray_GGIO1_Ind3_q)
#define IEDMODEL_ComplexArray_GGIO1_Ind3_t (&iedModel_ComplexArray_GGIO1_Ind3_t)
#define IEDMODEL_ComplexArray_GGIO1_Ind4 (&iedModel_ComplexArray_GGIO1_Ind4)
#define IEDMODEL_ComplexArray_GGIO1_Ind4_stVal (&iedModel_ComplexArray_GGIO1_Ind4_stVal)
#define IEDMODEL_ComplexArray_GGIO1_Ind4_q (&iedModel_ComplexArray_GGIO1_Ind4_q)
#define IEDMODEL_ComplexArray_GGIO1_Ind4_t (&iedModel_ComplexArray_GGIO1_Ind4_t)
#define IEDMODEL_ComplexArray_MHAI1 (&iedModel_ComplexArray_MHAI1)
#define IEDMODEL_ComplexArray_MHAI1_HA (&iedModel_ComplexArray_MHAI1_HA)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar (&iedModel_ComplexArray_MHAI1_HA_phsAHar)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_0_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_0_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_0_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_0_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_0_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_0_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_1_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_1_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_1_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_1_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_1_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_1_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_2_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_2_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_2_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_2_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_2_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_2_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_3_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_3_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_3_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_3_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_3_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_3_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_4_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_4_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_4_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_4_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_4_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_4_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_5_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_5_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_5_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_5_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_5_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_5_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_6_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_6_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_6_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_6_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_6_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_6_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_7_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_7_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_7_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_7_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_7_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_7_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_8_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_8_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_8_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_8_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_8_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_8_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_9_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_9_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_9_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_9_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_9_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_9_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_10_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_10_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_10_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_10_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_10_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_10_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_11_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_11_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_11_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_11_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_11_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_11_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_12_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_12_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_12_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_12_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_12_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_12_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_13_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_13_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_13_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_13_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_13_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_13_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_14_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_14_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_14_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_14_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_14_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_14_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_15_cVal (&iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag (&iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_mag_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang (&iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang_f (&iedModel_ComplexArray_MHAI1_HA_phsAHar_15_cVal_ang_f)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_15_q (&iedModel_ComplexArray_MHAI1_HA_phsAHar_15_q)
#define IEDMODEL_ComplexArray_MHAI1_HA_phsAHar_15_t (&iedModel_ComplexArray_MHAI1_HA_phsAHar_15_t)
#define IEDMODEL_ComplexArray_MHAI1_HA_numHar (&iedModel_ComplexArray_MHAI1_HA_numHar)
#define IEDMODEL_ComplexArray_MHAI1_HA_numCyc (&iedModel_ComplexArray_MHAI1_HA_numCyc)
#define IEDMODEL_ComplexArray_MHAI1_HA_evalTm (&iedModel_ComplexArray_MHAI1_HA_evalTm)
#define IEDMODEL_ComplexArray_MHAI1_HA_frequency (&iedModel_ComplexArray_MHAI1_HA_frequency)
#endif /* STATIC_MODEL_H_ */

@ -3,7 +3,7 @@
# Typical usage:
# *) install cross compiler: `sudo apt-get install mingw-w64`
# *) cd build
# *) cmake -DCMAKE_TOOLCHAIN_FILE=~/mingw-w64-x86_64.cmake ..
# *) cmake -DCMAKE_TOOLCHAIN_FILE=../mingw-w64-x86_64.cmake ..
# This is free and unencumbered software released into the public domain.
set(CMAKE_SYSTEM_NAME Windows)

@ -1,7 +1,7 @@
/*
* ied_server.c
*
* Copyright 2013-2024 Michael Zillgith
* Copyright 2013-2025 Michael Zillgith
*
* This file is part of libIEC61850.
*
@ -245,21 +245,36 @@ exit_function:
return success;
}
#define OBJ_REF_MAX_SIZE 129
static void
installDefaultValuesForDataAttribute(IedServer self, LogicalDevice* ld, DataAttribute* dataAttribute,
char* objectReference, int position, int idx, char* componentId, int compIdPos)
{
objectReference[position] = 0;
if (dataAttribute->name)
{
if (idx == -1) {
sprintf(objectReference + position, ".%s", dataAttribute->name);
if (idx == -1)
{
objectReference[position] = 0;
StringUtils_appendString(objectReference, OBJ_REF_MAX_SIZE + 1, ".");
StringUtils_appendString(objectReference, OBJ_REF_MAX_SIZE + 1, dataAttribute->name);
}
else
{
componentId[compIdPos] = 0;
if (compIdPos == 0)
sprintf(componentId, "%s", dataAttribute->name);
{
StringUtils_appendString(componentId, OBJ_REF_MAX_SIZE + 1, dataAttribute->name);
}
else
sprintf(componentId + compIdPos, "$%s", dataAttribute->name);
{
StringUtils_appendString(componentId, OBJ_REF_MAX_SIZE + 1, "$");
StringUtils_appendString(componentId, OBJ_REF_MAX_SIZE + 1, dataAttribute->name);
}
}
}
else
@ -360,6 +375,8 @@ static void
installDefaultValuesForDataObject(IedServer self, LogicalDevice* ld, DataObject* dataObject,
char* objectReference, int position, int idx, char* componentId, int compIdPos)
{
objectReference[position] = 0;
if (dataObject->elementCount > 0)
{
if (DEBUG_IED_SERVER)
@ -367,7 +384,9 @@ installDefaultValuesForDataObject(IedServer self, LogicalDevice* ld, DataObject*
ModelNode* arrayElemNode = dataObject->firstChild;
sprintf(objectReference + position, ".%s", dataObject->name);
StringUtils_appendString(objectReference, OBJ_REF_MAX_SIZE + 1, ".");
StringUtils_appendString(objectReference, OBJ_REF_MAX_SIZE + 1, dataObject->name);
int childPosition = strlen(objectReference);
int arrayIdx = 0;
@ -387,14 +406,18 @@ installDefaultValuesForDataObject(IedServer self, LogicalDevice* ld, DataObject*
{
if (idx == -1)
{
sprintf(objectReference + position, ".%s", dataObject->name);
StringUtils_appendString(objectReference, OBJ_REF_MAX_SIZE + 1, ".");
StringUtils_appendString(objectReference, OBJ_REF_MAX_SIZE + 1, dataObject->name);
}
else
{
if (compIdPos == 0)
sprintf(componentId, "%s", dataObject->name);
StringUtils_appendString(componentId, OBJ_REF_MAX_SIZE + 1, dataObject->name);
else
sprintf(componentId + compIdPos, "$%s", dataObject->name);
{
StringUtils_appendString(componentId, OBJ_REF_MAX_SIZE + 1, "$");
StringUtils_appendString(componentId, OBJ_REF_MAX_SIZE + 1, dataObject->name);
}
}
}
@ -426,27 +449,31 @@ installDefaultValuesInCache(IedServer self)
{
IedModel* model = self->model;
char componentId[130];
char componentId[OBJ_REF_MAX_SIZE + 1];
componentId[0] = 0;
char objectReference[130];
char objectReference[OBJ_REF_MAX_SIZE + 1];
LogicalDevice* logicalDevice = model->firstChild;
while (logicalDevice)
{
if (logicalDevice->ldName)
sprintf(objectReference, "%s", logicalDevice->ldName);
StringUtils_copyStringMax(objectReference, OBJ_REF_MAX_SIZE + 1, logicalDevice->ldName);
else
sprintf(objectReference, "%s", logicalDevice->name);
StringUtils_copyStringMax(objectReference, OBJ_REF_MAX_SIZE + 1, logicalDevice->name);
LogicalNode* logicalNode = (LogicalNode*) logicalDevice->firstChild;
StringUtils_appendString(objectReference, OBJ_REF_MAX_SIZE + 1, "/");
char* nodeReference = objectReference + strlen(objectReference);
while (logicalNode)
{
sprintf(nodeReference, "/%s", logicalNode->name);
*nodeReference = 0;
StringUtils_appendString(objectReference, OBJ_REF_MAX_SIZE + 1, logicalNode->name);
DataObject* dataObject = (DataObject*) logicalNode->firstChild;
@ -1317,6 +1344,9 @@ IedServer_updateAttributeValue(IedServer self, DataAttribute* dataAttribute, Mms
assert(dataAttribute != NULL);
assert(MmsValue_getType(dataAttribute->mmsValue) == MmsValue_getType(value));
if ((dataAttribute == NULL) || (dataAttribute->mmsValue == NULL))
return;
if (MmsValue_equals(dataAttribute->mmsValue, value) == false)
{
if (dataAttribute->type == IEC61850_BOOLEAN)
@ -1350,6 +1380,12 @@ IedServer_updateFloatAttributeValue(IedServer self, DataAttribute* dataAttribute
assert(MmsValue_getType(dataAttribute->mmsValue) == MMS_FLOAT);
assert(self != NULL);
if ((dataAttribute == NULL) || (dataAttribute->mmsValue == NULL))
return;
if (MmsValue_getType(dataAttribute->mmsValue) != MMS_FLOAT)
return;
float currentValue = MmsValue_toFloat(dataAttribute->mmsValue);
if (currentValue != value)
@ -1374,6 +1410,12 @@ IedServer_updateInt32AttributeValue(IedServer self, DataAttribute* dataAttribute
assert(MmsValue_getType(dataAttribute->mmsValue) == MMS_INTEGER);
assert(self != NULL);
if ((dataAttribute == NULL) || (dataAttribute->mmsValue == NULL))
return;
if (MmsValue_getType(dataAttribute->mmsValue) != MMS_INTEGER)
return;
int32_t currentValue = MmsValue_toInt32(dataAttribute->mmsValue);
if (currentValue != value)
@ -1395,6 +1437,12 @@ IedServer_updateInt32AttributeValue(IedServer self, DataAttribute* dataAttribute
void
IedServer_updateDbposValue(IedServer self, DataAttribute* dataAttribute, Dbpos value)
{
if ((dataAttribute == NULL) || (dataAttribute->mmsValue == NULL))
return;
if (MmsValue_getType(dataAttribute->mmsValue) != MMS_BIT_STRING)
return;
Dbpos currentValue = Dbpos_fromMmsValue(dataAttribute->mmsValue);
if (currentValue != value)
@ -1420,6 +1468,12 @@ IedServer_updateInt64AttributeValue(IedServer self, DataAttribute* dataAttribute
assert(MmsValue_getType(dataAttribute->mmsValue) == MMS_INTEGER);
assert(self != NULL);
if ((dataAttribute == NULL) || (dataAttribute->mmsValue == NULL))
return;
if (MmsValue_getType(dataAttribute->mmsValue) != MMS_INTEGER)
return;
int64_t currentValue = MmsValue_toInt64(dataAttribute->mmsValue);
if (currentValue != value)
@ -1445,6 +1499,12 @@ IedServer_updateUnsignedAttributeValue(IedServer self, DataAttribute* dataAttrib
assert(MmsValue_getType(dataAttribute->mmsValue) == MMS_UNSIGNED);
assert(self != NULL);
if ((dataAttribute == NULL) || (dataAttribute->mmsValue == NULL))
return;
if (MmsValue_getType(dataAttribute->mmsValue) != MMS_UNSIGNED)
return;
uint32_t currentValue = MmsValue_toUint32(dataAttribute->mmsValue);
if (currentValue != value)
@ -1470,6 +1530,12 @@ IedServer_updateBitStringAttributeValue(IedServer self, DataAttribute* dataAttri
assert(MmsValue_getType(dataAttribute->mmsValue) == MMS_BIT_STRING);
assert(self != NULL);
if ((dataAttribute == NULL) || (dataAttribute->mmsValue == NULL))
return;
if (MmsValue_getType(dataAttribute->mmsValue) != MMS_BIT_STRING)
return;
uint32_t currentValue = MmsValue_getBitStringAsInteger(dataAttribute->mmsValue);
if (currentValue != value)
@ -1495,6 +1561,12 @@ IedServer_updateBooleanAttributeValue(IedServer self, DataAttribute* dataAttribu
assert(dataAttribute != NULL);
assert(MmsValue_getType(dataAttribute->mmsValue) == MMS_BOOLEAN);
if ((dataAttribute == NULL) || (dataAttribute->mmsValue == NULL))
return;
if (MmsValue_getType(dataAttribute->mmsValue) != MMS_BOOLEAN)
return;
bool currentValue = MmsValue_getBoolean(dataAttribute->mmsValue);
if (currentValue != value)
@ -1529,6 +1601,12 @@ IedServer_updateVisibleStringAttributeValue(IedServer self, DataAttribute* dataA
assert(MmsValue_getType(dataAttribute->mmsValue) == MMS_VISIBLE_STRING);
assert(self != NULL);
if ((dataAttribute == NULL) || (dataAttribute->mmsValue == NULL))
return;
if (MmsValue_getType(dataAttribute->mmsValue) != MMS_VISIBLE_STRING)
return;
const char* currentValue = MmsValue_toString(dataAttribute->mmsValue);
if (strcmp(currentValue, value))
@ -1554,6 +1632,12 @@ IedServer_updateUTCTimeAttributeValue(IedServer self, DataAttribute* dataAttribu
assert(MmsValue_getType(dataAttribute->mmsValue) == MMS_UTC_TIME);
assert(self != NULL);
if ((dataAttribute == NULL) || (dataAttribute->mmsValue == NULL))
return;
if (MmsValue_getType(dataAttribute->mmsValue) != MMS_UTC_TIME)
return;
uint64_t currentValue = MmsValue_getUtcTimeInMs(dataAttribute->mmsValue);
if (currentValue != value)
@ -1579,6 +1663,12 @@ IedServer_updateTimestampAttributeValue(IedServer self, DataAttribute* dataAttri
assert(MmsValue_getType(dataAttribute->mmsValue) == MMS_UTC_TIME);
assert(self != NULL);
if ((dataAttribute == NULL) || (dataAttribute->mmsValue == NULL))
return;
if (MmsValue_getType(dataAttribute->mmsValue) != MMS_UTC_TIME)
return;
if (memcmp(dataAttribute->mmsValue->value.utcTime, timestamp->val, 8))
{
#if (CONFIG_MMS_THREADLESS_STACK != 1)
@ -1603,6 +1693,12 @@ IedServer_updateQuality(IedServer self, DataAttribute* dataAttribute, Quality qu
assert(MmsValue_getBitStringSize(dataAttribute->mmsValue) >= 12);
assert(MmsValue_getBitStringSize(dataAttribute->mmsValue) <= 15);
if ((dataAttribute == NULL) || (dataAttribute->mmsValue == NULL))
return;
if (MmsValue_getType(dataAttribute->mmsValue) != MMS_BIT_STRING)
return;
uint32_t oldQuality = MmsValue_getBitStringAsInteger(dataAttribute->mmsValue);
if (oldQuality != (uint32_t) quality)
@ -1814,8 +1910,26 @@ IedServer_getFunctionalConstrainedData(IedServer self, DataObject* dataObject, F
{
nameLen = strlen(dataObject->name);
currentStart -= nameLen;
if (currentStart < buffer)
{
if (DEBUG_IED_SERVER)
printf("IED_SERVER: object path name too long (> 64 bytes)!\n");
goto exit_function;
}
memcpy(currentStart, dataObject->name, nameLen);
currentStart--;
if (currentStart < buffer)
{
if (DEBUG_IED_SERVER)
printf("IED_SERVER: object path name too long (> 64 bytes)!\n");
goto exit_function;
}
*currentStart = '$';
if (dataObject->parent->modelType == DataObjectModelType)
@ -1826,6 +1940,17 @@ IedServer_getFunctionalConstrainedData(IedServer self, DataObject* dataObject, F
char* fcString = FunctionalConstraint_toString(fc);
if (fcString == NULL)
goto exit_function;
if (currentStart - 3 < buffer)
{
if (DEBUG_IED_SERVER)
printf("IED_SERVER: object path name too long (> 64 bytes)!\n");
goto exit_function;
}
currentStart--;
*currentStart = fcString[1];
currentStart--;
@ -1838,6 +1963,15 @@ IedServer_getFunctionalConstrainedData(IedServer self, DataObject* dataObject, F
nameLen = strlen(ln->name);
currentStart -= nameLen;
if (currentStart < buffer)
{
if (DEBUG_IED_SERVER)
printf("IED_SERVER: object path name too long (> 64 bytes)!\n");
goto exit_function;
}
memcpy(currentStart, ln->name, nameLen);
LogicalDevice* ld = (LogicalDevice*) ln->parent;

@ -4158,7 +4158,6 @@ sendNextReportEntrySegment(ReportControl* self)
/* add reason code to report if requested */
if (withReasonCode)
{
/* move to start position in report buffer */
currentReportBufferPos = valuesInReportBuffer + dataLen;

@ -131,7 +131,7 @@ LogStorage_getMaxLogEntries(LogStorage self);
* \brief Add an entry to the log
*
* \param self the pointer of the LogStorage instance
* \param timestamp the entry time of the new entry
* \param timestamp the entry time of the new entry (ms timestamp)
*
* \return the entryID of the new entry
*/

@ -985,7 +985,7 @@ MmsValue_getSubElement(MmsValue* self, MmsVariableSpecification* varSpec, char*
*
* \return the value type as a human readable string
*/
LIB61850_API char*
LIB61850_API const char*
MmsValue_getTypeString(MmsValue* self);
/**
@ -1064,6 +1064,16 @@ MmsValue_getMaxEncodedSize(MmsValue* self);
LIB61850_API int
MmsVariableSpecification_getMaxEncodedSize(MmsVariableSpecification* self);
/**
* \brief Convert an MmsError to a string
*
* \param err the error to convert
*
* \return a static string representing the error
*/
LIB61850_API const char*
MmsError_toString(MmsError err);
/**@}*/
/**@}*/

@ -810,6 +810,7 @@ IsoClientConnection_destroy(IsoClientConnection self)
IsoClientConnection_close(self);
}
/// is this required?!
releaseSocket(self);
if (self->receiveBuf != NULL)

@ -1,7 +1,7 @@
/*
* mms_value.c
*
* Copyright 2013-2022 Michael Zillgith
* Copyright 2013-2025 Michael Zillgith
*
* This file is part of libIEC61850.
*
@ -2143,7 +2143,7 @@ MmsValue_getSubElement(MmsValue* self, MmsVariableSpecification* varSpec, char*
return MmsVariableSpecification_getChildValue(varSpec, self, mmsPath);
}
char*
const char*
MmsValue_getTypeString(MmsValue* self)
{
switch (MmsValue_getType(self))
@ -2339,3 +2339,157 @@ MmsValue_printToBuffer(const MmsValue* self, char* buffer, int bufferSize)
return buffer;
}
const char*
MmsError_toString(MmsError err)
{
switch (err)
{
case MMS_ERROR_NONE:
return "none";
case MMS_ERROR_CONNECTION_REJECTED:
return "connection-rejected";
case MMS_ERROR_CONNECTION_LOST:
return "connection-lost";
case MMS_ERROR_SERVICE_TIMEOUT:
return "service-timeout";
case MMS_ERROR_PARSING_RESPONSE:
return "parsing-error";
case MMS_ERROR_HARDWARE_FAULT:
return "hardware-fault";
case MMS_ERROR_CONCLUDE_REJECTED:
return "conclude-rejected";
case MMS_ERROR_INVALID_ARGUMENTS:
return "invalid-arguments";
case MMS_ERROR_OUTSTANDING_CALL_LIMIT:
return "outstanding-call-limit";
case MMS_ERROR_OTHER:
return "other";
case MMS_ERROR_VMDSTATE_OTHER:
return "vmd-state-other";
case MMS_ERROR_APPLICATION_REFERENCE_OTHER:
return "app-reference-other";
case MMS_ERROR_DEFINITION_OTHER:
return "definition-other";
case MMS_ERROR_DEFINITION_INVALID_ADDRESS:
return "invalid-address";
case MMS_ERROR_DEFINITION_TYPE_UNSUPPORTED:
return "type-unsupported";
case MMS_ERROR_DEFINITION_TYPE_INCONSISTENT:
return "type-inconsistent";
case MMS_ERROR_DEFINITION_OBJECT_UNDEFINED:
return "object-undefined";
case MMS_ERROR_DEFINITION_OBJECT_EXISTS:
return "object-exists";
case MMS_ERROR_DEFINITION_OBJECT_ATTRIBUTE_INCONSISTENT:
return "object-attribute-inconsistent";
case MMS_ERROR_RESOURCE_OTHER:
return "resource-other";
case MMS_ERROR_RESOURCE_CAPABILITY_UNAVAILABLE:
return "capability-unavailable";
case MMS_ERROR_SERVICE_OTHER:
return "service-other";
case MMS_ERROR_SERVICE_OBJECT_CONSTRAINT_CONFLICT:
return "object-constraint-conflict";
case MMS_ERROR_SERVICE_PREEMPT_OTHER:
return "preempt-other";
case MMS_ERROR_TIME_RESOLUTION_OTHER:
return "time-resolution-other";
case MMS_ERROR_ACCESS_OTHER:
return "access-other";
case MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT:
return "object-non-existent";
case MMS_ERROR_ACCESS_OBJECT_ACCESS_UNSUPPORTED:
return "object-access-unsupported";
case MMS_ERROR_ACCESS_OBJECT_ACCESS_DENIED:
return "object-access-denied";
case MMS_ERROR_ACCESS_OBJECT_INVALIDATED:
return "object-invalidated";
case MMS_ERROR_ACCESS_OBJECT_VALUE_INVALID:
return "object-value-invalid";
case MMS_ERROR_ACCESS_TEMPORARILY_UNAVAILABLE:
return "temporarily-unavailable";
case MMS_ERROR_FILE_OTHER:
return "file-other";
case MMS_ERROR_FILE_FILENAME_AMBIGUOUS:
return "filename-ambiguous";
case MMS_ERROR_FILE_FILE_BUSY:
return "file-busy";
case MMS_ERROR_FILE_FILENAME_SYNTAX_ERROR:
return "filename-syntax-error";
case MMS_ERROR_FILE_CONTENT_TYPE_INVALID:
return "file-content-type-invalid";
case MMS_ERROR_FILE_POSITION_INVALID:
return "file-position-invalid";
case MMS_ERROR_FILE_FILE_ACCESS_DENIED:
return "file-access-denied";
case MMS_ERROR_FILE_FILE_NON_EXISTENT:
return "file-non-existent";
case MMS_ERROR_FILE_DUPLICATE_FILENAME:
return "duplicate-filename";
case MMS_ERROR_FILE_INSUFFICIENT_SPACE_IN_FILESTORE:
return "insufficient-space-in-filestore";
case MMS_ERROR_REJECT_OTHER:
return "reject-other";
case MMS_ERROR_REJECT_UNKNOWN_PDU_TYPE:
return "reject-unknown-pdu-type";
case MMS_ERROR_REJECT_INVALID_PDU:
return "reject-invalid-pdu";
case MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE:
return "reject-unrecognized-service";
case MMS_ERROR_REJECT_UNRECOGNIZED_MODIFIER:
return "reject-unrecognized-modifier";
case MMS_ERROR_REJECT_REQUEST_INVALID_ARGUMENT:
return "reject-request-invalid-argument";
default:
return "unknown";
}
}

Loading…
Cancel
Save