Numero Settimana dell’anno (FC in SCL)

Funzione che calcola il numero della settimana dell’anno secondo il sistema ISO (https://en.wikipedia.org/wiki/ISO_week_date). Quindi tale funzione calcola il numero della settimana usando il seguente algoritmo:

week_iso1
week_iso2
week_iso3

Esempio: Friday 26 September 2008

Ordinal day: 244 + 26 = 270
Weekday: Friday = 5
270 − 5 + 10 = 275
275 / 7 = 39.28…
Risultato: Week 39

La funzione che andiamo a creare userà la funzione “numero_giorno_anno” precedentemente creata in un altro articolo (link).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
FUNCTION "numero_settimana" : Void
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
   VAR_INPUT 
      data_input : Date_And_Time;
   END_VAR
 
   VAR_OUTPUT 
      num_sett : Int;
   END_VAR
 
   VAR_TEMP 
      data_in_tmp : Date_And_Time;
      data_array AT data_in_tmp : Array[0..7] of Byte;
      num_giorno_anno : Int;
      giorno_settimana : Int;
      tmp_real : Real;
   END_VAR
 
 
BEGIN
	// calcolare il numero della settimana in corso 
	#data_in_tmp := #data_input;
 
	//uso la funzione numero_giorno_anno per trovare 
        //il numero del giorno dell'anno
	"numero_giorno_anno"(data_in := #data_input,
	                     num_giorno => #num_giorno_anno);
 
 
	// trasforma in un intero i 4 LSB di data_array[7]
	#giorno_settimana := BCD16_TO_INT(16#0f AND #data_array[7]); 
 
	//modifico giorno_settimana in modo da avere 
	//giorno_settimana=1 per lunedi invece che per domenica
	//... giorno_settimana=7 per domenica invece che per sabato.
	#giorno_settimana := #giorno_settimana - 1;
	IF #giorno_settimana = 0 THEN
	    #giorno_settimana := 7;
	END_IF;
 
	#tmp_real:= (#num_giorno_anno - #giorno_settimana + 10) / 7;
 
	#num_sett := TRUNC(#tmp_real);
 
 
 
END_FUNCTION

Potete scaricare i sorgenti da questo link –>> Donwload

You may also like...


Warning: count(): Parameter must be an array or an object that implements Countable in /membri/fabioplc/wp-includes/class-wp-comment-query.php on line 399
Menu Title