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;
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.