%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Device definition for IMSE MxM28 % % Settings module: % Parity: None % Baud: 38400 % Mode: RTU % % Factory default % Address: 1 % % Author: Daniel Carlson, ABELKO AB Luleå % % History: 2014-03-28 DC initial version % 2015-09-03 DC Answer size of telegram GetDI1-8 shall be 21, not 20 % 2016-05-13 DC Munit added for counters and frequency % DEVICETYPE IMSE_MxM28 NAMED "IMSE_MxM28" TYPEID 21465 IS PARAMETER %%%%%%%%%%%%%%%%%%%%%% % Address of this unit Addr: "Address" [""] INT | (sv) "Adress" | (en) "Address" | (MENU) "YES"; %%%%%%%%%%%%%%%%%%%%%%% % Communication timeout ComTimeout: "Com timeout" [""] INT | (sv) "Kommunikationstimeout" | (en) "Communication timeout" | (MENU) "YES"; %%%%%%%%%%%%%%%% % Reset counters DI1_CounterReset :"DI1 Reset counter" [""] INT | (sv) "DI1 Nollställ räknare" | (en) "DI1 Reset counter" | (NODE) "DI1"; DI2_CounterReset :"DI2 Reset counter" [""] INT | (sv) "DI2 Nollställ räknare" | (en) "DI2 Reset counter" | (NODE) "DI2"; DI3_CounterReset :"DI3 Reset counter" [""] INT | (sv) "DI3 Nollställ räknare" | (en) "DI3 Reset counter" | (NODE) "DI3"; DI4_CounterReset :"DI4 Reset counter" [""] INT | (sv) "DI4 Nollställ räknare" | (en) "DI4 Reset counter" | (NODE) "DI4"; DI5_CounterReset :"DI5 Reset counter" [""] INT | (sv) "DI5 Nollställ räknare" | (en) "DI5 Reset counter" | (NODE) "DI5"; DI6_CounterReset :"DI6 Reset counter" [""] INT | (sv) "DI6 Nollställ räknare" | (en) "DI6 Reset counter" | (NODE) "DI6"; DI7_CounterReset :"DI7 Reset counter" [""] INT | (sv) "DI7 Nollställ räknare" | (en) "DI7 Reset counter" | (NODE) "DI7"; DI8_CounterReset :"DI8 Reset counter" [""] INT | (sv) "DI8 Nollställ räknare" | (en) "DI8 Reset counter" | (NODE) "DI8"; %%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Reset counter overflow flag DI1_OverflowFlagReset :"DI1 Reset overflow flag" [""] INT | (sv) "DI1 Nollställ fullindikering" | (en) "DI1 Reset overflow flag" | (NODE) "DI1"; DI2_OverflowFlagReset :"DI2 Reset overflow flag" [""] INT | (sv) "DI2 Nollställ fullindikering" | (en) "DI2 Reset overflow flag" | (NODE) "DI2"; DI3_OverflowFlagReset :"DI3 Reset overflow flag" [""] INT | (sv) "DI3 Nollställ fullindikering" | (en) "DI3 Reset overflow flag" | (NODE) "DI3"; DI4_OverflowFlagReset :"DI4 Reset overflow flag" [""] INT | (sv) "DI4 Nollställ fullindikering" | (en) "DI4 Reset overflow flag" | (NODE) "DI4"; DI5_OverflowFlagReset :"DI5 Reset overflow flag" [""] INT | (sv) "DI5 Nollställ fullindikering" | (en) "DI5 Reset overflow flag" | (NODE) "DI5"; DI6_OverflowFlagReset :"DI6 Reset overflow flag" [""] INT | (sv) "DI6 Nollställ fullindikering" | (en) "DI6 Reset overflow flag" | (NODE) "DI6"; DI7_OverflowFlagReset :"DI7 Reset overflow flag" [""] INT | (sv) "DI7 Nollställ fullindikering" | (en) "DI7 Reset overflow flag" | (NODE) "DI7"; DI8_OverflowFlagReset :"DI8 Reset overflow flag" [""] INT | (sv) "DI8 Nollställ fullindikering" | (en) "DI8 Reset overflow flag" | (NODE) "DI8"; %%%%%%%%%%%%%%%% % Flank Settings DI1_FlankSettings: "DI1 Pulse edge" ["Positiv,Negativ,Båda"] ENUM | (sv) "DI1 Flankinställning" | (en) "DI1 Flank setting" | (NODE) "DI1" | (MENU) "YES"; DI2_FlankSettings: "DI2 Pulse edge" ["Positiv,Negativ,Båda"] ENUM | (sv) "DI2 Flankinställning" | (en) "DI2 Flank setting" | (NODE) "DI2" | (MENU) "YES"; DI3_FlankSettings: "DI3 Pulse edge" ["Positiv,Negativ,Båda"] ENUM | (sv) "DI3 Flankinställning" | (en) "DI3 Flank setting" | (NODE) "DI3" | (MENU) "YES"; DI4_FlankSettings: "DI4 Pulse edge" ["Positiv,Negativ,Båda"] ENUM | (sv) "DI4 Flankinställning" | (en) "DI4 Flank setting" | (NODE) "DI4" | (MENU) "YES"; DI5_FlankSettings: "DI5 Pulse edge" ["Positiv,Negativ,Båda"] ENUM | (sv) "DI5 Flankinställning" | (en) "DI5 Flank setting" | (NODE) "DI5" | (MENU) "YES"; DI6_FlankSettings: "DI6 Pulse edge" ["Positiv,Negativ,Båda"] ENUM | (sv) "DI6 Flankinställning" | (en) "DI6 Flank setting" | (NODE) "DI6" | (MENU) "YES"; DI7_FlankSettings: "DI7 Pulse edge" ["Positiv,Negativ,Båda"] ENUM | (sv) "DI7 Flankinställning" | (en) "DI7 Flank setting" | (NODE) "DI7" | (MENU) "YES"; DI8_FlankSettings: "DI8 Pulse edge" ["Positiv,Negativ,Båda"] ENUM | (sv) "DI8 Flankinställning" | (en) "DI8 Flank setting" | (NODE) "DI8" | (MENU) "YES"; %%%%%%%%%%%%%% % Trip voltage DI_TripVoltage: "DI Trip voltage" ["10V,4V"] ENUM | (sv) "DI Omslagsspänning" | (en) "DI Trip voltage" | (MENU) "YES"; %%%%%%%%%%%%%%%% % Digital output DO1: "DO1" [""] INT | (sv) "DO1" | (en) "DO1" | (NODE) "DO1"; DO2: "DO2" [""] INT | (sv) "DO2" | (en) "DO2" | (NODE) "DO2"; DO3: "DO3" [""] INT | (sv) "DO3" | (en) "DO3" | (NODE) "DO3"; DO4: "DO4" [""] INT | (sv) "DO4" | (en) "DO4" | (NODE) "DO4"; DO5: "DO5" [""] INT | (sv) "DO5" | (en) "DO5" | (NODE) "DO5"; DO6: "DO6" [""] INT | (sv) "DO6" | (en) "DO6" | (NODE) "DO6"; %%%%%%%%%%%%%%%%%%%%%% % Universal input type UI1_Type: "UI1_Type" ["Ohm,Volt,mA,DI"] ENUM | (sv) "UI1 Typ av mätning" | (en) "UI1 Measurement type" | (NODE) "UI1" | (MENU) "YES"; UI2_Type: "UI2_Type" ["Ohm,Volt,mA,DI"] ENUM | (sv) "UI2 Typ av mätning" | (en) "UI2 Measurement type" | (NODE) "UI2" | (MENU) "YES"; UI3_Type: "UI3_Type" ["Ohm,Volt,mA,DI"] ENUM | (sv) "UI3 Typ av mätning" | (en) "UI3 Measurement type" | (NODE) "UI3" | (MENU) "YES"; UI4_Type: "UI4_Type" ["Ohm,Volt,mA,DI"] ENUM | (sv) "UI4 Typ av mätning" | (en) "UI4 Measurement type" | (NODE) "UI4" | (MENU) "YES"; UI5_Type: "UI5_Type" ["Ohm,Volt,mA,DI"] ENUM | (sv) "UI5 Typ av mätning" | (en) "UI5 Measurement type" | (NODE) "UI5" | (MENU) "YES"; UI6_Type: "UI6_Type" ["Ohm,Volt,mA,DI"] ENUM | (sv) "UI6 Typ av mätning" | (en) "UI6 Measurement type" | (NODE) "UI6" | (MENU) "YES"; UI7_Type: "UI7_Type" ["Ohm,Volt,mA,DI"] ENUM | (sv) "UI7 Typ av mätning" | (en) "UI7 Measurement type" | (NODE) "UI7" | (MENU) "YES"; UI8_Type: "UI8_Type" ["Ohm,Volt,mA,DI"] ENUM | (sv) "UI8 Typ av mätning" | (en) "UI8 Measurement type" | (NODE) "UI8" | (MENU) "YES"; %%%%%%%%%%%%%%%% % Resistor Range UI1_Range : "UI1_Range " ["Auto,250,2500,25000,250000"] ENUM | (sv) "UI1 Mätområde" | (en) "UI1 Measurement range" | (NODE) "UI1" | (MENU) "COND, UI1_Type, =, 0"; UI2_Range : "UI2_Range " ["Auto,250,2500,25000,250000"] ENUM | (sv) "UI2 Mätområde" | (en) "UI2 Measurement range" | (NODE) "UI2" | (MENU) "COND, UI2_Type, =, 0"; UI3_Range : "UI3_Range " ["Auto,250,2500,25000,250000"] ENUM | (sv) "UI3 Mätområde" | (en) "UI3 Measurement range" | (NODE) "UI3" | (MENU) "COND, UI3_Type, =, 0"; UI4_Range : "UI4_Range " ["Auto,250,2500,25000,250000"] ENUM | (sv) "UI4 Mätområde" | (en) "UI4 Measurement range" | (NODE) "UI4" | (MENU) "COND, UI4_Type, =, 0"; UI5_Range : "UI5_Range " ["Auto,250,2500,25000,250000"] ENUM | (sv) "UI5 Mätområde" | (en) "UI5 Measurement range" | (NODE) "UI5" | (MENU) "COND, UI5_Type, =, 0"; UI6_Range : "UI6_Range " ["Auto,250,2500,25000,250000"] ENUM | (sv) "UI6 Mätområde" | (en) "UI6 Measurement range" | (NODE) "UI6" | (MENU) "COND, UI6_Type, =, 0"; UI7_Range : "UI7_Range " ["Auto,250,2500,25000,250000"] ENUM | (sv) "UI7 Mätområde" | (en) "UI7 Measurement range" | (NODE) "UI7" | (MENU) "COND, UI7_Type, =, 0"; UI8_Range : "UI8_Range " ["Auto,250,2500,25000,250000"] ENUM | (sv) "UI8 Mätområde" | (en) "UI8 Measurement range" | (NODE) "UI8" | (MENU) "COND, UI8_Type, =, 0"; %%%%%%%%%%%%%%% % Analog output AO1: "AO1" ["V"] DEC2 | (sv) "AO1" | (en) "AO1" | (NODE) "AO1"; AO2: "AO2" ["V"] DEC2 | (sv) "AO2" | (en) "AO2" | (NODE) "AO2"; AO3: "AO3" ["V"] DEC2 | (sv) "AO3" | (en) "AO3" | (NODE) "AO3"; AO4: "AO4" ["V"] DEC2 | (sv) "AO4" | (en) "AO4" | (NODE) "AO4"; AO5: "AO5" ["V"] DEC2 | (sv) "AO5" | (en) "AO5" | (NODE) "AO5"; AO6: "AO6" ["V"] DEC2 | (sv) "AO6" | (en) "AO6" | (NODE) "AO6"; PUBLIC %%%%%%%%%%%%%%%%%%%%%%% % Cable sequence number CSN: "CSN" [""] INT | (sv) "Kabelsekvensnummer" | (en) "Cable sequence number" | (MENU) "YES"; %%%%%%%%%%%%%%% % Digital input DI1 :"DI1" [""] INT | (sv) "DI1" | (en) "DI1" | (NODE) "DI1"; DI2 :"DI2" [""] INT | (sv) "DI2" | (en) "DI2" | (NODE) "DI2"; DI3 :"DI3" [""] INT | (sv) "DI3" | (en) "DI3" | (NODE) "DI3"; DI4 :"DI4" [""] INT | (sv) "DI4" | (en) "DI4" | (NODE) "DI4"; DI5 :"DI5" [""] INT | (sv) "DI5" | (en) "DI5" | (NODE) "DI5"; DI6 :"DI6" [""] INT | (sv) "DI6" | (en) "DI6" | (NODE) "DI6"; DI7 :"DI7" [""] INT | (sv) "DI7" | (en) "DI7" | (NODE) "DI7"; DI8 :"DI8" [""] INT | (sv) "DI8" | (en) "DI8" | (NODE) "DI8"; %%%%%%%%%%% % Frequency DI1_Freq :"DI1 Frequency" ["Hz"] DEC2 | (sv) "DI1 Frekvens" | (en) "DI1 Frequency" | (NODE) "DI1" | (MUNIT) "Hertz" | (RANGE) "0-200"; DI2_Freq :"DI2 Frequency" ["Hz"] DEC2 | (sv) "DI2 Frekvens" | (en) "DI2 Frequency" | (NODE) "DI2" | (MUNIT) "Hertz" | (RANGE) "0-200"; DI3_Freq :"DI3 Frequency" ["Hz"] DEC2 | (sv) "DI3 Frekvens" | (en) "DI3 Frequency" | (NODE) "DI3" | (MUNIT) "Hertz" | (RANGE) "0-200"; DI4_Freq :"DI4 Frequency" ["Hz"] DEC2 | (sv) "DI4 Frekvens" | (en) "DI4 Frequency" | (NODE) "DI4" | (MUNIT) "Hertz" | (RANGE) "0-200"; DI5_Freq :"DI5 Frequency" ["Hz"] DEC2 | (sv) "DI5 Frekvens" | (en) "DI5 Frequency" | (NODE) "DI5" | (MUNIT) "Hertz" | (RANGE) "0-200"; DI6_Freq :"DI6 Frequency" ["Hz"] DEC2 | (sv) "DI6 Frekvens" | (en) "DI6 Frequency" | (NODE) "DI6" | (MUNIT) "Hertz" | (RANGE) "0-200"; DI7_Freq :"DI7 Frequency" ["Hz"] DEC2 | (sv) "DI7 Frekvens" | (en) "DI7 Frequency" | (NODE) "DI7" | (MUNIT) "Hertz" | (RANGE) "0-200"; DI8_Freq :"DI8 Frequency" ["Hz"] DEC2 | (sv) "DI8 Frekvens" | (en) "DI8 Frequency" | (NODE) "DI8" | (MUNIT) "Hertz" | (RANGE) "0-200"; %%%%%%%%% % Counter DI1_Counter :"DI1 Counter" [""] INT | (sv) "DI1 Räknare" | (en) "DI1 Counter" | (NODE) "DI1" | (MUNIT) "pulses"; DI2_Counter :"DI2 Counter" [""] INT | (sv) "DI2 Räknare" | (en) "DI2 Counter" | (NODE) "DI2" | (MUNIT) "pulses"; DI3_Counter :"DI3 Counter" [""] INT | (sv) "DI3 Räknare" | (en) "DI3 Counter" | (NODE) "DI3" | (MUNIT) "pulses"; DI4_Counter :"DI4 Counter" [""] INT | (sv) "DI4 Räknare" | (en) "DI4 Counter" | (NODE) "DI4" | (MUNIT) "pulses"; DI5_Counter :"DI5 Counter" [""] INT | (sv) "DI5 Räknare" | (en) "DI5 Counter" | (NODE) "DI5" | (MUNIT) "pulses"; DI6_Counter :"DI6 Counter" [""] INT | (sv) "DI6 Räknare" | (en) "DI6 Counter" | (NODE) "DI6" | (MUNIT) "pulses"; DI7_Counter :"DI7 Counter" [""] INT | (sv) "DI7 Räknare" | (en) "DI7 Counter" | (NODE) "DI7" | (MUNIT) "pulses"; DI8_Counter :"DI8 Counter" [""] INT | (sv) "DI8 Räknare" | (en) "DI8 Counter" | (NODE) "DI8" | (MUNIT) "pulses"; %%%%%%%%%%%%%%%%%% % Counter overflow DI1_Overflow :"DI1 Counter Overflow" [""] INT | (sv) "DI1 Räknare full" | (en) "DI1 Counter overflow" | (NODE) "DI1"; DI2_Overflow :"DI2 Counter Overflow" [""] INT | (sv) "DI2 Räknare full" | (en) "DI2 Counter overflow" | (NODE) "DI2"; DI3_Overflow :"DI3 Counter Overflow" [""] INT | (sv) "DI3 Räknare full" | (en) "DI3 Counter overflow" | (NODE) "DI3"; DI4_Overflow :"DI4 Counter Overflow" [""] INT | (sv) "DI4 Räknare full" | (en) "DI4 Counter overflow" | (NODE) "DI4"; DI5_Overflow :"DI5 Counter Overflow" [""] INT | (sv) "DI5 Räknare full" | (en) "DI5 Counter overflow" | (NODE) "DI5"; DI6_Overflow :"DI6 Counter Overflow" [""] INT | (sv) "DI6 Räknare full" | (en) "DI6 Counter overflow" | (NODE) "DI6"; DI7_Overflow :"DI7 Counter Overflow" [""] INT | (sv) "DI7 Räknare full" | (en) "DI7 Counter overflow" | (NODE) "DI7"; DI8_Overflow :"DI8 Counter Overflow" [""] INT | (sv) "DI8 Räknare full" | (en) "DI8 Counter overflow" | (NODE) "DI8"; %%%%%%%%%%%%%%% % Short circuit DI_ShortCirc: "DI Short Circuit" [""] INT | (sv) "DI Kortslutning" | (en) "DI Short circuit" | (MENU) "YES"; %%%%%%%%%%%%% % DO Override DO1_Overridden : "DO1 Manually overriden" [""] INT | (sv) "DO1 Manuelt styrd" | (en) "DO1 Manually overriden" | (NODE) "DO1"; DO2_Overridden : "DO2 Manually overriden" [""] INT | (sv) "DO2 Manuelt styrd" | (en) "DO2 Manually overriden" | (NODE) "DO2"; DO3_Overridden : "DO3 Manually overriden" [""] INT | (sv) "DO3 Manuelt styrd" | (en) "DO3 Manually overriden" | (NODE) "DO3"; DO4_Overridden : "DO4 Manually overriden" [""] INT | (sv) "DO4 Manuelt styrd" | (en) "DO4 Manually overriden" | (NODE) "DO4"; DO5_Overridden : "DO5 Manually overriden" [""] INT | (sv) "DO5 Manuelt styrd" | (en) "DO5 Manually overriden" | (NODE) "DO5"; DO6_Overridden : "DO6 Manually overriden" [""] INT | (sv) "DO6 Manuelt styrd" | (en) "DO6 Manually overriden" | (NODE) "DO6"; %%%%%%%%%%%%%%%%%%%%%%% % Universal input value UI1 : "UI1" [""] DEC2 | (sv) "UI1" | (en) "UI1" | (NODE) "UI1" | (MUNIT) "IOC, UI1_Type" | (RANGE) "IOC, UI1_Type, SRV, UI1_Range, R, 0-10, R, 0-20, R, 0/1"; UI2 : "UI2" [""] DEC2 | (sv) "UI2" | (en) "UI2" | (NODE) "UI2" | (MUNIT) "IOC, UI2_Type" | (RANGE) "IOC, UI2_Type, SRV, UI2_Range, R, 0-10, R, 0-20, R, 0/1"; UI3 : "UI3" [""] DEC2 | (sv) "UI3" | (en) "UI3" | (NODE) "UI3" | (MUNIT) "IOC, UI3_Type" | (RANGE) "IOC, UI3_Type, SRV, UI3_Range, R, 0-10, R, 0-20, R, 0/1"; UI4 : "UI4" [""] DEC2 | (sv) "UI4" | (en) "UI4" | (NODE) "UI4" | (MUNIT) "IOC, UI4_Type" | (RANGE) "IOC, UI4_Type, SRV, UI4_Range, R, 0-10, R, 0-20, R, 0/1"; UI5 : "UI5" [""] DEC2 | (sv) "UI5" | (en) "UI5" | (NODE) "UI5" | (MUNIT) "IOC, UI5_Type" | (RANGE) "IOC, UI5_Type, SRV, UI5_Range, R, 0-10, R, 0-20, R, 0/1"; UI6 : "UI6" [""] DEC2 | (sv) "UI6" | (en) "UI6" | (NODE) "UI6" | (MUNIT) "IOC, UI6_Type" | (RANGE) "IOC, UI6_Type, SRV, UI6_Range, R, 0-10, R, 0-20, R, 0/1"; UI7 : "UI7" [""] DEC2 | (sv) "UI7" | (en) "UI7" | (NODE) "UI7" | (MUNIT) "IOC, UI7_Type" | (RANGE) "IOC, UI7_Type, SRV, UI7_Range, R, 0-10, R, 0-20, R, 0/1"; UI8 : "UI8" [""] DEC2 | (sv) "UI8" | (en) "UI8" | (NODE) "UI8" | (MUNIT) "IOC, UI8_Type" | (RANGE) "IOC, UI8_Type, SRV, UI8_Range, R, 0-10, R, 0-20, R, 0/1"; %%%%%%%%%%%%%%%%%%%%%%%% % Universal input status UI1_Status : "UI1 Status" [""] INT | (sv) "UI1 Status" | (en) "UI1 Status" | (NODE) "UI1"; UI2_Status : "UI2 Status" [""] INT | (sv) "UI2 Status" | (en) "UI2 Status" | (NODE) "UI2"; UI3_Status : "UI3 Status" [""] INT | (sv) "UI3 Status" | (en) "UI3 Status" | (NODE) "UI3"; UI4_Status : "UI4 Status" [""] INT | (sv) "UI4 Status" | (en) "UI4 Status" | (NODE) "UI4"; UI5_Status : "UI5 Status" [""] INT | (sv) "UI5 Status" | (en) "UI5 Status" | (NODE) "UI5"; UI6_Status : "UI6 Status" [""] INT | (sv) "UI6 Status" | (en) "UI6 Status" | (NODE) "UI6"; UI7_Status : "UI7 Status" [""] INT | (sv) "UI7 Status" | (en) "UI7 Status" | (NODE) "UI7"; UI8_Status : "UI8 Status" [""] INT | (sv) "UI8 Status" | (en) "UI8 Status" | (NODE) "UI8"; %%%%%%%%%%%%% % AO Override AO1_Overridden : "AO1 Manually overriden" [""] DEC2 | (sv) "AO1 Manuelt styrd" | (en) "AO1 Manually overriden" | (NODE) "AO1"; AO2_Overridden : "AO2 Manually overriden" [""] DEC2 | (sv) "AO2 Manuelt styrd" | (en) "AO2 Manually overriden" | (NODE) "AO2"; AO3_Overridden : "AO3 Manually overriden" [""] DEC2 | (sv) "AO3 Manuelt styrd" | (en) "AO3 Manually overriden" | (NODE) "AO3"; AO4_Overridden : "AO4 Manually overriden" [""] DEC2 | (sv) "AO4 Manuelt styrd" | (en) "AO4 Manually overriden" | (NODE) "AO4"; AO5_Overridden : "AO5 Manually overriden" [""] DEC2 | (sv) "AO5 Manuelt styrd" | (en) "AO5 Manually overriden" | (NODE) "AO5"; AO6_Overridden : "AO6 Manually overriden" [""] DEC2 | (sv) "AO6 Manuelt styrd" | (en) "AO6 Manually overriden" | (NODE) "AO6"; PRIVATE BAUDRATE 38400; CHECKSUM MODBUS SWAPPED; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Telegrams used for settting values in the unit TELEGRAM SetDISettings NAMED "SetDISettings" | (sv) "Ställ DI-inställningar" | (en) "Set DI settings" IS QUESTION DATA[0] := BYTE(Addr); % Modbus unit address DATA[1] := BYTE(16); % Modbus command "16" write multiple registers DATA[2] := RWORD(92); % Start register DATA[4] := RWORD(9); % Number of registers to write DATA[6] := BYTE(18); % Numer of bytes of data, two for each register DATA[7] := RWORD(DI1_CounterReset + DI1_OverflowFlagReset*2 + DI1_FlankSettings*4); DATA[9] := RWORD(DI2_CounterReset + DI2_OverflowFlagReset*2 + DI2_FlankSettings*4); DATA[11] := RWORD(DI3_CounterReset + DI3_OverflowFlagReset*2 + DI3_FlankSettings*4); DATA[13] := RWORD(DI4_CounterReset + DI4_OverflowFlagReset*2 + DI4_FlankSettings*4); DATA[15] := RWORD(DI5_CounterReset + DI5_OverflowFlagReset*2 + DI5_FlankSettings*4); DATA[17] := RWORD(DI6_CounterReset + DI6_OverflowFlagReset*2 + DI6_FlankSettings*4); DATA[19] := RWORD(DI7_CounterReset + DI7_OverflowFlagReset*2 + DI7_FlankSettings*4); DATA[21] := RWORD(DI8_CounterReset + DI8_OverflowFlagReset*2 + DI8_FlankSettings*4); DATA[23] := RWORD(DI_TripVoltage); ANSWER SIZE 8 DATA[0] = BYTE(Addr); DATA[1] = BYTE(16); DATA[2] = RWORD(92); DATA[4] = RWORD(9); TIMEOUT 300 END; TELEGRAM SetComTimeout NAMED "SetCommunicationTimeout" | (sv) "Ställ kommunikationstimeout" | (en) "Set Communication timeout" IS QUESTION DATA[0] := BYTE(Addr); % Modbus unit address DATA[1] := BYTE(6); % Modbus command "6" write single register DATA[2] := RWORD(101); % Start register DATA[4] := RWORD(ComTimeout); ANSWER SIZE 8 DATA[0] = BYTE(Addr); DATA[1] = BYTE(6); DATA[2] = RWORD(101); TIMEOUT 300 END; TELEGRAM SetDO1_6 NAMED "SetDO1-6" | (sv) "Ställ DO1-DO6" | (en) "Set DO1-DO6" IS QUESTION DATA[0] := BYTE(Addr); % Modbus unit address DATA[1] := BYTE(16); % Modbus command "16" write multiple registers DATA[2] := RWORD(102); % Start register DATA[4] := RWORD(6); % Number of registers to write DATA[6] := BYTE(12); % Numer of bytes of data, two for each DO DATA[7] := RWORD(DO1); DATA[9] := RWORD(DO2); DATA[11] := RWORD(DO3); DATA[13] := RWORD(DO4); DATA[15] := RWORD(DO5); DATA[17] := RWORD(DO6); ANSWER SIZE 8 DATA[0] = BYTE(Addr); DATA[1] = BYTE(16); DATA[2] = RWORD(102); DATA[4] = RWORD(6); TIMEOUT 300 END; TELEGRAM SetUISettings NAMED "SetUISettings" | (sv) "Ställ UI-inställningar" | (en) "Set UI settings" IS QUESTION DATA[0] := BYTE(Addr); % Modbus unit address DATA[1] := BYTE(16); % Modbus command "16" write multiple registers DATA[2] := RWORD(108); % Start register DATA[4] := RWORD(8); % Number of registers to write DATA[6] := BYTE(16); % Numer of bytes of data, two for each DO DATA[7] := RWORD(UI1_Type*64 + UI1_Range); DATA[9] := RWORD(UI2_Type*64 + UI2_Range); DATA[11] := RWORD(UI3_Type*64 + UI3_Range); DATA[13] := RWORD(UI4_Type*64 + UI4_Range); DATA[15] := RWORD(UI5_Type*64 + UI5_Range); DATA[17] := RWORD(UI6_Type*64 + UI6_Range); DATA[19] := RWORD(UI7_Type*64 + UI7_Range); DATA[21] := RWORD(UI8_Type*64 + UI8_Range); ANSWER SIZE 8 DATA[0] = BYTE(Addr); DATA[1] = BYTE(16); DATA[2] = RWORD(108); DATA[4] = RWORD(8); TIMEOUT 300 END; TELEGRAM SetAO1_6 NAMED "SetAO1-6" | (sv) "Ställ AO1-AO6" | (en) "Set AO1-AO6" IS QUESTION DATA[0] := BYTE(Addr); % Modbus unit address DATA[1] := BYTE(16); % Modbus command "16" write multiple registers DATA[2] := RWORD(116); % Start register DATA[4] := RWORD(12); % Number of registers to write DATA[6] := BYTE(24); % Numer of bytes of data, two for each AO DATA[7] := RINT32(AO1 * 1000); DATA[11] := RINT32(AO2 * 1000); DATA[15] := RINT32(AO3 * 1000); DATA[19] := RINT32(AO4 * 1000); DATA[23] := RINT32(AO5 * 1000); DATA[27] := RINT32(AO6 * 1000); ANSWER SIZE 8 DATA[0] = BYTE(Addr); DATA[1] = BYTE(16); DATA[2] = RWORD(116); DATA[4] = RWORD(12); TIMEOUT 300 END; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Telegrams used for getting values from the unit TELEGRAM GetCSN NAMED "GetCSN" | (sv) "Hämta kabelsekvensnummer" | (en) "Get cable sequence number" IS QUESTION DATA[0] := BYTE(Addr); % Modbus unit address DATA[1] := BYTE(3); % Modbus command "03h" read multiple registers DATA[2] := RWORD(0); % Start register DATA[4] := RWORD(1); % Number of registers to read ANSWER SIZE 7 DATA[0] = BYTE(Addr); % Modbus unit address DATA[1] = BYTE(3); % Modbus command "03h" read multiple registers DATA[2] = BYTE(2) ; % Numer of bytes of data CSN := RWORD[3]; TIMEOUT 300 END; TELEGRAM GetDI1_8 NAMED "GetDI1-8" | (sv) "Hämta DI1-DI8" | (en) "Get DI1-DI8" IS QUESTION DATA[0] := BYTE(Addr); % Modbus unit address DATA[1] := BYTE(3); % Modbus command "03h" read multiple registers DATA[2] := RWORD(1); % Start register DATA[4] := RWORD(8); % Number of registers to read ANSWER SIZE 21 DATA[0] = BYTE(Addr); % Modbus unit address DATA[1] = BYTE(3); % Modbus command "03h" read multiple registers DATA[2] = BYTE(16); % Numer of bytes of data, two for each DI DI1 := RWORD[3]; DI2 := RWORD[5]; DI3 := RWORD[7]; DI4 := RWORD[9]; DI5 := RWORD[11]; DI6 := RWORD[13]; DI7 := RWORD[15]; DI8 := RWORD[17]; TIMEOUT 300 END; TELEGRAM GetFreqAndCounterDI1_8 NAMED "GetDI1-8FreqAndCounter" | (sv) "Hämta frekvens och räknare för DI1-DI8" | (en) "Get frequency and counter for DI1-DI8" IS QUESTION DATA[0] := BYTE(Addr); % Modbus unit address DATA[1] := BYTE(3); % Modbus command "03h" read multiple registers DATA[2] := RWORD(9); % Start register DATA[4] := RWORD(32); % Number of registers to read ANSWER SIZE 69 DATA[0] = BYTE(Addr); % Modbus unit address DATA[1] = BYTE(3); % Modbus command "03h" read multiple registers DATA[2] = BYTE(64); % Numer of bytes of data, two for each DI DI1_Freq := RWORD32[3] / 1000; DI2_Freq := RWORD32[7] / 1000; DI3_Freq := RWORD32[11] / 1000; DI4_Freq := RWORD32[15] / 1000; DI5_Freq := RWORD32[19] / 1000; DI6_Freq := RWORD32[23] / 1000; DI7_Freq := RWORD32[27] / 1000; DI8_Freq := RWORD32[31] / 1000; DI1_Counter := RWORD32[35]; DI2_Counter := RWORD32[39]; DI3_Counter := RWORD32[43]; DI4_Counter := RWORD32[47]; DI5_Counter := RWORD32[51]; DI6_Counter := RWORD32[55]; DI7_Counter := RWORD32[59]; DI8_Counter := RWORD32[63]; TIMEOUT 300 END; TELEGRAM GetDIStatus NAMED "GetDIStatus" | (sv) "Hämta status för DI" | (en) "Get DI status" IS QUESTION DATA[0] := BYTE(Addr); % Modbus unit address DATA[1] := BYTE(3); % Modbus command "03h" read multiple registers DATA[2] := RWORD(41); % Start register DATA[4] := RWORD(9); % Number of registers to read ANSWER SIZE 23 DATA[0] = BYTE(Addr); % Modbus unit address DATA[1] = BYTE(3); % Modbus command "03h" read multiple registers DATA[2] = BYTE(18); % Numer of bytes of data DI1_Overflow := RWORD[3]; DI2_Overflow := RWORD[5]; DI3_Overflow := RWORD[7]; DI4_Overflow := RWORD[9]; DI5_Overflow := RWORD[11]; DI6_Overflow := RWORD[13]; DI7_Overflow := RWORD[15]; DI8_Overflow := RWORD[17]; DI_ShortCirc := RWORD[19]; TIMEOUT 300 END; TELEGRAM GetDOManualOverrideStatusIstatus NAMED "GetDOManualOverrideStatus" | (sv) "Hämta status för manuell styrning av DO1-6" | (en) "Get manual override status for DO1-6" IS QUESTION DATA[0] := BYTE(Addr); % Modbus unit address DATA[1] := BYTE(3); % Modbus command "03h" read multiple registers DATA[2] := RWORD(50); % Start register DATA[4] := RWORD(6); % Number of registers to read ANSWER SIZE 17 DATA[0] = BYTE(Addr); % Modbus unit address DATA[1] = BYTE(3); % Modbus command "03h" read multiple registers DATA[2] = BYTE(12); % Numer of bytes of data DO1_Overridden := RWORD[3]; DO2_Overridden := RWORD[5]; DO3_Overridden := RWORD[7]; DO4_Overridden := RWORD[9]; DO5_Overridden := RWORD[11]; DO6_Overridden := RWORD[13]; TIMEOUT 300 END; TELEGRAM GetUI1_8 NAMED "GetUI1_8" | (sv) "Hämta UI1-UI8" | (en) "Get UI1-UI8" IS QUESTION DATA[0] := BYTE(Addr); % Modbus unit address DATA[1] := BYTE(3); % Modbus command "03h" read multiple registers DATA[2] := RWORD(56); % Start register DATA[4] := RWORD(16); % Number of registers to read ANSWER SIZE 37 DATA[0] = BYTE(Addr); % Modbus unit address DATA[1] = BYTE(3); % Modbus command "03h" read multiple registers DATA[2] = BYTE(32); % Numer of bytes of data UI1 := RINT32[3] / 1000; UI2 := RINT32[7] / 1000; UI3 := RINT32[11] / 1000; UI4 := RINT32[15] / 1000; UI5 := RINT32[19] / 1000; UI6 := RINT32[23] / 1000; UI7 := RINT32[27] / 1000; UI8 := RINT32[31] / 1000; TIMEOUT 300 END; TELEGRAM GetUI1_8Status NAMED "GetUI1_8Status" | (sv) "Hämta status för UI1-UI8" | (en) "Get UI1-UI8 status" IS QUESTION DATA[0] := BYTE(Addr); % Modbus unit address DATA[1] := BYTE(3); % Modbus command "03h" read multiple registers DATA[2] := RWORD(72); % Start register DATA[4] := RWORD(8); % Number of registers to read ANSWER SIZE 21 DATA[0] = BYTE(Addr); % Modbus unit address DATA[1] = BYTE(3); % Modbus command "03h" read multiple registers DATA[2] = BYTE(16); % Numer of bytes of data UI1_Status := RWORD[3]; UI2_Status := RWORD[5]; UI3_Status := RWORD[7]; UI4_Status := RWORD[9]; UI5_Status := RWORD[11]; UI6_Status := RWORD[13]; UI7_Status := RWORD[15]; UI8_Status := RWORD[17]; TIMEOUT 300 END; TELEGRAM GetAO1_6Status NAMED "GetAO1_6Status" | (sv) "Hämta status för AO1-AO6" | (en) "Get AO1-AO6 status" IS QUESTION DATA[0] := BYTE(Addr); % Modbus unit address DATA[1] := BYTE(3); % Modbus command "03h" read multiple registers DATA[2] := RWORD(80); % Start register DATA[4] := RWORD(12); % Number of registers to read ANSWER SIZE 29 DATA[0] = BYTE(Addr); % Modbus unit address DATA[1] = BYTE(3); % Modbus command "03h" read multiple registers DATA[2] = BYTE(24); % Numer of bytes of data AO1_Overridden := RINT32[3] / 1000; AO2_Overridden := RINT32[7] / 1000; AO3_Overridden := RINT32[11] / 1000; AO4_Overridden := RINT32[15] / 1000; AO5_Overridden := RINT32[19] / 1000; AO6_Overridden := RINT32[23] / 1000; TIMEOUT 300 END; END;