Web Port exponerar objekt och funktioner för att komma åt data i Web Port. I detta kapitel beskrivs hur dessa data kan användas i skriptet.
Taggdata
För att kunna läsa och skriva taggar från JavaScript delar Web Port ett objekt som heter tags. Detta objekt innehåller flera funktioner och här följer några exempel på hur dessa kan användas.
Exempel
Detta exempel läser ett taggvärde (AS01_GT31_PV) till en intern variabel (copy) och skriver sedan detta värde till två andra taggar
(AS02_GT31_PV och AS03_GT31_PV) i Web Port.
Skriptkod:
tags["AS01_GT31_PV"].ReadValue(Moldeo.WebPortCommon.ReadTypes.PRIORITY);
var copy = tags["AS01_GT31_PV"].Value;
tags["AS02_GT31_PV"].WriteValue(copy, true);
tags["AS03_GT31_PV"].WriteValue(copy, true);
Trenddata
Med funktionen getTrendData (string tag, DateTime from, DateTime to) returnerar Web Port en lista med tidsstämplar och trendvärden.
Exempel
Detta skript hämtar trenddata för värmeförbrukning i Wh och beräknar förbrukningen i kWh per kvadratmeter. Förbrukningen beräknas för innevarande och föregående månad och returneras i csv-format Detta exempel kan användas för att hämta data från Web Port från en godkänd anslutning, till exempel för att bäddas in på en extern sida. Data kan också användas av andra tilläggsmoduler i Web Port.
Skriptkod:
// Nyckeltal. uppvärmd m2
var nt_atemp = 44621;
// datum innevarande månad, föregående månad
var = dt_im System.DateTime.Now;
var dt_fm = dt_im.AddMonths (-1);
// Temporära variabler
var avg = 0;
var min = 0;
var max = 0;
// Beräkna värme innevarande månad
var heat_im = 0;
data = getTrendData('AS10_VMM_E', new System.DateTime
(dt_im.Year,dt_im.Month,1), dt_im);
if (data.Count > 0) {
for (i = 0; i < data.Count; i++) {
if (i == 0) {
min = data[i].Value;
max = data[i].Value;
}
if (min > data[i].Value)
min = data[i].Value;
if (max < data[i].Value)
max = data[i].Value;
}
heat_im = (max - min) * 1000 / nt_atemp;
}
// Beräkna värmen föregående månad
var heat_fm = 0;
data = getTrendData('AS10_VMM_E', new System.DateTime(dt_fm.Year,dt_fm.Month,1),
new System.DateTime(dt_fm.Year,dt_fm.Month,
System.DateTime.DaysInMonth(dt_fm.Year,dt_fm.Month),23,59,59));
if (data.Count > 0) {
for (i = 0; i < data.Count; i++) {
if (i == 0) {
min = data[i].Value;
max = data[i].Value;
}
if (min > data[i].Value)
min = data[i].Value;
if (max < data[i].Value)
max = data[i].Value;
}
heat_fm = (max - min) * 1000 / nt_atemp;
}
// Returnera data enligt CSV-format
return 'State, Key figures, Previous month, Current month n' + 'Heat (kWh / m2),'
+ nt_heat.toFixed(2).toString ().
Replace (','. '.') + ',' + heat_fm.toFixed (2).toString ().
replace (',', '.') + ',' + heat_im.toFixed (2).toString ().
replace ('. ','. ') +'n';
Larmdata
Genom funktionen getActiveAlarmList (bool showBlocked) returnerar Web Port en lista över alla aktiva larm. Om showBlocked är satt till true returneras även aktiva larm som är blockerade.
Exempel
Detta exempel hämtar alla aktiva larm och kontrollerar hur många som är aktiva, hur många som är blockerade och hur många som är okvitterade. Resultatet skrivs sedan till 3 taggar i Web Port (ALARMSTATUS_PV1, ALARMSTATUS_PV2, ALARMSTATUS_PV3).
Detta kan t.ex. användas för att tala om för en PLC hur många aktiva larm det finns från olika styrsystem och sedan indikera om det finns aktiva larm på en led på framsidan av ett apparatskåp.
Skriptkod:
var alarms = getActiveAlarmList(true);
var active = 0;
var blocked = 0;
var nack = 0;
for (i=0;i<alarms.Count;i++)
{
switch (alarms[i].State)
{
case Moldeo.WebPortCommon.AlarmStates.BLOCKED:
blocked++;
break;
case Moldeo.WebPortCommon.AlarmStates.ALARM_NACK:
aktiv++;
nack++;
bryt;
case Moldeo.WebPortCommon.AlarmStates.ALARM:
aktiv++;
bryt;
case Moldeo.WebPortCommon.AlarmStates.OK_NACK:
nack++;
bryt;
}
}
tags["ALARMSTATUS_PV1"].WriteValue(active, true);
tags["ALARMSTATUS_PV2"].WriteValue(nack, true);
tags["ALARMSTATUS_PV3"].WriteValue(blocked, true);
Tidkanalskript
Tidkanalskript kan användas för att läsa in lokala scheman från styrsystem till Web Ports schemaläggningsfunktion. Kontakta Web Ports support för exempel.