FIDELIX Analog outputs
Detaljer
- Typ
- Drivrutin
- Upplaggd av
- Ove Jansson, Abelko Innovation
- Version
- 1
- Uppdaterad
- 2013-08-27
- Skapad
- 2013-08-27
- Kategori
- IO enheter, Modbus
- Visningar
- 2670
Beskrivning
Device definition for FIDELIX Analog outputs
Bruksanvisning
See Fidelix I/O-module specifications (pdf)
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
%
DEVICETYPE FidelixAOUT NAMED "Fidelix AU" TYPEID 21221 IS
PARAMETER
Id : "Adress";
AU1 : "Analog ut 1" ["V"];
AU2 : "Analog ut 2" ["V"];
AU3 : "Analog ut 3" ["V"];
AU4 : "Analog ut 4" ["V"];
AU5 : "Analog ut 5" ["V"];
AU6 : "Analog ut 6" ["V"];
AU7 : "Analog ut 7" ["V"];
AU8 : "Analog ut 8" ["V"];
PUBLIC
PRIVATE
BAUDRATE 9600;
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;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for FIDELIX Analog outputs startvalue
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Ställ startvärde mellan 0 och 10 volt för aktivering
% Alla andra värden deaktiverar startvärdet.
%
% Author: Peter Widetun, ABELKO AB Luleå
% History: 2009-01-12
%
DEVICETYPE FidelixAOUTp NAMED "Fidelix AUstart" TYPEID 21222 IS
PARAMETER
Id : "Adress";
AU1 : "Startvärde AU1" ["V"];
AU2 : "Startvärde AU2" ["V"];
AU3 : "Startvärde AU3" ["V"];
AU4 : "Startvärde AU4" ["V"];
AU5 : "Startvärde AU5" ["V"];
AU6 : "Startvärde AU6" ["V"];
AU7 : "Startvärde AU7" ["V"];
AU8 : "Startvärde AU8" ["V"];
PUBLIC
PRIVATE
Tmp;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM AnalogOutput 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<0 OR AU1>10 THEN
DATA := 0;
ELSE
DATA := AU1*102.3 + 32768;
Tmp := 1;
ENDIF;
);
DATA[9] <- RWORD(IF AU2<0 OR AU2>10 THEN
DATA := 0;
ELSE
DATA := AU2*102.3 + 32768;
Tmp := Tmp + 2;
ENDIF;
);
DATA[11]<- RWORD(IF AU3<0 OR AU3>10 THEN
DATA := 0;
ELSE
DATA := AU3*102.3 + 32768;
Tmp := Tmp + 4;
ENDIF;
);
DATA[13]<- RWORD(IF AU4<0 OR AU4>10 THEN
DATA := 0;
ELSE
DATA := AU4*102.3 + 32768;
Tmp := Tmp + 8;
ENDIF;
);
DATA[15]<- RWORD(IF AU5<0 OR AU5>10 THEN
DATA := 0;
ELSE
DATA := AU5*102.3 + 32768;
Tmp := Tmp + 16;
ENDIF;
);
DATA[17]<- RWORD(IF AU6<0 OR AU6>10 THEN
DATA := 0;
ELSE
DATA := AU6*102.3 + 32768;
Tmp := Tmp + 32;
ENDIF;
);
DATA[19]<- RWORD(IF AU7<0 OR AU7>10 THEN
DATA := 0;
ELSE
DATA := AU7*102.3 + 32768;
Tmp := Tmp + 64;
ENDIF;
);
DATA[21]<- RWORD(IF AU8<0 OR AU8>10 THEN
DATA := 0;
ELSE
DATA := AU8*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
%
DEVICETYPE FidelixAOUT NAMED "Fidelix AU" TYPEID 21221 IS
PARAMETER
Id : "Adress";
AU1 : "Analog ut 1" ["V"];
AU2 : "Analog ut 2" ["V"];
AU3 : "Analog ut 3" ["V"];
AU4 : "Analog ut 4" ["V"];
AU5 : "Analog ut 5" ["V"];
AU6 : "Analog ut 6" ["V"];
AU7 : "Analog ut 7" ["V"];
AU8 : "Analog ut 8" ["V"];
PUBLIC
PRIVATE
BAUDRATE 9600;
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;
END;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Device definition for FIDELIX Analog outputs startvalue
%
% Settings module:
% Parity: None
% Baud: 9600
% Mode: RTU
%
% Ställ startvärde mellan 0 och 10 volt för aktivering
% Alla andra värden deaktiverar startvärdet.
%
% Author: Peter Widetun, ABELKO AB Luleå
% History: 2009-01-12
%
DEVICETYPE FidelixAOUTp NAMED "Fidelix AUstart" TYPEID 21222 IS
PARAMETER
Id : "Adress";
AU1 : "Startvärde AU1" ["V"];
AU2 : "Startvärde AU2" ["V"];
AU3 : "Startvärde AU3" ["V"];
AU4 : "Startvärde AU4" ["V"];
AU5 : "Startvärde AU5" ["V"];
AU6 : "Startvärde AU6" ["V"];
AU7 : "Startvärde AU7" ["V"];
AU8 : "Startvärde AU8" ["V"];
PUBLIC
PRIVATE
Tmp;
BAUDRATE 9600;
CHECKSUM MODBUS SWAPPED;
TELEGRAM AnalogOutput 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<0 OR AU1>10 THEN
DATA := 0;
ELSE
DATA := AU1*102.3 + 32768;
Tmp := 1;
ENDIF;
);
DATA[9] <- RWORD(IF AU2<0 OR AU2>10 THEN
DATA := 0;
ELSE
DATA := AU2*102.3 + 32768;
Tmp := Tmp + 2;
ENDIF;
);
DATA[11]<- RWORD(IF AU3<0 OR AU3>10 THEN
DATA := 0;
ELSE
DATA := AU3*102.3 + 32768;
Tmp := Tmp + 4;
ENDIF;
);
DATA[13]<- RWORD(IF AU4<0 OR AU4>10 THEN
DATA := 0;
ELSE
DATA := AU4*102.3 + 32768;
Tmp := Tmp + 8;
ENDIF;
);
DATA[15]<- RWORD(IF AU5<0 OR AU5>10 THEN
DATA := 0;
ELSE
DATA := AU5*102.3 + 32768;
Tmp := Tmp + 16;
ENDIF;
);
DATA[17]<- RWORD(IF AU6<0 OR AU6>10 THEN
DATA := 0;
ELSE
DATA := AU6*102.3 + 32768;
Tmp := Tmp + 32;
ENDIF;
);
DATA[19]<- RWORD(IF AU7<0 OR AU7>10 THEN
DATA := 0;
ELSE
DATA := AU7*102.3 + 32768;
Tmp := Tmp + 64;
ENDIF;
);
DATA[21]<- RWORD(IF AU8<0 OR AU8>10 THEN
DATA := 0;
ELSE
DATA := AU8*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.