IVT REGO 5002, 5003, 5004, 5005 DU

Detaljer

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

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
%       Mode:   RTU
%
% READ/WRITE Digital output
%
% 9 digitala utgångar kan ställas från devicet.
% Ta bort kommentartecken (%) för de utgångar som skall styras.
% Uppdatera telegrammen för Läs och Ställ med de valda utgångarna.
%
% Author:  Peter Widetun, ABELKO AB Luleå
% History: 2010-02-12 inital version
%
DEVICETYPE IvtRego5005DOSET NAMED "IVTREGO StällDU" TYPEID 21341 IS

  PARAMETER
    Id :"Adress";

    %DO1  : "Tidkanal A-Larm";  %00001 Tidkanal A-Larm
    %DO2  : "Tidkanal B-Larm";  %00002 Tidkanal B-Larm
    %DO3  : "Tidkanal Dagtid";  %00003 Tidkanal Dagtid
    %DO4  : "SMS 0=Res 1=Ord";  %00004 SMSsend1: Reserv[0], Ordinarie[1]
    %DO5  : "SMS Kvittering" ;  %00005 SMSsend1, Kvittering
    %DO6  : "SMS 0=Off, 1=On";  %00006 SMSsend1: Från[0], Till[1+]
    %DO7  : "E21 Ext.start"  ;  %00007 E21, externstart
    %DO8  : "T1 Ange gfel FL";  %00008 Ange, T1, givarfel (framledning)
    %DO9  : "T3 Ange gfel ST";  %00009 Ange, T3, givarfel (slingtank)
    %DO10 : "Sendbl. VP klar";  %00010 sendblock, värmepumpen klar (kommunikationshandboken)
    %DO11 : "G1 Ange drift"  ;  %00011 Ange, G1, driftindikering
    %DO12 : "E11 Ange drift" ;  %00012 Ange, E11, driftindikering
    %DO13 : "G3 Ext.start KB";  %00013 G3, externstart (köldbärare)
     DO14 : "E21 block. VP"  ;  %00014 E21, blockering (värmepump)
    %DO15 : "E11 Tillåt t.s.";  %00015 E11, tillåt (tillskott)
    %DO16 : "G5 Extern start";  %00016 G5, externstart (underkylare) (endast G-maskiner)
    %DO17 : "B21 Lågt tryck" ;  %00017 B21, lågt tryck (värme) (stoppar allt)
    %DO18 : "G1 Ext.start FL";  %00018 G1, externstart (framledning)
    %DO19 : "E21 Ange larm"  ;  %00019 Ange, E21, larm
    %DO20 : "Tillåt On/Off"  ;  %00020 receiveblock, tillåt start/stopp (kommunikationshandboken)



  PUBLIC
    %rDO1  : "Tidkanal A-Larm";
    %rDO2  : "Tidkanal B-Larm";
    %rDO3  : "Tidkanal Dagtid";
    %rDO4  : "SMS 0=Res 1=Ord";
    %rDO5  : "SMS Kvittering" ;
    %rDO6  : "SMS 0=Off, 1=On";
    %rDO7  : "E21 Ext.start"  ;
    %rDO8  : "T1 Ange gfel FL";
    %rDO9  : "T3 Ange gfel ST";
    %rDO10 : "Sendbl. VP klar";
    %rDO11 : "G1 Ange drift"  ;
    %rDO12 : "E11 Ange drift" ;
    %rDO13 : "G3 Ext.start KB";
     rDO14 : "E21 block. VP"  ;
    %rDO15 : "E11 Tillåt t.s.";
    %rDO16 : "G5 Extern start";
    %rDO17 : "B21 Lågt tryck" ;
    %rDO18 : "G1 Ext.start FL";
    %rDO19 : "E21 Ange larm"  ;
    %rDO20 : "Tillåt On/Off"  ;

  PRIVATE
    Cnt;

  BAUDRATE 9600;
  CHECKSUM MODBUS SWAPPED;

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

    ANSWER SIZE 8
      DATA[0]   = BYTE(Id);
      DATA[1]   = HEX(01);
      DATA[2]   = BYTE(3);
     %DATA[3]  -> BYTE(
     %  IF (DATA & 1)   THEN rDO1 := 1; ELSE rDO1 := 0; ENDIF;
     %  IF (DATA & 2)   THEN rDO2 := 1; ELSE rDO2 := 0; ENDIF;
     %  IF (DATA & 4)   THEN rDO3 := 1; ELSE rDO3 := 0; ENDIF;
     %  IF (DATA & 8)   THEN rDO4 := 1; ELSE rDO4 := 0; ENDIF;
     %  IF (DATA & 16)  THEN rDO5 := 1; ELSE rDO5 := 0; ENDIF;
     %  IF (DATA & 32)  THEN rDO6 := 1; ELSE rDO6 := 0; ENDIF;
     %  IF (DATA & 64)  THEN rDO7 := 1; ELSE rDO7 := 0; ENDIF;
     %  IF (DATA & 128) THEN rDO8 := 1; ELSE rDO8 := 0; ENDIF;
     %);
      DATA[4]  -> BYTE(
     %  IF (DATA & 1)   THEN rDO9 := 1; ELSE rDO9 := 0; ENDIF;
     %  IF (DATA & 2)   THEN rDO10:= 1; ELSE rDO10:= 0; ENDIF;
     %  IF (DATA & 4)   THEN rDO11:= 1; ELSE rDO11:= 0; ENDIF;
     %  IF (DATA & 8)   THEN rDO12:= 1; ELSE rDO12:= 0; ENDIF;
     %  IF (DATA & 16)  THEN rDO13:= 1; ELSE rDO13:= 0; ENDIF;
        IF (DATA & 32)  THEN rDO14:= 1; ELSE rDO14:= 0; ENDIF;
     %  IF (DATA & 64)  THEN rDO15:= 1; ELSE rDO15:= 0; ENDIF;
     %  IF (DATA & 128) THEN rDO16:= 1; ELSE rDO16:= 0; ENDIF;
      );
     %DATA[5]  -> BYTE(
     %  IF (DATA & 1)   THEN rDO17:= 1; ELSE rDO17:= 0; ENDIF;
     %  IF (DATA & 2)   THEN rDO18:= 1; ELSE rDO18:= 0; ENDIF;
     %  IF (DATA & 4)   THEN rDO19:= 1; ELSE rDO19:= 0; ENDIF;
     %  IF (DATA & 8)   THEN rDO20:= 1; ELSE rDO20:= 0; ENDIF;
     %);

    TIMEOUT 1000
  END;

  TELEGRAM WriteDISET1 NAMED "Ställ DU1-20" IS
    QUESTION
      DATA[0]  := BYTE(Id);      % Modbus unit address
      DATA[1]  := HEX(05);       % Modbus command "05h" Set coil status (bit)
      DATA[2]  <- RWORD(         %
        IF Cnt>8 THEN Cnt:=0; ENDIF;
        IF    Cnt=0 THEN DATA := 13;  %00014 E21, blockering (värmepump)
        ELSIF Cnt=1 THEN DATA := 13;  % "
        ELSIF Cnt=2 THEN DATA := 13;  % "
        ELSIF Cnt=3 THEN DATA := 13;  % "
        ELSIF Cnt=4 THEN DATA := 13;  % "
        ELSIF Cnt=5 THEN DATA := 13;  % "
        ELSIF Cnt=6 THEN DATA := 13;  % "
        ELSIF Cnt=7 THEN DATA := 13;  % "
        ELSIF Cnt=8 THEN DATA := 13;  % "
        ENDIF;
      );
      DATA[4]  <- RWORD(
        IF    Cnt=0 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
        ELSIF Cnt=1 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
        ELSIF Cnt=2 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
        ELSIF Cnt=3 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
        ELSIF Cnt=4 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
        ELSIF Cnt=5 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
        ELSIF Cnt=6 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
        ELSIF Cnt=7 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
        ELSIF Cnt=8 THEN IF DO14 THEN DATA:=65280; ELSE DATA:=0; ENDIF;
        ENDIF;
        Cnt := Cnt + 1;
      );

    ANSWER SIZE 8
      DATA[0]   = BYTE(Id);
      DATA[1]   = HEX(05);

    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.