Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

ESTRUTURA DO PROGRMA PDL2
PROGRAM (nome programa) EZ à Editavel no ambiente IDE
CONST }
VAR }
ROUTINE call_(nome do programa) EXPORTED FROM nome do programa }
 }
ROUTINE sub_1 }
BEGIN }
... }
END sub_1 } à Área de declaração
}
}
ROUTINE call_(nome do programa) }
BEGIN }
... }
END call_(nome do programa) }
BEGIN
CYCLE }
 Sub_1 } à Área Executável
 Call_(nome do programa) }
END nome do programa
O programa inicia com a instrução PROGRAM. Esta instrução identifica o programa
com um nome definido pelo usuário. O mesmo identifica, também o arquivo no qual
o programa foi memorizado. O programa em si pode ser definido como HOLD ou
NOHOLD, os programas HOLD (holdable) são controlados mediante os comandos START
e HOLD, geralmente tais programas incluem um movimento. Os programas NOHOLD
geralmente são utilizados para controle de processo e não pode incluir um
movimento, uma vez ativado não necessita de um START.
Os programas são subdivididos em uma área de declaração e uma área de seção
executável. A área de declaração consiste em um elenco de todas as rotinas e de
todas as categorias de dados que serão utilizados pelo programa, enquanto a
seção executável é formada por um elenco de instruções que o controlador deverá
executar para efetuar um task.
As duas áreas são separadas pela instrução BEGIN. Para esta instrução, o
programador pode associar a opção CYCLE de modo a criar um ciclo contínuo, a
instrução END indica o fim do programa.
CATEGORIAS DE DADOS:
CONST
input_1 = 1
 error = TRUE
 angle = 180
VAR
Ponto_home : JOINTPOS
ponto_1 : POSITION
contador : INTEGER
flag_error : BOOLEAN
 message : STRING[50]
n_pontos : ARRAY [100] OF POSITION
ROUTINE
EXEMPLO DE UM PROGRAMA PDL2
PROGRAM prog_flay EZ, PROG_ARM = 1, STACK = 2048
VAR pnt0002p, pnt0003p, pnt0004p, pnt0005p, pnt0006p : POSITION
 jnt0001j : JOINTPOS FOR ARM[1]
ROUTINE a_tool(ai_t_idx : INTEGER) EXPORTED FROM tt_tool
ROUTINE call_prog_flay EXPORTED FROM prog_flay
ROUTINE call_prog_flay
BEGIN
 MOVE JOINT TO jnt0001j
 a_tool(13) –- chamada da ferramenta 13
 MOVEFLY JOINT TO pnt0002p ADVANCE
 MOVE LINEAR TO pnt0003p
 MOVE LINEAR TO pnt0004p
 DELAY 2000 –- espera por 2 segundos
 MOVE LINEAR TO pnt0005p
 MOVEFLY JOINT TO pnt0006p ADVANCE
 MOVE JOINT TO jnt0001j
END call_prog_flay
BEGIN
CYCLE
 call_prog_flay
END prog_flay
INSERIDO UMA NOVA VARIÁVEL
PROGRAM prog_flay EZ, PROG_ARM = 1, STACK = 2048
VAR pnt0002p, pnt0003p, pnt0004p, pnt0005p, pnt0006p : POSITION
 jnt0001j : JOINTPOS FOR ARM[1]
 c1 : INTEGER
ROUTINE a_tool(ai_t_idx : INTEGER) EXPORTED FROM tt_tool
ROUTINE call_prog_flay EXPORTED FROM prog_flay
ROUTINE call_prog_flay
BEGIN
 MOVE JOINT TO jnt0001j
 a_tool(13) –- chamada da ferramenta 13
 MOVEFLY JOINT TO pnt0002p ADVANCE
 MOVE LINEAR TO pnt0003p
 MOVE LINEAR TO pnt0004p
 DELAY 2000 –- espera por 2 segundos
 MOVE LINEAR TO pnt0005p
 MOVEFLY JOINT TO pnt0006p ADVANCE
 MOVE JOINT TO jnt0001j
END call_prog_flay
BEGIN
 c1 := 0
CYCLE
 call_prog_flay
 c1 := c1 + 1
END prog_flay
DECLARAÇÕES DE CONSTANTES E VARIÁVEIS
As variáveis e constantes declaradas na seção VAR e CONST de uma rotina são
chamadas locais à rotina. Isto significa que podem ser utilizadas somente ao
interno da própria rotina e que não poder ser utilizadas em outras partes do
programa.
As variáveis e constantes declaradas na seção VAR e CONST do programa principal
podem ser utilizadas em um ponto qualquer do programa, mesmo ao interno de
rotinas. Por isto, são chamadas de globais ao programa. Se uma variável
declarada ao interno de uma rotina tem o mesmo nome de uma variável global, a
rotina terá acesso à variável declarada localmente.
PROGRAM exemplo
VAR
 x : INTEGER
ROUTINE teste_a
VAR
 x : INTEGER
BEGIN
 x := 4
 WRITE LUN_CRT(‘Dentro de teste_a x = ‘, x, NL)
END teste_a
ROUTINE teste_b
BEGIN
 WRITE LUN_CRT(‘Dentro de teste_b x = ‘, x, NL)
END teste_b
BEGIN
 x := 10
 WRITE LUN_CRT(‘O valor inicial de x = ‘, x, NL)
 teste_a
 WRITE LUN_CRT(‘Apos teste_a ter sido chamada x = ‘, x, NL)
 teste_b
 WRITE LUN_CRT(‘Apos teste_b ter sido chamada x = ‘, x, NL)
END exemplo
Os resultados na saída sera de :
O valor inicial de x = 10
Dentro de teste_a x = 4
Apos teste_a ter sido chamada x = 10
Dentro de teste_b x = 10
Apos teste_b ter sido chamada x = 10
ROTINAS DE PROCEDIMENTO E FUNÇÃO
A rotiona de procedimento consiste em uma seqüência de instruções que são
chamadas e executadas como uma única instrução executável.
A rotina de função é formada por um seqüência de cálculos e comparações eo valor
que resultar destas operações será restituído. Uma rotina de função é chamada ao
interno de uma expressão.
A rotina de função são utilizadas como parte de um teste de controle em um loop
ou em um salto condicional ou como parte de um expressão no lado direito de uma
intruçao de atribuição, no exemplo seguinte, a rotina é utilizada como teste em
uma instrução IF.
PROGRAM check_entrada
ROUTINE time_out : BOOLEAN
CONST
 Limite_tempo = 3000
VAR
 Janela_tempo : INTEGER
BEGIN
 $TIMER[1] := 0
 REPEAT
 Janela_tempo := $TIMER[1]
 UNTIL ($DIN[1] = ON) OR (janela_tempo > limite_tempo)
 IF janela_tempo > limite_tempo THEN
 RETURN(TRUE)
 ELSE
 RETURN(FALSE)
 ENDIF
END time_out
BEGIN
 IF time_out THEN
 WRITE LUN_CRT(‘Ocorreu um time out’)
 ENDIF
END check_entrada
PARÂMETROS
Para generalizar rotinas de modo poder utilizá-las em diferentes circunstâncias,
o programador pode utilizar parâmetros de rotinas ao invés de constantes ou
variáveis. Os parâmetros são declarados no titulo da rotina. Quando uma rotina e
chamada, os dados são passados aos parâmetros da rotina por um elenco de
argumentos indicados na chamada da rotina. O numero de argumentos deve ser igual
ao numero de parâmetros declarados para a rotina. Alem do mais deve haver
compatibilidade com o tipo de dados com o qual os parâmetros foram declarados.
No exemplo seguinte, a rotina time_out pode ser usada em modo geral incluindo um
parâmetro que fornece o índice do sinal de entrada. A rotina assim modificada,
pode ser utilizada para o controle de qualquer sinal de entrada.
PROGRAM check_entrada
ROUTINE time_out(input : INTEGER) : BOOLEAN
CONST
 Limite_tempo = 3000
VAR
 Janela_tempo : INTEGER
BEGIN
 $TIMER[1] := 0
 REPEAT
 Janela_tempo := $TIMER[1]
 UNTIL ($DIN[input] = ON) OR (janela_tempo > limite_tempo)
 IF janela_tempo > limite_tempo THEN
 RETURN(TRUE)
 ELSE
 RETURN(FALSE)
 ENDIF
END time_out
BEGIN
 IF time_out(1) THEN
 WRITE LUN_CRT(‘Ocorreu um time out no ciclo 1’)
 ELSE
 IF time_out(6) THEN
 WRITE LUN_CRT(‘Ocorreu um time out no ciclo 6’)
 ENDIF
 ENDIF
END check_entrada
INSERIDO UMA INTRUÇÃO IF
A instrução IF é utilizada para escolha entre dois possíveis fluxos de execução,
em base ao resultado de uma expressão.
SINTAXE:
IF expressão THEN
...
ELSE
...
ENDIF
PROGRAM prog_flay EZ, PROG_ARM = 1, STACK = 2048
VAR
 c1 : INTEGER
ROUTINE a_tool(ai_t_idx : INTEGER) EXPORTED FROM tt_tool
ROUTINE call_pega_peca EXPORTED FROM pega_peca
ROUTINE call_descart_pallet EXPORTED FROM descart_pallet
BEGIN
 c1 := 0
CYCLE
 Call_pega_peca
 IF c1 = 10 THEN
call_descart_pallet
 c1 := 0
 ELSE
 c1 := c1 + 1
 ENDIF
END prog_flay
GOTO
PROGRAM prog_flay EZ, PROG_ARM = 1, STACK = 2048
VAR
 c1 : INTEGER
ROUTINE a_tool(ai_t_idx : INTEGER) EXPORTED FROM tt_tool
ROUTINE call_pega_peca EXPORTED FROM pega_peca
ROUTINE call_descart_pallet EXPORTED FROM descart_pallet
BEGIN
 c1 := 0
CYCLE
l_1::
 Call_pega_peca
 IF c1 = 10 THEN
 GOTO l_2
 ELSE
 c1 := c1 + 1
 GOTO l_1
 ENDIF
l_2::
call_descart_pallet
 c1 := 0
END prog_flayINSERIDO UMA INTRUÇÃO REPEAT
A instrução REPEAT executa uma sequência de instruções até que uma expressão
booleana seja true.
SINTAXE:
REPEAT
 ...
UNTIL expressão
PROGRAM prog_flay EZ, PROG_ARM = 1, STACK = 2048
VAR
 c1 : INTEGER
ROUTINE a_tool(ai_t_idx : INTEGER) EXPORTED FROM tt_tool
ROUTINE call_pega_peca EXPORTED FROM pega_peca
ROUTINE call_descart_pallet EXPORTED FROM descart_pallet
BEGIN
 c1 := 0
CYCLE
 REPEAT
 Call_pega_peca
 c1 := c1 + 1
 UNTIL c1 = 10
call_descart_pallet
 c1 := 0
END prog_flay
FOR
A instrução FOR executa por um certo número de vezes uma seqüência de instruções
SINTAXE:
FOR var := valor inicio TO | DOWNTO valor fim DO
 ...
ENDFOR
PROGRAM prog_flay EZ, PROG_ARM = 1, STACK = 2048
VAR
 n_for : INTEGER
 descart_ok : BOOLEAN
ROUTINE a_tool(ai_t_idx : INTEGER) EXPORTED FROM tt_tool
ROUTINE call_pega_peca EXPORTED FROM pega_peca
ROUTINE call_descart_pallet EXPORTED FROM descart_pallet
BEGIN
CYCLE
 FOR n_for := 1 TO 10 DO
 Call_pega_peca
 ENDFOR
call_descart_pallet
 descart_ok := TRUE
END prog_flay
INSERIDO UMA INTRUÇÃO SELECT
A instrução SELECT é utilizada para escolher entre diferentes possíveis fluxos
de execução, em base ao resultado de uma expressão inteira.
SITAXE:
SELECT expr_int OF
 CASE(valor 1):
 ...
 CASE(valor 2):
 ...
 ELSE:
 ...
ENDSELECT
WAIT FOR
A instrução WAIT FOR suspende a execução do programa até que seja satisfeita a
condição especificada.
SINTAXE: WAIT FOR expressão
PROGRAM prog_flay EZ, PROG_ARM = 1, STACK = 2048
CONST
 din_1 = 50
 din_2 = 51
 din_3 = 53
VAR
 Tipo_ciclo : INTEGER
ROUTINE call_prog_1 EXPORTED FROM prog_1
ROUTINE call_prog_2 EXPORTED FROM prog_2
ROUTINE call_prog_3 EXPORTED FROM prog_3
BEGIN
CYCLE
 WAIT FOR $DIN[din_1] OR $DIN[din_2] OR $DIN[din_3]
 IF $DIN[din_1] THEN
 Tipo_ciclo := 1
 ELSE
 IF $DIN[din_2] THEN
 Tipo_ciclo := 2
 ELSE
 IF $DIN[din_3] THEN
 Tipo_ciclo := 3
 ELSE
 ENDIF
 ENDIF
 ENDIF
 SELECT tipo_ciclo OF
 CASE(1):
 Call_prog_1
 CASE(2):
 Call_prog_2
 CASE(3):
 Call_prog_3
 ELSE:
 WRITE(‘ERRO CODIGO DE PROGRAMA’, NL)
 ENDSELECT
END prog_flay
GESTORES DE CONDIÇÃO
Os gestores de condição permitem a um programa monitorar determinadas condições
em paralelo com a execução normal e executar as ações associadas no caso em que
tais condições sejam satisfeitas. Utilizações típicas compreendem no
monitoramento e o controle das unidades periféricas e a gestão dos erros.
O gestor é inicialmente definido, o que permite, a seguir, a sua habilitação. Os
gestores de condição podem ser desabilitados ou removidos.
Os gestores são definidos na área de execução do programa, utilizando a
instrução CONDITION.
SINTAXE:
CONDITION[n] :
 WHEN expressão DO
 ...
 WHEN expressão DO
 ...
ENDCONDITION
As condições a serem monitoradas estão especificadas na expressão de condição
(expressão). Muitas condições podem ser combinadas em uma única expressão
utilizando os operadores BOOLEAN, AND, OR. As condições que podem ser
monitoradas serão vistas a seguir. Quando a expressão se torna TRUE, o gestor de
condição é ativado.
A habilitação global de gestores de condição é possível utilizando-se a
instrução: ENABLE CONDITION[n].
Os gestores de condição podem ser temporariamente habilitados como parte de uma
instrução MOVE através da cláusula WITH.
EXEMPLO:
CONDITION[1]:
 WHEN AT START DO
 $DOUT[22] := ON
ENDCONDITION
...
...
MOVE TO ponto_1,
 WITH CONDITION[1]
ENDMOVE
...
A desabilitaçao global de gestores de condição é possível utilizando-se a
instrução DISABLE CONDITION[n]. Utilizando a opção ALL, todos os gestores serão
desabilitados, DISABLE CONDITION ALL.
Se um gestor de condição estiver habilitado como parte de uma cláusula WITH, o
mesmo será desabilitado no final do movimento.
As funções internas COND_ENABLED e COND_ENABLED_ALL podem ser utilizadas para
controlar se uma determinada condição está habilitada.
EXEMPLO:
IF COND_ENABLED(1) = OFF THEN
 ENABLE CONDITION[1]
ENDIF
OUTRAS INSTRUÇÕES:
HOLD: para a execução do programa, somente com um novo START para
restabelecer o ciclo
EXIT CYCLE : faz com que durante a execução de um programa, seja
omitida a parte restante do ciclo atual e seja iniciado
imediatamente o ciclo sucessivo
LOCK: interrompe o movimento de um braço especifico
UNLOK: permite retomar o movimento de um braço bloqueado. O
movimento pode recomeçar somente no momento da execução de uma
instrução RESUME
RESUME: para restabelecer o movimento à espera de ser executado, é
necessário enviar a instrução RESUME.
ROUTINE: declara uma rotina definida pelo usuário na área de
declaração de um programa
RETURN: restitui o controle do programa da rotina em execução a
ponto a partir do qual a mesma foi chamada
ELENCO DE ALGUMAS VARIÁVEIS PREDEFINIDAS (SISTEMA)
$TIMER: temporizador do relógio dado em ms
exemplo: $TIMER[1] := 0 (seta o temporizador 1 a 0)
 IF $TIMER[1] > 2000 THEN...
$DIN: input digital
exemplo: WAIT FOR $DIN[1] ...
 IF $DIN[20] = TRUE THEN ...
 IF $DIN[imput_2] = OFF THEN ...
$DOUT: output digital
exemplo: $DOUT[4] := OFF
 $DOUT[liga_vacuo] := ON
$WORD: dados PLC word, representa a memoria V da lógica ladder do
PLC. Pode ser usada para a troca de dados entre um programa PLC e
um programa PDL2.
Exemplo: BIT_SET($WORD[21], 2) – seta o bit 2 da palavra 21 (saída
do PDL para a entrada do PLC)
 WAIT FOR BIT_TEST($WORD[32], 4, ON) – esperando o sinal
do PLC a ON.
 BIT_CLEAR($WORD[21], 2)

Mais conteúdos dessa disciplina