CESNA TECHNOLOGY MANUAL PARA DESENVOLVEDORES Documentação de auxílio à integração com Concentrador Fcm Utilizando CesnaActiveX.dll V 1.1.0 - ActiveX Versão 2.0.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 empresa dispõe de um conjunto de exemplos para integração direta com a DLL de manipulação do concentrador CESNA, para as seguintes linguagens de programação: Visual Basic; Delphi; C++. A CESNA TECHNOLOGY fornece este material no intuito de auxiliar aos desenvolvedores de sistemas de integração com o concentrador FCM CESNA 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 alguma correção ortográfica 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á a 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. A CESNA TECHNOLOGY, também dispõe a seus integradores outra opção de comunicação com o CONCENTRADOR FCM, via protocolo de troca de arquivo de texto. Caso obtenha interesse neste modo, solicite maiores informações pelo e-mail no final deste texto. Estamos abertos a sugestões, através do e-mail [email protected], para que possamos alcançar excelência no atendimento de nossos clientes e parceiros. Cesna Technology | 2011 SUMÁRIO LISTA DE FIGURAS ...................................................................................................... 3 LISTA DE TABELAS ...................................................................................................... 3 LISTA DE SIGLAS ......................................................................................................... 4 1 OBJETIVO GERAL DESTE MANUAL .............................................................................. 5 2 DESCRIÇÃO DO COMPONENTE CESNAACTIVEX.DLL .................................................... 6 2.1 Importando o Componente ActiveX ........................................................................... 7 2.2 Descrição das Funções Disponíveis ............................................................................. 8 2.2.1 FcmOpen ................................................................................................................. 11 2.2.2 FcmClose.................................................................................................................. 11 2.2.3 FcmSetNumSlaves .................................................................................................... 12 2.2.4 FcmConfiguraSlave ................................................................................................... 12 2.2.5 FcmConfigConcentrador........................................................................................... 13 2.2.6 FcmAutorizaAbastecimento ..................................................................................... 15 2.2.7 FcmTravaBomba ...................................................................................................... 15 2.2.8 FcmDestravaBomba ................................................................................................. 16 2.2.9 FcmSolicitaPrecoPorLitro ......................................................................................... 16 2.2.10 FcmTrocaPreco ........................................................................................................ 17 2.2.11 FcmSolicitaUltimoAbastecimento ............................................................................. 17 2.2.12 FcmSolicitaTotalizador ............................................................................................. 18 2.2.13 FcmProgramaPrePago .............................................................................................. 18 2.2.14 FcmVersaoDLL.......................................................................................................... 20 2.2.15 FcmSolicitaVersaoSlave ............................................................................................ 20 2.2.16 FcmObtemStatusBomba .......................................................................................... 21 2.2.17 FcmConfigTotalizador............................................................................................... 21 2.2.18 CmdEspecial ............................................................................................................. 22 2.3 Retorno dos Métodos do Objeto ActiveX .................................................................. 23 2.3.1 OnFcmMudancaDeEstado ........................................................................................ 23 2.3.1.1 EVENTO_BOMBA_PRONTA ...................................................................................... 23 2.3.1.2 EVENTO_BOMBA_NAO_RESPONDE.......................................................................... 23 2.3.1.3 BOMBA_PEDE_AUTORIZACAO ................................................................................. 24 Cesna Technology | 2011 2.3.1.4 BOMBA_LIBERADA ................................................................................................... 24 2.3.1.5 BOMBA_ABASTECENDO ........................................................................................... 24 2.3.1.6 BOMBA_ABASTECEU ................................................................................................ 24 2.3.1.7 BOMBA_BLOQUEADA .............................................................................................. 24 2.3.1.8 BOMBA_DESBLOQUEADA ........................................................................................ 24 2.3.1.9 CONSENTRADOR_ACEITOU_CONFIGURACAO ........................................................... 25 2.3.1.10 BOMBA_TROCOU_PRECO ........................................................................................ 25 2.3.1.11 BOMBA_RESERVADA_PRE_PAGO ............................................................................. 25 2.3.1.12 FALHA_NA_COMUNICACAO_COM_CONSENTRADOR ............................................... 25 2.3.2 OnFcmTotalizador .................................................................................................... 26 2.3.3 OnFcmVolume ......................................................................................................... 28 2.3.4 OnFcmPrecoPorLitro ................................................................................................ 29 2.3.5 OnFcmAbasteceu ..................................................................................................... 31 2.3.6 OnFcmVersaoFcmSlave ............................................................................................ 34 2.3.7 OnFcmErroDLL ......................................................................................................... 35 2.3.7.1 ERRO “20” - MM_EVENTO_ERRO_LRC ...................................................................... 35 2.3.7.2 ERRO “21” – MM_EVENTO_MASTER_ERRO_PRT ...................................................... 35 2.3.7.3 ERRO “22” – MM_EVENTO_MASTER_FINALIZOU ..................................................... 35 2.3.7.4 ERRO “23” – SAIDA_EVENT OCORREU TIMEOUT....................................................... 35 2.3.8 OnFcmEventoFcmSlave ............................................................................................ 36 2.3.9 OnRetornoEspecial ................................................................................................... 36 3 DESCRIÇÃO FCMMASTER.DLL ................................................................................... 37 4 CONCENTRADOR FCM .............................................................................................. 38 4.1 Descrição de Funcionamento ................................................................................... 38 4.1.1 Modo On-Line .......................................................................................................... 39 4.1.2 Modo Off-Line .......................................................................................................... 39 4.1.3 Modo de Operação do Concentrador Fcm ................................................................ 40 4.1.4 Formato Mensagem de Abastecimento .................................................................... 41 5 OBESERVAÇÕES DAS BOMBAS DE COMBUSTÍVEL ..................................................... 42 5.1 Bomba Lógica ........................................................................................................... 42 5.2 Particularidades das Bombas .................................................................................... 44 5.2.1 Mecânica ................................................................................................................. 44 Cesna Technology | 2011 5.2.2 Wayne ..................................................................................................................... 46 5.2.2.1 Wayne Minnow........................................................................................................ 46 5.2.2.2 Wayne Rifran ........................................................................................................... 47 5.2.2.3 Wayne Duplex .......................................................................................................... 47 5.2.2.4 Wayne 3G ................................................................................................................ 47 5.2.3 Bomba Gilbarco ....................................................................................................... 47 5.2.4 Bomba Stratema ...................................................................................................... 48 5.2.5 Bomba Aspro GNV ................................................................................................... 48 6 DICAS PARA SOFTWARE INTEGRADOR...................................................................... 49 6.1 Iniciando a Comunicação com o Concentrador Fcm .................................................. 49 6.2 Solicitação de Encerrantes........................................................................................ 49 6.3 Digito do Milhão ...................................................................................................... 50 6.4 Autorização Automática ........................................................................................... 51 6.5 Bicos de Abastecimento ........................................................................................... 51 6.6 Atualização do Componente CesnaActiveX.dll .......................................................... 52 APÊNDICE A ............................................................................................................. 54 Cesna Technology | 2011 LISTA DE FIGURAS Figura 1 - Fluxograma de Solicitação de Totalizadores. ................................................ 26 Figura 2 - Fluxograma Alteração e Conferência de Preço por Litro ............................... 29 Figura 3 - Fluxograma Descrição de Funcionamento ................................................... 38 Figura 4 - Descrição Bomba Lógica .............................................................................. 42 Figura 5 - Bomba Física. .............................................................................................. 42 Figura 6 - Bomba Lógica .............................................................................................. 43 Figura 7 - Registro em Windows 32 bits. ..................................................................... 52 Figura 8 - Registro em Windows 64 bits. ..................................................................... 53 LISTA DE TABELAS Tabela 1 - Modelo de Bombas no retorno Versão Fcm Slave. ...................................... 34 Tabela 2 - Bicos de Abastecimento.............................................................................. 51 Cesna Technology | 2011 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. - CesnaActiveX.dll: Biblioteca em ActiveX para interface com Fcm Master.dll. - cd: Número de casas decimais. - Concentrador Fcm: Conjunto Fcm Master, FcmSlave, Fonte de Alimentação. - Driver FTDI: Driver para Fcm Master USB. - Fcm Master USB: Hardware de interface entre Fcm Slave e PC. - Fcm Slave: Hardware que controla e gerencia as bombas de combustível. - FcmMaster.dll: Biblioteca que gerencia a comunicação com o Concentrador Fcm. - Firmware: Pequeno software dedicado e instalado no microcontrolador da Fcm Slave. - Gerenciador Cesna: Software de gerenciamento e teste do Concentrador Fcm. - Instalador Gerenciador Cesna: Software que instala e registra o software Gerenciador Cesna. - PC: Microcomputador onde está conectada a Fcm Master USB. - Ppl ou Preco: Preço por Litro de determinada Bomba e Bico. - SB: – Simulador de Bombas. - Simulador de Bombas Fcm: Software desenvolvido pela engenharia da Cesna Technology, para auxiliar os integradores do Concentrador Fcm no desenvolvimento do Software Integrador. - sl ou Slave: Número que corresponde a Fcm Slave. - Software Integrador: Programa desenvolvido pela empresa que está efetuando a integração com o Concentrador Fcm. - Vol ou Volume: Volume de determinada Bomba e do último bico abastecido. - Tot ou Totalizador ou Encerrante: Totalizador de determinada Bomba e Bico. Cesna Technology | 2011 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 Fcm, utilizando como interface a CesnaActiveX.dll. Serão descritas todas as funções disponíveis no componente ActiveX para envio e recepção de mensagens ao Concentrador de Bombas 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 Fcm. 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 “ [email protected] ”. 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 e contidos 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! Cesna Technology | 2011 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 Fcm, 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 Fcm foi 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 FcmMaster.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 Fcm assim ficando totalmente independente, sendo possível alterar a FcmMaster.dll quando necessário sem impacto algum na integração já efetuada pelo Software Integrador. Logo, é possível instalar nos clientes as últimas versões da FcmMaster.dll e Firmware da placa Fcm Slave. Também gostaríamos de salientar que não é possível comunicação diretamente com a FcmMaster.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 FcmMaster.dll. Este software foi desenvolvido para auxiliar o processo de integração com o Concentrador Fcm, sendo possível simular os comandos e abastecimentos simulando o hardware Concentrador Fcm 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_Fcm”) está disponível na página de download no site da Cesna Technology. Cesna Technology | 2011 2.1 Importando o Componente ActiveX Primeiramente deve-se instalar o software Gerenciador Cesna, pois junto com a sua instalação ele registrará e copiará as DLL’S necessárias para o funcionamento do Concentrador Fcm quando conectado ao PC. Não é necessário preocupar-se com o registro das DLL’S, pois o instalador do Gerenciador Cesna fará este processo. Este software deverá estar instalado no PC do cliente, sendo que o técnico instalador do hardware utilizará o mesmo para testar o equipamento e as bombas de combustível conectadas a placa Fcm Slave. 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 Cesna 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. 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 Fcm, ou utilizará o programa Simulador de Bombas Fcm para auxiliar na integração. Se o modo a ser utilizado é o hardware Concentrador Fcm, a placa Fcm Master USB deverá ser conectada em uma porta USB disponível do PC utilizado para desenvolvimento ou testes, em seguida o driver do dispositivo Fcm Master 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, área de downloads. Se o modo a ser utilizado é o Software Simulador de Bombas Fcm, deverá ser seguido o processo adiante. Por padrão o instalador do Gerenciador Cesna instala o arquivo “FcmMaster.dll” V 6.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.X.X que é a versão para o Simulador de Bombas Fcm. Com o Software Integrador desativado, deverá ser copiada da pasta DLL’S/V3 do arquivo “IntegracaoCesna.zip” a “FcmMaster.dll” V 3.X.X e Cesna Technology | 2011 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.X.X fará a interface entre o Software Integrador e Software Simulador de Bombas Fcm. Se tudo ocorreu bem, já podemos utilizar a CesnaActiveX.dll para integração. 2.2 Descrição das Funções Disponíveis Todos as solicitações ou eventos enviados ao Concentrador Fcm 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: 1: Indica que a solicitação foi executada com sucesso. -1: O parâmetro número do FcmSlave (sl) está incorreto, ou não foi encontrado. -2: O parâmetro Bomba (bo) está incorreto. -3: O parâmetro Bico (bi) está incorreto. -4: O parâmetro casas decimais (cd) está incorreto. -5: O parâmetro Modo de Operação está incorreto. -6: O parâmetro Formato Mensagem de Abastecimento está incorreto. -7: O Fcm Slave em questão não existe ou não está respondendo no momento. -8: Parâmetro do CMD especial está incorreto. -9 a -11: Solicite informações ao suporte da Cesna Technology. -12: Este número de Fcm Master já foi iniciado. -13 a -15: Solicite informações ao suporte da Cesna Technology. Obs.: Os retornos das solicitações de funções são os mesmos tanto para o Simulador de Bombas Fcm, quanto para o hardware. Logo todo o desenvolvimento pode ser efetuado via simulador. Cesna Technology | 2011 No quadro abaixo, são mostrados os protótipos de funções disponíveis para envio ao Concentrador Fcm, 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 IDcode, favor consultar o Manual Desenvolvedores IDcode. PROTÓTIPOS DE FUNÇÕES Obs.: Todas possuem retorno tipo long. Cesna->FcmOpen(unsigned char NumeroMaster); Cesna->FcmSetNumSlaves(int NumeroSlave); Cesna->FcmConfiguraSlave(unsigned char Slave, unsigned char Bomba); Cesna->FcmConfigConcentrador(unsigned char Slave, unsigned char Bomba, unsigned char ModoOperacao, unsigned char TipoMsgAbastecimento); Cesna->FcmVersaoFcmMaster(); Cesna->FcmSolicitaVersaoSlave(unsigned char Slave); Cesna->FcmAutorizaAbastecimento(unsigned char Slave, unsigned char Bomba, unsigned char Bico); Cesna->FcmSolicitaUltimoAbastecimento(unsigned char Slave, unsigned char Bomba, unsigned char Bico); Cesna->FcmSolicitaTotalizador(unsigned char Slave, unsigned char Bomba, unsigned char Bico); Cesna->FcmSolicitaPrecoPorLitro(unsigned char Slave, unsigned char Bomba, unsigned char Bico); Cesna->FcmTrocaPreco(unsigned char Slave, unsigned char Bomba, unsigned char Bico, long PrecoPorLitro, unsigned char PrecoPorLitroCasaDecimal); Cesna->FcmProgramaPrePago(unsigned char Slave, unsigned char Bomba, unsigned char Bico, long Volume, unsigned char VolumeCasaDecimal); Cesna->FcmTravaBomba(unsigned char Slave, unsigned char Bomba); Cesna->FcmDestravaBomba(unsigned char Slave, unsigned char Bomba); Cesna->FcmObtemStatusBomba(unsigned char Slave, unsigned char Bomba); Cesna->FcmConfigTotalizador(unsigned char Slave, unsigned char Bomba, unsigned char Bico, long Totalizador); Cesna->CmdEspecial(unsigned char Slave, unsigned char Bomba, unsigned char Bico, long Codigo, long Param1, long Param2, long Param3);// Utilização futura Cesna->FcmClose(); 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 “FcmMaster-> ” em C++ ou “FcmMaster. ” em Delphi . Como citado acima, estas possuem todos os seus retornos em tipo long. Cesna Technology | 2011 Será demonstrado adiante a utilização e os objetivos de cada uma das funções relacionadas acima. ATENÇÃO: Tanto o “Concentrador Fcm” como o “Concentrador IDcode” 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 Fcm quanto as do IDcode estarão disponíveis. É de vital importância que as funções utilizadas para a integração com o Concentrador Fcm sejam as que possuam o prefixo “Fcm<Nome da Função>”. Por exemplo: FcmOpen(). Os eventos de resposta devem possuir o prefixo “OnFcm<Nome da Função>”. Por exemplo: OnFcmAbasteceu. As funções que possuírem prefixo “IDcode” ou “OnIDcode” são referentes à integração com o “Concentrador IDcode”. Para mais informações a respeito desta integração favor consultar o “Manual Desenvolvedores IDcode”. Cesna Technology | 2011 2.2.1 FcmOpen Inicia uma conexão com o hardware Fcm Master USB ou com o Simulador de Bombas Fcm. Deverá ser passado como parâmetro o número da Fcm Master USB que desejar obter uma conexão. O número do Fcm Master USB dependerá do número de Concentradores Fcm instalados no posto de combustível, que pode variar de acordo com o número de bombas ou com bombas de marcas diferentes. Ex.: unsigned char long Master = 0x01; retorno = 0; // Var com o número do Fcm Master USB // Retorno da função para testar se OK ou não. //Solicitação da função retorno = FcmMaster->FcmOpen(NumeroMaster); 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. 2.2.2 FcmClose Finaliza todas as conexões estabelecidas através da função “FcmOpen”, também libera todos os recursos utilizados pela FcmMaster.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 todas as FcmMaster USB com conexão estabelecida com o Software Integrador. Esta função não necessita parâmetros. Ex.: //Solicitação da função. //Obs.: Esta função não retorna dados. FcmMaster->FcmClose(); Cesna Technology | 2011 2.2.3 FcmSetNumSlaves Informa a FcmMaster.dll, o número da placa Fcm Slave que está conectada na placa Fcm Master USB. Esta função deve ser utilizada logo após o comando “FcmOpen”. Sempre deverá ser passado como parâmetro o mesmo valor da função “FcmOpen”, porém com uma conversão ou “cast” para o tipo inteiro. Ex.: unsigned char long Master retorno = 0x01; // Var com o número do Fcm Master USB = 0; // Retorno da função para testar se OK ou não. // Solicitação da função FcmOpen. retorno = FcmMaster->FcmOpen(Master); if(retorno != 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Solicitação da função FcmSetNumSlaves. retorno = FcmMaster->FcmSetNumSlaves((int)Master); 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. 2.2.4 FcmConfiguraSlave Informa à placa Fcm Slave o número de bombas lógicas que ela deverá gerenciar. Esta função está obsoleta, portanto, foi criada uma nova função para atender melhor às necessidades. Logo, a partir do componente FcmMasterX V 1.0.7, estas configurações deverão ser efetuadas pela função FcmConfigConcentrador, que está descrita no próximo tópico. Cesna Technology | 2011 2.2.5 FcmConfigConcentrador Informa à placa Fcm Slave o número de bombas lógicas que ela deverá gerenciar, o modo de operação1 que a mesma deverá operar e também o formato2 de mensagem de abastecimento que deverá ser enviada ao software integrador. 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 Fcm 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 Fcm 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. Para configurar o Concentrador Fcm deveram ser passados como parâmetros o número do Fcm Slave que se deseja configurar, o número de bombas lógicas da pista, o modo de operação que o Concentrador Fcm deverá operar e também o tipo de mensagem de abastecimento, o mesmo deverá enviar ao software integrador, conforme descrito no exemplo de código abaixo. O número de bicos existente em cada bomba lógica não necessita ser configurado, pois o Concentrador Fcm precisa saber apenas o número de bomba que irá comunicar, sendo o número do bico virá de acordo com o bico físico (mangueira) que efetuou o abastecimento. Está função foi criada para substituir a função FcmConfiguraSlave, para melhorar a disposição dos parâmetros e modo de operação. Assim é possível passar os parâmetros sem maior complexidade em relação à função anterior. Não é necessário configurar o número de bicos de cada bomba. Ex.: 1 2 - Modo de Operação. - Formato Mensagem de Abastecimento. Cesna Technology | 2011 unsigned unsigned unsigned unsigned unsigned long char char char char char Master = Slave = ModoOperacao = Bomba = FormatoMsgAbast= retorno = 0; 0; 0; 0; 0; 0; // // // // // // Var com o número do Fcm Master USB Var com o número do FcmSlave; Var com o modo de operação escolhido. Em hex. Var com o número de bombas existentes. Var para o formato da Msg de abastecimento. Retorno da função para testar se OK ou não. //-------------------- Solicitação da função FcmOpen ------------------------------Master = 0x01; // Seleciona a FcmMaster desejada retorno = FcmMaster->FcmOpen(Master); if(retorno != 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } //-------------------- Solicitação da função FcmSetNumSlaves ----------------------Slave = Master;// Deverá ser o valor do FcmMaster do FcmOpen retorno = FcmMaster->FcmSetNumSlaves((int)Slave); if(retorno != 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } //-------------------- Solicitação da função FcmConfigConcentradorFcm -------------// Seleciona o Modo de Operação. ModoOperacao = 0x0A; // Selecionando modo A // Seleciona o Formato Msg de Abastecimento. FormatoMsgAbast = 0x02;// Fixo 2 para retornar os dados do totalizador inicial retorno = FcmMaster->FcmConfigConcentradorFcm(Slave,Bomba,ModoOperacao,FormatoMsgAbast); if(retorno != 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } // Se não ocorreu nenhum return a comunicação e configuração do Concentrador Fcm está //pronta. Agora os status das bombas conectadas do concentrador e configuradas serão //recebidos na função de retorno do objeto ActiveX3 FcmMaster OnMudancaDeEstado. 3 - OnMudancaDeEstado. Cesna Technology | 2011 2.2.6 FcmAutorizaAbastecimento Esta função será utilizada quando se deseja liberar uma determinada Bomba Lógica para abastecer, quando o Concentrador Fcm estiver configurado para operar no modo4 “B” ou “C”. Quando o estado da bomba for “BOMBA_PEDE_AUTORIZACAO” 5, o envio deste comando irá liberar a bomba para abastecer. Ex.: //Esta função será melhor explicada no retorno dos métodos adiante. //Supondo que a Fcm Slave, Bomba e Bico que está pedindo autorização para abastecer, //seja do endereço sl=1, bo=2, bi=1. unsigned char unsigned char unsigned char long Slave = Bomba = Bico = retorno = 0x01; // 0x01; // 0x01; // 0; // Var com Var com Var com Retorno o número do Fcm Slave da Solicitação o número da bomba desejada. o número do bico desejado. da função para testar se OK ou não. // Solicitação da função. retorno = FcmMaster->FcmAutorizaAbastecimento(Slave,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. 2.2.7 FcmTravaBomba 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 comando6. Ex.: unsigned char unsigned char long Slave = 0x01;// Var com o número do Fcm Slave da Solicitação Bomba = 0x01;// Var com o número da bomba desejada. retorno = 0; // Recebe o retorno da função para testar se OK ou não. retorno = FcmMaster->FcmTravaBomba(Slave,Bomba);// 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 - Modo de Operação do Concentrador Fcm. - BOMBA_PEDE_AUTORIZACAO. 6 - DICAS PARA SOFTWARE INTEGRADOR. 5 Cesna Technology | 2011 2.2.8 FcmDestravaBomba Esta função é utilizada quando se deseja destravar a bomba, geralmente após um comando “FcmTravaBomba”. Também possui a mesma particularidade. Descrição nota 5 do item anterior. Ex.: unsigned char unsigned char long Slave = 0x01; // Var com o número do Fcm Slave da Solicitação Bomba = 0x01; // Var com o número da bomba desejada. retorno = 0; // Recebe o retorno da função para testar se OK ou não. retorno = FcmMaster->FcmDestravaBomba(Slave,Bomba);// 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.9 FcmSolicitaPrecoPorLitro 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. Ex.: unsigned char unsigned char unsigned char long Slave = Bomba = Bico = retorno = 0x01;// Var com 0x01;// Var com 0x01;// Var com 0; // Recebe o o número do Fcm Slave da Solicitação o número da bomba desejada. o número do bico desejado. retorno da função para testar se OK ou não. // Solicitação da função. retorno = FcmMaster->FcmSolicitaPrecoPorLitro(Slave,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. Cesna Technology | 2011 2.2.10 FcmTrocaPreco 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. Ex.: unsigned unsigned unsigned unsigned long long char char char char Slave = Bomba = Bico = CD = Preco = retorno = 0x01;// Var com o número do Fcm Slave da Solicitação 0x01;// Var com o número da bomba desejada. 0x01;// Var com o número do bico desejado. 0x03; // Var com o número de casas decimais. 1290;// Var com o Preço desejado sem virgula. 0; // Recebe o retorno da função para testar se OK ou não. // Solicitação da função. retorno = FcmMaster->FcmTrocaPreco(Slave,Bomba,Bico,Preco,CD); 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. // Neste caso foi enviado para a bomba o Preço em R$: 1,290 2.2.11 FcmSolicitaUltimoAbastecimento Esta função é utilizada quando se deseja obter o último volume abastecido da referida bomba, apesar do nome proporcionar outro entendimento. Porém já está em prática há tempos, não sendo possível sua modificação sem alterar a CesnaActiveX.dll, o que não é interessante por motivos já citados. Observe que a bomba irá informar o volume do último abastecimento efetuado, independentemente de qual o bico que efetuou, ou seja, este valor não indica qual bico o efetuou. Ex.: unsigned char unsigned char unsigned char long Slave = Bomba = Bico = retorno = 0x01;// Var com 0x01;// Var com 0x01;// Var com 0; // Recebe o o número do Fcm Slave da Solicitação o número da bomba desejada. o número do bico desejado. retorno da função para testar se OK ou não. // Solicitação da função. retorno = FcmMaster->FcmSolicitaUltimoAbastecimento(Slave,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. Cesna Technology | 2011 2.2.12 FcmSolicitaTotalizador 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. Ex.: unsigned char unsigned char unsigned char long Slave = Bomba = Bico = retorno = 0x01;// Var com 0x01;// Var com 0x01;// Var com 0; // Recebe o o número do Fcm Slave da Solicitação o número da bomba desejada. o número do bico desejado. retorno da função para testar se OK ou não. // Solicitação da função. retorno = FcmMaster->FcmSolicitaTotalizador(Slave,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. 2.2.13 FcmProgramaPrePago 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áximo7 permitido por abastecimento da Bomba, isso pode variar de acordo com o fabricante. Ex.: 7 - Particularidades das Bombas. Cesna Technology | 2011 unsigned unsigned unsigned Unsigned long long char char char char Slave = Bomba = Bico = CD = Volume = retorno = 0x01;// Var com o número do Fcm Slave da Solicitação 0x01;// Var com o número da bomba desejada. 0x01;// Var com o número do bico desejado. 0x03;// Var com o número de casas decimais. 10000;// Var com o Volume desejado sem virgula. 0; // Recebe o retorno da função para testar se OK ou não. // Solicitação da função. Nesta, a var cd deve ser passada por referência. retorno = FcmMaster-> FcmMaster->FcmProgramaPrePago(Slave,Bomba,Bico,Volume,&CD); 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. // Neste caso foi enviado para a bomba o Volume em Litros: 10,000 -> 10 litros. Cesna Technology | 2011 2.2.14 FcmVersaoDLL Esta função é utilizada quando se deseja saber a versão da FcmMaster.dll. Como mostrado no exemplo abaixo, está função não precisa de parâmetros, pois só existirá uma FcmMaster.dll interagindo com o Software Integrador. Ex.: long retorno = 0; // Recebe o retorno da função para testar se OK ou não. // Solicitação da função. retorno = FcmMaster->FcmMaster->FcmVersaoFcmMaster(); 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.15 FcmSolicitaVersaoSlave Esta função pode ser utilizada quando se deseja obter a versão do Firmware da placa Fcm Slave, assim podemos saber o tipo de bomba instalada no posto de combustível. Ex.: unsigned char long Slave = 0x01;// Var com o número do Fcm Slave da Solicitação. retorno = 0; // Recebe o retorno da função para testar se OK ou não. // Solicitação da função. retorno = FcmMaster-> FcmSolicitaVersaoSlave((int)Slave); 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. Cesna Technology | 2011 2.2.16 FcmObtemStatusBomba 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 Fcm Slave. Se o parâmetro “bo” for enviado como zero, o Concentrador Fcm enviará o status de todas as bombas configuradas pelo último envio do comando “FcmConfiguraSlave”. O retorno desta solicitação virá pelo retorno do método “OnFcmMudancaDeEstado”. 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 à mesma retornará erro. unsigned char unsigned char long Slave = 0x01;// Var com o número do Fcm Slave da Solicitação. Bomba = 0x01;// Var com o número da bomba desejada. 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 de todas configuradas. retorno = FcmMaster-> FcmObtemStatusBomba(Slave,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.17 FcmConfigTotalizador Esta função somente é aceita e utilizável em Concentrador Fcm configurado para Bomba Mecânica, com firmware na versão V 4.X.X ou superior. Será utilizada para configurar os encerrantes iniciais em cada bomba mecânica no momento da instalação do Concentrador Fcm. Conforme os abastecimentos são efetuados na referida bomba, o mesmo será somando com o volume abastecido e enviado ao Software Integrador para impressão no cupom fiscal (Exigência do PAF). A configuração e verificação destas informações ficam a cargo do utilizador. Bombas Mecânicas não possuem encerrantes eletrônicos, portanto o valor configurado será somado com o valor de cada abastecimento da referida bomba. Se uma discrepância for detectada entre o valor que está fisicamente na bomba e o valor que a automação enviou, o mesmo deverá ser ajustado. Ficando a cargo do utilizador. Como isso é uma determinação do órgão fiscalizador, esta função está disponível no Concentrador Fcm. Cesna Technology | 2011 Este valor deverá ser enviado com duas casas decimais fixas sem vírgula. Permanecendo a mesma configuração como se fosse uma bomba eletrônica. unsigned char unsigned char long long Slave Bomba Total retorno = = = = 0x01;// Var com o número do Fcm Slave da Solicitação. 0x01;// Var com o número da bomba desejada. 1234578;// Var que conterá o totalizador. 0; // Recebe o retorno da função para testar se OK ou não. // Solicitação da função. retorno = FcmMaster->FcmConfigTotalizador(Slave,Bomba,Total);//2 casas decimais fixas. if(retorno != 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } 2.2.18 CmdEspecial Está função foi elaborada para possível utilização futura, quando um comando adicional for necessário para atender a especificação de alguma norma ou exigência. Terá endereços como sl, bo, e bi. Como também parâmetros “codigo” que será o código do novo comando implementado. Também três possíveis parâmetros param1, param2 e param3. Como citado, esta função não está sendo utilizada no momento, mas será descrita neste manual para caso de utilização futura já estar documentada. // Função para unsigned char unsigned char unsigned char utilização futura. Slave = 0x01;// Var com o número do Fcm Slave da Solicitação. Bomba = 0x01;// Var com o número da bomba desejada. Bico = 0x01;// Var com o número do bico desejado. Long Long Long Long Cod Param1 Param2 Param3 long retorno = 0; = = = = 0x00;// 0x00;// 0x00;// 0x00;// Var Var Var Var para para para para conter conter conter conter o o o o código do parâmetro parâmetro parâmetro futuro comando. 1 do futuro comando. 2 do futuro comando. 3 do futuro comando. // Recebe o retorno da função para testar se OK ou não. // Solicitação da função. retorno = FcmMaster->FcmCmdEspecial(Slave,Bomba,Bico,Cod,Param1,Param2,Param3); if(retorno != 1)// Testa retorno da função, se diferente de 1 erro, se igual a 1 OK. { // Rotina para tratamento de erro. return; } Cesna Technology | 2011 2.3 Retorno dos Métodos do Objeto ActiveX 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 FcmMaster.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 Fcm, podendo este entrar em modo de operação Off-Line e o Software Integrador não receber os status das bombas em tempo real devido a este detalhe. 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. 2.3.1 OnFcmMudancaDeEstado Indica o último estado em que a referida Bomba (bo) e Bico (Bi), conectadas à Fcm Slave (sl) 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.1.1 EVENTO_BOMBA_PRONTA Indica que a referida Bomba (bo), conectada à Fcm Slave (sl) está pronta para efetuar qualquer operação a ela solicitada, dentro das disponíveis. 2.3.1.2 EVENTO_BOMBA_NAO_RESPONDE Indica que ocorreu um problema de comunicação com a referida Bomba (bo), conectada à Fcm Slave (sl), ou foi solicitado um comando enquanto o abastecimento estava sendo efetuado. Dependendo da marca8 da Bomba ela pode responder ou não a este comando. 8 - Particularidades das Bombas. Cesna Technology | 2011 2.3.1.3 BOMBA_PEDE_AUTORIZACAO Indica que a referida Bomba (bo) conectada à Fcm Slave (sl) está pedindo autorização para iniciar um abastecimento. Para liberar a mesma a executar a solicitação, deve-se utilizar a função “FcmAutorizaAbastecimento”, 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.1.4 BOMBA_LIBERADA Indica que a Bomba (bo) está pronta para iniciar um abastecimento. 2.3.1.5 BOMBA_ABASTECENDO Indica que a Bomba (bo) está abastecendo no momento, ou seja, está liberando o combustível pelo bico ou mesmo está fora da posição. Existem bombas de determinadas marcas que não respondem a algumas solicitações9 neste modo. 2.3.1.6 BOMBA_ABASTECEU Indica que a referida Bomba (bo) e Bico (bico), conectadas à Fcm Slave (sl) finalizou o abastecimento. Os dados do mesmo serão obtido na função “OnFcmAbasteceu” do objeto ActiveX, descrito adiante. 2.3.1.7 BOMBA_BLOQUEADA Indica que a referida Bomba (bo), conectada à Fcm Slave (sl) está em modo de bloqueio10 para o abastecimento em curso ou não inicia um novo abastecimento. 2.3.1.8 BOMBA_DESBLOQUEADA Indica que a referida Bomba (bo), conectada à Fcm Slave (sl) saiu do modo bloqueio. 9 - Particularidades das Bombas Gilbarco. - Particularidades das Bombas Gilbarco. 10 Cesna Technology | 2011 2.3.1.9 CONSENTRADOR_ACEITOU_CONFIGURACAO Indica que a referida Fcm Slave (sl) aceitou a configuração enviada pelo Software Integrador. 2.3.1.10 BOMBA_TROCOU_PRECO Indica que a referida Bomba (bo) e Bico (bi), conectadas à Fcm Slave (sl) aceitou a novo valor de Preço por Litro enviado pela função “FcmTrocaPreco”. 2.3.1.11 BOMBA_RESERVADA_PRE_PAGO Indica que a referida Bomba (bo) e Bico (bi), conectadas à Fcm Slave (sl) recebeu com sucesso a solicitação da função “FcmProgramaPrePago” descrita anteriormente. 2.3.1.12 FALHA_NA_COMUNICACAO_COM_CONSENTRADOR Indica que a referida Fcm Slave (sl) está com problemas de comunicação com a Fcm Master USB. Isso pode ocorre devido a mau contato no cabo de comunicação entre as duas placas, ou um erro na interface USB do PC. Cesna Technology | 2011 2.3.2 OnFcmTotalizador É acionado em resposta há solicitação da função “FcmSolicitaTotalizador”, com esta é possível obter o valor do totalizador de volume da referida Bomba (bo) e Bico (bi) conectadas à Fcm Slave (sl). É 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 sl = x bo = y bi = z SE FALSO Tenta solicitar novamente. Limpa FlagTotalizador. e FcmSolicitaTotalizador(sl,bo,bi); 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. V SE VERDADEIRO Zera tempo de Espera e contador de Erro. F TempoEspera < 5s SE VERDADEIRO Existem mais endereços? F V V 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 “OnFcmTotalizador”, 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: Cesna Technology | 2011 unsigned char FlagTotalizador = 0; // Var global de indicador. //------------------------------Função do Objeto Activex -----------------------------void __fastcall TFrmMain::FcmMasterTotalizador(TObject *Sender, unsigned_char sl, unsigned_char bo, unsigned_char bi, long total, unsigned_char cd) { 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(total,TmpTotal,10);// ltoa -> Converte de ‘long’ para ‘char’ strcpy(RespTotal,TmpTotal); switch(cdtot) { case 0: // sem casa decimal, ou seja, sem vírgula. break; case 1: RespTotal[strlen(TmpTotal)-1] = ','; RespTotal[strlen(TmpTotal)] = TmpTotal[strlen(TmpTotal) - 1]; break; case 2: RespTotal[strlen(TmpTotal)-2] = ','; RespTotal[strlen(TmpTotal)-1] = TmpTotal[strlen(TmpTotal) - 2]; RespTotal[strlen(TmpTotal)] = TmpTotal[strlen(TmpTotal) - 1]; break; case 3: RespTotal[strlen(TmpTotal)-3] RespTotal[strlen(TmpTotal)-2] RespTotal[strlen(TmpTotal)-1] RespTotal[strlen(TmpTotal)] = // // // // } = ','; = TmpTotal[strlen(TmpTotal) - 3]; = TmpTotal[strlen(TmpTotal) - 2]; TmpTotal[strlen(TmpTotal) - 1]; break; } 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, como é normalmente. 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 Fcm Slave. 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 Bombas11 não respondem quando estão com status ABASTECENDO, sendo assim pode demorar a obter todos os totalizadores. Atenção: A Fcm Slave para Bomba Mecânica12 envia o totalizador igual à zero. 11 12 - Analisar Funcionamento das Bombas. - Particularidades Bomba Mecânicas. Cesna Technology | 2011 2.3.3 OnFcmVolume É acionado em resposta há solicitação da função “FcmSolicitaUltimoAbastecimento”, com esta é possível obter o último volume vendido na referida Bomba (bo), conectada à Fcm Slave (sl). //------------------------------Função do Objeto Activex -----------------------------void __fastcall TFmrFcmMaster::FcmMaster1Volume(TObject *Sender, unsigned_char sl,unsigned_char bo, unsigned_char bi, long vol, unsigned_char cd) { unsigned char char TmpVol[7]= {'NULL'};// Auxiliar para receber o volume de long para char. RespVol[7] = {'NULL'};// Auxiliar para conter o volume separado. ltoa(vol,TmpVol,10); strcpy(RespVol,TmpVol); switch(cd) { case 0: // sem casa decimal, ou seja, sem vírgula. break; case 1: RespVol[strlen(TmpVol) - 1] = ','; RespVol[strlen(TmpVol)] = TmpVol[strlen(TmpVol) - 1]; break; case 2: RespVol[strlen(TmpVol) - 2] = ','; RespVol[strlen(TmpVol)-1] = TmpVol[strlen(TmpVol) - 2]; RespVol[strlen(TmpVol)] = TmpVol[strlen(TmpVol) - 1]; break; 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]; break; } // Neste ponto vamos ter o dados recebidos já separados e com vírgula na Var RespVol. // Ex.: 999,999 Litros com cd igual a 3. } Cesna Technology | 2011 2.3.4 OnFcmPrecoPorLitro É acionado em resposta há solicitação da função “FcmSolicitaPrecoPorLitro”, com esta é possível conferir se o Preço por Litro das Bombas (bo) e Bicos (bi) conectadas à Fcm Slave (sl) 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 “FcmTrocaPreco”. Ex.: INÍCIO Altera Preço Carrega Endereços sl = X bo = Y bi = Z Preco = xxxx cd = 3 Zera contador de erro SE FALSO Tenta solicitar novamente. FcmTrocaPreco(sl,bl,bi,Preco,cd); F SE FALSO Incrementa contador de erro Número de Erros > 3 F Solicitação retornou OK? V V SE VERDADEIRO Define novos endereços e executa a solicitação. SE VERDADEIRO Limpa FlagPreco E FcmSolicitaPrecoPorLitro(sl,bl,bi); F Solicitação retornou OK? V F SE VERDADEIRO Zera tempo de Espera e Contador de Erro. V 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 Cesna Technology | 2011 Exemplo de separação dos dados desta função: unsigned char FlagPreco;// Var global para indicador //--------------------------- Função do Objeto ActiveX --------------------------------void __fastcall TFmrFcmMaster::FcmMaster1PrecoPorLitro(TObject *Sender, unsigned_char sl, unsigned_char bo, unsigned_char bi, long ppl, unsigned_char cd) { 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(ppl,TmpPpl,10); // conversão long para char strcpy(RespPpl,TmpPpl); // copia string switch(cd) { case 0: // sem casa decimal, ou seja, sem vírgula. break; case 1: RespPpl[strlen(TmpPpl) - 1] = ','; RespPpl[strlen(TmpPpl)] = TmpPpl[strlen(TmpPpl) - 1]; break; case 2: RespPpl[strlen(TmpPpl)-2] = ','; RespPpl[strlen(TmpPpl)-1] = TmpPpl[strlen(TmpPpl) - 2]; RespPpl[strlen(TmpPpl)] = TmpPpl[strlen(TmpPpl) - 1]; break; case 3: RespPpl[strlen(TmpPpl)-3] RespPpl[strlen(TmpPpl)-2] RespPpl[strlen(TmpPpl)-1] RespPpl[strlen(TmpPpl)] = = ','; = TmpPpl[strlen(TmpPpl) - 3]; = TmpPpl[strlen(TmpPpl) - 2]; TmpPpl[strlen(TmpPpl) - 1]; break; } FlagPreco = 1;// Var indicadora de recebimentos dos dados. // Após o recebimento setamos a ‘FlagPreco’ indicando para a função que solicitou o // Preco que os dados foram recebidos. E assim solicitar o próximo ou finalizar. // Neste ponto teremos os dados recebidos já separados com vírgula na Var RespPpl. //Ex.: R$ 1,234 com cd igual a 3, como é normalmente. } Devemos atentar para as mesmas observações já citadas na função ‘OnTotalizador’ a respeito de primeiro receber um valor antes de solicitar o próximo, ou aguardar o timeout de 5 segundos. Atenção: A Fcm Slave para Bomba Mecânica13 envia o preço por litro é igual à zero. 13 - Particularidades de Bombas Mecânicas. Cesna Technology | 2011 2.3.5 OnFcmAbasteceu Este retorno do método foi criado para atender as exigências do PAF-ECF, que solicita ao Concentrador Fcm 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. Logo foi necessário a inclusão de uma nova função no componente ActiveX CesnaActiveX.dll para atender esta solicitação. 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 do método OnFcmAbasteceu, é acionado quando o formato de mensagem de abastecimento configurado no Concentrador Fcm pelo comando FcmConfigConcentrador, for “0x02”. Isso indica que a referida Bomba (bo) e Bico (bi), conectadas à Fcm Slave (sl), 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 novo método é fazer o software integrador receber os dados dos abastecimentos efetuados independentemente se este abastecimento é OnLine ou Off-Line, ou seja, abastecimentos efetuados com o Concentrador Fcm comunicando com o PC ou não. E também atender as solicitações do PAF-ECF como descrito anteriormente. Cesna Technology | 2011 Exemplo de como obter os dados formatados: unsigned char char TmpVol[7] RespVol[7] = {'NULL'}; // Recebe o volume de long para char. = {'NULL'}; // Auxiliar para conter o volume separado. unsigned char char TmpTotIni[10] = {'NULL'}; // Recebe o total de long para char. RespTotIni[10] ={'NULL'}; // Aux para conter o totalizador separado. unsigned char char TmpTotFinal[10]= {'NULL'}; // Recebe o total de long para char. RespTotFinal[10]= {'NULL'}; // Aux para conter o totalizador separado. unsigned char char TmpPpl[10] RespPpl[10] = {'NULL'}; // Recebe o preço de long em char. = {'NULL'}; // Auxiliar para receber o preço com vírgula. unsigned char char TmpHora[6] RespHora[8] = {'NULL'}; // Recebe a hora de long para char. = {'0','0',':','0','0',':','0','0'};// Auxiliar resposta. unsigned char TmpData[6] = {'NULL'};// Recebe a data de long para char. char RespData[8] = {'0','0','/','0','0','/','0','0'};// Auxiliar resposta. int count = 0;// Contador auxiliar int index = 0;// Contador auxiliar 2 //--------------------------------- Volume -------------------------------------------ltoa(vol,TmpVol,10); strcpy(RespVol,TmpVol); switch(cdvol) { case 0: // sem casa decimal, ou seja, sem vírgula. break; case 1: RespVol[strlen(TmpVol) - 1] = ','; RespVol[strlen(TmpVol)] = TmpVol[strlen(TmpVol) - 1]; break; case 2: RespVol[strlen(TmpVol) - 2] = ','; RespVol[strlen(TmpVol)-1] = TmpVol[strlen(TmpVol) - 2]; RespVol[strlen(TmpVol)] = TmpVol[strlen(TmpVol) - 1]; break; 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]; break; } //----------------------------- Totalizador Inicial -----------------------------------ltoa(total_ini,TmpTotIni,10); strcpy(RespTotIni,TmpTotIni); switch(cdtot_ini) { case 0: // sem casa decimal, ou seja, sem vírgula. break; case 1: RespTotIni[strlen(TmpTotIni)-1]= ','; RespTotIni[strlen(TmpTotIni)]= TmpTotIni[strlen(TmpTotIni) - 1]; break; case 2: RespTotIni[strlen(TmpTotIni)-2]= ','; RespTotIni[strlen(TmpTotIni)-1]= TmpTotIni[strlen(TmpTotIni) - 2]; RespTotIni[strlen(TmpTotIni)] = TmpTotIni[strlen(TmpTotIni) - 1]; break; 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]; break; } Cesna Technology | 2011 //----------------------------- Totalizador Final -------------------------------------ltoa(total_final,TmpTotFim,10); strcpy(RespTotFim,TmpTotFim); switch(cdtot_final) { case 0: // sem casa decimal, ou seja, sem vírgula. break; case 1: RespTotFim[strlen(TmpTotFim)-1]= ','; RespTotFim[strlen(TmpTotFim)]= TmpTotIni[strlen(TmpTotFim) - 1]; break; case 2: RespTotFim[strlen(TmpTotFim)-2]= ','; RespTotFim[strlen(TmpTotFim)-1]= TmpTotFim[strlen(TmpTotFim) - 2]; RespTotFim[strlen(TmpTotFim)] = TmpTotFim[strlen(TmpTotFim) - 1]; break; 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]; break; } //--------------------------- Preço Por Litro -----------------------------------------ltoa(ppl,TmpPpl,10); strcpy(RespPpl,TmpPpl); switch(cdppl) { case 0: // sem casa decimal, ou seja, sem vírgula. break; case 1: RespPpl[strlen(TmpPpl) - 1] = ','; RespPpl[strlen(TmpPpl)] = TmpPpl[strlen(TmpPpl) - 1]; break; case 2: RespPpl[strlen(TmpPpl)-2] = ','; RespPpl[strlen(TmpPpl)-1] = TmpPpl[strlen(TmpPpl) - 2]; RespPpl[strlen(TmpPpl)] = TmpPpl[strlen(TmpPpl) - 1]; break; 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]; break; } //------------------------------- Hora ------------------------------------------------ltoa(hora_min_seg,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(dia_mes_ano,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. Cesna Technology | 2011 2.3.6 OnFcmVersaoFcmSlave É acionado em resposta a solicitação da função “FcmSolicitaVersaoSlave”. Normalmente é utilizado para identificar o tipo de Bomba (bo) conectada a FcmSlave (sl), também a versão do firmware da placa Fcm Slave. Facilitando assim o controle de suporte ou funções específicas para determinado modelo e marca de bomba. A variável de resposta “versao” do tipo “long” deve ser analisada de acordo com seu comprimento, se a mesma contiver quatro dígitos, o primeiro indicará o tipo de bomba. Se contiver cinco dígitos, os dois primeiros indicaram o tipo de bomba que o firmware está preparado para controlar. Exemplo: Pode ser “4 dígitos: BSVR” ou “5 dígitos: BBSVR” Onde: B: Indica o modelo da Bomba (bo) conectada à Fcm Slave (sl). S: Modelo do Firmware da Fcm Slave. V: Versão do Firmware da Fcm Slave. R: Revisão do Firmware da Fcm Slave. Os modelos disponíveis são: Indicador Tipo de Bomba Indicador Tipo de Bomba 0 NÃO USADO 9 Wayne Duplex – Minnow 1 Gilbarco 10 Mecânica Veeder 2 Wayne Duplex 11 Mecânica Pulser Eletrônico 3 Wayne Rifran 12 Wayne 3G – Minnow 4 Aspro Develco 13 Aspro Metroval 5 Simulador Cesna 14 Mecânica Polipetro 6 Mecânica Bolachão 15 Stratema 7 Wayne Minnow 16 RESERVADO 8 Wayne 3G 17 RESERVADO Tabela 1 - Modelo de Bombas no retorno Versão Fcm Slave. Cesna Technology | 2011 2.3.7 OnFcmErroDLL É acionado quando ocorre um erro no processo da FcmMaster.dll. O erro será informado neste evento. Não é comum este evento ser acionado, porém as causas podem ser: 2.3.7.1 ERRO “20” - MM_EVENTO_ERRO_LRC Indica que houve um erro de comunicação entre as placas Fcm Master USB e Fcm Slave. A conferência da mensagem não correspondeu ao número enviado pela Fcm Slave. 2.3.7.2 ERRO “21” – MM_EVENTO_MASTER_ERRO_PRT Indica que houve um erro no protocolo de comunicação entre a FcmMaster.dll e a placa Fcm Slave. 2.3.7.3 ERRO “22” – MM_EVENTO_MASTER_FINALIZOU Indica que a FcmMaster.dll finalizou seu funcionamento, liberando assim todos os recursos utilizados pela mesma. Isso pode ocorrer se um comando for enviado após o “FcmClose”. 2.3.7.4 ERRO “23” – SAIDA_EVENT OCORREU TIMEOUT Indica que o processo da FcmMaster.dll travou. Isso normalmente acontece se a função do objeto ActiveX não é retornada. Também pode ocorrer se existiu um problema com alguma função do Driver da placa Fcm Master USB, o mesmo não retornou uma função solicitada. Observação: Se este tipo de evento for acionado via Objeto ActiveX, os parâmetros de integração deveram ser analisado. Relembrar as observações indicadas nos itens anteriores deste manual. Se o problema ainda persistir, deverá solicitar informações ao Suporte Cesna. Cesna Technology | 2011 2.3.8 OnFcmEventoFcmSlave Indica se o Concentrador Fcm executou em sua rotina de funcionamento um ajuste ou correção em determinado ponto na execução do seu programa. Função utilizada somente pela Cesna Technology. 2.3.9 OnRetornoEspecial Indica a resposta ao comando “CmdEspecial”, para utilização futura. Serão retornado os parâmetros sl,bo,bi,código,param1,param2 e param3. Cesna Technology | 2011 3 DESCRIÇÃO FCMMASTER.DLL O arquivo FcmMaster.dll, foi desenvolvido para controlar, analisar e conferir os dados da placa Fcm Master USB recebidos da placa Fcm Slave. 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 Fcm Master. Este é instalado junto com o Gerenciador Fcm 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 FcmMaster.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 FcmMaster.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. Esta FcmMaster.dll está distribuída em 5 versões. V 2.X.X.X : Comunica com firmware da placa Fcm Slave V 2.X.X. V 3.X.X.X : Comunica com software Simulador de Bombas Fcm. V 4.X.X.X : Comunica com firmware da placa Fcm Slave V 4.X.X. V 5.X.X.X : Comunica com firmware da placa Fcm Slave V 5.X.X. V 6.X.X.X : Comunica com firmware da placa Fcm Slave V 6.X.X. A versão deverá ser substituída dependendo do meio utilizado. Por padrão junto com o instalador do software Gerenciador Fcm, será instalada a FcmMaster.dll V 6.X.X.X. Porém o arquivo “IntegracaoCesna.zip” contem todos os 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. Cesna Technology | 2011 4 CONCENTRADOR FCM O hardware Concentrador Fcm de Bombas de Combustível, como previamente citado na lista de notações nas primeiras páginas deste manual, engloba o conjunto Fcm Master USB, Fcm Slave, Fonte Fcm e acessórios. Este periférico 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 FcmOpen FcmMaster.dll Recebe solcitação do FcmOpen Parâmetros da chamada de função estão corretos? F V SE FALSO Retorna erro na chamada de função e FINALIZA. Existe Fcm Master USB conectada ao PC? F V SE VERDADEIRO Executa rotina de configuração da Fcm Master USB e Fcm Slave. Habilita LOOP de solcitação de Status ao Concentrador Fcm. Obteve resposta OK? V V SE FALSO Inicia Rotina de recuperação de dados e do dispositivo! F F Recuperação OK? SE VERDADEIRO Envia dados ao Software Integrador. V Dados são relevantes ao Software Integrador? F Figura 3 - Fluxograma Descrição de Funcionamento Cesna Technology | 2011 Como representado no fluxograma na figura 4, após o recebimento de um comando “FcmOpen” pela FcmMasterX.dll, será enviado o mesmo comando e parâmetros para a FcmMaster.dll. Logo esta irá configurar os parâmetros de comunicação com a Fcm Master 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 Fcm Slave utilizando um protocolo próprio de uso interno da Cesna Technology. Após a placa Fcm Slave receber as configurações necessárias, a mesma inicia o processo de gerenciamento das bombas de combustível a ela 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. Agora vamos descrever algumas opções e particularidades de funcionamento. 4.1.1 Modo On-Line É a condição normal de funcionamento do Concentrador Fcm 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 Fcm não estiver com a comunicação estabelecida com o computador onde estiver conectado ele continuará gerenciando as bombas de combustível a ele conectado. 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 mesmo estiver configurado, poderá liberar as bombas para abastecimento quando a ele solicitado. Quando a comunicação com o computador for reestabelecida, estes abastecimentos serão enviados ao Software Integrador. O Concentrador Fcm permanecerá com sua última configuração válida salva. Esta configuração será a mesma enviada no comando “FcmConfiguraSlave” citada no item 2.2.4. 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 Cesna Technology | 2011 Concentrador Fcm 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 Fcm Todas as vezes que as Bombas de combustível (bo) conectadas à Fcm Slave (sl) 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 Fcm. Este por sua vez poderá operar de três formas diferentes. São elas: A – O Concentrador Fcm 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 Fcm irá liberar a bomba de combustível para iniciar um abastecimento, somente após a confirmação do Software Integrador. Porém se o mesmo entrar em modo Off-Line irá liberar os abastecimentos e armazená-los. C – O concentrador irá liberar a bomba de combustível para abastecer, somente após receber autorização do Software Integrador. Se o mesmo estiver em modo Off-Line, não irá liberar a bomba para iniciar o abastecimento. Porém se abastecimentos estiverem em curso e o Concentrador Fcm entrar em modo Off-Line, estes serão armazenados e enviados ao Software Integrador após a comunicação ser reestabelecida. Observação: Se o posto de combustível não requerer um funcionamento diferenciado de suas bombas, recomendamos configurar o Concentrador Fcm com o modo de operação “A”, assim as bombas irão liberar mais rapidamente. A diferença está em não necessitar pedir autorização para o Software Integrador, a bomba será liberada assim que a solicitação for identificada. Cesna Technology | 2011 4.1.4 Formato Mensagem de Abastecimento O formato da mensagem, para as novas integrações deverá ser fixado como “2” para que o concentrador sempre envie a informação do totalizador inicial do abastecimento, atendendo assim as exigências do PAF-ECF. O formato “2” contém o FcmSlave (sl), Bomba (bo), Bico (bi), Volume, Totalizador de Volume Inicial, Totalizador de Volume Final, Preço por Litro, Hora e Data em todo abastecimento efetuado pela Bomba (bo) e Bico (bi) conectadas à respectiva FcmSlave (sl). Este modo deverá ser configurado após o comando FcmOpen efetuado com sucesso, pela função FcmConfigConcentrador seguindo a sequência descrita no tópico relacionado, sendo independente em cada Concentrador Fcm, ou seja, o mesmo deve ser configurado em cada Concentrador Fcm que está operando com o Software Integrador, conectados ao PC. Cesna Technology | 2011 5 OBESERVAÇÕES DAS BOMBAS DE COMBUSTÍVEL 5.1 Bomba Lógica BICO 1 BICO 1 BOMBA FÍSICA BICO 2 BICO 3 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. Cesna Technology | 2011 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 1 BICO 1 BOMBA FÍSICA BICO 2 BICO 3 A-1 | B-2 Bomba Lógica | Bomba Lógica BOMBA FÍSICA BICO 2 BICO 2 BICO 3 A-3 | B-4 Bomba Lógica | Bomba Lógica BICO 3 BICO 3 BICO 4 BICO 4 BICO 1 BICO 2 BICO 2 BOMBA FÍSICA A-5 | B-6 Bomba Lógica | Bomba Lógica BOMBA FÍSICA BICO 1 BICO 1 BICO 2 A-7 | B-8 Bomba Lógica | Bomba Lógica BICO 1 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 7, 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 até 16. Em um posto de combustível raramente existirá um endereço configurado no Concentrador Fcm sem bomba lógica correspondente, logo, o instalador é instruído a não deixar endereços vagos. Isso é recomendado pois se o Concentrador Fcm 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. Cesna Technology | 2011 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. Recomendamos que em caso de utilização de automação para Bombas Mecânicas, onde não é possível obter nenhum valor além do volume abastecido devido ao sensor instalado para esta captura, o primeiro tópico deste item seja estudado com muita atenção. Informamos também que o Concentrador Fcm 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 Mecânica Este é um modelo antigo, porém ainda existe no mercado. Possui um bloco volumétrico mecânico, ou seja, sem qualquer tipo de controle eletrônico. A solução para este tipo de bomba é utilizar um acessório chamado Pulser (Emissor de Pulsos), para capturar o volume do abastecimento, podendo ser do modelo Bolachão ou Veeder Root. Outro detalhe é a precisão do volume abastecido, se o Pulser e a bomba não estiverem bem regulados, podem ocorre pequenas diferenças, ficando a cargo do mecânico de bombas o ajuste mecânico da referida bomba. Neste modelo de bomba, sendo o Concentrador Fcm versão 4.X.X, deverá ser configurado no Concentrador Fcm o encerrante de cada bomba a ele conectado no momento da instalação. Ao valor configurado será somado o volume obtido pela captura dos pulsos de cada abastecimento efetuado na referida bomba e enviado ao Software Integrador como o parâmetro de encerrante da bomba. Não sendo responsabilidade da Cesna a manutenção correta destes dados, ficando a cargo do utilizador do hardware. A Cesna apenas disponibiliza esta função para utilização seguindo recomendações do PAF (Programa de Aplicativo Fiscal). Cesna Technology | 2011 Também neste modelo de bomba o preço por litro de cada abastecimento virá com valor zero, sendo possível somente obter o volume de acordo com os pulsos do abastecimento e o encerrante pela soma do valor configurado com o volume de cada abastecimento. Funções não Suportadas: Firmware V 2.X.X Solicita Totalizador. Solicita Preço por Litro. Troca Preço por Litro. Autoriza Abastecimento14. Trava e Destrava14. Abastecimento Pré-Pago14. Funções não Suportadas: Firmware V 4.X.X Solicita Preço por Litro. Troca Preço por Litro. Autoriza Abastecimento15. Trava e Destrava14. Abastecimento Pré-Pago14. 14 15 Suportados e disponíveis somente em versões Marítimo e Caminhão Tanque. Suportados e disponíveis somente em versões Marítimo e Caminhão Tanque. Cesna Technology | 2011 5.2.2 Wayne Todos os modelos de bombas Wayne aqui relacionados enviam em tempo de abastecimento, ou seja, em “BOMBA_ABASTECENDO”, dados de totalizadores, Preço por Litro e Volume. Quando a bomba estiver no estado “MM EVENTO BOMBA_ABASTECENDO”: Se solicitado a função “FcmSolicitaUltimoAbastecimento”, 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 “FcmSolicitaTotalizador”, 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 “FcmTravaBomba”, irá interromper imediatamente a saída de combustível pelo bico da bomba. Permanecendo neste estado, até que o comando “FcmDestravaBomba” seja recebido. Somente em bombas que suportam esta opção. 5.2.2.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. Cesna Technology | 2011 5.2.2.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.2.3 Wayne Duplex Esta é uma versão posterior a Wayne Rifran. Suporta todas as funções. 5.2.2.4 Wayne 3G Esta é a bomba da marca Wayne mais atual. Suporta todas as funções. 5.2.3 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, “EVENTO_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 SL_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 Fcm. Cesna Technology | 2011 Quando a bomba estiver no estado “MM EVENTO BOMBA_ABASTECENDO”: Se solicitado a função “FcmSolicitaUltimoAbastecimento”, “FcmSolicitaTotalizador” ou “FcmSolicitaPrecoPorLitro”, este modelo de bomba não irá responder aos comandos solicitados neste modo abastecendo. Logo irá retornar na função “OnFcmMudancaDeEstado”, “EVENTO_BOMBA_NAO_RESPONDE”. Se solicitado a função “FcmTravaBomba”, 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 e pedirá autorização ao Software Integrador para abastecimento. Se o mesmo estiver configurado para modo de operação B ou C. Se o comando autoriza “FcmAutorizaAbastecimento” for enviado pelo Software Integrador a bomba irá retornar a liberar combustível pelo referente bico. Se o comando “FcmAutorizaAbastecimento” for enviado para a bomba a mesma permanecerá em modo liberada “BOMBA_LIBERADA_PARA_ABASTECER”, neste modo ela também não aceita nenhum comando. Sendo que se desejar cancelar a liberação, o comando “FcmTravaBomba” deverá ser enviado, com isso a bomba retornará ao estado “EVENTO_BOMBA_PRONTA”, logo aceitará qualquer comando. 5.2.4 Bomba Stratema Esta bomba possui as mesmas observações da bomba Gilbarco, porém ao chamar o comando “FcmTravaBomba”, se esta estiver em modo abastecendo, irá travar a bomba e será necessário enviar o comando “FcmDestravaBomba” para a mesma voltar a liberar combustível. 5.2.5 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 (m3). Cesna Technology | 2011 6 DICAS PARA SOFTWARE INTEGRADOR 6.1 Iniciando a Comunicação com o Concentrador Fcm É necessário utilizar alguns pequenos atrasos de tempo (delay) nos comandos enviados a CesnaActiveX.dll, para que todo o processo de inicialização e configuração do hardware ocorra com sucesso. Recomendamos que este delay seja de pelo menos 500ms. Os comandos abaixo deverão ser executados nesta ordem. Pontos onde é recomendável a utilização de “delay”: FcmMaster1->FcmOpen(1). FcmMaster1->FcmSetNumSlaves(1). FcmMaster1->FcmConfigConcentrador(1,Núm de Bombas, Modo Operação, FormatoMsgAbast). delay(). FcmMaster1->FcmOpen(2). FcmMaster1->FcmSetNumSlaves(2). FcmMaster1->FcmConfigConcentrador(2,Núm de Bombas, Modo Operação, FormatoMsgAbast). delay(). FcmMaster1->FcmOpen(3). FcmMaster1->FcmSetNumSlaves(3). FcmMaster1->FcmConfigConcentrador(3,Núm de Bombas, Modo Operação, FormatoMsgAbast). delay(). Obs.: A forma de como os comandos devem ser chamados e tratados, estão na seção FcmConfigConcentradorFcm. 6.2 Solicitação de Encerrantes Conforme descrito na seção FcmSolicitaTotalizador, deverá primeiro receber a resposta do comando anterior, para após solicitar o comando a outra bomba. Ex.: Bomba 1: CMD SOLICITA TOTALIZADOR SL_BO_BI 1011 MM_EVENTO_BOMBA_ENVIOU_TOTAL SL_BO_BI 1011 LPARAM XXXXXXXX Bomba 2: CMD SOLICITA TOTALIZADOR SL_BO_BI 1021 MM_EVENTO_BOMBA_ENVIOU_TOTAL SL_BO_BI 1021 LPARAM XXXXXXXX Cesna Technology | 2011 6.3 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 Fcm. 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. O grande detalhe é que 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 Fcm, 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. Cesna Technology | 2011 6.4 Autorização Automática Quando o Concentrador Fcm operar em modo de operação B ou C, todas as vezes que se desejar efetuar um abastecimento, a respectiva bomba irá solicitar autorização para iniciar o referido abastecimento para o Concentrador Fcm e o mesmo ao Software Integrador. É possível enviar o comando “FcmAutorizaAbastecimento” antes mesmo da bomba solicitar, logo 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 Fcm, 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 “FcmTravaBomba” para a mesma voltar para o estado de “BOMBA_PRONTA”. 6.5 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 FcmSlave (sl), 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 Nº do Bico na Pista Bico 1 Bico 2 Bico 3 Bico 4 ... Bico n Endereço enviado pelo Concentrador Fcm Fcm Slave (sl) Bomba (bo) Bico (bi) 1 01 1 1 01 2 1 02 1 2 01 1 ... ... ... N nn n Tabela 2 - Bicos de Abastecimento Cesna Technology | 2011 6.6 Atualização do Componente CesnaActiveX.dll Esta dica servirá para clientes que já possuem o Software Integrador integrado com o Concentrador Fcm, e informa o reduzido impacto de software para atualização. Primeiro o componente FcmMasterX.dll anterior deverá ser desinstalado, assim como o software FcmTeste ou Gerenciador Fcm anterior. Na pasta do sistema não deverão existir nenhum arquivo FcmMaster.dll, CesnaActiveX.dll ou CesnaActiveX.ocx, que devem ser removidos com a desinstalação do software FcmTeste ou Gerenciador Fcm. Caso isso não ocorra verifique se o software foi removido corretamente, se ainda permanecer exclua os arquivos. Após os componentes e softwares anteriores removidos, deverá ser instalado o novo componente, para isso instale o software Gerenciador Fcm que está contido no arquivo “IntegracaoCesna.zip”, baixado do site da Cesna Technology na área de download restrito, atualizado. 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. Cesna Technology | 2011 Para 64 bits: Figura 8 - Registro em Windows 64 bits. Para atualização em campo, o software FcmTeste ou Gerenciador Cesna deverá ser desinstalado, dependendo do qual houver instalado. A versão atualizada deverá ser pega no site da Cesna Technology no arquivo “instaladores.zip” (senha para descompactação: activex). E ao instalar o software Gerenciador Cesna atualizado deve-se selecionar a FcmMaster.dll de acordo com a versão do firmware da placa Fcm Slave. Após estes passos deve-se abrir o Gerenciador Fcm e testar a comunicação com o hardware Concentrador Fcm. Depois de testado pode-se atualizar o software integrador e rodar o programa. Após isso efetuado estará tudo correto para funcionamento normal com as novas funções. Cesna Technology | 2011 APÊNDICE A Disponibilizamos formas de importação de componentes, entre outras demonstrações e procedimento de configuração, em vídeos no site do youtube. Desta forma visamos uma melhor demonstração dos processos, sendo possível um mais rápido entendimento do assunto de cada vídeo. Para acessar os vídeos, solicitamos acessar via internet o link www.youtube.com/cesnatechnology. Lá estes procedimentos estão disponíveis para visualização. Informamos que algumas IDE’S, principalmente nos ambientes com linguagem Delphi ou C++, são similares na forma de importação do Objeto ActiveX. Por exemplo, para IDE Borland Delphi 7, a forma de importação do componente é similar para Borland C++ Builder 6. Sendo assim, disponibilizamos apenas o exemplo em Borland Delphi 7, pois o desenvolvedor conseguirá basear-se sem maiores problemas para a importação do objeto em Borland C++ Builder 6. O mesmo acontece para a importação do objeto na IDE Embarcadero® C++ Builder® XE, onde foi disponibilizado o vídeo em C++, mas a forma de importação é a mesma para Embarcadero® Delphi® XE, sem maiores dificuldades para o desenvolvedor basear-se neste vídeo para Deplhi. O procedimento é o mesmo para CodeGearTM Deplhi® 2007. Disponibilizamos também importação do objeto na IDE Visual Studio 6 e também Visual Studio 2008. Existem exemplos de integração nessas IDE’S e linguagens acimas citadas disponibilizados no arquivo “integracaofcm.zip”, na pasta exemplos de integração. Cesna Technology | 2011