IVT REGO 5002, 5003, 5004, 5005 Läs DI

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
2
Uppdaterad
2018-05-21
Skapad
2015-10-01
Kategori
Modbus, Värme
Visningar
1898

Beskrivning

drivrutin för IVT REGO 5002, 5003, 5004, 5005

Bruksanvisning

.

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for IVT REGO 5002, 5003, 5004, 5005
%
% Settings module:
%       Parity: None
%       Baud:   9600
%
% READ Digital input
%
% Author:  Peter Widetun, ABELKO AB Luleå
% History: 2010-02-12 inital version
%          2011-01-25 Inläsning var förskjuten 1 bit DI0 saknades
%
DEVICETYPE IvtRego5005DI1 NAMED "IVTREGO Läs DI" TYPEID 21340 IS

  PARAMETER
    Id :"Adress";

  PUBLIC
%GH
  %DI0 :"Låg temp VVladd";  %10001 Låg temp i laddkrets VV          End. 5003
  %DI1 :"Låg tryck värme";  %10002 Lågt tryck värme (stoppar allt)
  %DI2 :"Buffertank"     ;  %10003 Buffertank: Ja[1], Nej[0]
  %DI3 :"Laddning tappv.";  %10004 Tappvattenladdning: Ja[1], Nej[0]
  %DI4 :"Låg tryck kyla" ;  %10005 B31, lågt tryck kyla
  %DI5 :"E11 larm tills.";  %10006 E11, larmingång (tillskott)
  DI6  :"E21 driftind."  ;  %10007 E21, driftindikering (värmepump)
  DI7  :"G1 larm framl." ;  %10008 G1, larmingång (framledning)
  DI8  :"E11 driftind."  ;  %10009 E11, driftindikering (tillskott)
  DI9  :"G1 drift framl.";  %10010 G1, driftindikering (framledning)
  DI10 :"G2 drift värmeb";  %10011 G2, driftindikering (värmebärare)
  DI11 :"G3 drift köldb.";  %10012 G3, driftindikering (köldbärare)
  DI12 :"G5 drift h.gasp";  %10013 G5, driftindikering (hetgaspump)
  DI13 :"G7 drift laddn.";  %10014 G7, driftindikering (laddning)
  DI14 :"Tillåt on/off"  ;  %10015 receiveblock, tillåt start/stopp (kommunikationshandboken)
  DI15 :"E21 summalarm"  ;  %10016 E21, summalarm
  DI16 :"Q21 status 1=VV";  %10017 Q21, status: VV[1], Värme[0]
  DI17 :"Summalarm A"    ;  %10018 Summalarm, A-larm
  DI18 :"Summalarm B"    ;  %10019 Summalarm, B-larm
  DI19 :"Summalarm C"    ;  %10020 Summalarm, C-larm
  DI20 :"Q41 VVC 1=Hetg.";  %10021 Q41, val av VVC-flöde: Slingtank + Hetgas[0], Hetgas[1] End. 5004
  DI21 :"G2 VBpump hög"  ;  %10022 G2, driftindikering hög hastighet (värmebärarpump)      End. 5005

  PRIVATE

  BAUDRATE 9600;
  CHECKSUM MODBUS SWAPPED;

  TELEGRAM ReadDI1 NAMED "Läs DI1-21" IS
    QUESTION
      DATA[0]  := BYTE(Id);      % Modbus unit address
      DATA[1]  := HEX(02);       % Modbus command "02h" read discrete input (bit)
      DATA[2]  := RWORD(0);      % Start adress
      DATA[4]  := RWORD(22);     % Number of inputs

    ANSWER SIZE 8
      DATA[0]   = BYTE(Id);
      DATA[1]   = HEX(02);
      DATA[2]   = BYTE(3);
      DATA[3]  -> BYTE(%IF (DATA & 1)  THEN DI0 := 1; ELSE DI0 := 0; ENDIF;
                       %IF (DATA & 2)  THEN DI1 := 1; ELSE DI1 := 0; ENDIF;
                       %IF (DATA & 4)  THEN DI2 := 1; ELSE DI2 := 0; ENDIF;
                       %IF (DATA & 8)  THEN DI3 := 1; ELSE DI3 := 0; ENDIF;
                       %IF (DATA & 16) THEN DI4 := 1; ELSE DI4 := 0; ENDIF;
                       %IF (DATA & 32) THEN DI5 := 1; ELSE DI5 := 0; ENDIF;
                       IF (DATA & 64)  THEN DI6 := 1; ELSE DI6 := 0; ENDIF;
                       IF (DATA & 128) THEN DI7 := 1; ELSE DI7 := 0; ENDIF;
                       );                                      
      DATA[4]  -> BYTE(IF (DATA & 1)   THEN DI8 := 1; ELSE DI8 := 0; ENDIF;
                       IF (DATA & 2)   THEN DI9 := 1; ELSE DI9 := 0; ENDIF;
                       IF (DATA & 4)   THEN DI10:= 1; ELSE DI10:= 0; ENDIF;
                       IF (DATA & 8)   THEN DI11:= 1; ELSE DI11:= 0; ENDIF;
                       IF (DATA & 16)  THEN DI12:= 1; ELSE DI12:= 0; ENDIF;
                       IF (DATA & 32)  THEN DI13:= 1; ELSE DI13:= 0; ENDIF;
                       IF (DATA & 64)  THEN DI14:= 1; ELSE DI14:= 0; ENDIF;
                       IF (DATA & 128) THEN DI15:= 1; ELSE DI15:= 0; ENDIF;
                       );                                      
      DATA[5]  -> BYTE(IF (DATA & 1)   THEN DI16:= 1; ELSE DI16:= 0; ENDIF;
                       IF (DATA & 2)   THEN DI17:= 1; ELSE DI17:= 0; ENDIF;
                       IF (DATA & 4)   THEN DI18:= 1; ELSE DI18:= 0; ENDIF;
                       IF (DATA & 8)   THEN DI19:= 1; ELSE DI19:= 0; ENDIF;
                       IF (DATA & 16)  THEN DI20:= 1; ELSE DI20:= 0; ENDIF;
                       IF (DATA & 32)  THEN DI21:= 1; ELSE DI21:= 0; ENDIF;
                       );
    TIMEOUT 1000
  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.