Calec ST II

Detaljer

Typ
Drivrutin
Upplaggd av
Peter Widetun, Abelko Innovation
Version
1
Uppdaterad
2017-05-29
Skapad
2017-05-29
Kategori
Modbus
Visningar
2852

Beskrivning

Läser energi, volym, massa, effekt, flöde, temp värme och temp kyla.
Skriptet förberett för inläsning av samtliga register vilket innefattar 3 energier, 2 volymer, 3 räkneverk, 3 temperaturer, massa, effekt, flöde volym, flöde massa och densitet.
Eget telegram för läsning status. som kan utökas för inläsning av t.ex. drift-tid och larm-tid.
Skriptet använder modulens default-inställning: 19200 baud och jämn paritet.

Bruksanvisning

Aktivering av telegram för status-inläsning ger uppdatering enligt inställt intervall.
För "Läs värden" telegrammet bör intervallet väljas till 1 sekund. Det innebär att varje värdet blir uppdaterat var 7:e sekund, eftersom bara ett värde läses per sekund.

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 CALEC ST II
%
% General device parameters
%  0    Device C0=ST, C1=MASSE, C2=Flow, C4=BDE, C7=TGR, C8=BDV, C9=DTF
%  1    Status 0=OK, 1=ERROR, 2=ALARM
%  2    Medium 04=Cold, 0C=Heat, 07=Water, 0F=Unknown
%  4-5  Serial Number 0…99999999
%  6-7  Operating hours 0…99999999
%  8-9  Error hours 0…99999999
% 10-11 Alarm hours 0…99999999
% 12-13 Firmware Version
% 14-15 Hardware Version
% 20    Address 1-247
% 21    Baud rate 0=300, 1=2400, 2=9600, 3=19200, 4=38400
% 22    Parity 0=even, 1=odd, 2=none

% IEEE754 Float values represented in 2 registers, 
% unit readable in next register: 0=kWh, 1=m3, 2=t(ton), 3=no unit, 10=kW, 11=m3/h, 12=t/h, 13=°C, 14=K, 15=kg/m3 
% 100-101, 102 Energy  1   [KWh] 
% 110-111, 112 Energy  2   [KWh] (BDE, BDV, DTF, TGR)
% 120-121, 122 Energy  3   [KWh] (BDE, BDV, DTF, TGR)
% 200-201, 202 Volume  1   [m3]
% 210-211, 212 Volume  2   [m3]  (BDE, BDV, DTF)
% 300-301, 302 Mass        [t]
% 400-401, 402 Counter 1   [kwh]=0, [m3]=1, [t]=2, No unit=3
% 410-411, 412 Counter 2   [kwh]=0, [m3]=1, [t]=2, No unit=3
% 420-421, 422 Counter 3   [kwh]=0, [m3]=1, [t]=2, No unit=3
% 500-501, 502 Power       [KW]
% 600-601, 602 Volume flow [m3/h]
% 700-701, 702 Mass flow   [t/h]
% 800-801, 802 Temp Hot    [°C]
% 810-811, 812 Temp Cold   [°C]
% 820-821, 822 Temp diff   [K]
% 900-901, 902 Density     [kg/m3]
%
% Settings module:
%       Parity: Even
%       Baud:   19200
%       Mode:   RTU

% Author:  Peter Widetun, ABELKO AB Luleå 
% History: 2017-05-29 inital version
%
DEVICETYPE CALEC_STII NAMED "Calec_ST_II" TYPEID 21490 IS 
  
  PARAMETER
    Id     : "Adress";
   
  PUBLIC

   %R0     : "Enhetstyp"  ; % C0=ST, C1=MASSE, C2=Flow, C4=BDE, C7=TGR, C8=BDV, C9=DTF
    R1     : "Status"     ; % 0=OK, 1=ERROR, 2=ALARM
   %R2     : "Medium"     ; % 04=Cold, 0C=Heat, 07=Water, 0F=Unknown
   %R4     : "Ser_Nummer" ; % 0…99999999, 2 registers
   %R6     : "Op_tid"     ; % 0…99999999, 2 registers
   %R8     : "Fel_tid"    ; % 0…99999999, 2 registers
   %R10    : "Larm_tid"   ; % 0…99999999, 2 registers
   %R12    : "SW_Ver"     ; %           , 2 registers
   %R14    : "HW_Ver"     ; %           , 2 registers
   %R20    : "Adress"     ; % 1-247
   %R21    : "Baudrate"   ; % 0=300, 1=2400, 2=9600, 3=19200, 4=38400
   %R22    : "Paritet"    ; % 0=even, 1=odd, 2=none
    
    R100   : "Energi_1"   ["kWh"]  ;   % IEEE754 Float values, 2 registers (4 bytes)
   %R110   : "Energi_2"   ["kWh"]  ;
   %R120   : "Energi_3"   ["kWh"]  ;
    R200   : "Volym_1"    ["m3"]   ;
   %R210   : "Volym_2"    ["m3"]   ;
    R300   : "Massa"      ["t"]    ;
   %R400   : "Räknare_1"  ["kWh"]  ;   % [kwh]=0, [m3]=1, [t]=2, No unit=3
   %R410   : "Räknare_2"  ["kWh"]  ;   % [kwh]=0, [m3]=1, [t]=2, No unit=3
   %R420   : "Räknare_3"  ["kWh"]  ;   % [kwh]=0, [m3]=1, [t]=2, No unit=3
    R500   : "Effekt"     ["kW"]   ;
    R600   : "Flöde"      ["m3/h"] ;   % Flöde volym m3 per timme
   %R700   : "Flöde"      ["t/h"]  ;   % Flöde mass ton per timme
    R800   : "Temp_Varm"  ["°C"]   ;
    R810   : "Temp_Kall"  ["°C"]   ;
   %R820   : "Temp_Diff"  ["K"]    ;
   %R900   : "Densitet"   ["kg/m3"];
  
  PRIVATE
    cnt;
    tmp;

  BAUDRATE 19200;
  PARITY EVEN;
  CHECKSUM MODBUS SWAPPED;
  
  TELEGRAM CValues NAMED "Läs värden" IS
    QUESTION
     DATA[0] := BYTE(Id); % Enhetens Modbus adress
     DATA[1] := BYTE(3);  % Modbus kommando för att läsa register
     DATA[2] <- RWORD(    % Start adress register to read
       cnt := cnt + 1;
       IF (cnt>6) THEN cnt := 0; ENDIF;
       IF    (cnt=0) THEN tmp := 100;    % 0 Energi_1
       ELSIF (cnt=1) THEN tmp := 200;    % 1 Volym_1
       ELSIF (cnt=2) THEN tmp := 300;    % 2 Massa
       ELSIF (cnt=3) THEN tmp := 500;    % 3 Effekt
       ELSIF (cnt=4) THEN tmp := 600;    % 4 Flöde_volym
       ELSIF (cnt=5) THEN tmp := 800;    % 5 Temp_Het
       ELSE               tmp := 810;    % 6 Temp_Kall
       ENDIF;
       DATA:= tmp;
       );
     DATA[4] := RWORD(2); % Läs 2 register, IEEE754 Float values
    ANSWER SIZE 9         % 5 + 2*antal register
     DATA[0] = BYTE(Id);  % Check ID
     DATA[1] = BYTE(3);   % Check kommando
    %DATA[2] = BYTE(4);   % Check antal byte
     DATA[3] -> FLOAT(    % Uppdatera värde
      IF    (cnt=0) THEN R100 := DATA;   % 0 Energi_1     
      ELSIF (cnt=1) THEN R200 := DATA;   % 1 Volym_1      
      ELSIF (cnt=2) THEN R300 := DATA;   % 2 Massa        
      ELSIF (cnt=3) THEN R500 := DATA;   % 3 Effekt       
      ELSIF (cnt=4) THEN R600 := DATA;   % 4 Flöde_volym  
      ELSIF (cnt=5) THEN R800 := DATA;   % 5 Temp_Het     
      ELSIF (cnt=6) THEN R810 := DATA;   % 6 Temp_Kall    
      ENDIF;
     );
    TIMEOUT 300
  END;

  TELEGRAM CStatus NAMED "Läs status" IS
    QUESTION
     DATA[0] := BYTE(Id); % Enhetens Modbus adress
     DATA[1] := BYTE(3);  % Modbus kommando för att läsa register
     DATA[2] := RWORD(1); % Start adress register att läsa
     DATA[4] := RWORD(1); % Antal register
    ANSWER SIZE 7         % 5 + (2*antal register)
     DATA[0] = BYTE(Id);  % Check Id
     DATA[1] = BYTE(3);   % Check kommando
    %DATA[2] = BYTE(2);   % Check antal byte
     DATA[3] -> RWORD(R1 := DATA;);  % Uppdatera status
    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.