24/01/2017 Página 1 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
WinCC V1X
Uso de “PLC code display” para monitoramento de lógica do PLC
Denilson Pegaia
Objetivo: indicar os passos necessários para configurar o objeto “PLC code display” no WinCC Professional V1X de modo a visualizar a lógica do PLC.
Aviso: Este documento apresenta dicas e exemplos sobre o produto e supõe que o leitor possua conhecimento básico prévio sobre o mesmo. Para informações completas e atualizadas, deve-se consultar o manual do produto. O intuito deste texto é meramente didático, podendo ser alterado pela Siemens sem aviso prévio. Os exemplos devem ser adaptados ao uso final e exaustivamente testados antes de utilizados em projetos reais.
Índice
1. Introdução ... 1
2. Procedimento de configuração. ... 3
3. Referências ... 18
4. Suporte técnico e treinamento ... 19
1. Introdução
A partir da versão 13 do WinCC Professional Runtime, está disponível o objeto “PLC code display”. Este objeto permite que se visualize a lógica do PLC online em aplicações de WinCC Professional Runtime sem a necessidade do software de configuração do PLC (STEP 7).
24/01/2017 Página 2 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline Configuração
Na janela de inspeção é possível fazer algumas configurações básicas, como estilos e cores.
Visualização da lógica do PLC
O objeto “PLC code display” permite que se visualizem lógicas do PLC feitas em linguagem de contatos (LAD) e blocos (FBD). É possível também ver lógicas sequencias (S7-GRAPH). Apenas um conjunto restrito de tipos de instruções pode ser visualizado pelo objeto “PLC code display”. A tabela a seguir indica estas instruções:
Conjunto de instruções que podem ser visualizadas pelo objeto “PLC code display” Em linguagem de contatos (LAD) Em linguagem de blocos (FBD)
Contato normalmente aberto AND
Contato normalmente fechado OR
OU Exclusivo
NOT NOT
SET SET
RESET RESET
Atribuição de valor Atribuição de valor
FLIP FLOP FLIP FLOP
A seleção de que parte da lógica do PLC será vai ser apresentada é determinada através de chamada de funções específicas (via C script):
OpenViewerIECPLByAssigment: ajusta o objeto “PLC code display” para
apresentar a parte da lógica que atribui valor a uma determinada variável, dentro de um bloco de programação.
Se a variável recebe valores em mais de um ponto da lógica, será apresentado a primeira destas atribuições. Através dos botões do objeto é possível ao usuário navegar entre as diferentes atribuições.
OpenViewerIECPLByCall: ajusta o objeto “PLC code display” para apresentar a parte da lógica que atribui valor a uma determinada entrada (pino) na chamada de um bloco.
Notas
O objeto "PLC Code Display" não pode ser usado em grupos ou faceplates.
Após a alteração do programa do PLC é recomendado reiniciar a execução do WinCC runtime.
24/01/2017 Página 3 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
2. Procedimento de configuração.
A configuração é feita nos seguintes passos:
1.1. Inserir o objeto na tela
O objeto “PLC code display” está disponível no menu à direita (“Toolbox”) na divisão “Controls”:
1.2. Criar script
A seleção de que parte da lógica do PLC vai ser apresentada é determinada através de chamada de funções específicas (via C script). Os scripts podem ser criados
diretamente em objetos (por exemplo, no evento “On Click” de um botão), ou criados como funções / sub-rotinas para serem chamados nestes objetos, com passagem de parâmetros.
A criação de scripts como funções / sub-rotinas, tem a vantagem de centralizar o algoritmo num único ponto, facilitando a manutenção e o desenvolvimento do projeto. Nos tópicos seguintes serão mostrados exemplos de funções / sub-rotinas.
1.2.1. Monitorando variável de saída
O objetivo desta sub-rotina é criar um ambiente adequado e padronizado para a chamada da função “OpenViewerIECPLByAssigment”.
Ao criar uma função / sub-rotina, podem-se especificar parâmetros que vão ser passados na chamada. Esta definição é feita na janela de inspeção.
24/01/2017 Página 4 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
Os parâmetros definidos neste exemplo são:
ScreenName: string que descreve o nome da tela onde está o objeto “PLC code display” a ser endereçado.
ObjectName: string que descreve o nome do objeto “PLC code display” a ser endereçado.
CPUName: string que descreve o nome da CPU a ser acessada pelo objeto “PLC code display”.
BlockName: string que descreve o nome do bloco a ser monitorado pelo objeto “PLC code display”.
OperandName: string que descreve o nome da variável de saída que deverá ser monitorada.
24/01/2017 Página 5 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
Exemplo de script comentado
Comentários iniciais: 0001 /*
0002
0003 This fuction call OpenViewerIECPLByAssignment with correct eviroment / parameters
0004
0005 OpenViewerIECPLByAssignment is used for the LAD and FBD languages by Code Viewer object.
0006 It shows the assignment to an operator (program related to a "coil").
0007 0008 */
0009
Inclusão de definições padrão (default para aplicações com WinCC Professional):
0010 #include "GlobalDefinitions.h" // add standard deffinitions
Definição do cabeçalho: sem variável de retorno (não é necessário), definição de variáveis a serem passadas para a rotina conforme propriedades definidas na janela de inspeção.
0011 void C_OpenCodeViewer_Assig(char* ScreenName, char* ObjectName, char* CPUName, char* BlockName, char* OperandName)
Início da rotina: 0012 {
0013
Inclusão de biblioteca própria para uso do objeto “PLC code display” 0014 // add libraries
0015 #pragma code("KOPAPI.dll") 0016 #include "kopapi.h"
0017 #pragma code()
24/01/2017 Página 6 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
Definição de variáveis internas: no geral, os parâmetros são copiados para variáveis internas por questão de organização. A variável “error” retorna informações de erro na chamada da função. A função “OpenViewerIECPLByAssigment” retorna “1” se houve erro em sua execução (a variável “result” coleta esta informação).
0019 // Variable definitions for fuction call
0020 char* pServerPrefix = NULL;
0021 char* pCPUName = CPUName; // CPU's name to be monitored
0022 char* pContainingBlock = BlockName; // Block's name to be monitored //(OB, FC, DB, Instance DB) 0023 char* pOperand = OperandName; // Operand's name to be monitored
0024 CMN_ERROR error; // Error description
0025
0026 BOOL result; // 0 means that the fuction was executed without errors
0027
Chamada da função OpenViewerIECPLByAssigment: as variávies do cabeçalho são passadas para a função.
0028 // function call
0029 result = OpenViewerIECPLByAssignment(0, // DWFLAGS: Bit array, 0 by default (i.e open TIA in online mode).
KOPAPI_FLAG_TIAPORTAL_SUPPRE SS_PROGRAM_STATUS=0x0004: Open TIA in offline mode.
0030 pServerPrefix, // Server Prefix: NULL
0031 ScreenName, // Screen Name where Code Viewer object is used
0032 ObjectName, // Name of Code Viewer object
0033 pCPUName, // PLC name to be monitored
0034 pContainingBlock, // Name of the Block to be monitored
0035 pOperand, // Operand to be monitored
0036 &error); // Error description
0037
Diagnósticos de falha: esta parte do programa é opcional. Caso haja alguma falha durante a execução, a variável “result” retornará o valor “1”. Estando “result” com o valor “1”, será impresso (função printf) no objeto “ “ um texto fixo mais os valores de detalhes do erro, conforme variável “error”.
0038 // check for errors, and print a log if necessary
0039 if(!result) 0040 {
0041 // there are only few reasons why the call to OpenViewerIECPLByAssignment will
0042 // fail, in most cases the viewer control could not be found
0043 // most of the errors have to be handled in the OnError event of the viewer
0044 printf("OpenViewerIECPLByAssignment failed: err1=%ld, err2=%ld, err3=%ld, err4=%ld, err5=%ld, text=\"%s\"\r
\n", result, error.dwError1, error.dwError2, error.dwError3, error.dwError4, error.dwError5, error.szError-
Text); 0045 }
24/01/2017 Página 7 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
Fim da rotina: 0046
0047 }
1.2.2. Monitorando entrada de bloco
O objetivo desta sub-rotina é criar um ambiente adequado e padronizado para a chamada da função “OpenViewerIECPLByCall”.
Ao criar uma função / sub-rotina, podem-se especificar parâmetros que vão ser passados na chamada. Esta definição é feita na janela de inspeção.
Os parâmetros definidos neste exemplo são:
screenName: string que descreve o nome da tela onde está o objeto “PLC code display” a ser endereçado.
objectName: string que descreve o nome do objeto “PLC code display” a ser endereçado.
cpuName: string que descreve o nome da CPU a ser acessada pelo objeto “PLC code display”.
containingBlock: string que descreve o nome do bloco a ser monitorado pelo objeto “PLC code display”.
24/01/2017 Página 8 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
calledBlock: string o bloco que esta sendo chamado dentro do containingBlock e que servirá de ponto focal para a monitoração.
pinName: string que define o nome da variável de entrada que do bloco definido em “calledBlock” e que servirá de ponto focal para a monitoração.
24/01/2017 Página 9 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
Exemplo de script comentado
Comentários iniciais: 0001 /*
0002
0003 This fuction call OpenViewerIECPLByCall with correct eviroment / parameters
0004
0005 OpenViewerIECPLByCall is used for the LAD and FBD languages by Code Viewer object.
0006 It shows the assignment to an operator (program related to a called block's input).
0007 0008 */
0009
Inclusão de definições padrão (default para aplicações com WinCC Professional):
0010 #include "GlobalDefinitions.h"
Definição do cabeçalho: sem variável de retorno (não é necessário), definição de variáveis a serem passadas para a rotina conforme propriedades definidas na janela de inspeção.
0011 void C_OpenCodeViewe_Call(char* screenName, char* objectName, char* cpuName, char* containingBlock, char* calledBlock, char* pinName)
Início da rotina: 0012 {
0013
Inclusão de biblioteca própria para uso do objeto “PLC code display” 0014
0015 // add libraries
0016 #pragma code("kopapi.dll") 0017 #include "kopapi.h"
0018 #pragma code()
24/01/2017 Página 10 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
Definição de variáveis internas: no geral, os parâmetros são copiados para variáveis internas por questão de organização. A variável “error” retorna informações de erro na chamada da função. A função “OpenViewerIECPLByCall” retorna “1” se houve erro em sua execução (a variável “result” coleta esta informação).
0020 // Variable definitions for fuction call
0021
0022 char* serverPrefix = "";
0023 CMN_ERROR error; // Error description
0024
0025 BOOL result; // 0 means that the fuction was executed without errors
0026 0027
Chamada da função OpenViewerIECPLByCall: as variáveis do cabeçalho são passadas para a função.
0028 result = OpenViewerIECPLByCall(0, // DWFLAGS: Bit array, 0 by
default(the complete pin name is compared to lpszPin);
IECPLVIEWER_PIN_SUBSTRING_SEARCH= 0x0001: the pin name starts with the string pass in lpszPin.
0029 serverPrefix, // Server Prefix: NULL
0030 screenName, // Screen Name where Code Viewer object is used
0031 objectName, // Name of Code Viewer object
0032 cpuName, // PLC name to be monitored
0033 containingBlock,//Name of the Block to be monitored
0034 calledBlock, // Name of the Block called in the monitored's block
0035 pinName, // Input name of the called Block to be monitored
0036 &error); // Error description
0037 0038
Diagnósticos de falha: esta parte do programa é opcional. Caso haja alguma falha durante a execução, a variável “result” retornará o valor “1”. Estando “result” com o valor “1”, será impresso (função printf) no objeto “ “ um texto fixo mais os valores de detalhes do erro, conforme variável “error”.
0039 if(!result) 0040 {
0041 // there are only few reasons why the call to OpenViewerIECPLByCall will fail, in most cases the viewer control could not be found
0042 // most of the errors have to be handled in the OnError event of the viewer
0043 printf("OpenViewerIECPLByCall failed: err1=%ld, err2=%ld, err3=%ld, err4=%ld, err5=%ld, text=\"%s\"\r\n", result, error.dwError1,
error.dwError2, error.dwError3, error.dwError4, error.dwError5, error.szErrorText);
0044 } 0045
24/01/2017 Página 11 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline 0046
Fim da rotina:
0047 }
1.3. Chamada do script
Neste exemplo os scripts são chamados a partir de botões.
1.3.1. Monitorando variável de saída
Neste caso usa-se a rotina “C_OpenCodeViewer_Assig” (vide 1.2.1). Os parâmetros são passados como strings, exceto menção em contrário:
Parâmetros:
ScreenName: Nome da tela onde o objeto “PLC code display”. O nome da tela pode ser
obtido nas propriedades da tela (General / Name), título das propriedades ou estrutura de diretórios:
24/01/2017 Página 12 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
Object name: Nome do objeto “PLC code display”. O nome do objeto pode ser obtido
24/01/2017 Página 13 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
CPUName: Nome da CPU a ser monitorada. O nome da CPU pode ser obtido da
estrutura de diretórios ou nas propriedades da CPU, diretório General / Project Information / Name.
BlockName: Nome do bloco a ser monitorado. No caso de FB, usar o nome do instance
DB:
OperandName: nome da variável de saída a ser monitorada. Ela serve de referência
24/01/2017 Página 14 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
Para o caso de variáveis globais, usar o nome simbólico da variável (por exemplo, “Tag_1”). Para o caso de variáveis locais, usar o nome simbólico da variável, precedido de “#” (por exemplo, “#out”).
24/01/2017 Página 15 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
1.3.2. Monitorando entrada de bloco
Neste caso usa-se a rotina “C_OpenCodeViewer_Call” (vide 1.2.2). Os parâmetros são passados como strings, exceto menção em contrário:
Parâmetros:
ScreenName: Nome da tela onde o objeto “PLC code display”. O nome da tela pode ser
obtido nas propriedades da tela (General / Name), título das propriedades ou estrutura de diretórios:
24/01/2017 Página 16 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
Object name: Nome do objeto “PLC code display”. O nome do objeto pode ser obtido
nas propriedades da tela (Miscellaneous / Name) ou título das propriedades:
CPUName: Nome da CPU a ser monitorada. O nome da CPU pode ser obtida da
estrutura de dirtórios ou nas propriedades da CPU, diretório General / Project Information / Name.
24/01/2017 Página 17 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
ContainingBlock: Nome do bloco a ser monitorado. No caso de FB, usar o nome do
instance DB:
CalledBlock: nome do bloco cuja chamada deve ser monitorada. No caso de FB, usar
o instance DB. No caso de FB muiltinstance, usar o nome do Multiinstance, precedido por “#” (por exemplo, “#My_Block2_Instance”).
24/01/2017 Página 18 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline PinName: nome do pino de entrada do bloco cuja chamada deve ser monitorada.
3. Referências
Um projeto exemplo pode ser acessado no Fórum Siemens para automação industrial, sob link:
https://www.automation.siemens.com/BR/forum/guests/PostShow.aspx?PageIndex=1&PostI D=531865&Language=en&onlyInternet=False#top
24/01/2017 Página 19 / 19 s Industry Sector - Technical Support & Hotline www.siemens.com.br/Hotline
4. Suporte técnico e treinamento
Suporte Técnico
Requisição de suporte:
www.siemens.com.br/Hotline/SR
Tel.: 0800 7 73 73 73
Portal de Suporte: www.siemens.com.br/Hotline
Homepage Brasil: www.siemens.com.br
Centro de treinamento - SITRAIN
Informações: www.siemens.com.br/sitrain Tel.: 0800 7 73 73 73