 Utilizando o simulador ISaGRAF

O simulador ISaGRAF Núcleo é iniciado com o depurador quando o comando "Simular" do menu "Depurar" da janela de Gerenciamento de Programa é executado. O simulador de núcleo é um sistema completo ISaGRAF destino que suporta características ISaGRAF padrão e todas as funções "C" e os blocos de função da biblioteca padrão fornecida pela CJ International. As placas E/S são simuladas graficamente em uma janela. Qualquer tipo de placa E/S pode ser simulado. As placas também definidas como "Placas Virtuais" durante a conexão E/S também são mostradas na janela de simulação.

Links com o depurador

Simulação de E/S

Componentes da biblioteca

Opções

O simulador ISaGRAF também inclui poderosas ferramentas para simulação e diagnóstico da aplicação:

Salvando e restaurando os estados de entrada

O analisador de ciclo

Scrpts de simulação


Links com o depurador

O simulador de núcleo suporta comunicação total com o depurador ISaGRAF, de forma que quaisquer possibilidades de depuração podem ser utilizadas durante a simulação. O simulador de núcleo sempre trabalha no aplicativo ISaGRAF atual. Durante a simulação, os comandos de depurador "Iniciar aplicação", "Parar aplicação", "Descarregar" ou "Atualizar aplicação" não estão mais disponíveis. O simulador não pode ser utilizado se rótulo "SIMULATE" destino não tiver sido selecionado nas opções de compilador antes de construir o código destino. O fechamento da janela de simulador implica que a janela de depurador (e qualquer janela ISaGRAF aberta durante a sessão de depuração) também está fechada.


Simulação de E/S

Placas E/S aparecem na janela de simulador, entitulada pelos seus nomes e o número do slot. Quaisquer dos tipos ISaGRAF padrão de E/Ss (booleana, analógica ou mensagem) são controladas. Os canais das placas de entrada são exibidos com botões e campos especiais. Os canais das placas de saída são exibidos com luzes gráficas de estado e campos de dados.

 	Entradas booleanas: Uma entrada booleana é representada por um botão cinza quadrado. O número do canal é exibido com o botão E/S. O valor de entrada é VERDADEIRO quando o botão é pressionado. Clicando sobre o botão o valor E/S correspondente é modificado. Utilize o botão direito do mouse para configurar a entrada quando o botão é pressionado.

 	Saídas booleanas: Uma saída booleana é representada por um pequeno círculo. O número do canal é exibido com o E/S. O valor de saída é VERDADEIRO quando o símbolo gráfico está destacado.

 	Entradas analógicas: Um canal de entrada analógica é um campo numérico simples cujo valor da entrada correspondente pode ser inserido. Clicando sobre a caixa o caractere circunflexo é exibido. Um novo valor para o canal pode ser inserido então. Não é necessário usar a tecla ENTER depois da inserção. Entradas analógicas podem ser inseridas com base decimal ou hexadecimal. Utilize os botões Para cima/Para baixo para aumentar ou diminuir o valor atual.

 	Saídas analógicas: Um canal de saída analógico é um campo de saída numérico. O valor de saída pode ser exibido como um número decimal ou hexadecimal. Nenhuma ação pode ser executada pelo usuária em um canal de saída.

 	Mensagens de entrada: Um canal de mensagem de entrada é um campo de texto simples no qual o valor da entrada correspondente é inserido. Clicando sobre a caixa o caractere circunflexo é exibido. Um novo valor para o canal pode ser inserido então. Não é necessário usar a tecla ENTER depois da inserção.

 	Mensagens de saída: Um canal de mensagem de saída é um campo de saída de texto. Nenhuma ação pode ser executada pelo usuário em um canal de saída.


Componentes da biblioteca

O simulador ISaGRAF suporta completamente as conversões padrões, as funções e blocos de função, fornecidos pela CJ International. A seguir, a lista de objetos suportados:

 Funções de conversão:

bcd, scale

 Funções:

abs, acos, ArCreate, ArRead, ArWrite, ascii, asin, atan, char, cos, delete, expt, find, insert, left, limit, log, max, mid, min, mlen, mod, mux4, mux8, odd, rand, replace, right, rol, ror, sel, shl, shr, sin, sqrt, tan, trunc

 Blocos de funções:

average, blink, cmp, ctd, ctu, ctud, derivate, f_trig, hyster, integral, lim_alrm, r_trig, rs, sema, sr, stackint, tof, ton, tp

As conversões definidas pelo usuário, funções "C " e blocos de função não estão comumente integradas com o Simulador ISaGRAF. Tipicamente, tais objetos são designados para utilizar os recursos de software e hardware do sistema destino. Tais recursos geralmente não estão disponíveis no sistema Windows. O Simulador ISaGRAF provê o seguinte comportamento padrão para qualquer conversão definida pelo usuário, função ou bloco de função:

•	Quando uma nova conversão é processada pelo simulador, é substituído por uma conversão "nula ". Isto significa que o valor físico das variáveis analógicas sempre é igual ao valor elétrico (como inserido ou exibido no painel de Simulador).

•	Quando uma nova função "C " ou bloco de função é executado pelo simulador, não processa nenhuma operação. O valor de resultado não é fixado.


Opções

Os comandos do menu "Opções" permitem que o usuário controle a exibição de E/Ss no painel de simulador. O usuário pode fixar ou pode remover estas opções a qualquer hora durante a depuração.

 Quando a opção "Exibição em cores" está ativa, os canais E/S são exibidos como bitmaps de cor. Se as cores não podem ser distinguidas em algumas telas LCD, o usuário deve remover esta opção, para obter gráficos de entrada e saída em preto e branco puro para canais E/S.

 Quando a opção "Nomes de variáveis" está ativa, um rótulo é exibido ao lado de qualquer canal E/S, com o nome da variável E/S conectada. Removendo esta opção permite que o usuário reduza o tamanho do painel de simulador.

 Quando a opção "Valores em hexadecimal" está ativa, qualquer canal de entrada ou saída analógico é exibido ou inserido no formato hexadecimal.

 Quando a opção "Sempre visível" está ativa, a janela de simulador sempre é visível, até mesmo se o foco de entrada está em outra janela.


O analisador do ciclo

O Analisador de Ciclo ISaGRAF é uma ferramenta de diagnóstico poderosa que mostra como o tempo de ciclo é distribuído entre os vários programas, funções e blocos de função de um aplicativo. Esta ferramenta é muito útil para se ter um diagnóstico rápido nos desempenhos do aplicativo, e conduz o programador às partes do código que possam precisar de otimizações.

O Analisador de Ciclo é executado pelo comando "Ferramentas / Analisador de ciclo" nos menus da janela de Simulador ISaGRAF. Exibe, para cada programa, função ou bloco de função, a porcentagem do tempo de ciclo gasto para executá-lo:

Quando a opção "Exibir / Média" está ativa, a informação exibida é uma média das porcentagens calculada desde que o aplicativo foi iniciado, ou desde a última vez que o comando "Exibir / Inicializar" foi executado.

Se a opção "Exibir / Média" não está ativa, a informação exibida mostra as medidas feitas durante a execução do último ciclo. Você também pode utilizar esta característica quando o aplicativo estiver no modo "Ciclo a Ciclo" para ter um conjunto de medidas dependendo do contexto do aplicativo.

Utilize o comando "Exibir / Copiar" para copiar nomes de programa e porcentagens para a área de transferência do Windows no formato ASCII. Então, os dados podem ser colados em documentos de texto ou planilhas eletrônicas comuns.

Notas importantes:

Estas não são medidas precisas. Cálculo de porcentagem está baseado na contagem de instruções TIC, levando em conta os vários tempos de execução de instrução. O cálculo não inclui o tempo gasto em funções "C" e blocos de função.

O valor exibido para uma função ou um bloco de função é a soma de todos os "tempos de chamada" dos programas de aplicativo no mesmo ciclo.

O cálculo de tempo está baseado no código TIC e não fornece informação segura se o código de aplicativo atual é gerado em linguagem "C" e construído utilizando um compilador "C".


Scripts de simulação

O simulador ISaGRAF inclui uma ferramenta para construir e executar script de simulação. Um script é descrito com um fácil ST como linguagem texto e é utilizado para automatizar testes com o simulador de ISaGRAF.

Editando scripts

Rodando scripts

Descrição da linguagem de scripts

A simulação do editor de script é executado pelo comando "Scripts de simulação" da janela Simulador. A seguir, o quadro do editor de script:

A janela superior é um editor de texto no qual são inseridas instruções de script. É utilizado como outros editores de texto ISaGRAF e inclui características de alto nível tais como seleção de mouse de um símbolo variável. Você pode utilizar os comandos do menu "Opções" para configurar a tabulação e selecionar uma fonte de caractere.

A janela inferior mostra todas as mensagens de saída quando o script é executado. A linha de separação entre as janelas pode ser movido livremente para redimensionar as janelas. A janela de saída pode ser escondida durante a edição de script, mas é automaticamente aberta toda vez que um script é executado.


Editando scripts

Utilize os comandos do menu "Arquivo" para gerenciar arquivos de script:

Novo	cria um novo script sem nome

Abrir	carrega um arquivo de script existente

Salvar	salva o texto de script e o conteúdo da janela de saída no disco, no diretório do projeto

Salvar como	salva o script com outro nome

São criados dois arquivos no diretório de projeto ISaGRAF para cada script:

<nome_do_script>.SCC	texto do script (instruções)

<nome_do_script>.SCO	conteúdo da janela de saída

sendo que <nome_do_script>  é o nome do script. Ambos os arquivos são arquivos de texto padrão e podem ser abertos utilizando qualquer outro editor de texto.

 Durante a edição de um script, você pode utilizar o comando "Editar / Inserir símbolo" para selecionar um nome de variável declarado a ser inserido na posição do sinal de circunflexo.


Executando scripts

O script deve ser conferido e compilado antes de ser executado. Se necessário, a verificação de sintaxe é executada automaticamente em um comando "Executar script". Utilize os seguintes comandos do menu "Script":

Verificar	verifica a sintaxe e compila o script

Executar script	inicia a execução do script atualmente editado

No caso de um novo script sem nome, ele deve ser salvo (e um nome deve ser dado) antes de sua conferência. No caso de um script nomeado, o script é salvo automaticamente no disco antes de verificação de sintaxe.

Quando o script estiver em andamento, seus conteúdos não podem ser modificados. Uma mensagem é exibida quando o fim do script é alcançado. Você também pode abortar um script em andamento utilizando o seguinte comando do menu "Script":

Interromper script	interrompe a execução do script

A execução do script é realizada entre ciclos destinos. No caso de um "loop" infinito programado pelo ciclo, o simulador ISaGRAF assegura que este "loop" é sempre quebrado de forma que ciclos ISaGRAF são ainda executados e outros aplicativos ISaGRAF não são bloqueados. O intérprete de script ISaGRAF decide interromper a execução do script se a mesma "etiqueta" é encontrada mais de uma vez no mesmo ciclo destino. A execução de script também pode ser interrompida normalmente pelas instruções "Cycle" ou "Wait".


Linguagem de descrição dos scripts

A linguagem de descrição de script é uma linguagem de texto muito simples semelhante ao ST, mas na qual cada instrução é inserida em uma linha de texto separada, e não precisa ser terminada por um ponto-e-vírgula. Utilize o seguinte botão da barra de ferramentas para conhecer a lista de instruções disponíveis e inserir uma palavra chave n posição do sinal circunflexo:

insere instrução (palavra chave e ajuda como comentários)

Há vários tipos de instruções. Primeiro é a assignment (valor forçado) de uma variável:

:=	assignment

Outras instruções permitem a saída de mensagens pela janela de saída:

Print	imprime um texto ou um valor de variável

PrintTime	imprime a hora local atual

Outras instruções são utilizadas para sincronizar as instruções de script com o ciclo ISaGRAF:

Cycle	deixa o simulador ISaGRAF executar um ciclo

Wait	espera durante tempo determinado

Outras instruções são utilizadas para controlar o fluxo de instrução no script:

Labels	podem ser colocados em qualquer lugar no script

Goto	desvio incondicional para um rótulo (label)

If goto	desvio condicional para um rótulo (label)

End	termina o script

A linguagem de script não faz distinção entre maiúscula/minúscula. Comentários podem ser inseridos ao término de qualquer linha de texto. Comentários também podem ser escritos de acordo com as convenções ST (entre caracteres "(*" e "*)" ), ou prefixado por um caractere " ;".


":=" Assignment

Significado:	Força o valor de uma variável ISaGRAF. Pode ser uma variável interna, um canal de entrada ou um canal de saída.

Sintaxe:	<nome_da_variável> := <expressão_constante>

<nome_da_variável> = <expressão_constante>

Argumentos:	< nome_da_variável > é um símbolo válido de uma variável de aplicativo declarada, ou uma variável E/S diretamente representada que utilizando convenções de escrita  "% ".

<expressão_constante>  é uma expressão constante válida que combina com o tipo da variável especificada. Para booleanos, "0" e "1" pode ser utilizado em vez de "FALSO" e "VERDADEIRO". Para temporizadores, o prefixo "T#" ou "TEMPO#" pode ser omitido.

Notas:	Variável de entrada forçada por um script não precisa ser bloqueada. O desenho do canal de entrada correspondente é atualizado quando a variável de entrada é forçada por um script.

Aviso: não force uma variável analógica de entrada ou de saída atrelada a uma conversão, já que a execução de script não suporta funções de conversão ou tabelas.

Exemple:	MyBooVar := 1         (* o mesmo que TRUE *)

MyIntVar := 1234

MyRealVar := 1.2345

MyMsgVar := 'Hello'

MyTmrVar := t#12s


Print

Significado:	Escreve uma cadeia ou o valor de uma variável na janela de saída. O texto é escrito como uma nova linha no fim de um texto já escrito na janela de saída.

Sintaxe:	Print '<text>'

Print <nome_da_variável>

Argumentos:	<text> é qualquer cadeia de texto expresso entre aspas simples

<nome_da_variável> é um símbolo válido de uma variável de aplicativo declarada, ou uma variável E/S diretamente representada que utilizando convenções de escrita  "% ".

Notas:	Saída de valores variáveis sempre é formatada de acordo com convenções de IEC.

Exemplo:	Print 'Hello'

Print MyBooVar

Saída:	Hello

MyBoovar = TRUE


PrintTime

Significado:	Escreve uma cadeia ou o valor de uma variável na janela de saída. O texto é escrito como uma nova linha no fim de um texto já escrito na janela de saída.

Sintaxe:	PrintTime

Notas:	A hora atual é formatada de acordo com a configuração atual do Sistema Windows

Exemplo:	Print 'Time now is:'

PrintTime

Saída:	Time now is:

15:45:22


Cycle

Significado:	. Suspende a execução do script até que o próximo ciclo ISaGRAF seja executado.

Sintaxe:	Cycle

Notas:	São executadas instruções de script no início de um ciclo ISaGRAF. Se o simulador estiver no modo "Ciclo a Ciclo", a instrução  "cycle" é imediatamente seguida por um ciclo. As instruções seguintes do script serão executadas no próximo comando "Executar um ciclo" do depurador.

Exemplo:	(* the ISaGRAF program copies A to B *)

A := 0

Cycle

Print B

A := 1

Print B (* no cycle performed / B not set to 1 *)

Cycle

Print B

Saída:	B = 0

B = 0

B = 1


Wait

Significado:	. Suspende a execução do script durante tempo determinado (delay).

Sintaxe:	Wait <delay>

Argumentos:	<delay> atraso expresso de acordo com convenções IEC para expressões de constante de tempo. O prefixo "T#" ou "TEMPO#" pode ser omitido. O valor de atraso deve estar entre 10 milisegundos e 1 hora.

Notes:	A precisão da instrução "Wait" não é grande já que depende do sistema Windows host. Também, o atraso deve ser considerado com uma precisão de mais ou menos um ciclo ISaGRAF.

Quando uma instrução "Wait" é alcançada, ciclos ISaGRAF são executados até que o atraso esteja transcorrido e antes de continuar a execução de script.

Exemplo:	PrintTime

Wait 2s

PrintTime

Saída:	15:45:27

15:45:29


Labels

Significado:	Rótulos podem ser colocadas em qualquer lugar no script. Eles são utilizados como um destino através de instruções "Goto" e permitem o controle de fluxo para instruções de script.

Sintaxe:	<nome_do_label>:

Argumentos:	<nome_do_label> nome único de acordo com as convenções de nome de variável ISaGRAF: limitado a 16 caracteres, começando com uma letra, seguido por letras, algarismos ou caractere sublinha. Quando definido, o nome do rótulo deve ser seguido por um caractere " :".

Notes:	Nenhuma instrução deve ser colocada na linha em que uma etiqueta está definida.

O nome de etiqueta não deve ser igual a de uma variável de símbolo declarado ISaGRAF

Exemplo:	(* exemplo de um script com "loop" infinito *)

loop:

PrintTime

Wait 1s

Goto loop


Goto

Significado:	Desvio incondicional para um rótulo

Sintaxe:	Goto <nome_do_label>

Argumentos:	<nome_do_label> é o nome de um rótulo definido no script.

Notas:	São permitidos desvios para trás. No caso de um "loop" infinito, a execução do script está automaticamente interrompida em cada "loop" para preservar a execução de ciclos ISaGRAF.

Exemplo:	Print 'Before Jump'

Goto MyLabel

Print 'Within Jump' (* instrução nunca executada *)

MyLabel:

Print 'After Jump'

Saída:	Before Jump

After Jump


If Goto

Significado:	Desvio condicional para um rótulo. A condição é uma comparação entre ou duas variáveis ISaGRAF ou entre uma variável e uma expressão constante.

Sintaxe:	If <var1> test <var2> Goto <nome_do_label>

If <var1> test <expressão_constante> Goto <nome_do_label>

Os testes comparativos disponíveis são:

=	verdadeiro se ambos os membros têm o mesmo valor

<>	verdadeiro se os membros têm valores diferentes

<	verdadeiro se o primeiro membro é menor que o segundo

<=	verdadeiro se o primeiro membro é menor ou igual ao segundo membro

>	verdadeiro se o primeiro membro é maior que o segundo

>=	verdadeiro se o primeiro membro é maior ou igual ao segundo membro

Argumentos:	<var1> <var2> são símbolos válidos de variáveis de aplicativo declaradas, ou variáveis E/S diretamente representadas que utilizam as convenções de escrita "% ".

<expressão_constante>  é uma expressão constante válida que combina com o tipo da variável especificada. Para booleanos, "0" e "1" pode ser utilizado em vez de "FALSO" e "VERDADEIRO". Para temporizadores, o prefixo "T#" ou "TEMPO#" pode ser omitido.

<nome_do_label> é o nome de um rótulo definido no script.

Notas:	São permitidos desvios para trás. No caso de um loop infinito, a execução do script está automaticamente interrompida em cada loop para preservar a execução de ciclos ISaGRAF.

Exemplo:	(* Este script executará "loops" até MyVar ser TRUE *)

Loop:

If MyVar = TRUE Goto TheEnd

Print MyVar

Goto Loop

TheEnd:


End

Meaning:	Interrompe o script

Sintaxe:	End

Notes:	Não é obrigatório colocar a instrução "End" na última linha do script

Exemplo:	(* Este script executará "loops" até MyVar ser TRUE *)

Loop:

If MyVar = FALSE Goto Continue

End

Continue:

Print MyVar

Goto Loop


Salvando e restaurando os estados de entrada

Utilizando o simulador ISaGRAF, os canais de entrada são forçados através de operações manuais, atuando sobre botões de dois estados e controles de edição do painel de simulação. Você pode a qualquer hora utilizar os seguintes comandos do menu "Ferramentas" para salvar e restaurar o estado de todos os canais de entrada:

Carregar esquema de entrada	Fixa valores de canais de entrada com valores armazenados em um arquivo criado em 	disco pelo comando "Salvar esquema de entrada" .

Salvar esquema de entrada	Salva o estado dos canais de entrada em um arquivo de forma que eles possam ser 	restaurados mais tarde utilizando o comando "Carregar esquema de entrada". O arquivo é 	armazenado no diretório de projeto e assim é salvo com outros arquivos de projeto pelo 	utilitário de arquivo ISaGRAF.

Nota:. Somente canais de entrada nomeados (aqueles tendo uma variável conectada) são salvos em disco.