Skip to content

Commit ae0d79a

Browse files
author
DAB
committed
Starten
123
1 parent f147b13 commit ae0d79a

4 files changed

+316
-0
lines changed

calcDiff.scl

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
FUNCTION_BLOCK "calcDiff"
2+
{ S7_Optimized_Access := 'TRUE' }
3+
VERSION : 0.1
4+
VAR_INPUT
5+
aMotherCores : Array[1..#daysLogged] of Real;
6+
aSetsProduced : Array[1..#daysLogged] of Real;
7+
bTrigger : Bool;
8+
bMonthShift : Bool;
9+
bFirstScan : Bool;
10+
iDay : Int;
11+
END_VAR
12+
13+
VAR_OUTPUT
14+
aDiffToday : Real;
15+
aDiffYesterday : Real;
16+
END_VAR
17+
18+
VAR
19+
aDifferenceCurrentLast : Array[1..#daysLogged] of Real;
20+
aDifferenceCurrent : Array[1..#daysLogged] of Real;
21+
R_TRIG_Reset {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
22+
R_TRIG_Month {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
23+
i3 : Int;
24+
i4 : Int;
25+
END_VAR
26+
27+
VAR CONSTANT
28+
daysLogged : Int := 31;
29+
END_VAR
30+
31+
32+
BEGIN
33+
REGION Initialize
34+
IF #bFirstScan THEN
35+
FOR #i4 := 1 TO #daysLogged DO
36+
#aDifferenceCurrent[#i4] := 0.0;
37+
#aDifferenceCurrentLast[#i4] := 0.0;
38+
END_FOR;
39+
END_IF;
40+
END_REGION;
41+
42+
#R_TRIG_Reset(CLK := #bTrigger);
43+
#R_TRIG_Month(CLK := #bMonthShift);
44+
45+
REGION Loop log values
46+
IF #R_TRIG_Reset.Q AND #iDay > 0 AND #iDay <= #daysLogged THEN
47+
IF #aSetsProduced[#iDay] <> 0 AND #aMotherCores[#iDay] <> 0 THEN
48+
#aDifferenceCurrent[#iDay] := #aSetsProduced[#iDay] / #aMotherCores[#iDay];
49+
//#aDifferenceCurrent[#iDay] := ROUND(IN := 100 * (#aSetsProduced[#iDay] / #aMotherCores[#iDay]))/100;
50+
//#aDifferenceCurrent[#iDay] := ROUND(IN := 100 * (#aSetsProduced[#iDay] / #aMotherCores[#iDay]))/100;
51+
END_IF;
52+
END_IF;
53+
END_REGION
54+
55+
REGION New month
56+
IF #R_TRIG_Month.Q THEN
57+
#aDifferenceCurrentLast := #aDifferenceCurrent;
58+
FOR #i3 := 1 TO #daysLogged BY 1 DO
59+
#aDifferenceCurrent[#i3] := 0.0;
60+
END_FOR;
61+
END_IF;
62+
END_REGION
63+
64+
IF #iDay <> 0 AND #iDay <= 31 THEN
65+
#aDiffToday := #aDifferenceCurrent[#iDay];
66+
67+
IF #iDay > 1 THEN
68+
#aDiffYesterday := #aDifferenceCurrent[#iDay - 1];
69+
ELSIF #iDay = 1 THEN
70+
#aDiffYesterday := #aDifferenceCurrent[#iDay + 30];
71+
END_IF;
72+
END_IF;
73+
74+
END_FUNCTION_BLOCK
75+

logAnalogResetDaily.scl

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
FUNCTION_BLOCK "logAnalogResetDaily"
2+
{ S7_Optimized_Access := 'TRUE' }
3+
VERSION : 0.1
4+
VAR_INPUT
5+
bMonthShift : Bool;
6+
bReset : Bool;
7+
bFirstScan : Bool;
8+
rInValue : Real;
9+
iDay : Int;
10+
END_VAR
11+
12+
VAR_OUTPUT
13+
rLogSignal : Real;
14+
rAverageSignal : Real;
15+
END_VAR
16+
17+
VAR
18+
R_TRIG_Reset {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
19+
R_TRIG_Month {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
20+
END_VAR
21+
VAR RETAIN
22+
aCurrentMonth : Array[1..#daysLogged] of Real;
23+
aLastMonth : Array[1..#daysLogged] of Real;
24+
END_VAR
25+
VAR
26+
i1 : Int;
27+
i2 : Int;
28+
i3 : Int;
29+
i4 : Int;
30+
END_VAR
31+
32+
VAR CONSTANT
33+
daysLogged : Int := 31;
34+
END_VAR
35+
36+
37+
BEGIN
38+
REGION Initialize
39+
IF #bFirstScan THEN
40+
#rLogSignal := 0.0;
41+
#rAverageSignal := 0.0;
42+
FOR #i4 := 1 TO #daysLogged DO
43+
#aCurrentMonth[#i4] := 0.0;
44+
#aLastMonth[#i4] := 0.0;
45+
END_FOR;
46+
END_IF;
47+
END_REGION ;
48+
49+
// Catch rising edges and create pulse
50+
#R_TRIG_Reset(CLK := #bReset);
51+
#R_TRIG_Month(CLK:=#bMonthShift);
52+
53+
54+
REGION Loop log values
55+
IF #R_TRIG_Reset.Q AND #iDay > 0 AND #iDay <= #daysLogged THEN
56+
#aCurrentMonth[#iDay] := #rInValue;
57+
#rAverageSignal := 0.0;
58+
59+
FOR #i2 := 1 TO #daysLogged BY 1 DO //Calculate average signal
60+
#rAverageSignal := #rAverageSignal + #aCurrentMonth[#i2];
61+
END_FOR;
62+
#rAverageSignal := #rAverageSignal / (#daysLogged);
63+
END_IF;
64+
END_REGION
65+
66+
REGION New month
67+
IF #R_TRIG_Month.Q THEN
68+
#aLastMonth := #aCurrentMonth;
69+
FOR #i3 := 1 TO #daysLogged BY 1 DO
70+
#aCurrentMonth[#i3] := 0.0;
71+
END_FOR;
72+
END_IF;
73+
END_REGION
74+
75+
#rLogSignal := #rInValue;
76+
77+
END_FUNCTION_BLOCK
78+

logSignalResetDaily.scl

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
FUNCTION_BLOCK "logSignalResetDaily"
2+
{ S7_Optimized_Access := 'TRUE' }
3+
VERSION : 0.1
4+
VAR_INPUT
5+
bReset : Bool;
6+
bMonthShift : Bool;
7+
bLogSignal : Bool;
8+
bFirstScan : Bool;
9+
iDay : Int;
10+
END_VAR
11+
12+
VAR_OUTPUT
13+
iCntLogSignal : Real := 0.0;
14+
iCntAverageSignal : Real := 0.0;
15+
END_VAR
16+
17+
VAR
18+
R_TRIG_Signal {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
19+
END_VAR
20+
VAR RETAIN
21+
IEC_Counter_Signal {InstructionName := 'CTU_INT'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : CTU_INT;
22+
END_VAR
23+
VAR
24+
R_TRIG_Reset {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
25+
aCurrentMonth : Array[1..#daysLogged] of Real;
26+
aLastMonth : Array[1..#daysLogged] of Real;
27+
i1 : Int;
28+
i2 : Int;
29+
i3 : Int;
30+
i4 : Int;
31+
R_TRIG_Month {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
32+
END_VAR
33+
34+
VAR CONSTANT
35+
daysLogged : Int := 31;
36+
maxCount : Int := 3000;
37+
END_VAR
38+
39+
40+
BEGIN
41+
REGION Initialize
42+
IF #bFirstScan THEN
43+
#iCntLogSignal := 0.0;
44+
#iCntAverageSignal := 0.0;
45+
FOR #i4 := 1 TO #daysLogged DO
46+
#aCurrentMonth[#i4] := 0.0;
47+
#aLastMonth[#i4] := 0.0;
48+
END_FOR;
49+
END_IF;
50+
END_REGION ;
51+
52+
#R_TRIG_Reset(CLK := #bReset);
53+
#R_TRIG_Month(CLK:=#bMonthShift);
54+
55+
(*
56+
REGION Loop log values
57+
IF #R_TRIG_Reset.Q THEN
58+
FOR #i1 := #daysLogged TO 2 BY -1 DO // Iterate from the last index to the second index
59+
#aCurrentMonth[#i1] := #aCurrentMonth[#i1 - 1]; // Shift elements to the right
60+
END_FOR;
61+
#aCurrentMonth[1] := #iCntLogSignal;
62+
63+
#iCntAverageSignal := 0.0;
64+
FOR #i2 := 1 TO #daysLogged BY 1 DO
65+
#iCntAverageSignal := #iCntAverageSignal + #aCurrentMonth[#i2];
66+
END_FOR;
67+
#iCntAverageSignal := #iCntAverageSignal / (#daysLogged);
68+
END_IF;
69+
END_REGION
70+
*)
71+
72+
IF #R_TRIG_Reset.Q AND #iDay > 0 AND #iDay <= #daysLogged THEN
73+
74+
#aCurrentMonth[#iDay] := #iCntLogSignal;
75+
#iCntAverageSignal := 0.0;
76+
77+
FOR #i2 := 1 TO #daysLogged BY 1 DO
78+
#iCntAverageSignal := #iCntAverageSignal + #aCurrentMonth[#i2];
79+
END_FOR;
80+
#iCntAverageSignal := #iCntAverageSignal / (#daysLogged);
81+
END_IF;
82+
83+
REGION New month
84+
IF #R_TRIG_Month.Q THEN
85+
#aLastMonth := #aCurrentMonth;
86+
FOR #i3 := 1 TO #daysLogged BY 1 DO
87+
#aCurrentMonth[#i3] := 0.0;
88+
END_FOR;
89+
END_IF;
90+
END_REGION
91+
92+
#R_TRIG_Signal(CLK := #bLogSignal);
93+
94+
#IEC_Counter_Signal(CU := #R_TRIG_Signal.Q,
95+
R := #R_TRIG_Reset.Q,
96+
PV := #maxCount,
97+
CV => #iCntLogSignal);
98+
99+
END_FUNCTION_BLOCK
100+

pulseDayAndMonth.scl

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
FUNCTION_BLOCK "pulseDayAndMonth"
2+
{ S7_Optimized_Access := 'TRUE' }
3+
VERSION : 0.1
4+
VAR_INPUT
5+
bClock : Bool;
6+
END_VAR
7+
8+
VAR_OUTPUT
9+
bPulseMidnight : Bool;
10+
bPulseNewMonth : Bool;
11+
iSecond : Int;
12+
iDay : Int;
13+
END_VAR
14+
15+
VAR
16+
R_TRIG_Midnight {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
17+
R_TRIG_Month {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
18+
R_TRIG_Second {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
19+
NowTime {InstructionName := 'DTL'; LibVersion := '1.0'; S7_SetPoint := 'True'} : DTL;
20+
bClockPulse : Bool;
21+
iMonth : Int;
22+
iMonthMemory : Int;
23+
iHour : Int;
24+
iMinute : Int;
25+
bMidnight : Bool;
26+
bNewMonth : Bool;
27+
iTrigSecond { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int := 1;
28+
END_VAR
29+
30+
VAR_TEMP
31+
iReturn : Int;
32+
END_VAR
33+
34+
VAR CONSTANT
35+
iTrigHour : Int := 12;
36+
iTrigMinute : Int := 9;
37+
END_VAR
38+
39+
40+
BEGIN
41+
#R_TRIG_Second(CLK := #bClock,
42+
Q => #bClockPulse);
43+
44+
IF #bClockPulse THEN
45+
#iReturn := RD_LOC_T(#NowTime);
46+
#iMonth := #NowTime.MONTH;
47+
#iDay := #NowTime.DAY;
48+
#iHour := #NowTime.HOUR;
49+
#iMinute := #NowTime.MINUTE;
50+
#iSecond := #NowTime.SECOND;
51+
52+
#bNewMonth := (#iMonth <> #iMonthMemory);
53+
#iMonthMemory := #iMonth;
54+
55+
#bMidnight := (#iHour = #iTrigHour AND #iMinute = #iTrigMinute AND #iSecond <= #iTrigSecond);
56+
END_IF;
57+
58+
#R_TRIG_Midnight(CLK := #bMidnight, Q => #bPulseMidnight);
59+
#R_TRIG_Month(CLK := #bNewMonth, Q => #bPulseNewMonth);
60+
61+
62+
END_FUNCTION_BLOCK
63+

0 commit comments

Comments
 (0)