Danelko/Themokon SR04 via STC65

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
1
Uppdaterad
2018-10-03
Skapad
2018-10-03
Kategori
IO enheter, Modbus, Övriga protokoll
Visningar
2551

Beskrivning

Läser alla 32 enheter och visar de med A5-02-05 profil.
Läser en enhet i sekunden och uppdaterar antal enheter och antal enheter med för gamla värden efter varje genomläsning.

Bruksanvisning

För att detta ska fungera lär först in SR04 i STC65

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
DEVICETYPE SR04x32s NAMED "SR04x32s" TYPEID 12749 IS

 PARAMETER
  Id : "Adress" [""]INT;
  maxSek : "Max ålder (1001)" ["sek"]INT;
  
 PUBLIC
  NUM_SR04 : "Antal SR04" INT;
  OLD_SR04 : "Antal gamla SR04" INT;
  T1 : "Temperatur 1" ["°C"]DEC2;
  T2 : "Temperatur 2" ["°C"]DEC2;
  T3 : "Temperatur 3" ["°C"]DEC2;
  T4 : "Temperatur 4" ["°C"]DEC2;
  T5 : "Temperatur 5" ["°C"]DEC2;
  T6 : "Temperatur 6" ["°C"]DEC2;
  T7 : "Temperatur 7" ["°C"]DEC2;
  T8 : "Temperatur 8" ["°C"]DEC2;
  T9 : "Temperatur 9" ["°C"]DEC2;
  T10 : "Temperatur 10" ["°C"]DEC2;
  T11 : "Temperatur 11" ["°C"]DEC2;
  T12 : "Temperatur 12" ["°C"]DEC2;
  T13 : "Temperatur 13" ["°C"]DEC2;
  T14 : "Temperatur 14" ["°C"]DEC2;
  T15 : "Temperatur 15" ["°C"]DEC2;
  T16 : "Temperatur 16" ["°C"]DEC2;
  T17 : "Temperatur 17" ["°C"]DEC2;
  T18 : "Temperatur 18" ["°C"]DEC2;
  T19 : "Temperatur 19" ["°C"]DEC2;
  T20 : "Temperatur 20" ["°C"]DEC2;
  T21 : "Temperatur 21" ["°C"]DEC2;
  T22 : "Temperatur 22" ["°C"]DEC2;
  T23 : "Temperatur 23" ["°C"]DEC2;
  T24 : "Temperatur 24" ["°C"]DEC2;
  T25 : "Temperatur 25" ["°C"]DEC2;
  T26 : "Temperatur 26" ["°C"]DEC2;
  T27 : "Temperatur 27" ["°C"]DEC2;
  T28 : "Temperatur 28" ["°C"]DEC2;
  T29 : "Temperatur 29" ["°C"]DEC2;
  T30 : "Temperatur 30" ["°C"]DEC2;
  T31 : "Temperatur 31" ["°C"]DEC2;
  T32 : "Temperatur 32" ["°C"]DEC2;


 PRIVATE
  Tmp;
  Unit;
  ORG;
  FUNC;
  TYPE;
  RTIME;
  MAXAGE;
  Counter;
  numSR04;
  oldSR04;

 BAUDRATE 9600;
 CHECKSUM MODBUS SWAPPED;

 TELEGRAM ReadT NAMED "Read" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(03); 
   DATA[2] <- RWORD(
    IF Unit>31 THEN 
 Unit:=0; 
 oldSR04:=0;
 numSR04:=0;
ENDIF;
    DATA:=200+(Unit*20);
   ); % Start address
   DATA[4] := RWORD(11); % Antal register att läsa
  ANSWER SIZE 27 % (Antal register * 2) + 5
   DATA[0] = BYTE(Id);
   DATA[1] = HEX(03);
   DATA[2] = BYTE(22); % Antal Bytes
   DATA[4] ->BYTE(FUNC:=DATA;); %0
   DATA[6] ->BYTE(TYPE:=DATA;); %1
   DATA[15] ->RWORD(RTIME:=DATA;); %6
   DATA[18] ->BYTE(ORG:=DATA;); %7
   DATA[23] -> RWORD(
    Tmp:=0;
    IF maxSek<1 THEN MAXAGE:=1001; ELSE MAXAGE:=maxSek; ENDIF;
IF Unit=0 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T1:=Tmp;
ELSIF Unit=1 THEN 
 IF FUNC=2 AND TYPE=5 AND ORG=165 THEN 
  numSR04:=numSR04+1; 
  IF RTIME<MAXAGE THEN 
   Tmp:=(255-DATA)/255*40; 
  ELSE 
   oldSR04:=oldSR04+1; 
   Tmp:=-275; 
  ENDIF; 
 ELSE 
  Tmp:=-300; 
 ENDIF; 
 T2:=Tmp;
ELSIF Unit=2 THEN IF FUNC=2 AND TYPE=5 AND ORG=165  THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T3:=Tmp;
ELSIF Unit=3 THEN IF FUNC=2 AND TYPE=5 AND ORG=165  THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T4:=Tmp;
ELSIF Unit=4 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T5:=Tmp;
ELSIF Unit=5 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T6:=Tmp;
ELSIF Unit=6 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T7:=Tmp;
ELSIF Unit=7 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T8:=Tmp;
ELSIF Unit=8 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T9:=Tmp;
ELSIF Unit=9 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T10:=Tmp;
ELSIF Unit=10 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T11:=Tmp;
ELSIF Unit=11 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T12:=Tmp;
ELSIF Unit=12 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T13:=Tmp;
ELSIF Unit=13 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T14:=Tmp;
ELSIF Unit=14 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T15:=Tmp;
ELSIF Unit=15 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T16:=Tmp;
ELSIF Unit=16 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T17:=Tmp;
ELSIF Unit=17 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T18:=Tmp;
ELSIF Unit=18 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T19:=Tmp;
ELSIF Unit=19 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T20:=Tmp;
ELSIF Unit=20 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T21:=Tmp;
ELSIF Unit=21 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T22:=Tmp;
ELSIF Unit=22 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T23:=Tmp;
ELSIF Unit=23 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T24:=Tmp;
ELSIF Unit=24 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T25:=Tmp;
ELSIF Unit=25 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T26:=Tmp;
ELSIF Unit=26 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T27:=Tmp;
ELSIF Unit=27 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T28:=Tmp;
ELSIF Unit=28 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T29:=Tmp;
ELSIF Unit=29 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T30:=Tmp;
ELSIF Unit=30 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T31:=Tmp;
ELSIF Unit=31 THEN IF FUNC=2 AND TYPE=5 AND ORG=165 THEN numSR04:=numSR04+1; IF RTIME<MAXAGE THEN Tmp:=(255-DATA)/255*40; ELSE oldSR04:=oldSR04+1; Tmp:=-275; ENDIF; ELSE Tmp:=-300; ENDIF; T32:=Tmp;
NUM_SR04:=numSR04; OLD_SR04:=oldSR04;
ENDIF;
Unit:=Unit+1;
   );
  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.