Está en la página 1de 141

Beckhoff TwinCAT

The Windows Control and Automation Technology


Beckhoff
Industrial PC

Beckhoff
TwinCAT
Beckhoff
Lightbus

Beckhoff
Embedded PC

Beckhoff Beckhoff Beckhoff


Bus Terminal Fieldbus Box PC Fieldbus Cards,
Switches

Beckhoff Beckhoff
EtherCAT Drive Technology

1 09.07.2007
Control basado en PC

Evolución en control

Hardware  Software
IPC Mechanic  Electronic IPC
Slots/CPUs Tasks
Prog. Prog.
HMI par. Connect  Fieldbus HMI
Tool Tool
Comm.  direct Access
Komm.
Router

RT-Kernel
PLC 1
PLC 2

E/A
..

NC
CPU
E/A
NC

Mapping

Fieldbuses

2 09.07.2007
Qué es TwinCAT ?

TwinCAT es un paquete para la automatización


que incluye el software de desarrollo
y el runtime
• Control sequencial (Software PLC),
• motion (Software Motion Control),
• Comunicación entre todos los componenetes (ADS),
• Librerias de funciones (controllers,
• communication, OS functions, etc...)

Todo esto en HARD REALTIME sobre Windows NT/2000/XP


y en Windows NT/XP Embedded and CE.NET.

3 09.07.2007
Posibles soluciones
a s
Potencia
fo rm
l ata
s p
s l a I
o d a NC
ra t P ,
P a P T
AT : N C
C C ,
w in , P L
T I /O
AT :
w inC
T

PC

CX1000
BCxxxx
BXxxxx Coste
4 09.07.2007
TwinCAT: Arquitectura

TwinCAT en una plataforma PC

TwinCAT
 No modifica Windows
 No necesita hardware especial
 Convierte Windows en un Real Time OS.
 Floating Point Unit (FPU) fully supported
 Completo acceso desde Windows por medio de ADS via OCX, Dll
 Acceso Remoto via TCP/IP

PC platform
 Hardware Standar,
 Utiliza los recursos del PC
 use of mainstream operating system (Windows)
 Fácil Integración con la red ofimática
 open field bus communication

5 09.07.2007
Plataforma PC

TwinCAT System

Usermode
Diagnose PLC User User
SysMan
i.e. Scope Control HMI HMI
ADS ADS ADS ADS OPC

OCX/Dll OPC
TCP/IP
ADS Router
Windows NT, 2000, XP
Realtime Server

ADS ADS ADS ADS


PLC NC other

Kernelmode
Server Server i.e. CAM
I/O I/O I/O I/O
Server

I/O Mapping
Fieldbus Card Drivers

6 09.07.2007
TwinCAT real-time

• desarrollado por Beckhoff


• No necesita hardware adicional excepto el
PC
• Tiempo de ciclo mínimo 50 µs
• Tiempo de Latencia < 15 µs (PIII)
• Ratio entre RealTime y Windows ajustable
(patentado)
• Mensaje si el tiempo de latencia es muy alto

7 09.07.2007
TwinCAT on a CX1000 platform

TwinCAT
 Almacenamiento cíclico de variables retentivas
 Programación del display
Safe operation
 TwinCAT real-time sobrevive a BSOD (pantallas azules)
 Motherboard diagnosis for fan/temperature

Performance
 Tiempo de ciclo minimo 50µs

Retain data/restart behaviour


 Soporta UPS (serie y Beckhoff)
 HW embebido: 32-bit x86 comp. CPU 266 MHz
 OS: Windows CE o Windows XP embedded
 sin ventiladores
 acceso directo al K-Bus
 posibilidad de expansión con diferentes maestros y esclavos
 resolución desde 320 x 240 to 1024 x 768

8 09.07.2007
TwinCAT en una plataforma BXxxxx

TwinCAT
• Descargar y recuperar el código fuente
• Depuración online/ Cambio online
• Acceso remoto desde el field bus

BXxxxx
• hardware embebido
• Smart System Bus
(basado en CANopen)
• display
• cursor de navegación
• sistema operativo embebido
• acceso directo a los terminales.
• 2 tareas

9 09.07.2007
TwinCAT en una plataforma BCxxxx

TwinCAT
• Descargar programa
• Depuración online
• Acceso y programación desde el Field bus

BCxxxx
• hardware embebido
• sistema operativo embebido
• acceso directo a entradas/salidas
•1 tarea

10 09.07.2007
TwinCAT I/O System

• abierto a todos los buses de campo


• PC hardware supported
• fàcil de configurar y de realizar diagnóstico
• mapeado lógico del mapeado del bus

TwinCAT process image


Input
Input Output
Output

Mapping

II O
O II O
O II O
O
field bus 1 field bus 2 field bus 3
11 09.07.2007
TwinCAT PLC Control

Estructura modular
• máx. 4 PLCs en a PC
• 1 PLC en CX1000/BX/BC
Tareas
• max. 4 task in one PLC
Fàcil de configurar y de depurar
• cambio online del programa
• todas las posibilidades de depuración:
• puntos de paro, monitorización, scope

Diferentes lenguajes de programación


• all IEC61131-3 languages
(IL, ST, FBD, LD, SFC)

12 09.07.2007
Estadística tiempos de ejecución

4000 3714 Test 1: BOOL, INT, WORD


Test 2: BOOL, INT, WORD,
[us/1000 Líneas de Código]

3500
DWORD, DINT
Tiempo de ejecución

3000 Test 3: BOOL, INT, WORD,


DWORD, DINT, REAL
2500
Test 1
2000 Test 2
1500 Test 3
1500

1000

500
54 24 5
0
Conv. BC9000 CX1000 PIII 850 P4 2,8
PLC MHz GHz
13 09.07.2007
Conectividad

Fácil de usar:
ADS (Automation Device Specification)
OPC (OLE for Process Control)

ADS over TCP/IP

ADS over TCP/IP

ADS over TCP/IP ADS over TCP/IP

ADS over Field bus

14 09.07.2007
Conectividad

LAN (TCP/IP)

PC PC CX1000
PLC HMI PLC HMI HMI

PLC Field- PLC Field-


RT bus RT bus

Profibus Bus Coupler Profibus Controller


BK3100 BX3100

Descentralizar programa con las BX3100 o BC3100


• programación/configuración desde PC remoto via fieldbus (Profibus)
• local fieldbus I/O without decentralised PLCs
• HMI en un CX1000 sin TwinCAT usando TcADSDll para CE
15 09.07.2007
TwinCAT System Manager

16 09.07.2007
Visión general Twincat System Manager

17 09.07.2007
TwinCAT System Service

TwinCAT System Service es un servicio de Windows NT


que funciona bajo the local system account. Por este
motivo Twincat System Service arranca antes que el
usuario se logue. Como un icono de actividad, TwinCAT
System Service incorpora un icono en la barra de
herramientas. El color indica el estado de Twincat.

TwinCAT parado
TwinCAT arrancando.
TwinCAT funcionando.
TwinCAT Configuración

TwinCAT System Service es el responsable de


arrancar y parar el runtime de TwinCAT. Carga
todos los servidores configurados y los
inicializa durante el arranque TwinCAT.
.

18 09.07.2007
TwinCAT System Service

The event display es un programa que monitoriza


los eventos del sistema. El servicio de eventos
arranque de forma automática.

El subsistema TwinCAT I/O puede ser


reseteado desde TwinCAT System Service.
Para ello, se debe seleccionar la opción reset
del menu. El reset es aplicado a todos los
fieldbus configurados

19 09.07.2007
Multitarea

TwinCAT contiene más de 62 tareas diferentes. Se puede utilizar la


configuración de tareas por defecto o se puede personalizar.

20 09.07.2007
Gestión de tareas

Operacion en Tiempo real de los clásicos PLC.

Lectura Entradas Progama PLC


Escritura Salidas Win NT & HMI Interface

Ciclo PLC Ciclo PLC t


Operación en tiempo real de un soft PLC (1 task) en un PC con windows NT.

PLC cycle PLC cycle t


21 09.07.2007
Tiempo Real

Muchas aplicaciones industriales requieren una garantía, predecible y


reproducible, de que la carga del sistema reacciona suficientemente rápido a un
evento en un tiempo definido
El tiempo real es muy importante para en control digital. El muestreo de una
señal analógica (posición actual) con un PC debe tener una distancia constante
entre diferentes medidas.
Cada parte del proceso requiere diferentes tiempos de reacción. Debido a esto,
muchas parte del proceso con diferentes características y tiempos de reacción
pueden ser creados en una tarea.
Si diferentes tareas quieren acceder a la CPU, IEC 61131-3 define dos
procedimientos:
1. Preemptive (ejecución interrumplible) multi tasking (TwinCAT)

2. Non preemptive (ejecución no interrumpible) multi tasking

22 09.07.2007
Real time operation

 Las operaciones en tiempo real serán ejecutadas


en intervalos determinísticos. El tiempo base de
estos intervalos se puede escoger (1000µs ... 50µs).
Por defecto 1ms.

 La precisión de estos tiempos de ciclo es de T Ciclo±


±
15µs (Jitter). Tareas con la mínima prioridad se
esperan a que el resto haya finalizado

 En cada comienzo del Tiempo Base se ejecutan las


diferentes tareas en función de las prioridades. - 15µs +15µs

23 09.07.2007
Tiempo Real

El tiempo de procesador puede


ser asignado al Kernel de
Twincat por medio de la barra
de desplazamiento. Si el tiempo
Longitud del tiempo base base es de 1 ms, el tiempo
máximo de procesador para el
Twincat es de 800µs por cada 1
ms.
Cuando el Real Time de
TwinCAT ejecuta la tarea nula
(idle task),se pasa el
procesador a Windows.La barra
azul muestra el porcentaje del
procesador utilizado por el
Twincat. La barra visualiza la
media de 256 ciclos (ms).

Podemos ver el tiempo de latencia máxima y el actual.

24 09.07.2007
Operación en Tiempo Real

 Tarea PLC cíclica de 10ms (por ejemplo)

10ms 20ms 30ms


0ms
Comportamiento de Twincat: Tiempo Base 1ms 40ms

80% 80% 80%


TwinCAT W TC W W Time slice for
Windows

0ms 1ms 2ms 3ms Time slice for


TwinCAT
PLC PLC PLC program
cyclic task

Si twincat no necesita todo el tiempo twincat pasa el control al sistema


operativo hasta el siguiente ciclo

25 09.07.2007
Funcionamiento en Tiempo Real

 Las tareas PLC y de control de ejes serán ejecutadas de forma


deterministica

Operación en tiempo real deun programa PLC y un control NC en un PC


NC PLC program
Win NT & HMI Interface

1 1 2 1‘ 3 2 4 2‘ 3
e.g.: 1ms 2ms 3ms 4ms 5ms
t
NC cycle (e.g. 1ms) NC cycle NC cycle NC cycle
t
SPS cycle (e.g. 2ms) PLC cycle
26 09.07.2007
Funcionamiento en tiempo real

 Cuanto menor sea el Tiempo Base, menor será el tiempo de respuesta de la


tarea más prioritaria.

27 09.07.2007
TwinCAT PLC

28 09.07.2007
Creando un proyecto nuevo

Antes de empezar un proyecto debemos responder a las siguientes


preguntas:
1. ¿Cuál es el sistema destino que vamos a programar y cuál es el tipo de
conexión que tenemos con el dispositivo?
PC,BC o BX

Soft SPS (IPC)

29 09.07.2007
Creando un proyecto nuevo

IEC 61131-3 define una tarea com un elemento que controla la ejecución y
que permite llamar diferentes programas.

30 09.07.2007
POU Unidades Organizativas de Programación

En IEC61131-3 existen tres POUs (unidades de programación):


 Programs
 Function blocks
 Functions
Desde la configuración de las tareas se establecen los POU iniciales

31 09.07.2007
POU

Cada POU consiste en una area de declaración y otra área de programación


El area de declaración es la misma para todos los lenguajes IEC. Las
variables local se definen aquí.

El area de programación puede estar escrita en IL, ST, SFC, FBD,


LD o CFC.

32 09.07.2007
PROGRAM PRG

Program PRG
• Llamado por una tarea (TwinCAT: 1 programa llama a otro)
• Ejecuta : FB‘s, Functions, (Programs)
• Variables locales : estáticas, las variables locales mantienen el valor
del último ciclo.
• Inputs: Frecuentemente 0, pero VAR_INPUT es posible
• Outputs: frecuentemente 0, but VAR_OUTPUT es posible
• Paso por referencia: VAR_IN_OUT también posible
• Debug: Las variables locales son visibles en modo online
• Using: main, hand, automatic....

33 09.07.2007
Function block FB

Function block FB
• Llamada por programas o otras FB´s
• Llama : FB‘s, functions,
• Variables locales : estáticas.
• Inputs: 0,1,2,3 VAR_INPUT
• Outputs: 0,1,2,3 VAR_OUTPUT
• Paso por referencia 0,1,2,3 VAR_IN_OUT
• Debug: Variables locales son visibles en cada instancia de la function
block.
• Using: Multiples instancias de código con variables retentivas

34 09.07.2007
Crear instancias

PROGRAM MAIN
PRG Instancia_1
VAR Var_In :WORD;
Instancia_1 :A; Var_Out :BYTE;
FB Instancia_2 :A; Var_1:WORD;
Instancia_3 :B; Instancia_1
END_VAR
X :REAL;
FUNCTION_BLOCK A CAL Instancia_1 Y :REAL;
VAR _INPUT
CAL Instancia_3
Var_IN :WORD;
END_VAR
VAR _OUTPUT
Instancia_2
Var_Out :BYTE;
FB Var_In :WORD;
END_VAR Var_Out :BYTE;
VAR Var_1:WORD;
FUNCTION_BLOCK B
Var1 :WORD; Instancia_1
VAR_INPUT
Instancia_1: B; X :REAL;
X :REAL;
END_VAR
END_VAR Y :REAL;
VAR _OUTPUT
Y :REAL;
LD Var1 END_VAR
CAL Instancia_1 Instancia_3
 X :REAL;
Y :REAL;

35 09.07.2007
Function FC

Function FC
• Llamadas por: programs, function blocks y otras functions
• Llama: functions
• Variables locales : temporales. Una vez utilizadas las variables en el
siguiente ciclo vuelven a las condiciones iniciales
• Inputs: 1,2,3........ VAR_INPUT
• Outputs: Sólo 1!, pero es posible un estructura. El nombre de la
variable de salida es el mismo que el de la función.
• Excepto Twincat: VAR_IN_OUT posible,
• Debug: Las variables no son visibles en modo online pero sí se puede
realizar una depuración paso a paso.
• Using: algoritmos, escalados,…

36 09.07.2007
FC Specials

Desde
DesdeTwinCAT
TwinCAT2.8:
2.8:Valor
Valordevuelto
devueltopor
porlala
función
función

Valor
Valordevuelto.
devuelto.
Nombre
Nombrede
delalaFunction
Function El
Elnombre
nombrededelalasalida
salidaes
es
scale.
scale.
Inputs Scale
Scalepuede
puedeser
serusado
usado
Inputs
como
como una variablelocal
una variable local
variable
variable dentro delala
dentro de
Variables
Variableslocales
localessonson función(Write/Read)
función(Write/Read)
sólo
sólo validas durantelala
validas durante
ejecución
ejecucióndedelalafunción
función

37 09.07.2007
Identificadores

Identificadores= Nombres asociados a variables, tipos de


datos, funciones...

• El identificador debe empezar con una letra o un “_”


• Seguido de un número, una letra o un “_”
• No diferencia entre mayúsculas y minúsculas

No Permitido

• Special characters (!,“,§,$..)


• Espacios
• dos o más“_” seguidos
• mutated vowel

38 09.07.2007
Prefijos

Prefijos no estan especificados, pero facilitan la identificación del dato y


evitan errores de programación. Sugerencias:

Hungarian notation:Escribir las palabras juntas. La primera letra de cada


palabra debe ser mayúscula

b – Boolean bEndschalterLinks
r – Real rSollPosition
s - String sRxDatos
ST_ - Declaración de estructuras
st - Instancias de estructuras ST_MotorDatos (declaration)
FB_ - Declaración de Function Blocks stM1Parametro (instance)
fb – Instancias a Function Blocks
M_ - Declaration de métodos FB_Alarma (declaration)
fbM1Alarma (instance)

39 09.07.2007
Palabras reservadas (key words) y comentarios

Palabras reservadas de Twincat son Los comentarios son texto limitado


las definidas por el IEC61131-3. por los caracteres (* *) .
Son palabras utilizadas en la
Excepción: dentro de una variable
sintaxis y no deben ser utlizadas
string
para otros propósitos.
(*Entradas Digitales*)
TRUE, FALSE, AND, FUNCTION,... bStart AT%IX0.0:BOOL;(*Maquina
arrancada*)
(*Entradas analogicas*)
La opción Auto format, cambia el TemK1 AT%IW10(*Byte 10-11*):WORD;
formato de las palabras reservadas
a capital.

40 09.07.2007
Tipos de datos elementales

Tipo ANY-Type Key word Data width Initial Value range


(Bit)
Boolean ANY_Bit BOOL 1 FALSE TRUE/FALSE
Bit string(8) BYTE 8 0 0..16#FF
Bit string(16) WORD 16 0 0..16#FFFF
Bit string(32) DWORD 32 0 0..16#FFFF_F
FFF
Short integer ANY_Num SINT 8 0 -27...27-1
Integer INT 16 0 -215...215-1
Double integer DINT 32 0 -231...231-1
Unsigned short integer USINT 8 0 0...28-1
Unsigned integer UINT 16 0 0...216-1
Unsigned double integer UDINT 32 0 0...232-1

41 09.07.2007
Tipos de datos elementales

Type ANY-Type Key word Data Initial Value range


width
(Bit)
Slide point ANY_Real REAL 32 0.0 -1.18*10-38..
3.4*1038
Long slide point LREAL 64 0.0 -2.22*10-308..
1.798*10308
Date ANY_Date DATE (D) 32 D#1970-01-01
Time of day TIME_OF_DAY 32 TOD#00:00 TOD#00:00..
(TOD) TOD#23:59
Date time of DATE_AND_TIME 32 DT#1970-01-
day (DT) 01-00:00
time ANY_Time TIME 32 T#0ms
Sequential ANY_String STRING (80+1)*8 ‚‘
characters

42 09.07.2007
String

Los string siempre acaban


En la declaración del con un valor nulo, por lo que
string se especifica el VAR
VAR el tamaño ocupado por una
número de bytes o strVar variable tipo string será:
strVar:STRING(3);
:STRING(3);
caracteres que será
lenVar:
lenVar:INT; Num Bytes=
reservado para esa INT;
variable. (1 byte= 1 sizeVar:
sizeVar:INT;
INT; Num.Caracteres +1 (nulo)
caracter). Si no se END_VAR
END_VAR
especifica el tamaño,
el tamaño por defecto
será de 80 caracteres.

43 09.07.2007
Caracteres especiales

Los caracteres especiales deben ser


precedidos del caracter ‘$’
Special Characters

character description

A $$ Caracter dollar
CR $‘ Comilla simple
1
0 $L or $l Line feed
0 (*Str. Abschluss*)
$N or $n New line

$P or $p Page feed
$R or $r Line break
$T or $t Tab

44 09.07.2007
ASCII <-> CHR

Si un caracter en un programa debe


ser convertido a ASCII, dos
procedimientos son permitidos :
1. Indirectamente Interpretando los
datos de forma diferente
2. Directamente con una Function
Block. ASC y CHR estan
incluidas en la librería
ChrAsc.lib.

(Component of the Comlib)

45 09.07.2007
Declaración de variables de tipos elementales

IMPORTANTE: El nombre de la variable debe indicar el tipo de datos que


contiene

Identifier Data type Initial value

bStellerUntenLinks:BOOL:=TRUE;
La dirección física de la
variable no es conocida por el
programador (variables no
direccionadas)

46 09.07.2007
Declaración de variables de tipos elementales

En la decalaración es posible enlazar el nombre de una variable con una


posición de memoria.

Identificador AT Dirección : Data type ;


Identifier AT %I X Byte Bit Data type

%Q B Byte

%M W
Estas variables apuntan
D a una dirección física de
memoria
bStellerUntenLinks AT%IX0.0:BOOL:=TRUE;

A partir de TwinCAT 2.8 el direccionamiento se puede hacer automáticamente.


bStellerUntenLinks AT%I*:BOOL:=TRUE;

47 09.07.2007
Visibilidad de las variables

Variables locales son Variables globales son


visibles en el bloque que visibles en todos los
fueron declaradas. bloques del projecto.

Key words Key words


VAR .. VAR_GLOBAL ..
END_VAR END_VAR
VAR_INPUT .. VAR_CONFIG ..
END_VAR END_VAR
VAR_IN_OUT ..
END_VAR
VAR_OUTPUT ..
END_VAR

48 09.07.2007
Acceso por medio de variables direccionadas

Se puede acceder desde un programa A a otro programa B por medio de


variables direccionadas

Project Machine

PROGRAM A PROGRAM B

VAR VAR
locVar AT%MB2:WORD;
END_VAR END_VAR

LD %MB2 
 
 

49 09.07.2007
Nombres iguales de variables globales y locales

Project Machine El compilador no genera


ningún warning.
VAR_GLOBAL
Var1:WORD;
END_VAR

PROGRAM A
VAR
Var1 :WORD;
END_VAR

LD Var1



50 09.07.2007
Atributos

Los atributos son utilizados para definir características específicas de variables.


Ejemplos:
Las variables son guardadas cuando se para el PLC y deben ser restauradas cuando
arranca.
VAR RETAIN
Contador:UINT;
END_VAR
VAR PERSISTENT
Contador:UINT;
END_VAR
Valores iniciales, the variables should be allocated with a special value at the PLC
start or reset.
VAR
AccelerationTime : TIME := T#3s200ms;
END_VAR
51 09.07.2007
Attributos (constantes)

Si necesitas utilizar
Projekt Maschine constantes matemáticas,
parámetros constantes de
VAR_GLOBAL CONSTANT una máquina,etc. se debe
extender VAR_GLOBAL ..
 END_VAR con la palabra
END_VAR reservada CONSTANT.
Esto también es así con
PROGRAM A variables locales
VAR CONSTANT VAR_GLOBAL CONSTANT
 pi:REAL:=3.141592654;
END_VAR END_VAR





52 09.07.2007
Tipos de datos derivados

El usuario puede crear sus propios tipos de datos basándose en tipos de


datos elementales o otros tipos de datos creados. Los nuevos datos
creados son visibles en todo ell proyecto. Cominenzan con la palabra
reservada TYPE y finalizan con END_TYPE.

Tipo padre
Name Data type Initial value Range

h
e
New value i
r

Derivación
Name Data type Initial value Range

53 09.07.2007
References (Alias Types) (Variable II)

Es posible utilizar tipos de Syntaxis:


datos definidos por el usuario
para crear un nombre TYPE
alternativo para una variable, <Identificador>:<tipo de datos>;
constante o function block.
END_TYPE
Se comienzan con la palabra
reservada
TYPE y finalizan con
END_TYPE. Ejemplo: Ads_Net_ID
TYPE
Net_ID:STRING(23);
END_TYPE

54 09.07.2007
Enumeraciones

Las enumeraciones son tipos de datos que asignan un identificador a un


conjunto de números (mormalmente una serie de números)

Syntaxis:
TYPE <identificador>:(<Enum_0> ,<Enum_1>, ...,<Enum_n>);
END_TYPE
Ejemplo:
TYPE DiaSemana:(Lu, Ma, Mi, Ju, Vie, Sa, Do:=10);(*Lu = 0 Ma = 1..
.. Sa = 6 Do = 10*)
END_TYPE
TYPE bit:(Up, Dn);(*Up = 0 Dn = 1*)
END_TYPE Recordad:No es
posible utilizar dos
o más veces el
mismo nombre en
la enumeración.
55 09.07.2007
Enumeraciones

Una variable de tipo enumeración se inicializa por defecto con el primer valor
de la enumeración . Se pueden hacer operaciones númericas con las
enumeraciones de tipo entero. También es posible asignar un número
directamente a una variable del tipo enumeración

VAR
WochenTag:DiaSemana;
END_VAR

WochenTag:=3;

56 09.07.2007
Declaración de estructuras

form
Las estructuras son tipos de datos
Pers_Data importantes para representar la
información de un objeto de nuestra
planta.
Name: Firstname:
Las estructuras pueden ser pasadas
directamente a FunctionBlocks
Age: Address:

TYPE Pers_Data : Identifier for the new data type


STRUCT
Identifier : parents data type
Name: STRING(25);
Firstname: STRING(25); ■
Age:USINT; ■
Address: STRING(55);

END_STRUCT
END_TYPE

57 09.07.2007
Instancias de estructuras

P1
Name:=‚Müller‘
P1 Firstname:=‚Peter‘
Age:=32
K2
Address:=‚Postweg 34‘
P3
Name:=‚Koschnik‘
P3
Firstname:=‚Heinz‘
Age:=37
Address:=‚Domplatz 10‘

VAR
P1, P3 : Pers_Data;
END_VAR VAR_INPUT
VAR_OUTPUT Employees: Pers_Data;
K2 : Pers_Data; END_VAR
END_VAR
Name_total:=CONCAT(P3.Firstname, P3.Name)

58 09.07.2007
Arrays

Todos los elementos de un array deben de ser del mismo tipo, incluido estructuras.
Son posibles 1,2 y 3 dimensiones

VAR
Feld_1 :ARRAY[1..10] OF BYTE; 1-dimension
Feld_2 :ARRAY[1..10, 2..5] OF UINT; 2-dimension
Feld_3 :ARRAY[1..10,2..5,3..10] OF DINT; 3-dimension
END_VAR
 Es posible direccionar todo el array a una posición de memoria.
VAR
Feld_1 AT%MB100:ARRAY[1..10] OF BYTE;
END_VAR
Acceso a los elementos
Feld_1[2] := 120; (* acceso directo*)
Feld_2[i,j] := EXPT(i,j); (*acceso indirecto*)

59 09.07.2007
Ejemplo inicialización array 1 dimensión

1 dimensión

Identificador Field Data type Valor Inicial

DBTiempo :ARRAY [0..6] OF TIME:= T#1s, T#2s, T#1s, 4(T#0s);

Faktor Wert
0 1 2 3 4 5 6 NO ES POSIBLE
ARRAYS DINÁMICOS
T#1s T#2s T#1s T#0s T#0s T#0s T#0s

Acceso:
VAR
tiempo : TIME;
END_VAR

Tiempo := DBTiempo[1];
60 09.07.2007
Ejemplo inicialización array 2 dimensiones

Identificador Field Data type Valor Inicial

Supportpoint:ARRAY [0..1, 0..6] OF REAL:= 0, 1.7, 2, 4(3.33), 6, 6(1.2);

Factor Valor

Acceso:
0 1 2 3 4 5 6 VAR

0 0 1.7 2 3.33 3.33 3.33 3.33 ejemplo : REAL;


END_VAR
1 6 1.2 1.2 1.2 1.2 1.2 1.2
ejemplo := Supportpoint[1 ,0];

61 09.07.2007
Inicialización de un array con comentarios

Ejemplo: Diferentes posiciones de trabajo para un eje

Drivejob:ARRAY [0..3, 0..1] OF LREAL:=


(* target position, velocity *)
(*Job 0*) 20.0, 30.0,
(*Job 1*) 33.75, 30.0,
(*Job 2*) 45.0, 30.0,
(*Job 3*) 70.75, 30.0;

62 09.07.2007
Ejemplo inicialización array 3 dimensiones

Identificador Array Datatype Valor Inicial

Supportpoint :ARRAY [0..2, 0..1, 0..2] OF UINT:= 0,1,2,3,4,5,


10,11,12,13,14,15,
20,21,22,23,24,25
2

1
1 23 24 25
0 1 13 14 15
0 Access:
20 21 22
1 3 4 5 VAR
0 10 11 12 ejemplo : UINT;
0 1 2 END_VAR
0 0 1 2 ejemplo :=
0 1 2
Supportpoint[ 2,0,1 ];
0 1 2
63 09.07.2007
Fuera de rango

Es importante no escribir fuera de una posición del array

VAR
Feld_1 :ARRAY[1..10] OF BYTE;
Feld_2 :ARRAY[1..10, 2..5] OF UINT;
Feld_3 :ARRAY[1..10] OF DINT;
END_VAR

i:= 9 9
Feld_1[i+2] := 120;


Feld_1[9]; 0
Feld_2[1,2]; 120

64 09.07.2007
Check Bounds (FUN)

FUNCTION CheckBounds :INT


Si escribimos una función
con el nombre VAR_INPUT
CheckBounds, podemos I,L,U : INT;
verificar si estamos
escribiendo fuera de rango. END_VAR

IF I< L THEN
Error CheckBounds := L;
ELSIF I > U THEN
Error CheckBounds := U;
ELSE
i Limited
value „OK“ case CheckBounds := I;
Min
Max
END_IF

65 09.07.2007
Check Bounds (FUN) modo de operación

FUNCTION CheckBounds :INT


Program (* User*) VAR_INPUT
VAR I,L,U : INT;
arrVar:ARRAY[0..3] OF INT END_VAR
Llamada
index :INT automática
IF I< L THEN

END_VAR CheckBounds := L;
ELSIF I > U THEN
CheckBounds := U;
index:=2;
ELSE

CheckBounds := I;
arrVar[Checkbounds[2,0,3]:=100;
END_IF
FUNCTION CheckBounds :INT
index:=index+2 VAR_INPUT
I,L,U : INT;
arrVar[Checkbounds[4,0,3]:=100; END_VAR
IF I< L THEN
CheckBounds := L;
Checkbounds ELSIF I > U THEN
devuelve 3, el
acceso es CheckBounds := U;
limitado al ELSE
máximo
CheckBounds := I;
END_IF

66 09.07.2007
Combinación de structuras y arrays

Un array puede contener estructuras de datos


Estructura:
TYPE DrillPos :
STRUCT
XPos: LREAL;
FeedrateX: LREAL;
AccelerationX: LREAL;
DeccelerationX: LREAL;
JerkX: LREAL;
YPos: LREAL;
FeedrateY: LREAL;
AcceleartionY: LREAL;
DeccelerationY: LREAL;
JerkY: LREAL;
FeedDrill: LREAL;
Kuehlen: BOOL; (*Pump ?*)
END_STRUCT
END_TYPE
Declaración de los arrays :

Positions :ARRAY[0..100] OF DrillPos;


67 09.07.2007
Combinación de estructuras y arrays

Accediendo a Drillpos 55:


Acceso:
MoveXAx (*FB Instance*)
(
Execute:= TRUE,
Position:= Positions[55].XPos ,
Velocity:= Positions[55].FeedrateX
Acceleration:= Positions[55].AccelerationX,
Deceleration:= Positions[55].DeccelerationX,
Jerk:= Positions[55].JerkX,
Direction:= .........,
Axis:= .............,
);

68 09.07.2007
ST

69 09.07.2007
ST Texto estructurado:
Order de ejecución de los operadores:

Operación Símbolo Orden

Paréntesis (expresión) Primero


Llamada a Función Function name (parameter list)
Exponenciación EXPT
Negación -
Complementar NOT
Multiplicar *
Dividir /
Módulo MOD
Sumar +
Restar -
Comparar <,>,<=,>=
Son iguales? =
No es igual a <>
AND AND
XOR XOR Último
OR OR

70 09.07.2007
ST Texto Estructurado: Ejemplos

Instrucción Ejemplo

Asignación := PosWert := 10;


Llamada a function block Ton1(IN:=Start, PT:=T2s); Output:= Ton1.Q
RETURN RETURN;
IF
CASE
FOR
WHILE
REPEAT
EXIT
Empty instruction ;

71 09.07.2007
Instrucción IF

Keywords:
Se utiliza para generar varios bloques
de código que se ejecutan en función
de las condiciones. IF THEN
No es posible efectuar un salto hacia ELSIF
atrás en en código.
ELSE
END_IF
La instrucción„GOTO“ no está
disponible

ej.:

72 09.07.2007
Instrucción IF

No
Condición

IF Condición THEN Si
Bloque de instrucciones;
END_IF
Bloque de
instrucciones

73 09.07.2007
Instrucción IF

Condición No

IF a>b THEN

Bloque de Instrucciones A;
ELSE
Bloque de Instrucciones B;
END_IF Instrucciones A Instrucciones B

74 09.07.2007
Instrucción IF

IF Condición1 THEN
Bloque de instrucción A;
ELSE
IF Condición2 THEN
Bloque de instrucción B;
ELSE
Condición 1
IF Condición3 THEN
No
Sí Bloque de instrucción C;
Condición 2 ELSE
No Bloque de instrucción D;
Sí END_IF
Condición 3 END_IF
No
Sí END_IF

Bloque Instrucción A Bloque Instrucción B Bloque instrucción C Bloque Instrucción D

75 09.07.2007
Instrucción IF

IF Condición1 THEN
Bloque instrucciones A;
ELSIF Condición2 THEN
Bloque instrucciones B;
Condition 1 ELSIF Condición3 THEN
No Bloque instrucciones C;
Yes ELSE
Condition 2 Bloque instrucciones D;
No
Yes END_IF
Condition 3
No
Yes

Bloque instrucción A Bloque instrucción B Bloque instrucción C Bloque instrucción D

76 09.07.2007
Instrucción IF

Qué se puede utilizar como expresión booleana?

Condiciones : IF bVar THEN


.
•Variable BOOLEAN
IF a>b THEN
•Comparación
.
•Llamada a una FC IF LEFT(STR:= strVar, SIZE:=7) = 'TwinCAT' THEN
•Llamada a un dato FB .
IF Ton1.Q THEN
•No se puede llamar a una
FB! .
IF Ton1(IN:=bVar, PT:=T#1s ) THEN

77 09.07.2007
Instrucción Case

CASE Criterio Selección OF


Criterio Selección= 1
1: Instrucción 1 No
Criterio Selección= 2
Or 4 or 6
Yes Cireterio Selección = 7
2,4,6: Instrucción 2 Or 8 or 9 or 10?

7..10 : Instrucción 3 No

Yes
..
No
ELSE
Yes
Instrucciones por
defecto
Instrucción 1 Instrucción 2 Instrucción 3 Instrucción por defecto

END_CASE;

Dos valores iguales no


pueden aparecer en el
listado

78 09.07.2007
CASE Seleccion con valores enteros usando tipos enumerados

CASE State OF
Tipo enumerado:
INIT: instrucciones;(*State=0*)
TYPE Schritte :
START: instrucciones;(*State=1*)
( INIT:=0, START, AUTOMATIK, ENDE);
AUTOMATIK: instrucciones;(*State=2*)
END_TYPE
ENDE: instrucciones;(*State=3*)
END_CASE

Si la variable es declarada com enum se verá el


estado de la variable en formato string en el
modo online

VAR
State:Schritte;
(* State:INT also possible*)
END_VAR
79 09.07.2007
CASE Selección con constantes

VAR CONSTANT
Step1 : INT:= 0;
Step2 : INT:= 1; CASE State OF

Step3 : INT:= 2; Step1: instrucciones;(*State=0*)

Step4 : INT:= 3; Step2: instrucciones;(*State=1*)

END_VAR Step3..Step4: instrucciones;(*State=2 oder 3*)


END_CASE

VAR
State:INT;
END_VAR

80 09.07.2007
CASE ejemplo máquina de estados

TYPE Steps :
( INIT:=0, START, AUTOMATIC, END);
END_TYPE
Instruction
Instructionpara
paralas
lasacciones
acciones
CASE State OF
dentro
dentrodel
delpaso
paso
INIT: Q0:=TRUE;
IF Transición THEN state := START; END_IF
START: Q1:=TRUE; transiciones
transiciones

Paso IF Transición THEN state := AUTOMATIC; END_IF


Paso
AUTOMATIC: Q2:=TRUE;
IF Transición THEN state := END; END_IF
END: Q3:=TRUE;
IF Transición THEN state := INIT; END_IF
END_CASE
81 09.07.2007
Bucles

Se utilizan para evitar tener que repetir Si un bucle infinito es ejecutado esto
un listado de instrucciones común. El no implica un aumento de %CPU
número de iteraciones es conocido en destinado a Twincat.Tareas de mayor
runtime prioridad interrumpiran a la tarea
donde se encuentra el bucle infinito.
Desvantajas de los bucles:
Tareas de prioridad inferior a la tarea
Si se produce un error de
del bucle no serán ejecutadas.
programación la iteración puede ser
infinita.

Forced switch to Begin of a new


Win NT time slice

1 1 2 1‘ 3 1‘‘ 4 1‘‘‘ 1‘
e.g.: 1ms 2ms 3ms 4ms 5ms

82 09.07.2007
Bucles (Visión general)

Todos los bucles pueden ser finalizados con una instrucción EXIT, sin
importar la condición de salida del bucle.

Expresión Work flow Núm de ciclos fijos

FOR SINT/ INT / Pre repel Yes


DINT
WHILE BOOL Pre repel No

REPEAT BOOL Post repel No

83 09.07.2007
Bucle FOR

ciclo n Start i:=Valor inicial


Al principio del bucle , la variable
I es definida con un valor inicial
(ver ejemplo).
La variable es incrementada o Sí
i
decrementada en cada ciclo >Valor final
dependiendo del valor definido
por la palabra reservada BY. No
Si i excede el valor final (valor Instrucciones
después de TO) se finaliza el
bucle.
I:= i+ - valor TO
FOR i:=1 TO 12 BY 2 DO
Field[i]:=i*2;(*instrucción*)
END_FOR
ciclo n
84 09.07.2007
Bucle WHILE

ciclo n

El bloque de instrucciones dentro de


un bucle WHILE se ejecutan siempre y
cuando la condición se cumpla.
Sí Expressión No
La condición de salida contiene
variables que pueden ser cambiadas booleana
dentro del bloque de instrucciones del
bucle
Si la expresión es false al principio el
bloque de intrucciones dentro del
bucle no es ejecutado.
Bloque de intrucciones
I:= i+ paso
i:=0;
WHILE i<100 DO
Field[i]:=i*2;(*instrucciones*)
i:=i+1;
END_WHILE ciclo n

85 09.07.2007
Bucle REPEAT

Ciclo n

Las instrucciones dentro de un


bucle REPEAT son procesadas
hasta que la condición lógica dentro
de la cláusula UNTIL no se cumple. Bloque de intrucciones
El bloque de instrucciones es I:= i+ paso
ejecutado como mínimo una vez.

i:=0;
Sí Expresión No
REPEAT
booleana
Field[i]:=i*2;(*Instrucciones*)
i:=i+1;
UNTIL i>100
ciclo n
END_REPEAT
86 09.07.2007
Llamadas a FB‘s en ST

VAR
TON1:TON;
END_VAR
TON1 (IN:= NOT TON1.Q , PT:=T#1s );
Q0:= TON1.Q

desde TwinCAT 2.8 :

TON1(IN:= NOT TON1.Q, PT:=T#1s , Q=>Q0 );

87 09.07.2007
Explicación llamadas a FB en ST

Crear una instancia de un FB


VAR
TON1:TON;
END_VAR
Llamar a una instancia por su
nombre

TON1 (IN:= NOT TON1.Q , PT:=T#1s );


Parámetros de entrada

Leer salida Q0:= TON1.Q


No es posible: las FB pueden tener
varias salidas

Q0:=TON1(IN:= NOT TON1.Q, PT:=T#1s);


88 09.07.2007
Llamadas a FB en ST
(alternativo)

VAR
TON1:TON;
END_VAR

TON1.IN:= NOT TON1.Q ,


TON1. PT:=T#1s;
TON1();
Q0:= TON1.Q

89 09.07.2007
Llamada a FB (alternativo)

Declaración
VAR
Transfiere sólo el parámetro
de entrada. TON1:TON;
ESTO NO ES UNA
LLAMADA A UNA FB!!!!! END_VAR

TON1.IN:= NOT TON1.Q ;


TON1. PT:=T#1s;
TON1(); FB CALL
Leer salida Q0:= TON1.Q;
90 09.07.2007
Llamadas a FB‘s en ST

Result:=Scale (x:=input, xug:=0.0, xog:=32767.0, yug:=0.0,yog:=100.0);

(* igual:*)
Result:=Scale (input, 0.0, 32767.0, 0.0, 100.0);

(* igual :*)
Result:=Scale (
x:= input,
xug:= 0.0,
xog:= 32767.0,
yug:= 0.0,
yog:= 100.0
);

91 09.07.2007
Llamadas a FB‘s en ST

Result := Scale (x:=input, xug:=0.0, xog:=32767.0, yug:=0.0,yog:=100.0);

Resultado Llamada Parámetros de


entrada
(* equal:*)
Result:=Scale (
x:= input,
xug:= 0.0,
xog:= 32767.0,
yug:= 0.0,
yog:= 100.0
);

92 09.07.2007
SFC

93 09.07.2007
SFC Sequential Function Chart

Step
N Action
•Sólo un estado es activo al
mismo tiempo
•La condición para canviar
entre un estado y otro se
Transition Qualifier denomina transición.
• En la acción se tiene que
programar lo que se debe
Following efectuar en cada estado.
step N Action

Transition
Action,
Puede ser escrita en Structured
Text, Instruction list, Ladder
Diagram, Function Block Diagram y
Qualifier
en Sequential Function Chart .

94 09.07.2007
Estados

Paso inicial • Se puede ver si un estado está


activo al activo con la variable
comienzo NombreEstado.X.
• Durante la ejecución de los
Inicio estados, la duración del mismo
N Acción se puede saber por medio de la
variable NombreEstado.T .
• Ambos datos T y X són campos
„Normal“ de una estructura de datos que
Transición se crea automáticamente al
Step“
insertar el estado.
Estado1 • NombreEstado.X y
N Acción NombreEstado.T son variables
que sólo son de lectura.

Transición

95 09.07.2007
Acciones

Transición
Transición

Estado1
N Acción Estado1 N bOutput

Transición
Transición

Las acciones pueden ser


programadas en
Acción,
-> Structured Text, puede ser una variable de tipo
BOOL.
-> Instruction List,
La variable es true si se activa el
-> Ladder Diagram,
paso y FALSE cuando se abandona
-> Function block diagram, el estado
CFC/FBD
-> Sequential Function Chart

96 09.07.2007
Acciones, se permiten varias por estado

Transición

Estado1 N bOutput
P STAction
N LDAction
R FBDAction

97 09.07.2007
Estados/ramas alternativas

Inicial • Sólo una rama puede


N Acción activarse.
• Debido a que ambas ramas
son importantes se debe
introducir una transición antes
de los estados.
Transition Transición

EstadoA EstadoB
N Acción N Acción

Transición Transición

98 09.07.2007
Estados / ramas alternativas

•Las ramas pueden ser


Inicio asimétricas
N Acción

Transición
Transición
Estado B
N Acción
Estado A
N Acción

Transición

Estado C
Transición N Acción

Transición

99 09.07.2007
Estados / ramas alternativas

•Las ramas pueden saltarse


Inicial
N Acción

Transición

Estado A
N Accción Transición

Transición

100 09.07.2007
Estados / Ramas alternativas

•Dos ramas son procesadas


Inicial simultáneamente.
N Acción

Transición en el
comienzo de las
ramas
Transition simultáneas Línea doble, para
indicar la rama
paralela

Estado B
Estado A N Acción N acción

Transición
Transición en el final

101 09.07.2007
Estados / Ramas alternativas

•Las ramas simultáneas pueden


Transición ser asimétricas

Estado B
N Acción

Transición
Estado A
N Acción

Estado C
N Acción

Transición
102 09.07.2007
Transición

Una transición debe retornar un


„BOOL“. Posibilidades:
Inicio
• Variable BOOLEANA
N Acción
• Instrucción ST
• Transición programada
bVariable BOOLEAN
VARIABLE

Estado 1
N Acción

Instrucción ST.
A>B
El resultado debe ser
BOOLEANO.
Nota: Si la instrucción es
demasiado larga se
visualizará sólo una parte.

103 09.07.2007
Transiciones

Transiciones programadas

Inicio
N Acción

Con esta marca


se indicar que A>B
A>B es un comentario
„NADA CONECTADO“
Estado 1
N Acción El resultado debe ser de tipo
BOOLEANO

001
Comentario GT
A AND
B

Posible: FBD, LD, IL, ST. INPUT0


Pulsar para editar el Limitaciones: una red,
código una secuencia de
instrucciones, no
llamadas a FB.
104 09.07.2007
Último scan del estado

Cuando se activa la transición el estado se ejecuta una vez más.


Este mecanismo es muy útil para “limpiar” la acción. Ejemplo:
Resetear salidas.
Step.X
1

Estado1 0
t
N Acción Action processing

0
Go on t
1 Cycle

Estado 001
release
AND
siguiente N Acción
Output
Step1.X

Transition

En el último ciclo la variable


Estado.X = FALSE.

105 09.07.2007
Último scan del estado

Cuidado: Algunas veces este scan final puede provocar resultados


no deseados
Estado
1 N Acción
Step.X
1

0
TRUE
t
Action processing

Comportamiento: 0
t
Counter := Counter +1; 1 cycle 1 cycle

(*El valor de Counter es 2*)

1;

1;
r+

r+
te
Solución: Utilizar la variable de estado

te
un

un
para saltarse el último scan:

Co

Co
r :=

r :=
IF Schritt.X THEN

te

te
un

un
Counter := Counter +1;

Co

Co
END_IF
(*Counter vale 2*)
106 09.07.2007
Parámetros

Se ejecuta la acción cuando mientras está activo el estado.


N: Non Stored
Estado
N Acción
Step.X
1

0
TRUE
t
Action processing

0
N: Non Stored t
1 cycle

Correspondencia en FBD
001

Step.X Action processing

107 09.07.2007
Parámetros

La acción se ejecuta siempre hasta que se resetea.


S: SET
Estado
S Accíón
Step.X
1

0
TRUE
t
Action processing

0
t
1 cycle

Correspondencia FBD
001
Step.X SR
S
Action processing
R

108 09.07.2007
Parámetros

Se para de ejecutar la acción que se había iniciado con el S.


R: RESET
Estado
R Acción
Step.X
1

0
TRUE
t
Action processing

0
t

Correspondencia en FBD
001

SR
S
Action processing
Step.X R

109 09.07.2007
Parámetros

Se ejecuta la acción después de un cierto tiempo hasta que se


termina el estado
Step D: DELAY
D T#1s Action
Step.X
1

0
TRUE
t
Action processing

0
t
Delay

Correspondencia en FBD

001

TON
Step.X IN Q Action processing

T#1s PT ET

110 09.07.2007
Qualifier

Controls the action processing after activating a step


L: LIMITED
Step
L T#1s Action Step.X
1

0
TRUE t
Action processing

0
LIMITED t

Combination in FBD
Step.X
1
001
AND Action processing
0
TON t
Step.X IN Q Action processing

1
T#1s PT ET
0
t
Limit

111 09.07.2007
Qualifier

Controls the action processing after activating a step


P: PULSE
Step
P Action Step.X
1

0
TRUE t
Action processing

0
1 cycle 1 cycle t

Combination in FBD

001

R_TRIG ATTENTION: A SECOND FLOW


PROCESSES!
Step.X Clk Q Action processing

112 09.07.2007
Qualifier, Combinations

SD: Stored and delayed

DS: Delayed and stored

SL: Stored and time limeted

113 09.07.2007
Sequential Function Chart step diagnosis

VAR
SFCEnableLimit: BOOL;
(*When it has the value TRUE, the timeouts of the steps will be registered in SFCError.
Other timeouts will be ignored.*)

SFCInit: BOOL;
(*When this boolean variable has the value TRUE the sequential function chart is set back to
the Init step. The other SFC flags are reset too (initialization).

The Init step remains active, but is not executed, for as long as the variable has
the value TRUE. It is only when SFCInit is again set to FALSE that the block can
be processed normally. *)

114 09.07.2007
Sequential Function Chart step diagnosis

SFCReset: BOOL;
(*This variable, of type BOOL, behaves similarly to SFCInit. Unlike the latter, however,
further processing takes place after the initialization of the Init step. Thus for example
the SFCReset flag could be re-set to FALSE in the Init step.*)

115 09.07.2007
Sequential Function Chart step diagnosis

SFCQuitError: BOOL;

(*Execution of the SFC diagram is stopped for as long as this boolean


variable has the value TRUE whereby a possible timeout in the variable SFCError is
reset.
All previous times in the active steps are reset when the variable again assumes the
value FALSE.*)

SFCPause: BOOL;

(*Execution of the SFC diagram is stopped for as long as this boolean


variable has the value TRUE.*)

SFCTrans: BOOL;
(*This boolean variable takes on the value TRUE when a transition is actuated. .*)

116 09.07.2007
Sequential Function Chart step diagnosis

SFCError: BOOL;
(*This Boolean variable is TRUE when a timeout has occurred in a SFC diagram. If
another timeout occurs in a program after the first one, it will not be registered unless
the variable SFCError is reset first. *)

SFCErrorStep: STRING;
(*This variable is of the type STRING. If SFCError registers a timeout, in this variable is
stored the name of the step which has caused the timeout. *)

SFCErrorPOU: STRING;
(*This variable of the type STRING contains the name of the block in which a timeout
has occurred. *)

117 09.07.2007
Sequential Function Chart step diagnosis

SFCCurrentStep: : STRING;
(*This variable is of the type STRING. The name of the step is stored in this variable
which is active, independently of the time monitoring. In the case of simultaneous
sequences the step is stored in the branch on the outer right.
No further timeout will be registered if a timeout occurs and the variable SFCError is not
reset again.*)

118 09.07.2007
Sequential Function Chart step diagnosis (from 2.8)

SFCErrorAnalyzation: STRING;
(*This variable, of type STRING, provides the transition expression as well as every
variable in an assembled expression which gives a FALSE result for the transition and
thus produces a timeout in the preceding step. A requirement for this is declaration of
the SFCError flag, which registers the timeout. SFCErrorAnalyzation refers back to a
function called AppedErrorString in the TcSystem.Lib library. The output string
separates multiple components with the symbol “|”. *)

SFCTip: BOOL;
SFCTipMode: BOOL;
(*This variables of type BOOL allow inching mode of the SFC. When this is switched on
by SFCTipMode=TRUE, it is only possible to skip to the next step if SFCTip is set to
TRUE. As long as SFCTipMode is set to FALSE, it is possible to skip even over
transitions.*)
END_VAR

119 09.07.2007
Sequential Function Chart process diagnosis

Implicit variable

120 09.07.2007
Sequential Function Chart process diagnosis

• set step attributes for the step to be observed

121 09.07.2007
Online (and per ADS) can be requested

122 09.07.2007
Sequential Function Chart Tipmode

• insert implicit variable:

• effect:
SFCTipMode SFCTip Transition effect
Process stays in the current step
TRUE FALSE TRUE
Change to next step
TRUE TRUE TRUE
Change to next step
TRUE TRUE FALSE
Process stays in the current step
FALSE TRUE FALSE
Change to next step
FALSE FALSE TRUE
123 09.07.2007
Actions also in other IEC languages possible! (POU type :
PRG, FB)

„Mainprogram“

Call actio
n

Action step1

Action step2

124 09.07.2007
Overview

Contents

Part 1 Part 2 Part 3


IEC 61131-3 Overview Variables II Structs, Enums Sequential Function Chart

Software model Variables II Arrays Step diagnosis

Identifier Checkbounds Appendix

Elementary data types Structured text Bootprojects, Data remanence

Variables classes Checker functions

Block types Example Step by Step

TwinCAT System Service

Timing

125 09.07.2007
Remanent Flags Variables Attributes

These variables maintain their value, even after a power failure. When the
program is run again, the stored values will be processed further. A
practical example would be an operations timer that recommences
timing after a power failure. A practical example would be an operations
timer that recommences timing after a power failure. All other variables
are newly initialized, either with their initialized values or with the
standard initializations.
TwinCAT supports two kind of remanent flags:

RETAIN PERSISTENT

126 09.07.2007
Retain Persistent

Retain Persistent
To store

To delete Rebuild all, Reset Reset all

Possible for unlocated, located (%M) Unlocated, located (%I, %Q, %M)

127 09.07.2007
Boot project

Power ON

Requirement :
Start
It should be possible to 1 NT
automate the loading and
the starting of the PLC
project after switching on
the computer. 2 Start TwinCAT Log on

The PLC can start


Loading the boot project
independent from the 3 into the Run-Time
user log on!

4 Start PLC

128 09.07.2007
1&2

2 TwinCAT Auto boot Auto logon


with Win NT

129 09.07.2007
Create a boot project

Requirement:

1. The machine should


work properly.
2. The hardware,
software and the
mappings are correct.
3. The PLC Control in the
status online.

130 09.07.2007
3&4

Number of run time systems

Enabling for loading the boot Enabling for loading and saving
project for the run time system 1. the RETAIN data for the run
time 1.

131 09.07.2007
Sourcecode download

1.Goto Project/Options and press


the left mouse button.
2.A Window will open
3.Choose the Point Sourcedownload

132 09.07.2007
Timing for Sourcecode download

1.Implicit at load
Every time when you open the
PLC Project the Sourcecode will
be written down to the controller.

2.Notice at load
If the PLC Project changed, you
get a message box, when you
open the project.
3.Implicit at create boot project.
Everytime you create a
bootproject, the sourcecode will
be transfered to the controller

133 09.07.2007
Timing/Extent for Sourcecode download

1.On demand
The Sourcecode will be written
down to the controller on
demand.
Online/Sourcecode download

Extent
Sourcecode only
•The plc project will be written in
the controller
All files
•The plc project with all libaries
will be written tin the controller
134 09.07.2007
Plc project open from the controller

1. You can open the actuell plc


projekt direct from the controller

2. Under File/Open you can open the


project direct from the plc.

135 09.07.2007
Were retain and persitent data loaded successfully?

In order to be able to view this data The structure component


structure, the "PlcSystem.lib" shows if the
library must be linked in. persistent/retain data were
loaded successfully.
(Global variable)

136 09.07.2007
Meaning of the flags

Bit number Description

0 RETAIN variables: LOADED (without error)


1 RETAIN variables: INVALID (the back-up copy was loaded,
since no valid data was present)

RETAIN variables: REQUESTED (RETAIN variables should


2 be loaded, a setting in TwinCAT System Control)

3 Reserved

4 PERSISTENT variables: LOADED (without error)

5 PERSISTENT variables: INVALID (the back-up copy was


loaded, since no valid data was present)

6 Reserved

7 Reserved

137 09.07.2007
How can an access to the bootdata flags take place?

Because the variable


exists in the PLC,
(implicit) it can be
prompted directly.
TcPlcSystem.Lib

IF GETBIT32(inVal32:=SystemInfo.BootDataFlags , bitNo:=4) THEN


errLoadBootData:=FALSE;
strBootDataState:= 'PersistentData OK';
ELSIF GETBIT32(inVal32:=SystemInfo.BootDataFlags , bitNo:=5) THEN
errLoadBootData:=TRUE;
strBootDataState:= 'Error Load PersistentData ';
END_IF
138 09.07.2007
Write Persistent Data on demand

With the fuction block


„WritePersistentData“
(TcPlcUtilities.Lib) it is possible to
initiate the writing of the Persistent
Data. TcPlcUtilities.Lib
The writing takes place at the Shut
Down of the PLC (standard).
While the function block is busy, the
access to the Persistent Variable is
not allowed!

139 09.07.2007
Write Persitent Data on demand, Example:

IF ReqWritePersistent THEN
fbWritePersistent(NETID:='' , PORT:=801 , START:=TRUE , TMOUT:=T#500ms );
IF fbWritePersistent.ERR THEN
fbWritePersistent(START:=FALSE );
ReqWritePersistent:=FALSE; PLC Runtime
ELSIF NOT fbWritePersistent.BUSY THEN
fbWritePersistent(START:=FALSE );
ReqWritePersistent:=FALSE;
END_IF Further start after edge
END_IF

140 09.07.2007
Internal Libraries

Unnecessary elements:
All tasks will be deleted in the task Create and test project
configuration.
All POUs, which are not to belong
to thecontents of a library, are
removed.
All global variables will be Delete unnecessary
deleted. elements of a library
Valid: global constants, self
defined data types.

Save as internal *.Lib

141 09.07.2007

También podría gustarte