diff --git a/README.md b/README.md index c172358d..32cbc00c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![MTConnect.NET](https://github.com/TrakHound/MTConnect.NET/actions/workflows/dotnet.yml/badge.svg)](https://github.com/TrakHound/MTConnect.NET/actions/workflows/dotnet.yml) -> **New Release 5/13/2024** : Version 6.4 Released with new Agent, Adapter, & SysML Import +> **New Release 10/21/2024** : Version 6.5 Released with support for MTConnect v2.4 ## Download @@ -39,7 +39,7 @@
## Overview -MTConnect.NET is a fully featured and fully Open Source **[.NET](https://dotnet.microsoft.com/)** library for **[MTConnect](https://www.mtconnect.org/)** to develop Agents, Adapters, and Clients. Supports MTConnect Versions up to 2.3. A pre-compiled Agent application is available to download as well as an Adapter application that can be easily customized. +MTConnect.NET is a fully featured and fully Open Source **[.NET](https://dotnet.microsoft.com/)** library for **[MTConnect](https://www.mtconnect.org/)** to develop Agents, Adapters, and Clients. Supports MTConnect Versions up to 2.4. A pre-compiled Agent application is available to download as well as an Adapter application that can be easily customized. - .NET Native MTConnect Agent - Adapter framework used to send data to an MTConnect Agent @@ -49,7 +49,7 @@ MTConnect.NET is a fully featured and fully Open Source **[.NET](https://dotnet. - Module based Agent & Adapter architecture - Supports running as Windows Service with easy to use command line arguments - Presistent Agent Buffers that are backed up on the File System. Retains state after Agent is restarted -- Fully compatible up to the latest MTConnect v2.3 +- Fully compatible up to the latest MTConnect v2.4 - Kept up to date by utilizing the MTConnect SysML Model to generate source files - Supports multiple MTConnect Version output. Automatically removes data that is not compatible with the requested version - Full client support for requesting data from any MTConnect Agent (Probe, Current, Sample Stream, Assets, etc.). diff --git a/agent/MTConnect.NET-Agent/README.md b/agent/MTConnect.NET-Agent/README.md index b4dc52b2..19ad0ae2 100644 --- a/agent/MTConnect.NET-Agent/README.md +++ b/agent/MTConnect.NET-Agent/README.md @@ -28,7 +28,7 @@ ## Overview -This project is a full implementation of an MTConnect Agent used to read data from industrial machine tools and devices. This MTConnect Agent application is fully compatible with the latest **Version 2.3 of the MTConnect Standard**. +This project is a full implementation of an MTConnect Agent used to read data from industrial machine tools and devices. This MTConnect Agent application is fully compatible with the latest **Version 2.4 of the MTConnect Standard**. #### Features - Plugin architecture to support Http Server, Mqtt Server, SHDR Adapters, etc. diff --git a/build/AssemblyInfo.cs b/build/AssemblyInfo.cs index 71cc1129..6d8629e0 100644 --- a/build/AssemblyInfo.cs +++ b/build/AssemblyInfo.cs @@ -1,6 +1,6 @@ using System.Reflection; -[assembly: AssemblyVersion("6.4.7")] -[assembly: AssemblyFileVersion("6.4.7")] +[assembly: AssemblyVersion("6.5.0")] +[assembly: AssemblyFileVersion("6.5.0")] [assembly: AssemblyCompany("TrakHound Inc.")] [assembly: AssemblyCopyright("Copyright (c) 2024 TrakHound Inc., All Rights Reserved.")] diff --git a/build/MTConnect.NET-SysML-Import/Program.cs b/build/MTConnect.NET-SysML-Import/Program.cs index c5fb2e63..e5dc22f0 100644 --- a/build/MTConnect.NET-SysML-Import/Program.cs +++ b/build/MTConnect.NET-SysML-Import/Program.cs @@ -5,7 +5,7 @@ using System.Text.Json; //var xmlPath = @"D:\TrakHound\MTConnect\MTConnectSysMLModel.xml"; -var xmlPath = @"D:\TrakHound\MTConnect\Standard\v2.3\MTConnectSysMLModel.xml"; +var xmlPath = @"D:\TrakHound\MTConnect\Standard\v2.4\MTConnectSysMLModel.xml"; var mtconnectModel = MTConnectModel.Parse(xmlPath); diff --git a/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/IParameter.g.cs b/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/IParameter.g.cs index 8b43b223..ae48e30e 100644 --- a/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/IParameter.g.cs +++ b/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/IParameter.g.cs @@ -4,7 +4,7 @@ namespace MTConnect.Assets.ComponentConfigurationParameters { /// - /// Property defining a configuration of a Component. + /// Property that determines the characteristic or behavior of an entity. /// public interface IParameter { diff --git a/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/IParameterSet.g.cs b/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/IParameterSet.g.cs index 563d3f75..912d7146 100644 --- a/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/IParameterSet.g.cs +++ b/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/IParameterSet.g.cs @@ -14,7 +14,7 @@ public interface IParameterSet string Name { get; } /// - /// Property defining a configuration of a Component. + /// Property that determines the characteristic or behavior of an entity. /// System.Collections.Generic.IEnumerable Parameters { get; } } diff --git a/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/Parameter.g.cs b/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/Parameter.g.cs index 621f9c0b..88962501 100644 --- a/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/Parameter.g.cs +++ b/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/Parameter.g.cs @@ -6,11 +6,11 @@ namespace MTConnect.Assets.ComponentConfigurationParameters { /// - /// Property defining a configuration of a Component. + /// Property that determines the characteristic or behavior of an entity. /// public class Parameter : IParameter { - public const string DescriptionText = "Property defining a configuration of a Component."; + public const string DescriptionText = "Property that determines the characteristic or behavior of an entity."; /// diff --git a/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/ParameterSet.g.cs b/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/ParameterSet.g.cs index 803cffbb..33206e62 100644 --- a/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/ParameterSet.g.cs +++ b/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/ParameterSet.g.cs @@ -19,7 +19,7 @@ public class ParameterSet : IParameterSet public string Name { get; set; } /// - /// Property defining a configuration of a Component. + /// Property that determines the characteristic or behavior of an entity. /// public System.Collections.Generic.IEnumerable Parameters { get; set; } } diff --git a/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/ParameterSetDescriptions.g.cs b/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/ParameterSetDescriptions.g.cs index b905e16f..c707d8e8 100644 --- a/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/ParameterSetDescriptions.g.cs +++ b/libraries/MTConnect.NET-Common/Assets/ComponentConfigurationParameters/ParameterSetDescriptions.g.cs @@ -11,8 +11,8 @@ public static class ParameterSetDescriptions public const string Name = "Name of the parameter set if more than one exists."; /// - /// Property defining a configuration of a Component. + /// Property that determines the characteristic or behavior of an entity. /// - public const string Parameters = "Property defining a configuration of a Component."; + public const string Parameters = "Property that determines the characteristic or behavior of an entity."; } } \ No newline at end of file diff --git a/libraries/MTConnect.NET-Common/Devices/Components/TankComponent.g.cs b/libraries/MTConnect.NET-Common/Devices/Components/TankComponent.g.cs index c121ec0a..db0f3955 100644 --- a/libraries/MTConnect.NET-Common/Devices/Components/TankComponent.g.cs +++ b/libraries/MTConnect.NET-Common/Devices/Components/TankComponent.g.cs @@ -6,13 +6,13 @@ namespace MTConnect.Devices.Components { /// - /// Leaf Component composed of a receptacle or container that holds material. + /// Leaf Component generally composed of an enclosed container. /// public class TankComponent : Component { public const string TypeId = "Tank"; public const string NameId = "tank"; - public new const string DescriptionText = "Leaf Component composed of a receptacle or container that holds material."; + public new const string DescriptionText = "Leaf Component generally composed of an enclosed container."; public override string TypeDescription => DescriptionText; diff --git a/libraries/MTConnect.NET-Common/Devices/Components/VatComponent.g.cs b/libraries/MTConnect.NET-Common/Devices/Components/VatComponent.g.cs index 3ba3df56..1ca07e6e 100644 --- a/libraries/MTConnect.NET-Common/Devices/Components/VatComponent.g.cs +++ b/libraries/MTConnect.NET-Common/Devices/Components/VatComponent.g.cs @@ -6,13 +6,13 @@ namespace MTConnect.Devices.Components { /// - /// Leaf Component composed of a container that holds liquid or powdered materials. + /// Leaf Component generally composed of an open container. /// public class VatComponent : Component { public const string TypeId = "Vat"; public const string NameId = "vat"; - public new const string DescriptionText = "Leaf Component composed of a container that holds liquid or powdered materials."; + public new const string DescriptionText = "Leaf Component generally composed of an open container."; public override string TypeDescription => DescriptionText; diff --git a/libraries/MTConnect.NET-Common/Devices/DataItems/LocationNarrativeDataItem.g.cs b/libraries/MTConnect.NET-Common/Devices/DataItems/LocationNarrativeDataItem.g.cs new file mode 100644 index 00000000..d9211f67 --- /dev/null +++ b/libraries/MTConnect.NET-Common/Devices/DataItems/LocationNarrativeDataItem.g.cs @@ -0,0 +1,44 @@ +// Copyright (c) 2024 TrakHound Inc., All Rights Reserved. +// TrakHound Inc. licenses this file to you under the MIT license. + +// MTConnect SysML v2.3 : UML ID = _19_0_3_68e0225_1712320901547_688092_333 + +namespace MTConnect.Devices.DataItems +{ + /// + /// Textual description of the location of an object or activity. + /// + public class LocationNarrativeDataItem : DataItem + { + public const DataItemCategory CategoryId = DataItemCategory.EVENT; + public const string TypeId = "LOCATION_NARRATIVE"; + public const string NameId = "locationNarrative"; + + + public new const string DescriptionText = "Textual description of the location of an object or activity."; + + public override string TypeDescription => DescriptionText; + + + + + public LocationNarrativeDataItem() + { + Category = CategoryId; + Type = TypeId; + Name = NameId; + + + } + + public LocationNarrativeDataItem(string deviceId) + { + Id = CreateId(deviceId, NameId); + Category = CategoryId; + Type = TypeId; + Name = NameId; + + + } + } +} \ No newline at end of file diff --git a/libraries/MTConnect.NET-Common/Devices/DataItems/LocationSpatialGeographicDataItem.g.cs b/libraries/MTConnect.NET-Common/Devices/DataItems/LocationSpatialGeographicDataItem.g.cs new file mode 100644 index 00000000..41d91493 --- /dev/null +++ b/libraries/MTConnect.NET-Common/Devices/DataItems/LocationSpatialGeographicDataItem.g.cs @@ -0,0 +1,44 @@ +// Copyright (c) 2024 TrakHound Inc., All Rights Reserved. +// TrakHound Inc. licenses this file to you under the MIT license. + +// MTConnect SysML v2.3 : UML ID = _19_0_3_68e0225_1712322699365_211671_599 + +namespace MTConnect.Devices.DataItems +{ + /// + /// Absolute geographic location defined by two coordinates, longitude and latitude and an elevation. + /// + public class LocationSpatialGeographicDataItem : DataItem + { + public const DataItemCategory CategoryId = DataItemCategory.EVENT; + public const string TypeId = "LOCATION_SPATIAL_GEOGRAPHIC"; + public const string NameId = "locationSpatialGeographic"; + public const DataItemRepresentation DefaultRepresentation = DataItemRepresentation.TABLE; + + public new const string DescriptionText = "Absolute geographic location defined by two coordinates, longitude and latitude and an elevation."; + + public override string TypeDescription => DescriptionText; + + public override System.Version MinimumVersion => MTConnectVersions.Version23; + + + public LocationSpatialGeographicDataItem() + { + Category = CategoryId; + Type = TypeId; + Name = NameId; + Representation = DefaultRepresentation; + + } + + public LocationSpatialGeographicDataItem(string deviceId) + { + Id = CreateId(deviceId, NameId); + Category = CategoryId; + Type = TypeId; + Name = NameId; + Representation = DefaultRepresentation; + + } + } +} \ No newline at end of file diff --git a/libraries/MTConnect.NET-Common/Devices/DataItems/ThicknessDataItem.g.cs b/libraries/MTConnect.NET-Common/Devices/DataItems/ThicknessDataItem.g.cs new file mode 100644 index 00000000..b59b9762 --- /dev/null +++ b/libraries/MTConnect.NET-Common/Devices/DataItems/ThicknessDataItem.g.cs @@ -0,0 +1,102 @@ +// Copyright (c) 2024 TrakHound Inc., All Rights Reserved. +// TrakHound Inc. licenses this file to you under the MIT license. + +// MTConnect SysML v2.3 : UML ID = _19_0_3_68e0225_1712321222573_635969_358 + +namespace MTConnect.Devices.DataItems +{ + /// + /// Dimension between two surfaces of an object, usually the dimension of smallest measure, for example an additive layer, or a depth of cut. + /// + public class ThicknessDataItem : DataItem + { + public const DataItemCategory CategoryId = DataItemCategory.EVENT; + public const string TypeId = "THICKNESS"; + public const string NameId = "thickness"; + public const DataItemRepresentation DefaultRepresentation = DataItemRepresentation.VALUE; + + public new const string DescriptionText = "Dimension between two surfaces of an object, usually the dimension of smallest measure, for example an additive layer, or a depth of cut."; + + public override string TypeDescription => DescriptionText; + + + + + public enum SubTypes + { + /// + /// ACTUAL. + /// + ACTUAL, + + /// + /// COMMANDED. + /// + COMMANDED, + + /// + /// TARGET. + /// + TARGET, + + /// + /// PROGRAMMED. + /// + PROGRAMMED + } + + + public ThicknessDataItem() + { + Category = CategoryId; + Type = TypeId; + Name = NameId; + Representation = DefaultRepresentation; + + } + + public ThicknessDataItem( + string parentId, + SubTypes subType + ) + { + Id = CreateId(parentId, NameId, GetSubTypeId(subType)); + Category = CategoryId; + Type = TypeId; + SubType = subType.ToString(); + Name = NameId; + Representation = DefaultRepresentation; + + } + + public override string SubTypeDescription => GetSubTypeDescription(SubType); + + public static string GetSubTypeDescription(string subType) + { + var s = subType.ConvertEnum(); + switch (s) + { + case SubTypes.ACTUAL: return "ACTUAL."; + case SubTypes.COMMANDED: return "COMMANDED."; + case SubTypes.TARGET: return "TARGET."; + case SubTypes.PROGRAMMED: return "PROGRAMMED."; + } + + return null; + } + + public static string GetSubTypeId(SubTypes subType) + { + switch (subType) + { + case SubTypes.ACTUAL: return "ACTUAL"; + case SubTypes.COMMANDED: return "COMMANDED"; + case SubTypes.TARGET: return "TARGET"; + case SubTypes.PROGRAMMED: return "PROGRAMMED"; + } + + return null; + } + + } +} \ No newline at end of file diff --git a/libraries/MTConnect.NET-Common/Devices/NativeUnits.g.cs b/libraries/MTConnect.NET-Common/Devices/NativeUnits.g.cs index b41775f9..41a3ea6a 100644 --- a/libraries/MTConnect.NET-Common/Devices/NativeUnits.g.cs +++ b/libraries/MTConnect.NET-Common/Devices/NativeUnits.g.cs @@ -20,6 +20,11 @@ public static class NativeUnits /// public const string CENTIPOISE = "CENTIPOISE"; + /// + /// Geometric volume in feet. + /// + public const string CUBIC_FOOT = "CUBIC_FOOT"; + /// /// Change of geometric volume in cubic foot per hour. /// @@ -105,6 +110,11 @@ public static class NativeUnits /// public const string INCH_PER_MINUTE = "INCH/MINUTE"; + /// + /// Inch per revolution. + /// + public const string INCH_PER_REVOLUTION = "INCH/REVOLUTION"; + /// /// Inches per second. /// @@ -181,15 +191,20 @@ public static class NativeUnits public const string RADIAN_PER_MINUTE = "RADIAN/MINUTE"; /// - /// Rotational acceleration in radian per second squared. + /// Velocity in radians per second. /// public const string RADIAN_PER_SECOND = "RADIAN/SECOND"; /// - /// Rotational acceleration in radian per second squared. + /// Acceleration in radians per second squared. /// public const string RADIAN_PER_SECOND_SQUARED = "RADIAN/SECOND^2"; + /// + /// Geometric area in inches. + /// + public const string SQUARE_INCH = "SQUARE_INCH"; + /// /// Pressure in Torr. /// diff --git a/libraries/MTConnect.NET-Common/Devices/NativeUnitsDescriptions.g.cs b/libraries/MTConnect.NET-Common/Devices/NativeUnitsDescriptions.g.cs index 70c9cf1d..eed6ac73 100644 --- a/libraries/MTConnect.NET-Common/Devices/NativeUnitsDescriptions.g.cs +++ b/libraries/MTConnect.NET-Common/Devices/NativeUnitsDescriptions.g.cs @@ -20,6 +20,11 @@ public static class NativeUnitsDescriptions /// public const string CENTIPOISE = "Measure of viscosity."; + /// + /// Geometric volume in feet. + /// + public const string CUBIC_FOOT = "Geometric volume in feet."; + /// /// Change of geometric volume in cubic foot per hour. /// @@ -105,6 +110,11 @@ public static class NativeUnitsDescriptions /// public const string INCH_PER_MINUTE = "Inches per minute."; + /// + /// Inch per revolution. + /// + public const string INCH_PER_REVOLUTION = "Inch per revolution."; + /// /// Inches per second. /// @@ -181,14 +191,19 @@ public static class NativeUnitsDescriptions public const string RADIAN_PER_MINUTE = "Velocity in radians per minute."; /// - /// Rotational acceleration in radian per second squared. + /// Velocity in radians per second. + /// + public const string RADIAN_PER_SECOND = "Velocity in radians per second."; + + /// + /// Acceleration in radians per second squared. /// - public const string RADIAN_PER_SECOND = "Rotational acceleration in radian per second squared."; + public const string RADIAN_PER_SECOND_SQUARED = "Acceleration in radians per second squared."; /// - /// Rotational acceleration in radian per second squared. + /// Geometric area in inches. /// - public const string RADIAN_PER_SECOND_SQUARED = "Rotational acceleration in radian per second squared."; + public const string SQUARE_INCH = "Geometric area in inches."; /// /// Pressure in Torr. @@ -203,6 +218,7 @@ public static string Get(string value) case NativeUnits.AMPERE_HOUR: return "Electric charge in ampere hour."; case NativeUnits.BAR: return "Pressure in Bar."; case NativeUnits.CENTIPOISE: return "Measure of viscosity."; + case NativeUnits.CUBIC_FOOT: return "Geometric volume in feet."; case NativeUnits.CUBIC_FOOT_PER_HOUR: return "Change of geometric volume in cubic foot per hour."; case NativeUnits.CUBIC_FOOT_PER_MINUTE: return "Change of geometric volume in cubic foot per minute."; case NativeUnits.DEGREE_PER_MINUTE: return "Rotational velocity in degrees per minute."; @@ -220,6 +236,7 @@ public static string Get(string value) case NativeUnits.INCH_3D: return "Point in space identified by X, Y, and Z positions and represented by a space-delimited set of numbers each expressed in inches."; case NativeUnits.INCH_POUND: return "Measure of torque in inch pounds."; case NativeUnits.INCH_PER_MINUTE: return "Inches per minute."; + case NativeUnits.INCH_PER_REVOLUTION: return "Inch per revolution."; case NativeUnits.INCH_PER_SECOND: return "Inches per second."; case NativeUnits.INCH_PER_SECOND_SQUARED: return "Acceleration in inches per second squared."; case NativeUnits.KELVIN: return "Measurement of temperature."; @@ -235,8 +252,9 @@ public static string Get(string value) case NativeUnits.POUND_PER_INCH_SQUARED: return "Pressure in pounds per square inch (PSI)."; case NativeUnits.RADIAN: return "Angle in radians."; case NativeUnits.RADIAN_PER_MINUTE: return "Velocity in radians per minute."; - case NativeUnits.RADIAN_PER_SECOND: return "Rotational acceleration in radian per second squared."; - case NativeUnits.RADIAN_PER_SECOND_SQUARED: return "Rotational acceleration in radian per second squared."; + case NativeUnits.RADIAN_PER_SECOND: return "Velocity in radians per second."; + case NativeUnits.RADIAN_PER_SECOND_SQUARED: return "Acceleration in radians per second squared."; + case NativeUnits.SQUARE_INCH: return "Geometric area in inches."; case NativeUnits.TORR: return "Pressure in Torr."; } diff --git a/libraries/MTConnect.NET-Common/Devices/Units.g.cs b/libraries/MTConnect.NET-Common/Devices/Units.g.cs index 1fb0eb17..b815f785 100644 --- a/libraries/MTConnect.NET-Common/Devices/Units.g.cs +++ b/libraries/MTConnect.NET-Common/Devices/Units.g.cs @@ -30,6 +30,11 @@ public static partial class Units /// public const string COUNT_PER_SECOND = "COUNT/SECOND"; + /// + /// Geometric volume in meters. + /// + public const string CUBIC_METER = "CUBIC_METER"; + /// /// Geometric volume in millimeters. /// @@ -220,6 +225,11 @@ public static partial class Units /// public const string SIEMENS_PER_METER = "SIEMENS/METER"; + /// + /// Geometric area in millimeters. + /// + public const string SQUARE_MILLIMETER = "SQUARE_MILLIMETER"; + /// /// 3D Unit Vector.Space delimited list of three floating point numbers. /// diff --git a/libraries/MTConnect.NET-Common/Devices/UnitsDescriptions.g.cs b/libraries/MTConnect.NET-Common/Devices/UnitsDescriptions.g.cs index 21cc084f..37ce16c1 100644 --- a/libraries/MTConnect.NET-Common/Devices/UnitsDescriptions.g.cs +++ b/libraries/MTConnect.NET-Common/Devices/UnitsDescriptions.g.cs @@ -30,6 +30,11 @@ public static class UnitsDescriptions /// public const string COUNT_PER_SECOND = "Counts per second."; + /// + /// Geometric volume in meters. + /// + public const string CUBIC_METER = "Geometric volume in meters."; + /// /// Geometric volume in millimeters. /// @@ -220,6 +225,11 @@ public static class UnitsDescriptions /// public const string SIEMENS_PER_METER = "Measurement of electrical conductivity."; + /// + /// Geometric area in millimeters. + /// + public const string SQUARE_MILLIMETER = "Geometric area in millimeters."; + /// /// 3D Unit Vector.Space delimited list of three floating point numbers. /// @@ -260,6 +270,7 @@ public static string Get(string value) case Units.COULOMB: return "Electric charge in coulombs (C)."; case Units.COUNT: return "Count of something."; case Units.COUNT_PER_SECOND: return "Counts per second."; + case Units.CUBIC_METER: return "Geometric volume in meters."; case Units.CUBIC_MILLIMETER: return "Geometric volume in millimeters."; case Units.CUBIC_MILLIMETER_PER_SECOND: return "Change of geometric volume per second."; case Units.CUBIC_MILLIMETER_PER_SECOND_SQUARED: return "Change in geometric volume per second squared."; @@ -298,6 +309,7 @@ public static string Get(string value) case Units.REVOLUTION_PER_SECOND_SQUARED: return "Revolutions per second squared."; case Units.SECOND: return "Measurement of time."; case Units.SIEMENS_PER_METER: return "Measurement of electrical conductivity."; + case Units.SQUARE_MILLIMETER: return "Geometric area in millimeters."; case Units.UNIT_VECTOR_3D: return "3D Unit Vector.Space delimited list of three floating point numbers."; case Units.VOLT: return "Volts."; case Units.VOLT_AMPERE: return "Measurement of the apparent power in an electrical circuit, equal to the product of root-mean-square (RMS) voltage and RMS current (commonly referred to as VA)."; diff --git a/libraries/MTConnect.NET-Common/MTConnectVersions.cs b/libraries/MTConnect.NET-Common/MTConnectVersions.cs index 0d05165f..6394d429 100644 --- a/libraries/MTConnect.NET-Common/MTConnectVersions.cs +++ b/libraries/MTConnect.NET-Common/MTConnectVersions.cs @@ -7,7 +7,7 @@ namespace MTConnect { public static class MTConnectVersions { - public static Version Max => Version23; + public static Version Max => Version24; public static readonly Version Version10 = new Version(1, 0); public static readonly Version Version11 = new Version(1, 1); @@ -22,5 +22,6 @@ public static class MTConnectVersions public static readonly Version Version21 = new Version(2, 1); public static readonly Version Version22 = new Version(2, 2); public static readonly Version Version23 = new Version(2, 3); + public static readonly Version Version24 = new Version(2, 4); } } \ No newline at end of file diff --git a/libraries/MTConnect.NET-Common/Observations/Events/LocationSpatialGeographicResult.g.cs b/libraries/MTConnect.NET-Common/Observations/Events/LocationSpatialGeographicResult.g.cs new file mode 100644 index 00000000..114795b5 --- /dev/null +++ b/libraries/MTConnect.NET-Common/Observations/Events/LocationSpatialGeographicResult.g.cs @@ -0,0 +1,39 @@ +// Copyright (c) 2024 TrakHound Inc., All Rights Reserved. +// TrakHound Inc. licenses this file to you under the MIT license. + +namespace MTConnect.Observations.Events +{ + /// + /// + /// + public class LocationSpatialGeographicResult : EventDataSetObservation + { + + /// + /// Height relative to a reference. + /// + public string Altitude + { + get => GetValue("DataSet[Altitude]"); + set => AddValue("DataSet[Altitude]", value); + } + + /// + /// Geographic latitude. + /// + public string Latitude + { + get => GetValue("DataSet[Latitude]"); + set => AddValue("DataSet[Latitude]", value); + } + + /// + /// Geographic longitude. + /// + public string Longitude + { + get => GetValue("DataSet[Longitude]"); + set => AddValue("DataSet[Longitude]", value); + } + } +} \ No newline at end of file diff --git a/libraries/MTConnect.NET-Common/Streams/ComponentStream.cs b/libraries/MTConnect.NET-Common/Streams/ComponentStream.cs index 8884491c..4e15b870 100644 --- a/libraries/MTConnect.NET-Common/Streams/ComponentStream.cs +++ b/libraries/MTConnect.NET-Common/Streams/ComponentStream.cs @@ -42,7 +42,7 @@ public class ComponentStream : IComponentStream public string NativeName { get; set; } /// - /// Uuid of the ComponentStream element. + /// Uuid of the Component Associated with the ComponentStream /// public string Uuid { get; set; } diff --git a/libraries/MTConnect.NET-Common/Streams/IComponentStream.cs b/libraries/MTConnect.NET-Common/Streams/IComponentStream.cs index a1555336..fc9e62b7 100644 --- a/libraries/MTConnect.NET-Common/Streams/IComponentStream.cs +++ b/libraries/MTConnect.NET-Common/Streams/IComponentStream.cs @@ -38,7 +38,7 @@ public interface IComponentStream string NativeName { get; } /// - /// Uuid of the ComponentStream element. + /// Uuid of the Component Associated with the ComponentStream /// string Uuid { get; } diff --git a/libraries/MTConnect.NET-JSON-cppagent/Streams/JsonEvents.g.cs b/libraries/MTConnect.NET-JSON-cppagent/Streams/JsonEvents.g.cs index 5baefe65..97c48fba 100644 --- a/libraries/MTConnect.NET-JSON-cppagent/Streams/JsonEvents.g.cs +++ b/libraries/MTConnect.NET-JSON-cppagent/Streams/JsonEvents.g.cs @@ -267,6 +267,14 @@ public List Observations if (!LocationAddressDataSet.IsNullOrEmpty()) foreach (var x in LocationAddressDataSet) l.Add(x.ToObservation(LocationAddressDataItem.TypeId)); if (!LocationAddressTable.IsNullOrEmpty()) foreach (var x in LocationAddressTable) l.Add(x.ToObservation(LocationAddressDataItem.TypeId)); + if (!LocationNarrative.IsNullOrEmpty()) foreach (var x in LocationNarrative) l.Add(x.ToObservation(LocationNarrativeDataItem.TypeId)); + if (!LocationNarrativeDataSet.IsNullOrEmpty()) foreach (var x in LocationNarrativeDataSet) l.Add(x.ToObservation(LocationNarrativeDataItem.TypeId)); + if (!LocationNarrativeTable.IsNullOrEmpty()) foreach (var x in LocationNarrativeTable) l.Add(x.ToObservation(LocationNarrativeDataItem.TypeId)); + + if (!LocationSpatialGeographic.IsNullOrEmpty()) foreach (var x in LocationSpatialGeographic) l.Add(x.ToObservation(LocationSpatialGeographicDataItem.TypeId)); + if (!LocationSpatialGeographicDataSet.IsNullOrEmpty()) foreach (var x in LocationSpatialGeographicDataSet) l.Add(x.ToObservation(LocationSpatialGeographicDataItem.TypeId)); + if (!LocationSpatialGeographicTable.IsNullOrEmpty()) foreach (var x in LocationSpatialGeographicTable) l.Add(x.ToObservation(LocationSpatialGeographicDataItem.TypeId)); + if (!LockState.IsNullOrEmpty()) foreach (var x in LockState) l.Add(x.ToObservation(LockStateDataItem.TypeId)); if (!LockStateDataSet.IsNullOrEmpty()) foreach (var x in LockStateDataSet) l.Add(x.ToObservation(LockStateDataItem.TypeId)); if (!LockStateTable.IsNullOrEmpty()) foreach (var x in LockStateTable) l.Add(x.ToObservation(LockStateDataItem.TypeId)); @@ -471,6 +479,10 @@ public List Observations if (!SpindleInterlockDataSet.IsNullOrEmpty()) foreach (var x in SpindleInterlockDataSet) l.Add(x.ToObservation(SpindleInterlockDataItem.TypeId)); if (!SpindleInterlockTable.IsNullOrEmpty()) foreach (var x in SpindleInterlockTable) l.Add(x.ToObservation(SpindleInterlockDataItem.TypeId)); + if (!Thickness.IsNullOrEmpty()) foreach (var x in Thickness) l.Add(x.ToObservation(ThicknessDataItem.TypeId)); + if (!ThicknessDataSet.IsNullOrEmpty()) foreach (var x in ThicknessDataSet) l.Add(x.ToObservation(ThicknessDataItem.TypeId)); + if (!ThicknessTable.IsNullOrEmpty()) foreach (var x in ThicknessTable) l.Add(x.ToObservation(ThicknessDataItem.TypeId)); + if (!ToolAssetId.IsNullOrEmpty()) foreach (var x in ToolAssetId) l.Add(x.ToObservation(ToolAssetIdDataItem.TypeId)); if (!ToolAssetIdDataSet.IsNullOrEmpty()) foreach (var x in ToolAssetIdDataSet) l.Add(x.ToObservation(ToolAssetIdDataItem.TypeId)); if (!ToolAssetIdTable.IsNullOrEmpty()) foreach (var x in ToolAssetIdTable) l.Add(x.ToObservation(ToolAssetIdDataItem.TypeId)); @@ -1175,6 +1187,26 @@ public List Observations public IEnumerable LocationAddressTable { get; set; } + [JsonPropertyName("LocationNarrative")] + public IEnumerable LocationNarrative { get; set; } + + [JsonPropertyName("LocationNarrativeDataSet")] + public IEnumerable LocationNarrativeDataSet { get; set; } + + [JsonPropertyName("LocationNarrativeTable")] + public IEnumerable LocationNarrativeTable { get; set; } + + + [JsonPropertyName("LocationSpatialGeographic")] + public IEnumerable LocationSpatialGeographic { get; set; } + + [JsonPropertyName("LocationSpatialGeographicDataSet")] + public IEnumerable LocationSpatialGeographicDataSet { get; set; } + + [JsonPropertyName("LocationSpatialGeographicTable")] + public IEnumerable LocationSpatialGeographicTable { get; set; } + + [JsonPropertyName("LockState")] public IEnumerable LockState { get; set; } @@ -1685,6 +1717,16 @@ public List Observations public IEnumerable SpindleInterlockTable { get; set; } + [JsonPropertyName("Thickness")] + public IEnumerable Thickness { get; set; } + + [JsonPropertyName("ThicknessDataSet")] + public IEnumerable ThicknessDataSet { get; set; } + + [JsonPropertyName("ThicknessTable")] + public IEnumerable ThicknessTable { get; set; } + + [JsonPropertyName("ToolAssetId")] public IEnumerable ToolAssetId { get; set; } @@ -4189,6 +4231,80 @@ public JsonEvents(IEnumerable observations) } + // Add LocationNarrative + typeObservations = observations.Where(o => o.Type == LocationNarrativeDataItem.TypeId && o.Representation == DataItemRepresentation.VALUE); + if (!typeObservations.IsNullOrEmpty()) + { + var jsonObservations = new List(); + foreach (var observation in typeObservations) + { + jsonObservations.Add(new JsonEventValue(observation)); + } + LocationNarrative = jsonObservations; + } + + // Add LocationNarrativeDataSet + typeObservations = observations.Where(o => o.Type == LocationNarrativeDataItem.TypeId && o.Representation == DataItemRepresentation.DATA_SET); + if (!typeObservations.IsNullOrEmpty()) + { + var jsonObservations = new List(); + foreach (var observation in typeObservations) + { + jsonObservations.Add(new JsonEventDataSet(observation)); + } + LocationNarrativeDataSet = jsonObservations; + } + + // Add LocationNarrativeTable + typeObservations = observations.Where(o => o.Type == LocationNarrativeDataItem.TypeId && o.Representation == DataItemRepresentation.TABLE); + if (!typeObservations.IsNullOrEmpty()) + { + var jsonObservations = new List(); + foreach (var observation in typeObservations) + { + jsonObservations.Add(new JsonEventTable(observation)); + } + LocationNarrativeTable = jsonObservations; + } + + + // Add LocationSpatialGeographic + typeObservations = observations.Where(o => o.Type == LocationSpatialGeographicDataItem.TypeId && o.Representation == DataItemRepresentation.VALUE); + if (!typeObservations.IsNullOrEmpty()) + { + var jsonObservations = new List(); + foreach (var observation in typeObservations) + { + jsonObservations.Add(new JsonEventValue(observation)); + } + LocationSpatialGeographic = jsonObservations; + } + + // Add LocationSpatialGeographicDataSet + typeObservations = observations.Where(o => o.Type == LocationSpatialGeographicDataItem.TypeId && o.Representation == DataItemRepresentation.DATA_SET); + if (!typeObservations.IsNullOrEmpty()) + { + var jsonObservations = new List(); + foreach (var observation in typeObservations) + { + jsonObservations.Add(new JsonEventDataSet(observation)); + } + LocationSpatialGeographicDataSet = jsonObservations; + } + + // Add LocationSpatialGeographicTable + typeObservations = observations.Where(o => o.Type == LocationSpatialGeographicDataItem.TypeId && o.Representation == DataItemRepresentation.TABLE); + if (!typeObservations.IsNullOrEmpty()) + { + var jsonObservations = new List(); + foreach (var observation in typeObservations) + { + jsonObservations.Add(new JsonEventTable(observation)); + } + LocationSpatialGeographicTable = jsonObservations; + } + + // Add LockState typeObservations = observations.Where(o => o.Type == LockStateDataItem.TypeId && o.Representation == DataItemRepresentation.VALUE); if (!typeObservations.IsNullOrEmpty()) @@ -6076,6 +6192,43 @@ public JsonEvents(IEnumerable observations) } + // Add Thickness + typeObservations = observations.Where(o => o.Type == ThicknessDataItem.TypeId && o.Representation == DataItemRepresentation.VALUE); + if (!typeObservations.IsNullOrEmpty()) + { + var jsonObservations = new List(); + foreach (var observation in typeObservations) + { + jsonObservations.Add(new JsonEventValue(observation)); + } + Thickness = jsonObservations; + } + + // Add ThicknessDataSet + typeObservations = observations.Where(o => o.Type == ThicknessDataItem.TypeId && o.Representation == DataItemRepresentation.DATA_SET); + if (!typeObservations.IsNullOrEmpty()) + { + var jsonObservations = new List(); + foreach (var observation in typeObservations) + { + jsonObservations.Add(new JsonEventDataSet(observation)); + } + ThicknessDataSet = jsonObservations; + } + + // Add ThicknessTable + typeObservations = observations.Where(o => o.Type == ThicknessDataItem.TypeId && o.Representation == DataItemRepresentation.TABLE); + if (!typeObservations.IsNullOrEmpty()) + { + var jsonObservations = new List(); + foreach (var observation in typeObservations) + { + jsonObservations.Add(new JsonEventTable(observation)); + } + ThicknessTable = jsonObservations; + } + + // Add ToolAssetId typeObservations = observations.Where(o => o.Type == ToolAssetIdDataItem.TypeId && o.Representation == DataItemRepresentation.VALUE); if (!typeObservations.IsNullOrEmpty()) diff --git a/libraries/MTConnect.NET-XML/MTConnectVersion.cs b/libraries/MTConnect.NET-XML/MTConnectVersion.cs index bcf06116..5759aefe 100644 --- a/libraries/MTConnect.NET-XML/MTConnectVersion.cs +++ b/libraries/MTConnect.NET-XML/MTConnectVersion.cs @@ -23,6 +23,7 @@ public static Version GetByNamespace(string ns) { if (ns != null) { + if (Namespaces.Version23.Match(ns)) return MTConnectVersions.Version24; if (Namespaces.Version23.Match(ns)) return MTConnectVersions.Version23; if (Namespaces.Version22.Match(ns)) return MTConnectVersions.Version22; if (Namespaces.Version21.Match(ns)) return MTConnectVersions.Version21; diff --git a/libraries/MTConnect.NET-XML/Namespaces.cs b/libraries/MTConnect.NET-XML/Namespaces.cs index 108075ff..93f29673 100644 --- a/libraries/MTConnect.NET-XML/Namespaces.cs +++ b/libraries/MTConnect.NET-XML/Namespaces.cs @@ -81,6 +81,7 @@ public static string GetDevices(int majorVerion, int minorVersion) case 1: return Version21.Devices; case 2: return Version22.Devices; case 3: return Version23.Devices; + case 4: return Version24.Devices; } break; @@ -119,6 +120,7 @@ public static string GetStreams(int majorVerion, int minorVersion) case 1: return Version21.Streams; case 2: return Version22.Streams; case 3: return Version23.Streams; + case 4: return Version24.Streams; } break; @@ -207,6 +209,7 @@ public static string GetAssets(int majorVerion, int minorVersion) case 1: return Version21.Assets; case 2: return Version22.Assets; case 3: return Version23.Assets; + case 4: return Version24.Assets; } break; @@ -244,6 +247,7 @@ public static string GetError(int majorVerion, int minorVersion) case 1: return Version21.Error; case 2: return Version22.Error; case 3: return Version23.Error; + case 4: return Version24.Error; } break; @@ -267,6 +271,19 @@ public static string Clear(string xml) } + internal static class Version24 + { + public const string Assets = "urn:mtconnect.org:MTConnectAssets:2.4"; + public const string Devices = "urn:mtconnect.org:MTConnectDevices:2.4"; + public const string Error = "urn:mtconnect.org:MTConnectError:2.4"; + public const string Streams = "urn:mtconnect.org:MTConnectStreams:2.4"; + + public static bool Match(string ns) + { + return ns == Assets || ns == Devices || ns == Error || ns == Streams; + } + } + internal static class Version23 { public const string Assets = "urn:mtconnect.org:MTConnectAssets:2.3"; diff --git a/libraries/MTConnect.NET/README-Nuget.md b/libraries/MTConnect.NET/README-Nuget.md index b2585484..d0f2c070 100644 --- a/libraries/MTConnect.NET/README-Nuget.md +++ b/libraries/MTConnect.NET/README-Nuget.md @@ -4,11 +4,11 @@ [![MTConnect.NET](https://github.com/TrakHound/MTConnect.NET/actions/workflows/dotnet.yml/badge.svg)](https://github.com/TrakHound/MTConnect.NET/actions/workflows/dotnet.yml) -> **New Release 5/13/2024** : Version 6.4 Released with new Agent, Adapter, & SysML Import +> **New Release 10/21/2024** : Version 6.5 Released with support for MTConnect v2.4 ## Overview -MTConnect.NET is a fully featured and fully Open Source **[.NET](https://dotnet.microsoft.com/)** library for **[MTConnect](https://www.mtconnect.org/)** to develop Agents, Adapters, and Clients. Supports MTConnect Versions up to 2.3. A pre-compiled Agent application is available to download as well as an Adapter application that can be easily customized. +MTConnect.NET is a fully featured and fully Open Source **[.NET](https://dotnet.microsoft.com/)** library for **[MTConnect](https://www.mtconnect.org/)** to develop Agents, Adapters, and Clients. Supports MTConnect Versions up to 2.4. A pre-compiled Agent application is available to download as well as an Adapter application that can be easily customized. - .NET Native MTConnect Agent - Adapter framework used to send data to an MTConnect Agent @@ -18,7 +18,7 @@ MTConnect.NET is a fully featured and fully Open Source **[.NET](https://dotnet. - Module based Agent & Adapter architecture - Supports running as Windows Service with easy to use command line arguments - Presistent Agent Buffers that are backed up on the File System. Retains state after Agent is restarted -- Fully compatible up to the latest MTConnect v2.3 +- Fully compatible up to the latest MTConnect v2.4 - Kept up to date by utilizing the MTConnect SysML Model to generate source files - Supports multiple MTConnect Version output. Automatically removes data that is not compatible with the requested version - Full client support for requesting data from any MTConnect Agent (Probe, Current, Sample Stream, Assets, etc.).