Você está na página 1de 124

Manual de Utilizao

AL-2005/RTMP
Rev. E 05/2006
Cd. Doc.: MU207006

altus

Condies Gerais de Fornecimento

Nenhuma parte deste documento pode ser copiada ou reproduzida sem o consentimento prvio e por
escrito da Altus Sistemas de Informtica S.A., que se reserva o direito de efetuar alteraes sem
prvio comunicado.
Conforme o Cdigo de Defesa do Consumidor vigente no Brasil, informamos a seguir, aos clientes
que utilizam nossos produtos, aspectos relacionados com a segurana de pessoas e instalaes.
Os equipamentos de automao industrial fabricados pela Altus so robustos e confiveis devido ao
rgido controle de qualidade a que so submetidos. No entanto, equipamentos eletrnicos de controle
industrial (controladores programveis, comandos numricos, etc.) podem causar danos s mquinas
ou processos por eles controlados em caso de defeito em suas partes e peas ou de erros de
programao ou instalao, podendo inclusive colocar em risco vidas humanas.
O usurio deve analisar as possveis conseqncias destes defeitos e providenciar instalaes
adicionais externas de segurana que, em caso de necessidade, sirvam para preservar a segurana do
sistema, principalmente nos casos da instalao inicial e de testes.
imprescindvel a leitura completa dos manuais e/ou caractersticas tcnicas do produto antes da
instalao ou utilizao do mesmo.
A Altus garante os seus equipamentos conforme descrito nas Condies Gerais de Fornecimento,
anexada s propostas comerciais.
A Altus garante que seus equipamentos funcionam de acordo com as descries contidas
explicitamente em seus manuais e/ou caractersticas tcnicas, no garantindo a satisfao de algum
tipo particular de aplicao dos equipamentos.
A Altus desconsiderar qualquer outra garantia, direta ou implcita, principalmente quando se tratar
de fornecimento de terceiros.
Pedidos de informaes adicionais sobre o fornecimento e/ou caractersticas dos equipamentos e
servios Altus devem ser feitos por escrito. A Altus no se responsabiliza por informaes fornecidas
sobre seus equipamentos sem registro formal.
DIREITOS AUTORAIS
Srie Ponto, MasterTool, Quark, ALNET e WebPLC so marcas registradas da Altus Sistemas de
Informtica S.A.
IBM marca registrada da International Business Machines Corporation.

Sumrio

Sumrio
1. INTRODUO........................................................................................................................................... 6
O Real-Time Multitasking Processor ......................................................................................................... 6
Aplicaes do Processador Multitarefa AL-2005 ....................................................................................... 6
Documentos Relacionados a este Manual................................................................................................... 7
Inspeo Visual............................................................................................................................................ 7
Suporte Tcnico........................................................................................................................................... 7
Mensagens de Advertncia Utilizadas neste Manual ................................................................................. 8
2. DESCRIO TCNICA.......................................................................................................................... 10
Descrio do Painel ................................................................................................................................... 10
Caractersticas Tcnicas............................................................................................................................ 11
Caractersticas Gerais.......................................................................................................................... 11
Arquitetura do Processador Multitarefa AL-2005................................................................................... 12
Caractersticas do Equipamento............................................................................................................... 12
Dimenses Fsicas...................................................................................................................................... 12
Dados para Compra.................................................................................................................................. 13
Itens Integrantes .................................................................................................................................. 13
Cdigo do Produto .............................................................................................................................. 13
Produtos Relacionados ........................................................................................................................ 13
3. CONFIGURAO ................................................................................................................................... 14
Ambiente de Desenvolvimento de Aplicaes para o AL-2005 ................................................................ 15
F-2005.016 - Funo de Comunicao CP com o AL-2005 ...................................................................... 15
O Carregador de Aplicativos AL-3860..................................................................................................... 16
Boto Selecionar ................................................................................................................................. 17
Boto Enviar ....................................................................................................................................... 17
Boto Cancelar.................................................................................................................................... 17
Boto Programao ............................................................................................................................. 17
Boto Execuo .................................................................................................................................. 18
Boto Apagar ...................................................................................................................................... 18
Boto Diretrio ................................................................................................................................... 18
Boto Porta Serial ............................................................................................................................... 18
Boto Sobre ........................................................................................................................................ 19
Boto Fechar....................................................................................................................................... 19
4. SISTEMA OPERACIONAL .................................................................................................................... 20
Escalonador de Tarefas ....................................................................................................................... 20
Supervisor de Interrupes .................................................................................................................. 26
Temporizaes .................................................................................................................................... 26
Mensagens .......................................................................................................................................... 28
Gerenciadores ..................................................................................................................................... 30
Entrada/Sada...................................................................................................................................... 36
Relgio e Sincronismo ........................................................................................................................ 38
Outros Servios................................................................................................................................... 38
5. PROGRAMAO.................................................................................................................................... 40
ii

Sumrio
Funes da Biblioteca de Suporte............................................................................................................. 41
AddBlockUseCount ............................................................................................................................ 41
AddBottomList ................................................................................................................................... 41
AddBufferUseCount............................................................................................................................ 42
AddTopList......................................................................................................................................... 42
BeginInterrupt..................................................................................................................................... 42
ChangeInterruptHandler ...................................................................................................................... 43
ChangeTaskPriority............................................................................................................................. 43
CreateBufferPool ................................................................................................................................ 43
CreateResource ................................................................................................................................... 44
CreateSemaphore ................................................................................................................................ 44
CreateTask.......................................................................................................................................... 45
CreateTimer ........................................................................................................................................ 45
DeleteBufferPool ................................................................................................................................ 46
DeleteResource ................................................................................................................................... 46
DeleteSemaphore ................................................................................................................................ 47
DeleteTask.......................................................................................................................................... 47
DeleteTimer ........................................................................................................................................ 48
Disable................................................................................................................................................ 48
EmuInit............................................................................................................................................... 48
Enable49
EndInterrupt........................................................................................................................................ 49
EndTask.............................................................................................................................................. 49
EscreveLeds........................................................................................................................................ 49
FillBlock............................................................................................................................................. 50
FreeBlock ........................................................................................................................................... 50
FreeBuffer........................................................................................................................................... 51
FreeEventGroup.................................................................................................................................. 51
GenerateInterrupt ................................................................................................................................ 52
GetBlock............................................................................................................................................. 52
GetBlockSize ...................................................................................................................................... 53
GetBlockUsingHandle......................................................................................................................... 53
GetBottomList .................................................................................................................................... 54
GetBuffer ............................................................................................................................................ 54
GetBufferSize ..................................................................................................................................... 54
GetEventGroup ................................................................................................................................... 55
GetHandle........................................................................................................................................... 55
GetIDCoproc....................................................................................................................................... 56
GetMailboxMessage............................................................................................................................ 56
GetNumTab ........................................................................................................................................ 57
GetTamTab......................................................................................................................................... 57
GetTaskDescriptor .............................................................................................................................. 57
GetTaskID .......................................................................................................................................... 58
GetTaskStatus ..................................................................................................................................... 58
GetTime.............................................................................................................................................. 58
GetTopList.......................................................................................................................................... 59
HookPLC............................................................................................................................................ 59
InByte60
InWord ............................................................................................................................................... 60
KillTask.............................................................................................................................................. 60
LocateTask ......................................................................................................................................... 61
Offset 61
OutByte .............................................................................................................................................. 62
OutWord............................................................................................................................................. 62
ReadOp............................................................................................................................................... 62
ReadOpSwap ...................................................................................................................................... 63
iii

Sumrio
ReadPLC ............................................................................................................................................ 65
ReadTab ............................................................................................................................................. 67
ReadTabs ............................................................................................................................................ 68
ReadTabSwap ..................................................................................................................................... 69
ReadTimer .......................................................................................................................................... 70
ReleaseNestedResource....................................................................................................................... 71
ReleaseResource ................................................................................................................................. 71
ReserveResource................................................................................................................................. 72
ResetBufferPool.................................................................................................................................. 72
ResetBufferPools ................................................................................................................................ 73
ResetList............................................................................................................................................. 73
ResetPendingWake ............................................................................................................................. 74
ResetTaskWake................................................................................................................................... 74
RXBlock............................................................................................................................................. 74
RXByte............................................................................................................................................... 75
Segment .............................................................................................................................................. 76
SendMessage ...................................................................................................................................... 77
SendMessageWait ............................................................................................................................... 77
SerialConfig........................................................................................................................................ 78
Descrio ............................................................................................................................................ 78
SetInterrupt ......................................................................................................................................... 79
SetOffset ............................................................................................................................................. 80
SetSegment ......................................................................................................................................... 80
SetTime .............................................................................................................................................. 80
SignalEvent......................................................................................................................................... 81
SignalSemaphore ................................................................................................................................ 81
StartStopTimer.................................................................................................................................... 82
StartTask............................................................................................................................................. 82
StopTask............................................................................................................................................. 82
TimeConvert ....................................................................................................................................... 83
TXBlock ............................................................................................................................................. 83
TXByte............................................................................................................................................... 84
Wait 85
WaitEvent ........................................................................................................................................... 85
WaitSemaphore................................................................................................................................... 86
WaitTime............................................................................................................................................ 86
WakeCallingTask................................................................................................................................ 87
WakeTask........................................................................................................................................... 87
WriteOp .............................................................................................................................................. 88
WriteOpSwap ..................................................................................................................................... 89
WritePLC............................................................................................................................................ 91
WriteTab............................................................................................................................................. 92
WriteTabs ........................................................................................................................................... 93
WriteTabSwap .................................................................................................................................... 94
Sintaxe................................................................................................................................................ 95
6. DESENVOLVENDO UMA APLICAO PARA O AL-2005................................................................ 97
Instalao do Ambiente de Desenvolvimento ........................................................................................... 97
Diretrio INCLUDE............................................................................................................................ 97
Diretrio LIB ...................................................................................................................................... 97
Diretrio UTIL.................................................................................................................................... 97
Diretrio AL3860................................................................................................................................ 97
Diretrio SUPORTE ........................................................................................................................... 97
Diretrio TD2005................................................................................................................................ 98
Diretrio DOCS .................................................................................................................................. 98
iv

Sumrio
Diretrios DEMOCOM e DEMOCALC.............................................................................................. 98
Utilizando os Programas DEMO ............................................................................................................ 101
Descrio do Programa DEMOCOM..................................................................................................... 106
Descrio do Programa DEMOCALC ................................................................................................... 107
Compilando os Programas DEMOCOM e DEMOCALC .................................................................... 108
Depurao dos Programas DEMO ......................................................................................................... 109
Verso para Depurao ..................................................................................................................... 109
Verso para Carga em Flash EPROM................................................................................................ 113
7. INSTALAO........................................................................................................................................ 115
Instalao Mecnica e Eltrica ............................................................................................................... 115
Conexes Gerais ............................................................................................................................... 116
Interfaces Seriais ............................................................................................................................... 116
Instalao dos Mdulos Seriais.......................................................................................................... 117
Instalao do CD ..................................................................................................................................... 117
8. MANUTENO ..................................................................................................................................... 118
Diagnsticos............................................................................................................................................. 118
Teste das Interfaces Seriais..................................................................................................................... 118
Identificando Problemas ......................................................................................................................... 119
Manuteno Preventiva .......................................................................................................................... 119
9. GLOSSRIO .......................................................................................................................................... 120

1. Descrio Tcnica

1. Introduo
O Real-Time Multitasking Processor
O Real-Time Multitasking Processor AL-2005 um processador de comunicao e de algoritmos
que opera em conjunto com as UCPs AL-2003 ou AL-2004.
O Processador Multitarefa AL-2005 pode executar tarefas diversas tais como comunicao com
outros equipamentos utilizando protocolos quaisquer e programas aplicativos escritos em linguagem
de alto nvel (linguagem "C").
Os aplicativos do processador multitarefa so desenvolvidos utilizando-se uma biblioteca de funes
prpria do AL-2005.
O processador multitarefa AL-2005 possui sistema operacional multitarefa de tempo real preemptivo
que permite a execuo de vrios mdulos de programa simultaneamente, acessando a memria
imagem da UCP de forma concorrente.
O AL-2005 permite que sejam acoplados at dois mdulos seriais. Cada um destes mdulos
implementa um padro fsico de comunicao diferente (AL-2405/485I para o padro RS-485,
AL-2405/232 para o padro RS-232C).
Sob o ponto de vista do programa aplicativo no CP, toda a comunicao entre o processador
Multitarefa AL-2005 e a UCP realizada por meio de uma memria de operandos compartilhada.
Deve-se utilizar no programa do CP uma ou mais chamadas a uma funo de comunicao com o
Processador Multitarefa AL-2005 (mdulo F-2005.016). Este mdulo funo permite que o AL-2005
obtenha acesso a memria imagem dos operandos do CP, podendo realizar a leitura ou escrita dos
operandos do CP.
Atravs da conexo de um microcomputador padro IBM-PC ao Processador Multitarefa AL-2005
pode-se realizar carga e depurao de programas aplicativos. Para tanto deve-se utilizar o carregador
AL-3860, fornecido no CD que acompanha o produto, e o canal serial dedicado para carga de
programa no Processador Multitarefa AL-2005.

Aplicaes do Processador Multitarefa AL-2005


O Processador Multitarefa AL-2005/RTMP pode ser utilizado para realizar tarefas de alta
complexidade liberando o processador principal do CP para realizar suas tarefas convencionais, tais
como varredura e acionamento, permitindo uma distribuio mais equilibrada da carga de
processamento entre os dois processadores.
O processador AL-2005 suporta a escrita de aplicaes seqenciais tradicionais ou aplicaes
multitarefa. Esta ltima permite um maior aproveitamento do tempo do processador, uma vez que
qualquer tarefa que no necessita da UCP em um determinado momento, pode liber-la para outra
tarefa ou aplicao.
Este manual inclui a descrio do ambiente de desenvolvimento para aplicaes no AL-2005, bem
como fornece uma referncia A-Z das funes da biblioteca do sistema.
O programa executivo do AL-2005, tambm chamado de BIOS, um sistema operacional multitarefa
de tempo real preemptivo, que suporta a execuo simultnea de vrios programas aplicativos. Para
tanto, torna disponvel ao projetista de aplicaes, uma biblioteca de funes.
Atravs do suporte desta biblioteca de funes possvel:

desenvolver aplicativos multitarefa utilizando funes de criao de tarefas, espera de eventos,


espera de recursos, semforos, identificao de tarefas etc.
6

1. Descrio Tcnica

utilizar aritmtica de ponto flutuante.

realizar alocao dinmica de memria.

acessar os operandos do CP, atravs de funes de escrita e leitura a operandos simples e tabelas.

acessar as placas seriais conjugadas ao hardware do AL-2005, nos padro RS-485 ou RS-232C.

Documentos Relacionados a este Manual


Para obter informaes adicionais sobre o processador AL-2005 podem ser consultados outros
documentos (manuais e caractersticas tcnicas) alm deste. Estes documentos encontram-se
disponveis em sua ltima reviso em www.altus.com.br.
Cada produto possui um documento denominado Caracterstica Tcnica (CT), onde encontram-se as
caractersticas do produto em questo. Adicionalmente o produto pode possuir Manuais de Utilizao
(o cdigo do manuais so citados na CT).
Aconselha-se os seguintes documentos como fonte de informao adicional:
Manual de Utilizao do AL-2003.
Manual de Utilizao do AL-2004.
Manual de Programao do MT4100.

Inspeo Visual
Antes de proceder instalao, recomendvel fazer uma inspeo visual cuidadosa dos
equipamentos, verificando se no h danos causados pelo transporte. Verifique se todos os
componentes de seu pedido esto em perfeito estado. Em caso de defeitos, informe a companhia
transportadora e o representante ou distribuidor Altus mais prximo.
CUIDADO:
Antes de retirar os mdulos da embalagem, importante descarregar eventuais potenciais
estticos acumulados no corpo. Para isso, toque (com as mos nuas) em uma superfcie
metlica aterrada qualquer antes de manipular os mdulos. Tal procedimento garante que os
nveis de eletricidade esttica suportados pelo mdulo no sero ultrapassados.
importante registrar o nmero de srie de cada equipamento recebido, bem como as revises de
software, caso existentes. Essas informaes sero necessrias caso se necessite contatar o Suporte
Tcnico da Altus.

Suporte Tcnico
Para entrar em contato com o Suporte Tcnico da Altus em So Leopoldo, RS, ligue para +55-513589-9500. Para conhecer os centros de Suporte Tcnico da Altus existentes em outras localidades,
consulte nosso site (www.altus.com.br) ou envie um email para altus@altus.com.br.
Se o equipamento j estiver instalado, tenha em mos as seguintes informaes ao solicitar
assistncia:

os modelos dos equipamentos utilizados e a configurao do sistema instalado


o nmero de srie da UCP
a reviso do equipamento e a verso do software executivo, constantes na etiqueta afixada na
lateral do produto
informaes sobre o modo de operao da UCP, obtidas atravs do programador MasterTool
o contedo do programa aplicativo (mdulos), obtido atravs do programador MasterTool
a verso do programador utilizado

1. Descrio Tcnica

Mensagens de Advertncia Utilizadas neste Manual


Neste manual, as mensagens de advertncia apresentaro os seguintes formatos e significados:
PERIGO:
Relatam causas potenciais, que se no observadas, levam a danos integridade fsica e sade,
patrimnio, meio ambiente e perda da produo.

CUIDADO:
Relatam detalhes de configurao, aplicao e instalao que devem ser seguidos para evitar
condies que possam levar a falha do sistema e suas consequncias relacionadas.

ATENO:
Indicam detalhes importantes de configurao, aplicao ou instalao para obteno da mxima
performance operacional do sistema.

1. Descrio Tcnica

2. Descrio Tcnica

2. Descrio Tcnica
Este captulo apresenta as caractersticas tcnicas do produto AL-2005, abordando as partes
integrantes do sistema, sua arquitetura, caractersticas gerais e eltricas.

Descrio do Painel
A figura 2-1 mostra o painel do produto AL-2005.

Canal auxiliar

Placa Interface de
Comunicao

Canais de
comunicao
(A e B)

Figura 2-1: Painel do Processador AL-2005

10

2. Descrio Tcnica

Caractersticas Tcnicas
Caractersticas Gerais
AL-2005
Tipo de mdulo

Real Time Multitasking Processor

Processador

80C186 20 MHz 16 bits

Memria RAM

256 Kb (64 Kb ocupados pela BIOS)

Memria Flash para


aplicativos

256 Kb (64 Kb ocupados pela BIOS)

Carga de programas
aplicativos no processador

Via canal serial atravs do carregador AL-3860

Sistema operacional

Multitarefa preemptivo

Linguagem de Programao
dos aplicativos

Linguagem "C"

Comunicao com o CP

Atravs de mdulo F chamado por meio de uma instruo CHF

Acesso aos operandos do CP

Via memria imagem

Barramentos de dados
internos

16 bits

Velocidade canal serial

Com apenas um canal serial : 38400 bauds


Com dois canais: 19200 bauds

Tempo mximo para


desligamento do sinal de RTS

Com uma placa AL-2405: 150uS

Nmero mximo de tarefas em


cada AL-2005

Taxa de transferncia de
dados com memria imagem
da UCP

Melhor que 1 Mbyte/s

Portas Seriais COM1 e COM2

RS232C ou RS-485 conforme interface de comunicao


AL-2405
850 mA @ 5 Vcc

Consumo

Com duas placas AL-2405: 950uS

considerar consumo de placas adicionais conectadas ao


Processador AL-2005
Nvel de severidade de
descargas eletrostticas (ESD)

Conforme a norma IEC 1131 nvel 3

Imunidade a rudo eltrico tipo


onda oscilatria

Conforme norma IEC1131, nvel de severidade A e IEEE


C37.90.1 (SWC)

Proteo contra choque


eltrico

Conforme norma IEC-536 (1976), classe I, quando instalado em


bastidor

Peso

Sem embalagem: 500 g


Com embalagem: 700 g

Umidade relativa do ar

5 a 95% sem condensao

Indicao de estado

4 LEDs indicadores de estado

Temperatura mxima de
operao

60 C

Temperatura de armazenagem

-25 a 70 C

Tabela 2-1 Caractersticas Tcnicas Gerais

11

2. Descrio Tcnica

Arquitetura do Processador Multitarefa AL-2005


Um sistema de tempo real se caracteriza pela necessidade de responder adequadamente a eventos
ocorridos assincronamente no tempo. Um sistema multitarefa um conjunto de atividades ou tarefas
que podem ser realizados sem interferncia em outros processos. Um sistema com vrias tarefas que
devem ser executadas simultaneamente e com um tempo de execuo crtico chamado de "real-time
multitasking system".
O processador AL-2005 implementa um sistema operacional multitarefa, o que facilita a soluo de
sistemas de tempo real. O sistema operacional do AL-2005 utiliza um mtodo de "time-slice"
(mtodo de tempo compartilhado) para a execuo de aplicativos independentes uns dos outros.
Cada aplicativo pode possuir um conjunto de tarefas. O chaveamento de tarefas segue o mtodo
preemptivo (prioridade de tarefa). Portanto o sistema operacional do processador AL-2005 segue
dois mtodos:
Time-slice: tempo compartilhado para cada aplicao residente no AL-2005.
Preemptivo: para cada tarefa de um determinado aplicativo deve-se atribuir uma prioridade de
execuo. As tarefas podem ser interrompidas por uma de maior prioridade.
A arquitetura do processador AL-2005 baseada no microprocessador de 16 bits Intel 80C186, que
possui elevada integrao de recursos de hardware e especialmente indicado para aplicaes
industriais. O cdigo das instrues deste microprocessador compatvel com o dos demais
microprocessadores da Intel utilizados nos computadores IBM PC (80386, 80486, etc.).

Caractersticas do Equipamento
Dimenses Fsicas
Dimenses em milmetros.

12

2. Descrio Tcnica

Dados para Compra


Itens Integrantes
A embalagem do produto contm um
Mdulo AL-2005/RTMP: processador AL-2005/RTMP (Real Time Multitasking Processor)
CD Card com os seguintes itens:
o Mdulo funo de interface UCP/AL-2005: F-2005.016.
o Carregador AL-3860.
o Biblioteca de Funes.
o Programas Exemplos: DEMOS.
o Manual de Utilizao.
o Tutorial.
Cdigo do Produto
O seguinte cdigo deve ser usado para compra do produto:
Cdigo

Denominao

AL-2005

Real Time Multitask Processor

Produtos Relacionados
Os seguintes produtos devem ser adquiridos separadamente quando necessrio:
Cdigo

Denominao

AL-2405/485I

Mdulo serial RS-485 isolado

AL-2405/232

Mdulo serial RS-232C

AL-1340

Cabo DB25 P2 Estreo

AL-1327 ou AL-1715

Cabo DB9-RJ45 PC/AL-2005

AL-2302

Cabo DB9 macho para rede RS-485

MT4100

Programador MasterTool

ATENO:
Para o desenvolvimento de programas aplicativos para o processador AL-2005 obrigatria a
utilizao do compilador Borland C++ verso 3.1, nos modelos de memria LARGE ou SMALL.
Alm do compilador, necessrio tambm o utilitrio de relocao LOCATE da Paradigm, verso
4.0.

ATENO:
Para aquisio deste compilador, deve ser adquirida a verso 5.02 ou posterior do produto BorlandC
Compiler junto aos representantes da Borland e requisitada cpia do compilador Borland C ++ 3.1.

13

3. Configurao

3. Configurao
O Processador Multitarefa AL-2005 um mdulo que opera em conjunto com a UCP AL-2003 ou
AL-2004. Desta forma, o Processador Multitarefa AL-2005 deve ser declarado como um mdulo no
barramento da UCP.
Esta declarao feita atravs do programador MasterTool. A figura a seguir mostra a tela de
declarao dos mdulos no barramento da UCP:

Figura 3-1 Tela de Configurao do Barramento no Programador MasterTool


Alm da declarao do AL-2005 no barramento, necessrio a utilizao de um mdulo funo
F-2005.016 - no programa aplicativo do CP. Este mdulo responsvel pela comunicao entre o
processador e a UCP.
O processador AL-2005 baseado em microprocessador 80186 da Intel, permitindo que programas
aplicativos sejam desenvolvidos utilizando compiladores para microcomputador padro IBM PC, que
geram cdigo compatvel com o do processador.
No entanto, por questes de implementao de seu programa executivo, o desenvolvimento de
programas aplicativos para o AL-2005 est limitado utilizao do compilador Borland C++ verso
3.1.

14

3. Configurao

Ambiente de Desenvolvimento de Aplicaes para o AL-2005


O desenvolvimento de aplicaes pelo usurio para o AL-2005 deve ser feito a partir de uma das
aplicaes exemplos, identificadas pelo arquivo de projeto DEMO.PRJ, fornecidas com o produto
AL-2005.
Uma caracterstica importante fornecida pela BIOS do AL-2005 a capacidade de depurao
simblica remota, o que permite o uso do Turbo Debbuger da Borland para a depurao de
programas aplicativos.
As aplicaes desenvolvidas podem ser verificadas tomando como exemplo a aplicao exemplo
depurvel identificada pelo arquivo de projeto DEMOTD.PRJ.
Para que o processador AL-2005 obtenha acesso memria imagem do CP (memria de operandos)
necessria a chamada da funo de comunicao F-2005.016 no programa do CP.
O programa aplicativo responsvel por atuar na janela de tempo disponibilizada pela F-2005.016
deve ser desenvolvido e carregado no processador AL-2005. A carga de aplicativos no processador
AL-2005 efetuada pelo usurio pela interface serial RS-232C de um computador PC compatvel,
com o uso do programa carregador AL-3860.

F-2005.016 - Funo de Comunicao CP com o AL-2005


A comunicao entre o processador AL-2005 e a UCP efetuada atravs de uma rea de memria
compartilhada por ambos, qual cada um dos mdulos tem acesso de forma exclusiva. A iniciativa
da comunicao sempre comandada pela chamada do mdulo de funo F-2005.016 dentro do
programa aplicativo do CP, fazendo com que, a partir deste instante, o processador AL-2005
disponha de uma janela de tempo de at 3200 s para acessar as reas de comunicao com o CP.
O mdulo de funo F-2005.016 implementa a comunicao entre a UCP e o processador AL-2005.
tambm usado para transferir informaes de configurao do CP para os programas aplicativos do
AL-2005, atravs de tabelas de memria. Estas informaes de configurao podem, por exemplo,
estabelecer um mapeamento, ou seja, relaes, entre operandos do CP e variveis/parmetros de
algum dispositivo externo, conectado atravs dos canais seriais do processador AL-2005.

CHF
2005

016

configura

OPER1

OPER3

reset

OPER2

OPER4

habilita

cpia habilita
erro

As entradas da instruo de chamada da F-2005.016 so:


habilita: quando acionada, a funo est habilitada a executar, abrindo uma janela de tempo para
acesso do processador AL-2005 s reas de comunicao com o CP ou possibilitando a
transferncia de informaes de configurao.
configura: quando acionada, novas informaes de configurao so transferidas do CP para o
processador AL-2005. A entrada configura, aps ativada, deve ser desligada quando a sada de
erro estiver no estado desligado.
reset: quando acionada, faz com que se perca a configurao corrente. A entrada reset, aps
ativada, deve ser desligada quando a sada de erro estiver no estado desligado.

15

3. Configurao
As sadas da instruo de chamada da F-2005.016 so:
cpia habilita: uma cpia da entrada habilita.
erro: esta sada energizada quando a comunicao entre o CP e o processador AL-2005 no se
realiza a contento: ou porque o processador AL-2005 no aproveita a janela de tempo concedida
pelo CP, ou porque os operandos da funo foram mal especificados quanto a seus tipos ou
endereos.
As clulas da instruo CHF utilizada para a chamada da F-2005.016 so programadas do seguinte
modo:
OPER1: nmero de parmetros passados para a funo em OPER3: deve ser obrigatoriamente
uma constante memria com o valor 3 (KM+00003).
OPER2: nmero de parmetros passados em OPER4: KM+00000, j que OPER4 no
utilizado.
OPER3: parmetros passados para a funo, declarados atravs de uma janela visualizada no
programador de CPs MasterTool quando a instruo CHF editada; o nmero de parmetros
editveis especificado em OPER1, sendo fixado em 3 para este mdulo:
RXXXX: endereo da placa AL-2005 no barramento do CP . Consulte documentao do bastidor
em uso para definio de endereos vlidos para mdulos inteligentes.
OPER4: no utilizado

O Carregador de Aplicativos AL-3860


O carregador AL-3860 permite a carga de aplicativos para o processador AL-2005, bem como a
execuo de operaes de manuteno, tais como leitura de aplicativos j carregados e remoo dos
mesmos.
Para a execuo do carregador AL-3860, primeiramente, necessrio conectar-se o cabo AL-1327 na
porta de comunicao serial desejada e ligar o AL-2005. O AL-2005 indicar que no existe
aplicao carregada, utilizando-o pela primeira vez. Aps, necessrio selecionar a porta de
comunicao desejada, pressionando-se o boto Porta Serial. Finalmente, executar o programa
AL-3860 no diretrio corrente.
A tela de apresentao do carregador AL-3860 mostrada na figura a seguir:

Figura 3-2 Carregador AL-3860

16

3. Configurao
ATENO:
Para executar as operaes no AL-2005, o mesmo deve encontrar-se, obrigatoriamente, no estado
programao.
A rea branca destinada a mostrar informaes sobre as aplicaes carregadas no AL-2005, bem
como mensagens orientativas, auxiliando a utilizao do software.
As seguintes operaes esto disponveis no AL-3860 atravs de botes de comando:
Boto Selecionar
Este comando permite a seleo de arquivos de programas aplicativos executveis (*.EXE) do disco,
para posterior envio ao AL-2005. Nenhum outro tipo de arquivo pode ser selecionado por esta opo.
Ao selecionar um arquivo o carregador AL-3860 exibe o seu nome na barra de ttulo, conforme
mostrado na figura a seguir:

Figura 3-3 Seleo de Arquivo para Carga


Boto Enviar
Esta opo envia o programa aplicativo para a memria do processador AL-2005. Antes da efetiva
transmisso do arquivo o AL-3860 verifica se o programa aplicativo selecionado um arquivo
executvel no AL-2005 e se existe espao de memria de cdigo e de dados para a carga.
Boto Cancelar
Esta opo cancela a transmisso da aplicao para o AL-2005.
Boto Programao
Este comando passa o processador para o estado programao. no estado programao que so
permitidas as operaes de leitura de diretrio do processador AL-2005, excluso de aplicativos da
memria e envio de programas aplicativos.

17

3. Configurao
Boto Execuo
Este comando passa o AL-2005 para o estado execuo. Ao receber este comando, o processador
verifica se existe algum aplicativo carregado em sua memria. Caso haja algum aplicativo na
memria, a BIOS dispara a sua execuo. Caso contrrio, o processador entra em estado de erro de
programa.
Boto Apagar
Esta opo apaga todos os aplicativos residentes na memria do processador AL-2005.
ATENO:
O processo de apagamento dos programas aplicativos residentes na memria do processador
AL-2005 um processo irreversvel.
Boto Diretrio
Exibe o diretrio de aplicativos carregados na memria Flash do processador AL-2005. Para cada
aplicativo carregado no processador exibido o nmero da aplicao, bem como o nmero de bytes
utilizados para cdigo (na memria Flash) e o nmero de bytes utilizados para dados (na memria
RAM). A figura a seguir apresenta uma tela exemplo de um diretrio.

Figura 3-4 Tela do diretrio

Boto Porta Serial


Esta opo permite selecionar o canal serial do microcomputador que ser utilizado na comunicao
com o processador AL-2005. A figura a seguir mostra a janela de seleo do canal.

18

3. Configurao

Figura 3-3 Seleo do Canal Serial


Boto Sobre
Esta opo mostra a verso do AL-3860.
Boto Fechar
Permite finalizar a execuo do carregador AL-3860.

19

4. Sistema Operacional

4. Sistema Operacional
Um sistema de tempo real caracterizado pela necessidade de uma resposta rpida a eventos que
ocorrem assincronamente no tempo. Um sistema multitarefa aquele no qual vrias atividades ou
processos devem ser realizados simultaneamente sem interferncia entre si.
Um sistema no qual vrias atividades devam operar simultaneamente em tempos crticos chamado
de sistema multitarefa em tempo real.
O sistema operacional do processador AL-2005 fornece uma soluo simples para a complexidade de
mltiplas tarefas sendo executadas em tempo real, supervisionando a execuo ordenada deste
conjunto de tarefas.
Uma tarefa nada mais do que um mdulo de programa. Um programa aplicativo composto por
uma ou mais tarefas, onde cada tarefa pode resolver um problema especfico e fornecer uma
determinada capacidade funcional ao programa.
Este captulo apresenta o sistema operacional do processador AL-2005, descrevendo como devem ser
criadas e se relacionam entre si as diferentes tarefas carregadas.

Escalonador de Tarefas
O escalonador de tarefas procura em uma lista de tarefas disponveis aquela com a maior prioridade e
em condies de execuo. A prioridade da execuo das tarefas determinada pelo projetista das
mesmas, exceto no caso dos prprios programas aplicativos que possuem um valor de prioridade prdefinido. Se no houver nenhuma tarefa pronta para ser executada, o sistema operacional, com as
interrupes habilitadas, aguarda que algum evento externo gere uma interrupo.
O sistema operacional inicia a execuo de uma tarefa pelo endereo de incio da mesma, tambm
definido pelo projetista. A tarefa executada como se fosse o nico programa no sistema.
Assim que inicia sua execuo, a tarefa parece operar sem interrupes. As interrupes que
porventura possam ocorrer so tratadas pelo sistema operacional de uma forma transparente para a
tarefa. Ao entrar em execuo, a tarefa inibe a execuo de qualquer outra tarefa com prioridade
menor do que a sua, permanecendo neste estado at que decida renunciar ao controle, mesmo que
temporariamente, atravs da chamada de uma funo do sistema operacional.
A tarefa termina ao retornar para o escalonador do sistema operacional que volta a procurar a
prxima tarefa de maior prioridade pronta a executar, dando-lhe o controle do processador.
O sistema operacional oferece um conjunto de servios que podem ser invocados pela tarefa atravs
de chamadas de funes, que constituem a chamada biblioteca de suporte do sistema. Uma tarefa
pode, por exemplo, enviar uma mensagem para outra tarefa, aguardar por um evento ou por um
intervalo de tempo. Se a tarefa desejar aguardar um evento, o servio correspondente do sistema
operacional suspender a tarefa e requisitar ao escalonador a execuo da prxima tarefa com maior
prioridade pronta a executar.
O sistema operacional atua como chaveador de contextos, supervisionando a execuo ordenada das
tarefas. Emprega um algoritmo de escalonamento preemptivo e comandado por prioridade que
assegura que a tarefa de maior prioridade que esteja pronta para executar um trabalho til sempre ter
o controle do processador. O sistema far o chaveamento de tarefas se receber uma requisio da
tarefa em execuo para realizar uma operao que invoca uma tarefa de maior prioridade. A tarefa
em execuo pode, por exemplo, requisitar ao sistema operacional o disparo de uma tarefa de maior
prioridade atravs do envio de uma mensagem para a mesma.
Os servios do sistema operacional diretamente relacionados com o controle de tarefas so os
seguintes:
20

4. Sistema Operacional

Controle ChangeTaskPriority
de tarefas CreateTask
DeleteTask
EndTask
GetTaskDescriptor
GetTaskID
GetTaskStatus
KillTask
LocateTask
ResetPendingWake
ResetTaskWake
StartTask
StopTask
Wait
WaitTime
WakeCallingTask
WakeTask

Altera a prioridade de uma tarefa


Cria uma nova tarefa
Remove uma tarefa do sistema operacional
Termina a execuo da tarefa corrente
Obtm o ponteiro para o descritor de uma tarefa
Obtm o identificador da tarefa corrente
Obtm o estado de uma tarefa
Mata uma tarefa
Localiza uma tarefa atravs de seu nome
Reseta uma requisio pendente para acordar a tarefa corrente
Reseta uma requisio pendente para acordar uma tarefa
Dispara a execuo de uma tarefa
Para (termina) a execuo de uma tarefa
Aguarda incondicionalmente at ser acordada
Aguarda um intervalo de tempo (delay)
Acorda a tarefa que enviou uma mensagem para a tarefa corrente
Acorda uma tarefa no estado de espera

Criao de uma Tarefa


As tarefas podem ser pr-definidas, como no caso de um programa aplicativo carregado no
processador AL-2005, ou podem ser criadas dinamicamente por outras tarefas durante sua execuo.
O sistema operacional AMX do AL-2005 suporta no mximo 10 tarefas simultneas, sendo que
destas, 2 tarefas so reservadas para a prpria BIOS do AL-2005: a primeira tarefa a prpria
aplicao (main) da BIOS, e a segunda tarefa a de comunicao com o carregador AL-3860. As
outras 8 tarefas esto disponveis para serem utilizadas pelas aplicaes a serem carregadas no
AL-2005.
Cada aplicao carregada no AL-2005 considerada tambm como uma nova tarefa.
Exemplo: se forem carregadas duas aplicaes no AL-2005, e onde cada uma delas ainda crie mais
duas tarefas (CreateTask), teremos 8 tarefas executando, das 10 disponveis:

tarefa 1: BIOS.
tarefa 2: tarefa criada pela main da BIOS (int de comunicao).
tarefa 3: main da primeira aplicao carregada.
tarefa 4: main da segunda aplicao carregada.
tarefa 5: tarefa 1/2 criada pela main da primeira aplicao carregada.
tarefa 6: tarefa 2/2 criada pela main da primeira aplicao carregada.
tarefa 7: tarefa 1/2 criada pela main da segunda aplicao carregada.
tarefa 8: tarefa 2/2 criada pela main da segunda aplicao carregada.
tarefa 9: disponvel.
tarefa 10: disponvel.

A criao dinmica de uma tarefa requer a inicializao de uma estrutura de dados de descrio da
tarefa, que contm informaes relevantes para que o sistema operacional controle a execuo da
mesma.
Esta estrutura encontra-se definida no arquivo AL2005.H da seguinte forma:

21

4. Sistema Operacional

typedef struct
{
void
far (far *TaskProcedure) ();
char
Tag1;
char
Tag2;
char
Tag3;
char
Tag4;
unsigned int far *lpnStack;
unsigned int nStackSize;
unsigned int nTaskAttributes;
unsigned int nPriority;
unsigned int nTimeSlice;
int
nMail0Size;
int
nMail1Size;
int
nMail2Size;
int
nMail3Size;
} TASKDESCR;
onde:
TaskProcedure um ponteiro para a funo que ser chamada pelo sistema operacional quando a
tarefa for disparada.

ATENO:
Toda funo usada para disparar uma nova tarefa deve ser declarada como HUGE. O motivo disto
garantir que o registrador de segmento de dados (DS) da tarefa seja preservado quando houver
chaveamento de tarefas.

Tag1 a Tag4 so quatro bytes usados para definir um tag nico, isto , um nome, para cada tarefa;
normalmente utilizam-se quatro caracteres ASCII como tag da tarefa. A funo LocateTask pode ser
usada para encontrar o identificador de uma tarefa atravs de seu tag.
lpnStack o endereo da pilha da tarefa. Para cada tarefa deve ser alocada uma rea em RAM para a
sua pilha. Deve ser passado o endereo do fim da pilha. A partir da verso 2.24 da BIOS, este
endereo passou a ser ajustado automaticamente para permitir que a tarefa execute clculos em ponto
flutuante sem afetar outras reas.
nStackSize o tamanho da pilha da tarefa em bytes. Deve ser um nmero par de bytes. O tamanho da
pilha de cada tarefa dependente da aplicao. Deve ter no mnimo 64 palavras (128 bytes) para
permitir com que a tarefa receba mensagens e seja interrompida e suspensa por tarefas de maior
prioridade. Alm disto, deve-se alocar espao suficiente para satisfazer as necessidades particulares
de cada tarefa.
nTaskAttributes deve ser sempre zero.
nPriority a prioridade de execuo da tarefa. A prioridade das tarefas varia de 1 (maior) a 127
(menor). Mais de uma tarefa podem ter a mesma prioridade.
ntimeSlice deve ser sempre zero.
nMail0Size a nMail3Size definem o nmero mximo de envelopes de mensagens que podem estar em
cada uma das quatro caixas postais que uma tarefa pode possuir. A caixa postal 0 a de maior
prioridade e a 3 a de menor prioridade.

22

4. Sistema Operacional
Um exemplo de definio do descritor de uma tarefa aparece a seguir:
#define PRIOR_TASK
64
#define TAMANHO_PILHA
1200
unsigned int Pilha [TAMANHO_PILHA];
void huge TrataAlnetI (void);
static TASKDESCR DescrAlnetI = {
TrataAlnetI,
'A', 'L', 'N', 'I',
Pilha + TAMANHO_PILHA,
TAMANHO_PILHA * sizeof (int),
0,
PRIOR_TASK
0,
0, 0, 0, 0
};

/* Prioridade da tarefa
/* Tamanho da pilha, mltiplo de 16
/* Pilha da tarefa
/* Tarefa
/* Descrio da estrutura
/* Ponto de entrada
/* Nome da tarefa (4 caractere)
/* Ponteiro para o fim da pilha
/* Tamanho da pilha em bytes
/* Atributos da tarefa
/* Prioridade da tarefa
/* Tempo (sempre zero)
/* Tamanho das caixas postais

*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/

Quando uma tarefa criada dinamicamente, o sistema operacional retorna o identificador da tarefa
criada para o criador. responsabilidade da aplicao manter este identificador, de modo a poder
referir-se tarefa criada subseqentemente.
Estados de uma Tarefa
Uma tarefa sempre se encontrar em um dos seguintes estados:
Inativa: o estado da tarefa quando a mesma criada. Neste estado a tarefa no possui nenhuma
requisio pendente a ser atendida.
Pronta: uma tarefa encontra-se no estado de pronta quando tiver alguma requisio pendente a
atender ou estiver pronta a retomar sua execuo aps ter sido interrompida ou estar aguardando.
Em execuo: a tarefa est sendo executada pelo processador. S possvel uma nica tarefa
encontrar-se neste estado a cada instante.
Em espera: a tarefa encontra-se bloqueada, aguardando a ocorrncia de algum evento.

23

4. Sistema Operacional

Inativa
StartTask
SendMessage

tarefa encerrada
ou interrompida

Pronta
no h tarefa em
execuo com
maior prioridade

Em execuo

tarefa encerrada
ou interrompida

Wait
WaitTime
SendMessageWait
WaitSemaphore
WaitEvent
ReserveResource

Em espera

evento de
interesse ou
timeout

Incio de uma Tarefa


Os programas aplicativos carregados no processador AL-2005 so tarefas pr-definidas. Logo que o
sistema operacional iniciado, na energizao do processador, a memria de usurio varrida em
busca de programas aplicativos. Quando um programa aplicativo encontrado, o sistema operacional
cria uma tarefa para este aplicativo e em seguida utiliza a funo StartTask para disparar sua
execuo.
Quando o programa aplicativo inicia sua execuo, o mesmo pode criar novas tarefas atravs da
funo CreateTask, como explicado na seo anterior.
Qualquer tarefa em execuo pode requisitar a execuo de outra tarefa do sistema, utilizando uma
entre trs funes:
StartTask dispara a execuo da outra tarefa sem passar nenhuma mensagem
SendMessage envia uma mensagem para a outra tarefa
SendMessageWait envia uma mensagem para a outra tarefa e aguarda que a mesma seja recebida e
processada
Tarefas que no recebem mensagens e que so portanto iniciadas chamando-se StartTask, devem ser
escritas como uma funo sem parmetros formais.
Por exemplo, uma tarefa que se encerra imediatamente seria:
void far task1 (void)
{
}
24

4. Sistema Operacional
Tarefas que devem receber uma mensagem (disparadas por SendMessage ou SendMessageWait ) so
escritas como funes que recebem parmetros. Por exemplo, uma funo que recebe um inteiro
como mensagem e ento encerra apareceria como:
void far task2 (int message)
{
}
As chamadas das funes SendMessage e SendMessageWait passam como parmetro uma mensagem
que movida para um envelope. Este envelope inserido ento na caixa postal da tarefa destino, no
nvel de prioridade indicado pela chamada.
Uma tarefa que executa uma chamada funo SendMessageWait suspende a si mesma (entra em
estado de espera) at que a tarefa sendo chamada receba a mensagem e responda chamada.
Prioridade
As prioridades das tarefas so usadas pelo escalonador do sistema operacional para determinar a
tarefa a ser executada. A qualquer instante sempre estar em execuo a tarefa com a maior
prioridade que estiver capacitada a executar.
As prioridades das tarefas vo de 1 (maior) a 127 (menor). A prioridade dos programas aplicativos
carregados no processador AL-2005 pr-definida em 64. A prioridade das tarefas criadas
dinamicamente definida na sua criao, atravs do campo nPriority do descritor da tarefa
TASKDESCR.
Se mais de uma tarefa possuir a mesma prioridade, o sistema operacional ir atribuir prioridades
relativas s diferentes tarefas, de acordo com a ordem cronolgica com que foram criadas, com a
primeira tarefa criada tendo a maior prioridade.
Uma tarefa pode alterar sua prioridade ou a prioridade de qualquer outra tarefa atravs da funo
ChangeTaskPriority, mas esta prtica no recomendada.
Execuo de uma Tarefa
O sistema operacional dispara uma tarefa fazendo uma chamada FAR para o endereo da funo
especificada no descritor da tarefa quando a mesma criada, no campo TaskProcedure. A tarefa
somente ser iniciada se no houver nenhuma outra tarefa de maior prioridade em condies de ser
executada. Portanto uma tarefa somente entra em execuo se todas as outras tarefas de maior
prioridade estiverem inativas ou suspensas por algum motivo.
Quando uma tarefa inicia sua execuo, tem completo controle sobre o processador. O sistema de
interrupes deve permanecer habilitado a fim de permitir o atendimento das interrupes. Se a tarefa
necessitar desabilitar as interrupes por algum motivo, recomenda-se que isto seja feito no menor
perodo de tempo possvel a fim de no degradar o tempo de resposta das interrupes.
Uma tarefa pode executar sem se preocupar com o fato de que ocorrero interrupes e que as
mesmas sero atendidas. Se tarefas de maior prioridade ficarem prontas para execuo, a tarefa ser
suspensa temporariamente pelo sistema operacional. Quando a tarefa de maior prioridade for
suspensa ou encerrar, o sistema operacional permitir que a tarefa interrompida retome sua execuo
a partir do ponto em que foi interrompida.
Sincronizao de Tarefas e Eventos
O sistema operacional suporta trs poderosos mecanismos para a sincronizao de eventos. O
gerenciador de semforos fornece semforos contadores com capacidade de enfileiramento e timeout.
O gerenciador de eventos pode sincronizar vrios eventos com mais de uma tarefa, oferecendo a
melhor soluo para a coordenao de eventos complexos. O sistema operacional oferece uma outra
forma simples de sincronizao de tarefas/eventos.

25

4. Sistema Operacional
Uma tarefa pode aguardar incondicionalmente por um evento, chamando Wait. Este evento pode ser
dependente de uma tarefa ou de tempo. A tarefa que est aguardando pelo evento permanece
suspensa incondicionalmente at que outra tarefa execute uma chamada a WakeTask, requisitando ao
sistema operacional que acorde a tarefa suspensa. O par Wait/WakeTask usado para sincronizaes
de eventos simples.
O sistema operacional tambm suporta sincronizao com timeout automtico. Uma tarefa pode
chamar WaitTime, especificando um intervalo de tempo mximo que deseja aguardar pela ocorrncia
de um evento. Se nenhuma outra tarefa executar WakeTask neste nterim, o sistema operacional
automaticamente acordar a tarefa ao expirar o intervalo. O sistema operacional passa para a tarefa
uma indicao da ocorrncia ou no do timeout.
Uma tarefa tambm pode ser sincronizada a uma outra tarefa atravs da passagem de mensagens.
Uma tarefa envia uma mensagem para outra tarefa atravs de SendMessageWait, que fora seu estado
de espera. Quando a tarefa destino recebe a mensagem, pode executar WakeCallingTask a fim de
acordar a tarefa que lhe enviou a mensagem. Esta tarefa, por sua vez, retomar sua execuo sabendo
que sua mensagem j foi recebida pela tarefa destino. Se a tarefa destino no executar
WakeCallingTask, o sistema operacional acordar automaticamente a tarefa geradora da mensagem
assim que a tarefa destino encerrar.
Supervisor de Interrupes
As tarefas executam com o sistema de interrupes do processador habilitado, o que permite ao
sistema responder a eventos em tempo real.
Quando ocorre uma interrupo (como de um canal serial, por exemplo), o processador desabilita o
sistema de interrupes e salva o endereo de retorno e seus flags correntes na pilha da tarefa
interrompida, desviando para uma rotina de atendimento da interrupo.
Em geral, a rotina de atendimento da interrupo salva os registradores que necessita utilizar, atende
a interrupo, restaura os registradores, habilita as interrupes e retorna ao programa que estava em
execuo no ponto em que o mesmo foi interrompido.
O supervisor de interrupes do sistema operacional simplifica a construo de rotinas de
atendimento de interrupo...
Os seguintes servios oferecidos pelo sistema operacional esto associados ao tratamento de
interrupes:

Tratamento BeginInterrupt
Inicia o atendimento de uma interrupo
de
interrupes ChangeInterruptHandler Troca a rotina de atendimento de uma dada
interrupo
EndInterrupt
Termina o atendimento de uma interrupo
GenerateInterrupt
Gera uma interrupo n de software n
SetInterrupt
Instala um ponteiro de interrupo

Temporizaes
Os sistemas de tempo real so caracterizados pela necessidade de fornecer um controle preciso sobre
temporizaes. O relgio de hardware do processador AL-2005 fornece a fonte bsica de
temporizaes; o sistema operacional fornece o controle sobre seu uso.
A unidade de tempo do sistema operacional o chamado tick do sistema, que um intervalo de
tempo fixo derivado do relgio de hardware.
ATENO:
O tick do sistema vale 10 ms.

26

4. Sistema Operacional
Uma tarefa pode suspender a si prpria por um intervalo de tempo especfico (WaitTime). Pode
tambm aguardar por um evento que deve ocorrer dentro de um intervalo de tempo determinado. Se
o evento no ocorrer neste intervalo, a tarefa retoma sua execuo com uma indicao de timeout.
Uma outra facilidade fornecida pelo sistema operacional, associada a controle de intervalos de
tempo, so os temporizadores utilizados pelas aplicaes. Uma vez criado, um temporizador pode ser
disparado, verificado e parado por qualquer tarefa.
Os seguintes servios oferecidos pelo sistema operacional esto associados a temporizadores:

Gerenciamento CreateTimer
de
StartStopTimer
temporizadores TimeConvert
ReadTimer
DeleteTimer

Cria um temporizador
Dispara/para um temporizador
Converte milisegundos em ticks do sistema
L o valor corrente de um temporizador
Remove um temporizador

Um temporizador deve ser criado por uma tarefa antes de poder ser utilizado (CreateTimer). O
sistema operacional retorna um identificador do temporizador para a tarefa chamadora, que deve
guard-lo para futuras referncias. Trs parmetros devem ser especificados na criao de um
temporizador: seu perodo, um ponteiro para uma funo de temporizao, a ser executada quando
esgotar o intervalo de tempo com o qual inicializado no seu disparo, e um parmetro opcional de 32
bits, dependente da aplicao.
O perodo do temporizador, especificado em ticks do sistema, determina se o mesmo peridico ou
no. Se o perodo for zero, o temporizador funciona uma nica vez, cada vez que for disparado ,
permanecendo inativo at ser novamente disparado. Se o perodo for diferente de zero, o
temporizador peridico.
Sempre que esgota o intervalo de tempo programado em um temporizador, o sistema operacional
executa a funo de temporizao associada ao mesmo na sua criao. Esta funo recebe como
parmetros o identificador do temporizador e o parmetro de 32 bits pr-definido na criao do
temporizador.
Quando o temporizador criado, o sistema operacional o coloca em um estado inativo,
permanecendo neste estado at ser disparado por uma tarefa (StartStopTimer), que escreve seu valor
inicial em ticks do sistema. Por convenincia, a funo TimeConvert pode ser usada para converter
um intervalo especificado em milisegundos para o nmero correspondente de ticks do sistema.
Os temporizadores so contadores decrementais. O sistema operacional decrementa contadores ativos
(no zero) at que cheguem a zero. Quando um temporizador encerra sua contagem, o sistema chama
a funo de temporizao associada. Temporizadores no peridicos permanecem inativos a menos
que sejam novamente disparados pela funo de temporizao. Temporizadores peridicos so
automaticamente disparados pelo sistema operacional com seus valores pr-definidos assim que a
funo de temporizao encerrar sua execuo.
Quando no houver mais necessidade de um temporizador, o mesmo pode ser removido
(DeleteTimer).
Os seguintes servios podem ser chamados pela funo de temporizao:

27

4. Sistema Operacional

StartTask
WakeTask
SendMessage

Dispara a execuo de uma tarefa


Acorda uma tarefa no estado de espera
Dispara uma tarefa pelo envio de uma mensagem

CreateTimer
DeleteTimer
ReadTimer
StartStopTimer
TimeConvert

Cria um temporizador
Remove um temporizador
L o valor corrente de um temporizador
Dispara/para um temporizador
Converte milisegundos em ticks do sistema

GetBuffer
FreeBuffer

Obtm um buffer de um pool especfico


Libera um buffer

SignalEvent
SignalSemaphore

Sinaliza um ou mais eventos em um grupo


Sinaliza um semforo

AddBottomList
AddTopList
GetBottomList
GetTopList
ResetList

Acrescenta ao final da lista


Acrescenta no incio da lista
Remove do final da lista
Remove do incio da lista
Inicializa uma lista circular

Mensagens
As mensagens so usadas para a comunicao entre tarefas cooperantes. Uma tarefa em execuo
pode requisitar a execuo de uma outra tarefa mediante o envio de uma mensagem. Usualmente a
ao executada pela tarefa destino variar de acordo com o contedo da mensagem.
O sistema operacional tem a capacidade de enfileirar requisies para execuo de tarefas,
permitindo com que mensagens associadas s requisies sejam empilhadas em caixas postais de
uma forma controlada. Isto libera a tarefa requisitora a continuar com seu prprio processamento.
Alternativamente, a tarefa requisitora pode suspender a si mesma at que a tarefa chamada tenha
executado em resposta requisio.
A tarefa requisitora pode enfileirar mensagens em at quatro nveis de prioridade. A tarefa destino
pode portanto receber mensagens de um nmero qualquer de chamadores com as mensagens j
ordenadas por prioridade pelo sistema operacional.
O projetista de uma aplicao descreve a necessidade exata de caixas postais de cada tarefa para o
sistema operacional atravs da estrutura de descrio da tarefa. Para cada tarefa possvel especificar
quais dos quatro nveis de prioridade so suportados, caso qualquer um deles for necessrio. Alm
disto especifica-se tambm o nmero de mensagens possvel em cada uma destas caixas postais.
O gerenciamento de caixas postais fornece o seguinte conjunto de servios:

Gerenciamento GetMailboxMessage
de caixas
SendMessage
postais
SendMessageWait

Obtm a mensagem de maior prioridade


Inicia uma tarefa pelo envio de uma mensagem
Inicia uma tarefa pelo envio de uma mensagem
aguardando at que a tarefa receba a mensagem

Uma tarefa pode enviar uma mensagem para uma outra tarefa usando as funes SendMessage ou
SendMessageWait.
Uma mensagem contm no mximo 12 bytes, totalmente dependentes da aplicao.

28

4. Sistema Operacional

Exemplo:
char
c;
int i;
int iarray[6];
char
carray[12];
struct
msg {
char m1;
char m2;
int
m3;
long m4;
} msga;
As seguintes chamadas enviaro as mensagens especificadas para a tarefa cujo identificador taskid,
com uma prioridade priority:
SendMessage (taskid, priority, &c);
SendMessage (taskid, priority, &i);
SendMessage (taskid, priority, iarray);
SendMessage (taskid, priority, carray);
SendMessage (taskid, priority, &msga);

/* Envia c
/* Envia i
/* Envia iarray
/* Envia carray
/* Envia msga

*/
*/
*/
*/
*/

O chamador especifica a prioridade priority com a qual a mensagem deve ser enviada. O nvel da
prioridade (0 - maior, 1, 2 ou 3 - menor) determina a caixa postal na qual a tarefa chamada receber a
mensagem. O chamador identifica tambm a tarefa sendo chamada, especificando o seu identificador
taskid.
O chamador pode suspender sua execuo at que a tarefa chamada tenha sido executada em resposta
requisio usando SendMessageWait, ao invs de SendMessage.
O sistema operacional usa envelopes de mensagens para a passagem de mensagens. O sistema obtm
um ponteiro para um envelope livre, move os parmetros da mensagem para o envelope e insere o
ponteiro na caixa postal da tarefa destino, no nvel de prioridade especificado. Portanto, logo aps o
retorno da chamada de SendMessage, os parmetros da mensagem j encontram-se livres para
reutilizao.
Ao receber a mensagem, a tarefa destino disparada em seu endereo inicial pelo sistema
operacional. A mensagem de 12 bytes retirada do envelope, copiada para a pilha da tarefa e o
envelope automaticamente liberado. Os parmetros da mensagem recebida pela tarefa destino
encontram-se exatamente na mesma ordem com a qual foram enviados.
Uma tarefa que recebe uma grande variedade de mensagens deve declarar uma unio a fim de se
referir a diferentes tipos de mensagens:
union
rmsg {
char c;
int
i;
int
iarray[6];
char carray[12];
struct msg msga;
};

29

4. Sistema Operacional

A tarefa pode ser escrita como:


void huge taskn (char c)
{
union rmsg *pmsg;

/* declarao de parmetro fantasma */

pmsg = (union rmsg *)&c;


/* ponteiro para a mensagem recebida */
:
:
A mensagem recebida pode aqui ser acessada, usando o ponteiro pmsg.
:
}
Neste exemplo, a tarefa que recebe mensagens no tem uma forma bvia de determinar como a
mensagem deve ser interpretada, isto , se apenas um caracter ou a estrutura pmsg->msga inteira.
Esta questo normalmente resolvida com a incluso de um cdigo de operao no incio de cada
mensagem.
Gerenciadores
O sistema operacional fornece um conjunto de gerenciadores para simplificar a sincronizao de
eventos, manipulao de recursos e alocao de memria.
Recursos
O gerenciador de recursos permite o acesso controlado a recursos definidos pelo usurio (como uma
regio de memria, por exemplo), isto , torna possvel o compartilhamento de recursos entre tarefas
que executam concorrentemente. Utiliza um semforo binrio para limitar o acesso a cada recurso a
uma nica tarefa de cada vez. A posse e a liberao de um recurso governada por chamadas ao
gerenciador de recursos. O gerenciador de recursos oferece a caracterstica nica de identificar a
tarefa proprietria de cada recurso, que a nica que tem permisso para liber-lo.
O gerenciador de recursos difere do gerenciador de semforos de duas formas. No existe
enfileiramento de prioridades. As tarefas esperam um recurso na base de que a primeira a requisitar
a primeira a ser atendida (first come, first served). No existe timeout. Uma tarefa aguardar
incondicionalmente at que o recurso esteja disponvel para seu uso privativo.
Alm disto, diferentemente dos semforos, a posse de um recurso est amarrada a uma tarefa
especfica. Apenas a tarefa que dona de um recurso pode sinalizar sua liberao. No possvel que
mais de uma tarefa compartilhe a posse de um recurso em particular
O gerenciador de recursos oferece o seguinte conjunto de servios:

Gerenciamento CreateResource
de recursos
ReserveResource
ReleaseNestedResource
ReleaseResource
DeleteResource

Cria um recurso
Reserva um recurso
Libera um recurso (aninhado)
Libera um recurso (incondicionalmente)
Remove um recurso

Um recurso deve ser criado por uma tarefa antes que possa ser utilizado (CreateResource). Cada
recurso controlado pelo gerenciador de recursos tem um limite mximo, definido pelo usurio, do
nmero de tarefas que podem aguardar por ele.
Uma tarefa requisita a posse de um recurso atravs da reserva do recurso (ReserveResource). Se o
recurso estiver disponvel, a tarefa tem assegurado imediatamente a posse do recurso. Se o recurso
30

4. Sistema Operacional
no estiver disponvel, a tarefa colocada no final de uma lista de tarefas que esto aguardando por
aquele recurso. Uma tarefa que j possui um recurso pode reserv-lo novamente, resultando em uma
reserva aninhada.
Quando a tarefa que correntemente possui o recurso liber-lo, o recurso ser dado tarefa que estiver
h mais tempo aguardando por ele. A tarefa que possui o recurso deve liber-lo uma vez para cada
reserva aninhada que tenha realizado (ReleaseNestedResource) ou o recurso pode ser
incondicionalmente liberado (ReleaseResource).
Se um recurso no necessita mais ser compartilhado, uma tarefa pode remov-lo (DeleteResource).
Semforos
O gerenciador de semforos fornece semforos contadores de uso geral com enfileiramento de
prioridades e timeout, que fornecem facilidades de sincronizao entre tarefas executadas
concorrentemente.
Em um ambiente multitarefa, freqentemente necessrio que uma tarefa ganhe acesso mutuamente
exclusivo a recursos crticos. O recurso pode ser uma regio de cdigo ou uma funo no-reentrante
(e portanto no compartilhvel). Um semforo pode ser usado para assegurar o acesso mutuamente
exclusivo das tarefas a recursos crticos. Um semforo tambm pode ser usado para controlar a
alocao de recursos escassos.
E. W. Dijkstra introduziu duas operaes primitivas para controlar o acesso exclusivo a recursos
crticos. As primitivas abstratas, chamadas de operadores P e V, operam sobre uma varivel chamada
semforo. Muitas variaes destes operadores P e V foram implementadas deste sua introduo
inicial. O gerenciador de semforos fornece uma variao conhecida como semforo contador ao
qual acrescentado o enfileiramento de prioridades e timeout automtico.
O gerenciador de semforos fornece o seguinte conjunto de servios:

Gerenciamento CreateSemaphore
de semforos
WaitSemaphore
SignalSemaphore
DeleteSemaphore

Cria um semforo
Aguarda por um semforo (timeout opcional)
Sinaliza um semforo
Remove um semforo

Um nmero qualquer de semforos definidos pelo usurio podem ser criados (CreateSemaphore). Ao
ser criado, deve-se especificar sua contagem inicial e o nmero mximo de tarefas que podem
aguardar por ele. Quando usado para excluso mtua, o valor inicial do semforo deve ser 1. Se o
semforo for inicializado com um valor n, pode ser usado para controlar o acesso a n recursos de um
determinado tipo. Se o tamanho mximo da fila de espera pelo semforo for igual a zero, no ser
permitido a nenhuma tarefa aguardar pelo semforo se o recurso controlado por ele j estiver sendo
utilizado.
Uma tarefa que deseja ganhar o controle de um semforo ou utilizar um dos recursos gerenciados por
ele requisita ao gerenciador de semforos a concesso do mesmo (WaitSemaphore). Deve especificar
a prioridade com que deseja aguardar, caso o semforo no esteja imediatamente disponvel. A tarefa
ser inserida em uma fila de espera pelo semforo na prioridade especificada. Desta forma, tarefas
que necessitam de maior prioridade no acesso a um recurso podem preemptar tarefas com prioridade
de espera menor. A tarefa pode opcionalmente especificar o intervalo de tempo mximo, ou timeout,
de espera, limitando desta forma o tempo que tem para aguardar pela liberao do semforo para seu
uso. Uma tarefa somente entrar em espera pelo semforo caso a fila de espera do mesmo no se
encontre cheia no momento da requisio.
Quando a tarefa encerra com sua utilizao do recurso, sinaliza sua liberao (SignalSemaphore). O
gerenciador de semforos libera o recurso e verifica a fila de espera, sempre garantindo o acesso ao
semforo tarefa que estiver no topo da fila. Se esta tarefa for de maior prioridade do que a tarefa
que est liberando o recurso, ocorrer um chaveamento de tarefas, dando tarefa de maior prioridade
31

4. Sistema Operacional
uma oportunidade imediata de utilizar o recurso. Caso a tarefa para a qual se concede o recurso for de
menor prioridade do que a tarefa que o est liberando, a nova proprietria ter de aguardar at que a
tarefa correntemente em execuo renuncie ao controle do processador.
Se expirar o intervalo de timeout especificado pela tarefa, enquanto a mesma estiver aguardando por
um semforo, o gerenciador de semforos remove-a da fila do semforo e permite com que ela
retome sua execuo com uma indicao de timeout.
Quando no se necessitar mais de um semforo, o mesmo pode ser removido (DeleteSemaphore).
Eventos
O gerenciador de eventos fornece um mtodo conveniente para sincronizar uma ou mais tarefas a
eventos detectados por outras tarefas. Uma tarefa pode requisitar ao gerenciador de eventos que
suspenda sua operao at que um entre um conjunto de eventos ocorra. Alternativamente a tarefa
pode pedir para esperar at que um conjunto completo de eventos ocorra. Opcionalmente a tarefa
pode especificar um intervalo de timeout limitando o tempo que ficar aguardando pelo evento. Mais
de uma tarefa podem estar aguardando por um evento ou conjunto de eventos.
Quando uma tarefa detecta a ocorrncia de um evento, sinaliza o evento atravs de uma chamada ao
gerenciador de eventos. O gerenciador de eventos verifica se o evento resultou em uma combinao
de eventos para a qual uma ou mais tarefas esto aguardando. Se isto ocorrer, as tarefas que
estiverem aguardando so liberadas para retomar sua execuo.
O gerenciador de eventos fornece o seguinte conjunto de servios:

Gerenciamento GetEventGroup
de eventos
WaitEvent
SignalEvent
FreeEventGroup

Obtm o uso de um grupo de eventos


Aguarda evento(s) em um grupo (timeout opcional)
Sinaliza um ou mais eventos em um grupo
Libera um grupo de eventos

Cada grupo de eventos inclui 16 flags de evento. Cada evento de um grupo representado por um
flag booleano que constitui o estado do evento. Os 16 flags booleanos de evento so representados
em uma palavra de 16 bits. Recomenda-se que os estados booleanos 0 e 1 sejam usados como
indicadores de falso e verdadeiro, respectivamente. O estado zero representa portanto a ausncia do
evento. O estado um indica que o evento ocorreu.
Antes de poder ser utilizado, um grupo de eventos deve ser adquirido por uma tarefa
(GetEventGroup). O gerenciador de eventos aloca um grupo de eventos e retorna um identificador do
grupo para a tarefa chamadora, que deve guard-lo para futuras referncias. Ao adquirir um grupo de
eventos, a tarefa deve especificar o valor inicial que cada um dos 16 eventos de um grupo devem
assumir. A atribuio de eventos especficos a cada um dos flags de um grupo de eventos fica a
critrio do projetista.
Uma vez adquirido, um grupo de eventos pode ser usado para sincronizar tarefas a qualquer um dos
16 eventos que representa. Uma tarefa pode aguardar por um evento (WaitEvent), opcionalmente
especificando um intervalo de tempo mximo no qual permanecer aguardando pelo evento. Se
desejar aguardar por mais de um evento, todos estes eventos devem estar contidos em um mesmo
grupo.
Ao aguardar por eventos, a tarefa deve especificar o identificador do grupo de eventos desejado, uma
mscara de 16 bits que identifica os eventos de interesse e um valor de 16 bits indicando o estado de
interesse para cada um dos eventos selecionados. Especifica tambm um entre dois critrios a serem
usados na deteco de eventos. A tarefa pode aguardar que qualquer um dos eventos selecionados no
grupo atinja o estado especificado ou, alternativamente, que todos os eventos selecionados sejam
iguais aos respectivos estados especificados.
Quando uma tarefa gera uma mudana de estado em um evento, sinaliza o evento (SignalEvent),
especificando o identificador do grupo que contm o evento desejado. Mais de um evento podem ser
32

4. Sistema Operacional
sinalizados de uma nica vez. Para tanto deve-se especificar uma mscara de 16 bits identificando os
eventos particulares do grupo e um valor de 16 bits especificando o novo estado de cada um dos
eventos selecionados.
Sempre que um evento sinalizado, o gerenciador de eventos determina se alguma tarefa est
aguardando por eventos daquele grupo. Em caso afirmativo, verifica se o novo estado dos 16 flags de
evento est de acordo com o critrio de deteco desejado pela tarefa. Se isto ocorrer, a tarefa
acordada pelo gerenciador de eventos. Se no houver nenhuma outra tarefa de maior prioridade em
execuo, esta tarefa retomar imediatamente sua execuo, com uma indicao de que a
combinao de eventos que estava aguardando ocorreu.
Se no houver mais necessidade de um grupo de eventos, o mesmo pode ser removido
(FreeEventGroup).
Buffers
O gerenciador de buffers fornece acesso rpido e eficiente a mltiplos conjuntos (pools) de buffers,
onde cada buffer representa um bloco de tamanho fixo de memria. Esta forma de gerenciamento de
memria vem ao encontro de aplicaes em tempo real nas quais a disponibilidade de reas de
memria deve ser previsvel e nas quais no se pode tolerar fragmentao de memria.
O gerenciador de buffers fornece o seguinte conjunto de servios:

Gerenciamento AddBufferUseCount
de buffers
CreateBufferPool
DeleteBufferPool
FreeBuffer
GetBuffer
GetBufferSize
ResetBufferPool
ResetBufferPools

Incrementa contador de uso de um buffer


Cria um pool de buffers
Remove um pool de buffers
Libera um buffer
Obtm um buffer de um pool especfico
Obtm o tamanho de um buffer
Inicializa um pool de buffers especfico
Inicializa todos os pools de buffers pr-definidos

Um pool de buffers consiste de um nmero qualquer de buffers de tamanho uniforme. Qualquer


tamanho par de buffer, maior do que dois bytes e menor do que o limite de 64K de um segmento de
memria permitido. Todos os buffers em um pool devem residir no mesmo segmento de memria.
Um pool de buffers deve ser criado por uma tarefa (CreateBufferPool) antes de poder ser utilizado. O
gerenciador de buffers retorna um identificador do pool para a tarefa chamadora, que deve guard-lo
para futuras referncias. Ao criar um pool de buffers deve-se especificar trs parmetros: o nmero
de buffers no pool, o tamanho de cada buffer e um ponteiro para a rea de memria RAM onde
ficaro localizados todos os buffers do pool. Esta rea de memria subdividida pelo gerenciador de
buffers no nmero de buffers requisitado.
Todos os buffers no pool so encadeados atravs de uma lista de buffers livres e cada buffer tem
associado a si um contador de uso, inicializado com zero para mostrar que no est sendo utilizado.
Estas duas informaes so mantidas internamente ao gerenciador de buffers.
Depois que um pool foi criado, pode-se obter um buffer do pool (GetBuffer). O gerenciador de
buffers retira um buffer da lista de buffers livres, incrementa o contador de uso associado ao buffer e
retorna um ponteiro para o primeiro byte do buffer. Pode-se ento armazenar e recuperar dados deste
buffer conforme o desejado.
Quando no se necessita mais de um buffer, o mesmo pode ser liberado (FreeBuffer). O buffer a ser
liberado identificado pelo ponteiro para seu primeiro byte, o mesmo que foi recebido quando o
buffer foi adquirido. O gerenciador de buffers decrementa o contador de uso e se a contagem chegar
a zero, o buffer novamente encadeado lista de buffers livres do pool ao qual pertence.
Uma vez adquirido um buffer, possvel incrementar seu contador de utilizao
(AddBufferUseCount), permitindo a existncia simultnea de mais de um dono compartilhando o uso
33

4. Sistema Operacional
do buffer. Na primeira vez em que se obtm um buffer, seu contador setado em um. Se o contador
de uso incrementado de um, o buffer ter de ser liberado duas vezes antes de se tornar realmente
livre. Esta caracterstica pode ser importante para alguns tipos de aplicaes, mas exige alguns
cuidados. Quando um buffer possui vrios donos executando concorrentemente, o contedo do buffer
no deve ser alterado a menos que cada dono possa apenas escrever em uma parte do buffer
exclusivamente sua. As nicas operaes permitidas so a leitura e a liberao do buffer.
possvel tambm obter o tamanho de um buffer (GetBufferSize). Como o buffer foi obtido de um
pool de buffers de tamanho conhecido, este servio normalmente desnecessrio. Entretanto em
aplicaes onde a tarefa que utiliza um buffer no necessariamente a mesma que o criou,
conveniente poder determinar seu tamanho.
Se em algum ponto no houver mais necessidade de nenhum dos buffers de um pool, o mesmo pode
ser removido (DeleteBufferPool). Quando isto ocorrer, toda a rea de memria RAM alocada na
criao do pool de buffers liberada.
Memria
O gerenciador de memria controla a alocao dinmica de memria para as tarefas no ambiente
multitarefa. Os seguintes servios de gerenciamento de memria so fornecidos:

Gerenciamento AddBlockUseCount
da memria
FillBlock
FreeBlock
GetBlock
GetBlockSize
GetBlockUsingHandle
GetHandle

Incrementa contador de uso de um bloco de memria


Preenche um bloco de memria com um padro
Libera um bloco de memria
Obtm um bloco de memria
Obtm o tamanho de um bloco de memria
Obtm bloco de memria usando um handle privado
Cria um handle privado de memria

A seguinte nomenclatura adotada para o gerenciador de memria:


bloco de memria: Regio da memria RAM alinhada pargrafo. Um bloco pode ultrapassar 64
Kbytes de tamanho.
contador de uso de um bloco: Inteiro associado a um bloco de memria (mas que no faz parte
dele). usado pelo gerenciador de memria para manter-se informado sobre o nmero de donos
do bloco.
handle de memria Identificador de 32 bits fornecido pelo gerenciador de memria para
identificar um bloco de memria privativo de uma tarefa, mas que ainda assim encontra-se sob o
controle do gerenciador de memria
Qualquer tarefa pode chamar o gerenciador de memria a fim de obter um bloco de memria de
qualquer tamanho (GetBlock). Se o gerenciador de memria for capaz de encontrar um bloco de
memria de tamanho suficientemente grande que atenda o requerido, fornecer um ponteiro para este
bloco e uma indicao do tamanho real do mesmo. O bloco devolvido pode ser um pouco maior do
que o tamanho requisitado.
Se o gerenciador de memria no localizar um bloco de tamanho suficiente, retorna uma indicao de
erro e o tamanho do maior bloco disponvel naquele instante. No entanto, se a tarefa imediatamente
requisitar um bloco com este tamanho, a requisio pode novamente falhar, j que, em um ambiente
multitarefa, outras tarefas com maior prioridade podem ter tomado parte desta memria antes mesmo
que a tarefa possa renovar sua requisio.
Quando o gerenciador de memria aloca um bloco para ser utilizado por uma tarefa, seta o contador
de uso do bloco em um. O dono de um bloco pode incrementar o contador de uso do bloco
(AddBlockUseCount). Neste caso, o bloco dever ser liberado duas vezes antes de se tornar
efetivamente livre.

34

4. Sistema Operacional
O contador de uso do bloco a chave da posse de blocos de memria. O gerenciador de memria
dono de todos os blocos livres. Uma ou mais tarefas podem ser donas de um bloco j alocado. Este
conceito de posse de um bloco semelhante ao apresentado na seo anterior sobre a posse de um
buffer atravs do gerenciador de buffers.
Quando o uso de um bloco de memria no mais necessrio, seu dono pode liber-lo (FreeBlock),
passando o mesmo ponteiro recebido quando o bloco foi originalmente alocado. O gerenciador de
memria decrementa o contador de uso e, caso este tenha chegado a zero, retorna-o ao conjunto de
blocos livres. Caso haja blocos livres adjacentes ao bloco liberado, todos estes blocos so reunidos
para formar um nico bloco maior.
O gerenciador de memria pode fornecer o tamanho de um bloco de memria em particular
(GetBlockSize), o que pode ser til se uma tarefa recebe a posse de um buffer de uma outra tarefa. O
novo dono do bloco pode ento verificar se o tamanho do bloco atende as suas necessidades. Se uma
tarefa corromper os contedos de qualquer parte da memria fora dos limites do seu bloco, os efeitos
so imprevisveis e potencialmente desastrosos.
Uma caracterstica particular do gerenciador de memria permite que qualquer bloco de memria
possa ser tratado como uma seo de memria privada de onde blocos menores podem ser
dinamicamente alocados. Para tanto, a tarefa chama a funo GetHandle, passando-lhe um ponteiro
para uma rea privada de memria, cujo acesso deve ser controlado pelo gerenciador de memria.
Deve-se especificar o tamanho desta rea.
O gerenciador de memria converte esta rea em uma seo de memria para uso privado da tarefa,
identificada por um handle de memria, que um ponteiro de 32 bits retornado para a tarefa que o
requisitou.
O handle de memria deve ser usado para alocar blocos menores da seo de memria privada,
atravs da funo GetBlockUsingHandle. Quando uma seo de memria privada criada, qualquer
tarefa que tenha o handle pode adquirir blocos da seo. Depende apenas da tarefa que criou a seo
privada determinar a que tarefas ser dado o handle.
Listas
O gerenciador de listas fornece facilidades para manipulao de listas circulares genricas.
Uma lista circular uma estrutura de dados usada por uma aplicao para manter uma lista ordenada
de bytes, palavras ou palavras duplas. Cada elemento armazenado em um slot da lista. Cada lista
contm um nmero fixo de slots, definido pelo usurio.
Os servios do gerenciador de listas so reentrantes, permitindo com que sejam compartilhados por
tarefas executando concorrentemente.
O gerenciador de listas fornece os seguintes servios para manipulao de listas:

Gerenciamento AddBottomList
de listas
AddTopList
GetBottomList
GetTopList
ResetList

Acrescenta ao final da lista.


Acrescenta no incio da lista.
Remove do final da lista.
Remove do incio da lista.
Inicializa uma lista circular.

Uma lista circular criada por uma aplicao atravs de uma chamada funo ResetList, para a qual
deve fornecer trs parmetros: o nmero de slots da lista, o tamanho de cada slot (1, 2 ou 4 bytes) e
um ponteiro para a uma rea de memria onde a lista ser armazenada, que deve ser alinhada
palavra e ter um tamanho de (n*s)+8 bytes, onde n o nmero de slots e s o tamanho do slot (1, 2 ou
4).
O gerenciador de listas cria a lista na rea de memria designada e torna-a vazia. Pode-se ento
acrescentar e remover elementos do tamanho definido, no incio e/ou no final da lista, utilizando as
35

4. Sistema Operacional
outras funes do gerenciador de listas (AddBottomList, AddTopList, GetBottomList, GetTopList).
Estas funes devolvem o estado da lista a cada chamada. Quando acrescentando elementos lista,
pode-se saber se a lista j est cheia ou se acabou de ficar cheia com a insero do elemento. Quando
removendo elementos, pode-se saber se no h nenhum elemento na lista ou se a lista acabou de ficar
vazia com a retirada do elemento.
Listas podem ser criadas dinmica ou estaticamente. O exemplo a seguir ilustra listas estticas de
bytes, palavras e palavras duplas. NSLOT definido como o nmero de slots em cada lista.
typedef char SLOT1
typedef int SLOT2
typedef long SLOT4

/* slot de 1 byte */
/* slot de 2 bytes */
/* slot de 4 bytes */

#define NSLOT

64

struct {
int
header[4];
SLOT1 slots[NSLOT];
} bytelist;
/* lista circular com NSLOTS bytes de 8 bits */
struct {
int
header[4];
SLOT2 slots[NSLOT];
} wordlist;
/* lista circular com NSLOTS palavras de 16 bits */
struct {
int
header[4];
SLOT4 slots[NSLOT];
} ptrlist;
/* lista circular com NSLOTS ponteiros de 32 bits */

Entrada/Sada
Comunicao Serial
Os servios de canais seriais foram implementados dentro de um conceito de drivers de
dispositivo, de modo a suportar novas UARTs ou outras placas de comunicao que venham a ser
utilizadas nos dois slots de expanso da placa AL-2005. No momento encontra-se implementado um
driver para a interface serial National NS16550AF das placas satlites do processador AL-2005, que
tanto podem obedecer ao padro RS-232C quanto RS-485, de forma transparente para o driver.
Os seguintes servios relacionados comunicao serial so oferecidos:

Tratamento da SerialConfig
comunicao
RXByte
serial
TXByte
RXBlock
TXBlock

Inicializa canal serial


Recebe um byte do canal serial
Transmite um byte pelo canal serial
Recebe um bloco de bytes do canal serial
Transmite um bloco de bytes pelo canal serial

Atravs destes servios possvel configurar os canais seriais (SerialConfig), transmitir e receber
bytes isolados (TXByte, RXByte) ou realizar comunicaes blocadas (TXBlock, RXBlock).

36

4. Sistema Operacional
O tamanho do buffer de recepo de 128 bytes para verses at a 2.34, e de 512 bytes para as
verses 2.35 ou superiores. Assim que so retirados dados do buffer, novos dados recebidos pela
serial podem ser armazenados. Dados recebidos pela serial com o buffer lotado sero perdidos.
O tamanho do buffer de transmisso de 1024 bytes. Assim que os dados (bytes) comeam a ser
inseridos no buffer iniciada a sua transmisso. A cada byte transmitido liberado um byte no
buffer, deste modo pode-se transferir mais do que 1024 bytes sem riscos de perdas de dados.
Comunicando com o CP
O controle da comunicao com o CP fornece os seguintes servios:

Tratamento
comunicao
com o CP

da HookPLC
GetIDCoproc
GetNumTab
GetTamTab
ReadOp
ReadOpSwap
WriteOp
WriteOpSwap
ReadTab
ReadTabSwap
WriteTab
WriteTabSwap
ReadTabs
WriteTabs
ReadPLC
WritePLC

Define a funo de interface com chamada CHF do


mdulo F-2005 no programa aplicativo do CP
Obtm o nmero de identificao do processador
Obtm o nmero da tabela de configurao
Obtm o tamanho da tabela de configurao
L operandos simples do CP
L operandos simples do CP
Escreve em operandos simples do CP
Escreve em operandos simples do CP
L tabela do CP
L tabela do CP
Escreve em tabela do CP
Escreve em tabela do CP
L tabelas do CP
Escreve em tabelas do CP
L informaes de status do CP ou da rede ALNET II
Escreve informaes de status no CP ou na rede
ALNET II

A funo HookPLC serve para definir uma rotina a ser usada como uma interface entre o programa
aplicativo no processador AL-2005 e a instruo de chamada CHF do mdulo F-2005.016, no
programa aplicativo do CP. Esta rotina servir para analisar as entradas da instruo, e eventualmente
repassar a operao de reset ou configurao para outras tarefas. Caso isto no for necessrio, a
funo HookPLC no precisa ser executada.
As funes GetIDCoproc, GetNumTab e GetTamTab obtm as seguintes informaes armazenados
pelo CP na rea de memria compartilhada com o processador AL-2005: nmero de identificao do
processador corrente, nmero e tamanho da tabela de configurao correntemente associada a um
dado processador, respectivamente.
Uma tarefa pode ter acesso (leitura e escrita) a operandos e informaes de status do CP atravs de
chamadas s funes ReadOp, ReadOpSwap, WriteOp, WriteOpSwap, ReadTab, ReadTabSwap,
WriteTab, WriteTabSwap, ReadTabs, WriteTabs, ReadPLC e WritePLC. Para tanto, deve alocar uma
rea de memria para transferir operandos ou informaes de/para o CP. A tarefa pode
opcionalmente aguardar pelo encerramento da transferncia de dados, especificando um intervalo de
tempo mximo no qual permanecer aguardando.
Ao receber um pedido de comunicao com o CP, o sistema operacional enfileira a requisio, para
trat-la no momento em que o processador AL-2005 dispor da janela de tempo para acessar as reas
de comunicao com o CP.
As funes com Swap (ReadOpSwap, WriteOpSwap, ReadTabSwap, WriteTabSwap) so teis para
leitura de operandos do tipo memria (%M e %TM), tipo decimal (%D e %TD), tipo inteiro (%I e
%TI) e tipo real (%F e %TF), pois fazem a inverso (swap) automtico dos respectivos bytes que
compem as words (%M e %TM) ou double words (%D, %TD, %I, %TI, %F ou %TF), aps ler ou

37

4. Sistema Operacional
antes de escrever os dado no CP, visto que o CP trabalha no formato HI:LO e a BIOS no formato
LO:HI.
Relgio e Sincronismo
A BIOS possui um relgio interno com resoluo de 1ms, que pode ser acessado pela aplicao para
realizar leituras ou escritas (acertos). A estrutura de uma varivel do tipo relgio a seguinte:
typedef struct
{
unsigned int bios_mseg;
unsigned char bios_seg;
unsigned char bios_min;
unsigned char bios_hor;
unsigned char bios_dia;
unsigned char bios_mes;
unsigned char bios_ano;
} BIOSTIME;

// milisegundo do tempo atual 0-999


// segundo do tempo atual 0-59
// minuto do tempo atual 0-59
// hora do tempo atual 0-23
// dia da data atual 0-31
// mes da data atual 1-12
// ano da data atual 00-99

Os seguintes servios so oferecidos em relao ao relgio:


Gerenciamento do GetTime
relgio da BIOS.
SetTime

Leitura do horrio da BIOS.


Escrita do horrio na BIOS.

Alm da manuteno do horrio interno, a BIOS gera sinais de sincronismo atravs do canal serial de
programao (RJ45), permitindo o acerto do relgio do CP atravs do cabo AL-2329. Os pulsos de
sincronismos gerados a cada segundo tem curta durao (largura de 250ms), ou seja, impedem o
escorregamento de horrio entre a BIOS e o CP.
Os pulsos so gerados pelo sinal de RTS (Request To Send) do canal serial de programao PG do
AL-2005. O sinal gerado a cada segundo pode ser visto a seguir:

000 ms

250 ms

000 ms

250 ms

Outros Servios
O sistema operacional fornece ainda os seguintes servios de natureza geral que visam simplificar a
programao de aplicaes em tempo real no microprocessador 80186 da Intel:
Tratamento de ponto flutuante

Tratamento de funes
de baixo nvel

EmuInit
InByte
InWord
OutByte
OutWord
Offset
Segment
SetOffset
SetSegme
nt
38

Inicializa o tratamento de aritmtica em ponto


flutuante
L byte de uma porta de entrada
L palavra de uma porta de entrada
Escreve um byte em uma porta de sada
Escreve uma palavra em uma porta de sada
Obtm o offset de um ponteiro
Obtm o segmento de um ponteiro
Seta o offset de um ponteiro
Seta o segmento de um ponteiro

4. Sistema Operacional
Disable
Enable

Desabilita as interrupes
Habilita as interrupes

39

5. Programao

5. Programao
Neste captulo apresentado um guia de referncia das funes da biblioteca de suporte ao
processador AL-2005. As principais funes disponveis na API do AL-2005, j referenciadas no
captulo 4 - Sistema Operacional, correspondem :
funes para confeco de aplicativos multitarefa: a BIOS do AL-2005 um sistema operacional
multitarefa que fornece uma srie de servios aos aplicativos - criao de tarefas, espera de
eventos, espera de recursos, semforos, identificao de tarefas, etc
funes de comunicao com acesso aos operandos do CP: permitem o acesso (escrita e leitura)
aos operandos do CP (operandos simples e tabelas)
funes de comunicao com acesso aos estados do CP: permitem o acesso (escrita e leitura) s
informaes de estado do CP e estado da sua rede de comunicao ALNET II
funes de alocao de memria dinmica
funes de acesso a placa serial padro RS-485 ou RS-232C
Estas funes so apresentadas em ordem alfabtica e para cada uma delas so especificados:

descrio
sintaxe
resultado
observaes (opcional)
veja tambm

ATENO:
Para as funes desta lista, exceto quando explicitamente indicado, as interrupes so desabilitadas
na entrada da funo e posteriormente restauradas, ao encerrar a execuo da funo, para o estado
em que se encontravam no momento da chamada.

40

5. Programao

Funes da Biblioteca de Suporte


AddBlockUseCount

Descrio

Incrementa contador de uso de um bloco de memria

Sintaxe

STATUS huge AddBlockUseCount (char far *lpBlock, int nIncrement);


onde:
lpBlock
ponteiro para um bloco de memria alocado pelas funes GetBlock ou
GetBlockUsingHandle
nIncrement
valor com sinal a ser somado ao contador de uso do bloco de memria

Resultado

A funo retorna:
OK
INVALID_MEMORY_BLOCK
MEMORY_BLOCK_NOT_IN_USE
MEMORY_BLOCK_USE_COUNT_OVERFLOW

Observaes

Veja tambm

Se o retorno for diferente de OK, o contador de uso do bloco de memria


permanece inalterado
Se o contador de uso de um bloco for incrementado de n, o bloco no ser
liberado at que n chamadas a FreeBlock sejam executadas

GetBlock, GetBlockUsingHandle, FreeBlock

AddBottomList

Descrio

Acrescenta ao final da lista

Sintaxe

STATUS huge AddBottomList (void far *lpList, unsigned long lItem);


onde:
lpList
ponteiro para uma lista circular (veja ResetList)
lItem
varivel de 1, 2 ou 4 bytes a ser acrescentada lista

Resultado

A funo retorna:
0
= insero ok; lista no est cheia
1
= insero ok; lista agora ficou cheia
-1
= no possvel inserir item; lista est cheia

Veja tambm

ResetList, AddTopList, GetTopList, GetBottomList

41

5. Programao

AddBufferUseCount

Descrio

Incrementa contador de uso de um buffer

Sintaxe

STATUS huge AddBufferUseCount (char far *lpBuffer, int nIncrement);


onde:
lpBuffer
ponteiro para um buffer obtido pela chamada da funo GetBuffer
nIncrement
valor com sinal a ser somado ao contador de uso do buffer

Resultado

A funo retorna:
OK
BUFFER_NOT_IN_USE
BUFFER_USE_COUNT_OVERFLOW (contador+nIncrement > 65535)

Observaes

Veja tambm

GetBuffer, FreeBuffer

Se o contador de uso de um buffer for incrementado de n, o buffer no ser


retornado a lista de buffers livres do seu pool at que n chamadas a
FreeBuffer sejam executadas.

AddTopList

Descrio

Acrescenta no incio da lista

Sintaxe

STATUS huge AddTopList (void far *lpList, unsigned long lnItem);


onde:
lpList
ponteiro para uma lista circular (veja ResetList)
lnItem
varivel de 1, 2 ou 4 bytes a ser acrescentada lista

Resultado

A funo retorna:
0
= insero ok; lista no est cheia
1
= insero ok; lista agora ficou cheia
-1
= no possvel inserir item; lista est cheia

Veja tambm

ResetList, AddBottomList, GetTopList, GetBottomList

BeginInterrupt

Descrio

Inicia o atendimento de uma interrupo

Sintaxe

void huge BeginInterrupt (void);


42

5. Programao

Resultado

O supervisor de interrupes salva todos os registradores na pilha do chamador.


Se uma tarefa acabou de ser interrompida, o sistema operacional chaveia para sua
pilha de interrupo antes de retornar para o chamador de BeginInterrupt

Veja tambm

EndInterrupt, SetInterrupt

ChangeInterruptHandler

Descrio

Troca a rotina de atendimento de uma dada interrupo

Sintaxe

void huge ChangeInterruptHandler (int nInterrupt, void interrupt (far


*lpNewProc) (), void interrupt (far *(far *lplpOldProc)) ());
onde:
nInterrupt
nmero da interrupo do microprocessador 80186 da Intel (0-255)
lpNewProc
ponteiro para a nova rotina de atendimento da interrupo
lplpOldProc
ponteiro para armazenar o ponteiro da rotina de atendimento anterior

Resultado

Esta funo NO DEVE ser utilizada para alterar a rotina de atendimento das
interrupes de erro de diviso, overflow ou erro de limite

Veja tambm

SetInterrupt

ChangeTaskPriority

Descrio

Altera a prioridade de uma tarefa

Sintaxe

STATUS huge ChangeTaskPriority (TASKID TaskID, int nPriority);


onde:
TaskID
identificador da tarefa cuja prioridade deve ser alterada
nPriority
prioridade desejada para a tarefa (1 = maior, at 127 = menor)

Resultado

A funo retorna:
OK
INVALID_TASK_ID
INVALID_TASK_PRIORITY (0 ou > 127)

Veja tambm

CreateTask, DeleteTask

CreateBufferPool

43

5. Programao
Descrio

Cria um pool de buffers

Sintaxe

STATUS huge CreateBufferPool (void far *pPoolDefinition, int far *lpnPoolID);


onde:
pPoolDefinition
ponteiro para uma estrutura de definio do pool que descreve o pool de buffers a
ser criado, como:
struct BufferPoolDefinition {
char *pPool;/* ponteiro p/ pool, alinhado palavra */
unsigned int nbuffers; /* nmero de buffers no pool */
unsigned int nsize;
/* tamanho de cada buffer em bytes */
};
A rea alocada para o pool de buffers, alm de estar alinhada palavra, deve ter N
bytes de memria RAM contnua, onde N=((nbuffers*(nsize/2+2))+3)*2 e
N<64Kbytes.
lpnPoolID
ponteiro para armazenar o identificador do pool criado

Resultado

A funo retorna:
OK
NO_FREE_BUFFER_POOL
NO_BUFFERS_DEFINED
BUFFER_TOO_SMALL

Veja tambm

DeleteBufferPool

CreateResource

Descrio

Cria um recurso

Sintaxe

STATUS huge CreateResource (int QueuedTasks, int far *lpnResourceID);


onde:
QueuedTasks
nmero mximo de tarefas que podem esperar pelo recurso em um dado instante
(>=0 e <128)
lpnResourceID
ponteiro para armazenar o identificador do recurso criado

Resultado

A funo retorna:
OK
NO_FREE_RESOURCE_ID
INVALID_RESOURCE_QUEUE_DEPTH

Veja tambm

DeleteResource, ReserveResource, ReleaseResource

CreateSemaphore

Descrio

Cria um semforo

44

5. Programao
Sintaxe

STATUS huge CreateSemaphore (int far *lpSCB, int nValue, int nQueuedTasks);
onde:
lpSCB
ponteiro para uma rea de 4 palavras usada para controle do semforo
nValue
valor inicial do semforo (>=0 e < 128)
nQueuedTasks
nmero mximo de tarefas que podem esperar pelo semforo em um dado
instante (>=0 e <128)

Resultado

A funo retorna:
OK
INVALID_SEMAPHORE_VALUE
INVALID_SEMAPHORE_QUEUE_DEPTH

Observaes

Veja tambm

DeleteSemaphore, WaitSemaphore, SignalSemaphore

As interrupes no so alteradas.

CreateTask

Descrio

Cria uma nova tarefa

Sintaxe

STATUS huge CreateTask (TASKDESCR far *pDescription, TASKID *pTaskID);


onde:
pDescription
ponteiro para o descritor da tarefa; todos os campos deste descritor devem ser
vlidos antes da chamada de CreateTask
pTaskID
ponteiro para armazenar o identificador da tarefa criada

Resultado

A funo retorna:
OK
NO_FREE_TASK_CONTROL_BLOCK
INVALID_TASK_PRIORITY (0 ou >127)

Veja tambm

DeleteTask, KillTask, StopTask, ChangeTaskPriority, StartTask, SendMessage,


SendMessageWait

CreateTimer

Descrio

Cria um temporizador

Sintaxe

STATUS huge CreateTimer (unsigned int far *lpTimeID, unsigned int nPeriod,
unsigned int huge (far *pProc) (unsigned int, long), long lnParam);
onde:
lpTimeID
ponteiro para armazenar o identificador do temporizador criado
nPeriod
45

5. Programao
intervalo de tempo (em ticks de sistema) a ser usado se o temporizador for
peridico; nPeriod=0, em caso contrrio
pProc
ponteiro para a funo de temporizao a ser executada sempre que o
temporizador esgotar o intervalo de tempo nele programado por StartStopTimer
lnParam
parmetro de 4 bytes a ser passado para a funo de temporizao, sempre que a
mesma for chamada pelo sistema operacional; usualmente um ponteiro para
alguma varivel ou estrutura dependente da aplicao
Resultado

A funo retorna:
OK
NO_FREE_TIMER_BLOCK

Observaes

Veja tambm

DeleteTimer, StartStopTimer, ReadTimer

A criao de um temporizador no o dispara automaticamente. A funo


StartStopTimer deve ser usada para disparar o temporizador

DeleteBufferPool

Descrio

Remove um pool de buffers

Sintaxe

STATUS huge DeleteBufferPool (int nPoolID);


onde:
nPoolID
identificador do pool a ser removido

Resultado

A funo retorna:
OK
INVALID_POOL_ID

Observaes

Veja tambm

CreateBufferPool

As interrupes no so alteradas
Nenhuma operao que utilize os servios do gerenciador de buffers e que
venha a afetar os buffers do pool ou a alterar o contedo de qualquer um deles
pode ocorrer durante ou aps a remoo do pool

DeleteResource

Descrio

Remove um recurso

Sintaxe

STATUS huge DeleteResource (int nResourceID);


onde:
nResourceID
identificador do recurso a ser removido

Resultado

A funo retorna:
46

5. Programao
OK
INVALID_RESOURCE_ID
RESOURCE_NOT_FREE
Veja tambm

CreateResource, ReserveResource, ReleaseResource

DeleteSemaphore

Descrio

Remove um semforo

Sintaxe

STATUS huge DeleteSemaphore (int far *lpSCB);


onde:
lpSCB
ponteiro para a rea de controle do semforo inicializada por CreateSemaphore

Resultado

A funo retorna:
OK
NO_SUCH_SEMAPHORE (lpSCB no foi inicializado por CreateSemaphore )
SEMAPHORE_IN_USE

Veja tambm

CreateSemaphore, WaitSemaphore, SignalSemaphore

DeleteTask

Descrio

Remove uma tarefa do sistema operacional

Sintaxe

STATUS huge DeleteTask (TASKID TaskID, int nPriority);


onde:
TaskID
identificador da tarefa a ser removida
nPriority
prioridade de execuo na qual a remoo deve ocorrer; a prioridade da remoo
deve ser menor do que a prioridade de qualquer tarefa que possa afetar a tarefa
sendo removida mas deve ser maior do que a prioridade de qualquer tarefa que
fique permanentemente ativa (compute bound)

Resultado

A funo retorna:
OK
INVALID_TASK_ID
TASK_ABORT_NOT_ALLOWED

Observaes

Veja tambm

ChangeTaskPriority, CreateTask

Aps a remoo, o identificador TaskID da tarefa no ser mais vlido


Uma tarefa pode remover a si mesma
No se deve remover uma tarefa que esteja aguardando por um recurso,
semforo ou grupo de eventos

47

5. Programao

DeleteTimer

Descrio

Remove um temporizador

Sintaxe

void huge DeleteTimer (unsigned int TimerID);


onde:
TimerID
identificador do temporizador a ser removido

Resultado

No h retorno de DeleteTimer.

Observaes

Veja tambm

Uma funo de temporizao no deve chamar DeleteTimer para remover o


temporizador ao qual est associada (ver CreateTimer). Pode, no entanto,
remover quaisquer outros temporizadores aos quais no est associada
Um temporizador ativo pode ser removido

CreateTimer, StartStopTimer, RreadTimer

Disable

Descrio

Desabilita as interrupes

Sintaxe

void huge Disable (void);

Resultado

As interrupes so desabilitadas.

Observaes

Veja tambm

Enable

As interrupes devem permanecer desabilitadas pelo menor perodo de


tempo possvel a fim de no degradar a performance do sistema.

EmuInit

Descrio

Inicializa o tratamento de aritmtica em ponto flutuante

Sintaxe

void far EmuInit (void);

Resultado

No h retorno de EmuInit.

Observaes

Esta funo deve ser chamada por cada tarefa que necessite fazer uso de
valores em ponto flutuante, antes de utiliz-los

48

5. Programao

Enable

Descrio

Habilita as interrupes

Sintaxe

void huge Enable (void);

Resultado

As interrupes so habilitadas.

Veja tambm

Disable

EndInterrupt

Descrio

Termina o atendimento de uma interrupo

Sintaxe

void huge EndInterrupt (void);

Resultado

O supervisor de interrupes verifica se a rotina de atendimento de interrupo


est retornando para uma tarefa interrompida. Em caso positivo, chaveia para a
pilha da tarefa. Os registradores salvos so restaurados da pilha antes de retornar
para o chamador de EndInterrupt

Veja tambm

BeginInterrupt, SetInterrup

EndTask

Descrio

Termina a execuo da tarefa corrente

Sintaxe

void huge EndTask (void);

Resultado

No h retorno de EndTask

Observaes

Veja tambm

Se alguma tarefa estiver aguardando pelo encerramento do processamento de


uma mensagem enviada para esta tarefa, o sistema operacional
automaticamente chama WakeCallingTask para acord-la
EndTask somente pode ser usada para terminar a tarefa que a chamar

SendMessage, StartTask, WakeCallingTask, StopTask,KillTask, DeleteTask

EscreveLeds

Descrio

Permite controlar os LEDs PG, COM PG e ERR do painel do AL-2005.

49

5. Programao
Sintaxe

void huge EscreveLeds (char Valor, char Mascara);


onde:
Valor
valor (tipo mscara) com o(s) LED(s) a ser(em) ligado(s):
PROG_LED
TXRX_LED
ERROR_LED
Mascara
Mscara com o(s) LED(s) afetado(s) pela escrita:
PROG_LED
TXRX_LED
ERROR_LED

Resultado

Sero afetados somente os LEDs cuja mscara esteja habilitada. Para desligar um
ou mais LEDs, basta passar 0 como parmetro de valor, e como mscara o
respectivo LED ou conjunto de LEDs

FillBlock

Descrio

Preenche uma rea de memria com um padro

Sintaxe

STATUS huge FillBlock (MEMBLOCK pBlock, long lnSize, unsigned int


nPattern);
onde:
pBlock
ponteiro para a rea de memria a ser preenchida com o padro
lnSize
tamanho em bytes da rea de memria a ser preenchida, apontada por pBlock
nPattern
padro a ser usado no preenchimento

Resultado

A funo retorna:
OK
MEMORY_NOT_AVAILABLE

Observaes

Veja tambm

As interrupes no so alteradas
Esta funo particularmente til para o preenchimento de grandes regies de
memria que excedam 64 Kbytes. A funo otimizada para velocidade no
preenchimento de grandes regies
A funo preencher qualquer regio de memria, alinhada a byte ou palavra,
com um tamanho par ou mpar. Os 8 bits menos significativos de nPattern
so armazenados em *pBlock. Os 8 bits mais significativos, em *(pBlock+1),
desde que lnSize seja maior do que um. O padro ento repetido at o
tamanho indicado por lnSize

GetBlock, FreeBlock

FreeBlock

50

5. Programao
Descrio

Libera um bloco de memria

Sintaxe

STATUS huge FreeBlock (char far *lpBlock);


onde:
lpBlock
ponteiro para um bloco de memria alocado pelas funes GetBlock ou
GetBlockUsingHandle

Resultado

A funo retorna:
OK
INVALID_MEMORY_BLOCK
MEMORY_BLOCK_NOT_IN_USE

Observaes

Veja tambm

O chaveamento de tarefas desabilitado na entrada da funo e


posteriormente restaurado ao encerrar a execuo da funo
O contador de uso do bloco de memria decrementado de um. Se o contador
de uso chegar a zero, o bloco de memria liberado para reutilizao

GetBlock, GetBlockUsingHandle, AddBlockUseCount

FreeBuffer

Descrio

Libera um buffer

Sintaxe

STATUS huge FreeBuffer (char far *lpBuffer);


onde:
lpBuffer
ponteiro para um buffer obtido atravs da funo GetBuffer

Resultado

A funo retorna:
OK
BUFFER_NOT_IN_USE

Observaes

Veja tambm

GetBuffer, AddBufferUseCount

O contador de uso do buffer decrementado de um. Se o contador de uso


chegar a zero, o buffer retornado para a fila de buffers livres do pool

FreeEventGroup

Descrio

Libera um grupo de eventos

Sintaxe

STATUS huge FreeEventGroup (GROUP Group);


onde:
Group
identificador do grupo de eventos obtido com uma chamada a GetEventGroup

Resultado

A funo retorna:
OK
51

5. Programao
EVENT_GROUP_IN_USE
Veja tambm

GetEventGroup, WaitEvent, SignalEvent

GenerateInterrupt

Descrio

Gera uma interrupo n de software n

Sintaxe

unsigned int huge GenerateInterrupt (int nInterrupt, BIOSREGS far *lpRegs);


onde:
nInterrupt
tipo da interrupo (nmero 0 a 255)
lpRegs
estrutura contendo o valor dos registradores do processador necessrios para a
interrupo de software especificada, que se est gerando

Resultado

A funo retorna o valor do registrador AX no encerramento da rotina de


atendimento da interrupo.
BeginInterrupt,ChangeInterruptHandler, EndInterrupt, SetInterrupt

Veja tambm

GetBlock

Descrio

Obtm um bloco de memria

Sintaxe

STATUS huge GetBlock (long lnSize, MEMBLOCK far *ppBlock, long far
*lpSize);
onde:
lnSize
tamanho em bytes de memria requerida
ppBlock
ponteiro para armazenar o ponteiro do bloco de memria retornado
lpSize
ponteiro para armazenar o tamanho til real, em bytes, do bloco de memria em
ppBlock; lpSize pode ser um pouco maior do que lnSize

Resultado

A funo retorna:
OK (ppBlock um ponteiro para um bloco de memria; lpSize o tamanho real
do bloco)
MEMORY_NOT_AVAILABLE (ppBlock indefinido; lpSize o tamanho do
maior bloco de memria correntemente disponvel)

Observaes

Veja tambm

O chaveamento de tarefas desabilitado na entrada da funo e


posteriormente restaurado ao encerrar a execuo da funo
Se a memria for alocada, o contador de uso do bloco setado em um

AddBlockUseCount, FreeBlock

52

5. Programao

GetBlockSize

Descrio

Obtm o tamanho de um bloco de memria

Sintaxe

STATUS huge GetBlockSize (MEMBLOCK pBlock, long far *lpSize);


onde:
pBlock
ponteiro para um bloco de memria alocado pelas funes GetBlock ou
GetBlockUsingHandle
lpSize
ponteiro para armazenar o tamanho efetivo, em bytes, do bloco de memria
apontado por pBlock

Resultado

A funo retorna:
OK
INVALID_MEMORY_BLOCK
MEMORY_BLOCK_NOT_IN_USE

Veja tambm

GetBlock, GetBlockUsingHandle

GetBlockUsingHandle

Descrio

Obtm um bloco de memria usando um handle privado

Sintaxe

STATUS huge GetBlockUsingHandle (long lnSize, MEMBLOCK far *ppBlock,


long far *lpSize, MEMHANDLE Handle);
onde:
lnSize
tamanho em bytes de memria requerida
ppBlock
ponteiro para armazenar o ponteiro do bloco de memria retornado
lpSize
ponteiro para armazenar o tamanho til real, em bytes, do bloco de memria em
ppBlock; lpSize pode ser um pouco maior do que lnSize
Handle
handle de memria atribudo pelo gerenciador de memria em uma chamada
prvia a GetHandle (o handle um ponteiro)

Resultado

A funo retorna:
OK (ppBlock um ponteiro para um bloco de memria; lpSize o tamanho real
do bloco)
MEMORY_NOT_AVAILABLE (ppBlock indefinido; lpSize o tamanho do
maior bloco de memria correntemente disponvel)
INVALID_MEMORY_BLOCK (Handle um handle de memria invlido;
ppBlock e lpSize so indefinidos)

Observaes

O chaveamento de tarefas desabilitado na entrada da funo e


posteriormente restaurado ao encerrar a execuo da funo
Se a memria for alocada, o contador de uso do bloco setado em um
53

5. Programao

Veja tambm

GetHandle, AddBlockUseCount, FreeBlock

GetBottomList

Descrio

Remove do final da lista

Sintaxe

STATUS huge GetBottomList (void far *lpList, unsigned long far *lpItem);
onde:
lpList
ponteiro para uma lista circular (veja ResetList)
lpItem
ponteiro para armazenar a varivel de 1, 2 ou 4 bytes removida da lista; se
lpItem=NULL (0L), o item removido da lista mas no retornado para a tarefa
que chamou GetBottomList

Resultado

A funo retorna:
0
= remoo ok; lista no est vazia
1
= remoo ok; lista agora ficou vazia
-1
= no possvel remover o item; lista est vazia

Veja tambm

ResetList, AddTopList, AddBottomList, GetTopList

GetBuffer

Descrio

Obtm um buffer de um pool de buffers especfico

Sintaxe

STATUS huge GetBuffer (int nPoolId, char far *lpBuffer);


onde:
nPoolId
identificador do pool de onde o buffer deve ser obtido
lpBuffer
ponteiro para armazenar o ponteiro do bufffer retornado

Resultado

A funo retorna:
OK
INVALID_POOL_ID
NO_BUFFER_AVAILABLE

Observaes

Veja tambm

FreeBuffer, AddBufferUseCount, GetBufferSize

Se um buffer for alocado, o contador de uso do buffer setado em um

GetBufferSize

54

5. Programao
Descrio

Obtm o tamanho de um buffer

Sintaxe

unsigned int huge GetBufferSize (char far *lpBuffer);


onde:
lpBuffer
ponteiro para um buffer obtido atravs da funo GetBuffer

Resultado

A funo retorna o tamanho do buffer em bytes. Se o buffer no estiver sendo


utilizado, retornado 0

Observaes

Veja tambm

GetBuffer

As interrupes no so alteradas

GetEventGroup

Descrio

Obtm o uso de um grupo de eventos

Sintaxe

STATUS huge GetEventGroup (GROUP far *pGroup, unsigned int


nInitialValue);
onde:
pGroup
ponteiro para armazenar o identificador do grupo de eventos alocado
nInitialValue
valor inicial dos 16 flags de evento do grupo

Resultado

A funo retorna:
OK
NO_FREE_EVENT_GROUP

Veja tambm

FreeEventGroup, WaitEvent, SignalEvent

GetHandle

Descrio

Cria um handle privado de memria

Sintaxe

STATUS huge GetHandle (MEMBLOCK pBlock, long lnSize, MEMHANDLE far


*pHandle);
onde:
pBlock
ponteiro para uma rea de memria a ser controlada pelo gerenciador de memria
(pode-se usar blocos alocados atravs das funes GetBlock ou
GetBlockUsingHandle)
lnSize
tamanho em bytes do bloco de memria apontado por pBlock
pHandle
ponteiro para armazenar um handle de memria a ser usado para acessos
subsequentes a blocos menores dentro do bloco maior (o handle retornado um
ponteiro)
55

5. Programao

Resultado

A funo retorna:
OK
MEMORY_NOT_AVAILABLE (tamanho de memria muito pequeno ou excede 1
Mbytes)

Observaes

Veja tambm

GetBlockUsingHandle, FreeBlock, AddBlockUseCount

O chaveamento de tarefas desabilitado na entrada da funo e


posteriormente restaurado ao encerrar a execuo da funo

GetIDCoproc

Descrio
Sintaxe

Obtm o nmero de identificao do processador


Somente pode ser chamada de dentro da funo HookPLC.
char huge GetIDCoproc (void);

Resultado

A funo retorna o nmero de identificao do processador no barramento


(%Rxxxx / 8), podendo retonar valores de 0 a 7. Exemplo: %R000 = 0,
%R0008 = .1, %R0016 = 2 etc.

Veja tambm

HookPLC, GetNumTab, GetTamTab

GetMailboxMessage

Descrio

Obtm a mensagem de maior prioridade

Sintaxe

STATUS huge GetMailboxMessage (int nPriority, char far *lpMessage);


onde:
nPriority
prioridade da caixa postal na qual deve-se buscar a mensagem (0=maior;
3=menor)
lpMessage
nome de um array ou ponteiro para 12 bytes consecutivos para onde a mensagem
ser copiada caso esteja disponvel; a rea para cpia da mensagem pode ser
qualquer estrutura de 12 bytes

Resultado

A funo retorna:
OK
CALLING_TASK_WAITING
NO_MESSAGE_WAITING

Observaes

Se o retorno for diferente de OK, a varivel em lpMessage no alterada


Se o retorno for CALLING_TASK_WAITING, a tarefa que est chamando
GetMailboxMessage est correntemente processando uma mensagem enviada
por outra tarefa, que est por sua vez aguardando por uma confirmao de que
a mensagem foi recebida. No possvel obter nova mensagem antes que a
mensagem corrente tenha sido completamente processada. Para tanto deve-se
chamar WakeCallingTask para acordar a tarefa que est aguardando e s
56

5. Programao
ento voltar a chamar GetMailboxMessage
Veja tambm

SendMessage, SendMessageWait, WakeCallingTask

GetNumTab

Descrio
Sintaxe

Obtm o nmero da tabela de configurao associada a um processador


Somente pode ser chamada de dentro da funo HookPLC.
char huge GetNumTab (char num_coproc);
onde:
num_coproc
nmero de identificao do processador

Resultado

A funo retorna o nmero da tabela de configurao associada ao processador


especificado

Veja tambm

HookPLC, GetIDCoproc, GetTamTab

GetTamTab

Descrio
Sintaxe

Obtm o tamanho da tabela de configurao associada a um processador


Somente pode ser chamada de dentro da funo HookPLC.
char huge GetTamTab (char num_coproc);
onde:
num_coproc
nmero de identificao do processador

Resultado

A funo retorna o tamanho da tabela de configurao associada ao processador


especificado

Veja tambm

HookPLC, GetIDCoproc, GetNumTab

GetTaskDescriptor

Descrio

Obtm o ponteiro para o descritor de uma tarefa

Sintaxe

STATUS huge GetTaskDescriptor (TASKID TaskID, TASKDESCR far * (far *


lplpDescr));
onde:
TaskID
identificador da tarefa que se deseja obter o ponteiro para o descritor
lplpDescr
ponteiro para armazenar o ponteiro para o descritor da tarefa

Resultado

A funo retorna:
OK
57

5. Programao
INVALID_TASK_ID
Observaes

Veja tambm

GetTaskID, LocateTask, DeleteTask

As interrupes no so alteradas
Se TaskID invlido, retornado o valor NULL (0L) em lplpDescr

GetTaskID

Descrio

Obtm o identificador da tarefa corrente

Sintaxe

TASKID huge GetTaskID (void);

Resultado

A funo retorna o identificador da tarefa correntemente em execuo

Observaes

Veja tambm

GetTaskDescriptor, LocateTask

As interrupes no so alteradas

GetTaskStatus

Descrio

Obtm o estado de uma tarefa

Sintaxe

STATUS huge GetTaskStatus (TASKID TaskID, TASKSTATUS far


*lpTaskStatus);
onde:
TaskID
identificador da tarefa que se deseja obter o estado
lpTaskStatus
ponteiro para armazenar o estado da tarefa

Resultado

A funo retorna:
OK
INVALID_TASK_ID

GetTime

Descrio

Leitura do relgio interno da BIOS.

Sintaxe

void huge GetTime (BIOSTIME far *lpTime);


onde:
lpTime
ponteiro para a estrutura onde ser armazenado o horrio

Veja tambm

SetTime
58

5. Programao

GetTopList

Descrio

Remove do incio da lista

Sintaxe

STATUS huge GetTopList (void far *lpList, unsigned long far *lpitem);
onde:
lpList
ponteiro para uma lista circular (veja ResetList)
lpitem
ponteiro para armazenar a varivel de 1, 2 ou 4 bytes removida da lista; se
lpItem=NULL (0L), o item removido da lista mas no retornado para a tarefa
que chamou GetTopList

Resultado

A funo retorna:
0
= remoo ok; lista no est vazia
1
= remoo ok; lista agora ficou vazia
-1
= no possvel remover o item; lista est vazia

Veja tambm

ResetList, AddTopList, AddBottomList, GetBottomList

HookPLC

Descrio

Define a funo de interface com chamada CHF do mdulo F-2005 no programa


aplicativo do CP

Sintaxe

char huge HookPLC (char (*fptr_user)(int comando));


onde:
fptr_user
ponteiro para a funo a ser executada sempre que, no programa aplicativo do CP,
ao se executar uma chamada CHF ao mdulo F-2005 houver variao em alguma
das entradas da instruo CHF
comando
parmetro da funo de tratamento das entradas da instruo CHF F-2005,
apontada por fptr_user:
CHF_CONFIGURA (entrada configura ligada)
CHF_RESET (entrada reset ligada)
CHF_CONF_RES (entradas configura e reset ligadas)

Resultado

A funo retorna:
0
= OK
1
= esgotada a estrutura para armazenamento de ponteiros

Observaes

Veja tambm

GetIDCoproc, GetNumTab, GetTamTab

As funes de leitura e escrita de operandos, operandos tabela ou status no


podem ser disparadas pelas funes de tratamento das entradas da instruo
CHF

59

5. Programao

InByte

Descrio

L byte de uma porta de entrada

Sintaxe

char huge InByte (int nPort);


onde:
nPort
nmero da porta de entrada

Resultado

A funo retorna o byte lido

Observaes

Veja tambm

InWord, OutByte, OutWord

As interrupes no so alteradas

InWord

Descrio

L palavra de uma porta de entrada

Sintaxe

unsigned int huge InWord (int nPort);


onde:
nPort
nmero da porta de entrada

Resultado

A funo retorna a palavra lida

Observaes

Veja tambm

InByte, OutByte, OutWord

As interrupes no so alteradas

KillTask

Descrio

Mata uma tarefa


Fora que uma tarefa pronta, em execuo ou suspensa seja encerrada. Todas as
mensagens nas caixas postais da tarefa sero descartadas.

Sintaxe

STATUS huge KillTask (TASKID TaskID);


onde:
TaskID
identificador da tarefa a ser morta

Resultado

A funo retorna:
OK
INVALID_TASK_ID
TASK_ABORT_NOT_ALLOWED
60

5. Programao

Observaes

Veja tambm

Qualquer tarefa que esteja aguardando que a tarefa morta responda a uma
mensagem retomar sua execuo
Uma tarefa pode matar a si mesma
No se deve matar uma tarefa que esteja aguardando por um recurso,
semforo ou grupo de eventos

EndTask, DeleteTask

LocateTask

Descrio

Localiza uma tarefa atravs de seu nome

Sintaxe

STATUS huge LocateTask (TASKID far *lpTaskID, char far *lpsTaskName);


onde:
lpTaskID
ponteiro para armazenar o identificador da tarefa caso ela possa ser localizada
lpsTaskName
ponteiro para o tag de quatro caracteres que o nome da tarefa que se deseja
localizar

Resultado

A funo retorna:
OK
INVALID_TASK_ID

Observaes

Se mais de uma tarefa foram criadas com o mesmo tag, obtm-se o


identificador de qualquer uma delas
Todos os quatro caracteres em lpsTaskName devem ser iguais ao tag da tarefa
para se obter um identificador vlido

Veja tambm

GetTaskID, GetTaskDescriptor

Descrio

Obtm o offset de um ponteiro

Sintaxe

unsigned int huge Offset (void far *lptr);


onde:
lptr
ponteiro para a memria

Resultado

A funo retorna um valor inteiro de 16 bits sem sinal representando a parte do


offset de um ponteiro lptr

Observaes

Veja tambm

Segment, SetOffset, SetSegment

Offset

As interrupes no so alteradas

61

5. Programao

OutByte

Descrio

Escreve um byte em uma porta de sada

Sintaxe

void huge OutByte (int nPort, char Byte);


onde:
nPort
nmero da porta de sada
Byte
byte a ser escrito

Observaes

Veja tambm

OutWord, InByte, InWord

As interrupes no so alteradas

OutWord

Descrio

Escreve uma palavra em uma porta de sada

Sintaxe

void huge OutWord (int nPort, int Word);


onde:
nPort
nmero da porta de sada
Word
palavra a ser escrita

Observaes

Veja tambm

OutByte, InByte, InWord

As interrupes no so alteradas

ReadOp

Descrio
Sintaxe

L operandos simples do CP
No pode ser chamada de dentro da funo HookPLC.
STATUS huge ReadOp (void *buffer, char tipo_op, int address, int sub, unsigned
char num_op, unsigned nTimeOut);
onde:
buffer
ponteiro para a rea da memria onde sero armazenados os valores do operando
lido do CP
tipo_op
tipo do operando do CP:
TIPO_MEMORIA
TIPO_INTEIRO
TIPO_DECIMAL
62

5. Programao
TIPO_REAL
TIPO_E_S
TIPO_AUXILIAR
address
endereo do operando no CP
sub
endereo da subdiviso do operando do CP
num_op
nmero de operandos do CP que se deseja ler
nTimeOut
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
leitura dos operandos especificados; se nTimeOut=0, a tarefa retornar
imediatamente, sem aguardar o encerramento da leitura, permanecendo a
requisio na fila da BIOS para ser executada
Resultado

A funo retorna:
OK (funo executada com sucesso)
PLC_NOT_READY (comunicao inoperante com o CP: a BIOS no est
recebendo as interrupes do CP, que permitem o acesso a sua memria;
provvel que a funo F-2005.016 no esteje sendo chamada pelo ladder)
WAITING_QUEUE_POSITION (a fila de requisies de comunicao de 16
posies da BIOS est lotada e esta comunicao no pde ser atendida; verificar
se no esto sendo feitas muitas leituras/escritas e poucas chamadas a funo
F-2005.016)
PLC_TIME_OUT (o tempo especificado no parmetro nTimeOut da funo foi
excedido antes da BIOS conseguir realizar a leitura; verificar com que freqncia
esto sendo feitas chamadas a funo F-2005.016)
COD_ERRO_TIPO_OPERANDO_INVALIDO (o tipo de operando especificado
no parmetro tipo_op da funo no um valor vlido)
COD_ERRO_OPERANDO_NAO_DEFINIDO (houve a tentativa de leitura de um
operando no declarado na memria do CP)
COD_ERRO_NUMERO_OPERANDOS_INVALIDO (houve a tentativa de leitura
de um nmero invlido de operandos: 0 ou maior que o limite mximo permitido
para o tipo)

Observao

Veja tambm

Com esta funo possvel ler a seguinte quantidade de operandos:


96 do tipo auxiliar (%A);
96 do tipo entrada ou sada (%E/S);
255 do tipo memria (%M);
255 do tipo decimal (%D);
255 do tipo inteiro (%I);
255 do tipo real (%F).
Se o tipo de operando for TIPO_AUXILIAR ou TIPO_E_S, o parmetro sub
dever conter o nmero do bit (0 a 7) do octeto a ser lido por esta operao,
ou o valor -1 para leitura do octeto inteiro. O valor lido armazenado a partir
do bit 0 do operando destino. O ltimo byte de dado recebido deve ser
mascarado pela aplicao, se seus bits no forem todos vlidos.

ReadOpSwap, WriteOp, WriteOpSwap, ReadTab, ReadTabSwap, WriteTab,


WriteTabSwap, ReadTabs, WriteTabs, ReadPLC, WritePLC

ReadOpSwap

63

5. Programao
Descrio

Sintaxe

Leitura de operandos simples tipo Memria, Decimal, Inteiro ou Real (%M, %D,
%I ou %F) do CP, invertendo automaticamente os bytes de valores dos operandos
para o formato utilizado pela BIOS
No pode ser chamada de dentro da funo HookPLC.
STATUS huge ReadOpSwap (void *buffer, char tipo_op, int address, int sub,
unsigned char num_op, unsigned nTimeOut);
onde:
buffer
ponteiro para a rea da memria onde sero armazenados os valores do operando
lido do CP
tipo_op
tipo do operando do CP:
TIPO_MEMORIA
TIPO_INTEIRO
TIPO_DECIMAL
TIPO_REAL
Address
Endereo do operando no CP
Sub
Endereo da subdiviso do operando do CP
num_op
nmero de operandos do CP que se deseja ler
nTimeOut
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
leitura dos operandos especificados; se nTimeOut=0, a tarefa retornar erro
imediatamente, pois a BIOS no suporta o acmulo de leituras com swap em sua
fila de requisies, devendo-se aguardar sempre pela sua execuo

Resultado

A funo retorna:
OK (funo executada com sucesso)
PLC_NOT_READY (comunicao inoperante com o CP: a BIOS no est
recebendo as interrupes do CP, que permitem o acesso a sua memria;
provvel que a funo F-2005.016 no esteje sendo chamada pelo ladder)
WAITING_QUEUE_POSITION (a fila de requisies de comunicao de 16
posies da BIOS est lotada e esta comunicao no pde ser atendida; verificar
se no esto sendo feitas muitas leituras/escritas e poucas chamadas a funo
F-2005.016)
PLC_TIME_OUT (o tempo especificado no parmetro nTimeOut da funo foi
excedido antes da BIOS conseguir realizar a leitura; verificar com que freqncia
esto sendo feitas chamadas a funo F-2005.016; cdigo de erro retornado
quando nTimeOut=0)
COD_ERRO_TIPO_OPERANDO_INVALIDO (o tipo de operando especificado
no parmetro tipo_op da funo no um valor vlido)
COD_ERRO_OPERANDO_NAO_DEFINIDO (houve a tentativa de leitura de um
operando no declarado na memria do CP)
COD_ERRO_NUMERO_OPERANDOS_INVALIDO (houve a tentativa de leitura
de um nmero invlido de operandos: 0 ou maior que o limite mximo permitido
para o tipo)

Observao

Com esta funo possvel ler at 4096 bytes de dados do CP, ou seja, at
2048 operandos memria (%M) ou 1024 operandos decimal (%D), inteiro
(%I) ou real (%F).
Os operandos com mais de um byte no CP (AL-2003 e AL-2004) esto no
formato HI:LO, enquanto que no AL-2005 no formato LO:HI. Por isso da
necessidade de converso aps a leitura e antes da escrita de operandos tipo
64

5. Programao
memria (%M e %TM), decimal (%D e %TD), inteiro (%I e %TI) e real (%F
e %TF) no CP.
Veja tambm

ReadOp, WriteOp, WriteOpSwap, ReadTab, ReadTabSwap, WriteTab,


WriteTabSwap, ReadTabs, WriteTabs, ReadPLC, WritePLC

ReadPLC

Descrio
Sintaxe

L informaes de status do CP ou da rede ALNET II


No pode ser chamada de dentro da funo HookPLC.
STATUS huge ReadPLC (void *buffer, char tipo_req, unsigned nTimeOut);
onde:
buffer
ponteiro para a rea da memria onde sero armazenados as informaes de status
lidas do CP
tipo_req
tipo do operando do CP:
TIPO_STATUS_CP
TIPO_STATUS_ALNETII
nTimeOut
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
leitura das informaes especificadas; se nTimeOut=0, a tarefa retornar
imediatamente, sem aguardar o encerramento da leitura

Resultado

A funo retorna:
OK (funo executada com sucesso)
PLC_NOT_READY (comunicao inoperante com o CP: a BIOS no est
recebendo as interrupes do CP, que permitem o acesso a sua memria;
provvel que a funo F-2005.016 no esteje sendo chamada pelo ladder)
WAITING_QUEUE_POSITION (a fila de requisies de comunicao de 16
posies da BIOS est lotada e esta comunicao no pde ser atendida; verificar
se no esto sendo feitas muitas leituras/escritas e poucas chamadas a funo
F-2005.016)
PLC_TIME_OUT (o tempo especificado no parmetro nTimeOut da funo foi
excedido antes da BIOS conseguir realizar a leitura; verificar com que freqncia
esto sendo feitas chamadas a funo F-2005.016)
COD_ERRO_TIPO_OPERANDO_INVALIDO (o tipo de operando especificado
no parmetro tipo_op da funo no um valor vlido)

Observaes

As estruturas de dados de armazenamento das informaes de estado do CP e


de estado da ALNET II devem ser do tipo STATUS_PLC e
STATUS_ALNETII respectivamente:

typedef struct STATUS_PLC


{
char TipoUCP;
/* Tipo de UCP */
char Extensao[8];
/* Identificacao complementar */
char Versao[2];
/* Versao do executivo */
char ModoOperacao1;
/* Modo de operacao do CP */
char ModoOperacao2;
/* Modo de operacao complementar */
char CodigoMensagem[4]; /* Mensagens de erro ou advertencia */
char TempoCiclo[8];
/* Tempos de ciclo de execucao do CP */
65

5. Programao
char
char
char
char
char
char
char
char
char

MaxTempoExec[1]; /* Tempos de execucao do ladder */


IntE18E19[2];
/* Tempos de interrupcao E018 e E019 */
Livre[2];
EstadoRAM1;
/* Estado da memoria RAM */
EstadoRAM2;
/* RAM compactada/nao compactada (0/1) */
RAMLivre[16];
/* Memoria de RAM livre (memorias 0-7) */
EstadoEPROM;
/* Estado da memoria EPROM */
EPROMLivre[16]; /* Memoria de EPROM livre (memorias 0-7) */
Reserva[100];

}
typedef struct STATUS_ALNETII
{
unsigned int NumeroTxOk; /* Num de transmissoes sem erros */
unsigned int NumeroTxTcdt; /* Num de TX com colisoes fora do preambulo */
unsigned int NumeroTxUdr; /* Num de TX com underrun */
unsigned int NumeroTxNoack; /* Num de TX sem ACK de hardware */
unsigned int NumeroTxErro; /* Num de TX abortadas por excesso de erro */
unsigned int NumeroTxTimeout; /* Numero de time_out de buffers */
unsigned int NumeroTxFalta; /* Numero de vezes que estourou buffer de TX */
unsigned int Livre0[2];
unsigned int NumeroRxOk;
/* Num de recepcoes sem erros */
unsigned int NumeroRxAbt; /* Num de RX abortadas por colisao */
unsigned int NumeroRxOvr; /* Num de RX com overrun */
unsigned int NumeroRxCrc; /* Num de RX com erro de CRC */
unsigned int NumeroRxAe;
/* Num de RX com erro de alinhamento */
unsigned int NumeroRxLong; /* Num de RX de pacotes muito grandes */
unsigned int NumeroRxTimeout; /* Num de time-outs em respostas de pacote */
unsigned int NumeroRxFalta; /* Numero de vezes que estorou buffer de RX */
unsigned int Livre1[1];
unsigned int Velocidade;
/* Velocidade de comunicacao */
unsigned int EnderecoNo; /* Endereco do CP na rede */
unsigned int EnderecoSubrede; /* Endereco da subrede local */
unsigned int Multicast;
/* Grupos de multicast que o CP pertence */
unsigned int Gateway1;
/* Endereco do primeiro gateway */
unsigned int Gateway2;
/* Endereco do segundo gateway */
unsigned int TimeoutLocal; /* Time out local */
unsigned int TimeoutExterno; /* Time out externo */
unsigned int TimeoutPacote; /* Time out de pacotes */
unsigned int TentativasTx; /* Numero de tentativas de retransmissao */
char
NomeEstacao[20]; /* Nome de identificacao do CP na rede */
unsigned int TipoConexao; /* Tipo de conexao fisica (0=eletrica,1=otica) */
unsigned int Redundancia; /* Redundancia da conexao (0=sem,1=com) */
unsigned int PeriodoTeste; /* Periodo para envio de mensagem de teste */
/* para conexoes redundantes (em seg.) */
unsigned int TempoComutacao; /* Tempo de espera para comutacao da conexao
(seg.) */
unsigned int Livre2[2];
unsigned int ConexaoSelec; /* Conexao de comunicacao selecionada (1 ou 2)
*/
unsigned int EstadoConexao1; /* Estado da conexao 1 (0=ok,1=falha) */
unsigned int EstadoConexao2; /* Estado da conexao 2 (0=ok,1=falha) */
66

5. Programao
unsigned int Livre3[1]
unsigned int ConexaoForcada; /* Conexao forcada (0=sem forcamento,1,2) */
unsigned int EsdadoForcado1; /* Estado forcado da conexao 1 (0=ok,1=falha)
*/
unsigned int EsdadoForcado2; /* Estado forcado da conexao 2 (0=ok,1=falha)
*/
}
Veja tambm

ReadOp, ReadOpSwap, WriteOp, WriteOpSwap, ReadTab, ReadTabSwap,


WriteTab, WriteTabSwap, ReadTabs, WriteTabs, WritePLC

ReadTab

Descrio
Sintaxe

Resultado

L tabela do CP
No pode ser chamada de dentro da funo HookPLC.
STATUS huge ReadTab (void *buffer, char tipo_op, int address, int pos_ini,
unsigned char num_op, unsigned char far *pnum_op, unsigned nTimeOut);
onde:
buffer
ponteiro para a rea da memria onde ser armazenada a tabela lida do CP
tipo_op
tipo de tabela do CP:
TIPO_TABELA_MEMORIA
TIPO_TABELA_INTEIRO
TIPO_TABELA_DECIMAL
TIPO_TABELA_REAL
address
endereo da tabela do CP
pos_ini
posio inicial da tabela
num_op
nmero de operandos da tabela a serem lidos; se num_op=-1 (que para o tipo
unsigned char equivale a 255) a tabela completa lida e seu tamanho devolvido
no endereo apontado por pnum_op
pnum_op
ponteiro para armazenar o nmero total de operandos da tabela, se num_op=-1
(que para o tipo unsigned char equivale a 255)
nTimeOut
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
leitura da tabela especificada; se nTimeOut=0, a tarefa retornar imediatamente,
sem aguardar o encerramento da leitura, permanecendo a requisio na fila da
BIOS para ser executada
A funo retorna:
OK (funo executada com sucesso)
PLC_NOT_READY (comunicao inoperante com o CP: a BIOS no est
recebendo as interrupes do CP, que permitem o acesso a sua memria;
provvel que a funo F-2005.016 no esteje sendo chamada pelo ladder)
WAITING_QUEUE_POSITION (a fila de requisies de comunicao de 16
posies da BIOS est lotada e esta comunicao no pde ser atendida; verificar
se no esto sendo feitas muitas leituras/escritas e poucas chamadas a funo
67

5. Programao
F-2005.016)
PLC_TIME_OUT (o tempo especificado no parmetro nTimeOut da funo foi
excedido antes da BIOS conseguir realizar a leitura; verificar com que freqncia
esto sendo feitas chamadas a funo F-2005.016)
COD_ERRO_TIPO_OPERANDO_INVALIDO (o tipo de operando especificado
no parmetro tipo_op da funo no um valor vlido)
COD_ERRO_OPERANDO_NAO_DEFINIDO (houve a tentativa de leitura de
uma tabela no declarada na memria do CP)
COD_ERRO_INDICE_TABELA_INVALIDO (houve a tentativa de leitura de uma
posio de tabela no declarada na memria do CP)
COD_ERRO_NUMERO_OPERANDOS_INVALIDO (houve a tentativa de leitura
de um nmero invlido de posies da tabela: 0)
Observaes

Veja tambm

Com esta funo possvel ler at 255 posies de tabela, seja ela do tipo
memria (%TM), decimal (%TD), inteiro (%TI) ou real (%TF)
A rea de memria alocada para a leitura deve ser suficiente para acomodar
toda a tabela especificada. Um erro fatal pode ocorrer caso sejam
corrompidos os contedos de qualquer parte da memria fora dos limites da
rea alocada

ReadOp, ReadOpSwap, WriteOp, WriteOpSwap, ReadTabSwap, WriteTab,


WriteTabSwap, ReadTabs, WriteTabs, ReadPLC, WritePLC

ReadTabs

Descrio
Sintaxe

Resultado

L tabelas do CP
No pode ser chamada de dentro da funo HookPLC.
STATUS huge ReadTabs (void *buffer, char tipo_op, int address, unsigned char
num_op, unsigned nTimeOut);
onde:
buffer
ponteiro para a rea da memria onde sero armazenadas as tabelas lidas do CP
tipo_op
tipo de tabela do CP:
TIPO_TABELA_MEMORIA
TIPO_TABELA_INTEIRO
TIPO_TABELA_DECIMAL
TIPO_TABELA_REAL
address
endereo da primeira tabela a ser lida do CP
num_op
nmero de tabelas a serem lidas
nTimeOut
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
leitura das tabelas especificadas; se nTimeOut=0, a tarefa retornar
imediatamente, sem aguardar o encerramento da leitura, permanecendo a
requisio na fila da BIOS para ser executada
A funo retorna:
OK (funo executada com sucesso)
PLC_NOT_READY (comunicao inoperante com o CP: a BIOS no est
recebendo as interrupes do CP, que permitem o acesso a sua memria;
68

5. Programao
provvel que a funo F-2005.016 no esteje sendo chamada pelo ladder)
WAITING_QUEUE_POSITION (a fila de requisies de comunicao de 16
posies da BIOS est lotada e esta comunicao no pde ser atendida; verificar
se no esto sendo feitas muitas leituras/escritas e poucas chamadas a funo
F-2005.016)
PLC_TIME_OUT (o tempo especificado no parmetro nTimeOut da funo foi
excedido antes da BIOS conseguir realizar a leitura; verificar com que freqncia
esto sendo feitas chamadas a funo F-2005.016)
COD_ERRO_TIPO_OPERANDO_INVALIDO (o tipo de operando especificado
no parmetro tipo_op da funo no um valor vlido)
COD_ERRO_OPERANDO_NAO_DEFINIDO (houve a tentativa de leitura de
uma tabela no declarada na memria do CP)
COD_ERRO_NUMERO_OPERANDOS_INVALIDO (houve a tentativa de leitura
de um nmero invlido de posies da tabela: 0 posies ou mais posies que o
permitido por esta funo)
Observaes

Veja tambm

Com esta funo possvel ler at 2048 bytes de dados do CP, ou seja, at
1024 posies de operandos tabela memria (%TM) ou at 512 posies de
operandos tabela decimal (%TD), tabela inteiro (%TI) ou tabela real (%TF)
A rea de memria alocada para a leitura deve ser suficiente para acomodar
todas as tabelas especificadas. Um erro fatal pode ocorrer caso sejam
corrompidos os contedos de qualquer parte da memria fora dos limites da
rea alocada
O nmero de posies de tabelas que sero lidas corresponde a soma de
posies das N tabelas a serem lidas a partir da primeira tabela

ReadOp, ReadOpSwap, WriteOp, WriteOpSwap, ReadTab, ReadTabSwap,


WriteTab, WriteTabSwap, WriteTabs, ReadPLC, WritePLC

ReadTabSwap

Descrio

Sintaxe

Leitura de tabelas tipo Memria, Decimal, Inteiro ou Real (%TM, %TD, %TI ou
%TF) do CP, invertendo automaticamente os bytes de valores dos operandos para
o formato utilizado pela BIOS
No pode ser chamada de dentro da funo HookPLC.
STATUS huge ReadTabSwap (void *buffer, char tipo_op, int address, int pos_ini,
unsigned char num_op, unsigned char far *pnum_op, unsigned nTimeOut);
onde:
buffer
ponteiro para a rea da memria onde ser armazenada a tabela lida do CP
tipo_op
tipo de tabela do CP:
TIPO_TABELA_MEMORIA
TIPO_TABELA_INTEIRO
TIPO_TABELA_DECIMAL
TIPO_TABELA_REAL
address
endereo da tabela do CP
pos_ini
posio inicial da tabela
num_op
nmero de operandos da tabela a serem lidos; se num_op=-1, a tabela completa
69

5. Programao
lida e seu tamanho devolvido no endereo apontado por pnum_op
pnum_op
ponteiro para armazenar o nmero total de operandos da tabela, se num_op=-1
nTimeOut
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
leitura da tabela especificada; se nTimeOut=0, a tarefa retornar erro
imediatamente, pois a BIOS no suporta o acmulo de leituras com swap em sua
fila de requisies, devendo-se aguardar sempre pela sua execuo
Resultado

A funo retorna:
OK (funo executada com sucesso)
PLC_NOT_READY (comunicao inoperante com o CP: a BIOS no est
recebendo as interrupes do CP, que permitem o acesso a sua memria;
provvel que a funo F-2005.016 no esteje sendo chamada pelo ladder)
WAITING_QUEUE_POSITION (a fila de requisies de comunicao de 16
posies da BIOS est lotada e esta comunicao no pde ser atendida; verificar
se no esto sendo feitas muitas leituras/escritas e poucas chamadas a funo
F-2005.016)
PLC_TIME_OUT (o tempo especificado no parmetro nTimeOut da funo foi
excedido antes da BIOS conseguir realizar a leitura; verificar com que freqncia
esto sendo feitas chamadas a funo F-2005.016; cdigo de erro retornado
quando nTimeOut=0)
COD_ERRO_TIPO_OPERANDO_INVALIDO (o tipo de operando especificado
no parmetro tipo_op da funo no um valor vlido)
COD_ERRO_OPERANDO_NAO_DEFINIDO (houve a tentativa de leitura de
uma tabela no declarada na memria do CP)
COD_ERRO_INDICE_TABELA_INVALIDO (houve a tentativa de leitura de uma
posio de tabela no declarada na memria do CP ou quantidade de dados a
transferir ultrapassa 2048 bytes)
COD_ERRO_NUMERO_OPERANDOS_INVALIDO (houve a tentativa de leitura
de um nmero invlido de posies da tabela: 0)

Observaes

Veja tambm

Com esta funo possvel ler at 255 posies de tabela, seja ela do tipo
memria (%TM), decimal (%TD), inteiro (%TI) ou real (%TF)
A rea de memria alocada para a leitura deve ser suficiente para acomodar
toda a tabela especificada. Um erro fatal pode ocorrer caso sejam
corrompidos os contedos de qualquer parte da memria fora dos limites da
rea alocada
Os operandos com mais de um byte no CP (AL-2003 e AL-2004) esto no
formato HI:LO, enquanto que no AL-2005 no formato LO:HI. Por isso da
necessidade de converso aps a leitura e antes da escrita de operandos tipo
memria (%M e %TM), decimal (%D e %TD), inteiro (%I e %TI) e real (%F
e %TF) no CP

ReadOp, ReadOpSwap, WriteOp, WriteOpSwap, ReadTab, WriteTab,


WriteTabSwap, ReadTabs, WriteTabs, ReadPLC, WritePLC

ReadTimer

Descrio

L o valor corrente de um temporizador

Sintaxe

unsigned int huge ReadTimer (unsigned int TimerID);


70

5. Programao
onde:
TimerID
identificador do temporizador a ser lido
Resultado

A funo retorna o valor do temporizador em ticks do sistema, isto , o tempo


restante antes do temporizador esgotar seu intervalo de tempo programado com
StartStopTimer.

Observaes

Veja tambm

CreateTimer, DeleteTimer, StartStopTimer

As interrupes no so alteradas

ReleaseNestedResource

Descrio

Libera um recurso aninhado

Sintaxe

STATUS huge ReleaseNestedResource (int nResourceID);


onde:
nResourceID
identificador do recurso a ser liberado

Resultado

A funo retorna:
OK
INVALID_RESOURCE_ID
RESOURCE_NOT_OWNED (o recurso no pode ser liberado pois no pertence
tarefa corrente)

Observaes

Veja tambm

O contador de uso do recurso decrementado de um a cada chamada a


ReleaseNestedResource. O recurso no fica livre enquanto o contador de uso
no chegar a zero
Quando se tornar livre, o recurso ser imediatamente repassado para a tarefa
(se houver alguma) que estiver aguardando por ele h mais tempo. Se
necessrio, o reescalonamento de tarefas ocorre imediatamente

CreateResource, DeleteResource, ReserveResource, ReleaseResource

ReleaseResource

Descrio

Libera um recurso incondicionalmente

Sintaxe

STATUS huge ReleaseResource (int nResourceID);


onde:
nResourceID
identificador do recurso a ser liberado

Resultado

A funo retorna:
OK
INVALID_RESOURCE_ID
RESOURCE_NOT_OWNED (o recurso no pode ser liberado pois no pertence
71

5. Programao
tarefa corrente)
Observaes

Veja tambm

CreateResource, DeleteResource, ReserveResource, ReleaseNestedResource

O contador de uso do recurso zerado e o recurso liberado, podendo ser


imediatamente repassado para a tarefa (se houver alguma) que estiver
aguardando por ele h mais tempo. Se necessrio, o reescalonamento de
tarefas ocorre imediatamente

ReserveResource
Descrio

Reserva um recurso

Sintaxe

STATUS huge ReserveResource (int nResourceID);


onde:
nResourceID
identificador do recurso a ser reservado

Resultado

A funo retorna:
OK
INVALID_RESOURCE_ID
RESOURCE_QUEUE_FULL (o recurso j de outra tarefa e a fila de tarefas que
esto aguardando por ele est cheia)

Observaes

Veja tambm

Se o recurso j for de outra tarefa, a tarefa corrente ser suspensa e ficar


aguardando pelo recurso. Quando o recurso finalmente estiver disponvel para
a tarefa, a funo retornar com OK
O contador de uso do recurso setado em um quando uma tarefa o recebe
pela primeira vez. Uma tarefa que j possui um recurso pode reserv-lo
novamente atravs de ReserveResource, resultando em uma reserva aninhada.
O contador de uso do recurso incrementado de um a cada nova reserva

CreateResource, DeleteResource, ReleaseNestedResource, ReleaseResource

ResetBufferPool

Descrio

Inicializa (zera) um pool de buffers especfico

Sintaxe

STATUS huge ResetBufferPool (int nPoolID);


onde:
nPoolID
identificador do pool a ser inicializado

Resultado

A funo retorna:
OK
INVALID_POOL_ID
BUFFER_TOO_SMALL (o tamanho de buffer do pool muito pequeno: um
erro fatal porque indica que os dados de controle do gerenciador de buffers esto
corrompidos)

72

5. Programao
Observaes

Veja tambm

As interrupes no so alteradas.
Esta funo apenas deve ser usada em aplicaes nas quais certo que os
buffers no sero utilizados ou liberados durante a inicializao do pool
Todos os buffers do pool so inicializados mesmo que estejam correntemente
em uso. O contedo dos buffers ser alterado

ResetBufferPools

ResetBufferPools

Descrio

Inicializa (zera) todos os pools de buffers pr-definidos

Sintaxe

STATUS huge ResetBufferPools (void);

Resultado

A funo retorna:
OK
BUFFER_TOO_SMALL (o tamanho de buffer de algum pool muito pequeno:
um erro fatal porque indica que os dados de controle do gerenciador de buffers
esto corrompidos)

Observaes

Veja tambm

As interrupes no so alteradas
Esta funo apenas deve ser usada em aplicaes nas quais certo que os
buffers no sero utilizados ou liberados durante a inicializao dos pools
Todos os buffers dos pools so inicializados mesmo que estejam
correntemente em uso. O contedo dos buffers ser alterado

ResetBufferPool

ResetList

Descrio

Inicializa uma lista circular

Sintaxe

void huge ResetList (void far *lpList, int SlotSize, int nSlots);
onde:
lpList
ponteiro para a rea de memria onde a lista circular ser armazenada, como por
exemplo, a seguinte estrutura esttica:
typedef char SLOT1
/* slot de 1 byte */
#define NSLOT 64
struct {
int
header[4];
SLOT1 slots[NSLOT];
} bytelist;
/* lista com NSLOTS bytes de 8 bits */
SlotSize
tamanho de cada slot da lista (1, 2 ou 4 bytes)
nSlots
nmero de slots da lista (1 a 16380 slots)
73

5. Programao

Veja tambm

AddTopList, AddBottomList, GetTopList, GetBottomList

ResetPendingWake

Descrio

Reseta uma requisio pendente para acordar a tarefa corrente

Sintaxe

void huge ResetPendingWake (void);

Resultado

Esta funo s afeta a tarefa corrente.

Observaes

Veja tambm

Wait, WaitTime, WakeTask, ResetTaskWake

As interrupes no so alteradas

ResetTaskWake

Descrio

Reseta uma requisio pendente para acordar uma tarefa

Sintaxe

STATUS huge ResetTaskWake (TASKID TaskID);


onde:
TaskID
identificador da tarefa cuja requisio para ser acordada que se encontra pendente
deve ser descartada

Resultado

A funo retorna:
OK
INVALID_TASK_ID

Observaes

Veja tambm

Wait, WaitTime, WakeTask, ResetPendingWake

As interrupes no so alteradas

RXBlock

Descrio

Recebe um bloco de bytes do canal serial

Sintaxe

STATUS huge RXBlock (char Channel, unsigned far *lpnBlock, unsigned far
*lpnSize, TIME lnTimeOutRX);
onde:
Channel
identificador do canal utilizado para receber o bloco:
COM_A ou COM_B
lpnBlock
ponteiro para a rea da memria onde ser armazenado o bloco recebido (a rea
74

5. Programao
de memria deve ser capaz de armazenar 2*lpnSize bytes)
lpnSize
ponteiro para o nmero de bytes a serem recebidos; no retorno, contm o nmero
de bytes efetivamente transferidos para a rea de memria da aplicao
lnTimeOutRX
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
recepo do bloco de byte; se lnTimeOutRX=0, trata-se de uma consulta fila de
recepo serial (ver Resultado)
Resultado

Cada valor armazenado na rea apontada por lpnBlock ocupa 16 bits:


os 8 bits mais significativos so bits de status; se um ou mais bits de status
estiverem em 1, ocorreu um erro na recepo do byte correspondente; podem
assumir os seguintes valores: SERIAL_PARITY_ERROR,
SERIAL_OVERRUN_ERROR ou SERIAL_FRAMING_ERROR
os 8 bits menos significativos contm o byte recebido, caso nenhum dos 8 bits
mais significativos encontrar-se em 1
Se lnTimeOutRX=0, realizada apenas uma consulta fila de recepo serial:
a rea apontada por lpnBlock recebe, no mximo, o bloco de bytes requisitado,
mas os bytes recebidos no so retirados da fila de recepo
*lpnSize recebe o nmero de bytes efetivamente devolvidos
a funo retorna imediatamente SERIAL_OK
A funo retorna:
SERIAL_OK (recepo de bloco de bytes sem problemas)
SERIAL_INVALID_CHANNEL (erro de identificador de canal invlido)
SERIAL_UART_NOT_CONFIG (erro de canal no inicializado)
SERIAL_RX_TIME_OUT_ERROR (erro de timeout esgotado)
SERIAL_PARITY_ERROR (erro de paridade)
SERIAL_OVERRUN_ERROR (erro de overrun)
SERIAL_FRAMING_ERROR (erro de framming)
combinao (OR) de qualquer um dos trs ltimos valores

Observao

Veja tambm

SerialConfig, RXByte, TXByte, TXBlock

O tamanho do buffer de recepco de 128 bytes para verses at a 2.34, e de


512 bytes para as verses 2.35 ou superiores. Dados recebidos pela serial com
o buffer lotado sero perdidos

RXByte

Descrio

Recebe um byte do canal serial

Sintaxe

STATUS huge RXByte (char Channel, TIME lnTimeOutRX);


onde:
Channel
identificador do canal utilizado para receber o byte:
COM_A ou COM_B
lnTimeOutRX
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
recepo do byte; se lnTimeOutRX=0, trata-se de uma consulta fila de recepo
serial (ver Resultado)
75

5. Programao

Resultado

A funo RXByte retorna um valor inteiro de 16 bits.


Os 8 bits mais significativos do valor de retorno so bits de status:
se um ou mais bits de status estiverem em 1, ocorreu um erro
se nenhum bit de status estiver em 1, o byte foi recebido sem erro
Os 8 bits menos significativos contm o byte recebido, caso nenhum dos 8 bits
mais significativos encontrar-se em 1.
Se lnTimeOutRX=0, realizada apenas uma consulta fila de recepo serial:
se no houver nenhum caracter na fila de recepo, retornado imediatamente
SERIAL_RX_TIME_OUT_ERROR
se h caracter na fila de recepo, o caracter retornado imediatamente,
juntamente com SERIAL_OK, mas no retirado da fila
A funo retorna:
SERIAL_OK (recepo sem problemas; 8 bits menos significativos so o byte
recebido)
SERIAL_INVALID_CHANNEL (erro de identificador de canal invlido)
SERIAL_UART_NOT_CONFIG (erro de canal no inicializado)
SERIAL_RX_TIME_OUT_ERROR (erro de timeout esgotado)
SERIAL_PARITY_ERROR (erro de paridade)
SERIAL_OVERRUN_ERROR (erro de overrun)
SERIAL_FRAMING_ERROR (erro de framming)

Observao

Veja tambm

SerialConfig, TXByte, RXBlock, TXBlock

O tamanho do buffer de recepco de 128 bytes para verses at a 2.34, e de


512 bytes para as verses 2.35 ou superiores. Dados recebidos pela serial com
o buffer lotado sero perdidos

Segment

Descrio

Obtm o segmento de um ponteiro

Sintaxe

unsigned int huge Segment (void far *lptr);


onde:
lptr
ponteiro para a memria

Resultado

A funo retorna um valor inteiro de 16 bits sem sinal representando a parte do


segmento de um ponteiro lptr

Observaes

Veja tambm

Offset, SetOffset, SetSegment

As interrupes no so alteradas

76

5. Programao

SendMessage

Descrio

Inicia uma tarefa pelo envio de uma mensagem


A tarefa requisita ao sistema operacional o envio de uma mensagem para outra
tarefa, em uma dada prioridade, e que o mesmo inicie a execuo da tarefa o mais
cedo possvel.

Sintaxe

STATUS huge SendMessage (TASKID TaskID, int nPriority, char far


*lpMessage);
onde:
TaskID
identificador da tarefa para a qual a mensagem deve ser enviada
nPriority
prioridade da mensagem (0=maior; 3=menor)
lpMessage
nome de um array ou ponteiro para 12 bytes consecutivos que formam a
mensagem a ser copiada para a tarefa destino; a mensagem pode ser qualquer
estrutura de 12 bytes

Resultado

A funo retorna:
OK
INVALID_TASK_ID
NO_FREE_ENVELOPE
NO_MAILBOX_DEFINED
MAILBOX_FULL

Observaes

Veja tambm

SendMessageWait, StartTask, EndTask, WakeCallingTask

Um chaveamento de tarefa imediato ocorrer caso a tarefa, para a qual se est


enviando a mensagem, for de maior prioridade do que a tarefa corrente

SendMessageWait

Descrio

Inicia uma tarefa pelo envio de uma mensagem aguardando at que a tarefa
receba a mensagem
A tarefa requisita ao sistema operacional o envio de uma mensagem para outra
tarefa, em uma dada prioridade, e que o mesmo inicie a execuo da tarefa o mais
cedo possvel. A tarefa que faz a requisio colocada em estado de espera at
que:
1. a tarefa chamada recebe a mensagem e chama WakeCallingTask ou
2. a tarefa chamada recebe a mensagem e encerra sua execuo chamando
EndTask ou retornando para o sistema operacional

Sintaxe

STATUS huge SendMessageWait (TASKID TaskID, int nPriority, char far


*lpMessage);
onde:
TaskID
77

5. Programao
identificador da tarefa para a qual a mensagem deve ser enviada
nPriority
prioridade da mensagem (0=maior; 3=menor)
lpMessage
nome de um array ou ponteiro para 12 bytes consecutivos que formam a
mensagem a ser copiada para a tarefa destino; a mensagem pode ser qualquer
estrutura de 12 bytes
Resultado

A funo retorna:
OK
INVALID_TASK_ID
NO_FREE_ENVELOPE
NO_MAILBOX_DEFINED
MAILBOX_FULL

Observaes

Veja tambm

SendMessage, StartTask, EndTask, WakeCallingTask

Um chaveamento imediato ocorrer para a tarefa pronta de maior prioridade

SerialConfig

Descrio

Inicializa canal serial

Sintaxe

STATUS huge SerialConfig (char Channel, unsigned nBaudRate, char nStopBits,


char nParity, char nDataBits);
onde:
Channel
identificador do canal a ser inicializado:
COM_A ou COM_B
nBaudRate
taxa de comunicao:
SERIAL_BAUD50, SERIAL_BAUD75, SERIAL_BAUD110,
SERIAL_BAUD134_5, SERIAL_BAUD150, SERIAL_BAUD300,
SERIAL_BAUD600, SERIAL_BAUD1200, SERIAL_BAUD1800,
SERIAL_BAUD2000, SERIAL_BAUD2400, SERIAL_BAUD3600,
SERIAL_BAUD4800, SERIAL_BAUD7200, SERIAL_BAUD9600,
SERIAL_BAUD19K, SERIAL_BAUD38K, SERIAL_BAUD56K,
SERIAL_BAUD128K, SERIAL_BAUD256K, SERIAL_BAUD14400,
SERIAL_BAUD28800, SERIAL_BAUD33600K
nStopBits
nmero de stop bits, controle de CTS/RTS/DCD e receiver FIFO trigger level:
SERIAL_1STOPBIT (1 stop bit)
SERIAL_2STOPBITS (2 stop bits)
SERIAL_WAIT_CTS (aguarda o retorno de CTS na transmisso)
SERIAL_RTS_ON (valor para o qual RTS deve ser setado ao encerrar a
transmisso)
SERIAL_MSR_INT (indica que devem ser geradas interrupcoes de Status
Modem Register DCD)
SERIAL_TRIGGER_14 (14 bytes de FIFO de recepo, default)
SERIAL_TRIGGER_08 (8 bytes de FIFO de recepo)
SERIAL_TRIGGER_04 (4 bytes de FIFO de recepo)
SERIAL_TRIGGER_01 (1 byte de FIFO de recepo)
78

5. Programao
nParity
tipo de paridade:
SERIAL_NOPARITY (sem bit de paridade)
SERIAL_ODDPARITY (paridade mpar)
SERIAL_EVENPARITY (paridade par)
SERIAL_ALWAYS0 (bit de paridade sempre desligado)
SERIAL_ALWAYS1 (bit de paridade sempre ligado)
nDataBits
nmero de bits do dado:
SERIAL_5DATABITS, SERIAL_6DATABITS, SERIAL_7DATABITS,
SERIAL_8DATABITS
Resultado

A funo SerialConfig retorna um valor inteiro de 16 bits.


Os 8 bits mais significativos do valor de retorno so bits de status:
se um ou mais bits de status estiverem em 1, ocorreu um erro
se nenhum bit de status estiver em 1, no houve erro
Os 8 bits menos significativos identificam o erro ocorrido, caso algum dos 8 bits
mais significativos encontrar-se em 1.
A funo retorna:
SERIAL_OK (inicializao sem problemas; filas de recepo e transmisso
resetadas)
SERIAL_INVALID_CHANNEL (identificador de canal invlido)
SERIAL_CFG_ERRO_BAUDRATE (taxa de comunicao invlida)
SERIAL_CFG_ERRO_STOPBITS (nmero de stop bits invlido)
SERIAL_CFG_ERRO_PARIDADE (tipo de paridade invlido)
SERIAL_CFG_ERRO_BITSDADOS (nmero de bits do dado invlido)
SERIAL_NO_HARDWARE (mdulo AL-2405 no encontrado)

Observaes

Veja tambm

RXByte, TXByte, RXBlock, TXBlock

O parmetro nStopBits dever conter o valor resultante do OU lgico entre o


nmero de stop bits, sinais de modem e o modo de operao dos sinais de
controle CTS e RTS

SetInterrupt

Descrio

Instala um ponteiro de interrupo

Sintaxe

void huge SetInterrupt (int nInterrupt, void interrupt (*) (), char far *lpArea);
onde:
nInterrupt
nmero da interrupo do microprocessador 80186 da Intel (0-255)
interrupt
ponteiro para uma rotina de atendimento de interrupo
lpArea
ponteiro para uma rea de memria esttica com 16 palavras que no deve ser
alterada enquanto o ponteiro de interrupo permanecer instalado

Resultado

No h retorno de DeleteTimer.

79

5. Programao
Veja tambm

BeginInterrupt, EndInterrupt, ChangeInterruptHandler

SetOffset

Descrio

Seta o offset de um ponteiro

Sintaxe

void huge SetOffset (void far *lptr, int nOffset);


onde:
lptr
ponteiro para a memria
nOffset
valor de offset a ser atribudo a lptr

Resultado

A parte do offset do ponteiro lptr setada com o valor de 16 bits sem sinal
nOffset.

Observaes

Veja tambm

SetSegment, Offset, Segment

As interrupes no so alteradas

SetSegment

Descrio

Seta o segmento de um ponteiro

Sintaxe

void huge SetSegment (void far *lptr, int nSegment);


onde:
lptr
ponteiro para a memria
nSegment
valor de segmento a ser atribudo a lptr

Resultado

A parte do segmento do ponteiro lptr setada com o valor de 16 bits sem sinal
nSegment

Observaes

Veja tambm

SetOffset, Offset, Segment

As interrupes no so alteradas

SetTime

Descrio

Escrita no relgio interno da BIOS, para realizar acertos de horrio.

Sintaxe

void huge SetTime (BIOSTIME far *lpTime);


onde:
lpTime
80

5. Programao
ponteiro para a estrutura com o novo horrio
Veja tambm

GetTime

SignalEvent

Descrio

Sinaliza um ou mais eventos em um grupo

Sintaxe

STATUS huge SignalEvent (GROUP Group, GROUP ValueMask, GROUP


GroupValue);
onde:
Group
identificador do grupo de eventos obtido com uma chamada a GetEventGroup
ValueMask
mscara de 16 bits identificando os flags de interesse no grupo de eventos
GroupValue
valor de 16 bits especificando o estado para cada um dos flags de evento
selecionados pela mscara; o estado dos flags no selecionados pela mscara pode
assumir qualquer valor

Resultado

A funo retorna:
OK
MAILBOX_FULL (no possvel sinalizar o(s) evento(s), provavelmente porque
no existe envelopes de mensagem disponveis)

Veja tambm

GetEventGroup, FreeEventGroup, WaitEvent

SignalSemaphore

Descrio

Sinaliza um semforo

Sintaxe

STATUS huge SignalSemaphore (int far *lpSCB);


onde:
lpSCB
ponteiro para a rea de controle do semforo inicializada por CreateSemaphore

Resultado

A funo retorna:
OK
NO_SUCH_SEMAPHORE (lpSCB no foi inicializado por CreateSemaphore )

Observaes

Veja tambm

CreateSemaphore, DeleteSemaphore, WaitSemaphore

O semforo ser imediatamente repassado para a tarefa (se houver alguma)


que estiver aguardando por ele no topo da sua fila de espera. Se necessrio, o
reescalonamento de tarefas ocorre imediatamente

81

5. Programao

StartStopTimer

Descrio

Dispara ou para um temporizador

Sintaxe

void huge StartStopTimer (unsigned int TimerID, unsigned int TimerValue);


onde:
TimerID
identificador do temporizador a ser disparado ou parado
TimerValue
intervalo de tempo em ticks do sistema a ser programado no temporizador;
TimerValue=0 para o temporizador

Observaes

Uma funo de temporizao associada a um temporizador peridico pode par-lo


chamando StartStopTimer com TimerValue=0. O temporizador peridico pode ser
novamente disparado chamando StartStopTimer com TimerValue=n. O
temporizador esgotar aps n ticks de sistema e retomar sua operao peridica
com o seu perodo pr-definido por CreateTimer

Observaes

Veja tambm

CreateTimer, DeleteTimer, ReadTimer

Temporizadores no peridicos (one-shot timers) podem ser re-disparados


por sua rotina de temporizao associada usando StartStopTimer

StartTask

Descrio

Dispara a execuo de uma tarefa

Sintaxe

STATUS huge StartTask (TASKID TaskID);


onde:
TaskID
identificador da tarefa a ser disparada

Resultado

A funo retorna:
OK
INVALID_TASK_ID

Observaes

Veja tambm

SendMessage, EndTask

Um chaveamento imediato de tarefas ocorrer caso a tarefa que est sendo


disparada tiver maior prioridade do que a tarefa corrente

StopTask

Descrio

Para (termina) a execuo de uma tarefa

82

5. Programao
Sintaxe

STATUS huge StopTask (TASKID TaskID);


onde:
TaskID
identificador da tarefa a ser parada

Resultado

A funo retorna:
OK
INVALID_TASK_ID
TASK_ABORT_NOT_ALLOWED

Observaes

Veja tambm

Qualquer tarefa que esteja aguardando que a tarefa parada responda a uma
mensagem retomar sua execuo
Uma tarefa pode parar a si mesma
No se deve parar uma tarefa que esteja aguardando por um recurso, semforo
ou grupo de eventos

KillTask, DeleteTask

TimeConvert

Descrio

Converte milisegundos em ticks do sistema

Sintaxe

unsigned int huge TimeConvert (unsigned int MiliSeconds);


onde:
MiliSeconds
nmero de milisegundos

Resultado

A funo retorna o intervalo de tempo equivalente em ticks do sistema

Observaes

Veja tambm

CreateTimer, DeleteTimer, StartStopTimer, ReadTimer

As interrupes no so alteradas
Se a freqncia do relgio do sistema for tal que MiliSeconds requer mais de
65535 ticks de sistema, a funo retorna 65535. Se MiliSeconds for menor do
que metade de um tick de sistema, a funo retorna 0

TXBlock

Descrio

Transmite um bloco de bytes pelo canal serial

Sintaxe

STATUS huge TXBlock (char Channel, char far *lpBlock, unsigned nSize, BOOL
Wait);
onde:
Channel
identificador do canal utilizado para transmitir o bloco:
COM_A ou COM_B
lpBlock
ponteiro para o bloco de bytes a transmitir
nSize
83

5. Programao
nmero de bytes a transmitir
Wait
indica se a funo deve retornar imediatamente aps a chamada (= FALSE = 0),
aguardar o trmino da transmisso do bloco de bytes (= TRUE = 1) ou aguardar
por um determinado tempo (>= 2), especificado em ticks do sistema
(funcionando como um tempo de timeout de transmisso)
Resultado

A funo retorna:
SERIAL_OK (transmisso do bloco de byte sem problemas)
SERIAL_TX_QUEUE_FULL (bloco de bytes foi enfileirado na fila de transmisso
mas funo teve de aguardar por posies livres)
SERIAL_INVALID_CHANNEL (identificador de canal invlido)
SERIAL_UART_NOT_CONFIG (canal no inicializado)
SERIAL_TX_TIME_OUT_ERROR (timeout de transmisso)

Observao

Veja tambm

SerialConfig, RXByte, TXByte, RXBlock

O tamanho do buffer de transmisso de 1024 bytes

TXByte

Descrio

Transmite um byte pelo canal serial

Sintaxe

STATUS huge TXByte (char Channel, char Byte, BOOL Wait);


onde:
Channel
identificador do canal utilizado para transmitir o byte:
COM_A ou COM_B
Byte
byte a ser transmitido
Wait
indica se a funo deve retornar imediatamente aps a chamada (= FALSE = 0),
aguardar o trmino da transmisso do byte (= TRUE = 1) ou aguardar por um
determinado tempo (>= 2), especificado em ticks do sistema (funcionando como
um tempo de timeout de transmisso)

Resultado

A funo retorna:
SERIAL_OK (transmisso de byte sem problemas)
SERIAL_INVALID_CHANNEL (erro de identificador de canal invlido)
SERIAL_UART_NOT_CONFIG (erro de canal no inicializado)
SERIAL_TX_QUEUE_FULL (byte foi enfileirado na fila de transmisso mas
funo teve de aguardar por posio livre)
SERIAL_TX_TIME_OUT_ERROR (timeout de transmisso)

Observao

Veja tambm

SerialConfig, RXByte, RXBlock, TXBlock

O tamanho do buffer de transmisso de 1024 bytes

84

5. Programao

Wait

Descrio

Aguarda incondicionalmente at ser acordada

Sintaxe

void huge Wait (void);

Resultado

A tarefa ser suspensa at que outra tarefa chame WakeTask a fim de acordar esta
tarefa.

Observaes

Veja tambm

As interrupes so habilitadas
Se a tarefa tiver uma requisio pendente para acordar no momento em que
chama Wait, continuar imediatamente sua execuo sem espera
Se houver alguma possibilidade de que alguma tarefa j fez uma chamada
para WakeTask a fim de acordar a tarefa corrente, deve-se chamar
ResetPendingWake para resetar qualquer requisio pendente antes de chamar
Wait

WaitTime, WakeTask, ResetPendingWake, ResetTaskWake, WaitSemaphore

WaitEvent

Descrio

Aguarda por evento(s) em um grupo

Sintaxe

STATUS huge WaitEvent (GROUP Group, GROUP ValueMask, GROUP


GroupValue, GROUP MatchValue, unsigned int nTimeOut);
onde:
Group
identificador do grupo de eventos obtido com uma chamada a GetEventGroup
ValueMask
mscara de 16 bits identificando os flags de interesse no grupo de eventos
GroupValue
valor de 16 bits especificando o estado para cada um dos flags de evento
selecionados pela mscara; o estado dos flags no selecionados pela mscara pode
assumir qualquer valor
MatchValue
critrio de correspondncia: se 0, qualquer flag selecionado que se encontrar no
estado desejado considerado como o evento de interesse; se <>0, todos os flags
selecionados devem encontrar-se no estado especificado por GroupValue para se
atingir o evento de interesse
nTimeOut
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
ocorrncia do evento especificado; se nTimeOut=0, a tarefa aguardar
indefinidamente

Resultado

As interrupes so habilitadas
A funo retorna:
OK
TIME_OUT
85

5. Programao

Observaes

Veja tambm

GetEventGroup, FreeEventGroup, SignalEvent

Se os eventos do grupo corresponderem ao critrio especificado no momento


da chamada de WaitEvent, a tarefa corrente continua a execuo
imediatamente sem esperar

WaitSemaphore

Descrio

Aguarda por um semforo

Sintaxe

STATUS huge WaitSemaphore (int far *lpSCB, unsigned int nInterval, int
nPriority);
onde:
lpSCB
ponteiro para a rea de controle do semforo inicializada por CreateSemaphore
nInterval
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
liberao do semforo para seu uso; se nInterval=0, a tarefa aguardar
indefinidamente
nPriority
prioridade com a qual a tarefa deseja aguardar pelo semforo (0 a maior e 255 a
menor)

Resultado

A funo retorna:
OK
NO_SUCH_SEMAPHORE (lpSCB no foi inicializado por CreateSemaphore)
SEMAPHORE_WAIT_QUEUE_FULL
TIME_OUT

Observaes

Veja tambm

CreateSemaphore, DeleteSemaphore, SignalSemaphore

O gerenciador de semforos usa as funes Wait e WakeTask para aguardar


por um semforo. Se qualquer tarefa do sistema indiscriminadamente chamar
WakeTask para acordar a tarefa que est aguardando pelo semforo, esta
tarefa retomar sua execuo logo aps a chamada de WaitSemaphore, com
uma indicao de erro de TIME_OUT. Este erro ser devolvido mesmo se
nInterval=0 (espera para sempre). O erro indica que a tarefa retomou sus
execuo sem ter garantida a posse do semforo

WaitTime

Descrio

Aguarda por um tempo determinado (delay)

Sintaxe

STATUS huge WaitTime (int nTicks);


onde:
nTicks
intervalo de tempo de espera medido em ticks do sistema
86

5. Programao
Resultado

As interrupes so habilitadas.
A funo retorna:
OK
WAKENED_BEFORE_TIMEOUT (a tarefa foi acordada antes de encerrar o
intervalo de tempo especificado)

Observaes

Veja tambm

A tarefa pode retomar sua execuo, sendo seu temporizador de espera


parado, no momento que outra tarefa chamar WakeTask especificando esta
tarefa
Se a tarefa tiver uma requisio pendente para acordar no momento em que
chama WaitTime, continuar imediatamente sua execuo sem espera
Se houver alguma possibilidade de que alguma tarefa j fez uma chamada
para WakeTask a fim de acordar a tarefa corrente, deve-se chamar
ResetPendingWake para resetar qualquer requisio pendente antes de chamar
WaitTime

Wait, WakeTask, ResetPendingWake, ResetTaskWake

WakeCallingTask

Descrio

Acorda uma tarefa que enviou uma mensagem para a tarefa corrente

Sintaxe

STATUS huge WakeCallingTask (void);

Resultado

A funo retorna:
OK
INVALID_TASK_ID
CALLING_TASK_NOT_WAITING (a tarefa que enviou a mensagem no se
encontra em estado de espera)
NO_MESSAGE_PROCESSING (a tarefa corrente no se encontra processando
uma mensagem recebida de outra tarefa)

Observaes

Veja tambm

SendMessageWait, EndTask

Um chaveamento imediato de tarefas ocorrer caso a tarefa que est sendo


acordada tiver maior prioridade do que a tarefa corrente

WakeTask

Descrio

Acorda uma tarefa que se encontra no estado de espera (devido a uma chamada a
Wait ou WaitTime)

Sintaxe

STATUS huge WakeTask (TASKID TaskID);


onde:
TaskID
identifcador da tarefa a ser acordada

Resultado

A funo retorna:
87

5. Programao
OK
TASK_NOT_WAITING_WARNING (a tarefa que se deseja acordar no se
encontra no estado de espera; a requisio para acordar fica pendente)
INVALID_TASK_ID
TASK_NOT_WAITING (a tarefa que se deseja acordar no se encontra no estado
de espera e j h uma outra requisio para acordar pendente)
Observaes

Veja tambm

Wait, WaitTime, ResetPendingWake, ResetTaskWake, WaitSemaphore

Um chaveamento imediato de tarefas ocorrer caso a tarefa que est sendo


acordada tiver maior prioridade do que a tarefa corrente

WriteOp

Descrio
Sintaxe

Resultado

Escreve em operandos simples do CP


No pode ser chamada de dentro da funo HookPLC.
STATUS huge WriteOp (void *buffer, char tipo_op, int address, int sub, unsigned
char num_op, unsigned nTimeOut);
onde:
buffer
ponteiro para a rea de memria que contm os valores a serem escritos no
operando do CP
tipo_op
tipo do operando do CP:
TIPO_MEMORIA
TIPO_INTEIRO
TIPO_DECIMAL
TIPO_REAL
TIPO_E_S
TIPO_AUXILIAR
address
endereo do operando no CP
sub
endereo da subdiviso do operando do CP
num_op
nmero de operandos do CP que se deseja escrever
nTimeOut
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
escrita dos operandos especificados; se nTimeOut=0, a tarefa retornar
imediatamente, sem aguardar o encerramento da escrita, permanecendo a
requisio na fila da BIOS para ser executada
A funo retorna:
OK (funo executada com sucesso)
PLC_NOT_READY (comunicao inoperante com o CP: a BIOS no est
recebendo as interrupes do CP, que permitem o acesso a sua memria;
provvel que a funo F-2005.016 no esteje sendo chamada pelo ladder)
WAITING_QUEUE_POSITION (a fila de requisies de comunicao de 16
posies da BIOS est lotada e esta comunicao no pde ser atendida; verificar
se no esto sendo feitas muitas leituras/escritas e poucas chamadas a funo
F-2005.016)
PLC_TIME_OUT (o tempo especificado no parmetro nTimeOut da funo foi
88

5. Programao
excedido antes da BIOS conseguir realizar a escrita; verificar com que freqncia
esto sendo feitas chamadas a funo F-2005.016)
COD_ERRO_TIPO_OPERANDO_INVALIDO (o tipo de operando especificado
no parmetro tipo_op da funo no um valor vlido)
COD_ERRO_OPERANDO_NAO_DEFINIDO (houve a tentativa de escrita de um
operando no declarado na memria do CP)
COD_ERRO_NUMERO_OPERANDOS_INVALIDO (houve a tentativa de escrita
de um nmero invlido de operandos: 0 ou maior que o limite mximo permitido
para o tipo)
Observaes

Veja tambm

Com esta funo possvel escrever a seguinte quantidade de operandos:


96 do tipo auxiliar (%A);
96 do tipo entrada ou sada (%E/S);
255 do tipo memria (%M);
255 do tipo decimal (%D);
255 do tipo inteiro (%I);
255 do tipo real (%F).
Se o bit 7 do parmetro tipo do operando do CP estiver ligado e for
TIPO_MEMORIA, TIPO_DECIMAL, TIPO_INTEIRO ou TIPO_REAL, a
escrita ser executada a nvel de bit, servindo portanto, para escrita individual
de bits de operandos memria, decimal, inteiro ou real
Se o tipo de operando for TIPO_AUXILIAR ou TIPO_E_S, o parmetro sub
dever conter o nmero do bit (0 a 7) do octeto a ser escrito por esta operao,
ou o valor -1 para escrita do octeto inteiro
Se o bit 7 do parmetro de tipo do operando do CP estiver ligado (escrita
orientada a bit) e o tipo de operando for TIPO_MEMORIA, o parmetro sub
dever conter no byte alto o nmero do bit inicial (0 a 15) a partir do qual a
primeira memria dever ser escrita e no byte baixo o nmero do bit final (0 a
15) que dever ser escrito na ltima memria escrita por esta operao
Se o bit 7 do parmetro de tipo do operando do CP estiver ligado (escrita
orientada a bit) e o tipo de operando for TIPO_DECIMAL, TIPO_INTEIRO
ou TIPO_REAL, o parmetro sub dever conter no byte alto o nmero do bit
inicial (0 a 31) a partir do qual o primeiro operando dever ser escrito e no
byte baixo o nmero do bit final (0 a 31) que dever ser escrito no ltimo
operando escrito por esta operao

ReadOp, ReadOpSwap, WriteOpSwap, ReadTab, ReadTabSwap, WriteTab,


WriteTabSwap, ReadTabs, WriteTabs, ReadPLC, WritePLC

WriteOpSwap

Descrio

Sintaxe

Escrita de operandos simples tipo Memria, Decimal, Inteiro ou Real (%M, %D,
%I ou %F) no CP, invertendo automaticamente os bytes de valores dos operandos
para o formato utilizado pelo CP
No pode ser chamada de dentro da funo HookPLC.
STATUS huge WriteOpSwap (void *buffer, char tipo_op, int address, int sub,
unsigned char num_op, unsigned nTimeOut);
onde:
buffer
ponteiro para a rea de memria que contm os valores a serem escritos no
operando do CP
tipo_op
89

5. Programao
tipo do operando do CP:
TIPO_MEMORIA
TIPO_INTEIRO
TIPO_DECIMAL
TIPO_REAL
address
endereo do operando no CP
sub
endereo da subdiviso do operando do CP
num_op
nmero de operandos do CP que se deseja escrever
nTimeOut
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
escrita dos operandos especificados; se nTimeOut=0, a tarefa retornar
imediatamente, sem aguardar o encerramento da escrita, permanecendo a
requisio na fila da BIOS para ser executada
Resultado

A funo retorna:
OK (funo executada com sucesso)
PLC_NOT_READY (comunicao inoperante com o CP: a BIOS no est
recebendo as interrupes do CP, que permitem o acesso a sua memria;
provvel que a funo F-2005.016 no esteje sendo chamada pelo ladder)
WAITING_QUEUE_POSITION (a fila de requisies de comunicao de 16
posies da BIOS est lotada e esta comunicao no pde ser atendida; verificar
se no esto sendo feitas muitas leituras/escritas e poucas chamadas a funo
F-2005.016)
PLC_TIME_OUT (o tempo especificado no parmetro nTimeOut da funo foi
excedido antes da BIOS conseguir realizar a escrita; verificar com que freqncia
esto sendo feitas chamadas a funo F-2005.016)
COD_ERRO_TIPO_OPERANDO_INVALIDO (o tipo de operando especificado
no parmetro tipo_op da funo no um valor vlido)
COD_ERRO_OPERANDO_NAO_DEFINIDO (houve a tentativa de escrita de um
operando no declarado na memria do CP)
COD_ERRO_NUMERO_OPERANDOS_INVALIDO (houve a tentativa de escrita
de um nmero invlido de operandos: 0 ou maior que o limite mximo permitido
para o tipo)

Observaes

Com esta funo possvel escrever at 1024 bytes de dados no CP, ou seja,
at 512 operandos memria (%M) ou 256 operandos decimal (%D), inteiro
(%I) ou real (%F)
Se o bit 7 do parmetro tipo do operando do CP estiver ligado e for
TIPO_MEMORIA, TIPO_DECIMAL, TIPO_INTEIRO ou TIPO_REAL, a
escrita ser executada a nvel de bit, servindo portanto, para escrita individual
de bits de operandos memria, decimal, inteiro ou real
Se o bit 7 do parmetro de tipo do operando do CP estiver ligado (escrita
orientada a bit) e o tipo de operando for TIPO_MEMORIA, o parmetro sub
dever conter no byte alto o nmero do bit inicial (0 a 15) a partir do qual a
primeira memria dever ser escrita e no byte baixo o nmero do bit final (0 a
15) que dever ser escrito na ltima memria escrita por esta operao
Se o bit 7 do parmetro de tipo do operando do CP estiver ligado (escrita
orientada a bit) e o tipo de operando for TIPO_DECIMAL, TIPO_INTEIRO
ou TIPO_REAL, o parmetro sub dever conter no byte alto o nmero do bit
inicial (0 a 31) a partir do qual o primeiro operando dever ser escrito e no
byte baixo o nmero do bit final (0 a 31) que dever ser escrito no ltimo
operando escrito por esta operao
90

5. Programao

Veja tambm

Os operandos com mais de um byte no CP (AL-2003 e AL-2004) esto no


formato HI:LO, enquanto que no AL-2005 no formato LO:HI. Por isso da
necessidade de converso aps a leitura e antes da escrita de operandos tipo
memria (%M e %TM), decimal (%D e %TD), inteiro (%I e %TI) e real (%F
e %TF) no CP

ReadOp, ReadOpSwap, WriteOp, ReadTab, ReadTabSwap, WriteTab,


WriteTabSwap, ReadTabs, WriteTabs, ReadPLC, WritePLC

WritePLC

Descrio
Sintaxe

Escreve informaes de status no CP ou na rede ALNET II


No pode ser chamada de dentro da funo HookPLC.
STATUS huge WritePLC (void *buffer, char tipo_req, unsigned nTimeOut);
onde:
buffer
ponteiro para a rea da memria de onde sero lidas as informaes de status a
serem escritas no CP
tipo_req
tipo do operando do CP:
TIPO_STATUS_CP
TIPO_STATUS_ALNETII
nTimeOut
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
escrita das informaes especificadas; se nTimeOut=0, a tarefa retornar
imediatamente, sem aguardar o encerramento da escrita

Resultado

A funo retorna:
OK (funo executada com sucesso)
PLC_NOT_READY (comunicao inoperante com o CP: a BIOS no est
recebendo as interrupes do CP, que permitem o acesso a sua memria;
provvel que a funo F-2005.016 no esteje sendo chamada pelo ladder)
WAITING_QUEUE_POSITION (a fila de requisies de comunicao de 16
posies da BIOS est lotada e esta comunicao no pde ser atendida; verificar
se no esto sendo feitas muitas leituras/escritas e poucas chamadas a funo
F-2005.016)
PLC_TIME_OUT (o tempo especificado no parmetro nTimeOut da funo foi
excedido antes da BIOS conseguir realizar a escrita; verificar com que freqncia
esto sendo feitas chamadas a funo F-2005.016)
COD_ERRO_TIPO_OPERANDO_INVALIDO (o tipo de operando especificado
no parmetro tipo_op da funo no um valor vlido)

Observaes

As estruturas de dados de armazenamento das informaes de estado do CP e


de estado da ALNET II devem ser do tipo STATUS_PLC e
STATUS_ALNETII respectivamente (vide a funo ReadPLC com a descrio
das estruturas), mesmo que todas as suas variveis no sejam utilizadas na
escrita
Para TIPO_STATUS_CP s possvel escrever no CP os tempos de ciclo de
execuo, varivel TempoCiclo, composto pelo tempo de ciclo instatneo,
tempo de ciclo mdio, tempo de ciclo mximo e tempo de ciclo mnimo
Para TIPO_STATUS_ALNETII s possvel escrever no CP as seguintes
variveis da estrutura STATUS_ALNETII: NumeroTxOk, NumeroTxTcdt,
91

5. Programao
NumeroTxUdr, NumeroTxNoack, NumeroTxErro, NumeroTxTimeout,
NumeroTxFalta, NumeroRxOk, NumeroRxAbt, NumeroRxOvr,
NumeroRxCrc, NumeroRxAe, NumeroRxLong, NumeroRxTimeout,
NumeroRxFalta, ConexaoForcada, EsdadoForcado1, EsdadoForcado2
Veja tambm

ReadOp, ReadOpSwap, WriteOp, WriteOpSwap, ReadTab, ReadTabSwap,


WriteTab, WriteTabSwap, ReadTabs, WriteTabs, ReadPLC

WriteTab

Descrio
Sintaxe

Resultado

Escreve em tabela do CP
No pode ser chamada de dentro da funo HookPLC.
STATUS huge WriteTab (void *buffer, char tipo_op, int address, int pos_ini,
unsigned char num_op, unsigned nTimeOut);
onde:
buffer
ponteiro para a rea da memria que contm os valores a serem escritos na tabela
do CP
tipo_op
tipo de tabela do CP:
TIPO_TABELA_MEMORIA
TIPO_TABELA_INTEIRO
TIPO_TABELA_DECIMAL
TIPO_TABELA_REAL
se o bit 7 deste parmetro estiver ligado, a escrita ser executada a nvel de bit,
servindo, portanto, para escrita individual de bits de tabela
address
endereo da tabela do CP
se for uma escrita orientada a bit (bit 7 do tipo_op estiver ligado), o byte alto
deste parmetro dever indicar o nmero do ltimo bit a ser escrito dentro da
posio final de tabela (0 a 15)
pos_ini
posio inicial da tabela
se for uma escrita orientada a bit (bit 7 do tipo_op estiver ligado), o byte alto
deste parmetro dever indicar o nmero do primeiro bit a ser escrito dentro da
posio inicial de tabela informada no byte baixo deste parmetro (0 a 15)
num_op
nmero de operandos da tabela a serem escritosse for uma escrita orientada a bit
(bit 7 do tipo_op estiver ligado), o nmero de posies de tabela a serem escritas
devem incluir tanto a posio inicial quanto a ltima posio que deve ser escrita,
ainda que estas posies no tenham todos os seus bits escritos
se pos_ini=0 e num_op=-1 (que para o tipo unsigned char equivale a 255) a tabela
completa escrita, independente da quantidade de valores contidos no buffer
nTimeOut
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
escrita da tabela especificada; se nTimeOut=0, a tarefa retornar imediatamente,
sem aguardar o encerramento da escrita, permanecendo a requisio na fila da
BIOS para ser executada
A funo retorna:
OK (funo executada com sucesso)
PLC_NOT_READY (comunicao inoperante com o CP: a BIOS no est
92

5. Programao
recebendo as interrupes do CP, que permitem o acesso a sua memria;
provvel que a funo F-2005.016 no esteje sendo chamada pelo ladder)
WAITING_QUEUE_POSITION (a fila de requisies de comunicao de 16
posies da BIOS est lotada e esta comunicao no pde ser atendida; verificar
se no esto sendo feitas muitas leituras/escritas e poucas chamadas a funo
F-2005.016)
PLC_TIME_OUT (o tempo especificado no parmetro nTimeOut da funo foi
excedido antes da BIOS conseguir realizar a escrita; verificar com que freqncia
esto sendo feitas chamadas a funo F-2005.016)
COD_ERRO_TIPO_OPERANDO_INVALIDO (o tipo de operando especificado
no parmetro tipo_op da funo no um valor vlido)
COD_ERRO_OPERANDO_NAO_DEFINIDO (houve a tentativa de escrita de
uma tabela no declarado na memria do CP)
COD_ERRO_INDICE_TABELA_INVALIDO (houve a tentativa de escrita de uma
posio de tabela no declarada na memria do CP)
COD_ERRO_NUMERO_OPERANDOS_INVALIDO (houve a tentativa de escrita
de um nmero invlido de posies da tabela: 0)
Observaes

Veja tambm

ReadOp, ReadOpSwap, WriteOp, WriteOpSwap, ReadTab, ReadTabSwap,


WriteTabSwap, ReadTabs, WriteTabs, ReadPLC, WritePLC

Com esta funo possvel escrever at 255 posies de tabela, seja ela do
tipo memria (%TM), decimal (%TD), inteiro (%TI) ou real (%TF)

WriteTabs

Descrio
Sintaxe

Resultado

Escreve em tabelas do CP
No pode ser chamada de dentro da funo HookPLC.
STATUS huge WriteTabs (void *buffer, char tipo_op, int address, unsigned char
num_op, unsigned nTimeOut);
onde:
buffer
ponteiro para a rea da memria que contm os valores a serem escritos na tabela
do CP
tipo_op
tipo de tabela do CP:
TIPO_TABELA_MEMORIA
TIPO_TABELA_INTEIRO
TIPO_TABELA_DECIMAL
TIPO_TABELA_REAL
address
endereo da primeira tabela a ser escrita no CP
num_op
nmero de tabelas a serem escritas
nTimeOut
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
escrita das tabelas especificadas; se nTimeOut=0, a tarefa retornar
imediatamente, sem aguardar o encerramento da escrita, permanecendo a
requisio na fila da BIOS para ser executada
A funo retorna:
OK (funo executada com sucesso)
93

5. Programao
PLC_NOT_READY (comunicao inoperante com o CP: a BIOS no est
recebendo as interrupes do CP, que permitem o acesso a sua memria;
provvel que a funo F-2005.016 no esteje sendo chamada pelo ladder)
WAITING_QUEUE_POSITION (a fila de requisies de comunicao de 16
posies da BIOS est lotada e esta comunicao no pde ser atendida; verificar
se no esto sendo feitas muitas leituras/escritas e poucas chamadas a funo
F-2005.016)
PLC_TIME_OUT (o tempo especificado no parmetro nTimeOut da funo foi
excedido antes da BIOS conseguir realizar a escrita; verificar com que freqncia
esto sendo feitas chamadas a funo F-2005.016)
COD_ERRO_TIPO_OPERANDO_INVALIDO (o tipo de operando especificado
no parmetro tipo_op da funo no um valor vlido)
COD_ERRO_OPERANDO_NAO_DEFINIDO (houve a tentativa de escrita de
uma tabela no declarado na memria do CP)
COD_ERRO_NUMERO_OPERANDOS_INVALIDO (houve a tentativa de escrita
de um nmero invlido de posies da tabela: 0 posies ou mais posies que o
permitido por esta funo)
Observaes

Veja tambm

Com esta funo possvel escrever at 2048 bytes de dados do CP, ou seja,
at 1024 posies de operandos tabela memria (%TM) ou at 512 posies
de operandos tabela decimal (%TD), tabela inteiro (%TI) ou tabela real
(%TF)
O nmero de posies de tabelas que sero escritas corresponde a soma de
posies das N tabelas a serem escritas a partir da primeira tabela

ReadOp, ReadOpSwap, WriteOp, WriteOpSwap, ReadTab, ReadTabSwap,


WriteTab, WriteTabSwap, ReadTabs, ReadPLC, WritePLC

WriteTabSwap

Descrio

Escrita de operandos tabela Memria, Decimal, Inteiro ou Real (%TM, %TD,


%TI ou %TF) no CP, invertendo automaticamente os bytes de valores dos
operandos para o formato utilizado pelo CP
No pode ser chamada de dentro da funo HookPLC.

94

5. Programao
Sintaxe

STATUS huge WriteTabSwap (void *buffer, char tipo_op, int address, int pos_ini,
unsigned char num_op, unsigned nTimeOut);
onde:
buffer
ponteiro para a rea da memria que contm os valores a serem escritos na tabela
do CP
tipo_op
tipo de tabela do CP:
TIPO_TABELA_MEMORIA
TIPO_TABELA_INTEIRO
TIPO_TABELA_DECIMAL
TIPO_TABELA_REAL
se o bit 7 deste parmetro estiver ligado, a escrita ser executada a nvel de bit,
servindo, portanto, para escrita individual de bits de tabela.
address
endereo da tabela do CP
se for uma escrita orientada a bit (bit 7 do tipo_op estiver ligado), o byte alto
deste parmetro dever indicar o nmero do ltimo bit a ser escrito dentro da
posio final de tabela (0 a 15)
pos_ini
posio inicial da tabela
se for uma escrita orientada a bit (bit 7 do tipo_op estiver ligado), o byte alto
deste parmetro dever indicar o nmero do primeiro bit a ser escrito dentro da
posio inicial de tabela informada no byte baixo deste parmetro (0 a 15)
num_op
nmero de operandos da tabela a serem escritos
se for uma escrita orientada a bit (bit 7 do tipo_op estiver ligado), o nmero d
posies de tabela a serem escritas devem incluir tanto a posio inicial quanto a
ltima posio que deve ser escrita, ainda que estas posies no tenham todos os
seus bits escritos.
se pos_ini=0 e num_op=-1 (que para o tipo unsigned char equivale a 255) a tabela
completa escrita, independente da quantidade de valores contidos no buffer
nTimeOut
intervalo de tempo mximo, em ticks de sistema, que a tarefa aguardar pela
escrita da tabela especificada; se nTimeOut=0, a tarefa retornar imediatamente,
sem aguardar o encerramento da escrita

Observao

Resultado

A funo retorna:
OK (funo executada com sucesso)
PLC_NOT_READY (comunicao inoperante com o CP: a BIOS no est
recebendo as interrupes do CP, que permitem o acesso a sua memria;
provvel que a funo F-2005.016 no esteje sendo chamada pelo ladder)
WAITING_QUEUE_POSITION (a fila de requisies de comunicao de 16
posies da BIOS est lotada e esta comunicao no pde ser atendida; verificar
se no esto sendo feitas muitas leituras/escritas e poucas chamadas a funo
F-2005.016)
PLC_TIME_OUT (o tempo especificado no parmetro nTimeOut da funo foi

Com esta funo possvel escrever at 255 posies de tabela, seja ela do
tipo memria (%TM), decimal (%TD), inteiro (%TI) ou real (%TF).
Os operandos com mais de um byte no CP (AL-2003 e AL-2004) esto no
formato HI:LO, enquanto que no AL-2005 no formato LO:HI. Por isso da
necessidade de converso aps a leitura e antes da escrita de operandos tipo
memria (%M e %TM), decimal (%D e %TD), inteiro (%I e %TI) e real (%F
e %TF) no CP.

95

5. Programao
excedido antes da BIOS conseguir realizar a escrita; verificar com que freqncia
esto sendo feitas chamadas a funo F-2005.016)
COD_ERRO_TIPO_OPERANDO_INVALIDO (o tipo de operando especificado
no parmetro tipo_op da funo no um valor vlido)
COD_ERRO_OPERANDO_NAO_DEFINIDO (houve a tentativa de escrita de
uma tabela no declarado na memria do CP)
COD_ERRO_INDICE_TABELA_INVALIDO (houve a tentativa de escrita de uma
posio de tabela no declarada na memria do CP)
COD_ERRO_NUMERO_OPERANDOS_INVALIDO (houve a tentativa de escrita
de um nmero invlido de posies da tabela: 0)
Veja tambm

ReadOp, ReadOpSwap, WriteOp, WriteOpSwap, ReadTab, ReadTabSwap,


WriteTab, ReadTabs, WriteTabs, ReadPLC, WritePLC

96

6. Desenvolvendo uma Aplicao para o AL-2005

6. Desenvolvendo uma Aplicao para o AL-2005


Instalao do Ambiente de Desenvolvimento
O ambiente de desenvolvimento de aplicaes para o AL-2005 e duas aplicaes exemplo so
fornecidos juntamente com o processador AL-2005. As aplicaes exemplo so modelos de
desenvolvimento para aplicaes que envolvam comunicao com outros dispositivos e de aplicaes
de clculo efetuadas no coprocessador,
Os diretrios\arquivos necessrios para o desenvolvimento de uma nova aplicao para o processador
AL-2005 so instalados a partir do CD origem em um diretrio de trabalho no microcomputador,
gerando a rvore de diretrios descrita a seguir.
Diretrio INCLUDE
Contm unicamente o arquivo AL2005.H de cabealho para aplicaes do AL-2005.
\INCLUDE
AL2005.H

diretrio com o header do AL-2005


arquivo de Header para programas AL-2005

Diretrio LIB
Contm ambiente para a gerao das bibliotecas de servios especificos para o processador AL-2005.
\LIB
AL2005L.LIB
AL2005S.LIB
C0DBGL.OBJ
C0DBGS.OBJ
C0EXEL.OBJ
C0EXES.OBJ

diretrio c/ bibliotecas e startup para o AL-2005


biblioteca de servios modelo Large
biblioteca de servios modelo Small
cdigo de startup para modelo Large - depurao
cdigo de startup para modelo Small - depurao
cdigo de startup para modelo Large - execuo
cdigo de startup para modelo Small - execuo

Diretrio UTIL
Contm o utilitrio LOCATE para o desenvolvimento das aplicaes.
\UTIL
LOCATE.EXE

diretrio de utilitrios
executvel para realocao de aplicaes (utilizado
em modo depurao)

Diretrio AL3860
Contm o programa carregador de aplicativos.
\AL3860
AL3860.EXE
AL3860.INI

diretrio do carregador
programa carregador de aplicativos
arquivo de inicializao

Diretrio SUPORTE
Contm programa para teste das interfaces seriais A e B.
\SUPORTE
TSTCOM.TXT
TSTCOM_A.EXE
TSTCOM_B.EXE

diretrio de suporte
instrues de utilizao dos programas
programa para teste da porta COM A
programa para teste da porta COM B
97

6. Desenvolvendo uma Aplicao para o AL-2005


Diretrio TD2005
Para gerao de uma nova verso, deve-se chamar o compilador Borland C++ (BC), o qual
invocar a aplicao para depurao no AL-2005, a qual deve ser carregada via carregador AL-3860.
\TD2005
TD2005.EXE

diretrio com a aplicao de depurao


aplicao depurador remoto para AL-2005

Diretrio DOCS
Para gerao de uma nova verso, deve-se chamar o compilador Borland C++ (BC), o qual
invocar a aplicao para depurao no AL-2005, a qual deve ser carregada via carregador AL-3860.
\DOCS
TUTORIAL.PDF
MU207006.PDF

diretrio contendo documentao do produto


tutorial apresentando uma viso geral do produto
manual de utilizao do produto.

Diretrios DEMOCOM e DEMOCALC


O diretrio DEMOCOM contm todo o ambiente de desenvolvimento de um programa exemplo
que envolve comunicaes a ser executado no AL-2005.
O diretrio DEMOCALC contm o ambiente de desenvolvimento de um programa exemplo para
clculo.
\DEMOCOM
\DEMOCALC
\AL2003
C-DEMO.000
DEMO.MTL
E-DEMO.000
E-DEMO.001
F-2005.016
\AL2004
C-DEMO.000
DEMO.MTL
E-DEMO.000
E-DEMO.001
F-2005.016
DEMO.C
PSDFLOAT.C
PSDFLOAT.H
FLOAT.ASM
DEMO.DSK
DEMO.EXE
DEMO.H
DEMO.PRJ
DEMOTD.DSK
DEMOTD.EXE
DEMOTD.PRJ
RELOCA.CFG
XDEMOTD.EXE

diretrio com a aplicao exemplo para drivers de comunicao


diretrio com a aplicao exemplo para clculo
diretrio com o projeto demo para o AL-2003
modulo de configurao
projeto do MasterTool
mdulo de partida
mdulo de execuo principal
funo de comunicao com o AL-2005
diretrio com o projeto demo para o AL-2004
modulo de configurao
projeto do MasterTool
mdulo de partida
mdulo de execuo principal
funo de comunicao com o AL-2005
fonte de programa exemplo para AL-2005
somente DEMOCALC API para clculo ponto flutuante
somente DEMOCALC API para clculo ponto flutuante
somente DEMOCALC API para clculo ponto flutuante
configurao do projeto no Borland C++
aplicao executvel no AL-2005
arquivo de header para programa exemplo
arquivo de projeto Borland C++ para gerar executvel
configurao do projeto no Borland C++
aplicao depurvel no AL-2005
arquivo de projeto Borland C++ para gerar depurvel
arquivo de configurao do Paradigm LOCATE
aplicao relocada depurvel no AL-2005
em conjunto com o Turbo Debugger)

O projeto DEMO.MTL deve ser enviado para a UCP atravs do programador MasterTool.
Deve ser verificado qual o modelo de UCP utilizado e selecionado o projeto correspondente.
98

6. Desenvolvendo uma Aplicao para o AL-2005


A figura 6-1 mostra a inicializao da tabela de configurao %TM0000 - passada como parmetro
de entrada 1 na chamada do mdulo F-2005.016. Esta tabela referida tambm como tabela de
relaes quando efetua a correlao entre operandos de protocolos distintos. A decodificao das
informaes constantes nesta tabela efetuada pelo software. A tabela de configurao das
aplicaes DEMO apresentada como comentrio do arquivo DEMO.H de cada aplicao .
A figura 6-2 mostra a primeira chamada do mdulo F-2005.016, contida no mdulo principal de
execuo.
Na sequncia, as figuras 6-3 e 6-4 mostram duas opes de configurao dos parmetros de entrada
do mdulo F-2005.016. Quando o parmetro de entrada 2 - %KM 00000, o AL-2005 estar
executando em modo release, isto , no permitir a depurao remota da aplicao carregada.
Quando %KM vale +00019, o processador estar apto a depurao remota da aplicao.
Para descrio completa dos parmetros da CHF consulte o Captulo 3, Configurao.

Figura 6-1 Inicializao da Tabela de Configurao da Aplicao

99

6. Desenvolvendo uma Aplicao para o AL-2005

Figura 6-2 Chamada do Mdulo F 2005.016

Figura 6-3 Parmetros de Entrada do Mdulo F 2005.016 (1)

100

6. Desenvolvendo uma Aplicao para o AL-2005

Figura 6-4 Parmetros de Entrada do Mdulo F 2005.016 (2)

Utilizando os Programas DEMO


Os programas DEMOs so fornecidos como parte integrante do AL-2005 e tem como objetivo servir
de base para o desenvolvimento de novas aplicaes.
O desenvolvimento de novos programas aplicativos deve, preferencialmente, utilizar um destes
exemplos como modelo, j que nele esto inclusas as chamadas de todas as ferramentas necessrias
para compilar, depurar e gerar programas executveis no processador AL-2005.
Os dois exemplos foram desenvolvidos visando utilizarem recursos distintos disponveis no
ambiente, de modo a oferecer uma gama maior de caractersticas demonstradas.
Utilizando o recurso de menus configurveis do compilador Borland C++ possvel chamar as
seguintes ferramentas, j com suas linhas de comando convenientemente acertadas:
o depurador Turbo Debugger
o programa LOCATE para relocar aplicaes a serem depuradas remotamente
o programa AL-3860 de carga de aplicaes na memria Flash EPROM do AL-2005
A programao dos menus configurveis do compilador Borland C++ fica armazenada nos arquivos
de projeto .PRJ. Sugere-se portanto, que, ao se criar uma nova aplicao, apenas sejam copiados os
arquivos DEMO.PRJ e DEMOTD.PRJ para outros nomes (como PROG.PRJ e PROGTD.PRJ, por
exemplo), alterando-se os parmetros necessrios, mas mantendo-se a programao dos menus, o que
possibilita a chamada de todas as ferramentas necessrias a partir do compilador.
Verifique qual das aplicaes demo melhor se aplica ao desenvolvimento desejado.
Os parmetros passados ao depurador Turbo Debugger e ao programa LOCATE devem ser
configurados corretamente. Para visualizar os parmetros de configurao disponveis em cada um
deles, deve-se invocar o Turbo Debugger com o parmetro /h (TD /h) e o LOCATE sem nenhum
parmetro (LOCATE).
101

6. Desenvolvendo uma Aplicao para o AL-2005


Para tanto, configure o projeto para os diretrios de instalao do Borland C e de sua aplicao.
As figuras a seguir exibem a sequncia para ajuste dos diretrios menu Options / Directories - e
dos comandos menu Options / Transfer no ambiente do Borland C:

Figura 6-5 Ajuste de Diretrios

Figura 6-6 Ajuste de Comandos (1)

102

6. Desenvolvendo uma Aplicao para o AL-2005

Figura 6-7 Ajuste do Comando Relocador (1)

Figura 6-8 Ajuste do Comando Relocador (2)

103

6. Desenvolvendo uma Aplicao para o AL-2005

Figura 6-9 Ajuste do Comando Turbo Debugger (1)

Figura 6-10 Ajuste do Comando Turbo Debugger (2)

104

6. Desenvolvendo uma Aplicao para o AL-2005

Figura 6-11 Ajuste do Comando Carregador AL-3860 (1)

Figura 6-12 Ajuste do Comando Carregador AL-3860 (2)

As etapas do desenvolvimento de um programa aplicativo, sob o ponto de vista do ambiente, ou das


ferramentas de desenvolvimento so detalhadas a seguir:

escrita do programa aplicativo


depurao do programa
gerao do programa executvel
carga do programa executvel na Flash EPROM do processador AL-2005

105

6. Desenvolvendo uma Aplicao para o AL-2005


O AL-2005 executa em paralelo vrios aplicativos. Cada aplicativo pode ser seqencial, sendo uma
nica tarefa ou multitarefa.
So caractersticas da programao seqencial:
programao simplificada em relao a criar um aplicativo com vrias tarefas
utiliza poucas rotinas da API do AL-2005
So caractersticas da programao multitarefa:

mais complexo, exigindo maior experincia do projetista


utiliza maior quantidade de rotinas da API do AL-2005 para efetuar sincronizao entre as tarefas
desenvolvimento mais especfico (menos portvel)
permite subdividir o processamento em trechos de cdigo independentes que cooperam para
atingir um objetivo comum

Descrio do Programa DEMOCOM


O programa exemplo fornecido no diretrio DEMOCOM tem por objetivo demonstrar a utilizao de
funes da API responsveis por acesso s interfaces serias, alm de demonstrar a criao e
sincronizao de mltiplas tarefas em uma aplicao do processador AL-2005.
O arquivo DEMO.C, fornecido pelo DEMOCOM implementa duas tarefas que so executadas
concorrentemente. So elas:
driver de comunicao para protocolo ALNET I, que interpreta APENAS comandos de
monitorao de operandos do CP:
o na posio TM0[2] deve ser especificado o canal serial do AL-2005 utilizado:
0 para COMA (configurao padro)
1 para COMB
o

na posio TM0[4] aparece um cdigo para a velocidade de comunicao desejada:


0 para 38400 bps
1 para 19200 bps
2 para 9600 bps (configurao padro)
3 para 4800 bps
4 para 2400 bps
5 para 1200 bps
6 para 600 bps
7 para 300 bps
8 para 150 bps

escrita contnua na tabela TM3 do CP:


o na posio TM3[0] aparece o nmero de posies da TM3 correntemente escritos,
que varia de 256 a 4, seqencialmente
o a posio TM3[1] contm o nmero da iterao para um dado tamanho de
transferncia especificado em TM3[0] (no total, so executadas 1024 iteraes a
cada vez para cada valor diferente em TM3[0])
O arquivo DEMO.C inclui comentrios no seu cdigo fonte visando facilitar seu entendimento.

106

6. Desenvolvendo uma Aplicao para o AL-2005

Descrio do Programa DEMOCALC


O programa exemplo fornecido no diretrio DEMOCALC possui o arquivo DEMO.C, o qual
implementa apenas uma funo destinada ao clculo de operaes sequencias lao que envolvam
operaes matemticas complexas.
O projeto contido no exemplo DEMOCALC inclui uma biblioteca de processamento de dados com
padro descrito pela norma IEEE 754 para operaes envolvendo dados com ponto flutuante. Esta
biblioteca define o padro pseudo float ao invs de dados tipo float. Assim, se obtem uma melhor
performance do processador AL-2005 no processamento de dados envolvendo ponto flutuante.
O programa exemplo foi desenvolvido para efetuar as operaes aritmticas soma, subtrao,
multiplicao e diviso envolvendo valores com ponto flutuante. Para tanto, define apenas um
esqueleto envolvendo a configurao da aplicao atravs da funo HookPLC e uma rotina principal
responsvel por identificar a operao e processar a ao solicitada.
Com o uso da funo HookPLC possvel configurar-se o operando %M inicial da sequncia de
dados trocados entre a aplicao no AL-2005 e o programa aplicativo, ao invs de pr-defini-los,
como feito no exemplo DEMOCOM.
Atravs destes parmetros passados ao coprocessador pela UCP, executado o clculo necessrio
segundo a operao solicitada.
No exemplo, conforme definido na tabela de configurao da aplicao:
o

nas posies TM0[2] e TM0[3] devem ser especificados o cdigo da aplicao e a


verso. No exemplo:
TM0[2] = 9999 TM0[3] = 100
na posio TM0[4] definido o endereo do operando %M para retorno da
configuracao efetuada. No exemplo :
TM0[4] = 1 o que identifica %M0001. Se %M0001 = 321768 ento a aplicao
foi configurada com sucesso.
na posio TM0[5] deve ser especificado o endereo inicial do operando M origem
da rea de troca de dados. No exemplo:
TM0[5] = 10 o que identifica %M0010

.
Na rea definida no exemplo como iniciando em %M0010, so efetuadas as trocas de dados
utilizadas no clculo. As seguintes informaes so definidas a partir deste operando:
o

o
o
o
o
o
o
o

%M0010: controle de habilitao do clculo


1 = habilita clculo para ser efetuado
0 = identifica que operacao foi efetuada e o resultado pode ser lido pelo ladder
%M0011: identifica tipo de operacao aritmtica
1 = soma
2 = subtrao
3 = multiplicao
4 = diviso
%M0012: reservado
%M0013: valor do parmetro 1 (inteiro)
%M0014: reservado
%M0015: valor do parmetro 2 (inteiro)
%M0016: reservado
%M0017: resultado da operao (inteiro)
%M0018: status do clculo.
321768 = Identifica se operao foi vlida.

107

6. Desenvolvendo uma Aplicao para o AL-2005


O resultado do clculo armazenado em %M0017 e representa o valor obtido pela operao de P1 +
P2, P1 P2, P1 * P2 ou P1 / P2, e est disponvel para uso pelo programa ladder quando %M0010
passar para o valor 0 e %M0018 for 32768..
Da mesma forma que o projeto anterior, DEMO.C inclui comentrios no seu cdigo fonte visando
facilitar seu entendimento.

Compilando os Programas DEMOCOM e DEMOCALC


Os projetos modelos DEMO so compilados no prprio ambiente de edio do Borland C. Atravs da
opo de menu Compile. O diretrio do compilador Borland C deve estar definido no path do
sistema operacional.
As figuras a seguir mostram o resultado da compilao do projeto.

Figura 6-13 Menu Compile

Figura 6-14 Gerao do Cdigo Executvel


108

6. Desenvolvendo uma Aplicao para o AL-2005

Depurao dos Programas DEMO


Verso para Depurao
Para gerar o aplicativo de demonstrao a ser depurado via Turbo Debugger deve ser utilizado o
arquivo de projeto do BorlandC DEMOTD.PRJ.
Dentro do ambiente do compilador, pode-se abrir uma janela com o arquivo DEMO.C, de modo a
poder edit-lo conforme desejado. Para tanto, basta posicionar o cursor da janela de projeto sobre
DEMO.C e teclar ENTER, conforme mostra a figura 6-15:

Figura 6-15 Projeto DEMOTD.PRJ


Para compilar o aplicativo e gerar o executvel correspondente, basta teclar F9 (que eqivale ao
menu COMPILE, comando MAKE). A figura 6-16 mostra o menu de compilao:

Figura 6-16 Compilando o Projeto DEMOTD.PRJ

109

6. Desenvolvendo uma Aplicao para o AL-2005


Na sequncia deve ser executado o relocador para aplicaes a serem depuradas remotamente. Para
tanto tecle SHIFT+F8 (que corresponde ao menu de sistema comando RELOCADOR), quando
executado o LOCATE da Paradigm, que utiliza o arquivo de configurao RELOCA.CFG e gera o
arquivo XDEMOTD.EXE, previamente configurado.na opo Options/ Transfer .
Antes de iniciar a depurao do aplicativo de demonstrao, deve-se carregar no AL-2005 o
programa depurador remoto TD2005.EXE, a ser utilizado em conjunto com o Turbo Debugger. Para
tanto, tecle SHIFT+F9 (que corresponde ao menu de sistema CARREGADOR AL-3860).
No programa de carga AL3860:

1. Selecione o canal de comunicao a ser utilizado, no boto Porta Serial. A figura 6.17
mostra o menu:

Figura 6-17 Seleo do Canal Serial

2. Coloque o AL-2005 em estado programao


3. Se for o caso, escolha o comando APAGA, que apaga todos os mdulos carregados na
memria Flash EPROM do AL-2005. A figura 6-18 mostra a tela do carregador:

Figura 6-18 Modo Programao do AL-2005

110

6. Desenvolvendo uma Aplicao para o AL-2005

4. Selecione e envie o arquivo TD2005.EXE para o AL-2005

Figura 6-19 Seleo do Arquivo de Depurao

Figura 6-20 Diretrio de Mdulos do AL-2005

111

6. Desenvolvendo uma Aplicao para o AL-2005

5. Coloque o AL-2005 em estado de execuo

Figura 6-21 Modo Execuo do AL-2005

6. Selecione o boto FECHAR e retorne ao ambiente do compilador


Para depurar o aplicativo de demonstrao, tecle SHIFT+F4 (correspondente ao menu de sistema
TURBO DEBUGGER) a fim de ativar o Turbo Debugger. Quando o depurador entra no ar, aparece a
mensagem: "Program out of date on remote, send over link?". Responda com "Yes" e aguarde o
trmino da carga do aplicativo no AL-2005. A partir deste momento pode ser iniciada a sesso de
depurao do aplicativo de demonstrao, que pode ser encerrada teclando-se ALT+X.
As figura 6.22 e 6.23 exibem este processo, onde se indentifica o cursor para execuo passo a passo
da aplicao no AL-2005..

Figura 6-22 Envio do Programa a ser Depurado no AL-2005

112

6. Desenvolvendo uma Aplicao para o AL-2005

Figura 6-23 Depurao do Programa


Para sair do ambiente do compilador Borland C++, tecle ALT+X.
ATENO:
Conforme j citado, o nmero da aplicao para uso com o depurador deve ser 19, e este nmero
deve ser utilizado na definio da chamada funo F-2005.016 (constante memria passado como
terceiro parmetro para a funo).
O tamanho do arquivo executvel (aplicao) pode no equivaler a soma da memria de cdigo e de
dados da aplicao, aps a carga no AL-2005, visualizada pelo carregador AL-3860. A diferena que
pode haver se deve aos seguintes fatores:

o header (cabealho) do executvel no transferido para o AL-2005


a tabela de smbolos do executvel no transferida para o AL-2005
a rea de dados no executvel pode estar compactada
variveis pr-inicializadas ocupam memria de cdigo e de dados no AL-2005, enquanto que no
executvel somente de cdigo

O comando de Diretrio do carregador AL-3860 apresenta entre outros, o dado Class CODE
recomendado = 0xXXXX. O valor indicado representa a primeira posio de memria livre na RAM
do AL-2005 (endereo de pargrafo), e equivale a diretiva CLASS CODE = XXXX do arquivo de
configurao do relocador da Paradigm.

Verso para Carga em Flash EPROM


Para gerar o aplicativo de demonstrao demonstrao para ficar residente na Flash EPROM utilize o
arquivo de projeto do BorlandC DEMO.PRJ.
O fonte DEMO.C pode ser alterado conforme desejado. Para tanto pode-se abrir uma janela com o
arquivo DEMO.C, posicionando-se o cursor da janela de projeto sobre DEMO.C e digitando
ENTER. Para compil-lo, basta teclar F9, equivalente ao menu COMPILE, comando MAKE.
Para carregar o executvel gerado no AL-2005, basta teclar SHIFT+F9 (que corresponde ao menu de
sistema CARREGADOR AL-3860).
113

6. Desenvolvendo uma Aplicao para o AL-2005


No programa de carga AL3860:

1. Coloque o AL-2005 em estado programao


2. Se for o caso, escolha o comando APAGA, que apaga todos os mdulos carregados na
memria Flash EPROM do AL-2005
3. Selecione e envie o arquivo DEMO.EXE para o AL-2005

Figura 6-24 Seleo do Arquivo Final

4. Coloque o AL-2005 em estado de execuo


5. Selecione o boto FECHAR e retorne ao ambiente do compilador

Figura 6-25 Diretrio de Aplicaes no AL-2005


Para sair do ambiente do compilador Borland C++, tecle ALT+X.

114

7. Instalao

7. Instalao
Este captulo descreve os procedimentos e cuidados necessrios para a instalao do Processador
Multitarefa AL-2005 e dos arquivos que acompanham o produto. As recomendaes apresentadas
devem ser seguidas para o correto funcionamento do equipamento.
A figura 7-1 mostra o Processador Multitarefa, destacando-se os elementos de conexo e sinalizao
referenciados nas prximas sees.

Figura 7-1 Viso Geral do Processador Multitarefa AL-2005

1, 2, 3, 4 - LEDs de estados
5 - Canal serial dedicado para carga de programa e depurao
6 - Conector DB9 do canal "A" de comunicao
7 - Conector DB9 do canal "B" de comunicao
8, 9 - Conectores para mdulo serial do canal "B"
10, 11 - Conectores para mdulo serial do canal "A"
12 - Conector do Processador Multitarefa AL-2005/RTMP ao barramento da UCP AL-2003 ou
AL-2004

Instalao Mecnica e Eltrica


O Processador Multitarefa AL-2005 um mdulo utilizado com o sistema das UCPs AL-2003 ou
AL-2004. Desta forma seus procedimentos de instalao mecnica e eltrica so descritos no captulo
de Instalao do Manual de Utilizao da UCP correspondente.

115

7. Instalao

Conexes Gerais
Interfaces Seriais
O Processador Multitarefa AL-2005 possui um canal serial dedicado RS-232C para carga de
programa e depurao de aplicativos e dois conectores seriais DB9 para conexo entre o Processador
Multitarefa AL-2005 e equipamentos quaisquer.
Para a carga de programa ou depurao de aplicativos necessrio conectar um microcomputador
padro IBM PC ao Processador Multitarefa AL-2005 (soquete PG do painel frontal) atravs do
cabo AL-1340 ou AL-1327, conforme o tipo de conector.
A figura 7-2 mostra a conexo do canal serial COM A (conector fmea DB9) do Processador
Multitarefa AL-2005 a um equipamento qualquer.

Figura 7-2 Conexo do Canal Serial


Os conectores COM A e COM B apenas realizam a ligao fsica entre os cabos do meio externo
com os mdulos de interface acoplados ao Processador Multitarefa AL-2005. Estes mdulos so
opcionais, oferecendo diferentes tipos de interfaces seriais:

AL-2405/485I: um mdulo serial que implementa o padro de comunicao RS-485


AL-2405/232: um mdulo serial que implementa o padro RS-232C

ATENO:
Antes de conectar o processador multitarefa AL-2005 a qualquer outro equipamento com canal
serial, indispensvel que ambos possuam um ponto de aterramento em comum.

116

7. Instalao

Instalao dos Mdulos Seriais


A figura a seguir mostra como deve ser executado o acoplamento de mdulos seriais ao Processador
Multitarefa AL-2005.

Figura 7-3 Conexo do Mdulo Serial


Para realizar a instalao do mdulo serial devem ser seguidos os seguintes passos:
1. Parafusar o espaador (3) na placa AL-2005 fixando com o parafuso (7) e arruela (8) pelo orifcio
(9)
2. Encaixar a placa do mdulo serial nos conectores 5 e 6 (ou 10 e 11) na placa AL-2005
3. Verificar se todos os pinos encaixam corretamente nos seus respectivos conectores
4. Parafusar a placa do mdulo serial atravs do parafuso (1) e arruela (2) pelo orifcio (4)

Instalao do CD
O CD-ROM contm um aquivo denominado AL2005.EXE.
Para instalao, execute o instalador e siga os procedimentos exibidos na tela

117

8. Manuteno

8. Manuteno
Ao longo da operao ou funcionamento do sistema, algumas anormalidades podem ser
eventualmente encontradas pelo usurio. Os itens a seguir apresentam as anormalidades mais comuns
e do instrues sobre os procedimentos a serem tomados em cada caso.

Diagnsticos
Diagnsticos so mensagens que o sistema envia ao usurio relatando anormalidades, sejam elas
falhas, erros ou modos de operao.
O AL-2005 possui quatro LEDs no seu painel frontal para indicar diferentes modos de operao,
auxiliando tambm no diagnstico de possveis erros.
Suas indicaes so apresentadas na tabela a seguir:

LEDs

Significado

ERR aceso e PG
piscando

A memria do AL-2005/RTMP est vazia

PG aceso

AL-2005 em estado programao

PLC piscando

AL-2005 em execuo e o processador comunicando com a UCP

PLC permanentemente
aceso

Possvel erro na aplicao (lao repetitivo).

COM PG piscando

AL-2005 comunicando com o computador pela porta serial de


programao, durante a carga de aplicao

PLC, PG, COM PG e


ERR acesos por alguns
instantes

Situao normal de power up (inicializao do AL-2005)

PLC, PG, COM PG e


ERR permanentemente
acesos

Caso ocorra durante a execuo da aplicao, indica erro irrecupervel

Tabela 8-1 - LED DG

Teste das Interfaces Seriais


O programa TSTCOM fornecido juntamente com o mdulo AL-2005 tem por por finalidade testar os
canais A e B do mesmo.
O software presente no mdulo fica constantemente informando pela porta serial a mensagem:
"<cn> AL-2005 com A serial test", no caso do software TSTCOM_A.EXE.
O parmetro <cn> um contador livre que informa o nmero da mensagem enviada.
Para teste do canal B deve ser utilizado o programa TSTCOM_B.EXE.
Para verificao do funcionamento das interfaces seriais devem ser seguidos os seguintes
procedimentos:
1- Carga no mdulo AL-2005 do software TSTCOM_A.EXE, TSTCOM_B.EXE ou ambos para
testar a porta desejada atravs do programa de carga AL-3860
2- Neste momento inicia-se a comunicao:
para TSTCOM_A.EXE ir piscar o LED PG
para TSTCOM_B.EXE ir piscar o LED COM PG
118

8. Manuteno

3- Para comunicao com o AL-2005 deve ser utilizado o programa HyperTerminal chamado no seu
microcimputador. Os parmetros de configurao do canal serial so fixos e seguem o padro do
MasterTool conforme a tabela:

BaudRate: 9600 bps


Paridade: par
StopBit: 1 stopbit
RTS/CTS: sem controle

4- O software ir imprimir na janela do HyperTerminal a mensagem supra citada e, para cada tecla
pressionada, ser mostrado um conjunto de caracteres correspondentes esta letra
Caso ainda no ocorra comunicao, certifique-se de que a placa satlite AL-2405 possui o padro
232 ou 485, conforme sua configurao.

Identificando Problemas
Quando o AL-2005 no responder adequadamente a uma comunicao solicitada, os seguintes itens
devem ser verificados se:

verificar se os LEDs da fonte de alimentao acendem. Em caso negativo, verificar o estado do


fusvel da mesma
a fonte est alimentada com a voltagem correta
verificar se o dimensionamento de correntes do barramento no ultrapassa o mximo
especificado nas caractersticas tcnicas das fontes
verificar se o processador multitarefa AL-2005 est corretamente encaixado no bastidor
verificar se os mdulos opcionais (ex. Interface RS-485 AL-2405/485I) encontram-se
corretamente encaixados nos conectores apropriados do Processador Multitarefa AL-2005
verificar se o cabo de comunicao serial est conectado
a temperatura ambiente est dentro do especificado

CUIDADO:
A troca de mdulos no barramento ou a verificao de suas conexes deve ser realizada com a
alimentao principal do sistema desenergizada .
Se nenhum problema for identificado, consulte o Suporte a Clientes Altus.

Manuteno Preventiva

Deve-se verificar, a cada ano:


o se os cabos de interligao esto com as conexes firmes, sem depsitos de poeira,
principalmente os dispositivos de proteo
o se o valor de tenso da fonte de alimentao est dentro do padro especificado para
o mdulo
Em ambientes sujeitos a contaminao excessiva, deve-se limpar periodicamente o equipamento,
retirando resduos, poeira, etc

119

9. Glossrio
Algoritmo
Barramento
Baud rate

Seqncia finita de instrues bem definidas, objetivando resoluo de problemas.


Conjunto de sinais eltricos agrupados logicamente com a funo de transferir informao e controle entre
diferentes elementos de um subsistema.
Taxa com que os bits de informao so transmitidos atravs de uma interface serial ou rede de
comunicao (medido em bits/segundo).

Bit

Unidade bsica de informao, podendo estar no estado 0 ou 1.

BT

Sigla para teste de bateria em ingls (battery test).

Buffers, Pool de
Byte

Coleo de buffers de dados cujo uso controlado pelo gerenciador de buffers.


Unidade de informao composta por oito bits.

Caixa postal

Receptculo fornecido por cada tarefa para receber suas mensagens. Cada tarefa pode ter at quatro
caixas postais.

Canal serial

Interface de um equipamento que transfere dados no modo serial.

Ciclo de varredura
Circuito de co-deguarda
Cdigo comercial
Cdigo de erro
Controlador
programvel
CP
Default
Depurao
Diagnstico
Download
E/S
E2PROM
EIA RS-485
Endereo de mdulo

Uma execuo completa do programa aplicativo de um controlador programvel.


Circuito eletrnico destinado a verificar a integridade do funcionamento de um equipamento.
Cdigo do produto, formado pelas letras PO, seguidas por quatro nmeros.
Srie de inteiros com sinal usados para indicar condies de erro detectadas pelas funes da biblioteca.
Tambm chamado de CP. Equipamento que realiza controle sob o comando de um programa aplicativo.
composto de uma UCP, uma fonte de alimentao e uma estrutura de E/S.
Veja controlador programvel.
Valor predefinido para uma varivel, utilizado em caso de no haver definio.
Testes para determinao do correto funcionamento do produto, procurando os possveis erros de um
sistema.
Procedimento utilizado para detectar e isolar falhas. tambm o conjunto de dados usados para tal
determinao, que serve para a anlise e correo de problemas.
Carga de programa ou configurao no CP.
Veja entrada/sada.
Memria no-voltil, que pode ser apagada eletricamente.
Padro industrial (nvel fsico) para comunicao de dados.
Endereo pelo qual o CP realiza acessos a um determinado mdulo de E/S.

Entrada/sada

Tambm chamado de E/S. Dispositivos de E/S de dados de um sistema. No caso de CPs, correspondem
tipicamente a mdulos digitais ou analgicos de entrada ou sada que monitoram ou acionam o dispositivo
controlado.

Envelope

Estrutura de dados privada usada pelo sistema operacional para passar uma mensagem para uma tarefa.

EPROM
ER
Escravo
Flash EPROM

Significa Erasable Programmable Read Only Memory. uma memria somente de leitura, apagvel e
programvel. No perde seu contedo quando desenergizada.
Sigla usada para indicar erro nos LEDs.
Equipamento ligado a uma rede de comunicao que s transmite dados se for solicitado por outro
equipamento denominado mestre.
Memria no-voltil, que pode ser apagada eletricamente.

Frame

Uma unidade de informao transmitida na rede.

Freeze

Em redes PROFIBUS, o estado da rede quando os dados das entrada so congelados.

Gateway
Grupo de eventos
grupo, Identificador de
um
Hardware
Idle

Equipamento para a conexo de duas redes de comunicao com diferentes protocolos.


Conjunto de 16 eventos cujo acesso e sinalizao controlado pelo gerenciador de eventos.
Inteiro sem sinal atribudo a um grupo de eventos pelo sistema operacional para ser usado como seu
identificador nico.
Equipamentos fsicos usados em processamento de dados onde normalmente so executados programas
(software).
Um dos estados de uma tarefa no sistema operacional do Processador Multitarefa AL-2005/RTMP .
Quando uma tarefa est no estado Idle, ela no est sendo utilizada.

IEC 1131

Norma genrica para operao e utilizao de CPs.

Interface

Dispositivo que adapta eltrica e/ou logicamente a transferncia de sinais entre dois equipamentos.

Interrupo
kbytes
LED

Evento com atendimento prioritrio que temporariamente suspende a execuo de um programa e desvia
para uma rotina de atendimento especfica
Unidade representativa de quantidade de memria. Representa 1024 bytes.
Sigla para light emitting diode. um tipo de diodo semicondutor que emite luz quando estimulado por
eletricidade. Utilizado como indicador luminoso.

Linguagem Assembly
Linguagem de
programao
Linguagem de rels e
blocos Altus
Lista circular
lista, Elemento de uma
Lgica

MasterTool

Linguagem de programao do microprocessador, tambm conhecida como linguagem de mquina.


Um conjunto de regras e convenes utilizado para a elaborao de um programa.
Conjunto de instrues e operandos que permitem a edio de um programa aplicativo para ser utilizado
em um CP.
Estrutura de dados da aplicao usada para manter uma lista de 1, 2 ou 4 bytes, com a capacidade de
acrescentar e remover elementos tanto no topo quanto na base.
Um valor de um byte (8 bits), uma palavra (16 bits) ou dupla palavra (32 bits) que pode ser acrescentado
ou removido de uma lista circular.
Matriz grfica onde so inseridas as instrues de linguagem de um diagrama de rels que compe um
programa aplicativo. Um conjunto de lgicas ordenadas seqencialmente constitui um mdulo de
programa.

Identifica o programa Altus para microcomputador, executvel em ambiente WINDOWS , que permite o
desenvolvimento de aplicativos para os CPs das sries Ponto, Piccolo, AL-2000, Grano e Quark. Ao longo
do manual, este programa referido pela prpria sigla ou como programador MasterTool.

Memria imagem

rea de memria compartilhada entre o Processador Multitarefa AL-2005/RTMP e a UCP AL-2004 ou


AL-2003. A memria imagem contm o valor dos operandos da UCP

Mensagem

Doze bytes de informao da aplicao passada pelo sistema operacional em um envelope para uma
tarefa.

mensagem, Prioridade
de uma
Menu
Mestre

Identifica qual entre as quatro caixas postais de uma tarefa deve receber uma mensagem passada pelo
sistema operacional.
Conjunto de opes disponveis e exibidas por um programa no vdeo e que podem ser selecionadas pelo
usurio a fim de ativar ou executar uma determinada tarefa.
Equipamento ligado a uma rede de comunicao de onde se originam solicitaes de comandos para
outros equipamentos da rede.

Mdulo (referindo-se a
hardware)

Elemento bsico de um sistema completo que possui funes bem definidas. Normalmente ligado ao
sistema por conectores, podendo ser facilmente substitudo.

Mdulo (referindo-se a
software)

Parte de um programa aplicativo capaz de realizar uma funo especfica. Pode ser executado
independentemente ou em conjunto com outros mdulos, trocando informaes atravs da passagem de
parmetros.

Mdulo C
Mdulo de configurao

Mdulo de E/S
Mdulo E
Mdulo execuo

Mdulo F
Mdulo funo

Mdulo P
Mdulo procedimento
Multitasking
Nibble
N
Octeto
Operandos

Veja mdulo de configurao.


Tambm chamado de mdulo C. um mdulo nico em um programa de CP que contm diversos
parmetros necessrios ao funcionamento do controlador, tais como a quantidade de operandos e a
disposio dos mdulos de E/S no barramento.
Mdulo pertencente ao subsistema de entradas e sadas.
Veja mdulo execuo.
Mdulo que contm o programa aplicativo, podendo ser de trs tipos: E000, E001 e E018. O mdulo E000
executado uma nica vez, na energizao do CP ou na passagem de programao para execuo. O
mdulo E001 contm o trecho principal do programa que executado ciclicamente, enquanto que o
mdulo E018 acionado por interrupo de tempo.
Veja mdulo funo.
Mdulo de um programa de CP que chamado a partir do mdulo principal (mdulo E) ou a partir de outro
mdulo funo ou procedimento, com passagem de parmetros e retorno de valores. Atua como uma subrotina.
Veja mdulo procedimento.
Mdulo de um programa de CP que chamado a partir do mdulo principal (mdulo E) ou a partir de outro
mdulo procedimento ou funo, sem a passagem de parmetros.
Caracterstica de um sistema operacional poder executar vrias tarefas de um sistema por intermdio de
um mtodo de compartilhamento de UCP
Unidade de informao composta por quatro bits.
Qualquer estao de uma rede com capacidade de comunicao utilizando um protocolo estabelecido.
Conjunto de oito bits numerados de 0 a 7.
Elementos sobre os quais as instrues atuam. Podem representar constantes, variveis ou um conjunto
de variveis.

PA

Ver pontes de ajuste.

PC

Sigla para programmable controller. a abreviatura de controlador programvel em ingls.

Preemptivo

Mtodo de compartilhamento de UCP por prioridades de execuo.

Programa aplicativo

o programa carregado em um CP, que determina o funcionamento de uma mquina ou processo.

Programa executivo

Sistema operacional de um controlador programvel. Controla as funes bsicas do controlador e a


execuo de programas aplicativos.

Protocolo
RAM

Regras de procedimentos e formatos convencionais que, mediante sinais de controle, permitem o


estabelecimento de uma transmisso de dados e a recuperao de erros entre equipamentos.
Sigla para random access memory. a memria onde todos os endereos podem ser acessados
diretamente de forma aleatria e com a mesma velocidade. voltil, ou seja, seu contedo perdido
quando o equipamento desenergizado, a menos que se possua uma bateria para a reteno dos

valores.
Ready
Real-Time
Recurso
recurso, Identificador de
um

Um dos estados de uma tarefa no Processador Multitarefa AL-2005/RTMP. Indica que uma tarefa est
pronta para executar
uma caracterstica de processos que exigem um tempo de resposta rpido
Uma entidade, como uma regio de memria, cuja posse controlada pelo gerenciador de recursos.
Inteiro sem sinal atribudo a um recurso pelo gerenciador de recursos para ser usado como seu
identificador nico.

Rede de comunicao

Conjunto de equipamentos (ns) interconectados por canais de comunicao.

Rede de comunicao
determinstica

Rede de comunicao onde a transmisso e a recepo de informaes entre os diversos ns garantida


com um tempo mximo conhecido.

Rede de comunicao
mestre-escravo

Rede de comunicao onde as transferncias de informaes so iniciadas somente a partir de um nico


n (mestre da rede) ligado ao barramento de dados. Os demais ns da rede (escravos) apenas
respondem quando solicitados.

Rede de comunicao
multimestre

Rede de comunicao onde as transferncias de informaes so iniciadas por qualquer n ligado ao


barramento de dados.

Run
RX

Um dos estados de uma tarefa no Processador Multitarefa AL-2005/RTMP. Indica que uma tarefa est
executando.
Sigla usada para indicar recepo serial.

Scheduler

o gerenciador de um sistema operacional multitarefa responsvel pelo escalonamento (troca de estado)


das tarefas.

Semforo

Estrutura de dados da aplicao que pode ser usada pelo gerenciador de semforos para fornecer acesso
mutuamente exclusivo a recursos especficos do usurio.

Slot

Uma das n posies usadas para armazenar elementos em uma lista circular.

Software

Programas de computador, procedimentos e regras relacionadas operao de um sistema de


processamento de dados.

Sub-rede

Segmento de uma rede de comunicao que interliga um grupo de equipamentos (ns) com o objetivo de
isolar o trfego local ou utilizar diferentes protocolos ou meio fsicos.

Tag
Tarefa
tarefa, Prioridade de
uma
Taskid
Temporizador
temporizador,
Identificador de um
Tick de hardware
Tick do sistema
Time-out
Time-Slicing
Toggle
Token
TX
UCP
Upload
Wait
WD
Word

Nome associado a um operando ou a uma lgica que permite uma identificao resumida de seu
contedo.
Mdulo de programa executado pelo sistema operacional de tal maneira que parece que todas as tarefas
so executadas simultaneamente.
Prioridade na qual uma tarefa executada. Tarefas que possuem a mesma prioridade so ordenadas pela
ordem na qual foram criadas.
Inteiro sem sinal atribudo a uma tarefa quando a mesma criada e que serve como seu identificador
nico.
Facilidade fornecida pelo sistema operacional que permite a medio de intervalos de tempo precisos.
Inteiro sem sinal atribudo a um temporizador pelo sistema operacional e que serve como seu identificador
nico.
Interrupo cclica gerada por um relgio de hardware.
Mltiplo do tick de hardware, de onde derivada a unidade bsica de tempo do sistema operacional.
Todos os intervalos de tempo do sistema so medidos em mltiplos do tick do sistema.
Tempo preestabelecido mximo para que uma comunicao seja completada. Se for excedido
procedimentos de retentiva ou diagnstico sero ativados.
Mtodo de compartilhamento de UCP por intervalos de tempo.
Elemento que possui dois estados estveis, trocados alternadamente a cada ativao.
uma marca que indica quem o mestre do barramento no momento.
Sigla usada para indicar transmisso serial.
Sigla para unidade central de processamento. Controla o fluxo de informaes, interpreta e executa as
instrues do programa e monitora os dispositivos do sistema.
Leitura do programa ou configurao do CP.
Um dos estados de uma tarefa no Processador Multitarefa AL-2005/RTMP, indica que a tarefa esta
esperando por algum evento.
Sigla para co de guarda em ingls (watchdog). Veja circuito de co de guarda.
Unidade de informao composta por 16 bits.

Você também pode gostar