CNC Lezione - 07
CNC Lezione - 07
CNC Lezione - 07
Lezione 7
PLC – Testo strutturato
Inizio di un programma
PROGRAM _INIT
END_PROGRAM
Tipo di programma
PROGRAM _CYCLIC
END_PROGRAM
Fine di un programma
i := 0;
END_PROGRAM 8
6
PROGRAM _CYCLIC
i
i := i + 1; 4
IF i>=100 THEN
2
i := 0;
END_IF; 0
END_PROGRAM
0 2 4 6 8 10
Ciclo
Keyword Significato
A = BIT_CLR(IN, POS)
BIT_CLR
A contiene il valore di IN con il bit in posizione POS cancellato (impostato a 0)
A = BIT_SET(IN, POS)
BIT_SET
A contiene il valore di IN con il bit in posizione POS settato (impostato ad 1)
Operatore Significato
COS Coseno
EXP Esponenziale
Operatore Significato
MOD Resto della divisione tra variabili di tipo USINT, SINT, INT, UINT, UDINT, DINT
Operatore Significato
OR Or bit a bit
Rotazione bit a bit verso sinistra: A := ROL (IN, N);
ROL IN è shiftato N volte verso sinistra un bit alla volta, il bit più a sinistra viene
spostato a destra
Rotazione bit a bit verso destra: A := ROR (IN, N);
ROR IN è shiftato N volte verso destra un bit alla volta, il bit più a destra viene
spostato a sinistra
Selezione binaria: A := SEL (CHOICE, IN1, IN2);
SEL CHOICE deve essere di tipo BOOL. Se CHOICE è FALSE, allora viene restituito
IN1. Altrimenti, viene restituito IN2
Operatore Significato
TAN Tangente
IF – THEN – ELSE
IF <espressione1> THEN
<lista_istruzioni1>
Attenzione!!! ELSIF <espressione2> THEN
<lista_istruzioni2>
.
.
ELSE
<lista_istruzioniN>
END_IF;
IF – THEN – ELSE
PROGRAM _INIT Risultati:
t := 0;
Out := 8;
END_PROGRAM Ciclo di esecuzione Out
PROGRAM _CYCLIC
IF t < 4 THEN 0 8
t := t +1;
END_IF;
IF t < 2 THEN 1 0
Out := 0;
ELSIF t < 2 THEN
Out := 1;
2 3
ELSIF t > 3 THEN
Out := 2;
3 3
ELSE
Out := 3;
END_IF;
4 2
END_PROGRAM
CASE
CASE <espressione> OF
<valore1> : <lista_istruzioni1>
Più valori
<valore2>, <valore2> : <lista_istruzioni2>
<valore3>..<valore4> : <lista_istruzioni3>
ELSE <lista_istruzioni4>
END_CASE; Range di valori
CASE
PROGRAM _INIT Risultati:
t := 0;
Out := 8; Ciclo di esecuzione Out
END_PROGRAM
PROGRAM _CYCLIC 0 8
IF t < 4 THEN
t := t +1; 1 6
END_IF;
CASE t OF
1 : Out := 6; 2 1
0, 2 : Out := 1;
3..4 : Out := 2; 3 2
ELSE Out := 4;
END_CASE;
END_PROGRAM
4 2
FOR
FOR
Cosa calcola questo codice?
PROGRAM _INIT
A := 0; Il fattoriale del numero A e lo
U := 0; assegna alla variabile U
END_PROGRAM
PROGRAM _CYCLIC
U := A;
FOR B := A-1 TO 1 BY -1 DO
U := U*B;
END_FOR;
END_PROGRAM
REPEAT Attenzione!!!
Se <espressione> è
<lista_istruzioni> falsa si esegue il repeat,
UNTIL altrimenti si esce.
<espressione> L’opposto del while in C
END_REPEAT;
WHILE <espressione> DO
<lista_istruzioni> Attenzione!!!
END_WHILE; Se <espressione> è vera
si esegue il while,
altrimenti si esce.
Come il while in C
EXIT
Quanto vale U alla fine
dell’esecuzione?
PROGRAM _CYCLIC
U := 0;
FOR A:=0 TO 1 BY 1 DO Contiamo i cicli:
FOR B:=0 TO 10 BY 1 DO A=0, B=0 U = 1
IF B>=6 THEN
…
EXIT;
ELSE
A=0, B=5 U = 6
U := U + 1; A=0, B=5 U = 7 Istruzione fuori dal primo for
END_IF; A=1, B=0 U = 8
END_FOR
…
U := U + 1;
END_FOR A=1, B=5 U = 13
END_PROGRAM A=1, B=5 U = 14 Istruzione fuori dal primo for
U vale 14
Esempio
Realizzare un FB che calcoli 𝑈 = 𝐴 ∩ 𝐵ത
(* File Esempio.st *)
PROGRAM _INIT
(* File EsempioFB.st *) END_PROGRAM
FUNCTION_BLOCK EsempioFB
U := A AND NOT B; PROGRAM _CYCLIC
END_FUNCTION_BLOCK; ExampleFB(A := In1, B := In2);
Out := ExampleFB.U;
END_PROGRAM