s WinCC V1X Professional - PLC code display 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.................................................................................................................. 16 4. Suporte técnico ............................................................................................................ 16 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). 29/12/2014 s Industry Sector - Technical Support & Hotline Página 1 / www.siemens.com.br/Hotline 16 s WinCC V1X Professional - PLC code display 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) Contato normalmente aberto Contato normalmente fechado NOT SET RESET Atribuição de valor FLIP FLOP Em linguagem de blocos (FBD) AND OR OU Exclusivo NOT SET RESET Atribuição de valor 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. 29/12/2014 s Industry Sector - Technical Support & Hotline Página 2 / www.siemens.com.br/Hotline 16 s WinCC V1X Professional - PLC code display 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. 29/12/2014 s Industry Sector - Technical Support & Hotline Página 3 / www.siemens.com.br/Hotline 16 s WinCC V1X Professional - PLC code display 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. 29/12/2014 s Industry Sector - Technical Support & Hotline Página 4 / www.siemens.com.br/Hotline 16 s WinCC V1X Professional - PLC code display 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 0015 0016 0017 0018 // add libraries #pragma code("KOPAPI.dll") #include "kopapi.h" #pragma code() 29/12/2014 s Industry Sector - Technical Support & Hotline Página 5 / www.siemens.com.br/Hotline 16 s WinCC V1X Professional - PLC code display 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 0020 0021 0022 // Variable definitions for fuction call char* pServerPrefix = NULL; char* pCPUName = CPUName; // CPU's name to be monitored 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. pServerPrefix, // Server Prefix: NULL ScreenName, // Screen Name where Code Viewer object is used ObjectName, // Name of Code Viewer object pCPUName, // PLC name to be monitored pContainingBlock, // Name of the Block to be monitored pOperand, // Operand to be monitored &error); // Error description 0030 0031 0032 0033 0034 0035 0036 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 0039 0040 0041 0042 0043 0044 0045 // check for errors, and print a log if necessary if(!result) { // there are only few reasons why the call to OpenViewerIECPLByAssignment will // fail, in most cases the viewer control could not be found // most of the errors have to be handled in the OnError event of the viewer 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.szErrorText); } Fim da rotina: 0046 0047 } 29/12/2014 s Industry Sector - Technical Support & Hotline Página 6 / www.siemens.com.br/Hotline 16 s WinCC V1X Professional - PLC code display 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”. 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. 29/12/2014 s Industry Sector - Technical Support & Hotline Página 7 / www.siemens.com.br/Hotline 16 s WinCC V1X Professional - PLC code display 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 0016 0017 0018 0019 // add libraries #pragma code("kopapi.dll") #include "kopapi.h" #pragma code() 29/12/2014 s Industry Sector - Technical Support & Hotline Página 8 / www.siemens.com.br/Hotline 16 s WinCC V1X Professional - PLC code display 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 0021 0022 0023 0024 0025 0026 0027 // Variable definitions for fuction call char* serverPrefix = ""; CMN_ERROR error; // Error description BOOL result; // 0 means that the fuction was executed without errors 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 0046 Fim da rotina: 0047 } 29/12/2014 s Industry Sector - Technical Support & Hotline Página 9 / www.siemens.com.br/Hotline 16 s WinCC V1X Professional - PLC code display 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: 29/12/2014 s Industry Sector - Technical Support & Hotline Página 10 / www.siemens.com.br/Hotline 16 s WinCC V1X Professional - PLC code display 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 obtido da estrutura de diretórios ou nas propriedades da CPU, diretório General / Project Information / Name. 29/12/2014 s Industry Sector - Technical Support & Hotline Página 11 / www.siemens.com.br/Hotline 16 s WinCC V1X Professional - PLC code display 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 para a representação do segmento (network) a ser monitorado. 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”). 29/12/2014 s Industry Sector - Technical Support & Hotline Página 12 / www.siemens.com.br/Hotline 16 s WinCC V1X Professional - PLC code display 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: 29/12/2014 s Industry Sector - Technical Support & Hotline Página 13 / www.siemens.com.br/Hotline 16 s WinCC V1X Professional - PLC code display 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. 29/12/2014 s Industry Sector - Technical Support & Hotline Página 14 / www.siemens.com.br/Hotline 16 s WinCC V1X Professional - PLC code display 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”). 29/12/2014 s Industry Sector - Technical Support & Hotline Página 15 / www.siemens.com.br/Hotline 16 s WinCC V1X Professional - PLC code display 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 4. Suporte técnico Siemens Industry Sector Customer Service Division / Service Delivery - Technical Support & Hotline – Requisição de suporte: www.siemens.com.br/Hotline/SR Tel.: +55 0800 7 73 73 73 Portal de Suporte: www.siemens.com.br/Hotline Homepage Brasil: www.siemens.com.br 29/12/2014 s Industry Sector - Technical Support & Hotline Página 16 / www.siemens.com.br/Hotline 16