Escolar Documentos
Profissional Documentos
Cultura Documentos
Al-2005 Processador PDF
Al-2005 Processador PDF
AL-2005/RTMP
Rev. E 05/2006
Cd. Doc.: MU207006
altus
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.
1. Descrio Tcnica
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.
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:
1. Descrio Tcnica
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)
10
2. Descrio Tcnica
Caractersticas Tcnicas
Caractersticas Gerais
AL-2005
Tipo de mdulo
Processador
Memria RAM
Carga de programas
aplicativos no processador
Sistema operacional
Multitarefa preemptivo
Linguagem de Programao
dos aplicativos
Linguagem "C"
Comunicao com o CP
Barramentos de dados
internos
16 bits
Taxa de transferncia de
dados com memria imagem
da UCP
Consumo
Peso
Umidade relativa do ar
Indicao de estado
Temperatura mxima de
operao
60 C
Temperatura de armazenagem
-25 a 70 C
11
2. Descrio Tcnica
Caractersticas do Equipamento
Dimenses Fsicas
Dimenses em milmetros.
12
2. Descrio Tcnica
Denominao
AL-2005
Produtos Relacionados
Os seguintes produtos devem ser adquiridos separadamente quando necessrio:
Cdigo
Denominao
AL-2405/485I
AL-2405/232
AL-1340
AL-1327 ou AL-1715
AL-2302
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:
14
3. Configurao
CHF
2005
016
configura
OPER1
OPER3
reset
OPER2
OPER4
habilita
cpia habilita
erro
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
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:
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.
18
3. Configurao
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
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
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
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
SignalEvent
SignalSemaphore
AddBottomList
AddTopList
GetBottomList
GetTopList
ResetList
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
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
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
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
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
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
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
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
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;
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
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
Descrio
Sintaxe
Resultado
A funo retorna:
OK
INVALID_MEMORY_BLOCK
MEMORY_BLOCK_NOT_IN_USE
MEMORY_BLOCK_USE_COUNT_OVERFLOW
Observaes
Veja tambm
AddBottomList
Descrio
Sintaxe
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
41
5. Programao
AddBufferUseCount
Descrio
Sintaxe
Resultado
A funo retorna:
OK
BUFFER_NOT_IN_USE
BUFFER_USE_COUNT_OVERFLOW (contador+nIncrement > 65535)
Observaes
Veja tambm
GetBuffer, FreeBuffer
AddTopList
Descrio
Sintaxe
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
BeginInterrupt
Descrio
Sintaxe
5. Programao
Resultado
Veja tambm
EndInterrupt, SetInterrupt
ChangeInterruptHandler
Descrio
Sintaxe
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
Sintaxe
Resultado
A funo retorna:
OK
INVALID_TASK_ID
INVALID_TASK_PRIORITY (0 ou > 127)
Veja tambm
CreateTask, DeleteTask
CreateBufferPool
43
5. Programao
Descrio
Sintaxe
Resultado
A funo retorna:
OK
NO_FREE_BUFFER_POOL
NO_BUFFERS_DEFINED
BUFFER_TOO_SMALL
Veja tambm
DeleteBufferPool
CreateResource
Descrio
Cria um recurso
Sintaxe
Resultado
A funo retorna:
OK
NO_FREE_RESOURCE_ID
INVALID_RESOURCE_QUEUE_DEPTH
Veja tambm
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
As interrupes no so alteradas.
CreateTask
Descrio
Sintaxe
Resultado
A funo retorna:
OK
NO_FREE_TASK_CONTROL_BLOCK
INVALID_TASK_PRIORITY (0 ou >127)
Veja tambm
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
DeleteBufferPool
Descrio
Sintaxe
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
Resultado
A funo retorna:
46
5. Programao
OK
INVALID_RESOURCE_ID
RESOURCE_NOT_FREE
Veja tambm
DeleteSemaphore
Descrio
Remove um semforo
Sintaxe
Resultado
A funo retorna:
OK
NO_SUCH_SEMAPHORE (lpSCB no foi inicializado por CreateSemaphore )
SEMAPHORE_IN_USE
Veja tambm
DeleteTask
Descrio
Sintaxe
Resultado
A funo retorna:
OK
INVALID_TASK_ID
TASK_ABORT_NOT_ALLOWED
Observaes
Veja tambm
ChangeTaskPriority, CreateTask
47
5. Programao
DeleteTimer
Descrio
Remove um temporizador
Sintaxe
Resultado
No h retorno de DeleteTimer.
Observaes
Veja tambm
Disable
Descrio
Desabilita as interrupes
Sintaxe
Resultado
As interrupes so desabilitadas.
Observaes
Veja tambm
Enable
EmuInit
Descrio
Sintaxe
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
Resultado
As interrupes so habilitadas.
Veja tambm
Disable
EndInterrupt
Descrio
Sintaxe
Resultado
Veja tambm
BeginInterrupt, SetInterrup
EndTask
Descrio
Sintaxe
Resultado
No h retorno de EndTask
Observaes
Veja tambm
EscreveLeds
Descrio
49
5. Programao
Sintaxe
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
Sintaxe
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
Sintaxe
Resultado
A funo retorna:
OK
INVALID_MEMORY_BLOCK
MEMORY_BLOCK_NOT_IN_USE
Observaes
Veja tambm
FreeBuffer
Descrio
Libera um buffer
Sintaxe
Resultado
A funo retorna:
OK
BUFFER_NOT_IN_USE
Observaes
Veja tambm
GetBuffer, AddBufferUseCount
FreeEventGroup
Descrio
Sintaxe
Resultado
A funo retorna:
OK
51
5. Programao
EVENT_GROUP_IN_USE
Veja tambm
GenerateInterrupt
Descrio
Sintaxe
Resultado
Veja tambm
GetBlock
Descrio
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
AddBlockUseCount, FreeBlock
52
5. Programao
GetBlockSize
Descrio
Sintaxe
Resultado
A funo retorna:
OK
INVALID_MEMORY_BLOCK
MEMORY_BLOCK_NOT_IN_USE
Veja tambm
GetBlock, GetBlockUsingHandle
GetBlockUsingHandle
Descrio
Sintaxe
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
5. Programao
Veja tambm
GetBottomList
Descrio
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
GetBuffer
Descrio
Sintaxe
Resultado
A funo retorna:
OK
INVALID_POOL_ID
NO_BUFFER_AVAILABLE
Observaes
Veja tambm
GetBufferSize
54
5. Programao
Descrio
Sintaxe
Resultado
Observaes
Veja tambm
GetBuffer
As interrupes no so alteradas
GetEventGroup
Descrio
Sintaxe
Resultado
A funo retorna:
OK
NO_FREE_EVENT_GROUP
Veja tambm
GetHandle
Descrio
Sintaxe
5. Programao
Resultado
A funo retorna:
OK
MEMORY_NOT_AVAILABLE (tamanho de memria muito pequeno ou excede 1
Mbytes)
Observaes
Veja tambm
GetIDCoproc
Descrio
Sintaxe
Resultado
Veja tambm
GetMailboxMessage
Descrio
Sintaxe
Resultado
A funo retorna:
OK
CALLING_TASK_WAITING
NO_MESSAGE_WAITING
Observaes
5. Programao
ento voltar a chamar GetMailboxMessage
Veja tambm
GetNumTab
Descrio
Sintaxe
Resultado
Veja tambm
GetTamTab
Descrio
Sintaxe
Resultado
Veja tambm
GetTaskDescriptor
Descrio
Sintaxe
Resultado
A funo retorna:
OK
57
5. Programao
INVALID_TASK_ID
Observaes
Veja tambm
As interrupes no so alteradas
Se TaskID invlido, retornado o valor NULL (0L) em lplpDescr
GetTaskID
Descrio
Sintaxe
Resultado
Observaes
Veja tambm
GetTaskDescriptor, LocateTask
As interrupes no so alteradas
GetTaskStatus
Descrio
Sintaxe
Resultado
A funo retorna:
OK
INVALID_TASK_ID
GetTime
Descrio
Sintaxe
Veja tambm
SetTime
58
5. Programao
GetTopList
Descrio
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
HookPLC
Descrio
Sintaxe
Resultado
A funo retorna:
0
= OK
1
= esgotada a estrutura para armazenamento de ponteiros
Observaes
Veja tambm
59
5. Programao
InByte
Descrio
Sintaxe
Resultado
Observaes
Veja tambm
As interrupes no so alteradas
InWord
Descrio
Sintaxe
Resultado
Observaes
Veja tambm
As interrupes no so alteradas
KillTask
Descrio
Sintaxe
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
Sintaxe
Resultado
A funo retorna:
OK
INVALID_TASK_ID
Observaes
Veja tambm
GetTaskID, GetTaskDescriptor
Descrio
Sintaxe
Resultado
Observaes
Veja tambm
Offset
As interrupes no so alteradas
61
5. Programao
OutByte
Descrio
Sintaxe
Observaes
Veja tambm
As interrupes no so alteradas
OutWord
Descrio
Sintaxe
Observaes
Veja tambm
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
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
ReadPLC
Descrio
Sintaxe
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
5. Programao
char
char
char
char
char
char
char
char
char
}
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
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
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
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
ReadTimer
Descrio
Sintaxe
5. Programao
onde:
TimerID
identificador do temporizador a ser lido
Resultado
Observaes
Veja tambm
As interrupes no so alteradas
ReleaseNestedResource
Descrio
Sintaxe
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
ReleaseResource
Descrio
Sintaxe
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
ReserveResource
Descrio
Reserva um recurso
Sintaxe
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
ResetBufferPool
Descrio
Sintaxe
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
Sintaxe
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
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
ResetPendingWake
Descrio
Sintaxe
Resultado
Observaes
Veja tambm
As interrupes no so alteradas
ResetTaskWake
Descrio
Sintaxe
Resultado
A funo retorna:
OK
INVALID_TASK_ID
Observaes
Veja tambm
As interrupes no so alteradas
RXBlock
Descrio
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
Observao
Veja tambm
RXByte
Descrio
Sintaxe
5. Programao
Resultado
Observao
Veja tambm
Segment
Descrio
Sintaxe
Resultado
Observaes
Veja tambm
As interrupes no so alteradas
76
5. Programao
SendMessage
Descrio
Sintaxe
Resultado
A funo retorna:
OK
INVALID_TASK_ID
NO_FREE_ENVELOPE
NO_MAILBOX_DEFINED
MAILBOX_FULL
Observaes
Veja tambm
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
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
SerialConfig
Descrio
Sintaxe
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
Observaes
Veja tambm
SetInterrupt
Descrio
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
SetOffset
Descrio
Sintaxe
Resultado
A parte do offset do ponteiro lptr setada com o valor de 16 bits sem sinal
nOffset.
Observaes
Veja tambm
As interrupes no so alteradas
SetSegment
Descrio
Sintaxe
Resultado
A parte do segmento do ponteiro lptr setada com o valor de 16 bits sem sinal
nSegment
Observaes
Veja tambm
As interrupes no so alteradas
SetTime
Descrio
Sintaxe
5. Programao
ponteiro para a estrutura com o novo horrio
Veja tambm
GetTime
SignalEvent
Descrio
Sintaxe
Resultado
A funo retorna:
OK
MAILBOX_FULL (no possvel sinalizar o(s) evento(s), provavelmente porque
no existe envelopes de mensagem disponveis)
Veja tambm
SignalSemaphore
Descrio
Sinaliza um semforo
Sintaxe
Resultado
A funo retorna:
OK
NO_SUCH_SEMAPHORE (lpSCB no foi inicializado por CreateSemaphore )
Observaes
Veja tambm
81
5. Programao
StartStopTimer
Descrio
Sintaxe
Observaes
Observaes
Veja tambm
StartTask
Descrio
Sintaxe
Resultado
A funo retorna:
OK
INVALID_TASK_ID
Observaes
Veja tambm
SendMessage, EndTask
StopTask
Descrio
82
5. Programao
Sintaxe
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
Sintaxe
Resultado
Observaes
Veja tambm
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
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
TXByte
Descrio
Sintaxe
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
84
5. Programao
Wait
Descrio
Sintaxe
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
WaitEvent
Descrio
Sintaxe
Resultado
As interrupes so habilitadas
A funo retorna:
OK
TIME_OUT
85
5. Programao
Observaes
Veja tambm
WaitSemaphore
Descrio
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
WaitTime
Descrio
Sintaxe
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
WakeCallingTask
Descrio
Acorda uma tarefa que enviou uma mensagem para a tarefa corrente
Sintaxe
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
WakeTask
Descrio
Acorda uma tarefa que se encontra no estado de espera (devido a uma chamada a
Wait ou WaitTime)
Sintaxe
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
WriteOp
Descrio
Sintaxe
Resultado
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
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
WritePLC
Descrio
Sintaxe
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
5. Programao
NumeroTxUdr, NumeroTxNoack, NumeroTxErro, NumeroTxTimeout,
NumeroTxFalta, NumeroRxOk, NumeroRxAbt, NumeroRxOvr,
NumeroRxCrc, NumeroRxAe, NumeroRxLong, NumeroRxTimeout,
NumeroRxFalta, ConexaoForcada, EsdadoForcado1, EsdadoForcado2
Veja tambm
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
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
WriteTabSwap
Descrio
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
96
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 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
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
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
99
100
102
103
104
105
106
.
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
107
109
1. Selecione o canal de comunicao a ser utilizado, no boto Porta Serial. A figura 6.17
mostra o menu:
110
111
112
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.
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.
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
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.
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 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
PG aceso
PLC piscando
PLC permanentemente
aceso
COM PG piscando
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:
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:
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
119
9. Glossrio
Algoritmo
Barramento
Baud rate
Bit
BT
Buffers, Pool de
Byte
Caixa postal
Receptculo fornecido por cada tarefa para receber suas mensagens. Cada tarefa pode ter at quatro
caixas postais.
Canal 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
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
Freeze
Gateway
Grupo de eventos
grupo, Identificador de
um
Hardware
Idle
IEC 1131
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
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
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
PA
PC
Preemptivo
Programa aplicativo
Programa executivo
Protocolo
RAM
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
Rede de comunicao
determinstica
Rede de comunicao
mestre-escravo
Rede de comunicao
multimestre
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
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
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.