Create Script Expressions, Tasks and Classes.
Tutorials → Scripts| Tutorial | How-to Guide | Reference
Prerequisites:
In this page: Table of Contents maxLevel 2 minLevel 2 indent 10px exclude StepsTutorial style none
Scripts → Tutorial | Concept | How-to Guide | Reference
SimpleTemperature Conversion:
Create TagName:Field | Value |
---|---|
Object | Tag.Tank1_TempF ( |
create as Double) |
Expression |
Tag.Tank1_ |
Temp * 1.8 + 32 | |
Execution | OnChange |
Domain | Server |
Add status logic:
Field | Value |
---|---|
Object | Tag. |
Conditional Logic:
Create TagName:System_Status ( |
create as String) |
Expression |
TIF(Tag.Tank1_Status = 2, "Running" |
, "Stopped") | |
Execution | OnChange |
Domain | Server |
Production Counter:
csharp
ShiftCounter
Server.DateTimeInfo.Hour
as Trigger// Reset counter at shift change
DateTimeint nowhour = DateTime@Server.DateTimeInfo.NowHour;
if (now.Hourhour == 6 || now.Hourhour == 14 || now.Hourhour == 22)
{
if (@Tag.ShiftReset == false)
{
@Tag.Units_Previous = @Tag.Units_Produced;
@Tag.Units_Produced = 0;
@Tag.ShiftReset = true;
}
}
else
{
@Tag.ShiftReset = false;
}
Configure:
TankCalculations:
csharp
TankCalculations
public public static double CalculateVolume(double level, double diameter)
{
double radius = diameter / 2;
return Math.PI * radius * radius * level;
}
public static double FlowRateCalculateFlowRate(double volumeStart, double volumeEnd, int minutes)
{
if (minutes == 0) return {0;
return (volumeEnd - volumeStart) / minutes;
}
public static string GetAlarmTextGetStatusText(double value, double limit)
{
if (value > limit)
return $"High: {value:F2} (Limit: {limit:F2})";
else
return "Normal";
}
In tag expressions:
csharp
@ScriptField | Value |
---|---|
Object | Tag.Tank1_Volume |
Expression | Script.Class.TankCalculations.CalculateVolume( |
Tag.Tank1_Level, |
10.5) |
python
import numpy as np
from datetime import datetime
def calculate_statistics(values):
"""Calculate statistical values"""
arr = np.array(values)
return {
'mean': np.mean(arr),
'std': np.std(arr),
'max': np.max(arr),
'min': np.min(arr)
}
def predict_value(history, hours_ahead):
"""Simple linear prediction"""
# Implementation here
return predicted_value
# Set tag values
tags['Stats_Mean'] = calculate_statistics(history)['mean']
Create event handler:
csharp
// On tag change event
public void OnTemperatureChange()
{
if (@Tag.Tank1_Temperature > @Tag.HighLimit)
{
@Tag.Alarm_Active = true;
@Script.Class.Notifications.SendEmail(
"operator@company.com",
"High Temperature Alert",
$"Tank 1: {@Tag.Tank1_Temperature}°C"
);
}
}
Bind to tag:
Execution | OnChange |
Note: No @ symbol needed in expressions
Excerpt Include | ||||||
---|---|---|---|---|---|---|
|
Page Tree | ||||
---|---|---|---|---|
|