CESNA TECHNOLOGY MANUAL PARA DESENVOLVEDORES IDCODE



Documentos relacionados
CESNA TECHNOLOGY MANUAL PARA DESENVOLVEDORES. Documentação de auxílio à integração com Concentrador Fcm Utilizando CesnaActiveX.dll V 1.1.

LINEAR EQUIPAMENTOS RUA SÃO JORGE, TELEFONE: SÃO CAETANO DO SUL - SP - CEP

Manual de Instalação. SafeSign Standard (Para MAC OS 10.7)

MANUAL DE CONFIGURAÇÃO DO BACKUP

MANUAL DE ORIENTAÇÃO CESSAÇÃO DE USO DE EQUIPAMENTO EMISSOR DE CUPOM FISCAL-ECF

Sumário 1. SOBRE O NFGoiana DESKTOP Apresentação Informações do sistema Acessando o NFGoiana Desktop

Versão Liberada. Gerpos Sistemas Ltda. Av. Jones dos Santos Neves, nº 160/174

Manual de Instalação Software do etoken Aladdin pro 72k

ArpPrintServer. Sistema de Gerenciamento de Impressão By Netsource Rev: 02

Manual Integra S_Line

Emissão de Cupons Fiscais usando ECF-IF

software CRON Central de Relacionamento On-Line que consiste em um software completo de gerenciamento de

Manual do MySuite. O MySuite é a solução adotada pela MKData para gerenciar o atendimento aos clientes.

1 ACESSO AO PORTAL UNIVERSITÁRIO 3 3 PLANO DE ENSINO 6 4 AULAS 7 5 AVALIAÇÃO E EXERCÍCIO 9 6 ENQUETES 12 7 QUADRO DE AVISOS 14

Manual Captura S_Line

CERTIFICADO DIGITAL CONECTIVIDADE DIGITAL ICP GUIA PLANCON DE INSTRUÇÕES PARA INSTALAR SEU TOKEN, PENDRIVE OU LEITOR DE CARTÕES

Procedimentos para Reinstalação do Sisloc

SISTEMA DE PRODUTOS E SERVIÇOS CERTIFICADOS. MÓDULO DO CERTIFICADOR MANUAL DE OPERAÇÃO Versão 2.4.6

ROTEIRO DE INSTALAÇÃO

Manual QuotServ Todos os direitos reservados 2006/2007

Gestão Comercial GUIA RÁPIDO DE INSTALAÇÃO DO ORYON.

Visão Geral sobre o tutorial de Utilização de

Gerenciador SafeSign Guia de Instalação

Operações de Caixa. Versão 2.0. Manual destinado à implantadores, técnicos do suporte e usuários finais

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO?

MANUAL DE UTILIZAÇÃO

Eberhardt Comércio e Assist. Técnica. Ltda.

Satélite. Manual de instalação e configuração. CENPECT Informática cenpect@cenpect.com.br

Guia Site Empresarial

Mensagens De Erro. Versão: 1.0

Módulo de Gestores. Utilizaremos telas do Módulo de Gestores (Homologação):

Driver da Leitora GemPC Twin Guia de Instalação

Manual Sistema de Autorização Online GW

Aplicativo da Manifestação do Destinatário. Manual

Guia Sphinx: instalação, reposição e renovação

MANUAL BACKUP XDENTAL 2012

VVS Sistemas (21)

TUTORIAL INSTALAÇÃO DA ROTINA 2075 NO LINUX

Índice. Manual Backup Online. 03 Capítulo 1: Visão Geral


1- Requisitos mínimos. 2- Instalando o Acesso Full. 3- Iniciando o Acesso Full pela primeira vez

TRANSMISSOR ECF. Sistema de transmissão de arquivos Nota Fiscal Paulista. Manual de Utilização

ECD1200 Equipamento de Consulta de Dados KIT DE DESENVOLVIMENTO

Utilização do Webmail da UFS

Manual de Instalação e Operação RECIP

VIAÇÃO SÃO BENTO LTDA.

Manual de Instalação e Utilização

ROTEIRO DE INSTALAÇÃO TEF DISCADO Módulo American Express

Manual de Utilização

Fundação Universidade Federal do Rio Grande Colégio Técnico Industrial Prof. Mário Alquati Divisão de Ensino de Eletrotécnica Módulo III Automação

Sistema de Controle de Solicitação de Desenvolvimento

Placa Acessório Modem Impacta

Gerenciador etoken Aladdin. Guia de Instalação

INDICE 1. INTRODUÇÃO CONFIGURAÇÃO MÍNIMA INSTALAÇÃO INTERLIGAÇÃO DO SISTEMA ALGUNS RECURSOS SERVIDOR BAM...

Manual de Atualização Versão

Manual do usuário. Softcall Java. versão 1.0.5

MANUAL DO USUÁRIO SORE Sistema Online de Reservas de Equipamento. Toledo PR. Versão Atualização 26/01/2009 Depto de TI - FASUL Página 1

Manual de Utilização Sisamil - Sistema Integrado de Saúde Amil Manual de Utilização 1 54

Manual do usuário. Mobile Auto Download

Atenção! Não está autorizada a reprodução deste material. Direitos reservados a Multilaser.

Profibus View - Software de Parametrização de Equipamentos Profibus PA

Instalação: permite baixar o pacote de instalação do agente de coleta do sistema.

Manual do Visualizador NF e KEY BEST

OneDrive: saiba como usar a nuvem da Microsoft

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

Manual de Instalação. Windows XP. Desenvolvedores: Patrick Duarte, Rodrigo dos Santos. Setembro de 2014.

Sistema de Cancelamento Eletrônico Manual do Usuário

PROCEDIMENTO PARA INSTALAR REDE ETHERNET EM CNC s FAGOR.

PÉGASUS (ETHERNET POCKET) STUDIO V1.00 MANUAL DE INSTALAÇÃO E OPERAÇÃO

Manual Xerox capture EMBRATEL

MANUAL DO ALUNO PARA NAVEGAR NO AMBIENTE VIRTUAL DE APRENDIZAGEM - AVA

MANUAL DE INSTALAÇÃO 1) ORACLE VIRTUALBOX ; 2) MICROSOFT WINDOWS ; 3) SUMÁRIOS GENEPLUS.

QUALIDATA Soluções em Informática. Módulo CIEE com convênio empresas

Escritório Virtual Administrativo

Guia do Usuário. idocs Content Server v

PAINEL GERENCIADOR DE S

Principais Novidades Abril/2013 a Junho/2013

Cadastramento de usuário. Acesse o site Clique no link Criar uma conta.

UNIVERSIDADE FEDERAL DE GOIÁS CERCOMP (CENTRO DE RECURSOS COMPUTACIONAIS) TUTORIAL DE USO DO WEBMAIL - UFG

Como funciona? SUMÁRIO

Manual Instalação Pedido Eletrônico

O que é um token? Identificando seu token

Cadastro Avaliação 2013 Manual de Instruções

Agendamento para Importação de Notas Fiscais

Manual SAGe Versão 1.2 (a partir da versão )

TREINAMENTO. Novo processo de emissão de certificados via applet.

MANUAL DO ANIMAIL Terti Software

Como conectar-se à rede Sem Fio (Wireless) da UNISC. Pré-Requisitos:

GUIA DE INSTALAÇÃO PARA DRIVER DE COMUNICAÇÃO USB Versão 2.0 IF ST120 IF ST200 IF ST 2000 IF ST 2500

MÓDULO 5 Movimentações

Pag: 1/20. SGI Manual. Controle de Padrões

Atualização Mandatória de Versão do Amadeus Pro Web (2.0P431BR) 25 de junho de 2007 Gerência de Produtos & Operações Amadeus Brasil

Ao ligar o equipamento, você verá a mensagem abaixo, o objetivo dela é fazer a configuração mínima para LOGAR ao servidor da Internet.

Apresentação. Nossa sugestão é que você experimente e não tenha medo de clicar!!!

GUIA INTEGRA SERVICES E STATUS MONITOR

Manual de Instalação Software do token SafeNet ikey 4000

Comm5 Tecnologia Manual de utilização da família MI. Manual de Utilização. Família MI

Transcrição:

CESNA TECHNOLOGY MANUAL PARA DESENVOLVEDORES IDCODE Documentação de auxílio à integração com Concentrador IDcode Utilizando CesnaActiveX.dll V 1.1.0 - ActiveX Versão 1.1.0 Rua Irati, 131 - Santa Quitéria Curitiba/PR - CEP: 80310-150 TELEFONE/FAX: (41) 3013 6670 (41) 3013 6681 www.cesna.com.br

ATENÇÃO... A CESNA TECHNOLOGY dispõe de um conjunto de exemplos para integração direta com a DLL de manipulação do Concentrador IDcode, na linguagens C++. Fornecemos esse material no intuito de auxiliar aos desenvolvedores de sistemas de integração com o Concentrador através do objeto ActiveX, utilizando-se da DLL CesnaActiveX.dll. Mudanças poderão ser efetuadas para o aprimoramento deste manual, a fim de se conseguir uma melhor explanação dos conteúdos e funcionalidades aqui apresentados, bem como correções ortográficas ou algo do gênero. Quaisquer mudanças que sejam executadas neste material serão disponibilizadas no site www.cesna.com.br na seção de downloads onde também estará à disposição dos integradores exemplos de integração com a CesnaActiveX.dll. Sempre que for desenvolver junto a esta DLL, procure a última versão deste documento no endereço acima citado. Estamos abertos a sugestões, através do e-mail engenharia@cesna.com.br, para que possamos alcançar excelência no atendimento de nossos clientes e parceiros.

SUMÁRIO LISTA DE FIGURAS... 3 LISTA DE TABELAS... 3 LISTA DE SIGLAS... 4 1 OBJETIVO GERAL DESTE MANUAL... 6 2 DESCRIÇÃO DO COMPONENTE CESNAACTIVEX.DLL... 7 2.1 Importando o Componente ActiveX... 8 2.2 Descrição das Funções Disponíveis... 10 2.2.1 IDcodeOpen... 13 2.2.2 IDcodeApagaTabFrentista... 14 2.2.3 IDcodeArmazenaCrcTab... 14 2.2.4 IDcodeAutorizaAbastecimento... 14 2.2.5 IDcodeConfiguraMab... 15 2.2.6 IDcodeTravaBomba... 16 2.2.7 IDcodeDestravaBomba... 16 2.2.8 IDcodeObtemAbastecimento... 17 2.2.9 IDcodeObtemAbastFlash... 17 2.2.10 IDcodeObtemConfiguracaoMab... 18 2.2.11 IDcodeObtemNumAbastOff... 18 2.2.12 IDcodeObtemPrecoPorLitro... 19 2.2.13 IDcodeObtemStatusBomba... 20 2.2.14 IDcodeObtemTotalizador... 20 2.2.15 IDcodeObtemUltimoVolume... 21 2.2.16 IDcodeProcuraTag... 21 2.2.17 IDcodeSalvaTag... 22 2.2.18 IDcodeSetaPrePago... 22 2.2.19 IDcodeTestaTag... 23 2.2.20 IDcodeTrocaPrecoPorLitro... 23 2.2.21 IDcodeVersaoDLL... 23 2.2.22 IDcodeClose... 24 2.3 Retorno dos Métodos do Objeto ActiveX... 25

2.3.1 OnIDcodeAbasteceu... 25 2.3.2 OnIDcodeRetornoAbastFlash... 29 2.3.3 OnIDcodeMudancaDeEstado... 29 2.3.3.1 BOMBA_PRONTA... 29 2.3.3.2 BOMBA_NAO_RESPONDE... 29 2.3.3.3 BOMBA_PEDE_AUTORIZACAO... 30 2.3.3.4 BOMBA_AGUARDANDO_CARTAO... 30 2.3.3.5 BOMBA_LIBERADA_PARA_ABASTECER... 30 2.3.3.6 BOMBA_ABASTECENDO... 30 2.3.3.7 BOMBA_ABASTECEU... 31 2.3.3.8 BOMBA_BLOQUEADA... 31 2.3.3.9 BOMBA_DESBLOQUEADA... 31 2.3.3.10 BOMBA_TROCOU_PRECO_POR_LITRO... 31 2.3.3.11 BOMBA_RESERVADA_PRE_PAGO... 31 2.3.3.12 BOMBA_INFORMOU_FALHA... 31 2.3.3.13 RETORNO_ABAST_FLASH... 32 2.3.4 OnIDcodeTotalizador... 32 2.3.5 OnIDcodeVolume... 34 2.3.6 OnIDcodePrecoPorLitro... 35 2.3.7 OnIDcodeConfigMab... 37 2.3.8 OnIDcodeErroCrc... 37 2.3.9 OnIDcodeInfoEvento... 37 2.3.10 OnIDcodeNumAbastOff... 37 2.3.11 OnIDcodeValorBombaAbast... 38 3 DESCRIÇÃO IDCODE.DLL... 39 4 CONCENTRADOR IDCODE... 40 4.1 Descrição de Funcionamento... 41 4.1.1 Modo On-Line... 42 4.1.2 Modo Off-Line... 42 4.1.3 Modo de Operação do Concentrador IDcode... 43 5 OBSERVAÇÕES DAS BOMBAS DE COMBUSTÍVEL... 44 5.1 Bomba Lógica... 44

5.2 Particularidades das Bombas... 46 5.2.1 Wayne... 46 5.2.1.1 Wayne Minnow... 47 5.2.1.2 Wayne Rifran... 47 5.2.1.3 Wayne Duplex... 47 5.2.1.4 Wayne 3G... 47 5.2.2 Bomba Gilbarco... 47 5.2.3 Bomba Stratema... 49 5.2.4 Bomba Aspro GNV... 49 6 DICAS PARA SOFTWARE INTEGRADOR... 50 6.1 Importação do Driver Master IDcode USB para Windows 8... 50 6.2 Iniciando a Comunicação com o Concentrador IDcode... 50 6.3 Solicitação de Encerrantes... 51 6.4 Digito do Milhão... 51 6.5 Autorização Automática... 52 6.6 Bicos de Abastecimento... 52 6.7 Atualização do Componente CesnaActiveX.dll... 54 APÊNDICE A... 56 APÊNDICE B... 57 APÊNDICE C... 58

LISTA DE FIGURAS Figura 1 - Fluxograma de Solicitação de Totalizadores.... 32 Figura 2 - Fluxograma Alteração e Conferência de Preço por Litro... 35 Figura 3 - Fluxograma Descrição de Funcionamento... 41 Figura 4 - Descrição Bomba Lógica... 44 Figura 5 - Bomba Física.... 44 Figura 6 - Bomba Lógica... 45 Figura 7 - Registro em Windows 32 bits.... 54 Figura 8 - Registro em Windows 64 bits.... 54 LISTA DE TABELAS Tabela 1 - Retornos Possíveis da Dll IDcode... 10 Tabela 2 - Bicos de Abastecimento... 53 Tabela 3 - Código dos Tipos de Bomba... 57 Tabela 4 - Funções de Retorno e Parâmetros... 58

LISTA DE SIGLAS - Bi ou Bico: Número que corresponde ao Bico da Bomba de Combustível. - Bo ou Bomba: Número que corresponde a Bomba de Combustível. - Bomba Lógica: O número do endereço configurado na Bomba de Combustível Física. - Cd: Número de casas decimais. -CRC: Cyclic Redundancy Check, verificação de redundância cíclica. - CesnaActiveX.dll: Biblioteca em ActiveX para interface com IDcode.dll. - Concentrador IDcode: Conjunto Master IDcode, MAB IDcode, Fonte IDcode de Alimentação, Antenas IDcode e Cartões para Frentistas e Clientes, sendo esse opcional. - Driver FTDI: Driver para Master IDcode USB. - Firmware: Pequeno software dedicado e instalado no microcontrolador da MAB. - Gerenciador IDcode: Software de gerenciamento e teste do Concentrador IDcode. - IDcode.dll: Biblioteca que gerencia a comunicação com o Concentrador IDcode. - Instalador Gerenciador IDcode: Software que instala e registra o software Gerenciador IDcode. - MAB: Módulo de Automação de Bombas. Hardware que controla e gerencia as bombas de combustível. - Master IDcode USB: Hardware de interface entre MAB e PC. - PC: Microcomputador onde está conectada a Master IDcode USB. - Ppl ou Preco: Preço por Litro de determinada Bomba e Bico. - SB: Simulador de Bombas. - Simulador de Bombas IDcode: Software desenvolvido pela engenharia da Cesna Technology, para auxiliar os integradores do Concentrador IDcode no desenvolvimento do Software Integrador. - Software Integrador: Programa desenvolvido pela empresa que está efetuando a integração com o Concentrador IDcode. - Vol ou Volume: Volume de determinada Bomba e do último bico abastecido. - Tot, Totalizador ou Encerrante: Totalizador de determinada Bomba e Bico.

1 OBJETIVO GERAL DESTE MANUAL Este manual foi desenvolvido no intuito de proporcionar aos seus utilizadores um meio de consulta para informações e dicas de integração com o Concentrador IDcode, utilizando como interface o componente CesnaActiveX.dll. Serão descritas as funções disponíveis no componente ActiveX para envio e recepção de mensagens ao Concentrador de Bombas IDcode, caso a integração que será realizada seja com o Concentrador Fcm favor consultar o Manual Desenvolvedores Fcm. Também serão apresentadas dicas e soluções que vivenciamos ao decorrer dos anos trabalhando neste ramo. Esperamos que este manual seja de grande ajuda a todos os integradores que o utilizarem. Também informamos que a Cesna Technology está disponível para responder qualquer dúvida referente à integração com o Concentrador IDcode. Todos os exemplos mostrados neste guia serão em linguagem de programação C++, porém a Cesna Technology disponibiliza exemplos nas linguagens descritas no item 2.1. Pedimos aos integradores que, antes de efetuar a integração com o Objeto ActiveX, leiam atentamente este manual e suas recomendações sejam seguidas conforme solicitado. Após a leitura e entendimento das funções este pode ser utilizado para consulta e auxílio no trabalho de integração. A Cesna Technology disponibiliza, como canal de comunicação e auxílio via e-mail ou msn para esclarecimentos de dúvidas, o endereço suporte@cesna.com.br. Qualquer dúvida com relação a hardware ou integração, este canal que deverá ser utilizado. Também solicitamos a gentiliza de todos os utilizadores, se erros ou discrepância de informações forem identificados neste manual, enviarem um e-mail ao suporte para correção. Com esta ajuda podemos melhorar as informações gradativamente. Agradecemos a todos e desejamos um ótimo desenvolvimento!

2 DESCRIÇÃO DO COMPONENTE CESNAACTIVEX.DLL O arquivo CesnaActiveX.dll, foi desenvolvido com o objetivo de facilitar o envio e recepção de dados, sem a necessidade de consultar ao Concentrador IDcode, caso exista alguma mensagem para ser enviada ao computador. Sempre que a bomba efetuar um abastecimento autorizado pelo Software de Integrador ou não, dependendo do modo de operação que o Concentrador IDcode for configurado (será descrito mais adiante), será adicionado à pilha de processos do S.O. Windows uma mensagem contendo os dados do abastecimento. Com isso a respectiva função do objeto ActiveX receberá o processo com os dados enviados pela IDcode.dll, sendo assim o Software Integrador poderá armazenar os dados deste abastecimento em um banco de dados, por exemplo, e sinalizar ao seu software de controle que um abastecimento foi recebido e se encontra em seu banco de dados. Assim quando o programador achar necessário poderá buscar o abastecimento e mostrar na tela para o utilizador do sistema. Qualquer status ou resposta a um comando o Software Integrador receberá a mensagem da mesma forma. A CesnaActiveX.dll, também foi desenvolvida para evitar que o Software Integrador seja recompilado todas as vezes que a Cesna Technology efetuar uma melhoria ou correção na comunicação com o Concentrador IDcode. Dessa forma é possível alterar a IDcode.dll quando necessário sem impactar na integração já efetuada pelo Software Integrador. Por tanto, é possível instalar nos clientes as últimas versões da IDcode.dll e Firmware da placa MAB. Também gostaríamos de salientar que não é possível comunicação diretamente com a IDcode.dll, justamente pelos motivos apresentados acima. Como ferramenta de desenvolvimento, disponibilizamos o software Simulador de Bombas, onde, para seu funcionamento, basta apenas substituir o arquivo IDcode.dll. Este software foi desenvolvido para auxiliar o processo de integração com o Concentrador IDcode, sendo possível simular os comandos e abastecimentos simulando o hardware Concentrador IDcode real. Podendo ser executado no mesmo PC onde o Software Integrador está sendo implementado. O manual para utilização do Simulador de Bombas ( Manual_Simulador_de_Bombas_IDcode ) está disponível na página de download no site da Cesna Technology.

2.1 Importando o Componente ActiveX Primeiramente deve-se instalar o software Gerenciador IDcode, pois junto com a sua instalação ele registrará e copiará as DLL S necessárias para o funcionamento do Concentrador IDcode quando conectado ao PC. Não é necessário preocupar-se com o registro das DLL S, pois o instalador do Gerenciador IDcode fará este processo. Este software deverá estar instalado no PC do cliente, sendo que o técnico instalador do hardware utilizará o mesmo para configurar e testar o equipamento e as bombas de combustível conectadas a placa MAB. Recomendamos ao Software Integrador que, se possível, exista um campo utilizado para escolher o tipo de automação instalado no posto de combustível. E somente depois de certificado que a automação é da Cesna Technology, inicializar funções referente ao objeto ActiveX. Se este cuidado não for tomado, poderão ocorrer anomalias na execução do Software Integrador. Após o software Gerenciador IDcode instalado, podemos importar o componente CesnaActiveX.dll. Disponibilizamos formas de importação do componente ActiveX em Borland C++ Builder, Embarcadero C++ Builder XE, Borland Delphi 7, Embarcadero Delphi XE e Visual Studio V 6.0. O passo-a-passo da importação será descrito no Apêndice A. Após a importação é necessário analisar duas situações. Ou o programador do Software Integrador está com um hardware do Concentrador IDcode, ou utilizará o programa Simulador de Bombas IDcode para auxiliar na integração. Se o modo a ser utilizado é o hardware Concentrador IDcode, a placa Master IDcode USB deverá ser conectada em uma porta USB disponível do PC utilizado para desenvolvimento ou testes, em seguida o driver do dispositivo Master IDcode USB deverá ser instalado. Um tutorial de instalação do driver está contido na pasta do driver obtido através do download no site da Cesna Technology (www.cesna.com.br), área de downloads. Se o modo a ser utilizado é o Software Simulador de Bombas IDcode, deverá ser seguido o processo adiante. Por padrão o instalador do Gerenciador IDcode instala o arquivo IDcode.dll V 8.X.X para comunicação USB (para visualizar a versão do arquivo entrar nas propriedades com o botão direito do mouse), esta deverá ser substituída pela V 3.1.X que é a versão para o Simulador de Bombas IDcode. Com o Software Integrador desativado, deverá ser copiada da pasta DLL S/V3 do arquivo IntegracaoCesna.zip a IDcode.dll V 3.1.X e

substituída na pasta do sistema, que pode variar de acordo com o S.O. Windows instalado. Por exemplo, em Windows 32 bits em C:\Windows\System32, para Windows 64 bits em C:\Windows\SysWOW64. Esta DLL V 3.1.X fará a interface entre o Software Integrador e Software Simulador de Bombas IDcode. Se tudo ocorreu bem, já será possível utilizar a CesnaActiveX.dll para integração.

2.2 Descrição das Funções Disponíveis Todas as solicitações ou eventos enviados ao Concentrador IDcode via CesnaActiveX.dll serão retornados ao Software Integrador via evento do objeto ActiveX. Porém caso a solicitação contenha um erro de sintaxe, ou tipo de dado, um número correspondente será retornado imediatamente no momento da solicitação da função. Possíveis Retornos: RETORNOS POSSÍVEIS DA DLL IDCODE 1 Função Executada Com Sucesso -1 Endereço da MAB fora do range -2 Endereço da Bomba ou quantidade de Bombas fora do range -3 Endereço do Bico fora do range -4 Número de casas decimais maior que o máximo permitido -5 Parâmetros adicionais fora do range -6 Código de verificação da Tag invalido -7 Função não suportada -8 Handle da Thread principal invalido -9 Handle da Window invalido -10 Handle EventoSaida invalido -11 Handle EventoEspera invalido -12 Handle do EventoCmd invalido -13 Handle do FTDI invalido -14 Erro no ResumeThread -15 Erro na função FT_OpenEx -16 Erro na função FT_SetBaudRate -17 Erro na função FT_SetDataCharacteristics -18 Erro na função FT_SetFlowControl -19 Erro na função FT_SetTimeouts -20 Erro na função FT_SetUSBParameters -21 Erro na função FT_SetLatencyTimer -22 Erro na função FT_Purge Tabela 1 - Retornos Possíveis da Dll IDcode Technology Obs. 1: Para os retornos de -8 à -22 solicite informações ao suporte da Cesna

Obs. 2: Os retornos das solicitações de funções são os mesmos tanto para o Simulador de Bombas IDcode, quanto para o hardware. Logo todo o desenvolvimento pode ser efetuado via simulador. No Apêndice quadro abaixo, são mostrados os protótipos de funções disponíveis para envio ao Concentrador IDcode, ou seja, os tipos de variáveis que serão passadas como parâmetro na chamada da função. Caso a integração a ser realizada seja para o Concentrador Fcm, favor consultar o Manual Desenvolvedores Fcm.

PROTÓTIPOS DE FUNÇÃO IDCODE Obs.: Todas as funções possuem retorno tipo long. Cesna->IDcodeOpen(unsigned char NumeroMabs); Cesna->IDcodeApagaTabFrentista(unsigned char Mab); Cesna->IDcodeAutorizaAbastecimento(unsigned char Mab, unsigned char Bomba, unsigned char Bico); Cesna->IDcodeConfiguraMab(unsigned char Mab, unsigned char NumeroBombas, unsigned char TipoBomba, unsigned char ModoOperacao); Cesna->IDcodeDestravaBomba(unsigned char Mab, unsigned char Bomba, unsigned char Bico); Cesna->IDcodeLimpaAbastFlash(unsigned char Mab); Cesna->IDcodeObtemAbastecimento(unsigned char FlagObtemAbastecimento); Cesna->IDcodeObtemAbastFlash(unsigned char Mab, long NumeroAbastecimento); Cesna->IDcodeObtemConfiguracaoMab(unsigned char Mab); Cesna->IDcodeObtemNumAbastOff(unsigned char Mab); Cesna->IDcodeObtemPrecoPorLitro(unsigned char Mab, unsigned char Bomba, unsigned char Bico); Cesna->IDcodeObtemStatusBomba(unsigned char Mab, unsigned char Bomba); Cesna->IDcodeObtemTotalizador(unsigned char Mab, unsigned char Bomba, unsigned char Bico); Cesna->IDcodeObtemUltimoVolume(unsigned char Mab, unsigned char Bomba, unsigned char Bico); Cesna->IDcodeSetaPrePago(unsigned char Mab, unsigned char Bomba, unsigned char Bico, long Volume, unsigned char VolumeCasadDecimal); Cesna->IDcodeTravaBomba(unsigned char Mab, unsigned char Bomba, unsigned char Bico); Cesna->IDcodeTrocaPrecoPorLitro(unsigned char Mab, unsigned char Bomba, unsigned char Bico, long PrecoPorLitro, unsigned char PrecoPorLitroCasaDecimal); Cesna->IDcodeVersaoDll(); Cesna->IDcodeClose(); Estas funções não precisam ser declaradas em código, pois já estão contidas na importação do objeto. Após o Objeto ActiveX instalado, as mesmas podem ser acessadas via chamada de ponteiro Cesna-> em C++ ou Cesna. em Delphi. Como citado acima, estas possuem todos os seus retornos em tipo long. Será demonstrado adiante a utilização e os objetivos de cada uma das funções relacionadas acima.

ATENÇÃO: Tanto o Concentrador IDcode como o Concentrador Fcm utilizam o mesmo componente, CesnaActiveX.dll, para fazer a integração com o software de gerenciamento. Por tanto pode-se notar que ao importar o componente tanto as funções do Concentrador IDcode quanto as do Fcm estarão disponíveis. É de vital importância que as funções utilizadas para a integração com o Concentrador IDcode sejam as que possuam o prefixo IDcode<Nome da Função>. Por exemplo: IDcodeOpen(). Os eventos de resposta devem possuir o prefixo OnIDcode<Nome da Função>. Por exemplo: OnIDcodeAbasteceu. As funções que possuírem prefixo Fcm ou OnFcm são referentes à integração com o Concentrador Fcm. Para mais informações a respeito desta integração favor consultar o Manual Desenvolvedores Fcm. 2.2.1 IDcodeOpen Inicia uma conexão com o hardware Master IDcode USB ou com o Simulador de Bombas IDcode. Deverá ser passado como parâmetro o número de MABs com quais se deseja comunicar. O número do MABs deverá ser definido através da função IDcodeConfiguraMab que é descrita no item 2.2.5. Exemplo: unsigned char NumeroMabs = 0x01; // Var com o número de MABs long Retorno = 0; // Retorno da função para testar se OK ou não. //Solicitação da função Retorno = Cesna->IDcodeOpen(NumeroMabs); if(retorno!= 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Executa o próximo passo. Observação: A partir do momento em que é aberta a comunicação através do comando IDcodeOpen o componente ActiveX verifica todas as chamadas de funções feitas para o Concentrador IDcode. Caso seja feita uma chamada de função Fcm a CesnaActiveX.dll irá informar no log que foi feita uma chamada de função incorreta e o comando não será executado.

2.2.2 IDcodeApagaTabFrentista Apaga a tabela de tags que está gravada na MAB. Após a tabela de tags ser apagada nenhum abastecimento poderá ser autorizado até que se tenha gravado uma nova lista de tags na MAB. Por tanto é preciso ter cuidado ao utilizar esse comando para evitar que as tags sejam apagadas da MAB por engano. Exemplo: O parâmetro para essa função é o número da MAB da qual se deseja apagar a tabela. unsigned char Mab = 0x01; // Var com o número do Fcm Master USB long Retorno = 0; // Retorno da função para testar se OK ou não. Retorno = Cesna->IDcodeApagaTabFrentista(Mab); if(retorno!= 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } Atenção: Função não implementada no software Simulador de Bombas IDcode. 2.2.3 IDcodeArmazenaCrcTab Comando de uso interno da CesnaTechnology. Atenção: Função não implementada no software Simulador de Bombas IDcode. 2.2.4 IDcodeAutorizaAbastecimento Esta função será utilizada quando se deseja liberar uma determinada Bomba Lógica para abastecer, quando o Concentrador IDcode estiver configurado para operar no modo 1 B. Quando o estado da bomba for BOMBA_PEDE_AUTORIZACAO 2, o envio deste comando irá liberar a bomba para abastecer. Exemplo: 1 - Modo de Operação do Concentrador IDcode. 2 - BOMBA_PEDE_AUTORIZACAO.

//Esta função será melhor explicada no retorno dos métodos adiante. //Supondo que a MAB, Bomba e Bico que está pedindo autorização para abastecer, //seja do endereço MAB=1, Bomba=2, Bico=1. unsigned char Mab = 0x01; // Var com o número da MAB da Solicitação unsigned char Bomba = 0x02; // Var com o número da bomba desejada. unsigned char Bico = 0x01; // Var com o número do bico desejado. long Retorno = 0; // Retorno da função para testar se OK ou não. // Solicitação da função. Retorno = Cesna->IDcodAutorizaAbastecimento(Mab, Bomba, Bico); if(retorno!= 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Executa a próxima ação. Atenção: Função não implementada no software Simulador de Bombas IDcode. 2.2.5 IDcodeConfiguraMab Informa à placa MAB o número de bombas lógicas que ela deverá gerenciar, o modo de operação 3 que a mesma deverá operar e o tipo da bomba que será configurada. Se o número de bombas não for passado corretamente, poderão ocorrer as duas seguintes situações: A primeira é se o número de bombas configurado for menor que o número de bombas da pista. O Concentrador IDcode não irá verificar o status das bombas configuradas com endereço lógico superior ao informado, com isso estas não iniciarão o abastecimento quando acionadas. A segunda é se o número de bombas configurado for superior ao número de bombas existentes na pista. Os endereços que o Concentrador IDcode não receber resposta entrarão em uma rotina de tratamento de erros, sendo assim irá demorar mais tempo para verificar o status de todas as bombas configuradas. Atenção: A configuração das bombas deverá ser feita na instalação do Concentrador IDcode através do software Gerenciador IDcode da Cesna Technology para evitar incongruência na configuração e consequentemente erros na comunicação com as bombas. 3 - Modo de Operação do Concentrador IDcode.

Não será necessário que o sistema envie a informação das configurações ao iniciar a comunicação com o concentrador, pois uma vez a pista configurada através do Gerenciador Cesna os parâmetros se manterão os mesmos até que seja feita uma nova configuração. 2.2.6 IDcodeTravaBomba Esta função é utilizada quando se deseja travar ou parar a bomba de combustível, ela estando em operação ou não. Existe uma interpretação diferente dependendo da marca e modelo da bomba quando utilizar este comando 4. Exemplo: unsigned char Mab = 0x01; // Var com o número da MAB da Solicitação unsigned char Bomba = 0x01; // Var com o número da bomba desejada. unsigned char Bico = 0x01; // Var com o número do bico desejada. long Retorno = 0; // Retorno da função para testar se OK ou não. Retorno = Cesna->IDcodeTravaBomba(Mab, Bomba, Bico);// Solicitação da função. if(retorno!= 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Executa a próxima ação. 2.2.7 IDcodeDestravaBomba Esta função é utilizada quando se deseja destravar a bomba, geralmente após um comando IDcodeTravaBomba. Exemplo: unsigned char Mab = 0x01; // Var com o número da MAB da Solicitação unsigned char Bomba = 0x01; // Var com o número da bomba desejada. Unsigned char Bico = 0x01 // Var com o número do bico desejado long Retorno = 0; // Recebe o retorno da função para testar se OK ou não. Retorno = Cesna->IDcodeDestravaBomba(Mab, Bomba, Bico);// Solicitação da função. if(retorno!= 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Executa a próxima ação. 4 - DICAS PARA SOFTWARE INTEGRADOR.

2.2.8 IDcodeObtemAbastecimento Para evitar a perda de abastecimentos ao iniciar uma comunicação com o Concentrador IDcode foi criada uma flag para informar ao concentrador quando ele deve enviar os abastecimentos ou não. Quando esta flag for 1 (um) o concentrador enviará todos os abastecimentos que forem feitos assim como os abastecimentos off-line que estiverem guardados na flash da MAB, quando a flag for 0 (zero) o Concentrador IDcode não enviará os abastecimentos para o software de gerenciamento, somente os status das bombas que abastecerem. Exemplo: // Caso deseje obter os abastecimentos o parâmetro da função deve ser 1, caso contrario // o parâmetro deverá ser 0. unsigned char FlagObtemAbastecimento = 0x01; // seta a flag para receber abastecimentos long Retorno = 0; // Retorno da função para testar se OK // Solicitação da função. Retorno = Cesna->IDcodeObtemAbastecimento(FlagObtemAbastecimento); if(retorno!= 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Executa a próxima ação. Esta função foi desenvolvida para utilização do suporte da Cesna, que à utilizará para atender as solicitações dos clientes sem que este perca os dados dos abastecimentos que venham a ocorrer. Atenção: Função não implementada no software Simulador de Bombas IDcode. 2.2.9 IDcodeObtemAbastFlash Cada MAB tem a capacidade de guardar até 301 abastecimentos em sua memória flash. Esses abastecimentos podem ser consultados através da função IDcodeObtemAbastFlash que tem como parâmetros o número da MAB e o número do abastecimento. O número do abastecimento é informado como no retorno do abastecimento OnIDcodeAbasteceu, esse valor também pode ser encontrado nos logs gerados pela DLL IDcode.dll e componente CesnaActiveX. Exemplo de utilização do comando:

// Supondo que o abastecimento que se deseja obter é o de número 7 unsigned char Mab = 0x01; // Var com o número da MAB da solicitação long NumeroAbastecimento = 7; // Var com o número do abastecimento long Retorno = 0; // Retorno da função para testar se OK // Solicitação da função. Retorno = Cesna->IDcodeObtemAbastFlash(Mab, NumeroAbastecimento); if(retorno!= 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Executa a próxima ação. Atenção: Função não implementada no software Simulador de Bombas IDcode. 2.2.10 IDcodeObtemConfiguracaoMab Função utilizada para saber qual é a configuração atual da MAB. O parâmetro passado é apenas o número da MAB a qual se deseja obter a configuração. Exemplo: unsigned char Mab = 0x01; // Var com o número da MAB da solicitação long Retorno = 0; // Retorno da função para testar se OK ou não // Solicitação da função. Retorno = Cesna->IDcodeObtemConfiguracaoMab(Mab); if(retorno!= 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Executa a próxima ação. // O retorno com as informações solicitadas por esse comando vem através da função do // objeto ActiveX 5 OnIDcodeConfigMab que será descrito mais à frente. 2.2.11 IDcodeObtemNumAbastOff Esta função é utilizada para obter a quantidade de abastecimentos que foram realizados off-line. O parâmetro para a função é o número da MAB. Exemplo: 5 - OnIDcodeConfigMab.

unsigned char Mab = 0x01; // Var com o número da MAB da Solicitação long Retorno = 0; // Retorno da função para testar se OK ou não. // Solicitação da função. Retorno = Cesna->IDcodeObtemNumAbastOff(Mab); if(retorno!= 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Executa a próxima ação. // O retorno com as informações solicitadas por esse comando vem através da função do // objeto ActiveX 6 OnIDcodeNumAbastOff que será descrita mais à frente. Atenção: Função não implementada no software Simulador de Bombas IDcode. 2.2.12 IDcodeObtemPrecoPorLitro Esta função é utilizada quando se deseja obter o Preço por Litro do combustível vendido no referido Bico (bi) de determinada Bomba Lógica (bo). Por exemplo, para conferir se os valores de preço das bombas da pista estão iguais ao do sistema. Exemplo: unsigned char Mab = 0x01; // Var com o número da MAB da Solicitação unsigned char Bomba = 0x01; // Var com o número da bomba desejada unsigned char Bico = 0x01; // Var com o número do bico desejado long Retorno = 0; // Recebe o retorno da função para testar se OK ou não // Solicitação da função. Retorno = Cesna->IDcodeObtemPrecoPorLitro(Mab, Bomba, Bico); if(retorno!= 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Executa a próxima ação. // O retorno com as informações solicitadas por esse comando vem através da função do // objeto ActiveX 7 OnIDcodePrecoPorLitro que será descrita mais à frente. 6 - OnIDcodeNumAbastOff. 7 - OnIDcodePrecoPorLitro.

2.2.13 IDcodeObtemStatusBomba Esta função pode ser utilizada quando se deseja obter o status atual de uma bomba ou de todas as bombas conectadas a referida placa MAB. Se o parâmetro Bomba (bo) for enviado como zero, o Concentrador IDcode enviará o status de todas as bombas configuradas pelo último envio do comando IDcodeConfiguraMab. O retorno desta solicitação virá pelo retorno do método OnIDcodeMudancaDeEstado. Obs.: Está função é única que aceita o parâmetro bomba como zero 0x00, se este número for enviado em qualquer outra função esta mesma retornará erro. unsigned char Mab = 0x01;// Var com o número da MAB da Solicitação unsigned char Bomba = 0x01;// Var com o número da bomba desejada long Retorno = 0; // Recebe o retorno da função para testar se OK ou não. // Solicitação da função. Se bomba for 0x00, será enviado status de todas as bombas Retorno = Cesna->IDcodeObtemStatusBomba(Mab, Bomba); if(retorno!= 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Executa a próxima ação. 2.2.14 IDcodeObtemTotalizador Esta função é utilizada quando se deseja obter o totalizador (encerrante) da referida Bomba Lógica (bo) e Bico (bi). Cada Bico tem o seu totalizador correspondente à quantidade de volume medido por ele. Exemplo:

unsigned char Mab = 0x01; // Var com o número da MAB da Solicitação unsigned char Bomba = 0x01; // Var com o número da bomba desejada. unsigned char Bico = 0x01; // Var com o número do bico desejado. long Retorno = 0; // Retorno da função para testar se OK ou não. // Solicitação da função. Retorno = Cesna->IDcodeObtemTotalizador(Mab, Bomba, Bico); if(retorno!= 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Executa a próxima ação. // O retorno com as informações solicitadas por esse comando vem através da função do // objeto ActiveX 8 OnIDcodeTotalizador que será descrita mais à frente. 2.2.15 IDcodeObtemUltimoVolume Esta função é utilizada quando se deseja obter o último volume abastecido da referida bomba e bico. Exemplo: unsigned char Mab = 0x01; // Var com o número da MAB da Solicitação unsigned char Bomba = 0x01; // Var com o número da bomba desejada. unsigned char Bico = 0x01; // Var com o número do bico desejado. long Retorno = 0; // Retorno da função para testar se OK ou não. // Solicitação da função. Retorno = Cesna->IDcodeObtemUltimoVolume(Mab, Bomba, Bico); if(retorno!= 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Executa a próxima ação. // O retorno com as informações solicitadas por esse comando vem através da função do // objeto ActiveX 9 OnIDcodeVolume que será descrita mais à frente. 2.2.16 IDcodeProcuraTag Função de uso interno da Cesna Technology. Atenção: Função não implementada no software Simulador de Bombas IDcode. 8 - OnIDcodeTotalizador. 9 - OnIDcodeVolume.

2.2.17 IDcodeSalvaTag Função de uso interno da Cesna Technology. Atenção: Função não implementada no software Simulador de Bombas IDcode. 2.2.18 IDcodeSetaPrePago Esta função é utilizada quando se deseja programar um abastecimento na Bomba (bo) e Bico (bi) correspondente, programando o volume deste abastecimento. Após o envio deste comando a Bomba entra em modo reservada para este abastecimento programado, enquanto o mesmo não for efetuado ficará em modo de espera. Para cancelar esta operação basta retirar o bico do suporte esperar a bomba ligar e retornar o bico novamente. Não deverá ser ultrapassado o volume máximo 10 permitido por abastecimento da Bomba, isso pode variar de acordo com o fabricante. Esse comando só será aceito para os modos de operação A e B. Exemplo: // Enviar para a bomba o Volume em Litros: 10,000 -> 10 litros. unsigned char Mab = 0x01; // Var com o número da MAB da Solicitação unsigned char Bomba = 0x01; // Var com o número da bomba desejada unsigned char Bico = 0x01; // Var com o número do bico desejado unsigned char VolumeCasaDecimal= 0x03; // Var com o número de casas decimais long Volume = 10000; // Var com o Volume desejado sem virgula. long retorno = 0; // Recebe o retorno da função para testar se OK. // Solicitação da função. Retorno = Cesna->IDcodeSetaPrePago(Mab, Bomba, Bico, Volume, VolumeCasaDecimal); if(retorno!= 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Executa a próxima ação. 10 - Particularidades das Bombas.

2.2.19 IDcodeTestaTag Função de uso interno da Cesna Technology. Atenção: Função não implementada no software Simulador de Bombas IDcode. 2.2.20 IDcodeTrocaPrecoPorLitro Esta função é utilizada quando se deseja trocar o Preço por Litro do combustível vendido no referido Bico (bi) de determinada Bomba Lógica (bo). Nesta função devemos informar como parâmetro o R$ do Preço sem vírgula, e também o número de casas decimais do Preço. Exemplo: // Enviar para a bomba o Preço em R$: 2,290 unsigned char Mab = 0x01; // Var com o número da MAB da Solicitação unsigned char Bomba = 0x01; // Var com o número da bomba desejada. unsigned char Bico = 0x01; // Var com o número do bico desejado. unsigned char PrecoPorLitroCasaDecimal = 0x03; // Var com o número de casas decimais. long PrecoPorLitro = 2290; // Var com o Preço desejado sem virgula. long Retorno = 0; // Recebe o retorno da função para testar se OK ou não. // Solicitação da função. Retorno = Cesna->IDcodeTrocaPrecoPorLitro(Mab, Bomba, Bico, PrecoPorLitro, PrecoPorLitroCasaDecimal); if(retorno!= 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Executa a próxima ação. 2.2.21 IDcodeVersaoDLL Esta função é utilizada quando se deseja saber a versão da IDcode.dll. Como mostrado no exemplo abaixo, está função não precisa de parâmetros, pois só existirá uma IDcode.dll interagindo com o Software Integrador. O retorno desta função é a versão da Dll, sendo essa a única função IDcode que em caso de sucesso deverá retornar um valor diferente de 1 (um). Exemplo:

long Versao = 0; // Obtém retorno da função // Solicitação da função. Versao = Cesna->IDcodeVersaoDll(); // O retorno da função é a versão da Dll // Executa a próxima ação. 2.2.22 IDcodeClose Finaliza a conexão estabelecida através da função IDcodeOpen, também libera todos os recursos utilizados pela IDcode.dll. Se a Bomba de combustível estiver com um abastecimento em curso no momento da execução desta função, o mesmo será armazenado em memória para ser enviado ao computador posteriormente, quando uma nova conexão for estabelecida. Este comando, depois de solicitado, encerrará a comunicação com a Master IDcode USB com conexão estabelecida com o Software Integrador. Esta função não necessita parâmetros. Exemplo: //Solicitação da função. //Obs.: Esta função não retorna dados. Cesna->IDcodeClose();

2.3 Retorno dos Métodos do Objeto ActiveX Atenção: Deve-se atentar para não executar rotinas muito longas após o recebimento dos dados da CesnaActiveX.dll via o objeto ActiveX. Pois se isso ocorrer o processo em execução na IDcode.dll ficará aguardando o retorno da confirmação do recebimento ou não da mensagem enviada ao objeto ActiveX. Com isso não irá gerar um novo pedido de Status ao Concentrador IDcode, podendo este entrar em modo de operação off-line e o Software Integrador não receber os status das bombas em tempo real. Os dados recebidos deverão ser processados e salvos em um banco de dados, por exemplo, e gerar um sinalizador para o processo do programa principal, indicando que existem novos dados armazenados em seu banco de dados, podendo ser utilizado um objeto timer para este fim. Logo que os dados são armazenados habilita-se o timer para trabalhar com um novo processo e retorna a função do objeto ActiveX. Obs.: Ao Fazer a importação do componente ActiveX na IDE Embarcadero C++ pode haver uma divergência entre o nome dos parâmetros das funções de retorno e os nomes previamente definidos para tais parâmetros. Por exemplo, a função OnIDcodePrecoPorLitro, que retorna a solicitação do preço por litro de uma determinada bomba e bico, tem por padrão os seguintes parâmetros: Mab, Bo, Bi, Ppl, PplCd. Eventualmente esses parâmetros poderão estar como nomes diferentes. Caso essa divergência seja notada sugerimos que os nomes dos parâmetros sejam alterados manualmente para evitar possíveis conflitos de entendimento. A relação de funções de retorno e seus devidos parâmetros estão contidos no Apêndice C. 2.3.1 OnIDcodeAbasteceu Este retorno do método foi criado para atender as exigências do PAF-ECF, que solicita ao Concentrador IDcode que envie nos dados do abastecimento efetuado por alguma bomba de combustível a ele conectada, o número da Bomba, Bico, Volume, Totalizador de Volume Inicial (Encerrante Inicial), Totalizador de Volume Final (Encerrante Final), Preço por Litro, Hora

e Data deste abastecimento. Além dessas informações o OnIDcodeAbasteceu também enviará os valores das tags do frentista que autorizou o abastecimento, e do cliente que eventualmente também possua um cartão do posto, e flag do abastecimento que indicará se o abastecimento é on-line ou off-line, e o número do abastecimento que poderá ser utilizado posteriormente para recuperar os dados do abastecimento da flash da MAB através da função IDcodeObtemAbastFlash. A tag do frentista sempre será a tag que liberará o abastecimento. Para que a MAB registre as tags do frentista e do cliente para o abastecimento é preciso que a tag do cliente seja utilizada primeiro, dessa forma a MAB guardará o valor dessa tag e liberará o abastecimento quando a tag do frentista for utilizada. Caso a tag do frentista seja usada antes da tag do cliente, essa última não será guardada, pois o abastecimento já estará liberado. O PAF-ECF também solicita que a automação de bombas envie o tipo de combustível do referido bico. Informamos que o hardware de automação de bombas de combustível não deverá fornecer dados que a bomba eletrônica não envia em seu protocolo de comunicação, segundo exigências do INMETRO. Logo a Cesna Technology decidiu não implementar este parâmetro do tipo de combustível. O retorno das tags do método OnIDcodeAbasteceu, é acionado quando o modo de operação configurado no Concentrador IDcode pelo comando IDcodeConfiguraMab, for C. Isso indica que a referida Bomba (bo) e Bico (bi) conectada à MAB, finalizou um abastecimento e o mesmo está sendo enviado ao Software Integrador para tratamento dos dados deste abastecimento. Este comando virá depois que a referida Bomba enviar o estado BOMBA_ABASTECEU. A função deste método é fazer o software integrador receber os dados dos abastecimentos efetuados independentemente se este abastecimento é on-line ou off-line, ou seja, abastecimentos efetuados com o Concentrador IDcode comunicando com o PC ou não. Para identificar se o abastecimento é on-line ou off-line o parâmetro FlagAbastecimentoOff deverá ser observado. Se a FlagAbastecimentoOff for 0 (zero) o abastecimento é on-line, se for 1 (um) se trata de um abastecimento off-line. Exemplo de como obter os dados formatados:

unsigned char TmpVol[7] = {'NULL'}; // Recebe o volume de long para char. char RespVol[7] = {'NULL'}; // Auxiliar para conter o volume separado. unsigned char TmpTotIni[10] = {'NULL'}; // Recebe o total de long para char. char RespTotIni[10] ={'NULL'}; // Aux para conter o totalizador separado. unsigned char TmpTotFinal[10]= {'NULL'}; // Recebe o total de long para char. char RespTotFinal[10]= {'NULL'}; // Aux para conter o totalizador separado. unsigned char TmpPpl[10] = {'NULL'}; // Recebe o preço de long em char. char RespPpl[10] = {'NULL'}; // Auxiliar para receber o preço com vírgula. unsigned char TmpHora[6] = {'NULL'}; // Recebe a hora de long para char. char RespHora[8] = {'0','0',':','0','0',':','0','0','\0'}; // resposta. unsigned char TmpData[6] = {'NULL'};// Recebe a data de long para char. char RespData[8] = {'0','0','/','0','0','/','0','0','\0'}; // resposta. int count = 0;// Contador auxiliar int index = 0;// Contador auxiliar 2 //--------------------------------- Volume -------------------------------------------- ltoa(volume,tmpvol,10); strcpy(respvol,tmpvol); switch(volumecasadecimal) { case 0: // sem casa decimal, ou seja, sem vírgula. case 1: RespVol[strlen(TmpVol) - 1] = ','; RespVol[strlen(TmpVol)] = TmpVol[strlen(TmpVol) - 1]; case 2: RespVol[strlen(TmpVol) - 2] = ','; RespVol[strlen(TmpVol)-1] = TmpVol[strlen(TmpVol) - 2]; RespVol[strlen(TmpVol)] = TmpVol[strlen(TmpVol) - 1]; case 3: RespVol[strlen(TmpVol) - 3] = ','; RespVol[strlen(TmpVol)-2] = TmpVol[strlen(TmpVol) - 3]; RespVol[strlen(TmpVol)-1] = TmpVol[strlen(TmpVol) - 2]; RespVol[strlen(TmpVol)] = TmpVol[strlen(TmpVol) - 1]; } //----------------------------- Totalizador Inicial ------------------------------------ ltoa(totalinicial,tmptotini,10); strcpy(resptotini,tmptotini); switch(totalinicialcasadecimal) { case 0: // sem casa decimal, ou seja, sem vírgula. case 1: RespTotIni[strlen(TmpTotIni)-1]= ','; RespTotIni[strlen(TmpTotIni)]= TmpTotIni[strlen(TmpTotIni) - 1]; case 2: RespTotIni[strlen(TmpTotIni)-2]= ','; RespTotIni[strlen(TmpTotIni)-1]= TmpTotIni[strlen(TmpTotIni) - 2]; RespTotIni[strlen(TmpTotIni)] = TmpTotIni[strlen(TmpTotIni) - 1]; case 3: RespTotIni[strlen(TmpTotIni)-3]= ','; RespTotIni[strlen(TmpTotIni)-2]= TmpTotIni[strlen(TmpTotIni) - 3]; RespTotIni[strlen(TmpTotIni)-1]= TmpTotIni[strlen(TmpTotIni) - 2]; RespTotIni[strlen(TmpTotIni)]= TmpTotIni[strlen(TmpTotIni) - 1]; }

//----------------------------- Totalizador Final -------------------------------------- ltoa(totalfinal,tmptotfim,10); strcpy(resptotfim,tmptotfim); switch(totalfinalcasadecimal) { case 0: // sem casa decimal, ou seja, sem vírgula. case 1: RespTotFim[strlen(TmpTotFim)-1]= ','; RespTotFim[strlen(TmpTotFim)]= TmpTotIni[strlen(TmpTotFim) - 1]; case 2: RespTotFim[strlen(TmpTotFim)-2]= ','; RespTotFim[strlen(TmpTotFim)-1]= TmpTotFim[strlen(TmpTotFim) - 2]; RespTotFim[strlen(TmpTotFim)] = TmpTotFim[strlen(TmpTotFim) - 1]; case 3: RespTotFim[strlen(TmpTotFim)-3]= ','; RespTotFim[strlen(TmpTotFim)-2]= TmpTotFim[strlen(TmpTotFim) - 3]; RespTotFim[strlen(TmpTotFim)-1]= TmpTotFim[strlen(TmpTotFim) - 2]; RespTotFim[strlen(TmpTotFim)] = TmpTotFim[strlen(TmpTotFim) - 1]; } //--------------------------- Preço Por Litro ------------------------------------------ ltoa(precoporlitro,tmpppl,10); strcpy(respppl,tmpppl); switch(precoporlitrocasadecimal) { case 0: // sem casa decimal, ou seja, sem vírgula. case 1: RespPpl[strlen(TmpPpl) - 1] = ','; case 2: case 3: RespPpl[strlen(TmpPpl)] = TmpPpl[strlen(TmpPpl) - 1]; RespPpl[strlen(TmpPpl)-2] = ','; RespPpl[strlen(TmpPpl)-1] = TmpPpl[strlen(TmpPpl) - 2]; RespPpl[strlen(TmpPpl)] = TmpPpl[strlen(TmpPpl) - 1]; RespPpl[strlen(TmpPpl)-3] = ','; RespPpl[strlen(TmpPpl)-2] = TmpPpl[strlen(TmpPpl) - 3]; RespPpl[strlen(TmpPpl)-1] = TmpPpl[strlen(TmpPpl) - 2]; RespPpl[strlen(TmpPpl)] = TmpPpl[strlen(TmpPpl) - 1]; } //------------------------------- Hora ------------------------------------------------- ltoa(hora,tmphora,10); for(count=(strlen(tmphora)-1),index = 7;count>=0;count--,index--) { if(resphora[index]!= ':') RespHora[index] = TmpHora[count]; else RespHora[--index] = TmpHora[count]; } //------------------------------ Data -------------------------------------------------- ltoa(data,tmpdata,10); for(count=(strlen(tmpdata)-1),index = 7;count>=0;count--,index--) { if(respdata[index]!= '/') RespData[index] = TmpData[count]; else RespData[--index] = TmpData[count]; } // Neste ponto temos os dados recebidos formatados para salvar as informações e retornar // a função.

2.3.2 OnIDcodeRetornoAbastFlash Quando acionado o comando IDcodeObtemAbastFlash esta função retorna os dados do abastecimento salvo na flash da MAB referentes ao número indicado. Quando a flash da MAB atingir o limite máximo de memória para guardar dados dos abastecimentos, que é de 301 abastecimentos, esta começará a sobre escrever os abastecimentos a partir do primeiro. A forma de separação dos dados poderá ser feita exatamente da mesma forma que foi descrita do item anterior, OnIDcodeAbasteceu, tendo em vista que os dados retornados são os mesmo, somente são retornados em funções diferentes para evitar que se confunda os abastecimentos consultados na flash da MAB com novos abastecimentos. Atenção: Função não implementada no software Simulador de Bombas IDcode. 2.3.3 OnIDcodeMudancaDeEstado Indica o último estado em que a referida Bomba (bo) e Bico (Bi), conectadas à MAB, encontra-se. Podem ser utilizados para controlar algum tipo de animação no ícone da tela do PC para o caixa, para informar se a Bomba está abastecendo, pronta para executar uma ação ou com erro. Os retornos possíveis são: 2.3.3.1 BOMBA_PRONTA Indica que a referida Bomba (bo), conectada à MAB, está pronta para efetuar qualquer operação a ela solicitada, dentro das disponíveis. 2.3.3.2 BOMBA_NAO_RESPONDE Indica que ocorreu um problema de comunicação com a referida Bomba (bo), conectada à MAB.

2.3.3.3 BOMBA_PEDE_AUTORIZACAO Indica que a referida Bomba (bo) conectada à MAB está pedindo autorização para iniciar um abastecimento quando estiver operando em Modo B. A autorização da bomba deverá ser enviada via software através do comando IDcodeAutorizaAbastecimento. Quando a bomba estiver operando em Modo C, o comando de autorização via software será ignorado, sendo a bomba liberada somente através do cartão do frentista. Após o comando de autorização ser enviado a bomba informará os estados até iniciar o abastecimento, ou seja, até o combustível ser liberado pelo bico da bomba. 2.3.3.4 BOMBA_AGUARDANDO_CARTAO Indica que a referida Bomba (bo) conectada à MAB está pedindo autorização por cartão para iniciar um abastecimento quando estiver operando em Modo C. Para liberar a bomba o frentista deverá utilizar um cartão contendo uma tag válida, que esteja gravada na MAB, após isso a bomba informará os estados até iniciar o abastecimento, ou seja, até o combustível ser liberado pelo bico da bomba. 2.3.3.5 BOMBA_LIBERADA_PARA_ABASTECER Indica que a Bomba (bo) está pronta para iniciar um abastecimento. 2.3.3.6 BOMBA_ABASTECENDO Indica que a Bomba (bo) está abastecendo no momento, ou seja, está liberando o combustível pelo bico ou o mesmo está fora da posição. Existem bombas de determinadas marcas que não respondem a algumas solicitações 11 neste modo. 11 - Particularidades das Bombas Gilbarco.

2.3.3.7 BOMBA_ABASTECEU Indica que a referida Bomba (bo) e Bico (bico) conectadas à MAB finalizou o abastecimento. Os dados do abastecimento serão obtido na função OnIDcodeAbasteceu do objeto ActiveX, descrito anteriormente. 2.3.3.8 BOMBA_BLOQUEADA Indica que a referida Bomba (bo) conectada à MAB está em modo de bloqueio para o abastecimento em curso ou não inicia um novo abastecimento. 2.3.3.9 BOMBA_DESBLOQUEADA Indica que a referida Bomba (bo) conectada à MAB saiu do modo bloqueio. 2.3.3.10 BOMBA_TROCOU_PRECO_POR_LITRO Indica que a referida Bomba (bo) e Bico (bi) conectada à MAB aceitou a novo valor de Preço por Litro enviado pela função IDcodeTrocaPrecoPorLitro. 2.3.3.11 BOMBA_RESERVADA_PRE_PAGO Indica que a referida Bomba (bo) e Bico (bi) conectada à MAB recebeu com sucesso a solicitação da função IDcodeSetaPrePago descrita anteriormente. Lembrando que este comando só será aceito nos modos de operação A e B. 2.3.3.12 BOMBA_INFORMOU_FALHA Indica que ocorreu um erro indefinido com a bomba.

2.3.3.13 RETORNO_ABAST_FLASH Indica que a MAB enviou os dados do abastecimento solicitado pela função IDcodeObtemAbastFlash salvos na flash. 2.3.4 OnIDcodeTotalizador É acionado em resposta há solicitação da função IDcodeObtemTotalizador, e através deste retorno é possível obter o valor do totalizador de volume da referida Bomba (bo) e Bico (bi) conectada à MAB. É comum utilizar esta função em fechamento de turno ou caixa, do PDV do posto de combustível. Porém só devemos solicitar o próximo totalizador após a chegada do solicitado anteriormente ou por um timeout de 5 segundos. INÍCIO Função Obtem Totalizadores Carrega Endereços Mab = x Bo = y Bi = z SE FALSO Tenta solicitar novamente. Limpa FlagTotalizador. e IDcodeObtemTotalizador(Mab,Bo,Bi); F Número de Erros > 3 SE FALSO Incrementa contador de erro F Solicitação retornou OK? V SE VERDADEIRO Define novos endereços e executa a solicitação. V SE VERDADEIRO Zera tempo de Espera e contador de Erro. V F TempoEspera < 5s SE VERDADEIRO Existem mais endereços? V V F SE VERDADEIRO FlagTotalizador OK? F SE FALSO Atualiza tempo de espera. SE FALSO FIM Figura 1 - Fluxograma de Solicitação de Totalizadores.

Onde: FlagTotalizador: Pode ser utilizada como um indicador de que recebeu o totalizador na função OnIDcodeTotalizador, esta deverá ser declarada e controlada de acordo com a necessidade do Software Integrador. Ela não está inclusa nas funções do Objeto ActiveX. Exemplo de separação dos dados desta função: unsigned char FlagTotalizador = 0; // Var global de indicador. //------------------------------Função do Objeto Activex ------------------------------ void fastcall TFrmMain::OnIDcodeTotalizador(TObject *Sender, unsigned_char Mab, unsigned_char Bomba, unsigned_char Bico, long Totalizador, unsigned_char TotalizadorCasaDecimal) { char TmpTotal[10] = {'NULL'};// Var Auxiliar para receber o total de long para char. char RespTotal[10] = {'NULL'};// Var auxiliar para conter o totalizador separado. ltoa(totalizador,tmptotal,10);// ltoa -> Converte de long para char strcpy(resptotal,tmptotal); switch(totalizadorcasadecimal) { case 0: // sem casa decimal, ou seja, sem vírgula. case 1: RespTotal[strlen(TmpTotal)-1] = ','; RespTotal[strlen(TmpTotal)] = TmpTotal[strlen(TmpTotal) - 1]; case 2: RespTotal[strlen(TmpTotal)-2] = ','; RespTotal[strlen(TmpTotal)-1] = TmpTotal[strlen(TmpTotal) - 2]; RespTotal[strlen(TmpTotal)] = TmpTotal[strlen(TmpTotal) - 1]; case 3: RespTotal[strlen(TmpTotal)-3] = ','; RespTotal[strlen(TmpTotal)-2] = TmpTotal[strlen(TmpTotal) - 3]; RespTotal[strlen(TmpTotal)-1] = TmpTotal[strlen(TmpTotal) - 2]; RespTotal[strlen(TmpTotal)] = TmpTotal[strlen(TmpTotal) - 1]; } FlagTotalizador = 1; // Var indicadora de Recebimento dos dados. // Após o recebimento setamos a FlagTotalizador indicando para a função que solicitou // o Total, que os dados foram recebidos. E assim solicitar o próximo ou finalizar. // Neste ponto vamos ter o dados recebidos já separados e com vírgula na Var RespTotal. // Ex.: 123456,78 Litros com Cd igual a 2. } Devemos atentar que é importante receber uma solicitação de totalizador, ou aguardar o tempo máximo de resposta antes de efetuar a próxima solicitação. Se isso não for respeitado, corre-se o risco de sobrescrever a solicitação na MAB. Com isso a solicitação de totalizadores muitas vezes ficará incompleta, dificultando o fechamento de caixa ou turno do PDV.

Quando o fechamento de caixa ou turno for realizado, se as bombas estiverem com status PRONTA, o processo será mais rápido. Algumas Bombas 12 não respondem quando estão com status ABASTECENDO, sendo assim pode demorar a obter todos os totalizadores. 2.3.5 OnIDcodeVolume É acionado em resposta há solicitação da função IDcodeObtemUltimoVolume, com este retorno é possível obter o último volume vendido na referida Bomba (bo), conectada à MAB. Exemplo de separação dos dados desta função: //------------------------------Função do Objeto Activex ------------------------------ void fastcall TFmrMain::OnIDcodeVolume(TObject *Sender, unsigned_char Mab, unsigned_char Bomba, unsigned_char Biic, long Volume, unsigned_char VolumeCasaDecimal) { unsigned char TmpVol[7]= {'NULL'};// Auxiliar para receber o volume de long para char. char RespVol[7] = {'NULL'};// Auxiliar para conter o volume separado. ltoa(volume,tmpvol,10); strcpy(respvol,tmpvol); switch(volumecasadecimal) { case 0: // sem casa decimal, ou seja, sem vírgula. case 1: RespVol[strlen(TmpVol) - 1] = ','; RespVol[strlen(TmpVol)] = TmpVol[strlen(TmpVol) - 1]; case 2: RespVol[strlen(TmpVol) - 2] = ','; RespVol[strlen(TmpVol)-1] = TmpVol[strlen(TmpVol) - 2]; RespVol[strlen(TmpVol)] = TmpVol[strlen(TmpVol) - 1]; case 3: RespVol[strlen(TmpVol) - 3] = ','; RespVol[strlen(TmpVol)-2] = TmpVol[strlen(TmpVol) - 3]; RespVol[strlen(TmpVol)-1] = TmpVol[strlen(TmpVol) - 2]; RespVol[strlen(TmpVol)] = TmpVol[strlen(TmpVol) - 1]; } // Neste ponto teremos os dados recebidos já separados e com vírgula na variável RespVol // Ex.: 999,999 Litros com Cd igual a 3. } 12 - OBSERVAÇÕES DAS BOMBAS DE COMBUSTÍVEL.

2.3.6 OnIDcodePrecoPorLitro É acionado em resposta há solicitação da função IDcodePrecoPorLitro, com este retorno é possível conferir se o Preço por Litro das Bombas (bo) e Bicos (bi) conectados à MAB estão com o mesmo valor em R$ cadastrado nos sistema. Ou ainda conferir se a Bomba realmente alterou o preço após uma solicitação da função IDcodeTrocaPrecoPorLitro. INÍCIO Altera Preço Carrega Endereços Mab = X Bo = Y Bi = Z Preco = xxxx Cd = 3 Zera contador de erro SE FALSO Tenta solicitar novamente. IDcodeTrocaPrecoPorLitro(Mab,Bo,Bi,Preco,Cd); F Número de Erros > 3 SE FALSO Incrementa contador de erro F Solicitação retornou OK? V V SE VERDADEIRO Define novos endereços e executa a solicitação. SE VERDADEIRO Limpa FlagPreco E IDcodeObtemPrecoPorLitro(Mab,Bo,Bi); F Solicitação retornou OK? F V V SE VERDADEIRO Zera tempo de Espera e Contador de Erro. F TempoEspera < 5s V SE VERDADEIRO Existem mais endereços? V SE VERDADEIRO Preco Obtido é igual no sistema? V SE VERDADEIRO FlagPreco OK? F SE FALSO Atualiza tempo de espera. F SE FALSO FIM Figura 2 - Fluxograma Alteração e Conferência de Preço por Litro

Exemplo de separação dos dados desta função: unsigned char FlagPreco;// Var global para indicador //--------------------------- Função do Objeto ActiveX --------------------------------- void fastcall TFmrMain::OnIDcodePrecoPorLitro(TObject *Sender, unsigned_char Mab, unsigned_char Bomba, unsigned_char Bico, long PrecoPorLitro, unsigned_char PrecoPorLitroCasaDecimal) { unsigned char TmpPpl[5] = {'NULL'};// Auxiliar para receber o preço de long em char char RespPpl[5] = {'NULL'};// Auxiliar para receber o preço com vírgula. ltoa(precoporlitro,tmpppl,10); // conversão long para char strcpy(respppl,tmpppl); // copia string switch(precoporlitrocasadecimal) { case 0: // sem casa decimal, ou seja, sem vírgula. case 1: RespPpl[strlen(TmpPpl) - 1] = ','; RespPpl[strlen(TmpPpl)] = TmpPpl[strlen(TmpPpl) - 1]; case 2: RespPpl[strlen(TmpPpl)-2] = ','; RespPpl[strlen(TmpPpl)-1] = TmpPpl[strlen(TmpPpl) - 2]; RespPpl[strlen(TmpPpl)] = TmpPpl[strlen(TmpPpl) - 1]; case 3: RespPpl[strlen(TmpPpl)-3] = ','; RespPpl[strlen(TmpPpl)-2] = TmpPpl[strlen(TmpPpl) - 3]; RespPpl[strlen(TmpPpl)-1] = TmpPpl[strlen(TmpPpl) - 2]; RespPpl[strlen(TmpPpl)] = TmpPpl[strlen(TmpPpl) - 1]; } FlagPreco = 1;// Var indicadora de recebimentos dos dados. // Após o recebimento dos dados setamos a FlagPreco indicando que o os dados foram // recebidos. E assim solicitar o próximo ou finalizar. // Neste ponto teremos os dados recebidos já separados com vírgula na variável RespPpl. // Ex.: R$ 1,234 com Cd igual a 3. } Devemos atentar para as mesmas observações já citadas na função OnIDcodeTotalizador a respeito de primeiro receber um valor antes de solicitar o próximo, ou aguardar o timeout de 5 segundos.

2.3.7 OnIDcodeConfigMab É acionado como resposta ao comando IDcodeObtemConfiguracaoMab e retorna os dados MAB, número de bombas configuradas para a MAB, modo de operação e o tipo de bomba configurada. Os tipos de bomba podem ser consultados no Apêndice B. 2.3.8 OnIDcodeErroCrc É acionado quando é feita uma atualização na tabela de tags da MAB e ocorre um erro de divergência no CRC. As bombas continuaram ativas, mas irão ficar informando o erro no CRC até que a MAB seja atualizada. Esse erro somente deverá ocorrer no processo de atualização da tabela de Tags das MABs, processo esse que deverá ser realizado pelo suporte da Cesna Technology. Atenção: Função não implementada no software Simulador de Bombas IDcode. 2.3.9 OnIDcodeInfoEvento Indica eventuais inconformidades na execução da rotina de funcionamento do Concentrador IDcode. Função utilizada somente pela Cesna Technology. 2.3.10 OnIDcodeNumAbastOff Acionado como retorno da função IDcodeObtemNumAbastOff, retorna o número de abastecimentos que foram realizados enquanto o Concentrador IDcode não estava comunicando com o software integrador, ou seja, o número de abastecimentos off-line. Atenção: Função não implementada no software Simulador de Bombas IDcode.

2.3.11 OnIDcodeValorBombaAbast Durante o abastecimento este método é retornado automaticamente informando o valor parcial do abastecimento. Os valores retornados são a MAB, a bomba, o bico, o valor parcial do abastecimento e o número de casas decimais. Exemplo de separação dos dados desta função: //------------------------------Função do Objeto Activex ------------------------------ void fastcall TFmrMain::OnIDcodeValorBombaAbast(TObject *Sender, unsigned_char Mab,unsigned_char Bomba, unsigned_char Bico, long Valor, unsigned_char ValorCasaDecimal) { unsigned char TmpVal[7]= {'NULL'};// Auxiliar para receber o valore de long para char. char RespVal[7] = {'NULL'};// Auxiliar para conter o valor separado. ltoa(valor,tmpval,10); strcpy(respval,tmpval); switch(valorcasadecimal) { case 0: // sem casa decimal, ou seja, sem vírgula. case 1: RespVal[strlen(TmpVal) - 1] = ','; RespVal[strlen(TmpVal)] = TmpVol[strlen(TmpVal) - 1]; case 2: RespVol[strlen(TmpVal) - 2] = ','; RespVol[strlen(TmpVal)-1] = TmpVol[strlen(TmpVal) - 2]; RespVol[strlen(TmpVal)] = TmpVol[strlen(TmpVal) - 1]; case 3: RespVal[strlen(TmpVal) - 3] = ','; RespVal[strlen(TmpVal)-2] = TmpVal[strlen(TmpVal) - 3]; RespVal[strlen(TmpVal)-1] = TmpVal[strlen(TmpVal) - 2]; RespVal[strlen(TmpVal)] = TmpVal[strlen(TmpVal) - 1]; } // Neste ponto teremos os dados recebidos já separados e com vírgula na variável RespVal // Ex.: 10,999 reais com Cd igual a 3. } Atenção: Função não implementada no software Simulador de Bombas IDcode.

3 DESCRIÇÃO IDCODE.DLL O arquivo IDcode.dll, foi desenvolvido para controlar, analisar e conferir os dados da placa Master IDcode USB recebidos da placa MAB, e também corrigir alguns erros no funcionamento do hardware que possam ocorrer. O software Gerenciador Devcon é utilizado como software auxiliar de correção de eventuais erros de comunicação entre o controlador USB e a placa MAB. Este é instalado junto com o Gerenciador IDcode em versões do Windows superior ao Vista, pois com a adição do UAC da Microsoft é necessário iniciar o software com elevação para poder interagir o controlador USB da placa mãe do PC. O software Gerenciador Devcon, comunica-se com a IDcode.dll via objeto Socket, utilizando como padrão a porta 20000, não sendo possível alterar este parâmetro. Logo que o mesmo é definido em momento de compilação na IDcode.dll. Evitamos gerar arquivos de entrada para configuração da DLL para evitar erros de leitura, etc. Informamos que esta DLL pode ser alterada ou atualizada sem a necessidade de aviso ao Software Integrador, pois os padrões já conhecidos de integração não serão alterados. Estas modificações podem ser feitas de acordo com as necessidades ou melhorias do processo. Relembramos que não é possível obter comunicação direta com esta DLL, por motivos já explicados anteriormente. A IDcode.dll está distribuída em 2 versões: V 8.X.X.X : Comunica com firmware da placa MAB V 8.X.X. V 3.X.X.X : Comunica com software Simulador de Bombas IDcode. A versão deverá ser substituída dependendo do meio utilizado. Por padrão junto com o instalador do software Gerenciador IDcode, será instalada a IDcode.dll V 8.X.X.X. Porém o arquivo intergracaoidcode.zip contem os dois modelos. Obs.: Em uma instalação normal, não é necessário preocupar-se com este detalhe, pois o instalador já deixará tudo em perfeito funcionamento.

4 CONCENTRADOR IDCODE O hardware Concentrador IDcode de Bombas de Combustível, como previamente citado na lista de notações nas primeiras páginas deste manual, engloba o conjunto Master IDcode USB, composto pela Placa Master IDcode e placa de expansão para conectores, MAB IDcode, que contem a placa MAB IDcode, Fonte IDcode e Antenas, podendo ser de 1 a 4 antenas, dependendo da quantidade de bicos com abastecimento simultâneo, e por fim os Cartões para Frentistas e Clientes, sendo esses opcionais. O Concentrador IDcode foi desenvolvido no intuito de proporcionar ao seu utilizador um ótimo Custo x Benefício para seu investimento. Bem como proporcionar ao Software Integrador um periférico de confiança e compatibilidade com modelos de bombas existentes no mercado. Não sendo necessário refazer o trabalho de integração quando o funcionamento do hardware for otimizado ou atualizado.

4.1 Descrição de Funcionamento INÍCIO Solicitado para a CesnaActiveX.dll o Cmd IDcodeOpen IDcode.dll Recebe solcitação do IDcodeOpen F Parâmetros da chamada de função estão corretos? V SE FALSO Retorna erro na chamada de função e FINALIZA. F Existe Master IDcode USB conectada ao PC? V SE VERDADEIRO Executa rotina de configuração da Master IDcode USB e MAB. Habilita LOOP de solcitação de Status ao Concentrador IDcode. V Obteve resposta OK? V F F SE FALSO Inicia Rotina de recuperação de dados e do dispositivo! SE VERDADEIRO Envia dados ao Software Integrador. V Dados são relevantes ao Software Integrador? Recuperação OK? F Figura 3 - Fluxograma Descrição de Funcionamento Como representado no fluxograma na figura 3, após o recebimento de um comando IDcodeOpen pela CesnaActiveX.dll, será enviado o mesmo comando e parâmetros para a IDcode.dll. A dll irá configurar os parâmetros de comunicação com a Master IDcode USB via porta USB do PC onde o hardware estiver conectado. Este por sua vez será responsável por enviar e receber mensagens a placa MAB utilizando um protocolo próprio de uso interno da Cesna Technology. Após a placa MAB receber as configurações necessárias ela mesma inicia o processo de gerenciamento das bombas de combustível conectadas. Todas as vezes que a(s) bomba(s) de

combustível alterar seu estado, o mesmo será enviado ao Software Integrador via os retorno dos métodos do objeto AcitiveX. A seguir algumas opções e particularidades de funcionamento serão descritas. 4.1.1 Modo On-Line É a condição normal de funcionamento do Concentrador IDcode em um posto de combustível, ou seja, irá passar todos os estados e solicitações das bombas de combustível a ele conectadas ao Software Integrador em tempo real, bem como responder todas as funções a ele solicitadas. Caracterizando assim modo on-line. 4.1.2 Modo Off-Line Se por algum motivo o Concentrador IDcode não estiver com a comunicação estabelecida com o computador onde estiver conectado ele continuará gerenciando as bombas de combustível a ele conectadas. Logo este tipo de evento é chamado de Off-Line, caracterizado justamente por não estar enviando mensagens ao computador em tempo real. Porém dependendo do modo de operação (explicado no item a seguir) que o Concentrador estiver configurado, poderá liberar as bombas para abastecimento quando a ele solicitado. Quando a comunicação com o computador for reestabelecida e a flag que autoriza o recebimento desses abastecimentos estiver setada, os abastecimentos serão enviados ao Software Integrador, seguindo o descrito no item 2.2.7. O Concentrador IDcode permanecerá com sua última configuração válida salva. Essa configuração será a mesma enviada no comando IDcodeConfiguraMAB citada no item 2.2.5. Os dados de configuração ou abastecimentos são armazenados em memória não volátil, ou seja, os dados não serão perdidos se o mesmo for desligado da rede elétrica e bateria. Porém se o Concentrador IDcode estiver desligado e as bombas estiverem em modo remoto, não irão efetuar novos abastecimentos.

4.1.3 Modo de Operação do Concentrador IDcode Todas as vezes que as Bombas de combustível (bo) conectadas à MAB forem acionadas a efetuar um abastecimento, estando configuradas para modo remoto (com automação) irão solicitar autorização para iniciar o abastecimento ao Concentrador IDcode. Este por sua vez poderá operar de três formas diferentes. São elas: A O Concentrador IDcode irá liberar bomba de combustível para abastecer, sem solicitar autorização ao Software Integrador. Caso esteja em modo Off-Line, irá liberar as bombas para abastecimento e armazená-los em modo off-line. B O Concentrador IDcode irá liberar a bomba de combustível para iniciar um abastecimento, somente após a confirmação do Software Integrador através do comando IDcodeAutorizaAbastecimento. Porém se o mesmo entrar em modo Off- Line irá liberar os abastecimentos e armazená-los. C O concentrador IDcode irá liberar a bomba de combustível para iniciar um abastecimento, somente após receber autorização através da tag do cartão do frentista. Se o concentrador estiver operando em modo off-line os abastecimentos serão liberados pelo cartão e serão armazenados. Nesse modo o Cencentrador IDcode irá ignorar os comandos IDcodeAutorizaAbastecimento e IDcodeSetaPrePago.

5 OBSERVAÇÕES DAS BOMBAS DE COMBUSTÍVEL 5.1 Bomba Lógica BICO 1 BICO 1 BICO 2 BICO 3 BOMBA FÍSICA A B Bomba Lógica Bomba Lógica BICO 2 BICO 3 BICO 4 BICO 4 Figura 4 - Descrição Bomba Lógica Analisando a figura 5, vamos descrever a diferença entre bomba física e bomba lógica. Entendemos por bomba física, o conjunto de todos os bicos e acessórios necessários para uma bomba estar completa, ou seja, é o que visualizamos normalmente na pista de abastecimento em um posto de combustível comum. Figura 5 - Bomba Física. A imagem acima mostra três bombas físicas. Com um bico cada uma.

Entende-se por bomba lógica o endereçamento interno da bomba física, ou seja, o endereço configurado na CPU, geralmente encontra-se na parte interna da mesma, não sendo possível visualizá-lo em condições normais, tendo acesso somente ao teclado de configuração. Os profissionais capacitados para abrir a bomba física geralmente são o instalador ou o mecânico de bomba, credenciados nos órgãos fiscalizadores. Pois após a abertura, é necessário inserir o lacre para posterior fiscalização. BICO 1 BICO 1 BICO 2 BOMBA FÍSICA A - 1 B - 2 BICO 2 BICO 1 BICO 2 BOMBA FÍSICA A - 3 B - 4 BICO 1 BICO 2 BICO 3 Bomba Lógica Bomba Lógica BICO 3 BICO 3 Bomba Lógica Bomba Lógica BICO 3 BICO 4 BICO 4 BICO 1 BOMBA FÍSICA A - 5 B - 6 BICO 1 BICO 1 BOMBA FÍSICA A - 7 B - 8 BICO 1 BICO 2 Bomba Lógica Bomba Lógica BICO 2 Bomba Lógica Bomba Lógica Figura 6 - Bomba Lógica A CPU pode ser configurada geralmente com dois endereços lógicos, porém cada um deles pode controlar de 1 até no máximo 4 bicos, sendo possível a utilização de um bico por vez em cada endereço de controle. Isso foi projetado para o posto aperfeiçoar seu ponto de abastecimento, já que é possível disponibilizar mais de um tipo de combustível. Analisado a figura 6, percebemos que cada lado da bomba A ou B, pode ser configurado com um endereço lógico diferente. Normalmente eles são configurados em sequência, sendo possível atribuir do número de 1 a 4 bombas por MAB num total de 32 MABs. Em um posto de combustível raramente existirá um endereço configurado no Concentrador IDcode sem bomba lógica correspondente, logo, o instalador é instruído a não deixar endereços vagos. Isso é recomendado, pois se o Concentrador IDcode não conseguir a resposta do endereço que o mesmo solicitou status, irá entra em uma rotina de tratamento de erro, levando um tempo maior que o normal para este endereço.

5.2 Particularidades das Bombas Neste tópico vamos indicar algumas particularidades de determinadas marcas e modelos de bombas. Isso é relevante para entender o funcionamento do sistema como um todo. Informamos que o Concentrador IDcode disponibiliza todas as funções necessárias para a automação de bombas por ele suportadas, seguindo as exigências de órgãos fiscalizadores sendo inclusive homologado no órgão competente a fiscalização do hardware, INMETRO. 5.2.1 Wayne Todos os modelos de bombas Wayne aqui relacionados enviam dados de totalizadores, Preço por Litro e Volume em tempo de abastecimento. Quando a bomba estiver no estado BOMBA_ABASTECENDO : Se solicitado a função IDcodeObtemUltimoVolume, a bomba enviará como resposta o volume atualizado que está sendo mostrado no display de volume da referida bomba, ou seja, o volume crescente do abastecimento em curso. Obs.: O uso contínuo desta função, ou sem intervalos, pode gerar problemas de atraso de comunicação com outras bombas. Então, se for de interesse utilizar esta função, as solicitações de volume devem ser feitas com um intervalo mínimo de 3 segundos entre uma e outra. Se solicitado a função IDcodeObtemTotalizador, o valor do totalizador que será obtido na resposta será referente ao valor antes de iniciar o abastecimento em curso. Se solicitado a função IDcodeTravaBomba, irá interromper imediatamente a saída de combustível pelo bico da bomba. Permanecendo neste estado, até que o comando IDcodeDestravaBomba seja recebido. Somente em bombas que suportam esta opção.

5.2.1.1 Wayne Minnow Este modelo é chamado comumente de Semi-Eletrônica, isso porque apesar de existir um display digital ele é limitado em comandos. Funções não Suportadas: Troca Preço por Litro. Abastecimento Pré-Pago. Trava e Destrava. Autoriza Abastecimento. 5.2.1.2 Wayne Rifran Esta é uma evolução da bomba Wayne Minnow, mas ainda assim é um modelo antigo. Funções não Suportadas: Abastecimento Pré-Pago. 5.2.1.3 Wayne Duplex Esta é uma versão posterior a Wayne Rifran. Suporta todas as funções. 5.2.1.4 Wayne 3G Esta é a bomba da marca Wayne mais atual. Suporta todas as funções. 5.2.2 Bomba Gilbarco Este modelo de bomba, apesar de evoluir seus modelos anteriores, mantem o mesmo protocolo de comunicação. Logo, possui algumas limitações de funcionamento. Este modelo de bomba não suporta algumas funções em modo abastecendo, ou seja, BOMBA_ABASTECENDO. Também existe uma particularidade com relação aos bicos que iniciam o abastecimento deste tipo de bomba. Quando um bico diferente do número 1 de cada lado

da bomba descrito no item 5.1 - Bomba Lógica é acionado, para iniciar um abastecimento, o protocolo desta bomba informa que a bomba lógica está abastecendo, mas não informa de qual bico sairá o combustível no momento. Logo enviamos como padrão o bico (bi) 1, ou seja, no endereçamento MAB_BO_BI independente de ser o bico (bi) 1 ou não, é este que será informado no momento em que a bomba inicia o abastecimento. Porém depois do abastecimento ser finalizado, obtemos a informação do qual bico realmente realizou o abastecimento. Informamos que esta é uma limitação do protocolo da bomba em questão, não do hardware Concentrador IDcode.

Quando a bomba estiver no estado BOMBA_ABASTECENDO : Se solicitado a função IDcodeObtemUltimoVolume, IDcodeObtemTotalizador ou IDcodeObtemPrecoPorLitro, este modelo de bomba não irá responder aos comandos solicitados neste modo abastecendo. Logo irá retornar na função OnIDcodeMudancaDeEstado, BOMBA_NAO_RESPONDE. Se solicitado a função IDcodeTravaBomba, irá interromper imediatamente a saída de combustível pelo bico da bomba, porém neste modelo de bomba este comando deverá ser interpretado como bomba stop, pois logo após ela interromper a saída de combustível pedirá autorização ao Software Integrador para abastecimento. Se o mesmo estiver configurado para modo de operação B ou C. Se a autorização for enviada via Software Integrador ou cartão do frentista, dependendo do modo de operação, a bomba irá retornar a liberar combustível pelo referente bico. Se o comando IDcodeAutorizaAbastecimento for utilizado no modo B para liberar a bomba a mesma permanecerá em modo liberada BOMBA_LIBERADA, neste modo ela também não aceita nenhum comando. Sendo que se desejar cancelar a liberação, o comando IDcodeTravaBomba deverá ser enviado, com isso a bomba retornará ao estado BOMBA_PRONTA, e aceitará qualquer novo comando. 5.2.3 Bomba Stratema Esta bomba possui as mesmas observações da bomba Gilbarco, porém ao chamar o comando IDcodeTravaBomba, se esta estiver em modo abastecendo, irá travar a bomba e será necessário enviar o comando IDcodeDestravaBomba para a mesma voltar a liberar combustível. 5.2.4 Bomba Aspro GNV Deve-se atentar para o valor que virá na variável volume. Este valor não é em litros (L), mas sim em metro cúbico (m 3 ).

6 DICAS PARA SOFTWARE INTEGRADOR 6.1 Importação do Driver Master IDcode USB para Windows 8 Devido a certas restrições do Windows 8 para fazer a instalação do driver Master IDcode USB é preciso fazer com que o sistema operacional permita a instalação de drivers não assinados digitalmente. Para isso os seguintes passos deverão ser seguidos: Primeiro deve-se entrar na barra lateral que pode ser acessada clicando no botão Windows + C. Então deve-se clicar em Configurações e Mudar Configurações do Computador. Será aberto um software especifico do Windows 8. Nesse software deve-se clicar na aba Geral e selecionar a última opção, Inicialização Avançada, e então clicar em Reiniciar. Após isso o Windows reiniciará e mostrará uma tela de opções. Nessa tela selecionar Mudar Opções de Inicialização, será apresentada uma lista de opções, porem essa deverá ser selecionada pelas teclas numéricas do teclado. Por fim selecionar Permitir Drivers Não Assinados Digitalmente. instalado normalmente. O Windows 8 reiniciará e o Driver Master IDcode poderá ser 6.2 Iniciando a Comunicação com o Concentrador IDcode Ao iniciar a comunicação com o Concentrador IDcode pela primeira vez é indicado que se faça a devida configuração das MABs através do comando IDcodeConfiguraMab para que dessa forma todas as bombas conectadas às suas devidas MABs comuniquem apropriadamente com o Software integrador.

6.3 Solicitação de Encerrantes Conforme descrito na seção IDcodeObtemTotalizador, deverá primeiro receber a resposta do comando anterior, para após solicitar o comando a outra bomba. Exemplo: Bomba 1: CMD OBTEM TOTALIZADOR MAB_BO_BI 111 BOMBA_ENVIOU_TOTAL MAB_BO_BI 111 LPARAM XXXXXXXX Bomba 2: CMD OBTEM TOTALIZADOR MAB_BO_BI 121 BOMBA_ENVIOU_TOTAL MAB_BO_BI 121 LPARAM XXXXXXXX 6.4 Digito do Milhão Porque ás Automações de Bombas de Combustível não enviam do Dígito do Milhão? Isso acontece quando a Bomba de Combustível ultrapassa o valor de 999.999,99 no totalizador por volume que é o informado pelo Concentrador IDcode. Este valor irá retornar ao valor inicial que é 000.000,00 e incrementará normalmente de acordo com o volume vendido. Porém alguns postos utilizam o número do totalizador conforme aparece no display da bomba, apesar de geralmente este dígito ser um pouco mais deslocado para a esquerda que os demais. A bomba, independente da marca ou modelo, envia para a automação via protocolo de comunicação o totalizador com no máximo oito dígitos, ou seja, seis dígitos que compõem a parte inteira do número e dois correspondem às casas decimais (XXX.XXX,XX). Então após esta atualização de valores da bomba, a mesma irá mostrar no display 1 000.000,00. Mas, como citado, este dígito não vêm via protocolo, logo talvez o entendimento deste dígito não seja exatamente este, ultrapassar 1 milhão, mas sim informar que a bomba girou o totalizador uma vez. Informamos dois modos possíveis de resolver este detalhe: O Posto considera o totalizador em volume desta bomba sem o dígito do N 1, que será possível somente com alteração e justificativa no LMC. O Software Integrador adiciona este número no valor do totalizador de volume da bomba manualmente, ou seja, ter uma configuração para cada bico onde exista a opção de informar se a bomba em questão possui o dígito do milhão ou não.

Então a conclusão que podemos chegar é de que como nenhuma bomba manda este dígito via protocolo de comunicação este deve ter a outra interpretação, ficando a critério do Software Integrador a opção de ajuste. Mas fica o lembrete de que isso ocorre na maioria dos postos de combustíveis. E também que isso não é uma limitação do Concentrador IDCode, todos os aparelhos de automação possuem este detalhe. Ficando a critério de cada um o ajuste. Obs.: Norma do PAF-ECF determinam que o Totalizador de Volume, deve conter 8 dígitos com duas casas decimais, ou seja, (XXXXXX,XX) sem o dígito do milhão. 6.5 Autorização Automática Quando o Concentrador IDcode operar em modo de operação B, todas as vezes que se desejar efetuar um abastecimento, a bomba irá solicitar autorização para iniciar o abastecimento para o Concentrador IDcode e o mesmo ao Software Integrador. É possível enviar o comando IDcodeAutorizaAbastecimento antes mesmo da bomba solicitar a autorização, então a bomba entra no estado BOMBA_LIBERADA_PARA_ABASTECER. Com isso o acionamento da bomba ficará um pouco mais rápido, pois a mesma não terá que esperar a liberação do Concentrador IDcode, que por sua vez espera a liberação do Software Integrador. Caso este processo seja utilizado, devemos lembrar que a bomba não envia ou efetua algumas operações neste modo. Sendo necessário o envio do comando IDcodeTravaBomba para a mesma voltar para o estado de BOMBA_PRONTA. 6.6 Bicos de Abastecimento Não devemos esquecer que o posto de combustível geralmente já possui uma numeração dos bicos de acordo com o cadastrado no órgão fiscal, ou seja, sempre que possível é bom seguir esta numeração para o sistema, e criar campos de endereçamento obtidos dos

valores de MAB, Bomba Lógica (bo) e Bico (bi). Sendo estes números o endereço lógico que identifica a bomba. Sendo recomendável criar um cadastro de endereços onde seja possível referenciá-los de acordo com o número já existente na pista. Existente Endereço enviado pelo Concentrador IDcode Nº do Bico na Pista MAB Bomba (bo) Bico (bi) Bico 1 01 1 1 Bico 2 01 1 2 Bico 3 01 2 1 Bico 4 01 2 2 Bico 5 01 3 1............ Bico 7 NN n n Tabela 2 - Bicos de Abastecimento

6.7 Atualização do Componente CesnaActiveX.dll Esta dica servirá para clientes que já possuem o Software Integrador integrado com o Concentrador IDcode, e informa o reduzido impacto de software para atualização. Primeiro o componente CesnaActiveX.dll anterior deverá ser desinstalado, assim como o software Gerenciador IDcode anterior. Na pasta do sistema não deverão existir nenhum arquivo IDcode.dll, CesnaActiveX.dll ou CesnaActiveX.ocx, que devem ser removidos com a desinstalação do software Gerenciador IDcode. Caso isso não ocorra verifique se o software foi removido corretamente, se os arquivos ainda permanecerem exclua-os. Após os componentes e softwares anteriores removidos, deverá ser instalado o novo componente, para isso instale o software Gerenciador IDcode atualizado que está contido no arquivo integracaoidcode.zip, baixado do site da Cesna Technology na área de download restrito Agora a importação do componente poderá ser novamente efetuar conforme descrito no Apêndice A no final deste manual. Caso no momento da importação não exista o componente CesnaActiveX.dll efetue um novo registro da CesnaActiveX.dll no sistema. Abra o prompt do DOS com o botão direito do mouse clique em executar como administrador, logo após insira a seguinte linha de comando. Depois da mensagem de registro OK, efetue a importação novamente. Para 32 bits: Figura 7 - Registro em Windows 32 bits. Para 64 bits: Figura 8 - Registro em Windows 64 bits.