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..8ab0977 --- /dev/null +++ b/templates/PMLMLNetPredictTemplate/PMLMLNetPredictTemplate.pmlfnc @@ -0,0 +1,61 @@ +-------------------------------------------------------------------------------------------------- +-- +-- (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 + !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() + + --Add features to your Predict Object + !features = object FEATUREOPTIONS() + + -- Repeat for all features you want to include + !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) + + --Get predictions + !predictions = object ARRAY() + !predictions.append(!predictHelper.PredictValue()) + + return !predictions + +endfunction diff --git a/templates/README.md b/templates/README.md index f439668..9207436 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 +- **PMLMLNetPredictTemplate.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: