Skip to content

Script examples

A screen Cycle event. When the logic is simpler than animation conditions, a script can colour the element itself.

var state = Tags("Pump1.State").Value;
var pump = Screen.Items("Pump1");
pump.Children("Label").Text = HMI.TextList("States", state);
pump.Children("Body").Fill = state === 2 ? "#D32F2F" : state === 1 ? "#3C9A5F" : "#F2F3F4";

Element names start with an area prefix.

Screen.All()
.filter(function (e) { return e.Name.indexOf("Area2.") === 0; })
.forEach(function (e) { e.Visible = false; });
Screen.All().forEach(function (e) {
if (!e.Has("Tag") || !e.Tag) return;
e.Transparency = e.Quality === "Good" ? 0 : 60;
});
var manual = Tags("Line.Mode").Value === 0;
["StartButton", "StopButton", "Setpoint"].forEach(function (name) {
Screen.Items(name).Enabled = manual;
});

The question comes first because a browser runs the script again after it.

if (!HMI.Confirm("Start the pump?")) return;
var fault = Tags("Pump1.Fault");
if (fault.Quality !== "Good" || fault.Value) {
HMI.ShowMessage("Start blocked: fault or no communication");
return;
}
Tags("Pump1.Start").Write(true);
Item.Text = "Starting…";
// Left press event
Item.Fill = "#2F6FB0";
// Left release event
Item.Reset();

One gauge shows the selected pump.

var pump = Screen.Items("Selector").Value;
Screen.Items("Gauge").Tag = "Pump" + pump + ".Speed";
Screen.Items("Label").Text = "Pump " + pump;
var pens = ["Tank1.Level", "Tank2.Level", "Tank3.Level"].map(function (tag) {
return { tag: tag };
});
var trend = Screen.Items("Trend");
trend.RangeMinutes = 480;
trend.Apply({ penList: pens });
HMI.RunServerScript("closeOrder", Item.Text);
Screen.Items("OrdersTable").Reload();
var box = Screen.Items("Diagram");
var events = box.Config.events || {};
events.Click = { functions: [{ function: "ActivateScreen", args: { Screen: "Details" } }] };
box.Apply({ events: events });

A Condition task: Pump1.Run = true.

var starts = Tags("Pump1.Starts").Value || 0;
Tags("Pump1.Starts").Write(starts + 1);
Log.Info("Start no. " + (starts + 1));

A Daily task at 08:00.

var total = Tags("Line.Count").Value;
Db.Execute("Journal", "INSERT INTO Shift(Time, Total) VALUES(?, ?)", [Server.Now, total]);
Tags("Line.Count").Write(0);
function loadRecipe(name) {
var rows = File.ReadCsv("recipes/" + name + ".csv");
rows.slice(1).forEach(function (row) {
Tags(row[0]).Write(Number(row[1]));
});
Log.Info(Trigger.User + " loaded recipe " + name);
}

A Tag change task on Tank1.Level.

if (Trigger.Value === null) return;
if (Trigger.Value > 9 && Tags("Pump1.Start").Value) {
Tags("Pump1.Start").Write(false);
Log.Warn("Pump stopped: high level");
}