A integração do PLC Keyence KV8000 com o módulo de barramento XH16EC oferece uma solução robusta para sistemas de automação industrial de alta performance. A utilização da linguagem Structured Text (ST) permite o desenvolvimento de algoritmos complexos e uma arquitetura de software altamente modular. Este artigo detalha a implementação de um framwork de controle baseado em Function Blocks (FBs) para gerenciar a comunicação de barramento e a lógica de dispositivos.
Arquitetura Modular e Function Blocks
A base do framework reside na encapsulação de funcionalidades específicas em Function Blocks. Essa abordagem orientada a objetos facilita a reutilização de código, testes unitários e manutenção. O sistema é dividido em camadas, onde FBs dedicados gerenciam a aquisição de dados do barramento XH16EC, enquanto outros controlam a lógica de atuação e a interface com o operador.
Aquisição de Dados do Barramento XH16EC
Para abstrair a complexidade dos comandos de baixo nível do barramento, um FB específico é utilizado para mapear e ler os dados dos nós remotos. A estrutura abaixo demonstra uma implementação otimizada para leitura de dados analógicos, utilizando uma máquina de estados interna para garantir a execução assíncrona.
FUNCTION_BLOCK FB_XH16EC_DataAcquisition
VAR_INPUT
i_NodeAddress : UINT; // Endereço do nó no barramento
b_Execute : BOOL; // Sinal de gatilho para leitura
END_VAR
VAR_OUTPUT
r_OutputValue : REAL; // Valor analógico processado
b_Done : BOOL; // Indicador de conclusão
b_Error : BOOL; // Flag de erro de comunicação
END_VAR
VAR
_step : INT; // Máquina de estados interna
_rawData : DINT; // Buffer para dado bruto
END_VAR
// Lógica de execução
IF b_Execute THEN
CASE _step OF
0: // Inicialização
b_Done := FALSE;
b_Error := FALSE;
_step := 10;
10: // Leitura do registrador do barramento (Instrução específica Keyence)
// Simulação de chamada de instrução do sistema
// KV_BusRead(Node := i_NodeAddress, Data => _rawData);
_step := 20;
20: // Processamento e conversão de escala
r_OutputValue := DINT_TO_REAL(_rawData) * 0.01; // Exemplo de escala
b_Done := TRUE;
_step := 0; // Reset
END_CASE;
ELSE
_step := 0;
b_Done := FALSE;
END_IF;
END_FUNCTION_BLOCK
Orquestração no Programa Principal
O programa principal atua como um orquestrador, instenciando os FBs e gerenciando o fluxo de dados entre a camada de hardware e a camada de lógica de controle. A estrutura abaixo ilustra a integração entre a leitura do barramento e o acionamento de um atuador.
PROGRAM PRG_MainControl
VAR
fb_BusReader : FB_XH16EC_DataAcquisition;
fb_MotorDrive : FB_ActuatorControl;
_startCommand : BOOL;
END_VAR
// Leitura do sensor no nó 5 do barramento XH16EC
fb_BusReader(
i_NodeAddress := 5,
b_Execute := _startCommand
);
// Controle do atuador baseado no valor lido
IF fb_BusReader.b_Done THEN
fb_MotorDrive(
r_Setpoint := fb_BusReader.r_OutputValue,
b_Enable := TRUE
);
END_IF;
END_PROGRAM
Integração com IHM (Interface Homem-Máquina)
A comunicação com a IHM é gerenciada através de blocos dedicados que organizam o mapeamento de memória. Em vez de utilizar variáveis individuais, emprega-se estruturas de dados (STRUCT) para agrupar parâmetros, otimizando a troca de dados e facilitando o mapeamento em protocolos de rede.
TYPE ST_HMI_Parameters :
STRUCT
r_TargetSpeed : REAL;
r_Temperature : REAL;
i_OperationMode : INT;
b_SystemReset : BOOL;
END_STRUCT
END_TYPE
FUNCTION_BLOCK FB_HMI_DataExchange
VAR_INPUT
st_HMI_Write : ST_HMI_Parameters; // Dados recebidos da IHM
END_VAR
VAR_OUTPUT
st_HMI_Read : ST_HMI_Parameters; // Dados enviados para IHM
END_VAR
// Lógica de sincronização e validação de dados
st_HMI_Read.r_TargetSpeed := st_HMI_Write.r_TargetSpeed;
// Validação de limites operacionais
IF st_HMI_Write.r_Temperature > 85.0 THEN
st_HMI_Read.i_OperationMode := 99; // Modo de falha térmica
ELSE
st_HMI_Read.i_OperationMode := st_HMI_Write.i_OperationMode;
END_IF;
END_FUNCTION_BLOCK