Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2009 Elipse Software Ltda. Todos direitos reservados. 05/10/2009 - Verso 1.15
Sumrio
1 Introduo 2 Configurao 2.1 A Caixa de Dilogo do IOKit 2.2 A Aba Setup 2.3 A Aba Serial 2.4 A Aba Modem 2.5 A Aba Ethernet 2.6 A Aba RAS 3 Referncia dos Tags do IOKit 3.1 Tags Gerais do IOKit 3.2 Tags da Interface Serial 3.3 Tags da Interface Modem 3.4 Tags da Interface Ethernet 3.5 Tags da Interface RAS 4 Tpicos Avanados 4.1 Estados do Driver 4.2 Trabalhando OFFLINE 4.3 Gerenciamento da Conexo 4.4 Threads do Driver 5 Knowledge Base 5.1 COMO: Enumerar a Lista de Modems 6 Apndice I - Eventos do IOKit 7 Apndice II - Propriedades do IOKit 7.1 Parmetros Gerais 7.2 Parmetros de Log 7.3 Parmetros da Interface Serial 7.4 Parmetros da Interface TAPI 7.5 Parmetros da Interface Ethernet 7.6 Parmetros da Interface RAS 8 Histrico de Revises 4 5 5 6 8 10 12 13 16 16 21 21 24 25 26 26 27 28 30 32 32 34 37 37 40 40 44 44 47 48
CAPTULO
Introduo
Este manual uma referncia para os usurios do IOKit Elipse, descrevendo como utilizar e configurar o IOKit tanto no Elipse SCADA quanto no E3, fornecendo informaes tcnicas do uso prtico do IOKit. O IOKit um componente compartilhado utilizado pelos drivers de I/O do Elipse, implementando o acesso padro do nvel fsico e proporcionando interfaces para: Portas seriais. Modem (atravs de TAPI). Ethernet (utiliza Windows Sockets via TCP/IP ou UDP/IP). RAS (Remote Access Server).
Todos os drivers escritos utilizando o IOKit utilizam os seguintes recursos descritos neste manual, como por exemplo: Independncia de nvel fsico. Gerao de logs. Configurao offline. Gerenciamento de conexes.
O IOKit implementado como uma DLL (Dynamic Link Library) linkada com o driver.
IMPORTANTE: Para evitar conflitos entre drivers, o arquivo IOKit.dll deve estar presente APENAS na pasta Windows\System32. Cpias desta DLL em outras pastas podem fazer com que o driver ou o IOKit no funcionem corretamente.
Introdu o
CAPTULO
Configurao
A configurao do IOKit feita na caixa de dilogo de configurao do driver. Para acessar a configurao da caixa de dilogo no E3 (verso 1.xx), siga estes passos: 1. Clique com o boto direito do mouse no driver (IODriver). 2. Selecione Propriedades no menu popup. 3. Selecione a aba Driver. 4. Pressione o boto Outros parmetros. No E3 verso 2.0 ou posterior, basta clicar no boto driver. No Elipse SCADA, siga estes passos: 1. Abra o Organizer. 2. Selecione o driver na rvore. 3. Pressione o boto Extras na aba do driver. Atualmente o IOKIt permite que apenas uma conexo seja aberta para cada driver. Isto significa que, se for necessrio o acesso a duas portas seriais, ter que se adicionar dois drivers na aplicao e configurar cada um deles para cada porta serial. para abrir a configurao do
Alguns drivers fornecem abas adicionais especficas na caixa de dilogo do IOKit. Consulte os manuais do driver caso queira maiores informaes sobre cada aba especfica.
Configura o
Aba Setup Physical Layer: Selecione a interface fsica a partir da lista. As opes so: Serial, Ethernet, Modem e RAS. A interface selecionada dever ser configurada na sua aba especfica. Timeout: Configure o timeout em milissegundos para a camada fsica. Isto , a medida de tempo que a interface de I/O aguardar para a recepo de um byte (qualquer byte do buffer de recepo). Start driver OFFLINE: Assinale esta opo para fazer com que o driver inicie OFFLINE (parado). Isto significa que a interface I/O no ser criada at que se configure o driver como ONLINE (utilizando um tag na aplicao). Este modo possibilita a configurao dinmica da interface I/O em execuo. Veja a seo Trabalhando em
Configura o
OFFLINE para maiores detalhes. Connection management: Estas configuraes ajustam como o IOKit ir manter a conexo e qual a poltica de recuperao contra as falhas. Mode: Seleciona o modo de gerenciamento de conexo. Selecionando a opo Automatic deixar que o driver gerencie a conexo automaticamente como configurado nas opes seguintes. Selecionado a opo Manual deixar o gerenciamento inteiramente a cargo da aplicao. Veja a seo Estado do Driver para maiores detalhes. Retry failed connection every: Selecione esta opo para habilitar a retentativa de conexo do driver em um determinado intervalo (em segundos). Se a opo Give up after no estiver configurada o driver continuar retentando at que a conexo seja efetuada ou que a aplicao seja parada. Give up after: Habilite esta opo para definir um nmero mximo de tentativas de conexo. Quando o nmero especificado em Consecutive connection tries alcanado o driver ir para o modo OFFLINE, assumindo que um problema de hardware est presente. Se o driver estabelece uma conexo com sucesso, o nmero de tentativas sem sucesso zerada. Se esta nova conexo perdida ento o contador de retentativas comea do zero. Disconnect if non-responsive: Habilite esta opo para fazer com que o driver desconecte se nenhum byte chegou interface I/O no timeout especificado (em segundos). Este timeout dever ser maior que o timeout configurado no nvel fsico anteriormente. Logging Options: Estas configuraes controlam a gerao de arquivos de log para o driver. Log to File: Habilite esta opo e configure o nome do arquivo onde o log ser escrito. Arquivos de log podem ser bem extensos, portanto utilize esta opo por curtos perodos de tempo, apenas para o propsito de testes e depuraes. Caso se coloque a macro %PROCESS% no nome do arquivo de log, esta ser substituda pelo ID do processo atual. Esta opo particularmente til se se utilizam vrias instncias do mesmo driver no E3, fazendo assim com que cada instncia gere um arquivo separado de log. Por exemplo: Log to file: c:\e3logs\drivers\sim_%PROCESS%.log Ir gerar um arquivo de log c:\e3logs\drivers\sim_00000FDA.log para o processo 0FDAh Configura o 7
Pode-se tambm utilizar a macro %DATE% no nome do arquivo. Neste caso ser gerado um arquivo de log por dia (no formato aaaa_mm_dd). Por exemplo: Log to file: c:\e3logs\drivers\sim_%DATE%.log Ir gerar o arquivo c:\e3logs\drivers\sim_2005_12_31.log no dia 31 de dezembro de 2005, e c:\e3logs\drivers\sim_2006_01_01.log no dia primeiro de janeiro de 2006.
Aba Serial Port: Selecione a porta serial a partir da lista (de COM1 at COM4) ou digite o nome da porta serial no formato COMn (por exemplo, COM15). Se digitar o nome da porta manualmente, a caixa de dilogo aceitar apenas nomes de portas comeando com COM. Baud rate: Selecione o baud rate a partir da lista (1200, 2400, 4800, 9600, 19200, 38400, 57600 ou 115200) ou digite o baud rate desejado (por exemplo, 600).
Configura o
Data bits: Selecione 7 ou 8 bits de dados a partir da lista. Parity: Selecione a paridade a partir da lista (None, Even, Odd, Mark ou List). Stop bits: Selecione o nmero de stop bits a partir da lista (1, 1.5 ou 2 stop bits). Enable 'ECHO' supression: Habilite esta opo para remover o eco recebido aps o IOKit enviar algo pela porta serial. Se o eco no for igual aos bytes recm enviados, o IOKit aborta a comunicao. Handshaking: Configure o uso dos sinais RTS, CTS e DTR no handshaking (controlando quando o dado pode ser enviado ou recebido atravs da linha serial). Na maioria das vezes configurando o controle DTR para ON e o controle RTS para Toogle ir funcionar tanto com RS232 quanto com RS485. DTR control: Selecione ON para deixar o sinal DTR sempre ligado enquanto a porta serial aberta. Selecione OFF para desligar o sinal DTR enquanto a porta serial aberta. Alguns equipamentos exigem que o sinal DTR esteja ligado para permitir a comunicao. RTS control: Selecione ON para deixar o sinal RTS sempre ligado enquanto a porta serial aberta. Selecione OFF para desligar o sinal RTS enquanto a porta serial aberta. Selecione Toogle para ligar o RTS enquanto envia os bytes atravs da porta serial e deslig-lo quando no est enviando bytes (habilita recepo). Wait for CTS before send: Disponvel apenas quando o controle RTS est configurado para Toogle. Utilize esta opo para forar que o driver verifique o sinal CTS antes de enviar os bytes atravs da porta serial (aps levantar o sinal de RTS). Neste modo o CTS tratado como um flag de permisso para envio. CTS timeout: Determina o tempo mximo (em milissegundos) que o driver ir aguardar pelo sinal de CTS depois de levantar o sinal de RTS. Se o CTS no levantado dentro deste timeout, o driver acaba por falhar na comunicao atual e retorna erro. Delay before send: Alguns hardwares de porta serial demoram a habilitar o circuito de envio de dados depois que o sinal RTS levantado. Configure este parmetro para aguardar uma determinada quantidade de milissegundos depois de levantar o RTS e antes de enviar o primeiro byte. IMPORTANTE: esta espera deve ser utilizada com muito cuidado, pois consome 100% dos recursos da CPU enquanto aguarda. A performance geral do system ser degradada conforme este valor aumenta.
Configura o
Delay after send: o mesmo que Delay before send, mas neste caso a espera efetuada depois que o ltimo byte enviado, antes de baixar o sinal de RTS. Inter-byte delay (microseconds): Define uma espera entre cada byte transmitido pelo IOKit, em milionsimos de segundo (1000000 = 1 segundo). Esta opo deve ser utilizada com esperas pequenas (menos que um milissegundo). Inter-frame delay (milliseconds): Define uma espera entre pacotes enviados ou recebidos pelo IOKit, em milsimos de segundo (1000 = 1 segundo). Esta espera aplicada caso o IOKit envie dois pacotes consecutivos, ou entre um pacote recebido e o prximo envio.
Aba Modem A interface modem utiliza os modems TAPI instalados no seu computador.
10
Configura o
Select the modem to use: Escolha um modem a partir da lista de modems disponveis no seu computador. Case selecione default modem, ento o primeiro modem disponvel ser utilizado (escolher esta opo recomendado especialmente quando a aplicao ser utilizada em um outro computador). Modem settings: Clique neste boto para abrir a janela de configurao do modem selecionado. Dial Number: Digite o nmero para discar (este pode ser modificado em tempo de execuo). Pode-se utilizar a caractere w representando uma pausa (espera pelo tom de discagem). Exemplo: 0w33313456 (discar 0, esperar e ento discar 33313456). Accept incoming calls: Habilitando esta opo faz com que o driver atenda o telefone quando ele receba uma chamada externa. Para utilizar esta opo necessrio que o Connection managment, na aba Setup, esteja configurada para Manual.
Configura o
11
Aba Ethernet Transport: Selecione TCP/IP para um socket TCP (stream). Selecione UDP/IP para utilizar um socket UDP (datagram, connectionless). Listen for connections on port: Utilize esta opo para aguardar por novas conexes em uma porta IP especfica (comum em drivers Escravos). Caso se deixe esta opo desmarcada ento o driver conectar ao endereo e porta especificados em Connect to. Connect to: Estes parmetros configuram o endereo IP e a Porta do dispositivo remoto. IP: Digite o endereo IP do dispositivo remoto. Voc pode usar tanto o IP separado por pontos quanto uma URL (no caso de uma URL, o driver usa o servio de DNS disponvel para mapear a URL para um endereo IP). Exemplos: 192.168.0.13 ou server1. 12 Configura o
Port: Digite a porta IP do dispositivo remoto (de 0 at 65535). Specify local port: marque esta opo para utilizar uma porta local fixa ao conectar ao endereo principal. Backup address: Habilite o endereo de backup se o dispositivo dispe de um endereo de IP alternativo (no caso do primeiro endereo falhar). IP: Digite o endereo IP do dispositivo remoto. Voc pode usar tanto o IP separado por pontos quanto uma URL (no caso de uma URL, o driver usa o servio de DNS disponvel para mapear a URL para um endereo IP). Exemplos: 192.168.0.13 ou server1. Port: Digite a porta IP do dispositivo remoto (de 0 at 65535). Specify local port: marque esta opo para utilizar uma porta local fixa ao conectar ao endereo de backup. PING before connecting: Habilite esta opo para pingar (verificar se o dispositivo pode ser encontrado na rede) o dispositivo antes de tentar uma conexo com o socket. Esta uma maneira rpida de determinar a chance de uma conexo bem sucedida antes de tentar abrir um socket com o dispositivo (o timeout de uma conexo com um socket pode ser bem alto). Timeout: Especifique o nmero de milissegundos de espera por uma resposta do ping. Deve-se usar o comando PING para verificar o tempo normal de resposta, configurando este parmetro para um valor acima desta mdia. Normalmente pode-se configurar um valor entre 1000 e 4000 milisegundos (de 1 at 4 segundos). Retries: Nmero de retentativas de ping (no conta a tentativa inicial). Se todos as tentativas falharem ento a conexo com o socket ser abortada. Enable 'ECHO' suppression: Marque esta opo para eliminar o 'eco' dos dados recebidos. O 'eco' uma cpia dos dados que foram enviados, que pode ser retornada ' frente' da mensagem de resposta.
Configura o
13
em uma porta IP. Para cada conexo aceita nesta porta ele d acesso a um modem. Quando conectando a um dispositivo RAS, primeiramente o IOKit conecta ao socket no IP e porta configurado na aba Ethernet. Depois que o socket aberto, os seguintes passos de inicializao ou de conexo so efetuados: 1) Limpeza do socket (remove qualquer mensagem de saudao TELNET recebida do dispositivo RAS). 2) Envia o comando de discagem AT (em ASCII) no socket. 3) Aguarda pela recepo de uma resposta CONNECT. 4) Caso o timeout expire, a conexo abortada. 5) Se o CONNECT recebido dentro do timeout, o socket disponibilizado para comunicao com o dispositivo (a conexo est estabelecida). Se o passo 5 efetuado com sucesso, ento o socket comporta-se como um socket normal, com o dispositivo RAS funcionando como um roteador entre o driver e o dispositivo (os bytes enviados pelo driver so recebidos pelo dispositivo RAS e enviados para o dispositivo destino utilizando um modem. Os bytes recebidos pelo dispositivo RAS do modem so enviados de volta ao driver utilizando o mesmo socket). Depois que a conexo estabelecida, a interface RAS monitora os dados recebidos pelo driver. Caso um String de NO CARRIER seja encontrado, o socket fechado. Se o dispositivo RAS no envia o sinal NO CARRIER, a interface RAS no consegue detectar quando a conexo modem entre o dispositivo RAS e o dispositivo final de I/O falha. Para recuperao de tal falha fortemente recomendado que seja habilitada a opo Disconnect if non-responsive (na aba de Setup).
14
Configura o
Aba RAS AT command: String com o comando AT completo usado para discar ao dispositivo destino. Exemplo: ATDT33313456 (discagem usando tom para o nmero 33313456). Connection timeout: Nmero de segundos a aguardar por uma resposta CONNECT do modem, aps o envio do comando AT.
Configura o
15
CAPTULO
B1 = -1 B2 = 0 B3 = 0 B4 = 1
16
Este bloco retorna eventos de driver gerados por vrias fontes no IOKit (ver Apndice I - Eventos do IOKit para uma lista com todos os eventos gerados pelo IOKit). A propriedade TimeStamp do bloco representa o momento em que o evento ocorreu. Os elementos de bloco so: Elemento 0: Tipo de Evento. 0: Informao 1: Advertncia 2: Erro Elemento 1: Fonte do Evento. 0: Driver (especfico do driver) -1: IOKit (eventos genricos de IOKit) -2: Interface Serial -3: Interface Modem -4: Interface Ethernet -5: Interface RAS Elemento 2: Nmero de erro (especfico de cada fonte de evento). Elemento 3: Mensagem do evento (String, especfico de cada evento).
NOTA: O driver mantm um nmero mximo de 100 eventos internamente. Se eventos adicionais forem reportados, os eventos mais antigos sero descartados.
17
Parmetros de string
Este tag indica o estado da camada fsica. Seus possveis valores so: 0: Camada Fsica parada (o driver est offline, a camada fsica falhou ao inicializar ou excedeu o nmero mximo de tentativas de reconexo). 1: Camada Fsica iniciada mas no conectada (o driver est online, mas a camada fsica no est conectada. Se o gerenciamento de conexo automtica estiver habilitado, a camada fsica pode estar conectando, desconectando ou esperando por uma tentativa de reconexo. Se o gerenciamento de conexo manual estiver selecionado, a camada fsica permanecer neste estado at ser forada a conectar). 2: Camada Fsica conectada (a camada fsica est pronta para ser usada). Isto NO signfica que o equipamento esteja conectado, apenas que o meio de acesso est funcionando.
inteiro precisa ser escrito de uma s vez). No Elipse SCADA, ser necessrio usar um tag BLOCO. Cada parmetro a ser configurado utiliza dois elementos de bloco. Por exemplo, caso seja necessrio configurar 3 parmetros, ento o tamanho do bloco deve ser 6 (3 * 2). O primeiro elemento o nome da propriedade (como um String), o segundo elemento o valor da propriedade. Veja este cdigo de script do Elipse SCADA:
// 'Block' should be a Block tag with automatic read, scan read, // and automatic write DISABLED // configure the parameters Block.element001 = "IO.Type" // Parameter 1 Block.element002 = "Serial" Block.element003 = "IO.Serial.Port" // Parameter 2 Block.element004 = 1 Block.element005 = "IO.serial.BaudRate" // Parameter 3 Block.element006 = 19200 // Write the whole block Block.Write()
Ao usar o E3, a habilidade de criar arrays em runtime permite o uso tanto de um tag de comunicao quanto de um tag bloco. Pode-se utilizar o mtodo Driver.Write para enviar os parmetros diretamente para o driver, sem a necessidade de criar um tag. Veja estes exemplos:
Dim arr(6) ' Configure the array elements arr(1) = "IO.Type" arr(2) = "Serial" arr(3) = "IO.Serial.Port" arr(4) = 1 arr(5) = "IO.serial.BaudRate" arr(6) = 19200 ' We have two methods of sending the parameters ' Method 1: using an I/O tag tag.WriteEx arr ' Method 2: without using a tag Driver.Write -1, 0, 0, 3, arr
O driver no valida nomes de parmetros ou valores passados, por isso cuidado ao escrever seus nomes corretamente. O comando Write falhar se a array de configurao for formada incorretamente. Pode-se consultar o log do driver ou usar o paremtro writeStatus da funo WriteEx para descobrir a causa exata do erro:
19
Dim arr(10), strError arr(1) = Array("IO.Type", "Serial") arr(2) = Array("IO.Serial.Port", 1) arr(3) = Array("IO.serial.BaudRate", 19200) If Not Driver.WriteEx -1, 0, 0, 3, arr, , , strError Then MsgBox "Failed to set driver parameters: " + strError End If
O comando Write pode falhar quando estiver configurando o driver como ONLINE (write 1). Neste caso, o driver permanecer OFFLINE. A causa da falha pode ser: tipo de camada fsica configurada incorretamente (provavelmente um valor invlido foi configurado para a propriedade IO.Type); o driver pode ter ficado sem memria; a camada fsica pode ter deixado de criar seu thread de trabalho (procure no arquivo de log pela mensagem Failed to create physical layer thread!); a camada fsica no conseguiu inicializar. A causa da falha depende do tipo de camada fsica. Pode ser um nmero de porta serial invlida, falha ao inicializar Window Sockets, falha ao inicializar o TAPI (modem), etc. A causa ser estabelecida no arquivo de log. 20 Refernc ia dos Tags do IOKit
IMPORTANTE: mesmo que configurao do driver para ONLINE seja bem sucedida, isto no signfica necessariamente que a camada fsica est pronta para o uso. O tag Physical Layer Status deve ser conferido para assegurar que a camada fsica esteja conectada e preparada para comunicar.
IMPORTANTE: Estes tags estaro disponveis apenas quando o driver estiver ONLINE.
modificar este tag, o novo valor ser usado apenas no prximo comando Dial.
3.3.2 Dial
Dial (-1, 0, 3, 1) IO.TAPI.Dial (Apenas Escrita) Ao escrever qualquer valor neste tag, a interface modem fora uma chamada. Este comando assncrono, apenas iniciando o processo de chamada. Pode-se monitorar o tag Is Modem Connected para detectar quando a chamada ser estabelecida.
22
"Error: busy!": O driver abortou a ligao porque a linha estava ocupada. "Error: no answer!": O driver abortou a chamada porque no recebeu resposta do outro modem. "Error: unknown!": A chamada atual foi abortada por um erro desconhecido.
NOTE: Use este comando apenas quando estiver gerenciando a camada fsica manualmente, ou se estiver explicitamente tentando forar o driver a reiniciar a comunicao. Se a camada fsica estiver conectada para reconexo automtica, o driver imediatamente tentar re-estabelecer a conexo.
IMPORTANTE: Estes tags esto disponveis apenas quando o driver estiver ONLINE.
3.4.1 IPSelect
IPSelect (-1, 0, 4, 0) IO.Ethernet.IPSelect (Leitura/Escrita) Indica o IP ativo: 0: O IP principal est selecionado (ativo). 1: O IP alternativo (backup) est selecionado (ativo). 24 Refernc ia dos Tags do IOKit
Se a interface Ethernet (ou RAS) estiver conectada, o tag indica qual dos dois IPs configurados est sendo usado. Se a interface for desconectada, o tag indica qual IP ser usado primeiro na prxima tentativa de conexo. Durante o processo de conexo, se o IP ativo no estiver disponvel, o IOKit tentar conectar com o outro IP. Se a conexo com o IP alternativo funcionar, este ser configurado como o IP Ativo (switchover automtico). Para forar um switchover manual, escreva 1 ou 0 neste tag. Isto forar a reconexo com o IP especificado (0 = IP Principal; 1 = IP Backup) se o driver estiver atualmente conectado. Se o driver estiver desconectado, isto configurar o IP ativo para a prxima tentativa de conexo.
3.4.2 IPSwitch
IPSwitch (-1, 0, 4, 1) IO.Ethernet.IPSwitch (Write-Only) Qualquer valor escrito neste tag forar o switchover manual. Se o IP Principal estiver ativo, ento o IP Backup ser ativado, e vice-versa. Isto forar a reconexo com o IP especificado se o driver estiver atualmente conectado. Se o driver estiver desconectado, isto configurar o IP ativo para a prxima tentativa de conexo.
25
CAPTULO
Tpicos Avanados
Este captulo possui informaes mais aprofundadas sobre o funcionamento interno do IOKit.
NOTA: Os estados definidos aqui se aplicam somente camada fsica. Quando a camada fsica est conectada, o driver consegue acessar o driver de comunicao (PLC), mas este pode ainda sim no responder. Conectar a camada fsica um bom ponto de partida, mas procure sempre verificar os tags especficos do driver que reportam o estado do equipamento.
26
27
28
29
4.4.2 Threads do E3
Ao usar o E3, cada driver tem seu prprio processo (IOServer.exe). Todos os processos de drivers so gerenciados pelo E3 Runtime (E3Run.exe). Sero cobertos nesta seo apenas os threads do IOSERVER: Thread principal (MAIN): este thread recebe solicitaes do E3RUN. Estas solicitaes incluem iniciar ou parar o driver, escrever comandos, e iniciar ou parar o tag scan. Thread CALLBACK: este thread responsvel por enviar valores de volta ao E3RUN. Thread do DRIVER: este thread, assim como no thread DRIVER do Elipse SCADA, 30 Tpic os Avan ados
onde o driver realmente executado. Thread de PHYSICAL LAYER: este thread, assim como o thread PHYSICAL LAYER do Elipse SCADA, lida com as solicitaes de comunicao enviadas pelo thread do DRIVER, bem como gerencia a conexo fsica. Ele iniciado apenas quando o driver estiver ONLINE.
31
CAPTULO
Knowledge Base
Esta seo contm artigos com dicas sobre o uso do IOKit.
NOTA: Os eventos so gerados assincronamente, portanto ao realizar estes passos em um script, termine-o por aqui.
32
Para capturar estes eventos, necessrio declarar um tag Read Driver Events em sua aplicao. No evento OnRead deste tag, deve-se verificar os eventos que reportam os modem IDs disponveis. Deve-se procurar por eventos com Tipo = 0 (informao), Fonte = -3 (Modem). A enumerao sempre inicia com um evento com Cdigo = 2, seguido de um evento com Cdigo = 3 para cada Modem ID, e termina com um evento com Cdigo = 4. O exemplo abaixo lista os eventos retornados quando dois modems fictcios so encontrados (IDs 318 e 99383): TIPO FONTE CDIG O MENSAGEM
"99383:Built in modem"
Seu script OnRead pode extrair os modem IDs da mensagem de eventos com Cdigo = 3, e armazen-los para uso posterior. 3. Reconfigure o IOKit com um Modem ID vlido Depois de haver enumerado os Modem IDs vlidos, pode-se continuar a configurar o driver. Primeiro, deixe o driver novamente offline (escreva 0 no tag Work ONLINE). Ento, escreva um dos Modem IDs vlidos enumerados no parmetro IO.TAPI. ModemID usando o tag Set Configuration Parameters. Finalmente, deixe o driver novamente online (escreva 1 no tag Work ONLINE).
33
CAPTULO
CDIGO 0
MENSAGEM Error opening serial port: %s Tried to open port COM%u twice. Failed to open port %s (Windows error %u). Failed to configure port %s (Windows error %u).
Error (2)
Modem (-3)
Error opening modem line: %s Tried to open line twice. Failed to initialize line (TAPI error %s). Failed to negotiate API version (TAPI error %s). Failed to open line (TAPI error %s). Failed to configure status messages (TAPI error %s). Failed to get line address status (TAPI error %s).
34
TIPO
FONTE
CDIGO
MENSAGEM Out of memory getting line address status. Failed to get device capabilities (TAPI error %s). Device ID = %u not found. Out of memory getting device capabilities.
2 3
Beginning of available modem list. %u:%s %u o ID do modem (em decimal). %s a descrio do modem.
4 0
End of available modem list. Error connecting to %s on port %u: %s Error connecting to %s on port %u (backup IP): %s Tried to connect socket twice Null address Socket error %s(%d) calling %s()
Error (2) Info (0) Error (2) Info (0) Error (2) Info (0) Info (0)
Ras (-5) Ras (-5) Ras (-5) IOKit (-1) IOKit (-1) IOKit (-1) IOKit (-1)
1 3 4 1 2 3 4
Timeout waiting for CONNECT. RAS response: '%s'. RAS connection error: NO CARRIER. Initializing physical layer... Physical layer initialization failed! Physical layer initialized! Connecting physical layer...
35
TIPO Error (2) Info (0) Error (2) Info (0) Error (2) Info (0) Info (0) Info (0) Error (2) Info (0) Info (0) Info (0)
FONTE IOKit (-1) IOKit (-1) IOKit (-1) IOKit (-1) IOKit (-1) IOKit (-1) IOKit (-1) IOKit (-1) IOKit (-1) IOKit (-1) IOKit (-1) IOKit (-1)
CDIGO 5 6 7 8 9 10 11 12 13 14 15 16
MENSAGEM Failed to connect physical layer! Physical layer connected! Physical layer connection lost! Reconnecting physical layer... Failed to reconnect physical layer! Physical layer reconnected! Physical layer connected automatically! Reconnecting physical layer (retry #%u) Failed to reconnect physical layer (retry #%u)! Physical layer reconnected (on retry #%u)! Terminating physical layer... Physical layer terminated! (%u bytes sent, %u bytes received). Disconnecting physical layer... Physical layer aborted (exhausted all retries)! Physical layer non-responsive for %u seconds, disconnecting...
17 18 19
36
CAPTULO
7.1.1 IO.ConnectionMode
IO.ConnectionMode (Integer) Controla o modo de Gerenciamento da Conexo: 0: Modo automtico (o driver gerencia a conexo). 1: Modo manual (a aplicao gerencia a conexo).
7.1.2 IO.GiveUpEnable
IO.GiveUpEnable (Boolean) TRUE pra definir um nmero mximo de tentativas de reconexo. Se todas as reconexes falharem, o driver entrar no estado OFFLINE. Se configurado como FALSE, o driver tentar at que uma reconexo seja bem-sucedida.
37
7.1.3 IO.GiveUpTries
IO.GiveUpTries (Integer) Nmero de tentativas de reconexo antes que esta seja abortada. Por exemplo, se o valor deste parmetro for 1, o driver tentar apenas uma reconexo quando a conexo for perdida. Se esta falhar, o driver entrar no estado OFFLINE.
7.1.4 IO.InactivityEnable
IO.InactivityEnable (Boolean) TRUE para habilitar e FALSE para desabilitar a deteco de inatividade. A camada fsica ser desconectada se estiver inativa por um perodo de tempo. Ela ser considerada inativa apenas se for capaz de enviar dados, mas no de receb-los de volta.
7.1.5 IO.InactivityPeriodSec
IO.InactivityPeriodSec (Integer) Nmero de segundos para a verificao de inatividade. Se a camada fsica estiver inativa por este perodo de tempo, ela ser desconectada.
7.1.6 IO.RecoverEnable
IO.RecoverEnable (Boolean) TRUE para habilitar o driver a recuperar conexes perdidas, FALSE para deixar o driver OFFLINE quando uma conexo for perdida.
7.1.7 IO.RecoverPeriodSec
IO.RecoverPeriodSec (Integer) Tempo de espera entre duas tentativas de conexo, em segundos.
NOTA: A primeira reconexo ser feita imediatamente depois que a conexo for perdida.
38
7.1.8 IO.StartOffline
IO.StartOffline (Boolean) TRUE para iniciar o driver offline, FALSE para iniciar o driver online.
NOTA: No faz sentido modificar esta propriedade em runtime, j que ela s pode ser modificada quando o driver j estiver offline. Para deixar o driver online em runtime, escreva 1 na tag Work ONLINE.
7.1.9 IO.TimeoutMs
IO.TimeoutMs (Integer) Define o time-out da camada fsica (em milissegundos; 1 segundo = 1000).
7.1.10 IO.Type
IO.Type (String) Define o tipo de interface fsica utilizada pelo driver. Os valores possveis so: N ou None: No utiliza uma interface fsica (o driver deve fornecer uma interface customizada). S ou Serial: Utiliza uma porta serial local (COMn). M ou Modem: Utiliza um modem local (interno ou externo) acessado via TAPI ( Telephony Application Programming Interface). E ou Ethernet: Utiliza um socket TCP/IP ou UDP/IP. R ou RAS: Utiliza uma interface RAS (Remote Access Server). O driver conecta-se ao equipamento RAS atravs da interface Ethernet, e ento emite um comando AT (dial).
39
7.2.1 IO.Log.Enable
IO.Log.Enable (Boolean) Configurado como TRUE para habilitar, e FALSE para desabilitar a gerao de logs.
7.2.2 IO.Log.Filename
IO.Log.Filename (String) String que define o nome do arquivo de logs.
7.3.1 IO.Serial.Baudrate
IO.Serial.Baudrate (Integer) Especifica a baud rate da porta serial. Exemplo: 9600.
7.3.2 IO.Serial.CTSTimeoutMs
IO.Serial.CTSTimeoutMs (Integer) Tempo de espera pelo sinal CTS, em milissegundos. Aps o RTS ser ligado (ON), um temporizador iniciado para esperar pelo sinal CTS; se o temporizador expirar, o driver aborta o envio de bytes atravs da porta serial. Disponvel apenas quando o RTS configurado como Toggle, e o WaitCTS TRUE.
40
7.3.3 IO.Serial.DataBits
IO.Serial.DataBits (Integer) Especifica o nmero de bits de dados para a configurao da porta serial. Os valores possveis so: 5: 5 bits de dados. 6: 6 bits de dados. 7: 7 bits de dados. 8: 8 bits de dados.
7.3.4 IO.Serial.DelayAfterMs
IO.Serial.DelayAfterMs (Integer) Nmero de milissegundos de atraso aps o ltimo byte ter sido enviado atravs do serial, e antes de desligar (OFF) o sinal RTS. Disponvel apenas quando o RTS configurado como Toggle, e o WaitCTS FALSE.
7.3.5 IO.Serial.DelayBeforeMs
IO.Serial.DelayBeforeMs (Integer) Nmero de milissegundos de atraso aps o RTS ter sido ligado (ON), mas antes dos dados serem enviados. Disponvel apenas quando o RTS configurado como Toggle, e o WaitCTS FALSE.
7.3.6 IO.Serial.DTR
IO.Serial.DTR (String) Indica o modo como o driver lida com o sinal DTR: OFF: DTR sempre OFF. ON: DTR sempre ON.
41
7.3.7 IO.Serial.InterbyteDelayUs
IO.Serial.InterbyteDelayUs (Integer) Tempo de espera, em milissegundos (1/1000000 de um segundo), para cada dois bytes enviados pela interface serial.
7.3.8 IO.Serial.InterframeDelayMs
IO.Serial.InterframeDelayMs (Integer) Tempo de espera, em milissegundos, antes de enviar um pacote aps o ltimo pacote enviado ou recebido.
7.3.9 IO.Serial.Parity
IO.Serial.Parity (String) Especifica a paridade para a configurao da porta serial. Os valores possveis so: E ou Even: paridade par. N ou None: sem paridade. O ou Odd: paridade mpar. M ou Mark: paridade de marca. S ou Space: paridade de espao.
7.3.10 IO.Serial.Port
IO.Serial.Port (Integer) Nmero da porta serial local: 1: Utiliza o COM1. 2: Utiliza o COM2. 3: Utiliza o COM3. n: Utiliza o COMn. 42 Apndic e II - Propriedades do IOKit
7.3.11 IO.Serial.RTS
IO.Serial.RTS (String) Indica como o driver lida com o sinal RTS: OFF: RTS sempre OFF. ON: RTS sempre ON. Toggle: Liga (ON) o RTS quando estiver transmitindo dados, e desliga (OFF) quando no estiver transmitindo dados.
7.3.12 IO.Serial.StopBits
IO.Serial.StopBits (Integer) Especifica o nmero de bits de parada para a configurao da porta seria. Os valores possveis so: 1: um stop bit. 2: um e meio stop bits. 3: dois stop bits.
7.3.13 IO.Serial.SupressEcho
IO.Serial.SupressEcho (Integer) Utiliza um valor diferente de zero para habilitar a supresso de eco, ou ento zero para desabilit-la.
7.3.14 IO.Serial.WaitCTS
IO.Serial.WaitCTS (Boolean) TRUE faz com que o driver espere pelo sinal CTS antes de enviar bytes quando o RTS estiver ligado (ON). Disponvel apenas quando o RTS configurado como Toggle.
43
7.4.1 IO.TAPI.AcceptIncoming
IO.TAPI.AcceptIncoming (Integer) FALSE se o modem no pode aceitar chamadas externas (o driver se comporta como mestre); TRUE para habilitar a recepo de chamadas (o driver se comporta como escravo).
7.4.2 IO.TAPI.ModemID
IO.TAPI.ModemID (Integer) o nmero de ID do modem. Este ID criado pelo Windows, e usado internamente para identificar o modem dentro de uma lista de equipamentos instalados no computador. Este ID pode no permanecer vlido caso o modem seja re-instalado, ou a aplicao for executada em outro computador. Recomenda-se que este parmetro seja configurado como 0 (zero), indicando que o driver deve utilizar o primeiro modem disponvel.
7.4.3 IO.TAPI.PhoneNumber
IO.TAPI.PhoneNumber (String) O nmero de telefone utilizado em comandos dial. Por exemplo, 0w01234566 (o w fora o modem a esperar por um sinal de chamada).
44
7.5.1 IO.Ethernet.AcceptConnection
IO.Ethernet.AcceptConnection (Boolean) FALSE se o driver no puder aceitar conexes externas (o driver se comporta como mestre); TRUE para habilitar a recepo de conexes (o driver se comporta como escravo).
7.5.2 IO.Ethernet.BackupEnable
IO.Ethernet.BackupEnable (Boolean) TRUE para habilitar o endereo de IP reserva (backup). Se a tentativa de reconectar com o IP principal falhar, o driver tentar utilizar o endereo reserva. FALSE desabilita sua utilizao.
7.5.3 IO.Ethernet.BackupIP
IO.Ethernet.BackupIP (String) IP alternativo (backup) do equipamento de destino. Pode-se utilizar tanto o endereo numrico ou o HOST name do equipamento. Exemplos: 192.168.0.7 ou SERVER2.
7.5.4 IO.Ethernet.BackupPort
IO.Ethernet.BackupPort (Integer) Nmero da porta do IP alternativo do equipamento de destino (usado juntamente com BackupIP).
7.5.5 IO.Ethernet.ListenPort
IO.Ethernet.ListenPort (Integer) Nmero da porta de IP utilizada pelo driver para escutar conexes.
45
7.5.6 IO.Ethernet.MainIP
IO.Ethernet.MainIP (String) Endereo de IP do equipamento de destino. Pode-se utilizar tanto o endereo numrico ou o HOST name do equipamento. Exemplos: 192.168.0.7 ou SERVER2.
7.5.7 IO.Ethernet.MainPort
IO.Ethernet.MainPort (Integer) Nmero da porta do IP no equipamento de destino (utilizado juntamente com MainIP).
7.5.8 IO.Ethernet.PingEnable
IO.Ethernet.PingEnable (Boolean) TRUE habilita o ping do endereo de IP do equipamento de destino antes de tentar conectar-se ao socket. O timeout de conexo do socket no pode ser controlado, por isso o ping de endereo antes de conectar uma maneira rpida de detectar se a conexo vai falhar. FALSE desabilita o ping.
7.5.9 IO.Ethernet.PingTimeoutMs
IO.Ethernet.PingTimeoutMs (Integer) Tempo de espera por uma resposta de ping, em milissegundos.
7.5.10 IO.Ethernet.PingTries
IO.Ethernet.PingTries (Integer) Nmero mximo de tentativas de ping (o mnimo 1, incluindo o primeiro ping).
7.5.11 IO.Ethernet.Transport
IO.Ethernet.Transport (Integer) Define o protocolo de transporte: T ou TCP: utiliza TCP/IP.
46
7.6.1 IO.RAS.ATCommand
IO.RAS.ATCommand (String) Comando AT a ser enviado atravs do socket para forar o equipamento RAS a fazer uma ligao usando o canal RAS atual. Exemplo: ATDT6265545.
7.6.2 IO.RAS.CommandTimeoutSec
IO.RAS.CommandTimeoutSec (Integer) Tempo de espera pela mensagem CONNECT em resposta ao comando AT, em segundos.
47
CAPTULO
Histrico de Revises
VERSO DATA AUTOR COMENTRIOS Corrigido: IPSwitch no funciona quando disparado logo aps uma reconexo bemsucedida (Case 8012). Adicionada a opo ECHO Supression nas interfaces Ethernet e RAS (Case 8383). A opo Retry failed connection every ... seconds agora habilitada por padro (Case 9140). Corrigido: Mudana de label na pgina de configuraes do IOKit para "Give up after ... failed retries" (Case 9289) Adicionada opo Specify local port na interface Ethernet (Case 9311). 1.15 2009-0824 F. Englert Corrigido: IOKit pode travar se um driver parado enquanto estiver comunicando com outro thread (Case 9423). IOKit agora loga uma mensagem quando o nome do arquivo de logs modificado (por exemplo, "Log redirected to 'newlog.log'") (Case 10175). As seguintes features e correes esto disponveis apenas para os drivers compilados com o IOKitLib v1.15: Adicionado suporte para leituras por callback (Case 8222). [IOKitLib] Corrigido: Leitura das tags de configurao (por exemplo, ParamItem = "IO.Ethernet.MainIP") 48 Histric o de Revises
VERSO
DATA
AUTOR
COMENTRIOS causa escapamento de memria (Case 8949). [IOKitLib] IOKit agora registra no log a configurao do driver e o nmero da verso do driver/IOKit nas seguintes situaes: Quando a camada fsica est conectada. Quando o driver iniciado no modo offline. Quando o log ligado, ou quando o nome do arquivo de log modificado em tempo de execuo (Case 10175). [IOKitLib] Agora possvel modificar o nome do arquivo de log em tempo de execuo sem precisar deixar o driver offline (atravs de escritas nos tags IO.Log.Enable e IO.Log.Filename) (Case 10175). [IOKitLib] Corrigido: O IOKit pode travar quando estiver finalizando um driver serial (Case 5313). Melhorado tempo de resposta para drivers seriais escravos (Case 7280). IOKit agora enumera os modems disponveis (com seus respectivos IDs) quando o driver ativado com um modem ID invlido (Case 7474).
1.14
2007-0115
F. Englert
Corrigido: as primeiras operaes de comunicao (leituras/escritas) podem falhar enquanto o IOKit ainda est se conectando ao equipamento alvo (Case 7614). Corrigido: o IOKit pode cair quando um valor float ou double muito grande for escrito/lido (tal como 4585887366944162000000000000.0) (Case 7806).
1.13
2006-0810
F. Englert
Corrigido: Timestamps de valores lidos/escritos podem estar incorretos em 1 milissegundo (Case 7261). 49
Histric o de Revises
VERSO
DATA
AUTOR
COMENTRIOS Corrigido: Escapamento de memria quando um driver retorna um HVALUE dimensionado como um array de HVALUEs (Case 7092).
1.12
2006-0703
F. Englert Corrigido: Driver com thread de comunicao separado pode travar ou cair quando o IOKit posto em modo OFFLINE (Case 7099). Agora impossvel verificar a verso do IOKitLib com a qual o driver foi compilado. Uma funo cujo nome seja IOKitLib_v1.11 exportada da DLL do driver, permitindo a verso do IOKitLib ser facilmente identificada. (Case 6968). Corrigido: timeout no cumprido quando os dados so enviados atravs da interface Ethernet. Este bug pode travar o driver se o F. Englert equipamento par no estiver lendo dados de um soquete conectado (Case 6935). Corrigido: a opo Disconnect if inactive no funciona se o driver estiver no modo Listen (Case 6933). Corrigido: no h retentativas de reconexo se a interface serial no puder ser aberta (Case 6865). O IOKit agora gera um arquivo de log por dia se o nome do arquivo contiver o macro %DATE% (Case 2047). Corrigido: o log do IOKit mistura bytes enviados ou recebidos de threads diferentes (Case 6530). A interface do modem no lista ou abre um modem se o sistema tiver outros modems invlidos (Case 3613).
1.11
2006-0511
1.10
2005-1220
F. Englert
1.09
2005-1207
F. Englert
Uma caixa de mensagem agora mostrada quando o usurio habilita a opo Start driver OFFLINE, perguntando se ele confirma esta opo (Case 4584). Os parmetros de configurao do IOKIT agora
50
Histric o de Revises
VERSO
DATA
AUTOR
COMENTRIOS esto listados no arquivo de logs quando o driver iniciado (Case 4584). Corrigido: os atrasos nas configuraes do RTS no funcionam no Windows NT (Case 5525). Adicionada a opo Inter-frame delay (miliseconds) na interface serial (tambm disponvel para a interface de modem) (Case 5525). A mensagem logada quando o parceiro remoto fecha o soquete (recv3() returned error (unknown) (0)) mudou para "Socket gracefully closed by the remote partner" (Case 5599). A interface Ethernet agora usa o WinSock v2.2 se disponvel (verses anteriores usavam o WinSock v1.1). Alguns PLCs requerem essa verso (Case 5617). Adicionada a opo Enable ECHO supression para a interface serial (tambm disponvel para a interface do Modem) (Case 5647). Adicionado o boto Modem settings interface do modem, permitindo ao usurio configurar o modem (Case 5656). Adicionado suporte ao browsing dos tags internos do IOKit (utilizado pela caixa de dilogo do E3 TagBrowser) (Case 6016). Adicionadas trs opes ao combo de baudrate da interface serial: 38700, 57600 e 115200 bauds (Case 6076). O IOKit agora pode receber e identificar a fonte de transmisses UDP. Este recurso agora est disponvel para drivers que precisam receber transmisses UDP. (Case 6085). O IOKit no tenta se reconectar imediatamente se a conexo recentemente feita tiver sido perdida (Case 6294).
Histric o de Revises
51
VERSO
DATA
AUTOR
COMENTRIOS Adicionada a opo None lista de interfaces disponveis, permitindo ao usurio desabilitar a camada fsica (esta configurao til para drivers que implementam camadas fsicas customizadas) (Case 6316). Adicionado o estado Ringing e o tag Is Modem Connecting interface do modem (Case 4368). Implementadas as opes Backup IP, Ping e UDP na interface Ethernet (Cases 3014, 3015, e 3017). Adicionada proteo contra buffer excedido na gerao de logs (Case 4365). Adicionada a opo Interbyte delay nas interfaces serial e de modem (Case 4343). IOKit portado para Linux e Windows CE (Case 4280).
1.08
F. Englert Implementados os servios de ativao/ desativao de logs utilizado pelo dilogo Driver Manager no E3Run (Case 4513). Logs extras foram adicionados para ajudar no debugging e diagnsticos de driver: comunicao desconectada indicada em sputs e sgets (Case 4851). A verso do IOKit version agora mostrada na barra de ttulo da folha de propriedades do driver (Driver nonono (IOKit v1.08)) (Case 4778). O estado anterior da porta serial agora restaurado quando a porta estiver fechada. Isto evita problemas em outros programas que contam com a porta serial como configurada no Windows Control Panel (Case 4484).
1.07 1.07 52
2004-0504 2004-01-
A. Corra Reviso de texto. F. Englert A interface serial s vezes demora 1 segundo Histric o de Revises
VERSO
DATA 26
AUTOR
COMENTRIOS antes de lidar com bytes de entrada (isto afeta apenas drivers escravos) (Case 3279). O IOKit agora verifica a verso do driver para assegurar que o driver foi compilado com uma verso compatvel do IOKit (Case 3018). Implementada a opo Listen for connections on port na interface Ethernet. Drivers escravos via Ethernet agora so suportados (Case 3018). A interface RAS agora desconecta corretamente o soquete se receber uma sequncia de string NO CARRIER aps a conexo ter sido estabelecida (Case 2643). A aba Ethernet no permite que os parmetros de porta de IP sejam editados quando a interface RAS estiver selecionada (Case 2675).
1.06
2003-1218
F. Englert
1.05
2003-1127
F. Englert
1.04
2003-1027
F. Englert
1.03
2003-1009
Permite que %PROCESS% seja inserido no nome do arquivo de logs, para permitir que o ID do processo seja inserido no nome do arquivo. F. Englert Exemplo: c:\driver_%PROCESS%.log criar o arquivo de logs c:\driver_0000.log, onde 0000 o ID de processo (Case 2676). As propriedades IO.Log.Enable e IO.Log. Filename no funcionam, e devem ser imediatamente aplicadas quando modificadas atravs do tag Set Parameters (Case 2678). A interface RAS agora conecta com uma nica porta de IP (a porta especificada na aba Ethernet). O hardware RAS verificar se h um F. Englert modem disponvel e atribuir o modem ao soquete, ou ento negar conexo do soquete (Case 2656). A interface RAS agora desconecta o soquete se receber uma sequncia de string NO CARRIER F. Englert aps a conexo ter sido estabelecida (Case 2643) (Este recurso no funciona corretamente, utilize a verso 1.04).
1.02
2009-1007
1.01
2003-1006
Histric o de Revises
53
VERSO
DATA 2003-0811
AUTOR
COMENTRIOS Primeira verso. As seguintes opes de Ethernet ainda no foram implementadas: Ping , Backup address, UDP, Use new socket e Accept connection.
1.00
F. Englert
54
Histric o de Revises
Matriz Rua 24 de Outubro, 353 - 10 andar 90510-002 Porto Alegre RS Fone: (51) 3346-4699 Fax: (51) 3222-6226 E-mail: elipse@elipse.com.br
Filial MG Av. do Contorno, 6594- 17 andar Sala 01 30110-044 Belo Horizonte - MG Fone: (31) 3555-3366 Fax: (31) 3555-3399 E-mail: elipse-mg@elipse.com.br
Filial SP Rua dos Pinheiros, 870 - Conj. 141/142 05422-001 So Paulo - SP Fone: (11) 3061-2828 Fax: (11) 3061-2828 E-mail: elipse-sp@elipse.com.br
Filial PR Av. Sete de Setembro, 4698/1705 80240-000 Curitiba - PR Fone: (41) 342-0120 Fax: (41) 342-0103 E-mail: elipse-pr@elipse.com.br
USA 40190 Jarvis Gray Lane Avon - NC - USA 27915 Fone: (252) 995-6885 Fax: (252) 995-5686 E-mail: info@elipse-software.com
Taiwan 15F.-1, No.56,Minsheng 1 st Rd. 800 Kaohsiung City Taiwan Fone: +886-7-2221582 Fax: +886-7-2225909 E-mail: evan@elipse.com.br
Alemanha D-67714 Waldfischbach Deutschland Fone: +49 (0) 6333 4439 Fax: +49 (0) 6333 2790045 E-mail: elipse@elipse.de