You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 12 Current »

Scripts & Data Enrichment (Tutorial) teaches you to:

  • Create calculated tags using expressions
  • Build reusable logic with Script Classes
  • Automate processes with Script Tasks
  • Handle events and data transformations
  • Monitor script performance and debugging

Prerequisites:

In this page:



Scripts → Tutorial | Concept | How-to Guide | Reference



Create Tag Expressions

  1. Navigate to Scripts → Expressions
  2. Add temperature conversion:
FieldValue
ObjectTag.Tank1_TempF (create as Double)
ExpressionTag.Tank1_Temp * 1.8 + 32
ExecutionOnChange
DomainServer
  1. Add status logic:
FieldValue
ObjectTag.System_Status (create as String)
ExpressionTIF(Tag.Tank1_Status = 2, "Running", "Stopped")
ExecutionOnChange
DomainServer

Create Script Task

  1. Go to Scripts → Tasks
  2. Click plus icon, name: ShiftCounter
  3. Double-click to open Code Editor
  4. Enter code (no method wrapper):

csharp

// Reset counter at shift change
DateTime now = DateTime.Now;
if (now.Hour == 6 || now.Hour == 14 || now.Hour == 22)
{
    if (@Tag.ShiftReset == false)
    {
        @Tag.Units_Previous = @Tag.Units_Produced;
        @Tag.Units_Produced = 0;
        @Tag.ShiftReset = true;
    }
}
else
{
    @Tag.ShiftReset = false;
}

Configure:

  • Trigger: Period
  • Period: 60000 (1 minute)
  • Domain: Server

Build Script Class

  1. Navigate to Scripts → Classes
  2. Create class: TankCalculations
  3. Enter methods (no class declaration):

csharp

public double CalculateVolume(double level, double diameter)
{
    double radius = diameter / 2;
    return Math.PI * radius * radius * level;
}

public double CalculateFlowRate(double volumeStart, double volumeEnd, int minutes)
{
    if (minutes == 0) return 0;
    return (volumeEnd - volumeStart) / minutes;
}

public string GetStatusText(double value, double limit)
{
    if (value > limit)
        return $"High: {value:F2} (Limit: {limit:F2})";
    else
        return "Normal";
}

Use Class in Expression

  1. Go to Scripts → Expressions
  2. Create volume calculation:
FieldValue
ObjectTag.Tank1_Volume
ExpressionScript.Class.TankCalculations.CalculateVolume(Tag.Tank1_Level, 10.5)
ExecutionOnChange

Note: No @ symbol needed in expressions


Event-Driven Task

  1. Create task: TemperatureMonitor
  2. Configure trigger on tag change:

csharp

if (@Tag.Tank1_Temp > @Tag.HighLimit)
{
    @Tag.Alarm_Active = true;
    @Tag.Alarm_Message = $"High Temperature: {@Tag.Tank1_Temp:F1}°C";
    @Tag.Alarm_Time = DateTime.Now;
    
    // Log to historian
    @Script.Class.ServerMain.LogEvent(
        "Temperature Alarm",
        @Tag.Tank1_Temp
    );
}

Configure:

  • Trigger: Tag.Tank1_Temp
  • Domain: Server

Add External References

  1. Go to Scripts → References
  2. Add DLL if using external libraries
  3. Open Code Editor
  4. Click Namespace Declarations
  5. Add required namespaces

Test and Debug

  1. Build verification:
    • Check green checkmark in BuildStatus
    • Review BuildErrors if red X
  2. Runtime monitoring:
    • Go to Scripts → Monitor
    • Check ExecutionCount
    • Review LastCPUTime
  3. Debug with breakpoints:
    • Enable debug in Runtime → Build and Publish
    • Set breakpoints in Code Editor
    • Attach debugger during runtime



Step-by-step guide to add calculations, automation, and data enrichment to your TankFarm solution using Scripts module capabilities.


In this section...

The root page @parent could not be found in space 93Draft.



  • No labels