Escolar Documentos
Profissional Documentos
Cultura Documentos
Programação
Avançada de
Robôs Comau
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, e a instrução END, que indica o fim do programa.
Letras:
abcdefchijklmnopqrstuvwxyz
ABCDEFGHI JKLMNOPQRSTUVWXYZ
Algarismos:
0123456789
Símbolos:
@<>=/*+,;.#S'[]%(}\:!()_
Caracteres Especiais:
blank (space), tab
O PDL2 não faz distinção entre letras maiúsculas e minúsculas.
Exemplo:
PROGRAM teste NOHOLD
BEGIN CYCLE
~ERROR~ IF
WRITE (‘mensagem’, NL)
END teste
Neste caso, a linha onde aparece ~ERROR~ é um erro, pois a instrução IF está
incompleta. A marcação é removida automaticamente quando o programador
corrige o erro.
Os programas PDL2 são constituídos por instruções, formadas por associações dos
seguintes elementos:
Palavras, símbolos e operadores reservados;
Identificadores pré-definidos;
Identificadores definidos pelo usuário.
A sintaxe das instruções deve estar correta, isto é, as instruções devem ser
estruturadas com base nas regras de sintaxe do PDL2. O editor contido no programa
fornece um suporte válido para garantir a sintaxe correta das instruções durante a
digitação das mesmas.
Programas
Variáveis
Constantes
Rotinas
Etiquetas
Tipos de dados definidos pelo usuário
Campos
Um identificador definido pelo usuário deve começar com uma letra. Pode
conter uma quantidade qualquer de letras, cifras e caracteres de “underline” (
_ ). Este tipo de identificador pode ter um único significado no âmbito de um
determinado contexto.
Um valor INTEGER pode ser representado como decimal (base 10), octal (base 8),
hexadecimal (base 16) ou binário (base 2). A base default para os valores
INTEGER é a decimal. Para poder representar um valor literal INTEGER em outra
base, deve-se colocar antes do número, a indicação 0o para um valor octal (0o72),
0x para um valor hexadecimal (OxFF), ou 0b para um valor binário (ObllOll).
Em nível de bit (and, or, xor, not, shr, shl, ror, rol)
Relacionais ( =, := )
O tipo de dados STRING representa uma série de caracteres ASCII que são
considerados como um grupo único de dados. Um apóstrofo assinala o início e o fim de
um string.
Além dos caracteres ASCII imprimíveis, os strings podem conter também sequências
de controle. Uma sequência de controle é constituída por uma barra invertida (\)
acompanhada por um código ASCII qualquer de três algarismos.
Por exemplo:
Literal: ‘O código ASCII 126 é um til: \126’
Valor: O código ASCII 126 é um til: ~
O tipo de dados RECORD cria um tipo de dados definido pelo usuário que é
global em relação ao sistema inteiro. Isto significa que é possível que
ocorram conflitos entre definições RECORD que tenham o mesmo nome
mas que possuam campos diferentes. Tais conflitos acontecem durante o
carregamento dos programas. É aconselhável que o programador utilize uma
convenção unívoca para a nomeação dos tipos de dados RECORD.
Aritméticas (+, -)
Aritméticas (*, /) VECTOR-INTEGER, VECTOR-REAL e vice-versa
Relacionais (=)
Vetoriais (X,Y,Z)
Cada valor real é a distância efetiva que a articulação deve percorrer a partir
da sua posição predefinida "zero". Cada variável JOINTPOS está associada
a um braço específico e não pode ser utilizada para um braço diferente.
O valor de tipo nó é global para o sistema. Isto significa que é possível que
ocorram conflitos entre tipos de nós que tenham o mesmo nome mas que
possuam campos diferentes. É aconselhável que o programador utilize uma
convenção unívoca para as definições de nós para evitar tais conflitos.
WAIT
SIGNAL
O tipo de dado de uma constante é definido pelo valor que lhe é atribuído, que pode ser
um INTEGER, um REAL, um BOOLEAN, ou um STRING. Ao interno do programa é
possível utilizar o identificador no lugar do seu valor.
Um programa pode chamar mais de uma rotina e pode chamar a mesma rotina mais
de uma vez. Quando um programa chama uma rotina, o controle é transferido para a
rotina e as condições presentes na rotina são executadas. Após a execução da
rotina , o controle é devolvido ao ponto de onde a rotina foi chamada. As rotinas
podem ser chamadas de
qualquer lugar dentro da seção executável de um programa ou rotina.
Rotinas de função, muitas vezes são usadas como parte de um teste de controle,
em um loop ou de desvio condicional, ou como parte de uma expressão,
utilizando uma instrução de atribuição, como uma variável boleana por exemplo.
O exemplo a seguir mostra como a rotina time_out pode ser mais geral,
incluindo um parâmetro para o índice de sinal de entrada.
PROGRAM input_check
ROUTINE time_out (input : INTEGER) : BOOLEAN
--verifica se a entrada é recebida dentro do tempo limite
CONST
time_limit = 3000
VAR
time_slice : INTEGER
BEGIN
$TIMER[1] := 0
REPEAT
time_slice := $TIMER[1]
UNTIL ($DIN[input] = ON) OR (time_slice > time_limit)
ESTADOS BOOLEAN
Uma condição de estado BOOLEAN verifica uma variável BOOLEAN em todas as
varreduras. A condição é satisfeita quando a variável for TRUE. Quando for
utilizada em uma cláusula TIL ou WHEN, a variável BOOLEAN não pode ser uma
variável local ou um parâmetro.
O operador BOOLEAN NOT pode ser utilizado para especificar que a condição
será satisfeita quando a variável for FALSE.
EVENTOS DE SISTEMAS
Uma condição de evento de sistema monitora um evento gerado pelo sistema.
A condição será satisfeita quando o evento especificado ocorrer enquanto o
gestor de condição estiver habilitado. A varredura da expressão de condição é
efetuada somente quando ocorre um evento de sistema.
EVENTOS DE ERROS
Uma condição de eventos de erro monitora a ocorrência de um erro. A
condição será satisfeita quando o evento de erro especificado ocorrer
enquanto o gestor de condição estiver habilitado. A expressão de condição é
verificada somente quando ocorre um erro.
EVENTOS DE USUÁRIO
Esta classe de eventos pode ser usada como um meio para a sincronização
de programas.
EVENTOS DE PROGRAMA
Uma condição de evento de programa efetua o monitoramento de um evento gerado
pelo programa. A condição é satisfeita quando o evento de programa
especificado ocorre enquanto o gestor de condição estiver habilitado. A verificação da
expressão de condição é efetuada somente quando ocorre um evento de programa.
AÇÕES INTERNAS
As ações internas são procedimentos internos que podem ser utilizados
como ações de um gestor de condição.
AÇÕES DE ATRIBUIÇÃO
A ação de atribuição, atribui um valor a uma variável estática definida pelo
usuário, a uma variável de sistema ou a uma porta de saída. O valor pode
ser uma variável estática definida pelo usuário, uma variável predefinida, um
elemento de matriz de portas, uma constante ou um valor literal. Não é
possível utilizar uma variável local ou um parâmetro como valor ou como
variável atribuída.
Uma variável local ou parâmetro não pode ser usado como o valor ou como a
variável atribuída.
Malha:
Instrução FOR
Instrução WHILE
Instrução REPEAT
Salto incondicional:
Instrução GOTO
Se o loop for do tipo incremento, a partir do valor de partida ao valor final (TO)
será utilizado um teste "menor ou igual a". Em caso de resultado negativo
deste teste, o loop não será executado.
Se o valor do STEP for um, o loop será executado por um número de vezes
igual ao valor absoluto (valor final - valor inicial + 1).
Se o loop for do tipo decremento, do valor inicial até o valor final (DOWNTO)
será utilizado um teste "maior ou igual a". Em caso de resultado negativo
deste teste, o loop não será executado.
O loop será sempre executado pelo menos uma vez, mesmo se a expressão
BOOLEAN seja TRUE antes que o mesmo seja executado pela primeira vez.
Na maior parte dos casos, onde for necessário um loop ou um fluxo não
sequencial do programa ao interno de um programa, esta instrução pode ser
utilizada junto às outras instruções de controle descritas neste capítulo.
Exemplo
MOVE TO pnt xxx
DELAY 20000
MOVE TO pny yyy
Sintaxe: BEGIN<CYCLE>
Comentários: As seções de declarações de variáveis, tipos e constantes
devem ser colocadas antes da instrução BEGIN.
Exemplo:
WAIT FOR $DOUT[24]+
A instrução não tem efeito nos programas que não estão em fase de
execução.
A instrução não terá algum efeito nos programas que não se encontram em
estado paused.
A instrução CYCLE pode ser uma instrução por si só ou então constituir uma
opção da instrução BEGIN que permite ao programador criar um ciclo contínuo.
Parametros:
error_num : INTEGER [IN]
error_str : STRING [IN]
error_sev : INTEGER [IN]
Error_str é uma expressão string que contém uma mensagem de erro a ser
exibida.
Error_sev é uma expressão inteira, cujo valor está na faixa de 2 à 12. Estes
valores representam as gravidades seguintes do erro:
2 : Warning
4 : Pause, hold if holdable
6 : Pause all, hold if holdable
8 : Hold
10 : DRIVE OFF, pause all, deactivate
12 : DRIVE OFF, deactivate all
Post_flags é uma expressão inteira cujo valor é composto das seguintes das
máscaras elencadas a seguir:
Bit1: Não é salvo no arquivo ERROR_LOG
Bit2: Não é postado na janela de status da tela do sistema
Bit3: Não é postado ao manipulador a condição processo de leitura de novas
intruções.
Bit4: Não é postado na janela de rolagem da tela do TP
Bit5: Não é postado na janela de rolagem da tela do PC
Resp_data: variável opcional (por referência) que irá conter a resposta dada
pelo utilizador com palavra de baixo a alarm_id e alta a resposta.
Existem 6 teclas no menu direito do TP, que podem ser manipuladas pelo
usuário para atender as demandas de programas.
Cada página (arquivo xml) corresponde a definição de um grupo de teclas, que não
podem ser mais do que 6. A seguir sua sintaxe:
<?xml version="1.0"?>
<NewMenu>
<group>
<progName>GroupName</progName>
<numItems>Number</numItems>
<arName>Names</arName>
<arIconName>Icons</arIconName>
<arStatus>Colours</arStatus>
<arEnabled>Enabled</arEnabled>
<evPressed>NumberOfEvent</evPressed>
<evLongPressed> NumberOfEvent </evLongPressed>
<evReleased> NumberOfEvent </evReleased>
</group>
</NewMenu>
<arName>...</arName>
É a tag que indicará o nome a ser visualizado na página (right menu).
<?xml version="1.0"?>
<NewMenu>
<group>
<progName>group1</progName>
<numItems>4</numItems>
<arName>nomi</arName>
<arIconName>icone</arIconName>
<arStatus>colori</arStatus>
<arEnabled>en</arEnabled>
<evPressed>50100</evPressed>
<evLongPressed>50120</evLongPressed>
<evReleased>50130</evReleased>
</group>
<group>
<progName>group2</progName>
<numItems>2</numItems>
<arName>nomi</arName>
<arIconName>icone</arIconName>
<arStatus>colori</arStatus>
<arEnabled>en</arEnabled>
<evPressed>50150</evPressed>
<evLongPressed>50160</evLongPressed>
<evReleased>50170</evReleased>
</group>
</NewMenu>
---
DELAY 1000
---
END group1
<?xml version="1.0"?>
<RightMenu>
<group>
<progName>rightmenu</progName>
<numItems>5</numItems>
<arName>nomi</arName>
<arIconName>icone</arIconName>
<arStatus>colori</arStatus>
<arEnabled>en</arEnabled>
<evPressed>50100</evPressed>
<evLongPressed>50120</evLongPressed>
<evReleased>50130</evReleased>
<evShow>50000</evShow>
</group>
</RightMenu>
BEGIN
-- primeira softkey
nomi[1] := 'S1'
icone[1] := 'i1'
en[1] := TRUE
colori[1] := WIN_BLUE
-- segunda softkey
nomi[2] := 'S2'
icone[2] := 'i1'
en[2] := TRUE
colori[2] := WIN_RED
nomi[3] := 'S3'
icone[3] := 'i1'
en[3] := TRUE
colori[3] := WIN_YELLOW
nomi[4] := 'S4'
icone[4] := 'i1'
en[4] := TRUE
colori[4] := WIN_GREEN
CONDITION[1] NODISABLE :
WHEN EVENT 50100 DO
colori[1] := WIN_RED
colori[2] := WIN_GREEN
Esta variável pode ser definida através de uma declaração PDL2 ou através
do comando CONFIGURE CONTROLER STARTUP (CCS).
Para limpar o valor desta variável, basta atribuir a ela uma string vazia ou
não especificar o parâmetro de nome de programa para o comando CCS.