Produal wireless sensors 2.2 TEFL, TEUFL, KLUFL, LAFL, WPIR

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
3
Uppdaterad
2013-08-27
Skapad
2013-08-27
Kategori
Mätare, Modbus, Trådlöst
Visningar
3099

Beskrivning

Produal wireless sensors TEFL, TEUFL, KLUFL, LAFL, WPIR

Bruksanvisning

Hur man installerar typdefinitionerna och driftsätter modulerna finns beskrivet i användarmanualen, kapitel 18.7.

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Modified: 111213 OJ 2.2 changes
% Modified: 081203 PW Added TypeId 21164 - 68
%
% Device definition for PRODUAL wireless sensors version 2.2
% TEFL, TEUFL, KLUFL, LAFL, WPIR
%  
% ABELKO AB Luleå 
%
DEVICETYPE TEFL_V2_2 NAMED "Produal2.2_TEFL" TYPEID 22104 IS 
  PARAMETER
    Id  : "MasterID";
    Nod : "NodID";
  PUBLIC
    V1  : "Temperatur 1"   ["°C"]; % Node 1 TE? 248
    V2  : "Temperatur 2"   ["°C"]; % Noden 1 SP? 249
    V3  : "Luftfuktighet"  ["%RH"]; % Node 1 RH? 250
    V4  : "Fläktstatus"; % Node 1 FAN? 251
    
    B1  : "Larm batteri";
    B2  : "Avbrott kom.";
    B3  : "PIR";             % Bara LAFL
    B4  : "Tamper";
 
  PRIVATE
    Tmp;
  
  BAUDRATE 38400;
  CHECKSUM MODBUS SWAPPED;

  TELEGRAM Read NAMED "TEFL_Read" IS
    QUESTION
      DATA[0] := BYTE(Id);        % Modbus unit address
      DATA[1] := HEX(04);         % Modbus command "04h" read multiple inputregisters
      DATA[2] := RWORD(247+4*(Nod-1)); % start register (var 31+4*Nod i 2.1)
      DATA[4] := RWORD(4);        % number of registers to read
    ANSWER SIZE 13
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(04);
      DATA[3] -> RWORD(IF DATA > 32767 THEN     % Negativ ?
                         V1 := 0 - (1 + (65535-DATA))/10;
                       ELSE
                         V1 := DATA / 10;
                       ENDIF;
                       );
      DATA[5] -> RWORD(V2 := DATA / 10;);
      DATA[7] -> RWORD(V3 := DATA / 10;);
      DATA[9] -> RWORD(V4 := DATA;);
          
    TIMEOUT 300
  END;
  
  TELEGRAM Larm NAMED "TEFL_Larm" IS
    QUESTION
      DATA[0] := BYTE(Id);        % Modbus unit address
      DATA[1] := HEX(02);         % Modbus command "02h" read discrete inputs
      DATA[2] <- RWORD(IF Nod>0 THEN
                         IF Tmp>2 THEN Tmp:=0; ELSE Tmp:=Tmp+1; ENDIF;
                         DATA := Tmp*100 + Nod - 1;
                       ELSE
                         DATA := Tmp*100;
                       ENDIF;
                       );
      DATA[4] := RWORD(1);        % number of bits to read
    ANSWER SIZE 6
      DATA[0]   = BYTE(Id);
      DATA[1]   = HEX(02);
      DATA[2]   = BYTE(1);
      DATA[3]  -> BYTE(IF Tmp=0 THEN
                         IF (DATA & 1) THEN B1:=1; ELSE B1:=0; ENDIF;
 ELSIF Tmp=1 THEN
                         IF (DATA & 1) THEN B2:=1; ELSE B2:=0; ENDIF;
 ELSIF Tmp=2 THEN
                         IF (DATA & 1) THEN B3:=1; ELSE B3:=0; ENDIF;
 ELSIF Tmp=3 THEN
                         IF (DATA & 1) THEN B4:=1; ELSE B4:=0; ENDIF;
 ENDIF;
 );
          
    TIMEOUT 300
  END;
END;

DEVICETYPE TEUFL_V2_2 NAMED "Produal2.2TEUFL" TYPEID 22105 IS 
  PARAMETER
    Id  : "MasterID";
    Nod : "NodID";
  PUBLIC
    V1  : "Temperatur"     ["°C"];
    V2  : "Spänning"       ["V"];
   %V3  : "Luftfuktighet"  ["%RH"];
   %V4  : "Fläktstatus";

    B1  : "Larm batteri";
    B2  : "Avbrott kom.";
    B3  : "PIR";             % Bara LAFL
    B4  : "Tamper";
 
  PRIVATE
    Tmp;
  
  BAUDRATE 38400;
  CHECKSUM MODBUS SWAPPED;

  TELEGRAM Read NAMED "TEUFL_Read" IS
    QUESTION
      DATA[0] := BYTE(Id);        % Modbus unit address
      DATA[1] := HEX(04);         % Modbus command "04h" read multiple inputregisters
      DATA[2] := RWORD(247+4*(Nod-1)); % start register
      DATA[4] := RWORD(4);        % number of registers to read
    ANSWER SIZE 13
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(04);
      DATA[3] -> RWORD(IF DATA > 32767 THEN     % Negativ ?
                         V1 := 0 - (1 + (65535-DATA))/10;
                       ELSE
                         V1 := DATA / 10;
                       ENDIF;
                       );
      DATA[5] -> RWORD(V2 := DATA / 10;);
     %DATA[7] -> RWORD(V3 := DATA / 10;);
     %DATA[9] -> RWORD(V4 := DATA;);
          
    TIMEOUT 300
  END;

  TELEGRAM Larm NAMED "TEUFL_Larm" IS
    QUESTION
      DATA[0] := BYTE(Id);        % Modbus unit address
      DATA[1] := HEX(02);         % Modbus command "02h" read discrete inputs
      DATA[2] <- RWORD(IF Nod>0 THEN
                         IF Tmp>2 THEN Tmp:=0; ELSE Tmp:=Tmp+1; ENDIF;
                         DATA := Tmp*100 + Nod - 1;
                       ELSE
                         DATA := Tmp*100;
                       ENDIF;
                       );
      DATA[4] := RWORD(1);        % number of bits to read
    ANSWER SIZE 6
      DATA[0]   = BYTE(Id);
      DATA[1]   = HEX(02);
      DATA[2]   = BYTE(1);
      DATA[3]  -> BYTE(IF Tmp=0 THEN
                         IF (DATA & 1) THEN B1:=1; ELSE B1:=0; ENDIF;
 ELSIF Tmp=1 THEN
                         IF (DATA & 1) THEN B2:=1; ELSE B2:=0; ENDIF;
 ELSIF Tmp=2 THEN
                         IF (DATA & 1) THEN B3:=1; ELSE B3:=0; ENDIF;
 ELSIF Tmp=3 THEN
                         IF (DATA & 1) THEN B4:=1; ELSE B4:=0; ENDIF;
 ENDIF;
 );
          
    TIMEOUT 300
  END;

END;

DEVICETYPE KLUFL_V2_2 NAMED "Produal2.2KLUFL" TYPEID 22106 IS 
  PARAMETER
    Id  : "MasterId";
    Nod : "NodID";
  PUBLIC
    V1  : "Temperatur"     ["°C"];
    V2  : "Belysning"      ["lx"];
    V3  : "Luftfuktighet"  ["%RH"];
   %V4  : "Fläktstatus";
 
    B1  : "Larm batteri";
    B2  : "Avbrott kom.";
    B3  : "PIR";             % Bara LAFL
    B4  : "Tamper";
 
  PRIVATE
    Tmp;

  BAUDRATE 38400;
  CHECKSUM MODBUS SWAPPED;

  TELEGRAM Read NAMED "KLUFL_Read" IS
    QUESTION
      DATA[0] := BYTE(Id);        % Modbus unit address
      DATA[1] := HEX(04);         % Modbus command "04h" read multiple inputregisters
      DATA[2] := RWORD(247+4*(Nod-1)); % start register
      DATA[4] := RWORD(4);        % number of registers to read
    ANSWER SIZE 13
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(04);
      DATA[3] -> RWORD(IF DATA > 32767 THEN     % Negativ ?
                         V1 := 0 - (1 + (65535-DATA))/10;
                       ELSE
                         V1 := DATA / 10;
                       ENDIF;
                       );
      DATA[5] -> RWORD(V2 := DATA;);
      DATA[7] -> RWORD(V3 := DATA / 10;);
     %DATA[9] -> RWORD(V4 := DATA;);
          
    TIMEOUT 300
  END;

  TELEGRAM Larm NAMED "KLUFL_Larm" IS
    QUESTION
      DATA[0] := BYTE(Id);        % Modbus unit address
      DATA[1] := HEX(02);         % Modbus command "02h" read discrete inputs
      DATA[2] <- RWORD(IF Nod>0 THEN
                         IF Tmp>2 THEN Tmp:=0; ELSE Tmp:=Tmp+1; ENDIF;
                         DATA := Tmp*100 + Nod - 1;
                       ELSE
                         DATA := Tmp*100;
                       ENDIF;
                       );
      DATA[4] := RWORD(1);        % number of bits to read
    ANSWER SIZE 6
      DATA[0]   = BYTE(Id);
      DATA[1]   = HEX(02);
      DATA[2]   = BYTE(1);
      DATA[3]  -> BYTE(IF Tmp=0 THEN
                         IF (DATA & 1) THEN B1:=1; ELSE B1:=0; ENDIF;
 ELSIF Tmp=1 THEN
                         IF (DATA & 1) THEN B2:=1; ELSE B2:=0; ENDIF;
 ELSIF Tmp=2 THEN
                         IF (DATA & 1) THEN B3:=1; ELSE B3:=0; ENDIF;
 ELSIF Tmp=3 THEN
                         IF (DATA & 1) THEN B4:=1; ELSE B4:=0; ENDIF;
 ENDIF;
 );
          
    TIMEOUT 300
  END;

END;

DEVICETYPE LAFL_V2_2 NAMED "Produal2.2_LAFL" TYPEID 22107 IS 
  PARAMETER
    Id  : "MasterId";
    Nod : "NodID";
  PUBLIC
   %V1  : "Temperatur 1"   ["°C"];
    V2  : "Belysmning"     ["lx"];
   %V3  : "Luftfuktighet"  ["%RH"];
    V4  : "Status";
 
    B1  : "Larm batteri";
    B2  : "Avbrott kom.";
    B3  : "PIR";             % Bara LAFL
    B4  : "Tamper";
 
  PRIVATE
    Tmp;

  BAUDRATE 38400;
  CHECKSUM MODBUS SWAPPED;

  TELEGRAM Read NAMED "LAFL_Read" IS
    QUESTION
      DATA[0] := BYTE(Id);        % Modbus unit address
      DATA[1] := HEX(04);         % Modbus command "04h" read multiple inputregisters
      DATA[2] := RWORD(247+4*(Nod-1)); % start register
      DATA[4] := RWORD(4);        % number of registers to read
    ANSWER SIZE 13
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(04);
     %DATA[3] -> RWORD(IF DATA > 32767 THEN     % Negativ ?
     %                    V1 := 0 - (1 + (65535-DATA))/10;
     %                 ELSE
     %                   V1 := DATA / 10;
     %                 ENDIF;
     %                 );
      DATA[5] -> RWORD(V2 := DATA;);
     %DATA[7] -> RWORD(V3 := DATA / 10;);
      DATA[9] -> RWORD(V4 := DATA;);
          
    TIMEOUT 300
  END;

  TELEGRAM Larm NAMED "LAFL_Larm" IS
    QUESTION
      DATA[0] := BYTE(Id);        % Modbus unit address
      DATA[1] := HEX(02);         % Modbus command "02h" read discrete inputs
      DATA[2] <- RWORD(IF Nod>0 THEN
                         IF Tmp>2 THEN Tmp:=0; ELSE Tmp:=Tmp+1; ENDIF;
                         DATA := Tmp*100 + Nod - 1;
                       ELSE
                         DATA := Tmp*100;
                       ENDIF;
                       );
      DATA[4] := RWORD(1);        % number of bits to read
    ANSWER SIZE 6
      DATA[0]   = BYTE(Id);
      DATA[1]   = HEX(02);
      DATA[2]   = BYTE(1);
      DATA[3]  -> BYTE(IF Tmp=0 THEN
                         IF (DATA & 1) THEN B1:=1; ELSE B1:=0; ENDIF;
 ELSIF Tmp=1 THEN
                         IF (DATA & 1) THEN B2:=1; ELSE B2:=0; ENDIF;
 ELSIF Tmp=2 THEN
                         IF (DATA & 1) THEN B3:=1; ELSE B3:=0; ENDIF;
 ELSIF Tmp=3 THEN
                         IF (DATA & 1) THEN B4:=1; ELSE B4:=0; ENDIF;
 ENDIF;
 );
          
    TIMEOUT 300
  END;

END;

DEVICETYPE WPIR_V2_2 NAMED "Produal2.2_WPIR" TYPEID 22108 IS 
  PARAMETER
    Id  : "MasterId";
    Nod : "NodID";
  PUBLIC
    V1  : "Temperatur"     ["°C"];
   %V2  : "Temperatur 1"   ["°C"];
    V3  : "Luftfuktighet"  ["%RH"];
   %V4  : "Fläktstatus";
 
    B1  : "Larm batteri";
    B2  : "Avbrott kom.";
    B3  : "PIR";             % Bara LAFL
    B4  : "Tamper";
 
  PRIVATE
    Tmp;

  BAUDRATE 38400;
  CHECKSUM MODBUS SWAPPED;

  TELEGRAM Read NAMED "WPIR_Read" IS
    QUESTION
      DATA[0] := BYTE(Id);        % Modbus unit address
      DATA[1] := HEX(04);         % Modbus command "04h" read multiple inputregisters
      DATA[2] := RWORD(247+4*(Nod-1)); % start register
      DATA[4] := RWORD(4);        % number of registers to read
    ANSWER SIZE 13
      DATA[0] = BYTE(Id);
      DATA[1] = HEX(04);
      DATA[3] -> RWORD(IF DATA > 32767 THEN     % Negativ ?
                         V1 := 0 - (1 + (65535-DATA))/10;
                       ELSE
                         V1 := DATA / 10;
                       ENDIF;
                       );
     %DATA[5] -> RWORD(V2 := DATA / 10;);
      DATA[7] -> RWORD(V3 := DATA / 10;);
     %DATA[9] -> RWORD(V4 := DATA;);
          
    TIMEOUT 300
  END;

  TELEGRAM Larm NAMED "WPIR_Larm" IS
    QUESTION
      DATA[0] := BYTE(Id);        % Modbus unit address
      DATA[1] := HEX(02);         % Modbus command "02h" read discrete inputs
      DATA[2] <- RWORD(IF Nod>0 THEN
                         IF Tmp>2 THEN Tmp:=0; ELSE Tmp:=Tmp+1; ENDIF;
                         DATA := Tmp*100 + Nod - 1;
                       ELSE
                         DATA := Tmp*100;
                       ENDIF;
                       );
      DATA[4] := RWORD(1);        % number of bits to read
    ANSWER SIZE 6
      DATA[0]   = BYTE(Id);
      DATA[1]   = HEX(02);
      DATA[2]   = BYTE(1);
      DATA[3]  -> BYTE(IF Tmp=0 THEN
                         IF (DATA & 1) THEN B1:=1; ELSE B1:=0; ENDIF;
 ELSIF Tmp=1 THEN
                         IF (DATA & 1) THEN B2:=1; ELSE B2:=0; ENDIF;
 ELSIF Tmp=2 THEN
                         IF (DATA & 1) THEN B3:=1; ELSE B3:=0; ENDIF;
 ELSIF Tmp=3 THEN
                         IF (DATA & 1) THEN B4:=1; ELSE B4:=0; ENDIF;
 ENDIF;
 );
          
    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.