Application Modules (Store & Process)

Overview

Application Modules provide the business logic and data processing capabilities that transform raw industrial data into actionable information. These modules handle database integration, custom scripting, and report generation - enabling you to implement complex calculations, integrate with enterprise systems, and generate documentation. Together, they form the intelligence layer that processes collected data according to your business rules and requirements.

Where Application Modules Fit

Application Modules sit between data collection and visualization:

The Three Core Application Modules

Datasets Module - SQL Database Integration

Connect to and interact with relational databases:

Scripts Module - Custom Business Logic

Implement custom calculations and automation:

Reports Module - Data Exchange & Documentation

Generate and distribute information:

Datasets Module Configuration

Database Connections

Configure connections to SQL databases:

  1. Navigate to DatasetsDatabase Connections
  2. Click New Connection
  3. Configure connection properties:

Connection String Examples

sql

-- SQL Server
Server=192.168.1.100;Database=Production;User Id=sa;Password=***;

-- MySQL
Server=localhost;Database=scada;Uid=root;Pwd=***;

-- PostgreSQL
Host=localhost;Database=historian;Username=postgres;Password=***;

-- Oracle
Data Source=ORCL;User Id=system;Password=***;

Tables Configuration

Map database tables to solution:

  1. Select connection → Browse Tables
  2. Select tables to include
  3. Configure table properties:

Query Configuration

Create custom queries:

  1. Go to DatasetsQueries
  2. Click New Query
  3. Build query using:

Query Examples

sql

-- Production Summary
SELECT 
    ProductCode,
    SUM(Quantity) as TotalProduced,
    AVG(CycleTime) as AvgCycle,
    COUNT(*) as BatchCount
FROM Production
WHERE Timestamp >= @StartDate 
    AND Timestamp <= @EndDate
GROUP BY ProductCode

-- Real-time Inventory
SELECT 
    Location,
    Material,
    Quantity,
    LastUpdated
FROM Inventory
WHERE Quantity < ReorderPoint
ORDER BY Location

Stored Procedures

Execute database stored procedures:

  1. Select connection → Stored Procedures
  2. Browse available procedures
  3. Map parameters to tags:

Real-Time Synchronization

Bidirectional data sync:

Scripts Module Configuration

Script Tasks

Create scheduled or triggered scripts:

  1. Navigate to ScriptsTasks
  2. Click New Task
  3. Configure task properties:

Task Triggers

Script Examples

C# Production Calculation

csharp

public void CalculateOEE()
{
    // Read production counts
    double goodCount = @Tag.Production.GoodCount;
    double totalCount = @Tag.Production.TotalCount;
    double plannedTime = @Tag.Production.PlannedTime;
    double runTime = @Tag.Production.RunTime;
    
    // Calculate OEE components
    double availability = runTime / plannedTime;
    double performance = totalCount / @Tag.Production.IdealCount;
    double quality = goodCount / totalCount;
    
    // Calculate overall OEE
    @Tag.KPI.OEE = availability * performance * quality * 100;
    
    // Log to database
    @Dataset.Query.LogOEE.Execute();
}

Python Data Analysis

python

import statistics

def analyze_batch():
    # Get batch data
    temperatures = @Tag.Batch.TemperatureArray
    pressures = @Tag.Batch.PressureArray
    
    # Calculate statistics
    @Tag.Batch.AvgTemp = statistics.mean(temperatures)
    @Tag.Batch.StdDevTemp = statistics.stdev(temperatures)
    @Tag.Batch.MaxPressure = max(pressures)
    
    # Check quality limits
    if @Tag.Batch.StdDevTemp > 2.0:
        @Tag.Batch.QualityFlag = "Warning"
        @Alarm.Batch.QualityWarning = True

VB.NET Email Notification

vbnet

Public Sub SendProductionReport()
    Dim shift As String = @Tag.Production.CurrentShift
    Dim production As Integer = @Tag.Production.ShiftTotal
    Dim efficiency As Double = @Tag.KPI.Efficiency
    
    Dim body As String = String.Format(
        "Shift: {0}" & vbCrLf & 
        "Production: {1} units" & vbCrLf & 
        "Efficiency: {2:F1}%", 
        shift, production, efficiency)
    
    @Report.EmailReport("Production Summary", body, "supervisor@company.com")
End Sub

Script Classes

Create reusable code libraries:

  1. Go to ScriptsClasses
  2. Create class with methods
  3. Reference from tasks or displays
  4. Share across solution

Class Example

csharp

public class Calculations
{
    public static double CelsiusToFahrenheit(double celsius)
    {
        return (celsius * 9/5) + 32;
    }
    
    public static double FlowTotalization(double flow, double timeSeconds)
    {
        return flow * timeSeconds / 3600; // Convert to hours
    }
    
    public static bool InRange(double value, double min, double max)
    {
        return value >= min && value <= max;
    }
}

Expressions

Inline calculations for tags and displays:

Expression Examples

// Calculate tank volume
@Tag.Tank.Volume = @Tag.Tank.Level * 3.14159 * pow(@Tag.Tank.Radius, 2)

// Format production message
concat("Line ", @Tag.Line.Number, ": ", @Tag.Line.Status)

// Check multiple conditions
@Tag.System.Ready = @Tag.Motor1.Running && @Tag.Valve1.Open && !@Tag.Alarm.Active

// Time-based calculation
@Tag.Batch.Duration = DateDiff("s", @Tag.Batch.StartTime, now())

Reports Module Configuration

Report Designer

Create visual report templates:

  1. Navigate to ReportsDesigner
  2. Click New Report
  3. Design report layout:

Report Components

Data Sources

Connect reports to data:

Report Generation

Manual Generation

Scheduled Generation

  1. Go to ReportsSchedules
  2. Create schedule:

Report Examples

Shift Report Template

=================================
    PRODUCTION SHIFT REPORT
    {{Date}} - {{Shift}}
=================================

Production Summary:
- Total Units: {{Tag.Production.Total}}
- Good Units: {{Tag.Production.Good}}
- Reject Units: {{Tag.Production.Reject}}
- Efficiency: {{Tag.KPI.Efficiency}}%

Downtime Events:
{{Dataset.Query.DowntimeList}}

Top 5 Alarms:
{{Dataset.Query.AlarmSummary}}

Operator: {{Tag.System.CurrentUser}}
=================================

Data Export Configuration

json

{
  "export": {
    "format": "JSON",
    "schedule": "0 6 * * *",
    "destination": "ftp://server/data/",
    "content": {
      "timestamp": "@Tag.System.Time",
      "production": "@Tag.Production.*",
      "quality": "@Dataset.Query.QualityMetrics"
    }
  }
}

Integration Patterns

Pattern 1: MES Integration

Manufacturing Execution System integration:

ERP Order → Dataset → Tags → Production Logic → Dataset → ERP Feedback
                ↓                    ↓
            Work Orders         Production Data

Pattern 2: Batch Processing

Recipe management and execution:

Pattern 3: KPI Calculation

Real-time performance metrics:

Pattern 4: Regulatory Compliance

21 CFR Part 11 compliance:

Runtime Behavior

Dataset Runtime

Script Runtime

Report Runtime

Performance Optimization

Database Performance

Script Performance

Report Performance

Best Practices

Database Integration

Script Development

Report Management

Troubleshooting

SymptomLikely CauseSolution
Database connection failsWrong credentials or serverVerify connection string and network
Query returns no dataIncorrect SQL or empty tableTest query in database directly
Script not executingTrigger not firingCheck trigger configuration and logs
Script errorsSyntax or runtime errorReview error logs and debug
Report not generatingMissing data or template errorCheck data sources and preview report
Email not sendingSMTP configurationVerify email server settings
Slow query performanceMissing indexesAnalyze query plan and add indexes
Memory growth in scriptsObjects not disposedImplement proper disposal patterns

Related Topics


AI Assistant Data

<details> <summary>Structured Information for AI Tools</summary>

json

{
  "module": "Application Modules",
  "pillar": "Store & Process",
  "purpose": "Business logic implementation and data processing",
  "modules": {
    "datasets": {
      "purpose": "SQL database integration",
      "components": ["Connections", "Tables", "Queries", "Stored Procedures"],
      "databases": ["SQL Server", "MySQL", "PostgreSQL", "Oracle"],
      "features": ["Real-time sync", "Connection pooling", "Transactions"]
    },
    "scripts": {
      "purpose": "Custom business logic",
      "components": ["Tasks", "Classes", "Expressions"],
      "languages": ["C#", "VB.NET", "Python", "JavaScript"],
      "triggers": ["Periodic", "Event", "Condition", "Startup"]
    },
    "reports": {
      "purpose": "Document generation and data export",
      "components": ["Designer", "Templates", "Schedules"],
      "formats": ["PDF", "Excel", "CSV", "JSON", "XML"],
      "distribution": ["Email", "File", "FTP", "Web Service"]
    }
  },
  "commonTasks": [
    "Configure database connections",
    "Create SQL queries",
    "Write calculation scripts",
    "Schedule tasks",
    "Design reports",
    "Setup data export"
  ],
  "integrationPatterns": [
    "MES/ERP integration",
    "Batch processing",
    "KPI calculations",
    "Regulatory compliance"
  ],
  "performanceFactors": [
    "Query optimization",
    "Connection pooling",
    "Script efficiency",
    "Memory management",
    "Report caching"
  ]
}

</details>