İçeriğe geç

Değişkenler

Değişken (Variable), inSCADA’daki en temel veri birimidir. Bir sıcaklık ölçümü, bir motor durumu, bir enerji sayacı — her biri bir değişkendir.

Değişken Listesi

Temel meta veri:

AlanTipZorunluAçıklama
nameString (≤100)EvetDeğişken adı — proje içinde benzersiz
dscString (≤255)HayırAçıklama
codeString (≤20)HayırKısa teknik kod (ekranlarda kullanılabilir)
unitString (≤50)HayırMühendislik birimi (°C, kW, V, A, bar, …)
fractionalDigitCountShortHayırEkrana yazılırken ondalık basamak sayısı
projectIdStringEvetAit olduğu proje
frameIdStringEvetAit olduğu frame (protokol ve device da buradan çıkarılır)
protocolProtocolOtomatikFrame’den miras alınır
isActiveBooleanEvetAktif / pasif
isWritableBooleanEvetDışarıdan yazılabilir mi

Ölçekleme:

AlanTipAçıklama
rawZeroScaleDoubleHam değer alt sınırı
rawFullScaleDoubleHam değer üst sınırı
engZeroScaleDoubleMühendislik birimi alt sınırı
engFullScaleDoubleMühendislik birimi üst sınırı

Loglama:

AlanTipAçıklama
logTypeVariableLogTypeAşağıdaki tabloya bakın
logPeriodInteger (≥1)Periyodik loglama süresi (s)
logThresholdDoubleMinimum değişim eşiği (noise filtresi)
logMinValue / logMaxValueDoubleGeçerli değer aralığı — dışındakiler loglanmaz
logExpressionCodeStringLoglama kararını üreten kod (logType = Expression/Custom için)
logExpressionIdStringPaylaşımlı Expression referansı
keepLastValuesBooleanSon değer listesini cache’te tut (bkz. ins.getLastVariableValues)

Value Expression (değer üretme):

AlanTipAçıklama
valueExpressionTypeExpressionTypeNONE, CUSTOM veya EXPRESSION
valueExpressionCodeString (≤32 767)Satır içi kod (tip = CUSTOM)
valueExpressionIdStringPaylaşımlı Expression referansı (tip = EXPRESSION)

Yazma sınırları & darbe (pulse):

AlanTipAçıklama
setMinValue / setMaxValueDoubleKabul edilen yazma aralığı
isPulseOn / pulseOnDurationBoolean / IntegerON darbesi ve süresi (ms)
isPulseOff / pulseOffDurationBoolean / IntegerOFF darbesi ve süresi (ms)

Protokole özgü alanlar (adres, veri tipi, byte/word swap vb.) config JSONB alanında tutulur ve API yanıtında üst seviyeye düzleştirilerek döner.

Her protokolün kendi veri tipi enum’u vardır; ortak kavramsal haritalama:

KavramModbusOPC UADiğer
FloatFloat, DoubleFloat, Doubleçoğu protokolde var
IntegerInteger, Short, Long, Byte, Unsigned …Int16/32/64, UInt16/32/64, Byte, SByteprotokole göre değişir
BooleanBooleanBoolean
StringStringString
BCD16/32/64-bit BCDModbus’a özgü

Modbus için tam liste: Float, Double, Integer, Short, Long, Byte, Unsigned Integer, Unsigned Short, Unsigned Byte, 16 BIT BCD, 32 BIT BCD, 64 BIT BCD, Boolean, String. Diğer protokollerin tip listeleri için protokol sayfalarına bakın.

Değişken JSON Örneği (Modbus, Holding Register’dan Float)

Section titled “Değişken JSON Örneği (Modbus, Holding Register’dan Float)”
{
"id": "var-23227",
"name": "ActivePower_kW",
"dsc": "Total active power",
"unit": "kW",
"protocol": "Modbus TCP",
"projectId": "proj-153",
"frameId": "frame-703",
"isActive": true,
"isWritable": false,
"fractionalDigitCount": 2,
"engZeroScale": 0.0,
"engFullScale": 1000.0,
"logType": "Periodically",
"logPeriod": 10,
"keepLastValues": true,
"valueExpressionType": "NONE",
"type": "Float",
"startAddress": 0,
"byteSwapFlag": false,
"wordSwapFlag": true
}

Son dört alan (type, startAddress, byteSwapFlag, wordSwapFlag) Modbus’a özgü config alanlarıdır.


Ham (raw) değer, mühendislik değerine lineer dönüşüm ile çevrilir.

Eng = engZeroScale + (raw - rawZeroScale) ×
(engFullScale - engZeroScale) / (rawFullScale - rawZeroScale)
ParametreDeğer
rawZeroScale4 (mA)
rawFullScale20 (mA)
engZeroScale0 (°C)
engFullScale100 (°C)
  • Raw: 4 mA → Eng: 0 °C
  • Raw: 12 mA → Eng: 50 °C
  • Raw: 20 mA → Eng: 100 °C
{
"value": 359.91,
"extras": { "raw_value": 606.56 },
"flags": { "scaled": true }
}

value ölçeklenmiş mühendislik değeri, extras.raw_value ham değerdir.


Değişken değerleri InfluxDB’ye VariableLogType’a göre yazılır.

VariableLogType enum — altı değer:

TipAçıklama
No LogKayıt yok
When ChangedYalnızca değer değiştiğinde kayıt
PeriodicallySabit aralıkla kayıt (logPeriod saniye)
ThresholdlogThreshold değerinden fazla değişim olduğunda kayıt
ExpressionlogExpressionId ile paylaşımlı Expression değerlendirilir — truthy dönerse kayıt
CustomlogExpressionCode satır içi kod — truthy dönerse kayıt
ParametreAçıklama
logPeriodPeriyodik loglama periyodu (saniye). 10 = her 10 saniyede bir
logThresholdMinimum değişim eşiği (Threshold modu veya ek filtre için)
logMinValue / logMaxValueGeçerli değer aralığı. Dışındaki değerler loglanmaz
keepLastValuesSon değer listesini cache’te tut (ins.getLastVariableValues(name, n) çağrısı için)

fractionalDigitCount gösterilecek ondalık basamak sayısını belirler:

DeğerGösterim
0350
1350.5
2350.48
3350.483

Değişkene özel bir JavaScript formülü atanabilir. Her okuma döngüsünde bu formül çalışır ve sonucu değişkenin değeri olur.

ExpressionType enum:

TipAçıklama
NONEExpression yok — ham değer (ölçeklenmiş) kullanılır
CUSTOMvalueExpressionCode içindeki satır içi kod çalıştırılır
EXPRESSIONvalueExpressionId ile paylaşımlı Expression referansı — space seviyesi formül havuzundan
// Sinüs dalga (ActivePower_kW)
var t = new Date().getTime() / 1000;
return (Math.sin(t / 60) * 150 + 450 + Math.random() * 30).toFixed(2) * 1;
// Fahrenheit → Celsius (ham değer 'value' olarak erişilebilir)
return ((value - 32) * 5 / 9).toFixed(1) * 1;
// İki değişkenden verimlilik hesapla
var input = ins.getVariableValue("Input_kW").value;
var output = ins.getVariableValue("Output_kW").value;
if (input > 0) {
return ((output / input) * 100).toFixed(1) * 1;
}
return 0;

Boolean değişkenlere darbe modu atanabilir:

AlanAçıklama
isPulseOnON darbesi aktif
pulseOnDurationON darbe süresi (ms)
isPulseOffOFF darbesi aktif
pulseOffDurationOFF darbe süresi (ms)

Darbe modu, anlık komut gönderimi için kullanılır — örneğin motor start butonu: basıldığında ON, pulseOnDuration süresi dolunca otomatik OFF. Operatörün manuel OFF göndermesine gerek kalmaz.


AlanAçıklama
setMinValueYazılabilir minimum değer
setMaxValueYazılabilir maksimum değer

Bu değerler ayarlandığında, aralık dışı yazma komutları API ve script üzerinden reddedilir. Operatör hatalarını önlemek için kullanılır.


// Anlık değer oku
var val = ins.getVariableValue("ActivePower_kW");
// → { value: 359.91, extras: { raw_value: 606.56 }, dateInMs: ... }
// Toplu okuma
var vals = ins.getVariableValues(["ActivePower_kW", "Voltage_V", "Current_A"]);
// Değer yaz
ins.setVariableValue("Temperature_C", { value: 55.0 });
// Son N değer (keepLastValues = true olan değişkenlerde)
var last100 = ins.getLastVariableValues("Temperature_C", 100);
// Loglanmış (tarihsel) değerleri sorgula
var start = ins.getDate(ins.now().getTime() - 3600000); // son 1 saat
var history = ins.getLoggedValues("Temperature_C", start, ins.now());

Detaylı API: Variable API → | REST API Reference → (Variable Value Controller, Protocol Variable Controller grupları)