Instruções Dependentes do Estado Lógico Binário Registradores e Áreas de Memória em uma CPU S7 Acumuladores Somente S7-400 ACCU4 32 Bit ACCU3 32 Bit ACCU2 32 Bit ACCU1 32 Bit Memória de Carga AR1 32 Bit AR2 32 Bit Registrador de Bloco de Dados Tamanho DB DI aberto Tamanho DI 16 Bit 16 Bit Palavra de Status Status Bits Blocos Lógicos Blocos de Dados Memória de Trabalho L, A, O,... Registradores de Endereços DB aberto - - Blocos Lógicos Blocos de Dados Área de I/O T, S, =,... Memória de Sistema - Imagem de processo de entrada Imagem de processo de saída Bit de memória Temporizadores Contadores - Pilha de Dados Locais Pilha de Interrupção Pilha de Blocos 16 Bit Registradores na CPU S7 Áreas de Memórias na CPU S7 Estrutura da Palavra de Status Significado dos bits na palavra de status Bit Tarefa Grandeza Significado 0 /FC 20 Primeiro Cheque 1 RLO 21 Resultado Lógico da Operação 2 STA 22 Status 3 OR 23 Or (ou) 4 OS 24 Estouro Armazenado 5 OV 25 Estouro 6 CC0 26 Bit de Resultado 7 CC1 27 Bit de Resultado 8 BR 28 Resultado Binário 9...15 sem função 29 ..210 Checando os Bits de Status Cheque em STL A OV Verifica o estouro de capacidade A OS Verifica o estouro de capacidade memorizado A BR Verifica o bit de memória BR Cheque do Resultado Binário (CC0, CC1) A ==0 Resultado igual a 0 A >0 Resultado maior que 0 A <>0 Resultado não igual a 0 A =<0 Resultado menor que ou igual a 0 etc. A UO Operação não permitida Cheque em LAD e em FBD OV M 4.0 S >0 M 4.0 S Instruções com Bits de Status Instrução Significado Exemplo SET Fixa o RLO em "1" SET //RLO-1-bit de memória = M 0.1 CLR Fixa RLO em "0" CLR NOT Inverte o RLO O Manual O Automático NOT; = modo de operação = M0.0 //RLO-0-bit de memória I 1.0 SAVE Salva o RLO no resultado binário Verifica o resultado binário I 1.2 SAVE BR A BR I 1.1 Q 4.2 Q 5.0 Bit BR e ENO em uma Chamada de Bloco ou Função Complexa LAD STL Network 1: Programa Cíclico FC23 I0.0 ENO ( ) Step_ Step_bit _memory display QW12 EN MW12 M10.0 Network 2: ??? ADD_I M10.1 EN ENO ( ) 345 IN1 OUT MW100 987 IN2 Network 1: Programa Cíclico A I 0.0 JNB _001 CALL FC 23 Step_bit_memory :=MW12 Step_display :=QW12 _001: A BR = M 10.0 Network 2: ??? L 345 L 987 +I T MW 100 AN OV SAVE CLR A BR = M 10.1 Funções de salto (Jump) dependentes dos Bits de Status JU Label1) Salto Incondicional JC Label1) salta se o bit "RLO" =1 JCN Label1) salto se o bit "RLO" = 0 JCB Label1) salto se o bit "RLO" = 1 e salva RLO JNB Label1) salto se o bit "RLO" = 0 e salva RLO JBI Label1) salto se o bit "BR" = 1 JBNI Label1) salto se o bit "BR" = 0 JO Label1) salto se o bit "OV" na palavra de status =1 JOS Label1) salto se o bit "OS" na palavra de status =1 1) Rótulo (Label) pode ser constituído de até 4 dígitos alfanuméricos Funções de Salto dependentes dos Códigos de Condição JZ Label1) Salta se na palavra de status o bit "CC1"=0 e "CC0"=0 (Resultado = 0) JN Label1) Salta se na palavra de status o bit "CC1" não for igual a "CC0" (Resultado <> 0) JP Label1) Salta se na palavra de status o bit "CC1"=1 e "CC0"=0 (Resultado > 0) JM Label1) Salta se na palavra de status o bit "CC1"=0 e "CC0"=1 (Resultado < 0) JPZ Label1) Combina os saltos JZ e JP (Resultado >= 0) JMZ Label1) Combina os saltos JM e JZ (Resultado <= 0) JUO Label1) Salta se: número real inválido “desordenado” ou divisão por zero 1) Rótulo (Label) pode ser constituído de até 4 dígitos alfanuméricos Programação do Distribuidor de Saltos Modo de Operação Carrega o número do salto Over: Label_1: Exemplo: Distribuidor de saltos com 3 entradas L Recipe no // Carrega o número da receita JL Over JL OVER // Distribuidor de saltos com 3 entradas JU Label_1 JU Rec0 // Salta para receita No. 0 (ACCU1 = 0) .. . JU Rec1 // Salta para receita No. 1 (ACCU1 = 1) JU Label_n JU Rec2 // Salta para receita No. 2 (ACCU1 = 2) Instruções para ACCU1 > n OVER:JU ERROR // Salta se ACCU1 > 2 Instruções para ACCU1 = 0 Rec0: L DBW4 ... ... .. . Rec1: L DBW6 ... Label_n: Instruções para ACCU1 = n Rec2: L DBW8 ... ERROR: CLR ... Programação de Instruções de Loop (voltas) Modo de Operação Inicializa o contador de voltas Transfere para o contador de voltas NEXT: Sim Exemplo: Instruções de Loop (voltas) com 4 varreduras L +4 NEXT: T MW10 // Carrega o contador de voltas // Início do loop Sessão de códigos a serem executados diversas vezes . // Código . // Código Carrega o contador de voltas no ACCU1. . // Código L MW10 // Carrega o contador de voltas LOOP NEXT // novamente (Decrementa ACCU1 ACCU1<>0?) LOOP NEXT Não Continuar // Contador de voltas -1 e // salta para o rótulo NEXT // se Accu 1> 0 Instruções de Fim de Bloco BE Fim de Bloco BEU Fim de Bloco Incondicional (dentro de um bloco) BEC Fim de Bloco Condicional (dependente do RLO) (RET) mostrado em LAD RET mostrado em FBD Exercício 1.1: Salto após uma Subtração Chaves de teste no simulador Chave rotativa 1 2 3 4 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 215 converte p/ DINT 27 BTD BTD converte p/ DINT -D Resultado positivo (>=0) Resultado negativo [JM Label] Deleta o display Chave rotativa: Chaves de teste: Display: IW4 (IW2, mod. 32 bit) IW0 (IW0, mod. 32 bit) QW12 (QW6, mod. 32 bit) Escreve o valor de IW 4 no display 20 Exercício 1.2: Salto após uma Multiplicação Chaves de teste no simulador Chave rotativa 1 2 3 4 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 215 converte p/ DINT 27 BTD BTD 20 converte p/ DINT *I Sem estouro Estouro [JO Label] Apaga o display Chave rotativa: Chaves de teste: Display: IW4 (IW2, mod. 32 bit) IW0 (IW0, mod. 32 bit) QW12 (QW6, mod. 32 bit) DTB Converte o resultado para BCD Escreve o resultado no display Exercício 1.3: Programando um Distribuidor de Saltos Função: Chave rotativa 1 [JL Label] 1 2 3 4 5 Motor_girar para direita Motor_girar para esquerda Desligar motor Ligar buzina Desligar buzina Label: Saltar via salto para lista Endereços: S7-300 (16-Bit) I0.0 Q8.0 Motor_direita: Q20.5 Motor_esquerda: Q20.6 Buzina: Q20.7 S7-300 (32-Bit) I0.0 Q4.0 Q8.5 Q8.6 Q8.7 www.apostilastecnicas.com