Lufft väderstation WSx

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
2
Uppdaterad
2016-08-30
Skapad
2016-08-30
Kategori
Energioptimering, Kyla, Mätare, Modbus, Värme, Ventilation
Visningar
3382

Beskrivning

Observera att vilka värden som finns varierar med modell på väderstation.

Bruksanvisning

Denna drivrutin är avsedd för IMSE Ultra/IPX3

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
%
% OBS! Vilka värden som finns varierar beroende på modell
%
DEVICETYPE WSx NAMED "Vädestation WSx" TYPEID 15235 IS

 PARAMETER
  Id       : "Adress" [""]INT;

 PUBLIC
  V1 : "Local altitude" ["m"]INT;
  V2 : "Deviation" ["°"]DEC1;
  V3 : "Averaging Interval TFF" ["min"];
  V4 : "Averaging Interval Air Pressure" ["min"];
  V5 : "Averaging Interval Wind" ["min"];
  V6 : "Averaging Interval Global Radiation" ["min"];
  V7 : "Heating Mode" [""]INT; % 0=auto, 1=mode 1, 2=Off, 3= Eco 1
  V8 : "Device status" [""]INT;
  V9 : "Sensor status 1" [""]INT;
  V10 : "Sensor status 2" [""]INT;
  V11 : "Sensor status 3" [""]INT;
  V12 : "Sensor status 4" [""]INT;
  V13 : "Sensor status 5" [""]INT;
  V14 : "Sensor status 6" [""]INT;
  V15 : "Relative Humidity (act)" ["%"]DEC1;
  V16 : "Relative Humidity (min)" ["%"]DEC1;
  V17 : "Relative Humidity (max)" ["%"]DEC1;
  V18 : "Relative Humidity (avg)" ["%"]DEC1;
  V19 : "Rel air pressure (act)" ["hPa"]DEC1;
  V20 : "Rel air pressure (min)" ["hPa"]DEC1;
  V21 : "Rel air pressure (max)" ["hPa"]DEC1;
  V22 : "Rel air pressure (avg)" ["hPa"]DEC1;
  V23 : "Wind direction (act)" ["°"]DEC1;
  V24 : "Wind direction (min)" ["°"]DEC1;
  V25 : "Wind direction (max)" ["°"]DEC1;
  V26 : "Wind direction (vct)" ["°"]DEC1;
  V27 : "Wind direction fast" ["°"]DEC1;
  V28 : "Wind direction compass corr" ["°"]DEC1;
  V29 : "Compass" ["°"]DEC1;
  V30 : "Precipation type" [""]INT;
  V31 : "Wind measurement quality" ["%"]INT;
  V32 : "Global radiation (act)" ["W/m2"]DEC1;
  V33 : "Global radiation (min)" ["W/m2"]DEC1;
  V34 : "Global radiation (max)" ["W/m2"]DEC1;
  V35 : "Global radiation (avg)" ["W/m2"]DEC1;
  V36 : "Air temperature (act)" ["°C"]DEC1;
  V37 : "Air temperature (min)" ["°C"]DEC1;
  V38 : "Air temperature (max)" ["°C"]DEC1;
  V39 : "Air Temperature (avg)" ["°C"]DEC1;
  V40 : "Dew Point (act)" ["°C"]DEC1;
  V41 : "Dew Point (min)" ["°C"]DEC1;
  V42 : "Dew Point (max)" ["°C"]DEC1;
  V43 : "Dew Point (avg)" ["°C"]DEC1;
  V44 : "Wind chill temperature" ["°C"]DEC1;
  V45 : "Heating temperature wind" ["°C"]DEC1;
  V46 : "Heating temperature RS2" ["°C"]DEC1;
  V47 : "Wind speed (act)" ["m/s"]DEC1;
  V48 : "Wind speed (min)" ["m/s"]DEC1;
  V49 : "Wind speed (max)" ["m/s"]DEC1;
  V50 : "Wind speed (avg)" ["m/s"]DEC1;
  V51 : "Wind speed (vct)" ["m/s"]DEC1;
  V52 : "Wind speed fast" ["m/s"]DEC1;
  V53 : "Precipitation abs" ["mm"]DEC2;
  V54 : "Precipitation diff" ["mm"]DEC2;
  V55 : "Precipitation" ["mm/h"]DEC2;
  V56 : "Absolute Humidity (act)" ["g/m3"]DEC1;
  V57 : "Absolute Humidity (min)" ["g/m3"]DEC1;
  V58 : "Absolute Humidity (max)" ["g/m3"]DEC1;
  V59 : "Absolute Humidity (avg)" ["g/m3"]DEC1;
  V60 : "Mixing Ratio (act)" ["g/kg"]DEC1;
  V61 : "Mixing Ratio (min)" ["g/kg"]DEC1;
  V62 : "Mixing Ratio (max)" ["g/kg"]DEC1;
  V63 : "Mixing Ratio (avg)" ["g/kg"]DEC1;
  V64 : "Abs Air Pressure (act)" ["hPa"]DEC1;
  V65 : "Abs Air Pressure (min)" ["hPa"]DEC1;
  V66 : "Abs Air Pressure (max)" ["hPa"]DEC1;
  V67 : "Abs Air Pressure (avg)" ["hPa"]DEC1;
  V68 : "Wet bulb temperature" ["°C"]DEC1;
  V69 : "Specific enthalpy (act)" ["kJ/kg"]DEC3;
  V70 : "Air Density (act)" ["kg/m3"]INT;
  V71 : "Leaf Wetness (act)" ["mV"]INT;
  V72 : "Leaf Wetness (min)" ["mV"]INT;
  V73 : "Leaf Wetness (max)" ["mV"]INT;
  V74 : "Leaf Wetness (avg)" ["mV"]INT;
  V75 : "Leaf wetness state (act)" [""]INT;
  V76 : "External temperature (act)" ["°C"]DEC1;
  V77 : "Wind Value Quality (fast)" [""]INT;

 PRIVATE

 BAUDRATE 19200;
 PARITY EVEN;
 CHECKSUM MODBUS SWAPPED;

 TELEGRAM ReadHolding NAMED "ReadHolding" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(03); % Modbus kommando för att läsa register kod 03
   DATA[2] := RWORD(0); % Start address
   DATA[4] := RWORD(7); % Antal register att läsa
  ANSWER SIZE 19 % (Antal register * 2) + 5
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(03);
   DATA[2] = BYTE(14); % Antal Bytes
   DATA[3] -> RWORD(V1 := DATA;);
   DATA[5] -> RWORD(IF (DATA>=32768) THEN V2:=(DATA-65536)/10; ELSE V2:=DATA/10; ENDIF;);
   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;);
  TIMEOUT 300
 END;

 TELEGRAM ReadInput NAMED "ReadInput" 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(1); % Start address
   DATA[4] := RWORD(109); % Antal register att läsa
  ANSWER SIZE 223 % (Antal register * 2) + 5
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(04);
   DATA[2] = BYTE(218); % Antal Bytes
   DATA[3] -> RWORD(V8 := DATA;);
   DATA[5] -> RWORD(V9 := DATA;);
   DATA[7] -> RWORD(V10 := DATA;);
   DATA[9] -> RWORD(V11 := DATA;);
   DATA[11] -> RWORD(V12 := DATA;);
   DATA[13] -> RWORD(V13 := DATA;);
   DATA[15] -> RWORD(V14 := DATA;);
   DATA[21] -> RWORD(IF (DATA>=32768) THEN V15:=(DATA-65536)/10; ELSE V15:=DATA/10; ENDIF;);
   DATA[23] -> RWORD(IF (DATA>=32768) THEN V16:=(DATA-65536)/10; ELSE V16:=DATA/10; ENDIF;);
   DATA[25] -> RWORD(IF (DATA>=32768) THEN V17:=(DATA-65536)/10; ELSE V17:=DATA/10; ENDIF;);
   DATA[27] -> RWORD(IF (DATA>=32768) THEN V18:=(DATA-65536)/10; ELSE V18:=DATA/10; ENDIF;);
   DATA[29] -> RWORD(IF (DATA>=32768) THEN V19:=(DATA-65536)/10; ELSE V19:=DATA/10; ENDIF;);
   DATA[31] -> RWORD(IF (DATA>=32768) THEN V20:=(DATA-65536)/10; ELSE V20:=DATA/10; ENDIF;);
   DATA[33] -> RWORD(IF (DATA>=32768) THEN V21:=(DATA-65536)/10; ELSE V21:=DATA/10; ENDIF;);
   DATA[35] -> RWORD(IF (DATA>=32768) THEN V22:=(DATA-65536)/10; ELSE V22:=DATA/10; ENDIF;);
   DATA[37] -> RWORD(IF (DATA>=32768) THEN V23:=(DATA-65536)/10; ELSE V23:=DATA/10; ENDIF;);
   DATA[39] -> RWORD(IF (DATA>=32768) THEN V24:=(DATA-65536)/10; ELSE V24:=DATA/10; ENDIF;);
   DATA[41] -> RWORD(IF (DATA>=32768) THEN V25:=(DATA-65536)/10; ELSE V25:=DATA/10; ENDIF;);
   DATA[43] -> RWORD(IF (DATA>=32768) THEN V26:=(DATA-65536)/10; ELSE V26:=DATA/10; ENDIF;);
   DATA[45] -> RWORD(IF (DATA>=32768) THEN V27:=(DATA-65536)/10; ELSE V27:=DATA/10; ENDIF;);
   DATA[47] -> RWORD(IF (DATA>=32768) THEN V28:=(DATA-65536)/10; ELSE V28:=DATA/10; ENDIF;);
   DATA[49] -> RWORD(IF (DATA>=32768) THEN V29:=(DATA-65536)/10; ELSE V29:=DATA/10; ENDIF;);
   DATA[51] -> RWORD(V30 := DATA;);
   DATA[53] -> RWORD(V31 := DATA;);
   DATA[55] -> RWORD(IF (DATA>=32768) THEN V32:=(DATA-65536)/10; ELSE V32:=DATA/10; ENDIF;);
   DATA[57] -> RWORD(IF (DATA>=32768) THEN V33:=(DATA-65536)/10; ELSE V33:=DATA/10; ENDIF;);
   DATA[59] -> RWORD(IF (DATA>=32768) THEN V34:=(DATA-65536)/10; ELSE V34:=DATA/10; ENDIF;);
   DATA[61] -> RWORD(IF (DATA>=32768) THEN V35:=(DATA-65536)/10; ELSE V35:=DATA/10; ENDIF;);
   DATA[63] -> RWORD(IF (DATA>=32768) THEN V36:=(DATA-65536)/10; ELSE V36:=DATA/10; ENDIF;);
   DATA[65] -> RWORD(IF (DATA>=32768) THEN V37:=(DATA-65536)/10; ELSE V37:=DATA/10; ENDIF;);
   DATA[67] -> RWORD(IF (DATA>=32768) THEN V38:=(DATA-65536)/10; ELSE V38:=DATA/10; ENDIF;);
   DATA[69] -> RWORD(IF (DATA>=32768) THEN V39:=(DATA-65536)/10; ELSE V39:=DATA/10; ENDIF;);
   DATA[71] -> RWORD(IF (DATA>=32768) THEN V40:=(DATA-65536)/10; ELSE V40:=DATA/10; ENDIF;);
   DATA[73] -> RWORD(IF (DATA>=32768) THEN V41:=(DATA-65536)/10; ELSE V41:=DATA/10; ENDIF;);
   DATA[75] -> RWORD(IF (DATA>=32768) THEN V42:=(DATA-65536)/10; ELSE V42:=DATA/10; ENDIF;);
   DATA[77] -> RWORD(IF (DATA>=32768) THEN V43:=(DATA-65536)/10; ELSE V43:=DATA/10; ENDIF;);
   DATA[79] -> RWORD(IF (DATA>=32768) THEN V44:=(DATA-65536)/10; ELSE V44:=DATA/10; ENDIF;);
   DATA[81] -> RWORD(IF (DATA>=32768) THEN V45:=(DATA-65536)/10; ELSE V45:=DATA/10; ENDIF;);
   DATA[83] -> RWORD(IF (DATA>=32768) THEN V46:=(DATA-65536)/10; ELSE V46:=DATA/10; ENDIF;);
   DATA[85] -> RWORD(IF (DATA>=32768) THEN V47:=(DATA-65536)/10; ELSE V47:=DATA/10; ENDIF;);
   DATA[87] -> RWORD(IF (DATA>=32768) THEN V48:=(DATA-65536)/10; ELSE V48:=DATA/10; ENDIF;);
   DATA[89] -> RWORD(IF (DATA>=32768) THEN V49:=(DATA-65536)/10; ELSE V49:=DATA/10; ENDIF;);
   DATA[91] -> RWORD(IF (DATA>=32768) THEN V50:=(DATA-65536)/10; ELSE V50:=DATA/10; ENDIF;);
   DATA[93] -> RWORD(IF (DATA>=32768) THEN V51:=(DATA-65536)/10; ELSE V51:=DATA/10; ENDIF;);
   DATA[95] -> RWORD(IF (DATA>=32768) THEN V52:=(DATA-65536)/10; ELSE V52:=DATA/10; ENDIF;);
   DATA[97] -> RWORD(IF (DATA>=32768) THEN V53:=(DATA-65536)/100; ELSE V53:=DATA/100; ENDIF;);
   DATA[99] -> RWORD(IF (DATA>=32768) THEN V54:=(DATA-65536)/100; ELSE V54:=DATA/100; ENDIF;);
   DATA[101] -> RWORD(IF (DATA>=32768) THEN V55:=(DATA-65536)/100; ELSE V55:=DATA/100; ENDIF;);
   DATA[143] -> RWORD(IF (DATA>=32768) THEN V56:=(DATA-65536)/10; ELSE V56:=DATA/10; ENDIF;);
   DATA[145] -> RWORD(IF (DATA>=32768) THEN V57:=(DATA-65536)/10; ELSE V57:=DATA/10; ENDIF;);
   DATA[147] -> RWORD(IF (DATA>=32768) THEN V58:=(DATA-65536)/10; ELSE V58:=DATA/10; ENDIF;);
   DATA[149] -> RWORD(IF (DATA>=32768) THEN V59:=(DATA-65536)/10; ELSE V59:=DATA/10; ENDIF;);
   DATA[151] -> RWORD(IF (DATA>=32768) THEN V60:=(DATA-65536)/10; ELSE V60:=DATA/10; ENDIF;);
   DATA[153] -> RWORD(IF (DATA>=32768) THEN V61:=(DATA-65536)/10; ELSE V61:=DATA/10; ENDIF;);
   DATA[155] -> RWORD(IF (DATA>=32768) THEN V62:=(DATA-65536)/10; ELSE V62:=DATA/10; ENDIF;);
   DATA[157] -> RWORD(IF (DATA>=32768) THEN V63:=(DATA-65536)/10; ELSE V63:=DATA/10; ENDIF;);
   DATA[159] -> RWORD(IF (DATA>=32768) THEN V64:=(DATA-65536)/10; ELSE V64:=DATA/10; ENDIF;);
   DATA[161] -> RWORD(IF (DATA>=32768) THEN V65:=(DATA-65536)/10; ELSE V65:=DATA/10; ENDIF;);
   DATA[163] -> RWORD(IF (DATA>=32768) THEN V66:=(DATA-65536)/10; ELSE V66:=DATA/10; ENDIF;);
   DATA[165] -> RWORD(IF (DATA>=32768) THEN V67:=(DATA-65536)/10; ELSE V67:=DATA/10; ENDIF;);
   DATA[197] -> RWORD(IF (DATA>=32768) THEN V68:=(DATA-65536)/10; ELSE V68:=DATA/10; ENDIF;);
   DATA[201] -> RWORD(IF (DATA>=32768) THEN V69:=(DATA-65536)/1000; ELSE V69:=DATA/1000; ENDIF;);
   DATA[203] -> RWORD(IF (DATA>=32768) THEN V70:=(DATA-65536); ELSE V70:=DATA; ENDIF;);
   DATA[205] -> RWORD(IF (DATA>=32768) THEN V71:=(DATA-65536); ELSE V71:=DATA; ENDIF;);
   DATA[207] -> RWORD(IF (DATA>=32768) THEN V72:=(DATA-65536); ELSE V72:=DATA; ENDIF;);
   DATA[209] -> RWORD(IF (DATA>=32768) THEN V73:=(DATA-65536); ELSE V73:=DATA; ENDIF;);
   DATA[211] -> RWORD(IF (DATA>=32768) THEN V74:=(DATA-65536); ELSE V74:=DATA; ENDIF;);
   DATA[213] -> RWORD(IF (DATA>=32768) THEN V75:=(DATA-65536); ELSE V75:=DATA; ENDIF;);
   DATA[215] -> RWORD(IF (DATA>=32768) THEN V76:=(DATA-65536)/10; ELSE V76:=DATA/10; ENDIF;);
   DATA[219] -> RWORD(V77 := DATA;);
  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.