Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

Tank Filling & Monitoring SCADA Dashboard

A standalone SCADA/HMI dashboard built in FUXA, simulating a liquid storage tank fill/drain process. This project demonstrates core SCADA engineering concepts, tag architecture, analog level monitoring, safety interlocking, alarm states, and server-side process scripting — independent of any physical or virtual PLC.


System Overview

The dashboard models a simple industrial tank system:

  1. Fill Control: Starting the pump begins raising the tank level over time.
  2. Analog Level Monitoring: A live level bar reflects the tank's fill percentage (0–100%).
  3. High-Level Safety Interlock: When the tank reaches 90%, the system automatically stops the pump and raises a high-level alarm.
  4. Low-Level Warning: When the tank drops to 10% or below, a low-level alarm is raised.
  5. Status Feedback: A pilot lamp indicates whether the pump is actively running.

Tag Architecture

Tag Name Type Purpose
Tank_Level Number Current fill percentage (0–100)
Pump_Status Number Pump running state (1 = running, 0 = off)
Drain_Valve Number Drain valve state
High_Alarm Number High-level safety alarm
Low_Alarm Number Low-level warning alarm
Start_PB Number Operator start command
Stop_PB Number Operator stop command
Tank_Rate Number Configurable fill/drain rate per cycle

All tags are internal to FUXA's own tag server — no external PLC or Modbus device is required, making this a fully self-contained simulation.


Process Logic

A server-side JavaScript script (TankLogic) runs on a fixed interval and governs the simulation:

  • Reads Start_PB / Stop_PB to determine operator intent
  • Increments Tank_Level while Pump_Status is active
  • Enforces a 90% high-level interlock: automatically stops the pump and raises High_Alarm
  • Enforces a 10% low-level warning: raises Low_Alarm
  • Resets momentary push-button tags after each action, mimicking real push-button behavior

This mirrors the same safety-interlock logic pattern used in the companion PLC-Conveyor-Control ladder logic project — translated from ladder rungs into an equivalent scripted state machine.


Operator Interaction

Dashboard elements are tag-bound and update live from the underlying process state:

  • Tank shape with proportional fill level indicator
  • START / STOP buttons for operator control
  • STATUS lamp reflecting real-time pump state

Note on interaction method: During development, a UI-layer click-event quirk in this FUXA build version was identified — button-triggered tag writes did not propagate through the same rendering path as direct tag writes (verified via server logs and browser console debugging). As a result, this dashboard is demonstrated using FUXA's built-in tag-force/test panel to drive tag states directly — a standard technique used in real SCADA commissioning and testing. All underlying process logic, safety interlocks, and visual bindings are fully functional and verified working; only the on-screen button's click handler is affected.


Debugging & Engineering Process

Getting this dashboard fully operational involved substantial hands-on troubleshooting, including:

  • Diagnosing a scripting API mismatch (getTagValue/setTagValue vs. FUXA's actual $getTag/$setTag functions) via server-side terminal error logs
  • Identifying a data-type mismatch between boolean tags and numeric shape-fill rules, and resolving it by standardizing all discrete tags to numeric type
  • Isolating a UI/script write-path inconsistency through systematic testing (manual tag force vs. scripted write vs. button click) and browser console inspection
  • Managing script execution intervals to balance live simulation behavior against demo/documentation needs

This iterative diagnostic process — reading server logs, isolating variables, testing hypotheses one at a time — reflects the same troubleshooting discipline required when commissioning real industrial control systems.


Dashboard States

Screenshots demonstrating the system across its key operating states are included in Documentation/screenshots/:

  1. Rest state — tank empty, pump off
  2. Pump running — status lamp active
  3. Mid-fill — proportional level indication

Industrial Design Considerations

  • Fail-safe interlock: High-level condition unconditionally overrides pump command, regardless of operator input
  • Separation of concerns: Process logic (script) is decoupled from visualization (tag-bound shapes), consistent with standard SCADA architecture
  • Tag-based design: All logic operates on named tags rather than hardcoded values, allowing the same dashboard to be repointed to a real Modbus/OPC device with no visual changes

Future Development

  • Resolve the click-event binding quirk and restore full on-screen button control
  • Connect to a real or virtual PLC via Modbus TCP (following the same pattern as the OpenPLC conveyor project)
  • Add a historical trend chart for Tank_Level over time
  • Add configurable fill/drain rates via the Tank_Rate tag
  • Connect to a real or virtual PLC via Modbus TCP (following the same pattern as the OpenPLC conveyor project)
  • Add a historical trend chart for Tank_Level over time
  • Add configurable fill/drain rates via the Tank_Rate tag
Screenshot (503) Screenshot (512)

About

Standalone SCADA/HMI dashboard built in FUXA simulating a tank filling and monitoring system, tag-based architecture, safety interlocking, and alarm logic, with server-side scripting for process simulation.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages