From 7ef1b74f40f9e9ae86aef0eae9b296ac5d964f30 Mon Sep 17 00:00:00 2001 From: David Nolan Date: Tue, 21 Apr 2026 17:13:58 +0100 Subject: [PATCH 1/3] Add new PML ML Net Predict Template --- .../PMLMLNetPredictTemplate.csproj | 75 +++++++++++++++++++ .../PMLMLNetPredictTemplate.pmlfnc | 50 +++++++++++++ templates/README.md | 23 ++++++ 3 files changed, 148 insertions(+) create mode 100644 templates/PMLMLNetPredictTemplate/PMLMLNetPredictTemplate.csproj create mode 100644 templates/PMLMLNetPredictTemplate/PMLMLNetPredictTemplate.pmlfnc diff --git a/templates/PMLMLNetPredictTemplate/PMLMLNetPredictTemplate.csproj b/templates/PMLMLNetPredictTemplate/PMLMLNetPredictTemplate.csproj new file mode 100644 index 0000000..75d5a5d --- /dev/null +++ b/templates/PMLMLNetPredictTemplate/PMLMLNetPredictTemplate.csproj @@ -0,0 +1,75 @@ + + + + + net481 + PMLMLNetPredictTemplate + PMLMLNetPredictTemplate + + false + false + false + false + true + false + false + false + + + CS2008;CA1016 + + + + + $(CUSTOM_PMLLIB) + $(MSBuildProjectDirectory)\..\..\pmllib\ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/PMLMLNetPredictTemplate/PMLMLNetPredictTemplate.pmlfnc b/templates/PMLMLNetPredictTemplate/PMLMLNetPredictTemplate.pmlfnc new file mode 100644 index 0000000..93c658a --- /dev/null +++ b/templates/PMLMLNetPredictTemplate/PMLMLNetPredictTemplate.pmlfnc @@ -0,0 +1,50 @@ +-------------------------------------------------------------------------------------------------- +-- +-- (c) Copyright 2024 to Current Year AVEVA Solutions Limited +-- +-- File: PMLMLNetPredictTemplate.pmlfnc +-- Author: AVEVA +-- Type: +-- Group: +-- +-- Keyword: +-- Module: AVEVA E3D Design +-- Replaces: +-- +-- +-- Description: +-- Function to get an array of predictions from your ML NET Model +----------------------------------------------------------------------------------------------------- +define function !!PMLMLNetPredictTemplate(!element is dbref) is ARRAY + + import 'Aveva.Core3D.Interaction.Generic' + handle (1000, 0) + -- Already imported, safe to ignore + elsehandle any + write /t error.text + -- TODO add sensible error handling + endhandle + + using namespace 'Aveva.Core3D.Interaction.Generic.PredictiveGenDAI' + + --Import and create an object for the Prediction + !predictHelper = object PREDICT('INSERT_ML_MODEL_NAME') + !predictHelper.LoadModel() + !featureList = !predictHelper.GetFeaturesList() + + --Add features to your Predict Object + !features = object FEATUREOPTIONS() + + -- Repeat for all features you want to include + !features.addFeature('INSERT_FEATURE_NAME', 'INSERT_FEATURE_VALUE') + + --Assign Features to predict helper to enable predictions + !predictHelper.SetFeatures(!features) + + --Get predictions + !predictions = object ARRAY() + !predictions.append(!predictHelper.PredictValue()) + + return !predictions + +endfunction diff --git a/templates/README.md b/templates/README.md index f439668..736a69c 100644 --- a/templates/README.md +++ b/templates/README.md @@ -14,6 +14,7 @@ Current template folders in this repository: - NetGridAddInTemplate - PMLExtensionTemplate - PMLGridTemplate +- PMLMLNetPredictTemplate ### DockedFormAddInTemplate @@ -250,6 +251,28 @@ You need a simple starting point for PML form/grid development and plan to build **Note:** This template is intentionally minimal compared with docked-form templates. +### PMLMLNetPredictTemplate + +**Purpose:** Template for creating ML.NET-based prediction functions callable from PML scripts. + +**Description:** +The PMLMLNetPredictTemplate provides a foundation for integrating machine learning predictions into AVEVA Unified Engineering using ML.NET. It includes: + +- **PMLMLNetPredictTemplateMethods.cs** - C# implementation of ML.NET prediction logic +- **getSuppoPrediction.pmlfnc** - PML function definition file for invoking predictions +- **PMLMLNetPredictTemplate.csproj** - C# project file with ML.NET package references + +**Use When:** +You need to integrate trained machine learning models into PML workflows, enabling data-driven predictions and intelligent automation within AVEVA Unified Engineering. + +**How to Use:** + +```powershell +.\scripts\New-UEAddin.ps1 -AddinName "MyMLPrediction" -Template "PMLMLNetPredictTemplate" +``` + +**Note:** This template requires ML.NET packages and a trained model file for full functionality. + ## Adding New Templates To add a new template to this directory: From 1565040bd2ac9fead50c328211ea018867870a7e Mon Sep 17 00:00:00 2001 From: David Nolan Date: Tue, 21 Apr 2026 17:15:44 +0100 Subject: [PATCH 2/3] Update function name in template --- templates/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/README.md b/templates/README.md index 736a69c..9207436 100644 --- a/templates/README.md +++ b/templates/README.md @@ -259,7 +259,7 @@ You need a simple starting point for PML form/grid development and plan to build The PMLMLNetPredictTemplate provides a foundation for integrating machine learning predictions into AVEVA Unified Engineering using ML.NET. It includes: - **PMLMLNetPredictTemplateMethods.cs** - C# implementation of ML.NET prediction logic -- **getSuppoPrediction.pmlfnc** - PML function definition file for invoking predictions +- **PMLMLNetPredictTemplate.pmlfnc** - PML function definition file for invoking predictions - **PMLMLNetPredictTemplate.csproj** - C# project file with ML.NET package references **Use When:** From fb6ecdb1e40734cf876360240352b7456dc8ae09 Mon Sep 17 00:00:00 2001 From: David Nolan Date: Thu, 23 Apr 2026 16:50:58 +0100 Subject: [PATCH 3/3] Add checks to ensure template has been customised before running to avoid errors --- .../PMLMLNetPredictTemplate.pmlfnc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/templates/PMLMLNetPredictTemplate/PMLMLNetPredictTemplate.pmlfnc b/templates/PMLMLNetPredictTemplate/PMLMLNetPredictTemplate.pmlfnc index 93c658a..8ab0977 100644 --- a/templates/PMLMLNetPredictTemplate/PMLMLNetPredictTemplate.pmlfnc +++ b/templates/PMLMLNetPredictTemplate/PMLMLNetPredictTemplate.pmlfnc @@ -28,7 +28,12 @@ define function !!PMLMLNetPredictTemplate(!element is dbref) is ARRAY using namespace 'Aveva.Core3D.Interaction.Generic.PredictiveGenDAI' --Import and create an object for the Prediction - !predictHelper = object PREDICT('INSERT_ML_MODEL_NAME') + !modelName = '' + if (!modelName.empty()) then + !!alert.Message('Pleae update your template code and set modelName.') + return + endif + !predictHelper = object PREDICT(!modelName) !predictHelper.LoadModel() !featureList = !predictHelper.GetFeaturesList() @@ -36,7 +41,13 @@ define function !!PMLMLNetPredictTemplate(!element is dbref) is ARRAY !features = object FEATUREOPTIONS() -- Repeat for all features you want to include - !features.addFeature('INSERT_FEATURE_NAME', 'INSERT_FEATURE_VALUE') + !featureName = '' + !featureValue = '' + if (!featureName.empty() or !featureValue.empty()) then + !!alert.Message('Please update your template code and set featureName and featureValue.') + return + endif + !features.addFeature(!featureName, !featureValue) --Assign Features to predict helper to enable predictions !predictHelper.SetFeatures(!features)