Trådlös Modbus via RCW-M32

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
1
Uppdaterad
2019-04-17
Skapad
2019-04-17
Kategori
IO enheter, Modbus
Visningar
210

Beskrivning

Drivrutin för Rumsgivare TG-R5W(temp)/HTRT5W (temp plus fukt) Utomhusgivare TG-R6W/TG-R6EW samt DCW dörrkontakt, IRCW takmonterad rörelsesensor samt IRW rörelsesensor
Stöd för:
- Medel, max och min värden för rumstemperaturer
- fukt i %RH
- Lägg till eller ta bort givare
- Sätt sovtid (wake up) tid, läs sovtid
- Batteri larm med summalarm batteri
- läs mätartyp och id

Bruksanvisning

Endast Ultra och EW

Normal drift:
- Sätt telegram Koppla/Ta bort i Ingen kommunikation
- Sätt telegram Ställ sovtid i Ingen kommunikation
- Sätt modbus adress (sätts display på mottagaren)
- Sätt Tempgräns låg till lägsta rumstemperatur för att räknas. Default är 10
- Sätt Tempgräns hög till högsta rumstemperatur för att räknas. Default är 40

För att lägga till enhet:
- Sätt Välj enhet(1-32) till det enhetsnummer du vill lägga till
- Sätt Operation till Koppla
- Sätt telegram Koppla/Ta bort till 1 sekund
- Sätt telegram Koppla/Ta bort till Ingen kommunikation
- Tryck ner Test knappen på enhetens som ska läggas till
- Ett pip hörs och det är klart

Juridisk information

Alla skript tillhandahålls i befintligt skick och all användning sker på eget ansvar. Felaktig använding kan leda till skadad eller förstörd utrustning.

Skript kod

% Skapad med Modbus Creator
% - OBS! Användaren ansvarar själv för att samma TYPID inte används flera gånger i samma apparat.
%   TYPID 10000-19999 är för användardefinierade enheter
DEVICETYPE RCWM32 NAMED "RCW-M32" TYPEID 11084 IS

 PARAMETER
  Id : "Adress" INT;
  Device : "Välj enhet(1-32)" INT;
  Oper : "Operation" ["Ingen,Koppla,Ta bort"]ENUM;
  LowLimit : "Tempgräns låg" ["°C"]DEC2;
  HighLimit : "Tempgräns hög" ["°C"]DEC2;
  DeviceZ : "Sovtid enhet(1-32)" INT;
  WakeUpTime : "Sovtid att skriva" ["x10 sek"]INT;
  
 PUBLIC
  T1 : "Tempgivare 1" ["°C"]DEC2;
  T2 : "Tempgivare 2" ["°C"]DEC2;
  T3 : "Tempgivare 3" ["°C"]DEC2;
  T4 : "Tempgivare 4" ["°C"]DEC2;
  T5 : "Tempgivare 5" ["°C"]DEC2;
  T6 : "Tempgivare 6" ["°C"]DEC2;
  T7 : "Tempgivare 7" ["°C"]DEC2;
  T8 : "Tempgivare 8" ["°C"]DEC2;
  T9 : "Tempgivare 9" ["°C"]DEC2;
  T10 : "Tempgivare 10" ["°C"]DEC2;
  T11 : "Tempgivare 11" ["°C"]DEC2;
  T12 : "Tempgivare 12" ["°C"]DEC2;
  T13 : "Tempgivare 13" ["°C"]DEC2;
  T14 : "Tempgivare 14" ["°C"]DEC2;
  T15 : "Tempgivare 15" ["°C"]DEC2;
  T16 : "Tempgivare 16" ["°C"]DEC2;
  T17 : "Tempgivare 17" ["°C"]DEC2;
  T18 : "Tempgivare 18" ["°C"]DEC2;
  T19 : "Tempgivare 19" ["°C"]DEC2;
  T20 : "Tempgivare 20" ["°C"]DEC2;
  T21 : "Tempgivare 21" ["°C"]DEC2;
  T22 : "Tempgivare 22" ["°C"]DEC2;
  T23 : "Tempgivare 23" ["°C"]DEC2;
  T24 : "Tempgivare 24" ["°C"]DEC2;
  T25 : "Tempgivare 25" ["°C"]DEC2;
  T26 : "Tempgivare 26" ["°C"]DEC2;
  T27 : "Tempgivare 27" ["°C"]DEC2;
  T28 : "Tempgivare 28" ["°C"]DEC2;
  T29 : "Tempgivare 29" ["°C"]DEC2;
  T30 : "Tempgivare 30" ["°C"]DEC2;
  T31 : "Tempgivare 31" ["°C"]DEC2;
  T32 : "Tempgivare 32" ["°C"]DEC2;
  TMean : "Rumstemp medel" ["°C"]DEC2;
  TMin : "Rumstemp min" ["°C"]DEC2;
  TMax : "Rumstemp max" ["°C"]DEC2;

  F1 : "Fuktgivare 1" ["%RH"]INT;
  F2 : "Fuktgivare 2" ["%RH"]INT;
  F3 : "Fuktgivare 3" ["%RH"]INT;
  F4 : "Fuktgivare 4" ["%RH"]INT;
  F5 : "Fuktgivare 5" ["%RH"]INT;
  F6 : "Fuktgivare 6" ["%RH"]INT;
  F7 : "Fuktgivare 7" ["%RH"]INT;
  F8 : "Fuktgivare 8" ["%RH"]INT;
  F9 : "Fuktgivare 9" ["%RH"]INT;
  F10 : "Fuktgivare 10" ["%RH"]INT;
  F11 : "Fuktgivare 11" ["%RH"]INT;
  F12 : "Fuktgivare 12" ["%RH"]INT;
  F13 : "Fuktgivare 13" ["%RH"]INT;
  F14 : "Fuktgivare 14" ["%RH"]INT;
  F15 : "Fuktgivare 15" ["%RH"]INT;
  F16 : "Fuktgivare 16" ["%RH"]INT;
  F17 : "Fuktgivare 17" ["%RH"]INT;
  F18 : "Fuktgivare 18" ["%RH"]INT;
  F19 : "Fuktgivare 19" ["%RH"]INT;
  F20 : "Fuktgivare 20" ["%RH"]INT;
  F21 : "Fuktgivare 21" ["%RH"]INT;
  F22 : "Fuktgivare 22" ["%RH"]INT;
  F23 : "Fuktgivare 23" ["%RH"]INT;
  F24 : "Fuktgivare 24" ["%RH"]INT;
  F25 : "Fuktgivare 25" ["%RH"]INT;
  F26 : "Fuktgivare 26" ["%RH"]INT;
  F27 : "Fuktgivare 27" ["%RH"]INT;
  F28 : "Fuktgivare 28" ["%RH"]INT;
  F29 : "Fuktgivare 29" ["%RH"]INT;
  F30 : "Fuktgivare 30" ["%RH"]INT;
  F31 : "Fuktgivare 31" ["%RH"]INT;
  F32 : "Fuktgivare 32" ["%RH"]INT;
  
  E1 : "Enhet 1 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E2 : "Enhet 2 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E3 : "Enhet 3 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E4 : "Enhet 4 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E5 : "Enhet 5 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E6 : "Enhet 6 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E7 : "Enhet 7 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E8 : "Enhet 8 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E9 : "Enhet 9 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E10 : "Enhet 10 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E11 : "Enhet 11 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E12 : "Enhet 12 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E13 : "Enhet 13 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E14 : "Enhet 14 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E15 : "Enhet 15 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E16 : "Enhet 16 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E17 : "Enhet 17 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E18 : "Enhet 18 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E19 : "Enhet 19 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E20 : "Enhet 20 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E21 : "Enhet 21 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E22 : "Enhet 22 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E23 : "Enhet 23 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E24 : "Enhet 24 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E25 : "Enhet 25 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E26 : "Enhet 26 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E27 : "Enhet 27 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E28 : "Enhet 28 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E29 : "Enhet 29 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E30 : "Enhet 30 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E31 : "Enhet 31 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  E32 : "Enhet 32 Typ" ["Ingen,Dörr,Närvaro,Rumtemp,Utetemp,Opt,Rumtempfukt,Okänd"]ENUM;
  
  S1 : "Signal 1" ["dB"]INT; 
  S2 : "Signal 2" ["dB"]INT; 
  S3 : "Signal 3" ["dB"]INT; 
  S4 : "Signal 4" ["dB"]INT; 
  S5 : "Signal 5" ["dB"]INT; 
  S6 : "Signal 6" ["dB"]INT; 
  S7 : "Signal 7" ["dB"]INT; 
  S8 : "Signal 8" ["dB"]INT; 
  S9 : "Signal 9" ["dB"]INT; 
  S10 : "Signal 10" ["dB"]INT; 
  S11 : "Signal 11" ["dB"]INT; 
  S12 : "Signal 12" ["dB"]INT; 
  S13 : "Signal 13" ["dB"]INT; 
  S14 : "Signal 14" ["dB"]INT; 
  S15 : "Signal 15" ["dB"]INT; 
  S16 : "Signal 16" ["dB"]INT; 
  S17 : "Signal 17" ["dB"]INT; 
  S18 : "Signal 18" ["dB"]INT; 
  S19 : "Signal 19" ["dB"]INT; 
  S20 : "Signal 20" ["dB"]INT; 
  S21 : "Signal 21" ["dB"]INT; 
  S22 : "Signal 22" ["dB"]INT; 
  S23 : "Signal 23" ["dB"]INT; 
  S24 : "Signal 24" ["dB"]INT; 
  S25 : "Signal 25" ["dB"]INT; 
  S26 : "Signal 26" ["dB"]INT; 
  S27 : "Signal 27" ["dB"]INT; 
  S28 : "Signal 28" ["dB"]INT; 
  S29 : "Signal 29" ["dB"]INT; 
  S30 : "Signal 30" ["dB"]INT; 
  S31 : "Signal 31" ["dB"]INT; 
  S32 : "Signal 32" ["dB"]INT; 
  
  V1 : "Enhet 1 ID" [""]INT;
  V2 : "Enhet 2 ID" [""]INT;
  V3 : "Enhet 3 ID" [""]INT;
  V4 : "Enhet 4 ID" [""]INT;
  V5 : "Enhet 5 ID" [""]INT;
  V6 : "Enhet 6 ID" [""]INT;
  V7 : "Enhet 7 ID" [""]INT;
  V8 : "Enhet 8 ID" [""]INT;
  V9 : "Enhet 9 ID" [""]INT;
  V10 : "Enhet 10 ID" [""]INT;
  V11 : "Enhet 11 ID" [""]INT;
  V12 : "Enhet 12 ID" [""]INT;
  V13 : "Enhet 13 ID" [""]INT;
  V14 : "Enhet 14 ID" [""]INT;
  V15 : "Enhet 15 ID" [""]INT;
  V16 : "Enhet 16 ID" [""]INT;
  V17 : "Enhet 17 ID" [""]INT;
  V18 : "Enhet 18 ID" [""]INT;
  V19 : "Enhet 19 ID" [""]INT;
  V20 : "Enhet 20 ID" [""]INT;
  V21 : "Enhet 21 ID" [""]INT;
  V22 : "Enhet 22 ID" [""]INT;
  V23 : "Enhet 23 ID" [""]INT;
  V24 : "Enhet 24 ID" [""]INT;
  V25 : "Enhet 25 ID" [""]INT;
  V26 : "Enhet 26 ID" [""]INT;
  V27 : "Enhet 27 ID" [""]INT;
  V28 : "Enhet 28 ID" [""]INT;
  V29 : "Enhet 29 ID" [""]INT;
  V30 : "Enhet 30 ID" [""]INT;
  V31 : "Enhet 31 ID" [""]INT;
  V32 : "Enhet 32 ID" [""]INT;
  
  ASum : "Summalarm Batteri" INT;
  A1 : "Enhet 1 larm Batteri" INT;
  A2 : "Enhet 2 larm Batteri" INT;
  A3 : "Enhet 3 larm Batteri" INT;
  A4 : "Enhet 4 larm Batteri" INT;
  A5 : "Enhet 5 larm Batteri" INT;
  A6 : "Enhet 6 larm Batteri" INT;
  A7 : "Enhet 7 larm Batteri" INT;
  A8 : "Enhet 8 larm Batteri" INT;
  A9 : "Enhet 9 larm Batteri" INT;
  A10 : "Enhet 10 larm Batteri" INT;
  A11 : "Enhet 11 larm Batteri" INT;
  A12 : "Enhet 12 larm Batteri" INT;
  A13 : "Enhet 13 larm Batteri" INT;
  A14 : "Enhet 14 larm Batteri" INT;
  A15 : "Enhet 15 larm Batteri" INT;
  A16 : "Enhet 16 larm Batteri" INT;
  A17 : "Enhet 17 larm Batteri" INT;
  A18 : "Enhet 18 larm Batteri" INT;
  A19 : "Enhet 19 larm Batteri" INT;
  A20 : "Enhet 20 larm Batteri" INT;
  A21 : "Enhet 21 larm Batteri" INT;
  A22 : "Enhet 22 larm Batteri" INT;
  A23 : "Enhet 23 larm Batteri" INT;
  A24 : "Enhet 24 larm Batteri" INT;
  A25 : "Enhet 25 larm Batteri" INT;
  A26 : "Enhet 26 larm Batteri" INT;
  A27 : "Enhet 27 larm Batteri" INT;
  A28 : "Enhet 28 larm Batteri" INT;
  A29 : "Enhet 29 larm Batteri" INT;
  A30 : "Enhet 30 larm Batteri" INT;
  A31 : "Enhet 31 larm Batteri" INT;
  A32 : "Enhet 32 larm Batteri" INT;
  
  Z1 : "Sovtid 1" ["sek"]INT;
  Z2 : "Sovtid 2" ["sek"]INT;
  Z3 : "Sovtid 3" ["sek"]INT;
  Z4 : "Sovtid 4" ["sek"]INT;
  Z5 : "Sovtid 5" ["sek"]INT;
  Z6 : "Sovtid 6" ["sek"]INT;
  Z7 : "Sovtid 7" ["sek"]INT;
  Z8 : "Sovtid 8" ["sek"]INT;
  Z9 : "Sovtid 9" ["sek"]INT;
  Z10 : "Sovtid 10" ["sek"]INT;
  Z11 : "Sovtid 11" ["sek"]INT;
  Z12 : "Sovtid 12" ["sek"]INT;
  Z13 : "Sovtid 13" ["sek"]INT;
  Z14 : "Sovtid 14" ["sek"]INT;
  Z15 : "Sovtid 15" ["sek"]INT;
  Z16 : "Sovtid 16" ["sek"]INT;
  Z17 : "Sovtid 17" ["sek"]INT;
  Z18 : "Sovtid 18" ["sek"]INT;
  Z19 : "Sovtid 19" ["sek"]INT;
  Z20 : "Sovtid 20" ["sek"]INT;
  Z21 : "Sovtid 21" ["sek"]INT;
  Z22 : "Sovtid 22" ["sek"]INT;
  Z23 : "Sovtid 23" ["sek"]INT;
  Z24 : "Sovtid 24" ["sek"]INT;
  Z25 : "Sovtid 25" ["sek"]INT;
  Z26 : "Sovtid 26" ["sek"]INT;
  Z27 : "Sovtid 27" ["sek"]INT;
  Z28 : "Sovtid 28" ["sek"]INT;
  Z29 : "Sovtid 29" ["sek"]INT;
  Z30 : "Sovtid 30" ["sek"]INT;
  Z31 : "Sovtid 31" ["sek"]INT;
  Z32 : "Sovtid 32" ["sek"]INT;
  
  P1 : "Närvaro/Dörr 1" INT;
  P2 : "Närvaro/Dörr 2" INT;
  P3 : "Närvaro/Dörr 3" INT;
  P4 : "Närvaro/Dörr 4" INT;
  P5 : "Närvaro/Dörr 5" INT;
  P6 : "Närvaro/Dörr 6" INT;
  P7 : "Närvaro/Dörr 7" INT;
  P8 : "Närvaro/Dörr 8" INT;
  P9 : "Närvaro/Dörr 9" INT;
  P10 : "Närvaro/Dörr 10" INT;
  P11 : "Närvaro/Dörr 11" INT;
  P12 : "Närvaro/Dörr 12" INT;
  P13 : "Närvaro/Dörr 13" INT;
  P14 : "Närvaro/Dörr 14" INT;
  P15 : "Närvaro/Dörr 15" INT;
  P16 : "Närvaro/Dörr 16" INT;
  P17 : "Närvaro/Dörr 17" INT;
  P18 : "Närvaro/Dörr 18" INT;
  P19 : "Närvaro/Dörr 19" INT;
  P20 : "Närvaro/Dörr 20" INT;
  P21 : "Närvaro/Dörr 21" INT;
  P22 : "Närvaro/Dörr 22" INT;
  P23 : "Närvaro/Dörr 23" INT;
  P24 : "Närvaro/Dörr 24" INT;
  P25 : "Närvaro/Dörr 25" INT;
  P26 : "Närvaro/Dörr 26" INT;
  P27 : "Närvaro/Dörr 27" INT;
  P28 : "Närvaro/Dörr 28" INT;
  P29 : "Närvaro/Dörr 29" INT;
  P30 : "Närvaro/Dörr 30" INT;
  P31 : "Närvaro/Dörr 31" INT;
  P32 : "Närvaro/Dörr 32" INT;
  
 PRIVATE
  Tmp;
  Sum;
  Count;
  TLow;
  THigh;
  Type;

 BAUDRATE 9600;
 CHECKSUM MODBUS SWAPPED;

 
 
 TELEGRAM ReadTemp NAMED "Läs temperatur" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(04); % Modbus kommando för att läsa register kod 04
   DATA[2] := RWORD(0); % Start address
   DATA[4] := RWORD(32); % Antal register att läsa
  ANSWER SIZE 69 % (Antal register * 2) + 5
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(04);
   DATA[2] = BYTE(64); % Antal Bytes
   DATA[3] -> RWORD(
    Count:=0;
Sum:=0;
TLow:=LowLimit;
THigh:=HighLimit;
    IF TLow=0 AND THigh=0 THEN TLow:=10; THigh:=40; ENDIF;
    IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E1;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; TMin:=Tmp; TMax:=Tmp; ENDIF;
    T1:=Tmp;
   );
   DATA[5] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E2;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T2:=Tmp;
   );
   DATA[7] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E3;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T3:=Tmp;
   );
   DATA[9] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E4;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T4:=Tmp;
   );
   DATA[11] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E5;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T5:=Tmp;
   );
   DATA[13] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E6;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T6:=Tmp;
   );
   DATA[15] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E7;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T7:=Tmp;
   );
   DATA[17] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E8;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T8:=Tmp;
   );
   DATA[19] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E9;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T9:=Tmp;
   );
   DATA[21] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E10;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T10:=Tmp;
   );
   DATA[23] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E11;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T11:=Tmp;
   );
   DATA[25] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E12;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T12:=Tmp;
   );
   DATA[27] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E13;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T13:=Tmp;
   );
   DATA[29] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E14;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T14:=Tmp;
   );
   DATA[31] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E15;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T15:=Tmp;
   );
   DATA[33] -> RWORD(IF (DATA>=32768) THEN Tmp:=(DATA-65536)/100; ELSE Tmp:=DATA/100; ENDIF;Type:=E16;
IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T16:=Tmp;
   );
   DATA[35] -> RINT(Tmp:=DATA/100; Type:=E17;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T17:=Tmp;
   );
   DATA[37] -> RINT(Tmp:=DATA/100; Type:=E18;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T18:=Tmp;
   );
   DATA[39] -> RINT(Tmp:=DATA/100; Type:=E19;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T19:=Tmp;
   );
   DATA[41] -> RINT(Tmp:=DATA/100; Type:=E20;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T20:=Tmp;
   );
   DATA[43] -> RINT(Tmp:=DATA/100; Type:=E21;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T21:=Tmp;
   );
   DATA[45] -> RINT(Tmp:=DATA/100; Type:=E22;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T22:=Tmp;
   );
   DATA[47] -> RINT(Tmp:=DATA/100; Type:=E23;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T23:=Tmp;
   );
   DATA[49] -> RINT(Tmp:=DATA/100; Type:=E24;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T24:=Tmp;
   );
   DATA[51] -> RINT(Tmp:=DATA/100; Type:=E25;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T25:=Tmp;
   );
   DATA[53] -> RINT(Tmp:=DATA/100; Type:=E26;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T26:=Tmp;
   );
   DATA[55] -> RINT(Tmp:=DATA/100; Type:=E27;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T27:=Tmp;
   );
   DATA[57] -> RINT(Tmp:=DATA/100; Type:=E28;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T28:=Tmp;
   );
   DATA[59] -> RINT(Tmp:=DATA/100; Type:=E29;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T29:=Tmp;
   );
   DATA[61] -> RINT(Tmp:=DATA/100; Type:=E30;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T30:=Tmp;
   );
   DATA[63] -> RINT(Tmp:=DATA/100; Type:=E31;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T31:=Tmp;
   );
   DATA[65] -> RINT(Tmp:=DATA/100; Type:=E32;
    IF((Type=3 OR Type=6) AND Tmp>TLow AND Tmp<THigh) THEN Sum:=Sum+Tmp; Count:=Count+1; IF Tmp<TMin THEN TMin:=Tmp; ENDIF; IF Tmp>TMax THEN TMax:=Tmp; ENDIF; ENDIF;
    T32:=Tmp;
TMean:=Sum/Count;
   );
   
  TIMEOUT 300
 END;
 
 TELEGRAM ReadType NAMED "Läs typ" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(04); % Modbus kommando för att läsa register kod 04
   DATA[2] := RWORD(7000); % Start address
   DATA[4] := RWORD(32); % Antal register att läsa
  ANSWER SIZE 69 % (Antal register * 2) + 5
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(04);
   DATA[2] = BYTE(64); % Antal Bytes
   DATA[3] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E1:=Tmp;);
   DATA[5] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E2:=Tmp;);
   DATA[7] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E3:=Tmp;);
   DATA[9] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E4:=Tmp;);
   DATA[11] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E5:=Tmp;);
   DATA[13] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E6:=Tmp;);
   DATA[15] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E7:=Tmp;);
   DATA[17] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E8:=Tmp;);
   DATA[19] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E9:=Tmp;);
   DATA[21] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E10:=Tmp;);
   DATA[23] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E11:=Tmp;);
   DATA[25] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E12:=Tmp;);
   DATA[27] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E13:=Tmp;);
   DATA[29] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E14:=Tmp;);
   DATA[31] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E15:=Tmp;);
   DATA[33] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E16:=Tmp;);
   DATA[35] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E17:=Tmp;);
   DATA[37] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E18:=Tmp;);
   DATA[39] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E19:=Tmp;);
   DATA[41] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E20:=Tmp;);
   DATA[43] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E21:=Tmp;);
   DATA[45] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E22:=Tmp;);
   DATA[47] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E23:=Tmp;);
   DATA[49] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E24:=Tmp;);
   DATA[51] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E25:=Tmp;);
   DATA[53] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E26:=Tmp;);
   DATA[55] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E27:=Tmp;);
   DATA[57] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E28:=Tmp;);
   DATA[59] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E29:=Tmp;);
   DATA[61] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E30:=Tmp;);
   DATA[63] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E31:=Tmp;);
   DATA[65] -> RWORD(Tmp := 7; IF DATA=10 THEN Tmp:=1; ELSIF DATA=21 OR DATA=23 THEN Tmp:=2; ELSIF DATA=100 THEN Tmp:=3; ELSIF DATA=120 THEN Tmp:=4; ELSIF DATA=200 THEN Tmp:=5; ELSIF DATA=101 THEN Tmp:=6;  ENDIF; E32:=Tmp;);
  TIMEOUT 300
 END;
 
 TELEGRAM ReadSignal NAMED "Läs signal" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(04); % Modbus kommando för att läsa register kod 04
   DATA[2] := RWORD(7200); % Start address
   DATA[4] := RWORD(32); % Antal register att läsa
  ANSWER SIZE 69 % (Antal register * 2) + 5
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(04);
   DATA[2] = BYTE(64); % Antal Bytes
   DATA[3] ->RWORD(S1:=DATA;);
   DATA[5] ->RWORD(S2:=DATA;);
   DATA[7] ->RWORD(S3:=DATA;);
   DATA[9] ->RWORD(S4:=DATA;);
   DATA[11] ->RWORD(S5:=DATA;);
   DATA[13] ->RWORD(S6:=DATA;);
   DATA[15] ->RWORD(S7:=DATA;);
   DATA[17] ->RWORD(S8:=DATA;);
   DATA[19] ->RWORD(S9:=DATA;);
   DATA[21] ->RWORD(S10:=DATA;);
   DATA[23] ->RWORD(S11:=DATA;);
   DATA[25] ->RWORD(S12:=DATA;);
   DATA[27] ->RWORD(S13:=DATA;);
   DATA[29] ->RWORD(S14:=DATA;);
   DATA[31] ->RWORD(S15:=DATA;);
   DATA[33] ->RWORD(S16:=DATA;);
   DATA[35] ->RWORD(S17:=DATA;);
   DATA[37] ->RWORD(S18:=DATA;);
   DATA[39] ->RWORD(S19:=DATA;);
   DATA[41] ->RWORD(S20:=DATA;);
   DATA[43] ->RWORD(S21:=DATA;);
   DATA[45] ->RWORD(S22:=DATA;);
   DATA[47] ->RWORD(S23:=DATA;);
   DATA[49] ->RWORD(S24:=DATA;);
   DATA[51] ->RWORD(S25:=DATA;);
   DATA[53] ->RWORD(S26:=DATA;);
   DATA[55] ->RWORD(S27:=DATA;);
   DATA[57] ->RWORD(S28:=DATA;);
   DATA[59] ->RWORD(S29:=DATA;);
   DATA[61] ->RWORD(S30:=DATA;);
   DATA[63] ->RWORD(S31:=DATA;);
   DATA[65] ->RWORD(S32:=DATA;);
  TIMEOUT 300
 END;

 TELEGRAM ReadHum NAMED "Läs Fukt" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(04); % Modbus kommando för att läsa register kod 04
   DATA[2] := RWORD(400); % Start address
   DATA[4] := RWORD(32); % Antal register att läsa
  ANSWER SIZE 69 % (Antal register * 2) + 5
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(04);
   DATA[2] = BYTE(64); % Antal Bytes
   DATA[3] ->RWORD(F1:=DATA;);
   DATA[5] ->RWORD(F2:=DATA;);
   DATA[7] ->RWORD(F3:=DATA;);
   DATA[9] ->RWORD(F4:=DATA;);
   DATA[11] ->RWORD(F5:=DATA;);
   DATA[13] ->RWORD(F6:=DATA;);
   DATA[15] ->RWORD(F7:=DATA;);
   DATA[17] ->RWORD(F8:=DATA;);
   DATA[19] ->RWORD(F9:=DATA;);
   DATA[21] ->RWORD(F10:=DATA;);
   DATA[23] ->RWORD(F11:=DATA;);
   DATA[25] ->RWORD(F12:=DATA;);
   DATA[27] ->RWORD(F13:=DATA;);
   DATA[29] ->RWORD(F14:=DATA;);
   DATA[31] ->RWORD(F15:=DATA;);
   DATA[33] ->RWORD(F16:=DATA;);
   DATA[35] ->RWORD(F17:=DATA;);
   DATA[37] ->RWORD(F18:=DATA;);
   DATA[39] ->RWORD(F19:=DATA;);
   DATA[41] ->RWORD(F20:=DATA;);
   DATA[43] ->RWORD(F21:=DATA;);
   DATA[45] ->RWORD(F22:=DATA;);
   DATA[47] ->RWORD(F23:=DATA;);
   DATA[49] ->RWORD(F24:=DATA;);
   DATA[51] ->RWORD(F25:=DATA;);
   DATA[53] ->RWORD(F26:=DATA;);
   DATA[55] ->RWORD(F27:=DATA;);
   DATA[57] ->RWORD(F28:=DATA;);
   DATA[59] ->RWORD(F29:=DATA;);
   DATA[61] ->RWORD(F30:=DATA;);
   DATA[63] ->RWORD(F31:=DATA;);
   DATA[65] ->RWORD(F32:=DATA;);
  TIMEOUT 300
 END;
 
 TELEGRAM ReadID NAMED "Läs id" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(04); % Modbus kommando för att läsa register kod 04
   DATA[2] := RWORD(7100); % Start address
   DATA[4] := RWORD(32); % Antal register att läsa
  ANSWER SIZE 69 % (Antal register * 2) + 5
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(04);
   DATA[2] = BYTE(64); % Antal Bytes
   DATA[3] -> RWORD(V1:=DATA;);
   DATA[5] -> RWORD(V2:=DATA;);
   DATA[7] -> RWORD(V3:=DATA;);
   DATA[9] -> RWORD(V4:=DATA;);
   DATA[11] ->RWORD(V5:=DATA;);
   DATA[13] ->RWORD(V6:=DATA;);
   DATA[15] ->RWORD(V7:=DATA;);
   DATA[17] ->RWORD(V8:=DATA;);
   DATA[19] ->RWORD(V9:=DATA;);
   DATA[21] ->RWORD(V10:=DATA;);
   DATA[23] ->RWORD(V11:=DATA;);
   DATA[25] ->RWORD(V12:=DATA;);
   DATA[27] ->RWORD(V13:=DATA;);
   DATA[29] ->RWORD(V14:=DATA;);
   DATA[31] ->RWORD(V15:=DATA;);
   DATA[33] ->RWORD(V16:=DATA;);
   DATA[35] ->RWORD(V17:=DATA;);
   DATA[37] ->RWORD(V18:=DATA;);
   DATA[39] ->RWORD(V19:=DATA;);
   DATA[41] ->RWORD(V20:=DATA;);
   DATA[43] ->RWORD(V21:=DATA;);
   DATA[45] ->RWORD(V22:=DATA;);
   DATA[47] ->RWORD(V23:=DATA;);
   DATA[49] ->RWORD(V24:=DATA;);
   DATA[51] ->RWORD(V25:=DATA;);
   DATA[53] ->RWORD(V26:=DATA;);
   DATA[55] ->RWORD(V27:=DATA;);
   DATA[57] ->RWORD(V28:=DATA;);
   DATA[59] ->RWORD(V29:=DATA;);
   DATA[61] ->RWORD(V30:=DATA;);
   DATA[63] ->RWORD(V31:=DATA;);
   DATA[65] ->RWORD(V32:=DATA;);
  TIMEOUT 300
 END;
 
 TELEGRAM WriteProgram NAMED "Koppla/Ta bort" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] := HEX(10); % Modbus kommando för att skriva flera register
   DATA[2] <- RWORD(IF Device<1 OR Device>32 THEN DATA:=7000; ELSE DATA:=6999+Device; ENDIF; ); % Register adress
   DATA[4] := RWORD(1); % Antal register
   DATA[6] := BYTE(2); % Antal byte
   DATA[7] <- RWORD(
    IF Device<1 OR Device>32 THEN DATA:=0; ELSIF Oper=1 THEN DATA:=1; ELSIF Oper=2 THEN DATA:=3; ELSE DATA:=0; ENDIF;
   );
  ANSWER SIZE 8
   DATA[0] = BYTE(Id);
   DATA[1] = HEX(10);
  TIMEOUT 300
 END;
 
 TELEGRAM ReadBatry NAMED "Läs batterilarm" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(02); % Modbus kommando för att läsa register kod 02
   DATA[2] := RWORD(100); % Start address
   DATA[4] := RWORD(32); % Antal register att läsa
  ANSWER SIZE 9 % (Antal register / 8) avrundat uppåt + 5
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(02);
   DATA[2] = BYTE(4); % Antal Bytes
   DATA[3] -> BYTE(
    ASum:=0;
    IF DATA>0 THEN ASum:=1; ENDIF;
    IF (DATA & 1) THEN A1 := 1; ELSE A1 := 0; ENDIF;
    IF (DATA & 2) THEN A2 := 1; ELSE A2 := 0; ENDIF;
    IF (DATA & 4) THEN A3 := 1; ELSE A3 := 0; ENDIF;
    IF (DATA & 8) THEN A4 := 1; ELSE A4 := 0; ENDIF;
    IF (DATA & 16) THEN A5 := 1; ELSE A5 := 0; ENDIF;
    IF (DATA & 32) THEN A6 := 1; ELSE A6 := 0; ENDIF;
    IF (DATA & 64) THEN A7 := 1; ELSE A7 := 0; ENDIF;
    IF (DATA & 128) THEN A8 := 1; ELSE A8 := 0; ENDIF;
   );
   DATA[4] -> BYTE(
    IF DATA>0 THEN ASum:=1; ENDIF;
    IF (DATA & 1) THEN A9 := 1; ELSE A9 := 0; ENDIF;
    IF (DATA & 2) THEN A10 := 1; ELSE A10 := 0; ENDIF;
    IF (DATA & 4) THEN A11 := 1; ELSE A11 := 0; ENDIF;
    IF (DATA & 8) THEN A12 := 1; ELSE A12 := 0; ENDIF;
    IF (DATA & 16) THEN A13 := 1; ELSE A13 := 0; ENDIF;
    IF (DATA & 32) THEN A14 := 1; ELSE A14 := 0; ENDIF;
    IF (DATA & 64) THEN A15 := 1; ELSE A15 := 0; ENDIF;
    IF (DATA & 128) THEN A16 := 1; ELSE A16 := 0; ENDIF;
   );
      DATA[3] -> BYTE(
    IF DATA>0 THEN ASum:=1; ENDIF;
    IF (DATA & 1) THEN A17 := 1; ELSE A17 := 0; ENDIF;
    IF (DATA & 2) THEN A18 := 1; ELSE A18 := 0; ENDIF;
    IF (DATA & 4) THEN A19 := 1; ELSE A19 := 0; ENDIF;
    IF (DATA & 8) THEN A20 := 1; ELSE A20 := 0; ENDIF;
    IF (DATA & 16) THEN A21 := 1; ELSE A21 := 0; ENDIF;
    IF (DATA & 32) THEN A22 := 1; ELSE A22 := 0; ENDIF;
    IF (DATA & 64) THEN A23 := 1; ELSE A23 := 0; ENDIF;
    IF (DATA & 128) THEN A24 := 1; ELSE A24 := 0; ENDIF;
   );
   DATA[4] -> BYTE(
    IF DATA>0 THEN ASum:=1; ENDIF;
    IF (DATA & 1) THEN A25 := 1; ELSE A25 := 0; ENDIF;
    IF (DATA & 2) THEN A26 := 1; ELSE A26 := 0; ENDIF;
    IF (DATA & 4) THEN A27 := 1; ELSE A27 := 0; ENDIF;
    IF (DATA & 8) THEN A28 := 1; ELSE A28 := 0; ENDIF;
    IF (DATA & 16) THEN A29 := 1; ELSE A29 := 0; ENDIF;
    IF (DATA & 32) THEN A30 := 1; ELSE A30 := 0; ENDIF;
    IF (DATA & 64) THEN A31 := 1; ELSE A31 := 0; ENDIF;
    IF (DATA & 128) THEN A32 := 1; ELSE A32 := 0; ENDIF;
   );

  TIMEOUT 300
 END;
 
 TELEGRAM ReadPD NAMED "Läs närvaro och dörr" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(02); % Modbus kommando för att läsa register kod 02
   DATA[2] := RWORD(0); % Start address
   DATA[4] := RWORD(32); % Antal register att läsa
  ANSWER SIZE 9 % (Antal register / 8) avrundat uppåt + 5
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(02);
   DATA[2] = BYTE(4); % Antal Bytes
   DATA[3] -> BYTE(
    IF (DATA & 1) THEN P1 := 1; ELSE P1 := 0; ENDIF;
    IF (DATA & 2) THEN P2 := 1; ELSE P2 := 0; ENDIF;
    IF (DATA & 4) THEN P3 := 1; ELSE P3 := 0; ENDIF;
    IF (DATA & 8) THEN P4 := 1; ELSE P4 := 0; ENDIF;
    IF (DATA & 16) THEN P5 := 1; ELSE P5 := 0; ENDIF;
    IF (DATA & 32) THEN P6 := 1; ELSE P6 := 0; ENDIF;
    IF (DATA & 64) THEN P7 := 1; ELSE P7 := 0; ENDIF;
    IF (DATA & 128) THEN P8 := 1; ELSE P8 := 0; ENDIF;
   );
   DATA[4] -> BYTE(
    
    IF (DATA & 1) THEN P9 := 1; ELSE P9 := 0; ENDIF;
    IF (DATA & 2) THEN P10 := 1; ELSE P10 := 0; ENDIF;
    IF (DATA & 4) THEN P11 := 1; ELSE P11 := 0; ENDIF;
    IF (DATA & 8) THEN P12 := 1; ELSE P12 := 0; ENDIF;
    IF (DATA & 16) THEN P13 := 1; ELSE P13 := 0; ENDIF;
    IF (DATA & 32) THEN P14 := 1; ELSE P14 := 0; ENDIF;
    IF (DATA & 64) THEN P15 := 1; ELSE P15 := 0; ENDIF;
    IF (DATA & 128) THEN P16 := 1; ELSE P16 := 0; ENDIF;
   );
   DATA[5] -> BYTE(
    IF (DATA & 1) THEN P17 := 1; ELSE P17 := 0; ENDIF;
    IF (DATA & 2) THEN P18 := 1; ELSE P18 := 0; ENDIF;
    IF (DATA & 4) THEN P19 := 1; ELSE P19 := 0; ENDIF;
    IF (DATA & 8) THEN P20 := 1; ELSE P20 := 0; ENDIF;
    IF (DATA & 16) THEN P21 := 1; ELSE P21 := 0; ENDIF;
    IF (DATA & 32) THEN P22 := 1; ELSE P22 := 0; ENDIF;
    IF (DATA & 64) THEN P23 := 1; ELSE P23 := 0; ENDIF;
    IF (DATA & 128) THEN P24 := 1; ELSE P24 := 0; ENDIF;
   );
   DATA[6] -> BYTE(
    
    IF (DATA & 1) THEN P25 := 1; ELSE P25 := 0; ENDIF;
    IF (DATA & 2) THEN P26 := 1; ELSE P26 := 0; ENDIF;
    IF (DATA & 4) THEN P27 := 1; ELSE P27 := 0; ENDIF;
    IF (DATA & 8) THEN P28 := 1; ELSE P28 := 0; ENDIF;
    IF (DATA & 16) THEN P29 := 1; ELSE P29 := 0; ENDIF;
    IF (DATA & 32) THEN P30 := 1; ELSE P30 := 0; ENDIF;
    IF (DATA & 64) THEN P31 := 1; ELSE P31 := 0; ENDIF;
    IF (DATA & 128) THEN P32 := 1; ELSE P32 := 0; ENDIF;
   );
  TIMEOUT 300
 END;
 
 TELEGRAM ReadSleep NAMED "Läs Sovtid" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  BYTE(3); % Modbus kommando för att läsa register kod 3
   DATA[2] := RWORD(100); % Start address
   DATA[4] := RWORD(32); % Antal register att läsa
  ANSWER SIZE 69 % (Antal register * 2) + 5
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(3);
   DATA[2] = BYTE(64); % Antal Bytes
   DATA[3] ->RWORD(Z1:=DATA*10;);
   DATA[5] ->RWORD(Z2:=DATA*10;);
   DATA[7] ->RWORD(Z3:=DATA*10;);
   DATA[9] ->RWORD(Z4:=DATA*10;);
   DATA[11] ->RWORD(Z5:=DATA*10;);
   DATA[13] ->RWORD(Z6:=DATA*10;);
   DATA[15] ->RWORD(Z7:=DATA*10;);
   DATA[17] ->RWORD(Z8:=DATA*10;);
   DATA[19] ->RWORD(Z9:=DATA*10;);
   DATA[21] ->RWORD(Z10:=DATA*10;);
   DATA[23] ->RWORD(Z11:=DATA*10;);
   DATA[25] ->RWORD(Z12:=DATA*10;);
   DATA[27] ->RWORD(Z13:=DATA*10;);
   DATA[29] ->RWORD(Z14:=DATA*10;);
   DATA[31] ->RWORD(Z15:=DATA*10;);
   DATA[33] ->RWORD(Z16:=DATA*10;);
   DATA[35] ->RWORD(Z17:=DATA*10;);
   DATA[37] ->RWORD(Z18:=DATA*10;);
   DATA[39] ->RWORD(Z19:=DATA*10;);
   DATA[41] ->RWORD(Z20:=DATA*10;);
   DATA[43] ->RWORD(Z21:=DATA*10;);
   DATA[45] ->RWORD(Z22:=DATA*10;);
   DATA[47] ->RWORD(Z23:=DATA*10;);
   DATA[49] ->RWORD(Z24:=DATA*10;);
   DATA[51] ->RWORD(Z25:=DATA*10;);
   DATA[53] ->RWORD(Z26:=DATA*10;);
   DATA[55] ->RWORD(Z27:=DATA*10;);
   DATA[57] ->RWORD(Z28:=DATA*10;);
   DATA[59] ->RWORD(Z29:=DATA*10;);
   DATA[61] ->RWORD(Z30:=DATA*10;);
   DATA[63] ->RWORD(Z31:=DATA*10;);
   DATA[65] ->RWORD(Z32:=DATA*10;);
  TIMEOUT 300
 END;
 
 TELEGRAM WriteWakeUp NAMED "Ställ sovtid" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] := HEX(10); % Modbus kommando för att skriva flera register
   DATA[2] <- RWORD(IF DeviceZ<1 OR Device>32 THEN DATA:=100; ELSE DATA:=99+DeviceZ; ENDIF; ); % Register adress
   DATA[4] := RWORD(1); % Antal register
   DATA[6] := BYTE(2); % Antal byte
   DATA[7] <- RWORD(
    IF Device<1 OR Device>32 THEN DATA:=12; ELSE DATA:=WakeUpTime; ENDIF;
   );
  ANSWER SIZE 8
   DATA[0] = BYTE(Id);
   DATA[1] = HEX(10);
  TIMEOUT 300
 END;
 
END;

Användarnas noteringar

Du måste vara inloggad för att göra en notering. Bli medlem eller logga in. Vi använder en moderator som godkänner noteringarna innan de visas.