# CODESYS

CODESYS (Acrônimo do inglês Controller Development System, também estilizado como CoDeSys) é um ambiente de desenvolvimento para controladores programáveis de acordo com a norma IEC 61131-3.

## Introdução

O CODESYS é desenvolvido e comercializado pela 3S-Smart Software Solutions GmbH, uma empresa alemã situada na cidade de Kempten, na Baviera. A versão 1.0 foi lançada em 1994 e atualmente encontra-se na versão 3.5. Sua interface de desenvolvimento é gratuita e não é orientado à um tipo específico de hardware de controlador programável ou sistema embarcado, inclusive não dependendo do fabricante do hardware. É amplamente utilizado na indústria para diversos tipos de automações, variando de lógicas simples à robótica, controle de movimento e CNC.

## Engenharia

Todas as cinco linguagens de programação definidas na IEC 61131-3 estão disponíveis na interface de desenvolvimento do CODESYS e podem ser utilizadas em uma mesma aplicação. São elas:
* ST (Structured Text) Texto Estruturado
* IL (Instruction List) Lista de Instruções
* SFC (Sequential Flow Chart) Diagrama de Fluxo
* LD (Ladder) Linguagem ladder
* FBD (Function Block Diagram) Diagrama de bloco
O CODESYS contêm adicionalmente a linguagem gráfica CFC (do inglês Continuous Function Chart) que não é descrita na IEC 61131-3, que pode ser compreendida como um diagrama de blocos com posicionamento livre, onde o programador pode posicionar os blocos e efetuar a conexões de dados utilizando o mouse com funções do tipo arrastar e soltar.
O compilador interno monta o código de máquina (código binário) a partir da aplicação desenvolvida e transfere ao dispositivo de destino, a partir do qual é possível testar o sistema utilizando os avançados recursos de depuração (debug), como a monitoração de variáveis, breakpoints, osciloscópio e data-logger. Na ausência de um dispositivo também é possível executar a simulação da aplicação.

### Tipos de Variáveis

Abaixo estão as definições de tipos de variáveis utilizadas no CODESYS:
| Tipo | Memória | Limite Mínimo | Limites Máximo | Observações |
| BOOL | 1 bit | False (0) | True (1) | |
| BYTE | 8 bits | 0 | 255 | |
| WORD | 16 bits | 0 | 65535 | |
| DWORD | 32 bits | 0 | 4294967295 | |
| LWORD | 64 bits | 0 | 2$^{64}$-1 | |
| SINT | 8 bits | -128 | 127 | |
| USINT | 8 bits | 0 | 255 | |
| INT | 16 bits | -32768 | 32767 | |
| UINT | 16 bits | 0 | 65535 | |
| DINT | 32 bits | -2147483648 | 2147483647 | |
| UDINT | 32 bits | 0 | 4294967295 | |
| LINT | 64 bits | -2$^{63}$ | 2$^{63}$-1 | |
| ULINT | 64 bits | 0 | 2$^{64}$-1 | |
| REAL | 32 bits | -3.402823e+38 | 3.402823e+38 | |
| LREAL | 64 bits | -1.7976931348623158e+308 | 1.7976931348623158e+308 | |
| TIME | 32 bits | 0 ms | 4294967295 ms | |
| TIME_OF_DAY | 32 bits | 0 (00:00:00AM:000) | 4294967295 (11:59:59 PM:999) | |
| LTIME | 64 bits | 0 | 213503d23h34m33s709ms551us615ns | |
| DATE | 32 bits | 0 (01.01.1970) | 4294967295 (2106-02-07) | |
| DATE_AND_TIME | 32 bits | 0 (1970-01-01, 00:00:00) | 4294967295 (2106-02-07,06:28:15) | |
| STRING | 1 byte por caractere + 1 | | | Codificação ASCII |
| WSTRING | 1 byte por caractere + 1 | | | Codificação Unicode |
A alocação de memória para variáveis do tipo STRING e WSTRING depende da declaração, se não for definida uma dimensão o sistema alocará 80 caracteres para a variável por padrão. A memória alocada sempre será 1 byte por caractere + 1 byte (por exemplo: a declaração STRING[67]ocupará 68 bytes na memória).

## Runtime

Implementando o CODESYS Runtime System em um Sistema embarcado, por exemplo, é possível programa-lo através da Interface de Desenvolvimento CODESYS. O Runtime pode ser implementado em diversos dispositivos atualmente (como o Raspberry Pi), limitando aos recursos disponíveis, porém, diferente da Interface de Desenvolvimento, o Sistema de Runtime não é totalmente gratuito, dependendo de Licenciamento para operar em equipamentos para produção.

## Tecnologia Fieldbus

Vários tipos de redes de comunicação industrial, também conhecidos como bus de campo, podem ser utilizadas, como PROFIBUS, EtherCAT, CANopen, PROFINET e Ethernet/IP que podem depender do hardware do sistema. Alguns protocolos podem ser encontrados em alguns sistemas no formato de bibliotecas adicionais e também podem depender ou não de hardware específico.

## Visualização

Um sistema integrado ao ambiente de desenvolvimento do código permite a criação de interfaces manipuláveis utilizando botões, textos dentre outros elementos dinâmicos que podem ser conectados às variáveis do projeto. Estas interfaces gráficas podem ser usadas para facilitar o comissionamento e testes de equipamentos tanto durante o desenvolvimento aliado, por exemplo, à simulação, ou refletindo o estado real do equipamento conectado.
Existe a possibilidade de utilizar estes recursos em dispositivos de visualização dedicados, permitindo o uso como terminal de operação dos equipamentos após a fase de desenvolvimento.

## SoftMotion

Trata-se de uma solução modular para controle de movimentos complexos com um controlador programável que atenda a IEC 61131-3, está completamente integrado ao ambiente do CODESYS, fornecendo:
* Editor de plano de movimento (CAM ou Código CNC baseado na norma DIN 66025.
* Bibliotecas para decodificação, interpolação, Transformadas cinemáticas, e controle de movimento de acordo com as diretivas da PLCopen MotionControl.
É possível obter bibliotecas completas para controle de robôs paralelos, ou tipo SCARA, por exemplo, sem necessidade de desenvolver a cinemática e permitindo integrar com a lógica do ambiente em um único controlador.

## Segurança - Safety

O CODESYS pode incluir o sistema de segurança no mesmo projeto de controle com categoria SIL2 ou SIL3, dependendo da aplicação e do controlador programável.

## Uso na indústria

Diversos fabricantes de controladores programáveis utilizam a plataforma CODESYS. Em alguns casos a plataforma é personalizada para adicionar recursos próprios dos fabricantes, ou bibliotecas dedicadas.
O CODESYS Device Directory é uma lista com vários equipamentos que utilizam a tecnologia CODESYS, onde os engenheiros e técnicos do setor podem comparar diferentes recursos disponíveis.