Neste tutorial estão descritos orientações e procedimentos para visualização e configuração do Horário do CLP via supervisório SCADA. Nesse exemplo, vamos utilizar o software supervisório BluePlant para configurar o RTC de um XP325.
Componentes
Software: MasterTool IEC XE v3.22; BluePlant 2018.1.37
CLP: XP325
Seções do Tutorial
1. ARQUITETURA
2. Configurações no Xpress
2.1. Leitura das Variáveis System_Time
2.2. Conversão das Variáveis
2.3. Mapeamento Modbus
2.4. Bloco SetDateAndTime para configurar hora e data do CLP
2.5. Lógica Criada para escrita na variável DATEANDTIME
3. Configurações no BluePlant
3.1. Tags criadas no BluePlant
3.2. Comunicação com Nexto
3.3. Escrever em tag DATETIME com RTC
3.4. Organização dos Displays
3.5. Script de Escrita no RTC
1. ARQUITETURA
Nessa arquitetura o XP325 (Server) e o computador que o BluePlant Scada (Client) está rodando estão conectados pelo meio físico Ethernet e comunicando pelo protocolo Modbus TCP/IP.
2. Configurações no Xpress
Para fazer a sincronização ou edição do relógio dos CLPs da Série Nexto e Xpress através de um supervisório SCADA é necessário comunicar separadamente cada variável da estrutura DATE_AND_TIME por algum protocolo de comunicação. No nosso caso essa comunicação será via Modbus TCP/IP.
Obs.: Ao final deste tutorial, nos anexos, haverá os programas desenvolvidos no MasterTool e no Blueplant.
2.1. Leitura das Variáveis System_Time
No MasterTool existe uma variável chamada System_Time, do tipo EXTENDED_DATE_AND_TIME, que é uma estrutura de variáveis relativas ao RTC.
Essa estrutura está declarada e pode ser acessada na lista de variáveis globais contida no caminho: Application (1) -> System GVLs (2) -> Special Variables (3).
Como pode-se ver na imagem a seguir, em System_Time estão contidas outras variáveis respectivas a cada componente do horário e data do RTC do CLP, sendo: Dia do Mês, Hora, Minuto, Mês, Segundo, Milissegundo, Ano.
Obs.: Essas variáveis são apenas de leitura. Não é possível escrever valores para editar o RTC por meio dessa estrutura. O procedimento para mudar a hora no RTC será mostrado mais adiante no tutorial.
Então, o objetivo deste tutorial é comunicar separadamente cada componente de System_Time para o supervisório, já que não é possível comunicar uma estrutura DateTime por Modbus.
Assim, vemos que algumas variáveis, por exemplo, dia e hora, são do tipo BYTE. Para comunicar por Modbus devemos converter essas variáveis para tipo INT ou WORD.
Desse modo, nesse exemplo criou-se uma lista de variáveis globais (1) onde foram declaradas variáveis do tipo INT (2) para cada objeto da estrutura System_Time.
Agora, vamos converter as variáveis de System_Time e mover para as criadas na GVL RTC_Modbus.
2.2. Conversão das Variáveis
A conversão foi realizada em UserPrg utilizando a função BYTE_TO_INT para as variáveis tipo BYTE e WORD_TO_INT para as variáveis tipo WORD.
2.3. Mapeamento Modbus
(1) Acrescentamos uma instância Modbus Server.
(2) Inserimos as variáveis declaradas na GVL RTC_Modbus.
(3) Como as variáveis são do tipo INT, o tipo do dado será Holding Register.
(4) Endereço inicial do dado deve ser informado para cada variável.
(5) Lista dos Endereços Modbus que vamos requisitar em nosso SCADA.
(6) Essas variáveis são do tipo BOOL e foram declaradas para a criação da lógica de "setar" horário no CLP.
Como as variáveis do tipo Holding Register são de escrita e leitura, desse modo o SCADA pode ler as variáveis para verificar o horário no CLP e também pode executar um comando de escrita e escrever nas mesmas variáveis.
2.4. Bloco SetDateAndTime para configurar hora e data do CLP
Para configuração da hora e data do RTC do CLP via lógica é necessário a utilização de um bloco funcional, o SetDateAndTime.
Quando ocorrer uma borda de subida na entrada REQUEST, o bloco funcional irá escrever o novo valor DATEANDTIME no relógio. Caso a escrita seja realizada com sucesso, a saída DONE será igual a TRUE. Caso contrário, a saída ERROR será igual a TRUE e o erro será apresentado na variável STATUS.
2.5. Lógica Criada para escrita na variável DATEANDTIME
O Bloco SetDateAndTime precisa de uma variável de entrada do tipo EXTENDED_DATE_AND_TIME que será escrita no RTC. Portanto, declaramos uma variável chamada ‘rtcWrite’ do tipo EXTENDED_DATE_AND_TIME na GVL RTC_Modbus (verificar figura da seção 2.1.).
Repare que os valores recebidos em ‘rtcWrite’ são das mesmas variáveis que estão comunicando com o SCADA. Assim, devemos criar uma lógica que deixa de escrever os valores do RTC nas variáveis comunicadas quando o SCADA escreve um valor para edição do RTC. Nesse mesmo momento deve ser realizado o pulso na entrada REQUEST do bloco SetDateAndTime para que seja realizada a ação de alteração do RTC.
(1) Criado um comando IF onde o horário do CLP, contido em System_Time, somente é escrito nas variáveis INT quando a variável ‘En_Edit_Data’ está com valor FALSE. Assim, como En_Edit_Data é comunicada com o SCADA, ele que define essa condição.
(2) Escritas dos valores das variáveis INT que estão comunicando com o SCADA na variável ‘rtcWrite’ que é a entrada do bloco SetDateAndTime.
(3) Bloco SetDateAndTime.
Portanto, quando ‘En_Edit_Data’ = TRUE então o SCADA pode escrever nas variáveis INT e dar comando de REQUEST para "setar" uma data no CLP.
3. Configurações no BluePlant
A ideia principal é criar uma tela onde possa ser escrita a hora do BluePlant ou inserida uma hora no CLP. A tela terá essa configuração.
(1) Escrever hora e data do supervisório no CLP.
(2) Escreve hora e data inserida na Box no CLP.
(3) Pode ser inserido o valor da hora desejado.
3.1. Tags criadas no BluePlant
(1) e (2) variáveis booleanas comunicadas com Nexto.
(3) Variável do Template rtc_Nexto, será utilizada para escrever nas variáveis INT comunicadas.
(4) Variável do Template rtc_Nexto, sua estrutura será mapeada em points para receber os valores do RTC do Nexto.
(5) e (6) variáveis do tipo DateTime usadas na lógica do BluePlant.
Template rtc_Nexto:
3.2. Comunicação com Nexto
A comunicação com Nexto será Modbus, então vamos declarar as "Sub-tags" da tag ‘rtc_INT’ nos points do Device.
As tags booleanas (‘request_var’ e ‘En_Edit_Data’) também serão declaradas nos points do Device.
Obs.: Repare que todas as tags são do tipo ReadWrite (leitura e escrita).
3.3. Escrever em tag DATETIME com RTC
Vamos criar uma tarefa no BluePlant que escreve as variáveis comunicadas do tipo INT em uma variável tipo DATETIME do BluePlant.
(1) A tarefa (Task) foi adicionada em Scripts, com o nome de RTC_NEXTO.
(2) A Task é executada a cada segundo, o Trigger acontece quando o segundo do relógio do servidor que está rodando o projeto é alterado.
(3) Domínio Server indica que a Task é executada pelo servidor e independe dos clientes que estejam conectados ao projeto.
O código é inserido em CodeEditor (1) e os valores do Nexto são escritos na tag ‘rtcNexto’.
Repare que estamos utilizando a função DateTimeOffset.Parse(dd/mm/aa hh:mm:ss). A entrada da função espera uma String no formato DateTime "dd/mm/aa hh:mm:ss", desse modo concatenamos os valores comunicados com o Nexto com os caracteres "/" e ":".
3.4. Organização dos Displays
Em nosso exemplo a hora do CLP (1) é mostrada no Header do projeto e o ícone do relógio (2) faz a chamada da PopUp de edição da hora no Nexto.
A seguir nossa PopUp:
3.5. Script de Escrita no RTC
Como as variáveis booleanas ‘En_Edit_Data’ e ‘request_var’, apresentadas na seção 2.5. desse tutorial estão sendo comunicadas com o BluePlant, devem ser usadas na lógica para habilitar a edição e executar o comando de escrita no RTC.
Ambos os botões (setas) da PopUp executam um Script, habilitando inicialmente a tag ‘En_Edit_Data’ e por fim, a tag ‘request_var’. A diferença entre eles é que o botão 1, move a hora do BluePlant para o RTC e o botão 2 move a hora da tag ‘rtcWrite’. Abra a aba CodeBehind da PopUp criada para inserir o código que foi explicado durante o parágrafo e que está sendo demonstrado na imagem abaixo:
Feito isso, devemos desabilitar novamente as tags ‘En_Edit_Data’ e ‘request_var’. É importante salientar que a desabilitação das tags não pode acontecer instantaneamente após executados os comandos, pois como os valores estão sendo comunicados, deve haver um pequeno delay para que o Nexto receba as informações.
Para isso, criamos uma pequena lógica que move as tags ‘En_Edit_Data’ e ‘request_var’ para 0 somente após 5 ciclos de execução na função DisplayIsOpen().
Comentários
0 comentário
Por favor, entre para comentar.