a y - central.netsof.com.brcentral.netsof.com.br/baixar/cesna/manuais/manual_desenvolvedores... ·...
TRANSCRIPT
Rua Irati, 131 - Santa Quitéria Curitiba/PR - CEP: 80310-150
TELEFONE/FAX: (41) 3013 6670 – (41) 3013 6681 www.cesna.com.br
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
Cesna Technology | 2011
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 Master = 0x01; // Var com o número do Fcm Master USB
long retorno = 0; // 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 Master = 0x01; // Var com o número do Fcm Master USB
long retorno = 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 - Modo de Operação. 2 - Formato Mensagem de Abastecimento.
Cesna Technology | 2011
unsigned char Master = 0; // Var com o número do Fcm Master USB
unsigned char Slave = 0; // Var com o número do FcmSlave;
unsigned char ModoOperacao = 0; // Var com o modo de operação escolhido. Em hex.
unsigned char Bomba = 0; // Var com o número de bombas existentes.
unsigned char FormatoMsgAbast= 0; // Var para o formato da Msg de abastecimento.
long retorno = 0; // 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 Slave = 0x01; // Var com o número do Fcm Slave da Solicitação
unsigned char Bomba = 0x01; // Var com o número da bomba desejada.
unsigned char Bico = 0x01; // Var com o número do bico desejado.
long retorno = 0; // Retorno da função para testar se OK ou não.
// Solicitação da função.
retorno = 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 Slave = 0x01;// Var com o número do Fcm Slave da Solicitação
unsigned char Bomba = 0x01;// Var com o número da bomba desejada.
long retorno = 0; // Recebe o retorno da função para testar se OK ou não.
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. 5 - BOMBA_PEDE_AUTORIZACAO. 6 - DICAS PARA SOFTWARE INTEGRADOR.
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 Slave = 0x01; // Var com o número do Fcm Slave da Solicitação
unsigned char Bomba = 0x01; // Var com o número da bomba desejada.
long retorno = 0; // Recebe o retorno da função para testar se OK ou não.
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 Slave = 0x01;// Var com o número do Fcm Slave da Solicitação
unsigned char Bomba = 0x01;// Var com o número da bomba desejada.
unsigned char Bico = 0x01;// Var com o número do bico desejado.
long retorno = 0; // Recebe o retorno da função para testar se OK ou não.
// Solicitação da função.
retorno = 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 char Slave = 0x01;// Var com o número do Fcm Slave da Solicitação
unsigned char Bomba = 0x01;// Var com o número da bomba desejada.
unsigned char Bico = 0x01;// Var com o número do bico desejado.
unsigned char CD = 0x03; // Var com o número de casas decimais.
long Preco = 1290;// Var com o Preço desejado sem virgula.
long retorno = 0; // Recebe o retorno da função para testar se OK ou não.
// Solicitação da função.
retorno = 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 Slave = 0x01;// Var com o número do Fcm Slave da Solicitação
unsigned char Bomba = 0x01;// Var com o número da bomba desejada.
unsigned char Bico = 0x01;// Var com o número do bico desejado.
long retorno = 0; // Recebe o retorno da função para testar se OK ou não.
// Solicitação da função.
retorno = 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 Slave = 0x01;// Var com o número do Fcm Slave da Solicitação
unsigned char Bomba = 0x01;// Var com o número da bomba desejada.
unsigned char Bico = 0x01;// Var com o número do bico desejado.
long retorno = 0; // Recebe o retorno da função para testar se OK ou não.
// Solicitação da função.
retorno = 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 char Slave = 0x01;// Var com o número do Fcm Slave da Solicitação
unsigned char Bomba = 0x01;// Var com o número da bomba desejada.
unsigned char Bico = 0x01;// Var com o número do bico desejado.
Unsigned char CD = 0x03;// Var com o número de casas decimais.
long Volume = 10000;// Var com o Volume desejado sem virgula.
long retorno = 0; // Recebe o retorno da função para testar se OK 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 Slave = 0x01;// Var com o número do Fcm Slave da Solicitação.
long 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 Slave = 0x01;// Var com o número do Fcm Slave da Solicitação.
unsigned char Bomba = 0x01;// Var com o número da bomba desejada.
long retorno = 0; // Recebe o retorno da função para testar se OK ou não.
// Solicitação da função. Se bomba for ‘0x00’, será enviado 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 Slave = 0x01;// Var com o número do Fcm Slave da Solicitação.
unsigned char Bomba = 0x01;// Var com o número da bomba desejada.
long Total = 1234578;// Var que conterá o totalizador.
long retorno = 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 utilização futura.
unsigned char Slave = 0x01;// Var com o número do Fcm Slave da Solicitação.
unsigned char Bomba = 0x01;// Var com o número da bomba desejada.
unsigned char Bico = 0x01;// Var com o número do bico desejado.
Long Cod = 0x00;// Var para conter o código do futuro comando.
Long Param1 = 0x00;// Var para conter o parâmetro 1 do futuro comando.
Long Param2 = 0x00;// Var para conter o parâmetro 2 do futuro comando.
Long Param3 = 0x00;// Var para conter o parâmetro 3 do futuro comando.
long retorno = 0; // 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. 10 - Particularidades das Bombas Gilbarco.
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ÍCIOFunção Obtem Totalizadores
Carrega Endereçossl = xbo = ybi = z
Limpa FlagTotalizador.e
FcmSolicitaTotalizador(sl,bo,bi);
Solicitação retornou OK?
SE FALSOIncrementa
contador de erroF
Número de Erros > 3
SE FALSOTenta solicitar novamente.
F
SE VERDADEIRODefine novos endereços e
executa a solicitação.
V
SE VERDADEIROZera tempo de
Espera e contador de Erro.
V
TempoEspera < 5s
SE VERDADEIROFlagTotalizador OK?
V
SE FALSOAtualiza tempo de
espera.F
F
SE VERDADEIROExistem mais endereços?
V
SE FALSOFIM
F
V
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] = TmpTotal[strlen(TmpTotal) - 3];
RespTotal[strlen(TmpTotal)-1] = TmpTotal[strlen(TmpTotal) - 2];
RespTotal[strlen(TmpTotal)] = 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 - Analisar Funcionamento das Bombas. 12 - 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 TmpVol[7]= {'NULL'};// Auxiliar para receber o volume de long para char.
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ÍCIOAltera Preço
Carrega Endereçossl = Xbo = Ybi = Z
Preco = xxxxcd = 3
Zera contador de erro
FcmTrocaPreco(sl,bl,bi,Preco,cd);
Solicitação retornou OK?
SE FALSOIncrementa
contador de erroF
Número de Erros > 3
SE FALSOTenta solicitar novamente.
F
SE VERDADEIRODefine novos endereços e
executa a solicitação.
V
SE VERDADEIROZera tempo de
Espera e
Contador de Erro.
TempoEspera < 5s
SE VERDADEIROFlagPreco OK?
V
SE FALSOAtualiza tempo de
espera.F
SE VERDADEIROExistem mais endereços?
SE FALSOFIM
F
SE VERDADEIROLimpa FlagPreco
EFcmSolicitaPrecoPorLitro(sl,bl,bi);
V
Solicitação retornou OK?
V
F
SE VERDADEIROPreco Obtido é igual no
sistema?V
F
F
V
V
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] = TmpPpl[strlen(TmpPpl) - 3];
RespPpl[strlen(TmpPpl)-1] = TmpPpl[strlen(TmpPpl) - 2];
RespPpl[strlen(TmpPpl)] = 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 TmpVol[7] = {'NULL'}; // Recebe o volume de long para char.
char RespVol[7] = {'NULL'}; // Auxiliar para conter o volume separado.
unsigned char TmpTotIni[10] = {'NULL'}; // Recebe o total de long para char.
char RespTotIni[10] ={'NULL'}; // Aux para conter o totalizador separado.
unsigned char TmpTotFinal[10]= {'NULL'}; // Recebe o total de long para char.
char RespTotFinal[10]= {'NULL'}; // Aux para conter o totalizador separado.
unsigned char TmpPpl[10] = {'NULL'}; // Recebe o preço de long em char.
char RespPpl[10] = {'NULL'}; // Auxiliar para receber o preço com vírgula.
unsigned char TmpHora[6] = {'NULL'}; // Recebe a hora de long para char.
char RespHora[8] = {'0','0',':','0','0',':','0','0'};// 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ÍCIOSolicitado para a CesnaActiveX.dll
o Cmd FcmOpen
Dados são relevantes ao Software Integrador?
Existe Fcm Master USB conectada ao PC?
SE VERDADEIROEnvia dados ao
Software Integrador.
SE VERDADEIROExecuta rotina de configuração
da Fcm Master USB e Fcm Slave.
FcmMaster.dll Recebe solcitação do FcmOpen
SE FALSORetorna erro na chamada
de função e FINALIZA.F
Parâmetros da chamada de função estão corretos?
F
V
V
Habilita LOOP de solcitação de Status ao Concentrador Fcm.
V
Obteve resposta OK?
SE FALSOInicia Rotina de
recuperação de dados e do dispositivo!
F
Recuperação OK?
F
V
V
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
BOMBA FÍSICA
A | BBomba Lógica | Bomba Lógica
BICO 1
BICO 2
BICO 3
BICO 4
BICO 1
BICO 2
BICO 3
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.
BOMBA FÍSICA
A - 1 | B - 2Bomba Lógica | Bomba Lógica
BICO 1
BICO 2
BICO 3
BICO 4
BICO 1
BICO 2
BICO 3
BICO 4
BOMBA FÍSICA
A - 3 | B - 4Bomba Lógica | Bomba Lógica
BICO 1
BICO 2
BICO 3
BICO 1
BICO 2
BICO 3
BOMBA FÍSICA
A - 5 | B - 6Bomba Lógica | Bomba Lógica
BICO 1
BICO 2
BICO 1
BICO 2
BOMBA FÍSICA
A - 7 | B - 8Bomba Lógica | Bomba Lógica
BICO 1BICO 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 Suportados e disponíveis somente em versões Marítimo e Caminhão Tanque. 15 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 Endereço enviado pelo Concentrador Fcm
Nº do Bico na Pista Fcm Slave (sl) Bomba (bo) Bico (bi)
Bico 1 1 01 1
Bico 2 1 01 2
Bico 3 1 02 1
Bico 4 2 01 1
... ... ... ...
Bico n 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.