A Líder Balanças apresenta a sua API (Application Programming Interface ou Interface de Programação para Aplicações), a qual é composta de um arquivo indicador.dll (Dynamic Link Library ou Biblioteca dinâmica).
A aplicação se destina a desenvolvedores de software, para que possam vir a realizar aplicações em diversas linguagens de programação, como por exemplo Delphi, C, C++, Java e outras e que através destas, consigam se comunicar com os produtos da Líder Balanças através da chamada a API indicador.dll em seus softwares.
O arquivo de API nada mais é do que um conjunto de rotinas e padrões de programação para acesso por um software.
As principais funções para as quais a API foi desenvolvida e se aplica são:
int openSerial ( const char* port, int baudRate, int dataBits, int stopBits, int parity ); // Abre comunicação Serial
int openTcp ( const char* ip , int port ); // Abre comunicação TCP
int isOpen ( ); // Verifica se a comunicação está aberta
int close ( ); // Fecha a comunicação Serial ou TCP
int zerar ( ); // Zera o indicador
int tarar ( ); // Tara Semiautomatica
int tararManual ( int tara ); // Tara Manual
int imprimir_calcularMedia( ); // Imprimir ou calcula a média (caso o calculo do peso médio estiver ativado)
int perguntarPeso ( ); // Pergunta o peso manualmente (quando F303 = 0)
double getPesoLiquido ( ); // Obtem o peso liquido
double getPesoBruto ( ); // Obtem o peso bruto
double getTara ( ); // Obtem a tara
int getStatusBalanca ( ); // Obtem o status da balanca
int getUnidadeMedida ( ); // Obtem a unidade do indicador
int isModoContadoraDePecas ( ); // Verifica se o indicador esta no modo contadora de pecas
int getProtocolo ( ); // Obtem o protocolo do indicador
int getStatusBateriaIndicador ( ); // Obtem o status da bateria do indicador
int getNivelBateriaIndicador ( ); // Obtem o nivel da bateria do indicador
int getNivelBateriaTransmissorTx1 ( ); // Obtem o nivel da bateria do TransmissorTx1
int getNivelBateriaTransmissorTx2 ( ); // Obtem o nivel da bateria do TransmissorTx2
// Função para iniciar cadastro na tabela de produtos
int ERF_tabelaProduto ( ); // Esta função deve ser chamada para de evitar lacunas
// na memória e mau funcionamento
int cadastrarProduto ( char* codigo, char* descricao );
int alterarProduto ( char* codigo, char* descricao );
int deletarProduto ( char* codigo );
// Função para iniciar tabela nova (sobrescreve tabela do indicador)
int EXC_iniciarTabelaProduto ( );
int EXC_cadastrarProduto ( char* codigo, char* descricao );
int EXC_finalizarTabelaProduto( int quantidadeProdutosTabelaEXC );
char* getTabelaProduto ( ); // Retorna uma string com a tabela do indicador
int deletarTabelaProduto ( ); // Exclui/limpa a tabela do indicador
char* setConfiguracaoIndicador ( int funcao, char* input ); // funcao = codigo do comando
char* getConfiguracaoIndicador ( int funcao ); // retorna o valor atual da configuração
int saveConfiguracaoIndicador ( ); // Salva todas as configurações feitas
char* gerarRelatorio ( int tipo, char* input );
char* getUsuarioById ( int id ); // Retorna o nome do usuário do ID especificado
char* setUsuario ( char* senhaMenu, int idUsuario, char* senhaUsuario, char* nomeUsuario ); // Salva usuário
Obs.: Todas as funções correm o risco de demorarem para terem um retorno (por isso possuem o retorno de TIMEOUT), com exceção das funções isOpen() e todas as funções da categoria INFORMAÇÕES DA BALANÇA que retornam quase que imediatamente seus valores, já que elas não dependem diretamente da velocidade de comunicação com o indicador. Dessa forma, recomendo realizar as chamadas de algumas das funções de forma assíncrona para evitar uma lentidão em sua aplicação, de qualquer forma, realize alguns testes das funções em sua aplicação e verifique se há realmente a necessidade de chamá-las de forma assíncrona em uma nova thread.
Para que a DLL seja usada corretamente, é necessário que uma comunicação com um Indicador 2051 sejá estabelecida corretamente por meio das funções openSerial ou openTcp. Dessas duas funções de abertura de comunicação, na primeira (Serial), deve-se atentar aos parâmetros passados a função, pois, mesmo que ela tenha um retorno 1, não significa necessariamente que a conexão foi estabelecida corretamente, tanto os parâmetros da função quanto da comunicação serial configurada no Indicador devem estar iguais(baudrate, databits, stopbits e paridade).
No momento em que a comunicação é iniciada, uma thread é utilizada para monitorar e coletar constantemente os dados enviados pelo Indicador. Para encerrar a comunicação, tanto serial quanto TCP, basta chamar a função close, que encerrará a thread de monitoramento e fechrá a comunicação.
| FUNÇÃO | PARÂMETROS | RETORNO |
|---|---|---|
| openSerial |
port [char*] : porta serial baudRate [int] : baudRate da comunicação dataBits [int] : bits de dados, 7 ou 8 stopBits [int] : bits de parada, 1 ou 2 parity [int] : 1 = odd; 2 = even; 0 = none |
int: 1 : Ok, Sucesso 0 : Erro/falha -1 : Erro, Timeout -2 : Erro, algum dos parâmetros é inválido -3 : Erro, falha na alocação de memória -4 : Erro, operação impedida, pois a comunicação já está aberta |
| openTcp |
ip [char*] : endereço IP port [int] : número da porta TCP |
|
| close | void |
int: 1 : Ok, Sucesso 0 : Erro/falha -1 : Erro, Timeout -5 : Erro, operação impedida, pois a comunicação já está fechada |
| isOpen | void |
int: 2 : True - TCP 1 : True - Serial 0 : False |
| FUNÇÃO | PARÂMETROS | RETORNO |
|---|---|---|
| zerar | void |
int: 200 : Ok, Sucesso -200 : Erro/falha -1 : Erro, Timeout -5 : Erro, operação impedida, pois a comunicação está fechada |
| tarar | void |
int: 1 : Ok, Sucesso 100 : Ok, Tara Semiautomática 101 : Ok, Limpeza de tara manual 102 : Ok, Tara sucessiva 103 : Ok, Limpeza de tara 104 : Ok, Tara manual 0 : Erro/falha -100 : Erro de Tara, peso maior do que a capacidade -101 : Erro de Tara, há tara ativa -102 : Erro de Tara, há tara automática ativa -103 : Erro de Tara, tara manual sendo realizada com peso na célula -104 : Erro de Tara, peso de pico ativo -105 : Erro de Tara, tara com peso nulo -106 : Erro de Tara, tara sucessiva sem peso -107 : Erro de Tara, tara com peso negativo -1 : Erro, Timeout -2 : Erro, algum dos parâmetros é inválido -5 : Erro, operação impedida, pois a comunicação está fechada |
| tararManual |
tara [int] : valor da tara(em gramas) |
|
| imprimir_calcularMedia | void |
int: 301 : Ok, Sucesso para a solicitação do cálculo da média 300 : Ok, Sucesso para a solicitação de impressão -300 : Erro/falha -1 : Erro, Timeout -5 : Erro, operação impedida, pois a comunicação está fechada |
| perguntarPeso | void |
int: 1 : Ok, Sucesso 0 : Erro/falha -1 : Erro, Timeout -5 : Erro, operação impedida, pois a comunicação está fechada |
Os valores do pesoLiquido, pesoBruto e tara devem ser utilizados juntos de outros 2 valores: o statusBalanca e o protocolo.
| FUNÇÃO | PARÂMETROS | RETORNO |
|---|---|---|
| getPesoLiquido | void | double: Valor como número de ponto flutuante. |
| getPesoBruto | void | |
| getTara | void | |
| getStatusBalanca | void |
int: -3 : Peso em Excesso Positivo -2 : Peso em Excesso Negativo -1 : Estado da balança Desconhecido 0 : Peso Estável 1 : Peso Instável 2 : Valor de Pico 3 : Peso Médio 4 : Aguardando 5 : Perda de Comunicação 6 : Imprimindo |
| getUnidadeMedida | void |
int: -1 : Desconhecido 0 : kN 1 : lb 2 : kg |
| isModoContadoraDePecas | void |
int: 0 : False 1 : True |
| getProtocolo | void |
int: -1 : Protocolo desconhecido 0 : Protocolo Líder 1 1 : Protocolo Líder 2 2 : Protocolo Líder 3 3 : Protocolo Líder 4 |
| getStatusBateriaIndicador | void |
int: -1 : Desconhecido 0 : Carregando 1 : Em bateria 2 : Carga Completa |
| getNivelBateriaIndicador | void |
int: -1 : Desconhecido 0 : Baixa 1 : Regular 2 : Boa 3 : Completa |
| getNivelBateriaTransmissorTx1/td> | void | |
| getNivelBateriaTransmissorTx2 | void |
Para cadastrar Código e Produto na tabela do Indicador temos 2 conjuntos de funções para fins diferentes:
Fornecem as operações básicas de manipulação da tabela de produtos do Indicador, cadastrar, alterar e deletar.
Fornecem uma forma de cadastrar uma nova tabela que irá sobrescrever toda a tabela do indicador, ou seja, qualquer registro que o indicador tenha, será perdido com outro registro novo sendo escrito por cima.
| FUNÇÃO | PARÂMETROS | RETORNO |
|---|---|---|
| ERF_tabelaProduto | void |
int: 1 : Ok, Sucesso 0 : Erro/falha -1 : Erro, Timeout -5 : Erro, operação impedida, pois a comunicação está fechada |
| EXC_iniciarTabelaProduto | void | |
| cadastrarProduto |
codigo [char*]: código de até 14 dígitos. descricao [char*]: descrição do produto de até 21 caracteres |
int: 1 : Ok, Sucesso 0 : Erro/falha -1 : Erro, Timeout -2 : Erro, algum dos parâmetros é inválido -5 : Erro, operação impedida, pois a comunicação está fechada |
| alterarProduto |
codigo [char*]: código de até 14 dígitos do produto a ser alterado. descricao [char*]: nova descrição do produto de até 21 caracteres |
|
| deletarProduto |
codigo [char*]: código de até 14 dígitos do produto a ser deletado |
|
| EXC_cadastrarProduto |
codigo [char*]: código de até 14 dígitos do produto a ser alterado. descricao [char*]: nova descrição do produto de até 21 caracteres |
|
| EXC_finalizarTabelaProduto |
quantidadeProdutosTabelaEXC [int]: Quantidade de produtos inseridos desde o inicio da tabela nova. |
|
| deletarTabelaProduto | void | |
| getTabelaProduto | void |
char*: String contendo todos os produtos cadastrados, no formato: Sendo N = total de produtos cadastrados
"#ACKRWCP,{N}\n
#RWCP,{codigoProduto1},{descricaoProduto1}\n #RWCP,{codigoProduto2},{descricaoProduto2}\n ... #RWCP,{codigoProdutoN-1},{descricaoProdutoN-1}\n #RWCP,{codigoProdutoN},{descricaoProdutoN}" -------------------------------------------------- Ou uma String contendo o erro, no formato: "#ERRO: {codigoErro}" codigoErro = 0: Erro/falha codigoErro = -1: Erro, Timeout codigoErro = -3: Erro, falha na alocação de memória codigoErro = -5: Erro, operação impedida, pois a comunicação está fechada |
Ao chamar a função setConfiguracaoIndicador() alterando alguma configuração do Indicador, esta alteração é confirmada pelo próprio retorno da função, porém, ela só entra em vigência para o Indicador ao salvá-la com a função saveConfiguracaoIndicador(), antes disso, a alteração permanece na memória temporária do Indicador aguardando o comando de salvar. Dessa forma, essas alterações podem ser perdidas se a memória temporária do Indicador for apagada (normalmente ocorre quando o Indicador é reiniciado ou resetado) antes dela passar as alterações para a memória permanente.
| FUNÇÃO | PARÂMETROS | RETORNO |
|---|---|---|
| setConfiguracaoIndicador |
funcao [int]: número da configuração input [char*]: novo valor da configuração: (confira a tabela de CONFIGURAÇÃO DO INDICADOR PELA DLL para mais detalhes) |
char*: String contendo o valor da configuração, no formato: "#F{funcao}: {valor}" (confira a tabela de CONFIGURAÇÃO DO INDICADOR PELA DLL para mais detalhes) -------------------------------------------------- Ou uma String contendo o erro, no formato: "#ERRO: {codigoErro}" codigoErro = 0: Erro/falha codigoErro = -1: Erro, Timeout codigoErro = -3: Erro, falha na alocação de memória codigoErro = -5: Erro, operação impedida, pois a comunicação está fechada |
| getConfiguracaoIndicador |
funcao [int]: número da configuração (confira a tabela de CONFIGURAÇÃO DO INDICADOR PELA DLL para mais detalhes) |
|
| saveConfiguracaoIndicador | void |
int: 1 : Ok, Sucesso 0 : Erro/falha -1 : Erro, Timeout -5 : Erro, operação impedida, pois a comunicação está fechada |
| CONFIGURAÇÃO DO INDICADOR PELA DLL | |||
|---|---|---|---|
| NÚMERO DA FUNÇÃO | DESCRIÇÃO | STRING DE INPUT | STRING DE RETORNO |
| 100 | Nível de filtragem digital |
"1" => Nível 1 => Cargas estáticas sem variação "2" => Nível 2 => Cargas estáticas com pouca variação "3" => Nível 3 => Cargas estáticas ou oscilantes com pouca variação (Padrão) "4" => Nível 4 => Cargas oscilantes com variação "5" => Nível 5 => Cargas oscilantes ou líquidas com muita variação |
"#F100, {valorInt}" |
| 102 | Auto Zero ao Ligar |
"0" => Desligado (Mantem último zero antes de desligar) "1" => Ligado (Padrão) |
"#F102, {valorInt}" |
| 103 | Manutenção automática de Zero |
"0" => Desligado (O zero irá variar com oscilações da célula de carga) "1" => Ligado |
"#F103, {valorInt}" |
| 104 | Indicação de Peso |
"0" => kN (Quilo newton) "1" => lb (Libras) "2" => kg (Quilogramas) (Padrão) |
"#F104, {valorInt}" |
| 105 | Tara Sucessiva |
"0" => Desligado (Padrão) "1" => Ligado |
"#F105, {valorInt}" |
| 106 | Tara automática |
"0" => Desligado (Padrão) "1" => Ligado |
"#F106, {valorInt}" |
| 107 | Limpeza automática de Tara ao ficar em zero por 1 segundo |
"0" => Desligado "1" => Ligado (Padrão) |
"#F107, {valorInt}" |
| 108 | Limpeza de tara manual |
"0" => Desligado (Padrão) "1" => Ligado |
"#F108, {valorInt}" |
| 110 | Modo de funcionamento |
"0" => Pesagem Continua (Padrão) "1" => Retém Valor Pico "2" => Pressiona Imprimir para calcular a média |
"#F110, {valorInt}" |
| 112 | Troca de senha do Menu | "{senhaMenuAtual},{senhaMenuNova}" => senha atual e senha nova do Menu de Configurações do Indicador separadas por vírgula |
"#F112, OK" ou "#F112, ERRO" |
| 114 | Número de dígitos do código do produto |
"0" => 6 dígitos (Padrão) "1" => 14 dígitos |
"#F114, {valorInt}" |
| 115 | Tempo para calcular média de peso (quando F110 = 2) |
"1" => 1 segundo "2" => 1.5 segundos "3" => 2 segundos "4" => 2.5 segundos "5" => 3 segundos (Padrão) "6" => 3.5 segundos "7" => 4 segundos "8" => 4.5 segundos "9" => 5 segundos |
"#F115, {valorInt}" |
| 117 | Modo Pesagem Reversa |
"0" => Desligado (Padrão) "1" => Ligado |
"#F117, {valorInt}" |
| 118 | Habilitar Senha Para Usuários |
"0" => Desligado (Padrão) "1" => Ligado |
"#F118, {valorInt}" |
| 120 | Corrigir Zero Negativo |
"0" => Desligado (Padrão) "1" => Ligado |
"#F120, {valorInt}" |
| 200 | Tipo de impressora |
"0" => Sem impressora (Padrão) "1" => LX300 "2" => P40 "3" => Argox "4" => P232 "5" => EPSON (Sem cortar etiqueta ao imprimir) "6" => EPSON (Cortar etiqueta ao imprimir) "7" => ZEBRA GC420t "8" => P560 "9" => P580 |
"#F200, {valorInt}" |
| 201 | Modelo de impressão |
"1" => Modelo 1 (Padrão) "2" => Modelo 2 |
"#F201, {valorInt}" |
| 202 | Imprimir data e hora |
"0" => Desligado "1" => Ligado (Padrão) |
"#F202, {valorInt}" |
| 203 | Impressão de peso |
"0" => Liquido "1" => Bruto/Tara/Liquido (Padrão) |
"#F203, {valorInt}" |
| 204 | Imprime nome da empresa |
"0" => Desligado "1" => Ligado (Padrão) |
"#F204, {valorInt}" |
| 205 | Impressão sequencial de pesagem |
"0" => Desligado (Padrão) "1" => Ligado |
"#F205, {valorInt}" |
| 206 | Impressão de código de barras |
"0" => Desligado (Padrão) "1" => EAN-13 "1" => GS1-128 |
"#F206, {valorInt}" |
| 207 | Impressão do usuário |
"0" => Desligado (Padrão) "1" => Ligado |
"#F207, {valorInt}" |
| 208 | Imprimir descrição do produto (Opcional) |
"0" => Desligado (Padrão) "1" => Ligado |
"#F208, {valorInt}" |
| 209 | Quantidade de impressão |
"1" => 1 Etiqueta por impressão (Padrão) "2" => 2 Etiqueta por impressão "3" => 3 Etiqueta por impressão "4" => 4 Etiqueta por impressão "5" => 5 Etiqueta por impressão "6" => 6 Etiqueta por impressão "7" => 7 Etiqueta por impressão "8" => 8 Etiqueta por impressão "9" => 9 Etiqueta por impressão |
"#F209, {valorInt}" |
| 210 | Imprimir código do produto |
"0" => Desligado "1" => Ligado (Padrão) |
"#F210, {valorInt}" |
| 211 | Baud Rate Impressora |
"0" => 2400 "1" => 4800 "2" => 9600 (Padrão) "3" => 14400 "4" => 19200 "5" => 38400 "6" => 57600 "7" => 115200 |
"#F211, {valorInt}" |
| 212 | Cadastrar nome da empresa | "{nomeEmpresa}" | "#F212, {nomeEmpresa}" |
| 213 | Impressão automática |
"0" => Desligado (Padrão) "1" => Ligado |
"#F213, {valorInt}" |
| 215 | Paridade e Bits de Transmissão |
"0" => Paridade None, Data Bits 8 (Padrão) "1" => Paridade Even, Data Bits 8 "2" => Paridade Even, Data Bits 7 "3" => Paridade Odd, Data Bits 8 "4" => Paridade Odd, Data Bits 7 |
"#F215, {valorInt}" |
| 216 | Stop Bits de Impressão |
"1" => 1 Stop Bit (Padrão) "2" => 2 Stop Bits |
"#F216, {valorInt}" |
| 217 | Tipo de Usuário |
"0" => Usuário (Padrão) "1" => Fornecedor "2" => Cliente "3" => Colhedor |
"#F217, {valorInt}" |
| 219 | Impressão com Bobina de Papel ou Etiqueta |
"0" => Impressão utilizando etiqueta (Padrão) "1" => Impressão utilizando bobina de papel |
"#F219, {valorInt}" |
| 300 | Protocolo |
"0" => Líder 1 (Padrão) "1" => Líder 2 "2" => Líder 3 "3" => Líder 4 "4" => Modbus RTU "5" => Modbus ASCI "10" => Protocolo com código do produto "11" => Protocolo Modbus TCP "13" => Protocolo para 2 Transmissores RF Obs.:A DLL consegue comunicar somente com os protocolos Líder 1, Líder 2, Líder 3 e Líder 4 |
"#F300, {valorInt}" |
| 301 | Baud Rate |
"0" => 2400 "1" => 4800 "2" => 9600 (Padrão) "3" => 14400 "4" => 19200 "5" => 38400 "6" => 57600 "7" => 115200 |
"#F301, {valorInt}" |
| 302 | Endereço de 1 a 255 | "{valorInt}" => valorInt é um valor inteiro de 1 a 255 | "#F302, {valorInt}" |
| 303 | Frequência de transmissão |
"0" => Sobre demanda "1" => Continua (Padrão) |
"#F303, {valorInt}" |
| 304 | Baud Rate RS485 e RS422 |
"0" => 2400 "1" => 4800 "2" => 9600 (Padrão) "3" => 14400 "4" => 19200 "5" => 28800 "6" => 57600 "7" => 115200 |
"#F304, {valorInt}" |
| 305 | Tempo de transmissão (quando F303 = 1) |
"0" => 1000 ms (Padrão) "1" => 100 ms "2" => 200 ms "3" => 300 ms "4" => 400 ms "5" => 500 ms "6" => 600 ms "7" => 700 ms "8" => 800 ms "9" => 900 ms |
"#F305, {valorInt}" |
| 307 | Checksum |
"0" => Protocolos Líder 3 e Líder 4 sem Checksum (Padrão) "1" => Protocolos Líder 3, Líder 4 e Líder 10 com cálculo Checksum (8 bit Checksum 2's Complement) |
"#F307, {valorInt}" |
| 308 | Paridade e Bits de Transmissão |
"0" => Paridade None, Data Bits 8 (Padrão) "1" => Paridade Even, Data Bits 8 "2" => Paridade Even, Data Bits 7 "3" => Paridade Odd, Data Bits 8 "4" => Paridade Odd, Data Bits 7 |
"#F308, {valorInt}" |
| 309 | Stop Bits de Transmissão |
"1" => 1 Stop Bit (Padrão) "2" => 2 Stop Bits |
"#F309, {valorInt}" |
| 310 | Nível da Bateria do Indicador |
"0" => Protocolos Líder 3 e Líder 4 sem o nível da bateria (Padrão) "1" => Protocolos Líder 3 e Líder 4 com o nível da bateria |
"#F310, {valorInt}" |
| 311 | Nível da Bateria do Transmissor remoto |
"0" => Protocolos Líder 3 e Líder 4 sem o nível da bateria (Padrão) "1" => Protocolos Líder 3 e Líder 4 com o nível da bateria |
"#F311, {valorInt}" |
| 312 | Enviar Unidade de Medida do Peso nos Protocolos Líder 3 e Líder 4 |
"0" => Desligado (Padrão) "1" => Ligado |
"#F312, {valorInt}" |
| 400 | Quantidade de Setpoint | "{valorInt}" => valorInt é um valor inteiro de 0 a 6 | "#F400, {valorInt}" |
| 401 | Valor do Setpoint Nível 1 (gramas) | "{valorInt}" => valorInt é um valor inteiro | "#F401, {valorInt}" |
| 402 | Valor do Setpoint Nível 2 (gramas) | "{valorInt}" => valorInt é um valor inteiro | "#F402, {valorInt}" |
| 403 | Valor do Setpoint Nível 3 (gramas) | "{valorInt}" => valorInt é um valor inteiro | "#F403, {valorInt}" |
| 404 | Valor do Setpoint Nível 4 (gramas) | "{valorInt}" => valorInt é um valor inteiro | "#F404, {valorInt}" |
| 405 | Valor do Setpoint Nível 5 (gramas) | "{valorInt}" => valorInt é um valor inteiro | "#F405, {valorInt}" |
| 406 | Valor do Setpoint Nível 6 (gramas) | "{valorInt}" => valorInt é um valor inteiro | "#F406, {valorInt}" |
| 407 | Trava para setpoint |
"0" => Desligado (Padrão) "1" => Ligado |
"#F407, {valorInt}" |
| 408 | Alarme sonoro de setpoint |
"0" => Desligado "1" => Ligado (Padrão) |
"#F408, {valorInt}" |
| 409 | Valor de Histerese (valor padrão = 10) | "{valorInt}" => valorInt é um valor inteiro | "#F409, {valorInt}" |
| 410 | Tempo 1 em décimos de segundo para o Nível 1 | "{valorInt}" => valorInt é um valor inteiro | "#F410, {valorInt}" |
| 411 | Tempo 2 em décimos de segundo para o Nível 2 | "{valorInt}" => valorInt é um valor inteiro | "#F411, {valorInt}" |
| 412 | Tempo 3 em décimos de segundo para o Nível 3 | "{valorInt}" => valorInt é um valor inteiro | "#F412, {valorInt}" |
| 413 | Tempo 4 em décimos de segundo para o Nível 4 | "{valorInt}" => valorInt é um valor inteiro | "#F413, {valorInt}" |
| 414 | Tempo 5 em décimos de segundo para o Nível 5 | "{valorInt}" => valorInt é um valor inteiro | "#F414, {valorInt}" |
| 415 | Tempo 6 em décimos de segundo para o Nível 6 | "{valorInt}" => valorInt é um valor inteiro | "#F415, {valorInt}" |
| 416 | Saída do Rele |
"0" => NA (Normalmente aberto) (Padrão) "1" => NF (Normalmente fechado) |
"#F416, {valorInt}" |
| 417 | Modo prioritário |
"0" => Mantem o estado de todas as saídas (Padrão) "1" => Mantem somente o estado da última saída desativando as anteriores "2" => Mantem somente o estado da última saída desativando as anteriores. A diferença desta opção para a opção 2 é que na opção 3 a última saída ativa se dá na subida e descida de peso |
"#F417, {valorInt}" |
| 418 | Dosadora |
"0" => Desativa modo dosadora (Padrão) "1" => Ativa modo dosadora |
"#F418, {valorInt}" |
| 419 | Ativar saídas de Setpoint somente com o peso estável |
"0" => Desligado (Padrão) "1" => Ligado |
"#F419, {valorInt}" |
| 450 | Modo Peso Alvo |
"0" => Desligado (Padrão) "1" => Ligado |
"#F450, {valorInt}" |
| 451 | Tipo de Tolerância para o Peso Alvo |
"0" => Tolerância percentual (Padrão) "1" => Tolerância numérica |
"#F451, {valorInt}" |
| 452 | Tolerância Percentual |
"0" => 0.25% "1" => 0.50% (Padrão) "2" => 0.75% "3" => 1.00% "4" => 1.25% "5" => 1.50% "6" => 1.75% "7" => 2.00% "8" => 2.25% "9" => 2.50% "10" => 2.75% "11" => 3.00% "12" => 3.25% "13" => 3.50% "14" => 3.75% "15" => 4.00% "16" => 4.25% "17" => 4.50% "18" => 4.75% "19" => 5.00% |
"#F452, {valorInt}" |
| 453 | Tolerância Numérica (Não pode ser maior que 9% do peso alvo) (gramas) | "{valorInt}" => valorInt é um valor inteiro | "#F453, {valorInt}" |
| 454 | Valor do Peso Alvo (gramas) | "{valorInt}" => valorInt é um valor inteiro | "#F454, {valorInt}" |
| 500 | Data do Indicador | "dd.MM.yyyy" => dia (dd), mês (MM) e ano (yyyy) | "#F500, dd/MM/yyyy" |
| 501 | Hora do Indicador | "HH.mm.ss" => horas (HH), minutos (mm) e segundos (ss) | "#F501, HH:mm:ss" |
| 502 | Som de tecla |
"0" => Desligado "1" => Ligado (Padrão) |
"#F502, {valorInt}" |
| 503 | Redução do Brilho do display (tempo em minutos) | "{valorInt}" => valorInt é um valor inteiro de 0 a 300 (sendo 0 Desativado) | "#F503, {valorInt}" |
| 504 | Auto desligar (tempo em minutos) | "{valorInt}" => valorInt é um valor inteiro de 0 a 900 (sendo 0 Desativado) | "#F504, {valorInt}" |
| 600 | Modo Rádio |
"0" => Desativado (Padrão) "1" => Receptor |
"#F600, {valorInt}" |
| 601 | Canal de comunicação | "{valorInt}" => valorInt é um valor inteiro de 1 a 15 | "#F601, {valorInt}" |
| 602 | Endereço Rádio |
"1" ou "2" |
"#F602, {valorInt}" |
| 604 | Quantidade de transmissores de peso |
"1" => 1 transmissor (Padrão) "2" => 2 transmissores |
"#F604, {valorInt}" |
| 605 | Tipo de Receptor |
"1" => Receptor principal "2" => Receptor secundário |
"#F605, {valorInt}" |
| 700 | Configuração para saída de tensão e corrente range = 16 bits |
"0" => Sem saída de tensão e corrente "1" => 0V a 5V "2" => 0V a 10V "3" => 4mA a 20mA (Padrão) "4" => 0mA a 20mA "5" => 0mA a 24mA |
"#F700, {valorInt}" |
| FUNÇÃO | PARÂMETROS | RETORNO |
|---|---|---|
| gerarRelatorio |
tipo[int]: Tipo de relatórios a ser gerado: 0 - Relatório por número de impressões; 1 - Relatório por data; 2 - Relatório por código de produto; 3 - Relatório por usuário; 4 - Relatório por data e código de produto; 5 - Relatório por data e usuário. input[char*]: Argumento de acordo com o relatório desejado: [tipo = 0] -> input = "{numImpressoes}"
a string deve ter um número inteiro, Exemplo: "100" [tipo = 1] -> input = "{dataInicial},{dataFinal}"
com as datas no formato dd/MM/yyyy Exemplo: "01/01/2000,02/02/2024" [tipo = 2] -> input = "{codigoProduto}"
Exemplo: "123456"[tipo = 3] -> input = "{usuarioID}"
a string deve ter um inteiro entre 1 e 50Exemplo: "32" [tipo = 4] -> input = "{dataInicial},{dataFinal},{codigoProduto}"
Exemplo: "01/01/2000,02/02/2024,123456"[tipo = 5] -> input = "{dataInicial},{dataFinal},{usuarioID}"
Exemplo: "01/01/2000,02/02/2024,32"
|
char* : Uma String contendo o relatório, que será composta por: Linha de Inicio de Relatório: Se tipo = 0 "#SNDRL,ACK,{nomeEmpresa}\n"
Se tipo = 1
"#SNDDT,ACK,{nomeEmpresa}\n"
Se tipo = 2
"#SNDRCP,ACK,{nomeEmpresa}\n"
Se tipo = 3
"#SNDRUSER,ACK,{nomeEmpresa}\n"
Se tipo = 4
"#SNDDTCOD,ACK,{nomeEmpresa}\n"
Se tipo = 5
"#SNDDTUSR,ACK,{nomeEmpresa}\n"
Linhas de Conteúdo/Meio do relatório: Registro de Pesagem: "#SPS,{data(dd/MM/yyyy)},{hora(HH:mm:ss)},{codigoProduto},{descricaoProduto},{pesoLiquido},{tara},{sequencia},{tipoUsuario} {usuarioID},{nomeUsuario},{unidadeMedida},{cancelado}\n"
Registro de Contagem de Peças:
"#SPC,{data(dd/MM/yyyy)},{hora(HH:mm:ss)},{codigoProduto},{descricaoProduto},{pesoLiquido},{tara},{sequencia},{quantidadePecas},{PesoMedioPorPeca},{tipoUsuario} {usuarioID},{nomeUsuario},{unidadeMedida},{cancelado}\n"
Registro do Total de Pesagens de uma sequência:
"#STLP,{totalPesado}\n"
Registro do Total de Contagem de Peças de uma sequência:
"#STLC,{totalDePecasContadas}"
-------------------------------------------------- Ou uma String contendo o erro, no formato: "#ERRO: {codigoErro}"
codigoErro = 0: Erro/falha codigoErro = -1: Erro, Timeout codigoErro = -3: Erro, falha na alocação de memória codigoErro = -5: Erro, operação impedida, pois a comunicação está fechada |
| FUNÇÃO | PARÂMETROS | RETORNO |
|---|---|---|
| getUsuarioById |
id [int] : número do usuário cadastrado no indicador. |
char* : Uma String contendo o nome do usuário cadastrado, no formato:
"#F113, {nomeUsuario}"
-------------------------------------------------- Ou uma String contendo o erro, no formato: "#ERRO: {codigoErro}"
codigoErro = 0: Erro/falha codigoErro = -1: Erro, Timeout codigoErro = -3: Erro, falha na alocação de memória codigoErro = -5: Erro, operação impedida, pois a comunicação está fechada |
| setUsuario |
senhaMenu [char*] : string com a senha do Menu do Indicador. idUsuario [int] : inteiro com o ID do usuário(1 a 50). senhaUsuario [char*] : string com a nova senha do usuário. nomeUsuario [char*] : string com o novo nome do usuário. |
Há uma função de otimização da DLL, as funções getConfiguracaoIndicador(), setConfiguracaoIndicador(), getUsuarioById(), getTabelaProduto() e gerarRelatorio(), utilizam alocação dinâmica de memória para armazenar a string de retorno e esta memória só é desalocada em dois momentos: quando a função é chamada novamente, pois, a string é desalocada para se alocar uma nova string; e quando a comunicação é fechada, pois, todos os recursos utilizados são liberados. Porém, se houver o desejo ou a necessidade de liberar a memória antecipadamente para otimizar recursos, há a função freeStringMemory().
void freeStringMemory ( );
O uso desta função deve ter cautela para não liberar a memória que esteja sendo utilizada, dessa forma, certifique-se de que a string retornada não esteja sendo utilizada (caso a linguagem optada utilize a string retornada diretamente) ou que nenhuma das funções que alocam string dinamicamente estejam em funcionamento para que não haja estouro ou corrupção de memória.