FIDELIX Analoga outputs UltraBase
Detaljer
- Typ
- Drivrutin
- Upplaggd av
- Ove Jansson, Abelko Innovation
- Version
- 3
- Uppdaterad
- 2019-01-07
- Skapad
- 2013-04-07
- Kategori
- IO enheter, Modbus
- Visningar
- 3451
Beskrivning
Stöd för Fidelix Analoga outputs i UltraBase.
Bruksanvisning
Aktivera telegram "Ställ AU" för att uppdatera utgångar. Alla utgångar kommer att ställas. Sätt lämpligt uppdateringsintervall t.ex 5 sekunder.
Aktivera telegram "Ställ AU start" bara om startvärdet för utgångar måste anta ett visst värde när Fidelix modulen startas. Lämpligt uppdateringsintervall 60 sekunder eller mer.
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 FIDELIX Analog outputs
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Author: Peter Widetun, ABELKO AB Luleå
% History: 2009-01-12
% History: 2019-01-04 Changed to Ultra skript.
%
DEVICETYPE FidelixAOUT NAMED "Fidelix AU" TYPEID 21221 IS
PARAMETER
Id : "Adress" INT;
AU1 : "Analog ut 1" ["V"] DEC2;
AU2 : "Analog ut 2" ["V"] DEC2;
AU3 : "Analog ut 3" ["V"] DEC2;
AU4 : "Analog ut 4" ["V"] DEC2;
AU5 : "Analog ut 5" ["V"] DEC2;
AU6 : "Analog ut 6" ["V"] DEC2;
AU7 : "Analog ut 7" ["V"] DEC2;
AU8 : "Analog ut 8" ["V"] DEC2;
AU1_Start : "Startvärde AU1" ["V"] DEC2;
AU2_Start : "Startvärde AU2" ["V"] DEC2;
AU3_Start : "Startvärde AU3" ["V"] DEC2;
AU4_Start : "Startvärde AU4" ["V"] DEC2;
AU5_Start : "Startvärde AU5" ["V"] DEC2;
AU6_Start : "Startvärde AU6" ["V"] DEC2;
AU7_Start : "Startvärde AU7" ["V"] DEC2;
AU8_Start : "Startvärde AU8" ["V"] DEC2;
PUBLIC
PRIVATE
Tmp;
BAUDRATE 9600;
CHRGAPTIMEOUT 5;
CHECKSUM MODBUS SWAPPED;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
TELEGRAM AnalogOutput NAMED "Ställ AU" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(10); % Modbus command "0x10" write multiple registers
DATA[2] := RWORD(0); % start register
DATA[4] := RWORD(8); % number of registers to write
DATA[6] := BYTE(16); % number of bytes
DATA[7] <- RWORD(IF AU1<0 THEN DATA := 0;
ELSIF AU1<10 THEN DATA := AU1*102.3;
ELSE DATA := 1023;
ENDIF;
);
DATA[9] <- RWORD(IF AU2<0 THEN DATA := 0;
ELSIF AU2<10 THEN DATA := AU2*102.3;
ELSE DATA := 1023;
ENDIF;
);
DATA[11]<- RWORD(IF AU3<0 THEN DATA := 0;
ELSIF AU3<10 THEN DATA := AU3*102.3;
ELSE DATA := 1023;
ENDIF;
);
DATA[13]<- RWORD(IF AU4<0 THEN DATA := 0;
ELSIF AU4<10 THEN DATA := AU4*102.3;
ELSE DATA := 1023;
ENDIF;
);
DATA[15]<- RWORD(IF AU5<0 THEN DATA := 0;
ELSIF AU5<10 THEN DATA := AU5*102.3;
ELSE DATA := 1023;
ENDIF;
);
DATA[17]<- RWORD(IF AU6<0 THEN DATA := 0;
ELSIF AU6<10 THEN DATA := AU6*102.3;
ELSE DATA := 1023;
ENDIF;
);
DATA[19]<- RWORD(IF AU7<0 THEN DATA := 0;
ELSIF AU7<10 THEN DATA := AU7*102.3;
ELSE DATA := 1023;
ENDIF;
);
DATA[21]<- RWORD(IF AU8<0 THEN DATA := 0;
ELSIF AU8<10 THEN DATA := AU8*102.3;
ELSE DATA := 1023;
ENDIF;
);
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = HEX(10);
%DATA[2] = RWORD(0); % start register
%DATA[4] = RWORD(8); % number of registers to write
TIMEOUT 1000
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
TELEGRAM AnalogStart NAMED "Ställ AU start" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(10); % Modbus command "0x10" write multiple registers
DATA[2] := RWORD(8); % start register
DATA[4] := RWORD(9); % number of registers to write
DATA[6] := BYTE(18); % number of bytes
DATA[7] <- RWORD(Tmp := 0;
IF AU1_Start<0 OR AU1_Start>10 THEN
DATA := 0;
ELSE
DATA := AU1_Start*102.3 + 32768;
Tmp := 1;
ENDIF;
);
DATA[9] <- RWORD(IF AU2_Start<0 OR AU2_Start>10 THEN
DATA := 0;
ELSE
DATA := AU2_Start*102.3 + 32768;
Tmp := Tmp + 2;
ENDIF;
);
DATA[11]<- RWORD(IF AU3_Start<0 OR AU3_Start>10 THEN
DATA := 0;
ELSE
DATA := AU3_Start*102.3 + 32768;
Tmp := Tmp + 4;
ENDIF;
);
DATA[13]<- RWORD(IF AU4_Start<0 OR AU4_Start>10 THEN
DATA := 0;
ELSE
DATA := AU4_Start*102.3 + 32768;
Tmp := Tmp + 8;
ENDIF;
);
DATA[15]<- RWORD(IF AU5_Start<0 OR AU5_Start>10 THEN
DATA := 0;
ELSE
DATA := AU5_Start*102.3 + 32768;
Tmp := Tmp + 16;
ENDIF;
);
DATA[17]<- RWORD(IF AU6_Start<0 OR AU6_Start>10 THEN
DATA := 0;
ELSE
DATA := AU6_Start*102.3 + 32768;
Tmp := Tmp + 32;
ENDIF;
);
DATA[19]<- RWORD(IF AU7_Start<0 OR AU7_Start>10 THEN
DATA := 0;
ELSE
DATA := AU7_Start*102.3 + 32768;
Tmp := Tmp + 64;
ENDIF;
);
DATA[21]<- RWORD(IF AU8_Start<0 OR AU8_Start>10 THEN
DATA := 0;
ELSE
DATA := AU8_Start*102.3 + 32768;
Tmp := Tmp + 128;
ENDIF;
);
DATA[23]<- RWORD(DATA := Tmp;); % Enable AU
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = HEX(10);
%DATA[2] = RWORD(8); % start register
%DATA[4] = RWORD(8); % number of registers to write
TIMEOUT 1000
END;
END;
% Device definition for FIDELIX Analog outputs
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Author: Peter Widetun, ABELKO AB Luleå
% History: 2009-01-12
% History: 2019-01-04 Changed to Ultra skript.
%
DEVICETYPE FidelixAOUT NAMED "Fidelix AU" TYPEID 21221 IS
PARAMETER
Id : "Adress" INT;
AU1 : "Analog ut 1" ["V"] DEC2;
AU2 : "Analog ut 2" ["V"] DEC2;
AU3 : "Analog ut 3" ["V"] DEC2;
AU4 : "Analog ut 4" ["V"] DEC2;
AU5 : "Analog ut 5" ["V"] DEC2;
AU6 : "Analog ut 6" ["V"] DEC2;
AU7 : "Analog ut 7" ["V"] DEC2;
AU8 : "Analog ut 8" ["V"] DEC2;
AU1_Start : "Startvärde AU1" ["V"] DEC2;
AU2_Start : "Startvärde AU2" ["V"] DEC2;
AU3_Start : "Startvärde AU3" ["V"] DEC2;
AU4_Start : "Startvärde AU4" ["V"] DEC2;
AU5_Start : "Startvärde AU5" ["V"] DEC2;
AU6_Start : "Startvärde AU6" ["V"] DEC2;
AU7_Start : "Startvärde AU7" ["V"] DEC2;
AU8_Start : "Startvärde AU8" ["V"] DEC2;
PUBLIC
PRIVATE
Tmp;
BAUDRATE 9600;
CHRGAPTIMEOUT 5;
CHECKSUM MODBUS SWAPPED;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
TELEGRAM AnalogOutput NAMED "Ställ AU" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(10); % Modbus command "0x10" write multiple registers
DATA[2] := RWORD(0); % start register
DATA[4] := RWORD(8); % number of registers to write
DATA[6] := BYTE(16); % number of bytes
DATA[7] <- RWORD(IF AU1<0 THEN DATA := 0;
ELSIF AU1<10 THEN DATA := AU1*102.3;
ELSE DATA := 1023;
ENDIF;
);
DATA[9] <- RWORD(IF AU2<0 THEN DATA := 0;
ELSIF AU2<10 THEN DATA := AU2*102.3;
ELSE DATA := 1023;
ENDIF;
);
DATA[11]<- RWORD(IF AU3<0 THEN DATA := 0;
ELSIF AU3<10 THEN DATA := AU3*102.3;
ELSE DATA := 1023;
ENDIF;
);
DATA[13]<- RWORD(IF AU4<0 THEN DATA := 0;
ELSIF AU4<10 THEN DATA := AU4*102.3;
ELSE DATA := 1023;
ENDIF;
);
DATA[15]<- RWORD(IF AU5<0 THEN DATA := 0;
ELSIF AU5<10 THEN DATA := AU5*102.3;
ELSE DATA := 1023;
ENDIF;
);
DATA[17]<- RWORD(IF AU6<0 THEN DATA := 0;
ELSIF AU6<10 THEN DATA := AU6*102.3;
ELSE DATA := 1023;
ENDIF;
);
DATA[19]<- RWORD(IF AU7<0 THEN DATA := 0;
ELSIF AU7<10 THEN DATA := AU7*102.3;
ELSE DATA := 1023;
ENDIF;
);
DATA[21]<- RWORD(IF AU8<0 THEN DATA := 0;
ELSIF AU8<10 THEN DATA := AU8*102.3;
ELSE DATA := 1023;
ENDIF;
);
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = HEX(10);
%DATA[2] = RWORD(0); % start register
%DATA[4] = RWORD(8); % number of registers to write
TIMEOUT 1000
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
TELEGRAM AnalogStart NAMED "Ställ AU start" IS
QUESTION
DATA[0] := BYTE(Id); % Modbus unit address
DATA[1] := HEX(10); % Modbus command "0x10" write multiple registers
DATA[2] := RWORD(8); % start register
DATA[4] := RWORD(9); % number of registers to write
DATA[6] := BYTE(18); % number of bytes
DATA[7] <- RWORD(Tmp := 0;
IF AU1_Start<0 OR AU1_Start>10 THEN
DATA := 0;
ELSE
DATA := AU1_Start*102.3 + 32768;
Tmp := 1;
ENDIF;
);
DATA[9] <- RWORD(IF AU2_Start<0 OR AU2_Start>10 THEN
DATA := 0;
ELSE
DATA := AU2_Start*102.3 + 32768;
Tmp := Tmp + 2;
ENDIF;
);
DATA[11]<- RWORD(IF AU3_Start<0 OR AU3_Start>10 THEN
DATA := 0;
ELSE
DATA := AU3_Start*102.3 + 32768;
Tmp := Tmp + 4;
ENDIF;
);
DATA[13]<- RWORD(IF AU4_Start<0 OR AU4_Start>10 THEN
DATA := 0;
ELSE
DATA := AU4_Start*102.3 + 32768;
Tmp := Tmp + 8;
ENDIF;
);
DATA[15]<- RWORD(IF AU5_Start<0 OR AU5_Start>10 THEN
DATA := 0;
ELSE
DATA := AU5_Start*102.3 + 32768;
Tmp := Tmp + 16;
ENDIF;
);
DATA[17]<- RWORD(IF AU6_Start<0 OR AU6_Start>10 THEN
DATA := 0;
ELSE
DATA := AU6_Start*102.3 + 32768;
Tmp := Tmp + 32;
ENDIF;
);
DATA[19]<- RWORD(IF AU7_Start<0 OR AU7_Start>10 THEN
DATA := 0;
ELSE
DATA := AU7_Start*102.3 + 32768;
Tmp := Tmp + 64;
ENDIF;
);
DATA[21]<- RWORD(IF AU8_Start<0 OR AU8_Start>10 THEN
DATA := 0;
ELSE
DATA := AU8_Start*102.3 + 32768;
Tmp := Tmp + 128;
ENDIF;
);
DATA[23]<- RWORD(DATA := Tmp;); % Enable AU
ANSWER SIZE 8
DATA[0] = BYTE(Id);
DATA[1] = HEX(10);
%DATA[2] = RWORD(8); % start register
%DATA[4] = RWORD(8); % number of registers to write
TIMEOUT 1000
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.