beckhoff twincat thewin dows controland automation technology · beckhoff twincat thewin dows...
TRANSCRIPT
09.07.20071
Beckhoff TwinCAT The Windows Control and Automation Technology
Beckhoff Industrial PC
Beckhoff Drive Technology
Beckhoff Lightbus
Beckhoff TwinCAT
Beckhoff Bus Terminal
Beckhoff Fieldbus Box
Beckhoff Embedded PC
Beckhoff PC Fieldbus Cards, Switches
Beckhoff EtherCAT
09.07.20072
CPU
NC
E/A
Evolución en control
Hardware ���� SoftwareMechanic ���� ElectronicSlots/CPUs ����Tasks
par. Connect ���� FieldbusComm. ���� direct Access
IPC
Prog.Tool
HMI
IPC
Komm.
Fieldbuses
Prog.Tool
HMI
Router
PLC 1
NC
E/A
Mapping
..
RT-Kernel
PLC 2
Control basado en PC
09.07.20073
Qué es TwinCAT ?
TwinCAT es un paquete para la automatizaciónque incluye el software de desarrolloy 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.
09.07.20074
Potencia
BCxxxxBXxxxx
CX1000
PC
Coste
TwinCA
T: Para
todas l
as plata
formas
TwinCA
T: I/O, P
LC, NC
PTP, N
C I
Posibles soluciones
09.07.20075
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
TwinCAT: Arquitectura
09.07.20076
Windows NT, 2000, XP
Fieldbus Card Drivers
ADS Router
I/OServer
I/O Mapping
PLCServerI/O
NCServer
otheri.e. CAM
SysMan
ADS
PLC Control
Diagnosei.e. Scope
UserHMI
UserHMI
OPCOCX/Dll TCP/IP
Kernelmode
Userm
ode
ADSADS ADS OPC
ADS ADS ADS ADS
I/O I/O
TwinCAT SystemRealtim
eServer
Plataforma PC
09.07.20077
• 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
TwinCAT real-time
09.07.20078
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
TwinCAT on a CX1000 platform
09.07.20079
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
09.07.200710
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
09.07.200711
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
II OO
InputInput OutputOutput
II OO II OO
TwinCAT process image
field bus 1 field bus 2 field bus 3
Mapping
09.07.200712
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)
09.07.200713
Estadística tiempos de ejecución
1500
3714
54 24 50
500
1000
1500
2000
2500
3000
3500
4000
Conv.PLC
BC9000 CX1000 PIII 850MHz
P4 2,8GHz
Test 1
Test 2
Test 3
Test 1: BOOL, INT, WORDTest 2: BOOL, INT, WORD,
DWORD, DINTTest 3: BOOL, INT, WORD,
DWORD, DINT, REAL
Tiempode ejecución
[us/1000 Líneasde Código]
09.07.200714
ADS over TCP/IP ADS over TCP/IP
ADS over TCP/IP
ADS over TCP/IP
ADS over Field bus
Conectividad
�Fácil de usar: �ADS (Automation Device Specification)
�OPC (OLE for Process Control)
09.07.200715
Conectividad
PLC HMI
LAN (TCP/IP)
Field-bus
PLCRT
PC
Field-bus
PLCRT
PC
Profibus Bus CouplerBK3100
PLC HMI
Profibus ControllerBX3100
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
HMI
CX1000
09.07.200718
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, TwinCATSystem Service incorpora un icono en la barra de herramientas. El color indica el estado de Twincat.
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.
.
TwinCAT parado TwinCAT arrancando.
TwinCAT funcionando.
TwinCAT Configuración
09.07.200719
TwinCAT System Service
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
The event display es un programa que monitoriza los eventos del sistema. El servicio de eventos
arranque de forma automática.
09.07.200720
Multitarea
TwinCAT contiene más de 62 tareas diferentes. Se puede utilizar la configuración de tareas por defecto o se puede personalizar.
09.07.200721
Gestión de tareas
Operacion en Tiempo real de los clásicos PLC.
Lectura Entradas
Escritura Salidas
Progama PLC
Ciclo PLC Ciclo PLC t
tPLC cycle PLC cycle
Win NT & HMI Interface
Operación en tiempo real de un soft PLC (1 task) en un PC con windows NT.
09.07.200722
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 unaseñal analógica (posición actual) con un PC debe tener una distancia constanteentre 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ónpueden 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
09.07.200723
Real time operation
� Las operaciones en tiempo real serán ejecutadasen intervalos determinísticos. El tiempo base de estos intervalos se puede escoger (1000µs ... 50µs).Por defecto 1ms.
� En cada comienzo del Tiempo Base se ejecutan lasdiferentes tareas en función de las prioridades.
� 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
- 15µs +15µs
09.07.200724
Tiempo Real
Longitud del tiempo base
El tiempo de procesador puede ser asignado al Kernel de Twincat por medio de la barra de desplazamiento. Si el tiempo 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.
09.07.200725
Operación en Tiempo Real
� Tarea PLC cíclica de 10ms (por ejemplo)
10ms 20ms 30ms
40ms0ms� Comportamiento de Twincat: Tiempo Base 1ms
0ms 1ms
80%
TwinCAT W
2ms
80%
TC W
3ms
80%
W
PLC PLC
Time slice forWindows
Time slice for TwinCAT
PLC programcyclic task
Si twincat no necesita todo el tiempo twincat pasa el control al sistemaoperativo hasta el siguiente ciclo
09.07.200726
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
SPS cycle (e.g. 2ms) PLC cycle
t
t
NC cycle (e.g. 1ms) NC cycle NC cycle NC cycle
1ms 2ms 3ms 4ms 5mse.g.:
NC PLC program
Win NT & HMI Interface
1 2 3 41 2 31‘ 2‘
09.07.200727
Funcionamiento en tiempo real
� Cuanto menor sea el Tiempo Base, menor será el tiempo de respuesta de la tarea más prioritaria.
09.07.200729
Creando un proyecto nuevo
Antes de empezar un proyecto debemos responder a las siguientespreguntas:
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)
09.07.200730
Creando un proyecto nuevo
IEC 61131-3 define una tarea com un elemento que controla la ejecución y que permite llamar diferentes programas.
09.07.200731
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
09.07.200732
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.
09.07.200733
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 valordel ú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....
09.07.200734
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
09.07.200735
Crear instancias
FUNCTION_BLOCK AVAR _INPUT
Var_IN :WORD;END_VARVAR _OUTPUT
Var_Out :BYTE;END_VARVAR
Var1 :WORD;Instancia_1: B;
END_VAR
LD Var1CAL Instancia_1
FB
PROGRAM MAINVAR
Instancia_1 :A;Instancia_2 :A;Instancia_3 :B;
END_VAR
CAL Instancia_1CAL Instancia_3
PRG Instancia_1Var_In :WORD; Var_Out :BYTE; Var_1:WORD;Instancia_1
X :REAL; Y :REAL;
Instancia_2Var_In :WORD; Var_Out :BYTE; Var_1:WORD;Instancia_1
X :REAL; Y :REAL;
Instancia_3X :REAL; Y :REAL;
FUNCTION_BLOCK B VAR_INPUT
X :REAL;END_VARVAR _OUTPUT
Y :REAL;END_VAR
�
FB
09.07.200736
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 puederealizar una depuración paso a paso.
• Using: algoritmos, escalados,…
09.07.200737
FC Specials
Desde TwinCAT 2.8: Valor devuelto por la función
Desde TwinCAT 2.8: Valor devuelto por la función
Nombre de la FunctionNombre de la FunctionValor devuelto.
El nombre de la salida esscale.
Scale puede ser usadocomo una variable local variable dentro de la función(Write/Read)
Valor devuelto.
El nombre de la salida esscale.
Scale puede ser usadocomo una variable local variable dentro de la función(Write/Read)
InputsInputs
Variables locales son sólo validas durante la ejecución de la función
Variables locales son sólo validas durante la ejecución de la función
09.07.200738
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
• Espacios
• dos o más“_” seguidos
• mutated vowel
No Permitido
• Special characters (!,“,§,$..)
09.07.200739
Prefijos
b – Boolean r – Real s - String ST_ - Declaración de estructurasst - Instancias de estructurasFB_ - Declaración de Function Blocks fb – Instancias a Function Blocks M_ - Declaration de métodos
bEndschalterLinksrSollPositionsRxDatos
ST_MotorDatos (declaration)stM1Parametro (instance)
FB_Alarma (declaration)fbM1Alarma (instance)
Hungarian notation:Escribir las palabras juntas. La primera letra de cada palabra debe ser mayúscula
Prefijos no estan especificados, pero facilitan la identificación del dato y evitan errores de programación. Sugerencias:
09.07.200740
Palabras reservadas (key words) y comentarios
Palabras reservadas de Twincat son las definidas por el IEC61131-3.Son palabras utilizadas en la sintaxis y no deben ser utlizadaspara otros propósitos.
TRUE, FALSE, AND, FUNCTION,...
La opción Auto format, cambia el formato de las palabras reservadasa capital.
Los comentarios son texto limitadopor los caracteres (* *) .
Excepción: dentro de una variable string
(*Entradas Digitales*)bStart AT%IX0.0:BOOL;(*Maquinaarrancada*)
(*Entradas analogicas*)TemK1 AT%IW10(*Byte 10-11*):WORD;
09.07.200741
Tipos de datos elementales
ANY_Num
ANY_Bit
ANY-Type
0...28-108USINTUnsigned short integer
0...216-1016UINTUnsigned integer
0...232-1032UDINTUnsigned double integer
0..16#FFFF_FFFF
032DWORDBit string(32)
-27...27-108SINTShort integer
-215...215-1016INTInteger
-231...231-1032DINTDouble integer
WORD
BYTE
BOOL
Key word
Bit string(16)
Bit string(8)
Boolean
Tipo
0..16#FFFF016
0..16#FF08
TRUE/FALSEFALSE1
Value rangeInitialData width(Bit)
09.07.200742
Tipos de datos elementales
ANY_String
ANY_Time
ANY_Date
ANY_Real
ANY-Type
TOD#00:00..
TOD#23:59
TOD#00:0032TIME_OF_DAY (TOD)
Time of day
DT#1970-01-01-00:00
32DATE_AND_TIME
(DT)
Date time of day
T#0ms32TIMEtime
‚‘(80+1)*8STRINGSequential characters
DATE (D)
LREAL
REAL
Key word
Date
Long slide point
Slide point
Type
D#1970-01-0132
-2.22*10-308.. 1.798*10308
0.064
-1.18*10-38.. 3.4*1038
0.032
Value rangeInitialData width(Bit)
09.07.200743
String
En la declaración del string se especifica el número de bytes o caracteres que seráreservado para esa variable. (1 byte= 1 caracter). Si no se especifica el tamaño, el tamaño por defecto será de 80 caracteres.
Los string siempre acabancon un valor nulo, por lo queel tamaño ocupado por unavariable tipo string será:
Num Bytes=
Num.Caracteres +1 (nulo)
VAR
strVar :STRING(3);
lenVar: INT;
sizeVar: INT;
END_VAR
VAR
strVar :STRING(3);
lenVar: INT;
sizeVar: INT;
END_VAR
09.07.200744
Caracteres especiales
Los caracteres especiales deben ser precedidos del caracter ‘$’
Page feed$P or $p
Line break$R or $r
Comilla simple$‘
Caracter dollar$$
Line feed$L or $l
New line$N or $n
Tab$T or $t
descriptioncharacter
ACR100 (*Str. Abschluss*)
Special Characters
09.07.200745
ASCII <-> CHR
Si un caracter en un programa debeser convertido a ASCII, dos procedimientos son permitidos :
1. Indirectamente Interpretando losdatos de forma diferente
2. Directamente con una Function Block. ASC y CHR estanincluidas en la libreríaChrAsc.lib.
(Component of the Comlib)
09.07.200746
Declaración de variables de tipos elementales
IMPORTANTE: El nombre de la variable debe indicar el tipo de datos quecontiene
bStellerUntenLinks:BOOL:=TRUE;
Identifier Data type Initial value
La dirección física de la variable no es conocida por el programador (variables no
direccionadas)
09.07.200747
Declaración de variables de tipos elementales
En la decalaración es posible enlazar el nombre de una variable con unaposición de memoria.
bStellerUntenLinks AT%IX0.0:BOOL:=TRUE;
Identificador AT Dirección : Data type ;
%I
%Q
%M
ATIdentifier X
B
W
D
Byte Data type
Byte
Bit
Estas variables apuntana una dirección física de
memoria
A partir de TwinCAT 2.8 el direccionamiento se puede hacer automáticamente.
bStellerUntenLinks AT%I*:BOOL:=TRUE;
09.07.200748
Visibilidad de las variables
Variables locales son visibles en el bloque quefueron declaradas.
Variables globales son visibles en todos losbloques del projecto.
Key words
VAR ..
END_VARVAR_INPUT ..
END_VARVAR_IN_OUT ..
END_VARVAR_OUTPUT ..
END_VAR
Key words
VAR_GLOBAL ..
END_VARVAR_CONFIG ..
END_VAR
09.07.200749
Acceso por medio de variables direccionadas
PROGRAM A
VAR
END_VAR
PROGRAM B
VARlocVar AT%MB2:WORD;END_VAR
LD %MB2
�
�
�
�
�
�
Project Machine
Se puede acceder desde un programa A a otro programa B por medio de variables direccionadas
09.07.200750
Nombres iguales de variables globales y locales
PROGRAM A
VARVar1 :WORD;
END_VAR
LD Var1
�
�
Project Machine
VAR_GLOBALVar1:WORD;
END_VAR
El compilador no genera ningún warning.
09.07.200751
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 cuandoarranca.
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
09.07.200752
Attributos (constantes)
Si necesitas utilizarconstantes matemáticas, parámetros constantes de una máquina,etc. se debeextender VAR_GLOBAL .. END_VAR con la palabrareservada CONSTANT. Esto también es así con variables locales
VAR_GLOBAL CONSTANTpi:REAL:=3.141592654;
END_VAR
PROGRAM AVAR CONSTANT
�
END_VAR
�
�
�
Projekt Maschine
VAR_GLOBAL CONSTANT
�
END_VAR
09.07.200753
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 datoscreados son visibles en todo ell proyecto. Cominenzan con la palabrareservada TYPE y finalizan con END_TYPE.
Tipo padreName Data type Initial value Range
DerivaciónName Data type Initial value
heir
New value
Range
09.07.200754
References (Alias Types) (Variable II)
Es posible utilizar tipos de datos definidos por el usuario para crear un nombre alternativo para una variable,constante o function block.
Se comienzan con la palabrareservadaTYPE y finalizan conEND_TYPE.
Syntaxis:
TYPE
<Identificador>:<tipo de datos>;
END_TYPE
Ejemplo: Ads_Net_ID
TYPE
Net_ID:STRING(23);
END_TYPE
09.07.200755
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.
09.07.200756
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
VARWochenTag:DiaSemana;
END_VAR
WochenTag:=3;
09.07.200757
Declaración de estructuras
Pers_Data
Name: Firstname:
Age: Address:
form
TYPE Pers_Data :STRUCT
Name: STRING(25);Firstname: STRING(25);Age:USINT; Address: STRING(55);
END_STRUCTEND_TYPE
Identifier for the new data type
Identifier : parents data type
■
■
■
Las estructuras son tipos de datosimportantes para representar la información de un objeto de nuestraplanta.
Las estructuras pueden ser pasadasdirectamente a FunctionBlocks
09.07.200758
Instancias de estructuras
P1
P3
K2
VARP1, P3 : Pers_Data;
END_VARVAR_OUTPUT
K2 : Pers_Data; END_VAR
VAR_INPUTEmployees: Pers_Data;
END_VAR
P1Name:=‚Müller‘Firstname:=‚Peter‘Age:=32Address:=‚Postweg 34‘
P3Name:=‚Koschnik‘Firstname:=‚Heinz‘Age:=37Address:=‚Domplatz 10‘
Name_total:=CONCAT(P3.Firstname, P3.Name)■
■
09.07.200759
Arrays
Todos los elementos de un array deben de ser del mismo tipo, incluido estructuras.
Son posibles 1,2 y 3 dimensiones
VARFeld_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.
VARFeld_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*)
09.07.200760
Ejemplo inicialización array 1 dimensión
1 dimensión
DBTiempo :ARRAY [0..6] OF TIME:= T#1s, T#2s, T#1s, 4(T#0s);
Identificador Field Data type Valor Inicial
NO ES POSIBLE ARRAYS DINÁMICOS
Faktor Wert
T#0s
6543210
T#0sT#0sT#0sT#1sT#2sT#1s
Acceso:
VAR
tiempo : TIME;
END_VAR
Tiempo := DBTiempo[1];
09.07.200761
Ejemplo inicialización array 2 dimensiones
Supportpoint:ARRAY [0..1, 0..6] OF REAL:= 0, 1.7, 2, 4(3.33), 6, 6(1.2);
Identificador Field Data type Valor Inicial
Factor Valor
1.2
3.33
6543210
1.21.21.21.21.261
3.333.333.3321.700
Acceso:
VAR
ejemplo : REAL;
END_VAR
ejemplo := Supportpoint[1 ,0];
09.07.200762
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;
09.07.200763
Ejemplo inicialización array 3 dimensiones
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
Identificador Array Datatype Valor Inicial
Access:
VAR
ejemplo : UINT;
END_VAR
ejemplo :=
Supportpoint[ 2,0,1 ];
0 1 2
3 4 5
0 1 2
0
1
0
10 11 12
13 14 15
0 1 2
0
1
1
20 21 22
23 24 25
0 1 2
0
1
2
09.07.200764
Fuera de rango
Es importante no escribir fuera de una posición del array
VARFeld_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 9Feld_1[i+2] := 120;
�
�
Feld_1[9]; 0
Feld_2[1,2]; 120
09.07.200765
Check Bounds (FUN)
Si escribimos una función con el nombre CheckBounds, podemos verificar si estamos escribiendo fuera de rango.
iMinMax
Limited value
FUNCTION CheckBounds :INT
VAR_INPUT
I,L,U : INT;
END_VAR
IF I< L THEN
CheckBounds := L;
ELSIF I > U THEN
CheckBounds := U;
ELSE
CheckBounds := I;
END_IF
Error
Error
„OK“ case
09.07.200766
Check Bounds (FUN) modo de operación
FUNCTION CheckBounds :INT
VAR_INPUT
I,L,U : INT;
END_VAR
IF I< L THEN
CheckBounds := L;
ELSIF I > U THEN
CheckBounds := U;
ELSE
CheckBounds := I;
END_IF
Program (* User*)VAR arrVar:ARRAY[0..3] OF INT index :INTEND_VAR
index:=2;
arrVar[Checkbounds[2,0,3]:=100;
index:=index+2
arrVar[Checkbounds[4,0,3]:=100;
Llamada automática
FUNCTION CheckBounds :INT
VAR_INPUT
I,L,U : INT;
END_VAR
IF I< L THEN
CheckBounds := L;
ELSIF I > U THEN
CheckBounds := U;ELSE
CheckBounds := I;
END_IF
Checkbounds devuelve 3, el acceso eslimitado al máximo
09.07.200767
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_STRUCTEND_TYPE
Declaración de los arrays :
Positions :ARRAY[0..100] OF DrillPos;
09.07.200768
Combinación de estructuras y arrays
�Accediendo a Drillpos 55:
�Acceso:MoveXAx (*FB Instance*)
(Execute:= TRUE,Position:= Positions[55].XPos ,Velocity:= Positions[55].FeedrateXAcceleration:= Positions[55].AccelerationX,Deceleration:= Positions[55].DeccelerationX,Jerk:= Positions[55].JerkX,Direction:= .........,Axis:= .............,);
09.07.200770
ST Texto estructurado:Order de ejecución de los operadores:
Operación
Paréntesis
Llamada a FunciónExponenciaciónNegaciónComplementarMultiplicarDividirMóduloSumarRestarCompararSon iguales?No es igual a
ANDXOROR
Símbolo
(expresión)Function name (parameter list)EXPT-NOT*/MOD+-<,>,<=,>==
<>ANDXOROR
Orden
Primero
Último
09.07.200771
ST Texto Estructurado: Ejemplos
Instrucción
Asignación :=
Llamada a function block
RETURN
IF
CASE
FOR
WHILE
REPEAT
EXIT
Empty instruction
Ejemplo
PosWert := 10;
Ton1(IN:=Start, PT:=T2s); Output:= Ton1.Q
RETURN;
;
09.07.200772
Instrucción IF
Se utiliza para generar varios bloquesde código que se ejecutan en funciónde las condiciones.
No es posible efectuar un salto haciaatrás en en código.
La instrucción„GOTO“ no estádisponible
Keywords:
IF THEN
ELSIF
ELSE
END_IF
ej.:
09.07.200773
Instrucción IF
Bloque de
instrucciones
Condición
Si
No
IF Condición THEN
Bloque de instrucciones;
END_IF
09.07.200774
Instrucción IF
IF a>b THEN
Bloque de Instrucciones A;
ELSE
Bloque de Instrucciones B;
END_IF Instrucciones A
Condición
Sí
No
Instrucciones B
09.07.200775
Instrucción IF
IF Condición1 THEN
Bloque de instrucción A;
ELSE
IF Condición2 THEN
Bloque de instrucción B;
ELSE
IF Condición3 THEN
Bloque de instrucción C;
ELSE
Bloque de instrucción D;
END_IF
END_IF
END_IF
Bloque Instrucción A
Condición 1
SíNo
Bloque Instrucción B
Condición 2
Sí
No
Condición 3
SíNo
Bloque instrucción C Bloque Instrucción D
09.07.200776
Instrucción IF
IF Condición1 THEN
Bloque instrucciones A;
ELSIF Condición2 THEN
Bloque instrucciones B;
ELSIF Condición3 THEN
Bloque instrucciones C;
ELSE
Bloque instrucciones D;
END_IF
Bloque instrucción A
Condition 1
YesNo
Bloque instrucción B
Condition 2
Yes
No
Condition 3
YesNo
Bloque instrucción C Bloque instrucción D
09.07.200777
Qué se puede utilizar como expresión booleana?
Instrucción IF
IF bVar THEN
.
IF a>b THEN
.
IF LEFT(STR:= strVar, SIZE:=7) = 'TwinCAT' THEN
.
IF Ton1.Q THEN
.
IF Ton1(IN:=bVar, PT:=T#1s ) THEN
Condiciones :
•Variable BOOLEAN
•Comparación
•Llamada a una FC
•Llamada a un dato FB
•No se puede llamar a unaFB!
09.07.200778
Instrucción Case
CASE Criterio Selección OF
1: Instrucción 1
2,4,6: Instrucción 2
7..10 : Instrucción 3
..
ELSE Instrucciones por defecto
END_CASE;
Dos valores iguales no pueden aparecer en el listado
Instrucción 1
Criterio Selección= 1
Yes
No
Instrucción 2
Criterio Selección= 2
Or 4 or 6
Yes
No
Yes
No
Instrucción 3 Instrucción por defecto
Cireterio Selección = 7
Or 8 or 9 or 10?
09.07.200779
CASE Seleccion con valores enteros usando tipos enumerados
Tipo enumerado:
TYPE Schritte :
( INIT:=0, START, AUTOMATIK, ENDE);
END_TYPE
CASE State OF
INIT: instrucciones;(*State=0*)
START: instrucciones;(*State=1*)
AUTOMATIK: instrucciones;(*State=2*)
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
09.07.200780
CASE Selección con constantes
CASE State OF
Step1: instrucciones;(*State=0*)
Step2: instrucciones;(*State=1*)
Step3..Step4: instrucciones;(*State=2 oder 3*)
END_CASE
VAR CONSTANT
Step1 : INT:= 0;
Step2 : INT:= 1;
Step3 : INT:= 2;
Step4 : INT:= 3;
END_VAR
VAR
State:INT;
END_VAR
09.07.200781
CASE ejemplo máquina de estados
TYPE Steps :
( INIT:=0, START, AUTOMATIC, END);
END_TYPE
CASE State OF
INIT: Q0:=TRUE;
IF Transición THEN state := START; END_IF
START: Q1:=TRUE;
IF Transición THEN state := AUTOMATIC; END_IF
AUTOMATIC: Q2:=TRUE;
IF Transición THEN state := END; END_IF
END: Q3:=TRUE;
IF Transición THEN state := INIT; END_IF
END_CASE
Instruction para las acciones
dentro del paso
Instruction para las acciones
dentro del paso
transicionestransiciones
PasoPaso
09.07.200782
Bucles
Se utilizan para evitar tener que repetirun listado de instrucciones común. El número de iteraciones es conocido en runtime
Desvantajas de los bucles:Si se produce un error de programación la iteración puede ser infinita.
Si un bucle infinito es ejecutado estono implica un aumento de %CPU destinado a Twincat.Tareas de mayor prioridad interrumpiran a la tareadonde se encuentra el bucle infinito. Tareas de prioridad inferior a la tareadel bucle no serán ejecutadas.
1ms 2ms 3ms 4ms 5mse.g.:
1 2 3 41 1‘‘ 1‘1‘ 1‘‘‘
Forced switch toWin NT
Begin of a new time slice
09.07.200783
Bucles (Visión general)
NoPost repelBOOLREPEAT
NoPre repelBOOLWHILE
YesPre repelSINT/ INT /
DINT
FOR
Núm de ciclos fijosWork flowExpresión
Todos los bucles pueden ser finalizados con una instrucción EXIT, sin importar la condición de salida del bucle.
09.07.200784
Bucle FOR
FOR i:=1 TO 12 BY 2 DO
Field[i]:=i*2;(*instrucción*)
END_FOR
ciclo nAl principio del bucle , la variable I es definida con un valor inicial(ver ejemplo).La variable es incrementada o decrementada en cada ciclodependiendo del valor definidopor la palabra reservada BY.
Si i excede el valor final (valordespués de TO) se finaliza el bucle.
Start i:=Valor inicial
Instrucciones
ciclo n
i>Valor final
Sí
No
I:= i+ - valor TO
09.07.200785
Bucle WHILE
i:=0;WHILE i<100 DOField[i]:=i*2;(*instrucciones*)i:=i+1;
END_WHILE
Expressión
booleana
Bloque de intruccionesI:= i+ paso
ciclo n
ciclo n
El bloque de instrucciones dentro de un bucle WHILE se ejecutan siempre y cuando la condición se cumpla.
La condición de salida contienevariables que pueden ser cambiadasdentro del bloque de instrucciones del bucleSi la expresión es false al principio el bloque de intrucciones dentro del bucle no es ejecutado.
Sí No
09.07.200786
Bucle REPEAT
i:=0;
REPEATField[i]:=i*2;(*Instrucciones*)i:=i+1;
UNTIL i>100
END_REPEAT
Las instrucciones dentro de un bucle REPEAT son procesadashasta que la condición lógica dentrode la cláusula UNTIL no se cumple.
El bloque de instrucciones esejecutado como mínimo una vez.
Expresión
booleana
Bloque de intrucciones
I:= i+ paso
ciclo n
Ciclo n
Sí No
09.07.200787
Llamadas a FB‘s en ST
TON1 (IN:= NOT TON1.Q , PT:=T#1s );
Q0:= TON1.Q
VAR
TON1:TON;
END_VAR
TON1(IN:= NOT TON1.Q, PT:=T#1s , Q=>Q0 );
desde TwinCAT 2.8 :
09.07.200788
Explicación llamadas a FB en ST
Crear una instancia de un FB
TON1 (IN:= NOT TON1.Q , PT:=T#1s );
VAR
TON1:TON;
END_VAR
Q0:= TON1.Q
Llamar a una instancia por sunombre
Parámetros de entrada
Leer salida
Q0:=TON1(IN:= NOT TON1.Q, PT:=T#1s);
No es posible: las FB pueden tenervarias salidas
09.07.200789
Llamadas a FB en ST (alternativo)
TON1.IN:= NOT TON1.Q ,
TON1. PT:=T#1s;
TON1();
Q0:= TON1.Q
VAR
TON1:TON;
END_VAR
09.07.200790
Llamada a FB (alternativo)
TON1.IN:= NOT TON1.Q ;
TON1. PT:=T#1s;
TON1();
Q0:= TON1.Q;
VAR
TON1:TON;
END_VAR
Declaración
Transfiere sólo el parámetrode entrada.
ESTO NO ES UNA LLAMADA A UNA FB!!!!!
Leer salida
FB CALL
09.07.200791
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
);
09.07.200792
Llamadas a FB‘s en ST
Result := Scale (x:=input, xug:=0.0, xog:=32767.0, yug:=0.0,yog:=100.0);
(* equal:*)
Result:=Scale (
x:= input,
xug:= 0.0,
xog:= 32767.0,
yug:= 0.0,
yog:= 100.0
);
Resultado Llamada Parámetros de entrada
09.07.200794
SFC Sequential Function Chart
•Sólo un estado es activo al mismo tiempo
•La condición para canviarentre un estado y otro se denomina transición.
• En la acción se tiene queprogramar lo que se debeefectuar en cada estado.
Step
Transition
ActionN
Qualifier
Following step
Transition
ActionN
Qualifier
Action,
Puede ser escrita en StructuredText, Instruction list, Ladder
Diagram, Function Block Diagram y en Sequential Function Chart .
09.07.200795
Estados
• Se puede ver si un estado estáactivo con la variable NombreEstado.X.
• Durante la ejecución de los estados, la duración del mismose puede saber por medio de la variable NombreEstado.T .
• Ambos datos T y X són camposde una estructura de datos quese crea automáticamente al insertar el estado.
• NombreEstado.X yNombreEstado.T son variables que sólo son de lectura.
Inicio
Transición
AcciónN
„Normal“Step“
Estado1
Transición
AcciónN
Paso inicialactivo al comienzo
09.07.200796
Acciones
Estado1
Transición
bOutputN
Acción,puede ser una variable de tipo
BOOL.
La variable es true si se activa el paso y FALSE cuando se abandona
el estado
Transición
Estado1
Transición
AcciónN
Las acciones pueden ser programadas en
-> Structured Text,
-> Instruction List,
-> Ladder Diagram,
-> Function block diagram, CFC/FBD
-> Sequential Function Chart
Transición
09.07.200797
Acciones, se permiten varias por estado
Estado1
Transición
STActionP
bOutputN
LDActionN
FBDActionR
09.07.200798
Estados/ramas alternativas
• Sólo una rama puedeactivarse.
• Debido a que ambas ramasson importantes se debeintroducir una transición antes de los estados.
EstadoA
Inicial
Transition
AcciónN
Transición
AcciónN
Transición
Transición
AcciónNEstadoB
09.07.200799
Estados / ramas alternativas
•Las ramas pueden ser asimétricas
Estado A
Inicio
Transición
AcciónN
Transición
AcciónN
Transición
Transición
AcciónNEstado B
Transición
AcciónNEstado C
09.07.2007100
Estados / ramas alternativas
•Las ramas pueden saltarse
Estado A
Inicial
Transición
AcciónN
Transición
AccciónN Transición
09.07.2007101
Estados / Ramas alternativas
•Dos ramas son procesadassimultáneamente.
Estado A
Inicial
Transition
AcciónN
Transición
AcciónN acciónNEstado B
Transición en el comienzo de las
ramas simultáneas
Transición en el final
Línea doble, paraindicar la rama
paralela
09.07.2007102
Estados / Ramas alternativas
•Las ramas simultáneas puedenser asimétricas
Estado A
Transición
Transición
AcciónN
AcciónNEstado C
AcciónNEstado B
Transición
09.07.2007103
Transición
Una transición debe retornar un „BOOL“. Posibilidades:
• Variable BOOLEANA
• Instrucción ST
• Transición programada
Inicio
bVariable
AcciónN
BOOLEANVARIABLE
Estado 1
A > B
AcciónN
Instrucción ST.
El resultado debe ser BOOLEANO.
Nota: Si la instrucción es demasiado larga se
visualizará sólo una parte.
09.07.2007104
Posible: FBD, LD, IL, ST.
Limitaciones: una red,una secuencia de instrucciones, no llamadas a FB.
Transiciones
Transiciones programadas
InicioAcciónN
Estado 1AcciónN
GTANDA
B
INPUT0
001Comentario
A > B
Pulsar para editar el código
„NADA CONECTADO“
El resultado debe ser de tipoBOOLEANO
Con esta marcase indicar que A>B es un comentario
09.07.2007105
Ú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.
ANDrelease
Step1.X
001
En el último ciclo la variable Estado.X = FALSE.
Estado1
Go on
AcciónN
Estado siguiente
Transition
AcciónN Output
Step.X
Action processingt
t
1
0
1
0
1 Cycle
09.07.2007106
Último scan del estado
Cuidado: Algunas veces este scan final puede provocar resultadosno deseados
Estado1
TRUE
AcciónN
Comportamiento:
Counter := Counter +1;
(*El valor de Counter es 2*)
Step.X
Action processingt
t
1
0
1
0
1 cycle1 cycle
Counter:= Counter +1;
Counter:= Counter +1;
Solución: Utilizar la variable de estadopara saltarse el último scan:
IF Schritt.X THEN
Counter := Counter +1;
END_IF
(*Counter vale 2*)
09.07.2007107
Parámetros
Se ejecuta la acción cuando mientras está activo el estado.
N: Non StoredEstado
TRUE
AcciónN Step.X
Action processingt
t
1
0
1
0
1 cycle
N: Non Stored
Correspondencia en FBD
Step.X
001
Action processing
09.07.2007108
Parámetros
La acción se ejecuta siempre hasta que se resetea.
S: SETEstado
TRUE
AccíónS
Correspondencia FBD
Step.X
Action processingt
t
1
0
1
0
1 cycle
Step.X
001
Action processing
SRS
R
09.07.2007109
Parámetros
Se para de ejecutar la acción que se había iniciado con el S.
R: RESETEstado
TRUE
AcciónR
Correspondencia en FBD
Step.X
001
Action processing
SRS
R
Step.X
Action processingt
t
1
0
1
0
09.07.2007110
Parámetros
Se ejecuta la acción después de un cierto tiempo hasta que se termina el estado
D: DELAY
Correspondencia en FBD
Step.X
Action processingt
t
1
0
1
0
Delay
Step
TRUE
ActionD T#1s
Step.X
001
Action processingTON
IN
PT ET
Q
T#1s
09.07.2007111
Qualifier
Controls the action processing after activating a step
L: LIMITEDStep
TRUE
Action
Combination in FBD
Step.X
Action processingt
t
1
0
1
0
LIMITED
L T#1s
Step.X
Action processingt
t
1
0
1
0
Limit
Step.X
001Action processing
TONIN
PT ET
Q
T#1s
AND
09.07.2007112
Qualifier
Controls the action processing after activating a step
P: PULSE
Step
TRUE
Action
Combination in FBD
P Step.X
Action processingt
t
1
0
1
0
1 cycle 1 cycle
Step.X
001
Action processing
R_TRIG
Clk Q
ATTENTION: A SECOND FLOW PROCESSES!
09.07.2007113
Qualifier, Combinations
SD: Stored and delayed
DS: Delayed and stored
SL: Stored and time limeted
09.07.2007114
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. *)
09.07.2007115
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.*)
09.07.2007116
Sequential Function Chart step diagnosis
SFCQuitError: BOOL;
(*Execution of the SFC diagram is stopped for as long as this booleanvariable 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 booleanvariable has the value TRUE.*)
SFCTrans: BOOL;
(*This boolean variable takes on the value TRUE when a transition is actuated. .*)
09.07.2007117
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 timeouthas occurred. *)
09.07.2007118
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.*)
09.07.2007119
Sequential Function Chart step diagnosis (from 2.8)
SFCErrorAnalyzation: STRING;
(*This variable, of type STRING, provides the transition expression as well as everyvariable 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 stringseparates 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
09.07.2007121
• set step attributes for the step to be observed
Sequential Function Chart process diagnosis
09.07.2007123
Sequential Function Chart Tipmode
• insert implicit variable:
• effect:SFCTipSFCTipMode Transition
FALSETRUE TRUE
effect
Process stays in the current step
TRUETRUE TRUE Change to next step
TRUETRUE FALSE Change to next step
TRUEFALSE FALSE Process stays in the current step
FALSEFALSE TRUE Change to next step
09.07.2007124
Actions also in other IEC languages possible! (POU type : PRG, FB)
Call action
Action step2
Action step1
„Mainprogram“
09.07.2007125
Overview
Contents
Part 1
IEC 61131-3 Overview
Software model
Identifier
Elementary data types
Variables classes
Block types
TwinCAT System Service
Timing
Part 2
Variables II Structs, Enums
Variables II Arrays
Checkbounds
Structured text
Part 3Sequential Function Chart
Step diagnosis
Appendix
Bootprojects, Data remanence
Checker functions
Example Step by Step
09.07.2007126
Remanent Flags Variables Attributes
These variables maintain their value, even after a power failure. When theprogram 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
09.07.2007127
Retain Persistent
Reset allRebuild all, ResetTo delete
To store
unlocated, located (%M)
Retain
Unlocated, located (%I, %Q, %M)Possible for
Persistent
09.07.2007128
Boot project
Requirement :
It should be possible to automate the loading and the starting of the PLC
project after switching on the computer.
The PLC can start independent from the
user log on!
Power ON
Start NT
Start TwinCAT
Loading the boot project into the Run-Time
Start PLC
1
2
3
4
Log on
09.07.2007130
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.
09.07.2007131
3&4
Enabling for loading the boot project for the run time system 1.
Number of run time systems
Enabling for loading and saving the RETAIN data for the run
time 1.
09.07.2007132
Sourcecode download
1.Goto Project/Options and press
the left mouse button.
2.A Window will open
3.Choose the Point Sourcedownload
09.07.2007133
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
09.07.2007134
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
09.07.2007135
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.
09.07.2007136
Were retain and persitent data loaded successfully?
The structure component shows if the
persistent/retain data were loaded successfully.
In order to be able to view this data structure, the "PlcSystem.lib"
library must be linked in.
(Global variable)
09.07.2007137
Meaning of the flags
Reserved7
Reserved6
PERSISTENT variables: INVALID (the back-up copy was loaded, since no valid data was present)
5
PERSISTENT variables: LOADED (without error)4
Reserved3
RETAIN variables: REQUESTED (RETAIN variables should be loaded, a setting in TwinCAT System Control)2
RETAIN variables: INVALID (the back-up copy was loaded, since no valid data was present)
1
RETAIN variables: LOADED (without error)0
DescriptionBit number
09.07.2007138
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
09.07.2007139
Write Persistent Data on demand
With the fuction block„WritePersistentData“
(TcPlcUtilities.Lib) it is possible to initiate the writing of the Persistent
Data.
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!
TcPlcUtilities.Lib
09.07.2007140
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;
ELSIF NOT fbWritePersistent.BUSY THEN
fbWritePersistent(START:=FALSE );
ReqWritePersistent:=FALSE;END_IF
END_IF
PLC Runtime
Further start after edge
09.07.2007141
Internal Libraries
Create and test project
Delete unnecessary elements of a library
Unnecessary elements:All tasks will be deleted in the task
configuration.
All POUs, which are not to belongto thecontents of a library, are
removed.
All global variables will be deleted.
Valid: global constants, self defined data types.
Save as internal *.Lib