Xylem Flygt MAS711
Detaljer
- Typ
- Drivrutin
- Upplaggd av
- Ove Jansson, Abelko Innovation
- Version
- 1
- Uppdaterad
- 2013-08-28
- Skapad
- 2013-08-28
- Kategori
- Modbus, Vatten och avlopp
- Visningar
- 3686
Beskrivning
Device definition for ITT MAS711
Bruksanvisning
Hur man installerar typdefinitionerna och driftsätter modulerna finns beskrivet i användarmanualen, kapitel 18.7.
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 ITT MAS711
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% _Instructions_
%
% Set Setup->General configuration->RS-485/Modbus [External 1] to [Modbus Revision 2]
%
% Channels are read as 4 byte integers and converted into signed integer as needed.
% Decimal adjusment is made by division according to the channel settings on the unit.
% Eg One decimal = Divide by ten.
% This script is made according to the default decimal settings.
% If you change them then you need to change the divider here.
%
% Author: Ove Jansson, ABELKO AB Luleå
% History: 2011-10-05 initial version
%
DEVICETYPE MASReadPrimary NAMED "MASReadPrimary" TYPEID 21423 IS
PARAMETER
Id : "Adress";
PUBLIC
V1 : "AI_Leakage_1"; % Leakage stator housing
V2 : "AI_Leakage_2"; % Leakage junktion box
V3 : "AI_Leakage_3"; % Leakage inspection chamber
V4 : "AI_TcPtc" ["ohm"]DEC1; % PTC/PT (/10)
V5 : "AI_TcPtcPt_1" ["°C"]DEC1; % PT100 stator 1 (/10)
V6 : "AI_TcPtcPt_2" ["°C"]DEC1; % PT100 stator 2 (/10)
V7 : "AI_TcPtcPt_3" ["°C"]DEC1; % PT100 stator 3 (/10)
V8 : "AI_Pt_1" ["°C"]DEC1; % PT100 main bearing (/10)
V9 : "AI_Pt_2" ["°C"]DEC1; % PT100 support bearing (/10)
V10 : "AI_Current_DC" ["mA"]DEC1; % DC current 0-20mA (/10)
V11 : "AI_Current_AC" ["A"]DEC1; % AC current(/10)
V12 : "XI_Reserve_1" ["°C"]DEC1; % Temperature pumpmemory (/10)
V13 : "XI_Reserve_2" ["°%"]DEC1; % Current unbalance (/10)
V14 : "XI_Reserve_3" ["°%"]DEC1; % Voltage unbalance (/10)
V15 : "XI_Reserve_4" ["kW"]DEC1; % System power (/10)
V16 : "XI_Reserve_5" [""]DEC2; % System power factor (/100)
V17 : "AO_Current_DC" ["?"]DEC1; % System phase (/10)
PRIVATE
Tmp1;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM ReadPrimary NAMED "Read Primary" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(03); % Modbus command "03h" Read holding registers
DATA[2] := RWORD(5180); % OBS!! Register adress = Modbusadress in spec
DATA[4] := RWORD(34); % Number of registers (MAS uses 2 registers per channel)
ANSWER SIZE 73 % number of registers *2 + 5
DATA[0] = BYTE(Id); % ID
DATA[1] = HEX(03); % Should be same as DATA[1] in the Question
DATA[2] = BYTE(68); % Byte count = # registers times two
DATA[3] -> RWORD(Tmp1 := DATA*65536;);
DATA[5] -> RWORD(V1 := (Tmp1 + DATA);); % V1 : Leakage stator housing
DATA[7] -> RWORD(Tmp1 := DATA*65536;);
DATA[9] -> RWORD(V2 := (Tmp1 + DATA);); % V2 : Leakage junktion box
DATA[11] -> RWORD(Tmp1 := DATA*65536;);
DATA[13] -> RWORD(V3 := (Tmp1 + DATA);); % V3 : Leakage inspection chamber
DATA[15] -> RWORD(Tmp1 := DATA*65536;);
DATA[17] -> RWORD(V4 := (Tmp1 + DATA);); % V4 : PTC/PT (/10)
DATA[19] -> RWORD(Tmp1 := DATA*65536;);
DATA[21] -> RWORD(Tmp1 := Tmp1 + DATA; IF Tmp1 > 2147483647 THEN V5 := (Tmp1-4294967296) / 10; ELSE V5 := Tmp1 / 10; ENDIF;); % V5 : PT100 stator 1 (/10)
DATA[23] -> RWORD(Tmp1 := DATA*65536;);
DATA[25] -> RWORD(Tmp1 := Tmp1 + DATA; IF Tmp1 > 2147483647 THEN V6 := (Tmp1-4294967296) / 10; ELSE V6 := Tmp1 / 10; ENDIF;); % V6 : PT100 stator 2 (/10)
DATA[27] -> RWORD(Tmp1 := DATA*65536;);
DATA[29] -> RWORD(Tmp1 := Tmp1 + DATA; IF Tmp1 > 2147483647 THEN V7 := (Tmp1-4294967296) / 10; ELSE V7 := Tmp1 / 10; ENDIF;); % V7 : PT100 stator 3 (/10)
DATA[31] -> RWORD(Tmp1 := DATA*65536;);
DATA[33] -> RWORD(Tmp1 := Tmp1 + DATA; IF Tmp1 > 2147483647 THEN V8 := (Tmp1-4294967296) / 10; ELSE V8 := Tmp1 / 10; ENDIF;); % V8 : PT100 main bearing (/10)
DATA[35] -> RWORD(Tmp1 := DATA*65536;);
DATA[37] -> RWORD(Tmp1 := Tmp1 + DATA; IF Tmp1 > 2147483647 THEN V9 := (Tmp1-4294967296) / 10; ELSE V9 := Tmp1 / 10; ENDIF;); % V9 : PT100 support bearing (/10)
DATA[39] -> RWORD(Tmp1 := DATA*65536;);
DATA[41] -> RWORD(V10 := (Tmp1 + (DATA)) / 10;); % V10 : DC current 0-20mA (/10)
DATA[43] -> RWORD(Tmp1 := DATA*65536;);
DATA[45] -> RWORD(V11 := (Tmp1 + (DATA)) / 10;); % V11 : DC current 0-20mA (/10)
DATA[47] -> RWORD(Tmp1 := DATA*65536;);
DATA[49] -> RWORD(V12 := (Tmp1 + (DATA)) / 10;); % V12 : AC current(/10)
DATA[51] -> RWORD(Tmp1 := DATA*65536;);
DATA[53] -> RWORD(Tmp1 := Tmp1 + DATA; IF Tmp1 > 2147483647 THEN V13 := (Tmp1-4294967296) / 10; ELSE V13 := Tmp1 / 10; ENDIF;);% V13 : Temperature pumpmemory (/10)
DATA[55] -> RWORD(Tmp1 := DATA*65536;);
DATA[57] -> RWORD(V14 := (Tmp1 + (DATA)) / 10;); % V14 : Current unbalance (/10)
DATA[59] -> RWORD(Tmp1 := DATA*65536;);
DATA[61] -> RWORD(V15 := (Tmp1 + (DATA)) / 10;); % V15 : Voltage unbalance (/10)
DATA[63] -> RWORD(Tmp1 := DATA*65536;);
DATA[65] -> RWORD(V16 := (Tmp1 + (DATA)) / 100;); % V16 : System power factor (/100)
DATA[67] -> RWORD(Tmp1 := DATA*65536;);
DATA[69] -> RWORD(V17 := (Tmp1 + (DATA)) / 10;); % V17 : System phase (/10)
TIMEOUT 2000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for ITT MAS711
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% _Instructions_
%
% Set Setup->General configuration->RS-485/Modbus [External 1] to [Modbus Revision 2]
%
% Channels are read as 4 byte integers and converted into signed integer as needed.
% Decimal adjusment is made by division according to the channel settings on the unit.
% Eg One decimal = Divide by ten.
% This script is made according to the default decimal settings.
% If you change them then you need to change the divider here.
%
% Author: Ove Jansson, ABELKO AB Luleå
% History: 2011-10-05 initial version
%
DEVICETYPE MASReadSecondary NAMED "MASReadSecondary" TYPEID 21424 IS
PARAMETER
Id : "Adress";
PUBLIC
V1 : "V_SYS" ["V"]DEC1; % System voltage [4038]
V2 : "KWH_TOT" ["kWh"]DEC1; % Total energy [4066]
PRIVATE
Tmp2;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM ReadSecondary NAMED "Read Secondary" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(03); % Modbus command "03h" Read holding registers
DATA[2] := RWORD(4038); % OBS!! Register adress = Modbusadress in spec
DATA[4] := RWORD(30); % Number of registers (MAS uses 2 registers per channel)
ANSWER SIZE 65 % number of registers *2 + 5
DATA[0] = BYTE(Id); % ID
DATA[1] = HEX(03); % Should be same as DATA[1] in the Question
DATA[2] = BYTE(60); % Byte count = # registers times two
% We fetch a subset starting with the first value we need
% Byte count is used so it is the offset from the manual times two plus three
% Each valu is 4 bytes and we read them wordwise (2 bytes at a time)
DATA[3] -> RWORD(Tmp2 := DATA*65536;);
DATA[5] -> RWORD(V1 := (Tmp2 + DATA) / 100;); % V1 : System voltage [4038]
DATA[59] -> RWORD(Tmp2 := DATA*65536;);
DATA[61] -> RWORD(V2 := (Tmp2 + DATA) / 100;); % V2 : Total energy [4066]
TIMEOUT 2000
END;
END;
% Device definition for ITT MAS711
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% _Instructions_
%
% Set Setup->General configuration->RS-485/Modbus [External 1] to [Modbus Revision 2]
%
% Channels are read as 4 byte integers and converted into signed integer as needed.
% Decimal adjusment is made by division according to the channel settings on the unit.
% Eg One decimal = Divide by ten.
% This script is made according to the default decimal settings.
% If you change them then you need to change the divider here.
%
% Author: Ove Jansson, ABELKO AB Luleå
% History: 2011-10-05 initial version
%
DEVICETYPE MASReadPrimary NAMED "MASReadPrimary" TYPEID 21423 IS
PARAMETER
Id : "Adress";
PUBLIC
V1 : "AI_Leakage_1"; % Leakage stator housing
V2 : "AI_Leakage_2"; % Leakage junktion box
V3 : "AI_Leakage_3"; % Leakage inspection chamber
V4 : "AI_TcPtc" ["ohm"]DEC1; % PTC/PT (/10)
V5 : "AI_TcPtcPt_1" ["°C"]DEC1; % PT100 stator 1 (/10)
V6 : "AI_TcPtcPt_2" ["°C"]DEC1; % PT100 stator 2 (/10)
V7 : "AI_TcPtcPt_3" ["°C"]DEC1; % PT100 stator 3 (/10)
V8 : "AI_Pt_1" ["°C"]DEC1; % PT100 main bearing (/10)
V9 : "AI_Pt_2" ["°C"]DEC1; % PT100 support bearing (/10)
V10 : "AI_Current_DC" ["mA"]DEC1; % DC current 0-20mA (/10)
V11 : "AI_Current_AC" ["A"]DEC1; % AC current(/10)
V12 : "XI_Reserve_1" ["°C"]DEC1; % Temperature pumpmemory (/10)
V13 : "XI_Reserve_2" ["°%"]DEC1; % Current unbalance (/10)
V14 : "XI_Reserve_3" ["°%"]DEC1; % Voltage unbalance (/10)
V15 : "XI_Reserve_4" ["kW"]DEC1; % System power (/10)
V16 : "XI_Reserve_5" [""]DEC2; % System power factor (/100)
V17 : "AO_Current_DC" ["?"]DEC1; % System phase (/10)
PRIVATE
Tmp1;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM ReadPrimary NAMED "Read Primary" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(03); % Modbus command "03h" Read holding registers
DATA[2] := RWORD(5180); % OBS!! Register adress = Modbusadress in spec
DATA[4] := RWORD(34); % Number of registers (MAS uses 2 registers per channel)
ANSWER SIZE 73 % number of registers *2 + 5
DATA[0] = BYTE(Id); % ID
DATA[1] = HEX(03); % Should be same as DATA[1] in the Question
DATA[2] = BYTE(68); % Byte count = # registers times two
DATA[3] -> RWORD(Tmp1 := DATA*65536;);
DATA[5] -> RWORD(V1 := (Tmp1 + DATA);); % V1 : Leakage stator housing
DATA[7] -> RWORD(Tmp1 := DATA*65536;);
DATA[9] -> RWORD(V2 := (Tmp1 + DATA);); % V2 : Leakage junktion box
DATA[11] -> RWORD(Tmp1 := DATA*65536;);
DATA[13] -> RWORD(V3 := (Tmp1 + DATA);); % V3 : Leakage inspection chamber
DATA[15] -> RWORD(Tmp1 := DATA*65536;);
DATA[17] -> RWORD(V4 := (Tmp1 + DATA);); % V4 : PTC/PT (/10)
DATA[19] -> RWORD(Tmp1 := DATA*65536;);
DATA[21] -> RWORD(Tmp1 := Tmp1 + DATA; IF Tmp1 > 2147483647 THEN V5 := (Tmp1-4294967296) / 10; ELSE V5 := Tmp1 / 10; ENDIF;); % V5 : PT100 stator 1 (/10)
DATA[23] -> RWORD(Tmp1 := DATA*65536;);
DATA[25] -> RWORD(Tmp1 := Tmp1 + DATA; IF Tmp1 > 2147483647 THEN V6 := (Tmp1-4294967296) / 10; ELSE V6 := Tmp1 / 10; ENDIF;); % V6 : PT100 stator 2 (/10)
DATA[27] -> RWORD(Tmp1 := DATA*65536;);
DATA[29] -> RWORD(Tmp1 := Tmp1 + DATA; IF Tmp1 > 2147483647 THEN V7 := (Tmp1-4294967296) / 10; ELSE V7 := Tmp1 / 10; ENDIF;); % V7 : PT100 stator 3 (/10)
DATA[31] -> RWORD(Tmp1 := DATA*65536;);
DATA[33] -> RWORD(Tmp1 := Tmp1 + DATA; IF Tmp1 > 2147483647 THEN V8 := (Tmp1-4294967296) / 10; ELSE V8 := Tmp1 / 10; ENDIF;); % V8 : PT100 main bearing (/10)
DATA[35] -> RWORD(Tmp1 := DATA*65536;);
DATA[37] -> RWORD(Tmp1 := Tmp1 + DATA; IF Tmp1 > 2147483647 THEN V9 := (Tmp1-4294967296) / 10; ELSE V9 := Tmp1 / 10; ENDIF;); % V9 : PT100 support bearing (/10)
DATA[39] -> RWORD(Tmp1 := DATA*65536;);
DATA[41] -> RWORD(V10 := (Tmp1 + (DATA)) / 10;); % V10 : DC current 0-20mA (/10)
DATA[43] -> RWORD(Tmp1 := DATA*65536;);
DATA[45] -> RWORD(V11 := (Tmp1 + (DATA)) / 10;); % V11 : DC current 0-20mA (/10)
DATA[47] -> RWORD(Tmp1 := DATA*65536;);
DATA[49] -> RWORD(V12 := (Tmp1 + (DATA)) / 10;); % V12 : AC current(/10)
DATA[51] -> RWORD(Tmp1 := DATA*65536;);
DATA[53] -> RWORD(Tmp1 := Tmp1 + DATA; IF Tmp1 > 2147483647 THEN V13 := (Tmp1-4294967296) / 10; ELSE V13 := Tmp1 / 10; ENDIF;);% V13 : Temperature pumpmemory (/10)
DATA[55] -> RWORD(Tmp1 := DATA*65536;);
DATA[57] -> RWORD(V14 := (Tmp1 + (DATA)) / 10;); % V14 : Current unbalance (/10)
DATA[59] -> RWORD(Tmp1 := DATA*65536;);
DATA[61] -> RWORD(V15 := (Tmp1 + (DATA)) / 10;); % V15 : Voltage unbalance (/10)
DATA[63] -> RWORD(Tmp1 := DATA*65536;);
DATA[65] -> RWORD(V16 := (Tmp1 + (DATA)) / 100;); % V16 : System power factor (/100)
DATA[67] -> RWORD(Tmp1 := DATA*65536;);
DATA[69] -> RWORD(V17 := (Tmp1 + (DATA)) / 10;); % V17 : System phase (/10)
TIMEOUT 2000
END;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for ITT MAS711
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% _Instructions_
%
% Set Setup->General configuration->RS-485/Modbus [External 1] to [Modbus Revision 2]
%
% Channels are read as 4 byte integers and converted into signed integer as needed.
% Decimal adjusment is made by division according to the channel settings on the unit.
% Eg One decimal = Divide by ten.
% This script is made according to the default decimal settings.
% If you change them then you need to change the divider here.
%
% Author: Ove Jansson, ABELKO AB Luleå
% History: 2011-10-05 initial version
%
DEVICETYPE MASReadSecondary NAMED "MASReadSecondary" TYPEID 21424 IS
PARAMETER
Id : "Adress";
PUBLIC
V1 : "V_SYS" ["V"]DEC1; % System voltage [4038]
V2 : "KWH_TOT" ["kWh"]DEC1; % Total energy [4066]
PRIVATE
Tmp2;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM ReadSecondary NAMED "Read Secondary" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(03); % Modbus command "03h" Read holding registers
DATA[2] := RWORD(4038); % OBS!! Register adress = Modbusadress in spec
DATA[4] := RWORD(30); % Number of registers (MAS uses 2 registers per channel)
ANSWER SIZE 65 % number of registers *2 + 5
DATA[0] = BYTE(Id); % ID
DATA[1] = HEX(03); % Should be same as DATA[1] in the Question
DATA[2] = BYTE(60); % Byte count = # registers times two
% We fetch a subset starting with the first value we need
% Byte count is used so it is the offset from the manual times two plus three
% Each valu is 4 bytes and we read them wordwise (2 bytes at a time)
DATA[3] -> RWORD(Tmp2 := DATA*65536;);
DATA[5] -> RWORD(V1 := (Tmp2 + DATA) / 100;); % V1 : System voltage [4038]
DATA[59] -> RWORD(Tmp2 := DATA*65536;);
DATA[61] -> RWORD(V2 := (Tmp2 + DATA) / 100;); % V2 : Total energy [4066]
TIMEOUT 2000
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.