% Danfos Ecl 310 drivrutin % version 0.9 % Stödjer applikation A266.9, A376,1 och A376.4 % DEVICETYPE ECL310 NAMED "ECL310" TYPEID 12927 IS PARAMETER Id:"Adress" INT; Scada:"VS01-GT13U" ["°C"]DEC2; PUBLIC S1:"VS01-GT3U" ["°C"]DEC2; V2a:"VS01-GT41" ["°C"]DEC2; V2b:"VS01-Rumsgivare" ["°C"]DEC2; S3:"VS01-GT11" ["°C"]DEC2; S4:"VV01-GT41" ["°C"]DEC2; V5:"VS01-GT42" ["°C"]DEC2; S6:"VV01-GT41" ["°C"]DEC2; V7a:"VS01-GP61" ["bar"]DEC2; V7b:"VS02-Rumsgivare" ["°C"]DEC2; M1:"VS01-SV1" ["%"]DEC2; M2:"VV01-SV1" ["%"]DEC2; M3:"VS02-SV1" ["%"]DEC2; B1:"VV01-GT11BV" ["°C"]DEC1; B2:"VS01-GT3U justerad" ["°C"]DEC1; B3:"VS01-GT3U använd" ["°C"]DEC2; aprefix:"Applikation prefix" ["-=0,A=65"]ENUM; atype:"Applikation typ" INT; astype:"Applikation subtyp" INT; aver:"Applikation version" INT; PRIVATE hasApp; S2; S5; S7; savedMax1; savedMin1; hasSaved1; savedMax2; savedMin2; hasSaved2; tmpMax; tmpMin; krets; BAUDRATE 38400; PARITY EVEN; CHECKSUM MODBUS SWAPPED; TELEGRAM ReadSensors NAMED "Läs sensorer" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(03); % Modbus kommando för att läsa input register DATA[2] := RWORD(10200); % Startadress DATA[4] := RWORD(10); % Antal register att läsa ANSWER SIZE 25 DATA[0] = BYTE(Id); DATA[1] = HEX(03); DATA[2] = BYTE(20); % Antal Bytes DATA[3] -> RWORD(IF (DATA>=32768) THEN S1:=(DATA-65536)/100; ELSE S1:=DATA/100; ENDIF;); DATA[5] -> RWORD( IF (DATA>=32768) THEN S2:=(DATA-65536)/100; ELSE S2:=DATA/100; ENDIF; IF atype=276 THEN V2b:=S2; ELSE V2a:=S2; ENDIF; ); DATA[7] -> RWORD(IF (DATA>=32768) THEN S3:=(DATA-65536)/100; ELSE S3:=DATA/100; ENDIF;); DATA[9] -> RWORD(IF (DATA>=32768) THEN S4:=(DATA-65536)/100; ELSE S4:=DATA/100; ENDIF;); DATA[11] -> RWORD( IF (DATA>=32768) THEN S5:=(DATA-65536)/100; ELSE S5:=DATA/100; ENDIF; IF atype=276 THEN V2a:=S5; ELSE V5:=S5; ENDIF; ); DATA[13] -> RWORD(IF (DATA>=32768) THEN S6:=(DATA-65536)/100; ELSE S6:=DATA/100; ENDIF;); DATA[15] -> RWORD( IF atype=276 THEN IF (DATA>=32768) THEN V7b:=(DATA-65536)/100; ELSE V7b:=DATA/100; ENDIF; ENDIF; ); TIMEOUT 800 END; TELEGRAM ReadVS01P NAMED "Läs SV01 tryck" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(03); % Modbus kommando för att läsa input register DATA[2] := RWORD(11599); % Startadress DATA[4] := RWORD(1); % Antal register att läsa ANSWER SIZE 7 DATA[0] = BYTE(Id); DATA[1] = HEX(03); DATA[2] = BYTE(2); % Antal Bytes DATA[3] -> RWORD(V7a:= DATA/100;); TIMEOUT 800 END; TELEGRAM ReadTriac NAMED "Läs ställdon" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(03); % Modbus kommando för att läsa input register DATA[2] := RWORD(3994); % Startadress DATA[4] := RWORD(3); % Antal register att läsa ANSWER SIZE 11 DATA[0] = BYTE(Id); DATA[1] = HEX(03); DATA[2] = BYTE(6); % Antal Bytes DATA[3] -> RWORD(M1:=DATA/100;); DATA[5] -> RWORD(M2:=DATA/100;); DATA[7] -> RWORD(M3:=DATA/100;); TIMEOUT 800 END; TELEGRAM ReadSP NAMED "Läs börvärde" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(03); % Modbus kommando för att läsa input register DATA[2] := RWORD(12189); % Startadress DATA[4] := RWORD(1); % Antal register att läsa ANSWER SIZE 7 DATA[0] = BYTE(Id); DATA[1] = HEX(03); DATA[2] = BYTE(2); % Antal Bytes DATA[3] -> RWORD(B1:=DATA/10;); TIMEOUT 800 END; TELEGRAM ReadSCADA NAMED "Läs SCADA" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(03); % Modbus kommando för att läsa input register DATA[2] := RWORD(10399); % Startadress DATA[4] := RWORD(1); % Antal register att läsa ANSWER SIZE 7 DATA[0] = BYTE(Id); DATA[1] = HEX(03); DATA[2] = BYTE(2); % Antal Bytes DATA[3] -> RWORD(IF (DATA>=32768) THEN B2:=(DATA-65536)/100; ELSE B2:=DATA/100; ENDIF;); TIMEOUT 800 END; TELEGRAM ReadUsed1 NAMED "Läs använd temp krets 1" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(03); % Modbus kommando för att läsa input register DATA[2] := RWORD(11200); % Startadress DATA[4] := RWORD(1); % Antal register att läsa ANSWER SIZE 7 DATA[0] = BYTE(Id); DATA[1] = HEX(03); DATA[2] = BYTE(2); % Antal Bytes DATA[3] -> RWORD(IF (DATA>=32768) THEN B3:=(DATA-65536)/100; ELSE B3:=DATA/100; ENDIF;); TIMEOUT 800 END; TELEGRAM WriteSCADA NAMED "Skriv SCADA" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(6); % Modbus kommando för att skriva ett register DATA[2] := RWORD(10399); % Register adress DATA[4] <- RWORD(IF Scada<0 THEN DATA:=65536+(Scada*100); ELSE DATA:=Scada*100; ENDIF;); ANSWER SIZE 8 DATA[0] = BYTE(Id); DATA[1] = BYTE(06); TIMEOUT 300 END; TELEGRAM ReadApp NAMED "Läs Applikation" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(03); % Modbus kommando för att läsa input register DATA[2] := RWORD(2059); % Startadress DATA[4] := RWORD(4); % Antal register att läsa ANSWER SIZE 13 DATA[0] = BYTE(Id); DATA[1] = HEX(03); DATA[2] = BYTE(8); % Antal Bytes DATA[3] -> RWORD(aprefix:=DATA;); DATA[5] -> RWORD(atype:=DATA;); DATA[7] -> RWORD(astype:=DATA;); DATA[9] -> RWORD(aver:=DATA;); TIMEOUT 800 END; TELEGRAM ReadRoom NAMED "Läs rumskomp" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(03); % Modbus kommando för att läsa input register DATA[2] <- RWORD(DATA:=10181+(krets*100);); % Startadress DATA[4] := RWORD(2); % Antal register att läsa ANSWER SIZE 9 DATA[0] = BYTE(Id); DATA[1] = HEX(03); DATA[2] = BYTE(4); % Antal Bytes DATA[3] -> RWORD(tmpMax:=DATA;); DATA[5] -> RWORD(tmpMin:=DATA;); TIMEOUT 800 END; TELEGRAM WriteRoom NAMED "Skriv rumskomp" IS QUESTION DATA[0] := BYTE(Id); % Enhetens Modbus adress DATA[1] := HEX(10); % Modbus kommando för att skriva flera register DATA[2] <- RWORD(DATA:=10181+(krets*100);); % Register adress DATA[4] := RWORD(2); % Antal register DATA[6] := BYTE(4); % Antal byte DATA[7] <- RWORD(DATA:=tmpMax;); DATA[9] <- RWORD(DATA:=tmpMin;); ANSWER SIZE 8 DATA[0] = BYTE(Id); DATA[1] = HEX(10); TIMEOUT 300 END; SCHEDULER BEGIN IF hasApp=0 THEN TRANSMIT(ReadApp); hasApp:=1; ELSE IF atype=276 THEN IF (S2<>B3) THEN IF hasSaved1=0 THEN krets:=1; TRANSMIT(ReadRoom); savedMax1:=tmpMax; savedMin1:=tmpMin; hasSaved1:=1; ENDIF; IF hasSaved2=0 THEN krets:=2; TRANSMIT(ReadRoom); savedMax2:=tmpMax; savedMin2:=tmpMin; hasSaved2:=1; ENDIF; ELSE IF hasSaved1=1 THEN krets:=1; tmpMax:=savedMax1; tmpMin:=savedMin1; TRANSMIT(WriteRoom); hasSaved1:=0; ENDIF; IF hasSaved2=1 THEN krets:=2; tmpMax:=savedMax2; tmpMin:=savedMin2; TRANSMIT(WriteRoom); hasSaved2:=0; ENDIF; ENDIF; ENDIF; DEFAULT(ReadApp); DEFAULT(ReadSensors); DEFAULT(ReadVS01P); DEFAULT(ReadTriac); DEFAULT(ReadSP); DEFAULT(ReadSCADA); DEFAULT(ReadUsed1); DEFAULT(WriteSCADA); ENDIF; END; END;