141
09.07.2007 1 Beckhoff TwinCAT T he Win dows C ontrol and A utomation T echnology 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

Beckhoff TwinCAT TheWin dows Controland Automation Technology · Beckhoff TwinCAT TheWin dows Controland Automation Technology Beckhoff Industrial PC Beckhoff Drive Technology Beckhoff

Embed Size (px)

Citation preview

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.200716

TwinCAT System Manager

09.07.200717

Visión general Twincat System Manager

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.200728

TwinCAT PLC

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.200769

ST

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

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

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

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.200793

SFC

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.2007120

Sequential Function Chart process diagnosis

Implicit variable

09.07.2007121

• set step attributes for the step to be observed

Sequential Function Chart process diagnosis

09.07.2007122

Online (and per ADS) can be requested

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.2007129

1&2

TwinCAT Auto boot Auto logon with Win NT

1

2

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