Danelko/Thermokon DU via STC65 32/32/32

Detaljer

Typ
Drivrutin
Upplaggd av
Ove Jansson, Abelko Innovation
Version
1
Uppdaterad
2017-08-24
Skapad
2017-08-24
Kategori
IO enheter, Modbus, Trådlöst
Visningar
2610

Beskrivning

Styrning av digitala utgångar i till exempel ADO

Bruksanvisning

Fodrar konfigurering av sändare/mottagare via separat verktyg

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

DEVICETYPE ADO4 NAMED "DanelkoDU" TYPEID 18750 IS

 PARAMETER
  Id : "Adress" INT;
  SetUnit : "Enhet (1-32)" INT; 
  W1:"Skriv DO" ["Öppen,Sluten"]ENUM;
  
 PUBLIC  
  V1:"Status DO" ["Öppen,Sluten"]ENUM; 
  
 PRIVATE
  Unit;
  
 BAUDRATE 9600;
 %CHRGAPTIMEOUT 32;
 CHECKSUM MODBUS SWAPPED;

 TELEGRAM ReadDO NAMED "Läs DU" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(03); 
   DATA[2] <- RWORD(
    DATA:=1005+((Unit-1)*20);
   ); % Start address
   DATA[4] := RWORD(1); % Antal register att läsa
  ANSWER SIZE 7 % (Antal register * 2) + 5
   DATA[0] = BYTE(Id);
   DATA[1] = HEX(03);
   DATA[4] -> BYTE( 
IF DATA=9 THEN V1:=1; ELSE V1:=0; ENDIF;
   );
  TIMEOUT 2000
 END;
 
 TELEGRAM WriteTg NAMED "Skriv telegram" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] := HEX(06); % Modbus kommando för att skriva ett register
   DATA[2] <- RWORD(
    DATA:=1003+((Unit-1)*20);
   );
   DATA[4] <- RWORD(DATA:=213;);
  ANSWER SIZE 8
   DATA[0] = BYTE(Id);
   DATA[1] = HEX(06);
  TIMEOUT 2000
 END;
 
 TELEGRAM WriteDO NAMED "Skriv DU" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] := HEX(06); % Modbus kommando för att skriva ett register
   DATA[2] <- RWORD(
    DATA:=1005+((Unit-1)*20);
   );
   DATA[4] <- RWORD(
    IF W1=0 THEN DATA:=8; ELSE DATA:=9; ENDIF;
   );
  ANSWER SIZE 8
   DATA[0] = BYTE(Id);
   DATA[1] = HEX(06);
  TIMEOUT 2000
 END;
 
 TELEGRAM SendTg NAMED "Sänd kommando" IS
  QUESTION
   DATA[0] := BYTE(Id); % Enhetens Modbus adress
   DATA[1] :=  HEX(5); % Modbus kommando för att skriva en coil
   DATA[2] <- RWORD(DATA:=200+((Unit-1));); % Register adress
   DATA[4] := RWORD(65280);
  ANSWER SIZE 8
   DATA[0] = BYTE(Id);
   DATA[1] = BYTE(5);
  TIMEOUT 2000
 END;
 
 SCHEDULER BEGIN
  Unit:=SetUnit;
  IF SetUnit>32 THEN Unit:=32; ENDIF;
  IF SetUnit<1 THEN Unit:=1; ENDIF;
  TRANSMIT(ReadDO);
  TRANSMIT(WriteTg);
  TRANSMIT(WriteDO);
  TRANSMIT(SendTg);
 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.