Benutzer-Werkzeuge

Webseiten-Werkzeuge


der_dispatch-mechanismus

Der dispatch Mechanismus

Die Datenpunktabbildungen zwischen den Treibern werden in der Datei dispatch.txt definiert. Damit ein Datenpunkt in der dispach.txt verwenden werden kann muss der Datenpunkt zuvor in den treiberspezifischen *.txt-Dateien deklariert sein.

Die einfachste Möglichkeit Datenpunkte miteinander zu verknüpfen ist die 1:1 Abbildung. Ein solcher dispatch-Eintrag ist wie folgt aufgebaut.

[<Routingadresse des Quelltreibers>[.<Datenpunkttyp>] <Quelltreibername> <Datenpunktadresse>]
  target = <Routingadresse des Zieltreibers>[.<Datenpunkttyp>] <Zieltreibername> <Datenpunktadresse>

Beispiel Modbus→BACnet:

[80.X mod 1 holding 2386]
  target = 940.Y bac 96099.AI 32001

Die Angabe des Datenpunkttyps ist bei den aktuellen Gateways mit Linux Betriebssystem im dispatch-Eintrag nicht erforderlich, kann jedoch optional immer noch mit angegeben werden. Die Angabe im dispatch-Eintrag muss dabei mit der Definition des Datenpunktes übereinstimmen.

Für den Datenpunkttyp gilt folgende Definition.

Typ: Bedeutung
M Ganzzahliger Wert (Binäre Datenpunkte,Zählwerte) der vom Gateway nur gelesen werden kann/soll.
S Ganzzahliger Wert der vom Gateway gelesen sowie geschrieben werden kann/soll.
X Analogwert (mit Nachkommastellen) der vom Gateway nur gelesen werden kann/soll.
Y Analogwert (mit Nachkommastellen) der vom Gateway gelesen sowie geschrieben werden kann/soll.
A String, findet z.B. Verwendung bei BACnet Trends und ESPA4.4.4 Datenpunkten

Jeder dispatch-Eintrag kann optional mit den folgenden zwei Einträgen ergänzt werden um spezielle Datenpunktabbildungen vorzunehmen.

  threshold = 
  value =

Die Angabe von threshold hat je nach Datenpunkttyp verschiedene Bedeutungen.

Im Fall von ganzzahligen Datenpunkten bedeutet threshold = 1, dass das dispatch nur bei einem Übergang auf „1“ ausgeführt wird. Für Analogwerte bedeutet threshold = 1 eine Wertberuhigung. In diesem Fall werden nur Wertänderungen übertragen, die um mehr als 1 von dem aktuellen Zielwert abweichen, die Änderung also größer 1 ist.

Mit value kann dem Zieldatenpunkt ein bestimmter Wert zugewiesen werden, wobei dieser Wert ein Festwert ist oder durch Berechnung aus dem Quelldatenpunkt und/oder beliebigen anderen Datenpunkten hervorgeht.

Dazu einige Beispiele:

# Quellwert = 1 (Ganzzahl (M)) -> Zielwert 15
[80.M mod 1 holding 2386]
  target = 940.S bac 96099.AI 32001
  threshold=1
  value=15
  
# Quellwert = 2 -> Zielwert 27
[80.M mod 1 holding 2386]
  target = 940.S bac 96099.AI 32001
  threshold=2
  value=27

# alle anderen Quellwerte ->  Zielwert 99
[80.M mod 1 holding 2386]
  target = 940.S bac 96099.AI 32001
  threshold=default
  value=99
# Quellwert (Fließkommazahl (X)) -> Zielwert (nur bei Änderung um mindestens 0,5) 
[80.X mod 1 holding 2386]
  target = 940.Y bac 96099.AI 32001
  threshold=0.5
# Quellwert + 1 -> Zielwert
[80.X mod 1 holding 2386]
  target = 940.Y bac 96099.AI 32001
  value=increment

# Quellwert - 1 -> Zielwert
[80.X mod 1 holding 2386]
  target = 940.Y bac 96099.AI 32001
  value=decrement

Bei Verwendung von Formeln zur Berechnung der Datenpunkte gilt folgende Definition für die Adressierung der Datenpunkte.

„X“ innerhalb der Sektion formula() steht für den Wert des Quelldatenpunktes
„$(<Routingadresse>[.<Datenpunkttyp>] <Treibername> <Datenpunktadresse>)“ steht für den Wert des adressierten Datenpunktes

# Quellwert / 2.55 -> Zielwert
[80.X mod 1 holding 2386]
  target = 940.Y bac 96099.AI 32001
  value = formula(X/2.55)
# Quellwert + Wert eines anderen Datenpunktes -> Zielwert
# Die Formel wird nur bei Änderung des Quellwerts (holding 2386) berechnet.
[80.X mod 1 holding 2386]
  target = 940.Y bac 96099.AI 32001
  value = formula(X+$(80.X mod 1 holding 1000))
  
# Die Formel wird bei Änderung von holding 1000 berechnet. 
[80.X mod 1 holding 1000]
  target = 940.Y bac 96099.AI 32001
  value = formula($(80.X mod 1 holding 2386)+X)
  

Über den Dispatch Mechanismus können auch die einzelnen Zustands-Flags der Datenpunkte abgefragt und einem Datenpunkt zugewiesen werden. Im Beispiel wird das Flag „valid“ und das Flag „fault“ eines LON Datenpunktes auf einen Binären BACnet Datenpunkt abgebildet.

[ 10 lon object 2]
 value = formula(if($(10 lon object 2).valid;1;0))
 target = 940 bac local.BI 2
[ 10 lon object 2]
 value = formula(if($(X).fault;1;0))
 target = 940 bac local.BI 3  
 

Innerhalb der Sektion formula() können folgende Operatoren verwendet werden:

Operator Beschreibung Beispiel
Einstellige Operatoren
+ Addieren +X (+1 → 2)
- Subtrahieren -X (-1 → 0)
~ Invertieren ~X (~21 → 10 / ~10101 → 01010)
! Not !X (!1 → 0)
Zweistellige Operatoren
^ Bit Xor
| Bit Or
& Bit And
|| Or
&& And
== Vergleich auf Gleichheit
!= Vergleich auf Ungleichheit
> größer
>= größer oder gleich
< kleiner
kleiner oder gleich
+ Addieren X+5 (9+5 → 14)
- Subtrahieren X-5 (9-5 → 4)
* Multiplizieren X*5 (9*5 → 45)
/ Dividieren X/5 (9/2 → 4)
% Modulo X%5 (9%2 → 1)
Nullstellige Funktionen
systime GetSysTime
time GetTime
date GetDate
hour GetHour
minute GetMinute
second GetSecond
year GetYear
month GetMonth
day GetDayOfMonth
yday GetDayOfYear
mday GetDayOfMonth
wday GetDayOfWeek
curtime GetSysTime
Einstellige Funktionen
sin Sinus sin(X) Winkel X in Bogenmass (sin((45°*PI)/180) → 0.707107)
cos Cosinus cos(X) Winkel X in Bogenmass (cos((45°*PI)/180) → 0.707107)
tan Tangens tan(X) Winkel X in Bogenmass (tan((45°*PI)/180) → 1)
asin Arcus Sinus asin(X) Winkel X in Bogenmass
acos Arc Cosinus acos(X) Winkel X in Bogenmass
atan Arcus Tangens atan(X)
exp Exp exp(X) (eX)
fabs Fabs fabs(X) (Betrag von X)
floor Floor floor(X) (Runden auf nächstkleinere natürliche Zahl)
ceil Ceil ceil(X) (Runden auf nächstgrößere natürliche Zahl)
log Log log(X) (ln(X), nat. Logarithmus)
log10 Log10 log10(X) (log10(X), Logarithmus zur Basis 10)
sqrt Wurzel sqrt(X) (sqrt(9) → 3)
Zweistellige Funktionen
atan2 ArcusTangens
fmod modulo Rest der ganzzahligen Division (fmod(10,3) → 1)
pow Potenz pow(3; 2) → 9
max Maximum max(1; 2) → 2
min Minimum min(1; 2) → 1
round Runden Runden auf bestimmte Anzahl Kommastellen (round(3.774; 2) → 3.77)
Dreistellige Funktionen
if if(a;b;c) entspricht if a then b else c if ( $(1 ugwc freemem)<1000; 1; 0 )
max3 Maximum max3(5;6;7) → 7
min3 Minimum min3(5;6;7) → 5
der_dispatch-mechanismus.txt · Zuletzt geändert: 01.03.2019 14:23 von joe