Ir para conteúdo
Fórum Script Brasil
  • 0

Access Violation


Guest Mario Antonio

Pergunta

Guest Mario Antonio

Caros estou com problema ao clicar no botão btn_MaquinaDeEstado a aplicação me retorna o Erro: Access Violation at address ...

Não estou conseguindo achar o Erro... o Código é grande, mais resolvi postar para todos..

Grato..

unit U_CatracaPrincipal;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, Grids, DBGrids, ComCtrls, ExtCtrls,

JvExControls, JvComponent, JvLED, DB, MDOCustomDataSet, MDOQuery,

DBCtrls, Mask;

type

TForm_ControleCatraca = class(TForm)

Panel1: TPanel;

StatusBar1: TStatusBar;

Panel2: TPanel;

Panel3: TPanel;

DBGrid1: TDBGrid;

btn_Conectar: TBitBtn;

btn_Desconectar: TBitBtn;

btn_Parar: TBitBtn;

btn_UBiometria: TBitBtn;

GroupBox1: TGroupBox;

Label1: TLabel;

ComboBox1: TComboBox;

Label2: TLabel;

Edit1: TEdit;

Label3: TLabel;

Edit2: TEdit;

Label4: TLabel;

Edit3: TEdit;

btn_MaquinaEstados: TBitBtn;

Label5: TLabel;

Bevel1: TBevel;

Panel_Usuario: TPanel;

Q_Usuario: TMDOQuery;

S_Usuario: TDataSource;

btn_Insere: TBitBtn;

btn_Excluir: TBitBtn;

btn_Sair: TBitBtn;

Bevel2: TBevel;

Bevel3: TBevel;

Q_UsuarioID: TIntegerField;

Q_UsuarioCOD_USER: TIntegerField;

Q_UsuarioTIPO_USER: TMDOStringField;

Q_UsuarioDATA_INC: TDateField;

Q_UsuarioDATA_ALT: TDateField;

Q_UsuarioNOME_USER: TMDOStringField;

Label6: TLabel;

DBEdit1: TDBEdit;

Label7: TLabel;

DBEdit2: TDBEdit;

GroupBox2: TGroupBox;

Edit4: TEdit;

SpeedButton1: TSpeedButton;

Label8: TLabel;

DBEdit3: TDBEdit;

DataControle: TMDODataSet;

S_Controle: TDataSource;

S_ControleEnter: TDataSource;

Q_Controle: TMDOQuery;

DataControleDATA_ENTRADA: TDateField;

DataControleDATA_SAIDA: TDateField;

DataControleHORA_ENTRADA: TTimeField;

DataControleHORA_SAIDA: TTimeField;

DataControleCOD_ALUNO: TMDOStringField;

DataControleLOGADO: TMDOStringField;

DataControleID: TIntegerField;

Q_ControleDATA_ENTRADA: TDateField;

Q_ControleDATA_SAIDA: TDateField;

Q_ControleHORA_ENTRADA: TTimeField;

Q_ControleHORA_SAIDA: TTimeField;

Q_ControleCOD_ALUNO: TMDOStringField;

Q_ControleLOGADO: TMDOStringField;

Q_ControleID: TIntegerField;

Q_Aluno: TMDOQuery;

S_Aluno: TDataSource;

Q_AlunoID: TIntegerField;

Q_AlunoCODIGO: TMDOStringField;

Q_AlunoNOME: TMDOStringField;

Q_AlunoDATA_NASC: TDateField;

Q_AlunoDATA_INC: TDateField;

Q_AlunoDATA_ALT: TDateField;

Q_AlunoDATA_HAB: TDateField;

Q_AlunoRG: TMDOStringField;

Q_AlunoCPF: TMDOStringField;

Q_AlunoFONE: TMDOStringField;

Q_AlunoCEL: TMDOStringField;

Q_AlunoENDERECO: TMDOStringField;

Q_AlunoBAIRRO: TMDOStringField;

Q_AlunoCIDADE: TMDOStringField;

Q_AlunoESTADO: TMDOStringField;

Q_AlunoCOMPLEMENTO: TMDOStringField;

Q_AlunoCEP: TMDOStringField;

Q_AlunoMENORIDADE: TMDOStringField;

Q_AlunoCOD_RESP: TIntegerField;

Q_AlunoPARENTESCO: TMDOStringField;

Q_AlunoEMAIL: TMDOStringField;

Q_UCatraca: TMDOQuery;

S_UCatraca: TDataSource;

Q_Mensalidade: TMDOQuery;

S_Mensalidade: TDataSource;

Q_MensalidadeID: TIntegerField;

Q_MensalidadeCOD_ALUNO: TIntegerField;

Q_MensalidadeCOD_CONTRATO: TIntegerField;

Q_MensalidadeDATA_VENC: TDateField;

Q_MensalidadeDATA_PGTO: TDateField;

Q_MensalidadeVALOR_MENS: TMDOBCDField;

Q_MensalidadeACRESCIMO: TMDOBCDField;

Q_MensalidadeVALOR_PGTO: TMDOBCDField;

Q_MensalidadePAGO: TMDOStringField;

Q_MensalidadeTIPO_PGTO: TMDOStringField;

Q_UCatracaID: TIntegerField;

Q_UCatracaCOD_USER: TIntegerField;

Q_UCatracaTIPO_USER: TMDOStringField;

Q_UCatracaDATA_INC: TDateField;

Q_UCatracaDATA_ALT: TDateField;

Q_UCatracaNOME_USER: TMDOStringField;

S_ControleEntrada: TDataSource;

Q_ControleEntrada: TMDOQuery;

Q_ControleEntradaDATA_ENTRADA: TDateField;

Q_ControleEntradaDATA_SAIDA: TDateField;

Q_ControleEntradaHORA_ENTRADA: TTimeField;

Q_ControleEntradaHORA_SAIDA: TTimeField;

Q_ControleEntradaCOD_ALUNO: TMDOStringField;

Q_ControleEntradaLOGADO: TMDOStringField;

Q_ControleEntradaID: TIntegerField;

procedure btn_ConectarClick(Sender: TObject);

procedure btn_DesconectarClick(Sender: TObject);

procedure MontarConfiguracao;

procedure MenssagemOff;

procedure SpeedButton1Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure btn_UBiometriaClick(Sender: TObject);

procedure btn_SairClick(Sender: TObject);

procedure btn_InsereClick(Sender: TObject);

procedure btn_ExcluirClick(Sender: TObject);

procedure btn_PararClick(Sender: TObject);

procedure AtualizaGrid;

procedure btn_MaquinaEstadosClick(Sender: TObject);

private

{ Private declarations }

function retornar_Segundos: longint;

function conectar: boolean;

procedure pausa(tempo: longint);

procedure SetarTimeout;

function EsperaRespostaBio: boolean;

procedure MaquinaEstado;

public

{ Public declarations }

end;

Const Retorno_OK = 0;

Const Retorno_Erro = 1;

Const Retorno_PortaFechada = 2;

Const Retorno_PortaAberta = 3;

Const Retorno_DLL_Inner2k = 4;

Const Retorno_DLL_InnerTCP = 5;

Const Retorno_DLL_InnerTCP2 = 6;

Const Retorno_ErroGPF = 8;

Const Retorno_TipoConexInvalida = 9;

Const Div_Segundos = 1000;

Const Retorno_BioProcessando = 128;

Type TEstadoInner = (

ESTADO_CONECTAR,

ESTADO_ENVIAR_CFG_ON,

ESTADO_ENVIAR_DATA_HORA,

ESTADO_ENVIAR_MSG_PADRAO,

ESTADO_ENVIAR_MSG_OK_ENTRADA,

ESTADO_ENVIAR_MSG_OK_SAIDA,

ESTADO_CONFIGURAR_ENTRADA_ON,

ESTADO_LIBERAR_ENTRADA,

ESTADO_BLOQUEAR_ENTRADA,

ESTADO_MSG_ACESSO_NEGADO,

ESTADO_VALIDAR_DADOS,

ESTADO_LIBERAR_SAIDA,

ESTADO_NEGAR_ACESSO,

ESTADO_LIBERA_DOIS_SENTIDOS,

ESTADO_POOLING);

type TInner = Record

NumInner: Integer;

EstadoInner: TEstadoInner;

end;

var

Form_ControleCatraca: TForm_ControleCatraca;

Timeout: longint;

Ret: Byte;

Parar: Boolean;

Data: TDateTime;

tDia, tMes, tAno, tHora, tMinuto, tSegundos, tMiliSegundos: Word;

InnersMonitoramento: array of TInner;

TotalInners, InnerAtual: Integer;

implementation

uses U_DataModule, Math;

{$R *.dfm}

Function DefinirTipoConexao(Tipo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function AbrirPortaComunicacao(Porta:Integer):Byte; stdcall; external 'EasyInner.dll';

Procedure FecharPortaComunicacao(); stdcall; external 'EasyInner.dll';

Function DefinirPadraoCartao(padrão:Byte):Byte; stdcall; external 'EasyInner.dll';

Function AcionarRele1( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function AcionarRele2( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function EnviarComandoAcessoNegado( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ManterRele1Acionado( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ManterRele2Acionado( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function DesabilitarRele1( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function DesabilitarRele2( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function AcionarBipCurto( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function AcionarBipIntegero( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function Ping( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ResetarModoOnLine( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LigarBackLite( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function DesligarBackLite( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LigarBipIntermitente( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function DesligarBipIntermitente( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LiberarCatracaEntrada( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LiberarCatracaSaida( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LiberarCatracaEntradaInvertida( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LiberarCatracaSaidaInvertida( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LiberarCatracaDoisSentidos( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function DevolverCartao( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function EngolirCartao( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LevantarParaOnLine(Inner: Integer):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitorProximidadeHIDAbaTrack2():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitorProximidadeMotorolaAbaTrack2():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitorProximidadeWiegand():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitorProximidadeSmartCard():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitorProximidadeAcura():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitorProximidadeWiegandFacilityCode():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitorProximidadeSmartCardAcura():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarInnerOffLine():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarInnerOnLine():Byte; stdcall; external 'EasyInner.dll';

Function HabilitarTeclado( Habilita, Ecoar:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarAcionamento1( Funcao,Tempo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarAcionamento2( Funcao,Tempo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarTipoLeitor( Tipo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitor1( Operacao:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitor2( Operacao:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirCodigoEmpresa( Codigo:Integer):Byte; stdcall; external 'EasyInner.dll';

Function DefinirNivelAcesso( Nivel:Byte):Byte; stdcall; external 'EasyInner.dll';

Function UtilizarSenhaAcesso( Utiliza:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirTipoListaAcesso( Tipo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirQuantidadeDigitosCartao( Quantidade:Byte):Byte; stdcall; external 'EasyInner.dll';

Function AvisarQuandoMemoriaCheia( Avisa:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirPorcentagemRevista( Porcentagem:Byte):Byte; stdcall; external 'EasyInner.dll';

Function RegistrarAcessoNegado( TipoRegistro:Byte):Byte; stdcall; external 'EasyInner.dll';

Function CartaoMasterLiberaAcesso( Libera:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirLogicaRele( Logica:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DesabilitarBloqueioCatracaMicroSwitch( Desabilita:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirFuncaoDefaultLeitoresProximidade( Funcao:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirNumeroCartaoMaster( Master:String):Byte; stdcall; external 'EasyInner.dll';

Function DefinirFormasPictogramasMillenium( Forma:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DesabilitarBipCatraca( Desabilita:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirEventoSensor( Sensor,Evento,Tempo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function PermitirCadastroInnerBioVerid( Permite:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ReceberDataHoraDadosOnLine( Recebe:Byte):Byte; stdcall; external 'EasyInner.dll';

Function InserirQuantidadeDigitoVariavel( Digito:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarWiegandDoisLeitores( Habilita,ExibirMensagem:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirFuncaoDefaultSensorBiometria( Funcao:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarConfiguracoes( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function EnviarRelogio( Inner:Integer;

Dia,Mes,Ano,

Hora,Minuto,Segundo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarHorarioVerao( Inner:Integer;

DiaInicio, MesInicio, AnoInicio,

HoraInicio,MinutoInicio,

DiaFim, MesFim,AnoFim,

HoraFim,MinutoFim:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ApagarHorariosAcesso( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function InserirHorarioAcesso( Horario,DiaSemana,FaixaDia,Hora,Minuto:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarHorariosAcesso( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ApagarListaAcesso( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function InserirUsuarioListaAcesso( Cartao:String; Horario:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarListaAcesso( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function EnviarMensagemPadraoOnLine( Inner:Integer; ExibirData:Byte; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function EnviarMensagemTemporariaOnLine( Inner:Integer; ExibirData:Byte; Mensagem:String; Tempo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirMensagemEntradaOffLine( ExibirData:Byte; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function DefinirMensagemSaidaOffLine( ExibirData:Byte; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function DefinirMensagemPadraoOffLine( ExibirData:Byte; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function DefinirMensagemFuncaoOffLine( Mensagem:String; Funcao,Habilitada:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarMensagensOffLine( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ApagarMensagensOffLine( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ApagarHorariosSirene( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function InserirHorarioSirene( Hora, Minuto,

Segunda, Terca, Quarta, Quinta,

Sexta, Sabado, DomingoFeriado:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarHorariosSirene( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ColetarBilhete( Inner:Integer; Tipo, Dia, Mes, Ano, Hora, Minuto: Pointer; Cartao:PChar):Byte; stdcall; external 'EasyInner.dll';

Function EnviarFormasEntradasOnLine( Inner:Integer;QtdeDigitosTeclado,EcoTeclado,FormaEntrada,TempoTeclado,PosicaoCursorTeclado:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ReceberDadosOnLine( Inner:Integer; Origem, Complemento: Pointer; Cartao: PChar; Dia, Mes, Ano, Hora, Minuto, Segundo:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function LerSensoresInner( Inner:Integer; StatusSensor1, StatusSensor2, StatusSensor3:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function EnviarMensagemImpressora00( Inner:Integer; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function EnviarMensagemImpressoraFF( Inner:Integer; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function HabilitarMudancaOnLineOffLine( Habilita, Tempo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirEntradasMudancaOffLine( Teclado, Leitor1, Leitor2, Catraca:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirMensagemPadraoMudancaOffLine( ExibirData:Byte; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function DefinirMensagemPadraoMudancaOnLine( ExibirData:Byte; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function DefinirEntradasMudancaOnLine( Entrada:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirConfiguracaoTecladoOnLine( Digitos, EcoDisplay, Tempo, PosicaoCursor:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarConfiguracoesMudancaAutomaticaOnLineOffLine( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function DefinirConfiguracoesFuncoes( Funcao, Catraca, Rele1, Rele2, Lista, Biometria:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarConfiguracoesFuncoes( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function SolicitarModeloBio( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ReceberModeloBio( Inner:Integer; OnLine:Byte; Modelo:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function SolicitarVersaoBio( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ReceberVersaoBio( Inner:Integer; OnLine:Byte; VersaoAlta, VersaoBaixa:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function SolicitarQuantidadeUsuariosBio( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ReceberQuantidadeUsuariosBio( Inner:Integer; OnLine:Byte; Quantidade:Pointer):Byte; stdcall; external 'EasyInner.dll';

Procedure InicializarColetaListaUsuariosBio(); stdcall; external 'EasyInner.dll';

Function SolicitarListaUsuariosBio( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ReceberPacoteListaUsuariosBio( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ReceberUsuarioLista( Inner:Integer; Usuario:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function TemProximoUsuario():Integer; stdcall; external 'EasyInner.dll';

Function TemProximoPacote():Integer; stdcall; external 'EasyInner.dll';

procedure SetarBioLight(Light: Integer); stdcall; external 'EasyInner.dll';

Function SolicitarUsuarioCadastradoBio( Inner:Integer; Usuario:String):Byte; stdcall; external 'EasyInner.dll';

Function ReceberUsuarioCadastradoBio( Inner:Integer; OnLine:Byte; Template:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function SolicitarExclusaoUsuario( Inner:Integer; Usuario:String):Byte; stdcall; external 'EasyInner.dll';

Function UsuarioFoiExcluido( Inner:Integer; OnLine:Byte):Byte; stdcall; external 'EasyInner.dll';

Function InserirUsuarioLeitorBio( Inner:Integer; Tipo:Byte; Usuario:String):Byte; stdcall; external 'EasyInner.dll';

Function ResultadoInsercaoUsuarioLeitorBio( Inner:Integer; OnLine:Byte):Byte; stdcall; external 'EasyInner.dll';

Function FazerVerificacaoBiometricaBio( Inner:Integer; Usuario:String):Byte; stdcall; external 'EasyInner.dll';

Function ResultadoVerificacaoBiometrica( Inner:Integer; OnLine:Byte):Byte; stdcall; external 'EasyInner.dll';

Function FazerIdentificacaoBiometricaBio( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ResultadoIdentificacaoBiometrica( Inner:Integer; OnLine:Byte; Usuario:PChar):Byte; stdcall; external 'EasyInner.dll';

Function SolicitarTemplateLeitor( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ReceberTemplateLeitor( Inner:Integer; OnLine:Byte; Template:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarBio( Inner:Integer; HabilitaIdentificacao, HabilitaVerificacao:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ResultadoConfiguracaoBio( Inner:Integer; OnLine:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarUsuarioBio( Inner:Integer; Template:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function UsuarioFoiEnviado( Inner:Integer; OnLine:Byte):Byte; stdcall; external 'EasyInner.dll';

Function CompararDigitalLeitor( Inner:Integer; Template:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function ResultadoComparacaoDigitalLeitor( Inner:Integer; OnLine:Byte):Byte; stdcall; external 'EasyInner.dll';

Function IncluirUsuarioSemDigitalBio( Cartao:String):Byte; stdcall; external 'EasyInner.dll';

Function EnviarListaUsuariosSemDigitalBio( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function EnviarStringInicializacaoModem(Str:String): Integer; stdcall; external 'EasyInner.dll';

Function LerByteModem(): Integer; stdcall; external 'EasyInner.dll';

Function ConectarModem(Porta: Integer; Str:String; Tom: Integer; Telefone:String; Inner: Integer): Integer; stdcall; external 'EasyInner.dll';

function GetTickCount(): longint; stdcall; external 'kernel32.dll';

procedure Sleep(ms: longint); stdcall; external 'kernel32.dll';

{ TForm1 }

function TForm_ControleCatraca.conectar: boolean;

var

Fim: longint;

Retorno: Boolean;

begin

DefinirTipoConexao(ComboBox1.ItemIndex + 1);

FecharPortaComunicacao;

Ret := AbrirPortaComunicacao(strToInt(Edit1.Text));

Conectar := False;

if (Ret = Retorno_OK) then

begin

Ret := Retorno_Erro;

Fim := Retornar_Segundos() + 15;

While (Retornar_Segundos <= Fim) and (Ret <> Retorno_OK) Do

begin

Pausa(1);

Ret := Ping(strToInt(Edit2.Text));

end;

Retorno := (Ret = Retorno_OK);

Conectar := Retorno;

if (not Retorno) then

begin

Application.MessageBox('Erro ao Conectar com a Catraca','Erro',MB_OK+MB_IconError);

//Led_Conectar.Status := False;

end

Else

begin

Data := Now;

DecodeDate(Data, tAno, tMes, tDia);

DecodeTime(Data, tHora, tMinuto, tSegundos, tMiliSegundos);

tAno := StrToInt(Copy(IntToStr(tAno),3,2));

EnviarRelogio(strToInt(Edit2.Text),Byte(tDia),Byte(tMes), Byte(tAno), Byte(tHora), Byte(tMinuto),Byte(tSegundos));

EnviarMensagemPadraoOnLine(strToInt(Edit2.Text),1,'Estado - On Line');

//Led_Conectar.Status := True;

Label5.Font.Color := clGreen;

Label5.Caption := 'Conectado - On Line';

btn_Desconectar.Enabled := True;

btn_UBiometria.Enabled := True;

btn_Conectar.Enabled := False;

end;

end;

end;

function TForm_ControleCatraca.EsperaRespostaBio: boolean;

begin

EsperaRespostaBio := (Ret = Retorno_BioProcessando) and (Retornar_Segundos() <= Timeout);

end;

procedure TForm_ControleCatraca.pausa(tempo: Integer);

begin

Sleep(Tempo);

Application.ProcessMessages;

end;

function TForm_ControleCatraca.retornar_Segundos: longint;

begin

retornar_Segundos := (getTickCount() div DIV_SEGUNDOS);

end;

procedure TForm_ControleCatraca.SetarTimeout;

begin

Timeout := Retornar_Segundos() + 7;

end;

procedure TForm_ControleCatraca.btn_ConectarClick(Sender: TObject);

begin

Conectar();

end;

procedure TForm_ControleCatraca.btn_DesconectarClick(Sender: TObject);

label

Fim;

begin

if Conectar() Then

begin

MontarConfiguracao;

Ret := EnviarConfiguracoes(StrToInt(Edit2.Text));

if (Ret = Retorno_OK) then

begin

Label5.Caption := 'Configurações Enviadas';

pausa(1000);

end

Else

begin

Label5.Caption := 'Erro no Envio das Configurações';

goto Fim;

end;

Pausa(1000);

Data := Now;

DecodeDate(Data, tAno, tMes, tDia);

DecodeTime(Data, tHora, tMinuto, tSegundos, tMiliSegundos);

tAno := StrToInt(Copy(IntToStr(tAno),3,2));

Ret := EnviarRelogio(StrToInt(Edit2.Text), Byte(tDia), Byte(tMes), Byte(tAno), Byte(tHora), Byte(tMinuto), Byte(tSegundos));

if (Ret = Retorno_OK) then

begin

Label5.Caption := 'Relógio Enviado';

end

Else

begin

Label5.Caption := 'Erro no Envio do Relógio';

goto Fim;

end;

Pausa(1000);

MenssagemOff;

Ret := EnviarMensagensOffLine(StrToInt(Edit2.Text));

if (Ret = Retorno_OK) then

begin

Label5.Caption := 'Mensagem Enviada';

Pausa(1000)

end

Else

begin

Label5.Caption := 'Erroa no Envio da Mensagem';

goto Fim;

end;

Pausa(1000);

Fim:

FecharPortaComunicacao;

btn_Desconectar.Enabled := False;

btn_UBiometria.Enabled := False;

btn_Conectar.Enabled := True;

Label5.Caption := 'Desconectado - Off Line';

Label5.Font.Color := clBlack;

//Led_Conectar.Status := False;

Pausa(1000);

end;

end;

procedure TForm_ControleCatraca.MontarConfiguracao;

begin

DefinirPadraoCartao(1);

DefinirNumeroCartaoMaster('1');

ConfigurarInnerOffLine();

HabilitarTeclado(1, 0);

ConfigurarAcionamento1(1, 15);

ConfigurarAcionamento2(0, 0);

ConfigurarTipoLeitor(0);

ConfigurarLeitor1(3);

ConfigurarLeitor2(3);

//DesabilitarBipCatraca(0);

DefinirTipoListaAcesso(0);

DefinirQuantidadeDigitosCartao(strToint(Edit3.Text));

end;

procedure TForm_ControleCatraca.MenssagemOff;

begin

DefinirMensagemPadraoOffLine(1,'Estado-Off Line');

DefinirMensagemEntradaOffLine(1, 'Seja Bem Vindo');

DefinirMensagemSaidaOffLine(1,'Até Logo');

end;

procedure TForm_ControleCatraca.SpeedButton1Click(Sender: TObject);

var

sqlUsuario1: String;

begin

sqlUsuario1 := 'Select * From Usuario_Catraca';

sqlUsuario1 := sqlUsuario1 + ' Where ID = ' + #39 + Edit4.Text + #39;

Q_Usuario.Close;

Q_Usuario.SQL.Clear;

Q_Usuario.SQL.Add(sqlUsuario1);

Q_Usuario.Open;

if Q_Usuario.RecordCount = 0 then

begin

ShowMessage('Usuario Não Encontrado');

Edit4.Clear;

Edit4.SetFocus;

end

Else

begin

Edit4.Clear;

Edit4.SetFocus;

end;

end;

procedure TForm_ControleCatraca.FormActivate(Sender: TObject);

begin

Panel_Usuario.Visible := False;

//AtualizaGrid;

end;

procedure TForm_ControleCatraca.btn_UBiometriaClick(Sender: TObject);

begin

DataModule1.DBaseFSM.Close;

DataModule1.TrasFSM.Active := False;

DataModule1.DBaseFSM.Open;

DataModule1.TrasFSM.Active := True;

Panel_Usuario.Visible := True;

Q_Usuario.Close;

Q_Usuario.SQL.Clear;

Q_Usuario.SQL.Add('Select * From Usuario_Catraca');

Q_Usuario.Open;

end;

procedure TForm_ControleCatraca.btn_SairClick(Sender: TObject);

begin

Q_Usuario.Close;

Q_Usuario.SQL.Clear;

Panel_Usuario.Visible := False;

end;

procedure TForm_ControleCatraca.btn_InsereClick(Sender: TObject);

var

usuario: String;

begin

if Conectar() then

begin

usuario := DBEdit1.Text;

Ret := InserirUsuarioLeitorBio(strToInt(Edit2.Text),0, usuario);

Pausa(15);

if (Ret = Retorno_OK) then

begin

Ret := Retorno_BioProcessando;

SetarTimeout;

While EsperaRespostaBio() do

begin

Pausa(15);

Ret := ResultadoInsercaoUsuarioLeitorBio(StrToInt(Edit2.Text),1);

End;

end;

if (Ret <> Retorno_OK) then

begin

ShowMessage('Erro ao Inserir o Usuário');

end;

Ret := InserirUsuarioLeitorBio(StrToInt(Edit2.Text),1, usuario);

Pausa(15);

if (Ret = Retorno_OK) then

begin

Ret := Retorno_BioProcessando;

SetarTimeout;

while EsperaRespostaBio Do

begin

Pausa(15);

Ret := ResultadoInsercaoUsuarioLeitorBio(StrToInt(Edit2.Text),1);

end;

end;

if (Ret = Retorno_OK) then

begin

ShowMessage('Usuário Inserido com Sucesso!');

end

Else

begin

ShowMessage('Erro ao Inserir o Usuário');

end;

FecharPortaComunicacao;

end;

end;

procedure TForm_ControleCatraca.btn_ExcluirClick(Sender: TObject);

var

usuario: String;

begin

if Conectar() then

begin

Usuario := DBEdit1.Text;

Ret := SolicitarExclusaoUsuario(strToInt(Edit2.Text), Usuario);

if (Ret = Retorno_OK) then

begin

Ret := Retorno_BioProcessando;

SetarTimeout;

while EsperaRespostaBio Do

begin

Pausa(15);

Ret := UsuarioFoiExcluido(StrToInt(Edit2.Text), 0);

end;

end;

if (Ret = Retorno_OK) then

begin

ShowMessage('Usuário Excluido Com Sucesso');

end

Else

begin

ShowMessage('Erro ao Excluir o Usuário');

end;

end;

FecharPortaComunicacao;

end;

procedure TForm_ControleCatraca.btn_PararClick(Sender: TObject);

begin

Parar := True;

FecharPortaComunicacao();

end;

procedure TForm_ControleCatraca.AtualizaGrid;

var

sqlControle, DataPesq: String;

begin

DataPesq := Copy(DateToStr(Date),4,2) + '/' + Copy(DateToStr(Date),1,2) + '/' + Copy(DateToStr(Date),7,4);

sqlControle := 'Select * From CONTROLE_ENTRADA';

sqlControle := sqlControle + ' Where DATA_ENTRADA = ' + #39 + DataPesq + #39;

Q_Controle.Close;

Q_Controle.SQL.Clear;

Q_Controle.SQL.Add(sqlControle);

Q_Controle.Open;

end;

procedure TForm_ControleCatraca.MaquinaEstado;

var

Origem, Complemento: Byte;

Cartao: array[0..7] of Char;

Dia, Mes, Ano: Byte;

Hora, Minuto, Segundo: Byte;

sqlAluno, sqlControleEntrada, sqlMensalidade, sqlUCatraca: String;

CartaoUsuario: String;

DataPesq: String;

begin

while (not Parar) Do

begin

with InnersMonitoramento[innerAtual] Do

begin

if (EstadoInner = ESTADO_CONECTAR) then

begin

Label5.Caption := 'Entrando em Máquina de Estado...';

Ret := Ping(NumInner);

if (Ret = Retorno_OK) then

begin

Label5.Caption := 'Enviando Configurações...';

EstadoInner := ESTADO_ENVIAR_CFG_ON;

end;

end

Else if (EstadoInner = ESTADO_ENVIAR_CFG_ON) then

begin

ConfigurarInnerOnLine();

ConfigurarAcionamento1(1,15);

ConfigurarTipoLeitor(0);

DefinirQuantidadeDigitosCartao(StrToInt(Edit3.Text));

DefinirNumeroCartaoMaster(IntToStr(1));

CartaoMasterLiberaAcesso(1);

ReceberDataHoraDadosOnLine(1);

Ret := EnviarConfiguracoes(NumInner);

if (Ret = Retorno_OK) then

begin

Label5.Caption := 'Envio das Configurações';

EstadoInner := ESTADO_ENVIAR_DATA_HORA;

end;

end

Else if (EstadoInner = ESTADO_ENVIAR_DATA_HORA) then

begin

Data := Now;

DecodeDate(Data, tAno, tMes, tDia);

DecodeTime(Data,tHora, tMinuto, tSegundos, tMiliSegundos);

tAno := StrToInt(Copy(IntToStr(tAno),3,2));

Ret := EnviarRelogio(NumInner,Byte(tDia),Byte(tMes), Byte(tAno), Byte(tHora),Byte(tMinuto), Byte(tSegundos));

if (Ret = Retorno_OK) then

begin

label5.Caption := 'Envio de Relógio';

EstadoInner := ESTADO_ENVIAR_MSG_PADRAO;

end;

end

Else if (EstadoInner = ESTADO_ENVIAR_MSG_PADRAO) then

begin

Ret := EnviarMensagemPadraoOnLine(NumInner,1,' IDENTIFICACAO ');

if (Ret = Retorno_OK) then

begin

label5.Caption := 'Envio de Mensagem Padrão';

EstadoInner := ESTADO_CONFIGURAR_ENTRADA_ON;

end;

end

Else if (EstadoInner = ESTADO_CONFIGURAR_ENTRADA_ON) then

begin

label5.Caption := 'Maquina de Estados - Coletando';

Ret := EnviarFormasEntradasOnLine(NumInner,7,1,12,15,17);

if (Ret = Retorno_OK) then

begin

EstadoInner := ESTADO_POOLING;

end;

end

Else if (EstadoInner = ESTADO_POOLING) then

begin

Ret := ReceberDadosOnLine(NumInner, @Origem, @Complemento, @Cartao, @Dia, @Mes, @Ano, @Hora, @Minuto, @Segundo);

if (Ret = Retorno_OK) then

begin

EstadoInner := ESTADO_VALIDAR_DADOS;

end;

end

Else if (EstadoInner = ESTADO_VALIDAR_DADOS) then

begin

DataPesq := Copy(DateToStr(Date),4,2) + '/' + Copy(DateToStr(Date),1,2) + '/' + Copy(DateToStr(Date),7,4);

Ret := ReceberDadosOnLine(NumInner, @Origem, @Complemento, @Cartao, @Dia, @Mes, @Ano, @Hora, @Minuto, @Segundo);

if (Ret = Retorno_OK) then

begin

CartaoUsuario := Cartao;

sqlUCatraca := 'Select * From Usuario_Catraca';

sqlUCatraca := sqlUCatraca + ' Where ID = ' + #39 + CartaoUsuario + #39;

Q_UCatraca.Close;

Q_UCatraca.SQL.Clear;

Q_UCatraca.SQL.Add(sqlUCatraca);

Q_UCatraca.Open;

if (Q_UCatraca.FieldByName('TIPO_USER').AsString = 'AL') then

begin

sqlAluno := 'Select * From Aluno';

sqlAluno := sqlAluno + ' Where ID = ' + #39 + Q_UCatraca.FieldByName('COD_ALUNO').AsString + #39;

Q_Aluno.Close;

Q_Aluno.SQL.Clear;

Q_Aluno.SQL.Add(sqlAluno);

Q_Aluno.Open;

CartaoUsuario := StringOfChar('0', 7-Length(CartaoUsuario)) + CartaoUsuario;

sqlControleEntrada := 'Select * From Controle_Entrada';

sqlControleEntrada := sqlControleEntrada + ' Where COD_ALUNO = ' + #39 + CartaoUsuario + #39;

sqlControleEntrada := sqlControleEntrada + ' And DATA_ENTRADA = ' + #39 + DataPesq + #39;

Q_ControleEntrada.Close;

Q_ControleEntrada.SQL.Clear;

Q_ControleEntrada.SQL.Add(sqlControleEntrada);

Q_ControleEntrada.Open;

if (Q_ControleEntrada.RecordCount = 0) then

begin

sqlMensalidade := 'Select * From Mensalidade';

sqlMensalidade := sqlMensalidade + ' Where COD_ALUNO = ' + #39 + Q_Aluno.FieldByName('ID').AsString;

sqlMensalidade := sqlMensalidade + ' And DATA_VENC < ' + #39 + DataPesq + #39;

sqlMensalidade := sqlMensalidade + ' And PAGO = ' + #39 + 'N' + #39;

Q_Mensalidade.Close;

Q_Mensalidade.SQL.Clear;

Q_Mensalidade.SQL.Add(sqlMensalidade);

Q_Mensalidade.Open;

if (Q_Mensalidade.RecordCount = 0) then

begin

EstadoInner := ESTADO_LIBERAR_ENTRADA;

end

Else

begin

EstadoInner := ESTADO_BLOQUEAR_ENTRADA;

end;

end

Else

begin

EstadoInner := ESTADO_LIBERAR_SAIDA;

end;

end

Else if (Q_UCatraca.FieldByName('TIPO_USER').AsString = 'FUN') then

begin

CartaoUsuario := StringOfChar('0', 7-Length(CartaoUsuario)) + CartaoUsuario;

sqlControleEntrada := 'Select * From Controle_Entrada';

sqlControleEntrada := sqlControleEntrada + ' Where COD_ALUNO = ' + #39 + CartaoUsuario + #39;

sqlControleEntrada := sqlControleEntrada + ' And DATA_ENTRADA = ' + #39 + DataPesq + #39;

sqlControleEntrada := sqlControleEntrada + ' And LOGADO = ' + #39 + 'S' + #39;

Q_ControleEntrada.Close;

Q_ControleEntrada.SQL.Clear;

Q_ControleEntrada.SQL.Add(sqlControleEntrada);

Q_ControleEntrada.Open;

if (Q_ControleEntrada.RecordCount = 0) then

begin

EstadoInner := ESTADO_LIBERAR_ENTRADA;

end

Else

begin

EstadoInner := ESTADO_LIBERAR_SAIDA;

end;

end

Else if (Q_UCatraca.FieldByName('TIPO_USER').AsString = 'VIS') then

begin

sqlAluno := 'Select * From Aluno';

sqlAluno := sqlAluno + ' Where ID = ' + #39 + Q_UCatraca.FieldByName('COD_ALUNO').AsString + #39;

Q_Aluno.Close;

Q_Aluno.SQL.Clear;

Q_Aluno.SQL.Add(sqlAluno);

Q_Aluno.Open;

CartaoUsuario := StringOfChar('0', 7-Length(CartaoUsuario)) + CartaoUsuario;

sqlControleEntrada := 'Select * From Controle_Entrada';

sqlControleEntrada := sqlControleEntrada + ' Where COD_ALUNO = ' + #39 + CartaoUsuario + #39;

sqlControleEntrada := sqlControleEntrada + ' And DATA_ENTRADA = ' + #39 + DataPesq + #39;

Q_ControleEntrada.Close;

Q_ControleEntrada.SQL.Clear;

Q_ControleEntrada.SQL.Add(sqlControleEntrada);

Q_ControleEntrada.Open;

if (Q_ControleEntrada.RecordCount = 0) then

begin

sqlMensalidade := 'Select * From Mensalidade';

sqlMensalidade := sqlMensalidade + ' Where COD_ALUNO = ' + #39 + Q_Aluno.FieldByName('ID').AsString;

sqlMensalidade := sqlMensalidade + ' And DATA_VENC < ' + #39 + DataPesq + #39;

Q_Mensalidade.Close;

Q_Mensalidade.SQL.Clear;

Q_Mensalidade.SQL.Add(sqlMensalidade);

Q_Mensalidade.Open;

if (Q_Mensalidade.RecordCount = 0) then

begin

EstadoInner := ESTADO_LIBERAR_ENTRADA;

end

Else

begin

EstadoInner := ESTADO_BLOQUEAR_ENTRADA;

end;

end

Else

begin

EstadoInner := ESTADO_LIBERAR_SAIDA;

end;

end

Else

begin

EstadoInner := ESTADO_LIBERA_DOIS_SENTIDOS;

end;

end;

end

Else if (EstadoInner = ESTADO_LIBERAR_ENTRADA) then

begin

Ret := LiberarCatracaEntrada(NumInner);

if (Ret = Retorno_OK) then begin

if (not DataControle.Active) then

DataControle.Active := True;

CartaoUsuario := StringOfChar('0', 7-Length(CartaoUsuario)) + CartaoUsuario;

DataControle.Insert;

DataControle.FieldByName('COD_ALUNO').AsString := CartaoUsuario;

DataControle.FieldByName('DATA_ENTRADA').AsDateTime := Date;

DataControle.FieldByName('HORA_ENTRADA').AsDateTime := Time;

DataControle.FieldByName('LOGADO').AsString := 'S';

DataControle.Post;

DataModule1.TrasFSM.CommitRetaining;

EstadoInner := ESTADO_ENVIAR_MSG_OK_ENTRADA;

end;

end

Else if (EstadoInner = ESTADO_LIBERAR_SAIDA) then

begin

Ret := LiberarCatracaSaida(NumInner);

if (Ret = Retorno_OK) then begin

if (not DataControle.Active) then

DataControle.Active := True;

CartaoUsuario := StringOfChar('0', 7-Length(CartaoUsuario)) + CartaoUsuario;

DataControle.Edit;

DataControle.FieldByName('DATA_SAIDA').AsDateTime := Date;

DataControle.FieldByName('HORA_SAIDA').AsDateTime := Time;

DataControle.FieldByName('LOGADO').AsString := 'N';

DataControle.Post;

DataModule1.TrasFSM.CommitRetaining;

EstadoInner := ESTADO_ENVIAR_MSG_OK_SAIDA;

end;

end

Else if (EstadoInner = ESTADO_BLOQUEAR_ENTRADA) then

begin

Ret := EnviarComandoAcessoNegado(NumInner);

if (Ret = Retorno_OK) then begin

EstadoInner := ESTADO_MSG_ACESSO_NEGADO;

end;

end

Else if (EstadoInner = ESTADO_ENVIAR_MSG_OK_ENTRADA) then

begin

Ret := EnviarMensagemTemporariaOnLine(NumInner,1,'BEM VINDO', 5);

if (Ret = Retorno_OK) then

begin

AtualizaGrid;

EstadoInner := ESTADO_POOLING;

end;

end

Else if (EstadoInner = ESTADO_ENVIAR_MSG_OK_SAIDA) then

begin

Ret := EnviarMensagemTemporariaOnLine(NumInner,1,'ATE LOGO',5);

if (Ret = Retorno_OK) then

begin

AtualizaGrid;

EstadoInner := ESTADO_POOLING;

end;

end

Else if (EstadoInner = ESTADO_MSG_ACESSO_NEGADO) then

begin

Ret := EnviarMensagemTemporariaOnLine(NumInner,1,'ACESSO NEGADO',5);

if (Ret = Retorno_OK) then begin

AtualizaGrid;

EstadoInner := ESTADO_POOLING;

end;

end;

end;//Final do with

InnerAtual := InnerAtual + 1;

if ((InnerAtual + 1) > TotalInners) then

begin

InnerAtual := 0;

end;

Application.ProcessMessages;

Sleep(TotalInners div 100);

end;//Final do While

end;

procedure TForm_ControleCatraca.btn_MaquinaEstadosClick(Sender: TObject);

var

Count : Integer;

begin

TotalInners := StrToInt(Edit2.Text);

DefinirTipoConexao(ComboBox1.ItemIndex + 1);

for Count := 0 to TotalInners - 1 do begin

InnersMonitoramento[Count].NumInner := StrToint(Edit2.Text);

InnersMonitoramento[Count].EstadoInner := ESTADO_CONECTAR;

end;

DefinirPadraoCartao(1);

FecharPortaComunicacao;

Ret := AbrirPortaComunicacao(StrToint(Edit2.Text));

if (Ret = Retorno_OK) then

begin

InnerAtual := 0;

Parar := False;

MaquinaEstado();

end;

end;

end.

Me ajudem ai

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
Guest --Mario --
Caros estou com problema ao clicar no botão btn_MaquinaDeEstado a aplicação me retorna o Erro: Access Violation at address ...

Não estou conseguindo achar o Erro... o Código é grande, mais resolvi postar para todos..

Grato..

unit U_CatracaPrincipal;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, Grids, DBGrids, ComCtrls, ExtCtrls,

JvExControls, JvComponent, JvLED, DB, MDOCustomDataSet, MDOQuery,

DBCtrls, Mask;

type

TForm_ControleCatraca = class(TForm)

Panel1: TPanel;

StatusBar1: TStatusBar;

Panel2: TPanel;

Panel3: TPanel;

DBGrid1: TDBGrid;

btn_Conectar: TBitBtn;

btn_Desconectar: TBitBtn;

btn_Parar: TBitBtn;

btn_UBiometria: TBitBtn;

GroupBox1: TGroupBox;

Label1: TLabel;

ComboBox1: TComboBox;

Label2: TLabel;

Edit1: TEdit;

Label3: TLabel;

Edit2: TEdit;

Label4: TLabel;

Edit3: TEdit;

btn_MaquinaEstados: TBitBtn;

Label5: TLabel;

Bevel1: TBevel;

Panel_Usuario: TPanel;

Q_Usuario: TMDOQuery;

S_Usuario: TDataSource;

btn_Insere: TBitBtn;

btn_Excluir: TBitBtn;

btn_Sair: TBitBtn;

Bevel2: TBevel;

Bevel3: TBevel;

Q_UsuarioID: TIntegerField;

Q_UsuarioCOD_USER: TIntegerField;

Q_UsuarioTIPO_USER: TMDOStringField;

Q_UsuarioDATA_INC: TDateField;

Q_UsuarioDATA_ALT: TDateField;

Q_UsuarioNOME_USER: TMDOStringField;

Label6: TLabel;

DBEdit1: TDBEdit;

Label7: TLabel;

DBEdit2: TDBEdit;

GroupBox2: TGroupBox;

Edit4: TEdit;

SpeedButton1: TSpeedButton;

Label8: TLabel;

DBEdit3: TDBEdit;

DataControle: TMDODataSet;

S_Controle: TDataSource;

S_ControleEnter: TDataSource;

Q_Controle: TMDOQuery;

DataControleDATA_ENTRADA: TDateField;

DataControleDATA_SAIDA: TDateField;

DataControleHORA_ENTRADA: TTimeField;

DataControleHORA_SAIDA: TTimeField;

DataControleCOD_ALUNO: TMDOStringField;

DataControleLOGADO: TMDOStringField;

DataControleID: TIntegerField;

Q_ControleDATA_ENTRADA: TDateField;

Q_ControleDATA_SAIDA: TDateField;

Q_ControleHORA_ENTRADA: TTimeField;

Q_ControleHORA_SAIDA: TTimeField;

Q_ControleCOD_ALUNO: TMDOStringField;

Q_ControleLOGADO: TMDOStringField;

Q_ControleID: TIntegerField;

Q_Aluno: TMDOQuery;

S_Aluno: TDataSource;

Q_AlunoID: TIntegerField;

Q_AlunoCODIGO: TMDOStringField;

Q_AlunoNOME: TMDOStringField;

Q_AlunoDATA_NASC: TDateField;

Q_AlunoDATA_INC: TDateField;

Q_AlunoDATA_ALT: TDateField;

Q_AlunoDATA_HAB: TDateField;

Q_AlunoRG: TMDOStringField;

Q_AlunoCPF: TMDOStringField;

Q_AlunoFONE: TMDOStringField;

Q_AlunoCEL: TMDOStringField;

Q_AlunoENDERECO: TMDOStringField;

Q_AlunoBAIRRO: TMDOStringField;

Q_AlunoCIDADE: TMDOStringField;

Q_AlunoESTADO: TMDOStringField;

Q_AlunoCOMPLEMENTO: TMDOStringField;

Q_AlunoCEP: TMDOStringField;

Q_AlunoMENORIDADE: TMDOStringField;

Q_AlunoCOD_RESP: TIntegerField;

Q_AlunoPARENTESCO: TMDOStringField;

Q_AlunoEMAIL: TMDOStringField;

Q_UCatraca: TMDOQuery;

S_UCatraca: TDataSource;

Q_Mensalidade: TMDOQuery;

S_Mensalidade: TDataSource;

Q_MensalidadeID: TIntegerField;

Q_MensalidadeCOD_ALUNO: TIntegerField;

Q_MensalidadeCOD_CONTRATO: TIntegerField;

Q_MensalidadeDATA_VENC: TDateField;

Q_MensalidadeDATA_PGTO: TDateField;

Q_MensalidadeVALOR_MENS: TMDOBCDField;

Q_MensalidadeACRESCIMO: TMDOBCDField;

Q_MensalidadeVALOR_PGTO: TMDOBCDField;

Q_MensalidadePAGO: TMDOStringField;

Q_MensalidadeTIPO_PGTO: TMDOStringField;

Q_UCatracaID: TIntegerField;

Q_UCatracaCOD_USER: TIntegerField;

Q_UCatracaTIPO_USER: TMDOStringField;

Q_UCatracaDATA_INC: TDateField;

Q_UCatracaDATA_ALT: TDateField;

Q_UCatracaNOME_USER: TMDOStringField;

S_ControleEntrada: TDataSource;

Q_ControleEntrada: TMDOQuery;

Q_ControleEntradaDATA_ENTRADA: TDateField;

Q_ControleEntradaDATA_SAIDA: TDateField;

Q_ControleEntradaHORA_ENTRADA: TTimeField;

Q_ControleEntradaHORA_SAIDA: TTimeField;

Q_ControleEntradaCOD_ALUNO: TMDOStringField;

Q_ControleEntradaLOGADO: TMDOStringField;

Q_ControleEntradaID: TIntegerField;

procedure btn_ConectarClick(Sender: TObject);

procedure btn_DesconectarClick(Sender: TObject);

procedure MontarConfiguracao;

procedure MenssagemOff;

procedure SpeedButton1Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure btn_UBiometriaClick(Sender: TObject);

procedure btn_SairClick(Sender: TObject);

procedure btn_InsereClick(Sender: TObject);

procedure btn_ExcluirClick(Sender: TObject);

procedure btn_PararClick(Sender: TObject);

procedure AtualizaGrid;

procedure btn_MaquinaEstadosClick(Sender: TObject);

private

{ Private declarations }

function retornar_Segundos: longint;

function conectar: boolean;

procedure pausa(tempo: longint);

procedure SetarTimeout;

function EsperaRespostaBio: boolean;

procedure MaquinaEstado;

public

{ Public declarations }

end;

Const Retorno_OK = 0;

Const Retorno_Erro = 1;

Const Retorno_PortaFechada = 2;

Const Retorno_PortaAberta = 3;

Const Retorno_DLL_Inner2k = 4;

Const Retorno_DLL_InnerTCP = 5;

Const Retorno_DLL_InnerTCP2 = 6;

Const Retorno_ErroGPF = 8;

Const Retorno_TipoConexInvalida = 9;

Const Div_Segundos = 1000;

Const Retorno_BioProcessando = 128;

Type TEstadoInner = (

ESTADO_CONECTAR,

ESTADO_ENVIAR_CFG_ON,

ESTADO_ENVIAR_DATA_HORA,

ESTADO_ENVIAR_MSG_PADRAO,

ESTADO_ENVIAR_MSG_OK_ENTRADA,

ESTADO_ENVIAR_MSG_OK_SAIDA,

ESTADO_CONFIGURAR_ENTRADA_ON,

ESTADO_LIBERAR_ENTRADA,

ESTADO_BLOQUEAR_ENTRADA,

ESTADO_MSG_ACESSO_NEGADO,

ESTADO_VALIDAR_DADOS,

ESTADO_LIBERAR_SAIDA,

ESTADO_NEGAR_ACESSO,

ESTADO_LIBERA_DOIS_SENTIDOS,

ESTADO_POOLING);

type TInner = Record

NumInner: Integer;

EstadoInner: TEstadoInner;

end;

var

Form_ControleCatraca: TForm_ControleCatraca;

Timeout: longint;

Ret: Byte;

Parar: Boolean;

Data: TDateTime;

tDia, tMes, tAno, tHora, tMinuto, tSegundos, tMiliSegundos: Word;

InnersMonitoramento: array of TInner;

TotalInners, InnerAtual: Integer;

implementation

uses U_DataModule, Math;

{$R *.dfm}

Function DefinirTipoConexao(Tipo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function AbrirPortaComunicacao(Porta:Integer):Byte; stdcall; external 'EasyInner.dll';

Procedure FecharPortaComunicacao(); stdcall; external 'EasyInner.dll';

Function DefinirPadraoCartao(padrão:Byte):Byte; stdcall; external 'EasyInner.dll';

Function AcionarRele1( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function AcionarRele2( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function EnviarComandoAcessoNegado( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ManterRele1Acionado( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ManterRele2Acionado( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function DesabilitarRele1( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function DesabilitarRele2( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function AcionarBipCurto( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function AcionarBipIntegero( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function Ping( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ResetarModoOnLine( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LigarBackLite( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function DesligarBackLite( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LigarBipIntermitente( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function DesligarBipIntermitente( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LiberarCatracaEntrada( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LiberarCatracaSaida( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LiberarCatracaEntradaInvertida( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LiberarCatracaSaidaInvertida( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LiberarCatracaDoisSentidos( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function DevolverCartao( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function EngolirCartao( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function LevantarParaOnLine(Inner: Integer):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitorProximidadeHIDAbaTrack2():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitorProximidadeMotorolaAbaTrack2():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitorProximidadeWiegand():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitorProximidadeSmartCard():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitorProximidadeAcura():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitorProximidadeWiegandFacilityCode():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitorProximidadeSmartCardAcura():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarInnerOffLine():Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarInnerOnLine():Byte; stdcall; external 'EasyInner.dll';

Function HabilitarTeclado( Habilita, Ecoar:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarAcionamento1( Funcao,Tempo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarAcionamento2( Funcao,Tempo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarTipoLeitor( Tipo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitor1( Operacao:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarLeitor2( Operacao:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirCodigoEmpresa( Codigo:Integer):Byte; stdcall; external 'EasyInner.dll';

Function DefinirNivelAcesso( Nivel:Byte):Byte; stdcall; external 'EasyInner.dll';

Function UtilizarSenhaAcesso( Utiliza:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirTipoListaAcesso( Tipo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirQuantidadeDigitosCartao( Quantidade:Byte):Byte; stdcall; external 'EasyInner.dll';

Function AvisarQuandoMemoriaCheia( Avisa:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirPorcentagemRevista( Porcentagem:Byte):Byte; stdcall; external 'EasyInner.dll';

Function RegistrarAcessoNegado( TipoRegistro:Byte):Byte; stdcall; external 'EasyInner.dll';

Function CartaoMasterLiberaAcesso( Libera:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirLogicaRele( Logica:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DesabilitarBloqueioCatracaMicroSwitch( Desabilita:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirFuncaoDefaultLeitoresProximidade( Funcao:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirNumeroCartaoMaster( Master:String):Byte; stdcall; external 'EasyInner.dll';

Function DefinirFormasPictogramasMillenium( Forma:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DesabilitarBipCatraca( Desabilita:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirEventoSensor( Sensor,Evento,Tempo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function PermitirCadastroInnerBioVerid( Permite:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ReceberDataHoraDadosOnLine( Recebe:Byte):Byte; stdcall; external 'EasyInner.dll';

Function InserirQuantidadeDigitoVariavel( Digito:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarWiegandDoisLeitores( Habilita,ExibirMensagem:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirFuncaoDefaultSensorBiometria( Funcao:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarConfiguracoes( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function EnviarRelogio( Inner:Integer;

Dia,Mes,Ano,

Hora,Minuto,Segundo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarHorarioVerao( Inner:Integer;

DiaInicio, MesInicio, AnoInicio,

HoraInicio,MinutoInicio,

DiaFim, MesFim,AnoFim,

HoraFim,MinutoFim:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ApagarHorariosAcesso( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function InserirHorarioAcesso( Horario,DiaSemana,FaixaDia,Hora,Minuto:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarHorariosAcesso( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ApagarListaAcesso( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function InserirUsuarioListaAcesso( Cartao:String; Horario:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarListaAcesso( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function EnviarMensagemPadraoOnLine( Inner:Integer; ExibirData:Byte; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function EnviarMensagemTemporariaOnLine( Inner:Integer; ExibirData:Byte; Mensagem:String; Tempo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirMensagemEntradaOffLine( ExibirData:Byte; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function DefinirMensagemSaidaOffLine( ExibirData:Byte; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function DefinirMensagemPadraoOffLine( ExibirData:Byte; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function DefinirMensagemFuncaoOffLine( Mensagem:String; Funcao,Habilitada:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarMensagensOffLine( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ApagarMensagensOffLine( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ApagarHorariosSirene( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function InserirHorarioSirene( Hora, Minuto,

Segunda, Terca, Quarta, Quinta,

Sexta, Sabado, DomingoFeriado:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarHorariosSirene( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ColetarBilhete( Inner:Integer; Tipo, Dia, Mes, Ano, Hora, Minuto: Pointer; Cartao:PChar):Byte; stdcall; external 'EasyInner.dll';

Function EnviarFormasEntradasOnLine( Inner:Integer;QtdeDigitosTeclado,EcoTeclado,FormaEntrada,TempoTeclado,PosicaoCursorTeclado:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ReceberDadosOnLine( Inner:Integer; Origem, Complemento: Pointer; Cartao: PChar; Dia, Mes, Ano, Hora, Minuto, Segundo:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function LerSensoresInner( Inner:Integer; StatusSensor1, StatusSensor2, StatusSensor3:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function EnviarMensagemImpressora00( Inner:Integer; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function EnviarMensagemImpressoraFF( Inner:Integer; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function HabilitarMudancaOnLineOffLine( Habilita, Tempo:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirEntradasMudancaOffLine( Teclado, Leitor1, Leitor2, Catraca:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirMensagemPadraoMudancaOffLine( ExibirData:Byte; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function DefinirMensagemPadraoMudancaOnLine( ExibirData:Byte; Mensagem:String):Byte; stdcall; external 'EasyInner.dll';

Function DefinirEntradasMudancaOnLine( Entrada:Byte):Byte; stdcall; external 'EasyInner.dll';

Function DefinirConfiguracaoTecladoOnLine( Digitos, EcoDisplay, Tempo, PosicaoCursor:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarConfiguracoesMudancaAutomaticaOnLineOffLine( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function DefinirConfiguracoesFuncoes( Funcao, Catraca, Rele1, Rele2, Lista, Biometria:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarConfiguracoesFuncoes( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function SolicitarModeloBio( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ReceberModeloBio( Inner:Integer; OnLine:Byte; Modelo:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function SolicitarVersaoBio( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ReceberVersaoBio( Inner:Integer; OnLine:Byte; VersaoAlta, VersaoBaixa:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function SolicitarQuantidadeUsuariosBio( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ReceberQuantidadeUsuariosBio( Inner:Integer; OnLine:Byte; Quantidade:Pointer):Byte; stdcall; external 'EasyInner.dll';

Procedure InicializarColetaListaUsuariosBio(); stdcall; external 'EasyInner.dll';

Function SolicitarListaUsuariosBio( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ReceberPacoteListaUsuariosBio( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ReceberUsuarioLista( Inner:Integer; Usuario:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function TemProximoUsuario():Integer; stdcall; external 'EasyInner.dll';

Function TemProximoPacote():Integer; stdcall; external 'EasyInner.dll';

procedure SetarBioLight(Light: Integer); stdcall; external 'EasyInner.dll';

Function SolicitarUsuarioCadastradoBio( Inner:Integer; Usuario:String):Byte; stdcall; external 'EasyInner.dll';

Function ReceberUsuarioCadastradoBio( Inner:Integer; OnLine:Byte; Template:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function SolicitarExclusaoUsuario( Inner:Integer; Usuario:String):Byte; stdcall; external 'EasyInner.dll';

Function UsuarioFoiExcluido( Inner:Integer; OnLine:Byte):Byte; stdcall; external 'EasyInner.dll';

Function InserirUsuarioLeitorBio( Inner:Integer; Tipo:Byte; Usuario:String):Byte; stdcall; external 'EasyInner.dll';

Function ResultadoInsercaoUsuarioLeitorBio( Inner:Integer; OnLine:Byte):Byte; stdcall; external 'EasyInner.dll';

Function FazerVerificacaoBiometricaBio( Inner:Integer; Usuario:String):Byte; stdcall; external 'EasyInner.dll';

Function ResultadoVerificacaoBiometrica( Inner:Integer; OnLine:Byte):Byte; stdcall; external 'EasyInner.dll';

Function FazerIdentificacaoBiometricaBio( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ResultadoIdentificacaoBiometrica( Inner:Integer; OnLine:Byte; Usuario:PChar):Byte; stdcall; external 'EasyInner.dll';

Function SolicitarTemplateLeitor( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function ReceberTemplateLeitor( Inner:Integer; OnLine:Byte; Template:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function ConfigurarBio( Inner:Integer; HabilitaIdentificacao, HabilitaVerificacao:Byte):Byte; stdcall; external 'EasyInner.dll';

Function ResultadoConfiguracaoBio( Inner:Integer; OnLine:Byte):Byte; stdcall; external 'EasyInner.dll';

Function EnviarUsuarioBio( Inner:Integer; Template:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function UsuarioFoiEnviado( Inner:Integer; OnLine:Byte):Byte; stdcall; external 'EasyInner.dll';

Function CompararDigitalLeitor( Inner:Integer; Template:Pointer):Byte; stdcall; external 'EasyInner.dll';

Function ResultadoComparacaoDigitalLeitor( Inner:Integer; OnLine:Byte):Byte; stdcall; external 'EasyInner.dll';

Function IncluirUsuarioSemDigitalBio( Cartao:String):Byte; stdcall; external 'EasyInner.dll';

Function EnviarListaUsuariosSemDigitalBio( Inner:Integer):Byte; stdcall; external 'EasyInner.dll';

Function EnviarStringInicializacaoModem(Str:String): Integer; stdcall; external 'EasyInner.dll';

Function LerByteModem(): Integer; stdcall; external 'EasyInner.dll';

Function ConectarModem(Porta: Integer; Str:String; Tom: Integer; Telefone:String; Inner: Integer): Integer; stdcall; external 'EasyInner.dll';

function GetTickCount(): longint; stdcall; external 'kernel32.dll';

procedure Sleep(ms: longint); stdcall; external 'kernel32.dll';

{ TForm1 }

function TForm_ControleCatraca.conectar: boolean;

var

Fim: longint;

Retorno: Boolean;

begin

DefinirTipoConexao(ComboBox1.ItemIndex + 1);

FecharPortaComunicacao;

Ret := AbrirPortaComunicacao(strToInt(Edit1.Text));

Conectar := False;

if (Ret = Retorno_OK) then

begin

Ret := Retorno_Erro;

Fim := Retornar_Segundos() + 15;

While (Retornar_Segundos <= Fim) and (Ret <> Retorno_OK) Do

begin

Pausa(1);

Ret := Ping(strToInt(Edit2.Text));

end;

Retorno := (Ret = Retorno_OK);

Conectar := Retorno;

if (not Retorno) then

begin

Application.MessageBox('Erro ao Conectar com a Catraca','Erro',MB_OK+MB_IconError);

//Led_Conectar.Status := False;

end

Else

begin

Data := Now;

DecodeDate(Data, tAno, tMes, tDia);

DecodeTime(Data, tHora, tMinuto, tSegundos, tMiliSegundos);

tAno := StrToInt(Copy(IntToStr(tAno),3,2));

EnviarRelogio(strToInt(Edit2.Text),Byte(tDia),Byte(tMes), Byte(tAno), Byte(tHora), Byte(tMinuto),Byte(tSegundos));

EnviarMensagemPadraoOnLine(strToInt(Edit2.Text),1,'Estado - On Line');

//Led_Conectar.Status := True;

Label5.Font.Color := clGreen;

Label5.Caption := 'Conectado - On Line';

btn_Desconectar.Enabled := True;

btn_UBiometria.Enabled := True;

btn_Conectar.Enabled := False;

end;

end;

end;

function TForm_ControleCatraca.EsperaRespostaBio: boolean;

begin

EsperaRespostaBio := (Ret = Retorno_BioProcessando) and (Retornar_Segundos() <= Timeout);

end;

procedure TForm_ControleCatraca.pausa(tempo: Integer);

begin

Sleep(Tempo);

Application.ProcessMessages;

end;

function TForm_ControleCatraca.retornar_Segundos: longint;

begin

retornar_Segundos := (getTickCount() div DIV_SEGUNDOS);

end;

procedure TForm_ControleCatraca.SetarTimeout;

begin

Timeout := Retornar_Segundos() + 7;

end;

procedure TForm_ControleCatraca.btn_ConectarClick(Sender: TObject);

begin

Conectar();

end;

procedure TForm_ControleCatraca.btn_DesconectarClick(Sender: TObject);

label

Fim;

begin

if Conectar() Then

begin

MontarConfiguracao;

Ret := EnviarConfiguracoes(StrToInt(Edit2.Text));

if (Ret = Retorno_OK) then

begin

Label5.Caption := 'Configurações Enviadas';

pausa(1000);

end

Else

begin

Label5.Caption := 'Erro no Envio das Configurações';

goto Fim;

end;

Pausa(1000);

Data := Now;

DecodeDate(Data, tAno, tMes, tDia);

DecodeTime(Data, tHora, tMinuto, tSegundos, tMiliSegundos);

tAno := StrToInt(Copy(IntToStr(tAno),3,2));

Ret := EnviarRelogio(StrToInt(Edit2.Text), Byte(tDia), Byte(tMes), Byte(tAno), Byte(tHora), Byte(tMinuto), Byte(tSegundos));

if (Ret = Retorno_OK) then

begin

Label5.Caption := 'Relógio Enviado';

end

Else

begin

Label5.Caption := 'Erro no Envio do Relógio';

goto Fim;

end;

Pausa(1000);

MenssagemOff;

Ret := EnviarMensagensOffLine(StrToInt(Edit2.Text));

if (Ret = Retorno_OK) then

begin

Label5.Caption := 'Mensagem Enviada';

Pausa(1000)

end

Else

begin

Label5.Caption := 'Erroa no Envio da Mensagem';

goto Fim;

end;

Pausa(1000);

Fim:

FecharPortaComunicacao;

btn_Desconectar.Enabled := False;

btn_UBiometria.Enabled := False;

btn_Conectar.Enabled := True;

Label5.Caption := 'Desconectado - Off Line';

Label5.Font.Color := clBlack;

//Led_Conectar.Status := False;

Pausa(1000);

end;

end;

procedure TForm_ControleCatraca.MontarConfiguracao;

begin

DefinirPadraoCartao(1);

DefinirNumeroCartaoMaster('1');

ConfigurarInnerOffLine();

HabilitarTeclado(1, 0);

ConfigurarAcionamento1(1, 15);

ConfigurarAcionamento2(0, 0);

ConfigurarTipoLeitor(0);

ConfigurarLeitor1(3);

ConfigurarLeitor2(3);

//DesabilitarBipCatraca(0);

DefinirTipoListaAcesso(0);

DefinirQuantidadeDigitosCartao(strToint(Edit3.Text));

end;

procedure TForm_ControleCatraca.MenssagemOff;

begin

DefinirMensagemPadraoOffLine(1,'Estado-Off Line');

DefinirMensagemEntradaOffLine(1, 'Seja Bem Vindo');

DefinirMensagemSaidaOffLine(1,'Até Logo');

end;

procedure TForm_ControleCatraca.SpeedButton1Click(Sender: TObject);

var

sqlUsuario1: String;

begin

sqlUsuario1 := 'Select * From Usuario_Catraca';

sqlUsuario1 := sqlUsuario1 + ' Where ID = ' + #39 + Edit4.Text + #39;

Q_Usuario.Close;

Q_Usuario.SQL.Clear;

Q_Usuario.SQL.Add(sqlUsuario1);

Q_Usuario.Open;

if Q_Usuario.RecordCount = 0 then

begin

ShowMessage('Usuario Não Encontrado');

Edit4.Clear;

Edit4.SetFocus;

end

Else

begin

Edit4.Clear;

Edit4.SetFocus;

end;

end;

procedure TForm_ControleCatraca.FormActivate(Sender: TObject);

begin

Panel_Usuario.Visible := False;

//AtualizaGrid;

end;

procedure TForm_ControleCatraca.btn_UBiometriaClick(Sender: TObject);

begin

DataModule1.DBaseFSM.Close;

DataModule1.TrasFSM.Active := False;

DataModule1.DBaseFSM.Open;

DataModule1.TrasFSM.Active := True;

Panel_Usuario.Visible := True;

Q_Usuario.Close;

Q_Usuario.SQL.Clear;

Q_Usuario.SQL.Add('Select * From Usuario_Catraca');

Q_Usuario.Open;

end;

procedure TForm_ControleCatraca.btn_SairClick(Sender: TObject);

begin

Q_Usuario.Close;

Q_Usuario.SQL.Clear;

Panel_Usuario.Visible := False;

end;

procedure TForm_ControleCatraca.btn_InsereClick(Sender: TObject);

var

usuario: String;

begin

if Conectar() then

begin

usuario := DBEdit1.Text;

Ret := InserirUsuarioLeitorBio(strToInt(Edit2.Text),0, usuario);

Pausa(15);

if (Ret = Retorno_OK) then

begin

Ret := Retorno_BioProcessando;

SetarTimeout;

While EsperaRespostaBio() do

begin

Pausa(15);

Ret := ResultadoInsercaoUsuarioLeitorBio(StrToInt(Edit2.Text),1);

End;

end;

if (Ret <> Retorno_OK) then

begin

ShowMessage('Erro ao Inserir o Usuário');

end;

Ret := InserirUsuarioLeitorBio(StrToInt(Edit2.Text),1, usuario);

Pausa(15);

if (Ret = Retorno_OK) then

begin

Ret := Retorno_BioProcessando;

SetarTimeout;

while EsperaRespostaBio Do

begin

Pausa(15);

Ret := ResultadoInsercaoUsuarioLeitorBio(StrToInt(Edit2.Text),1);

end;

end;

if (Ret = Retorno_OK) then

begin

ShowMessage('Usuário Inserido com Sucesso!');

end

Else

begin

ShowMessage('Erro ao Inserir o Usuário');

end;

FecharPortaComunicacao;

end;

end;

procedure TForm_ControleCatraca.btn_ExcluirClick(Sender: TObject);

var

usuario: String;

begin

if Conectar() then

begin

Usuario := DBEdit1.Text;

Ret := SolicitarExclusaoUsuario(strToInt(Edit2.Text), Usuario);

if (Ret = Retorno_OK) then

begin

Ret := Retorno_BioProcessando;

SetarTimeout;

while EsperaRespostaBio Do

begin

Pausa(15);

Ret := UsuarioFoiExcluido(StrToInt(Edit2.Text), 0);

end;

end;

if (Ret = Retorno_OK) then

begin

ShowMessage('Usuário Excluido Com Sucesso');

end

Else

begin

ShowMessage('Erro ao Excluir o Usuário');

end;

end;

FecharPortaComunicacao;

end;

procedure TForm_ControleCatraca.btn_PararClick(Sender: TObject);

begin

Parar := True;

FecharPortaComunicacao();

end;

procedure TForm_ControleCatraca.AtualizaGrid;

var

sqlControle, DataPesq: String;

begin

DataPesq := Copy(DateToStr(Date),4,2) + '/' + Copy(DateToStr(Date),1,2) + '/' + Copy(DateToStr(Date),7,4);

sqlControle := 'Select * From CONTROLE_ENTRADA';

sqlControle := sqlControle + ' Where DATA_ENTRADA = ' + #39 + DataPesq + #39;

Q_Controle.Close;

Q_Controle.SQL.Clear;

Q_Controle.SQL.Add(sqlControle);

Q_Controle.Open;

end;

procedure TForm_ControleCatraca.MaquinaEstado;

var

Origem, Complemento: Byte;

Cartao: array[0..7] of Char;

Dia, Mes, Ano: Byte;

Hora, Minuto, Segundo: Byte;

sqlAluno, sqlControleEntrada, sqlMensalidade, sqlUCatraca: String;

CartaoUsuario: String;

DataPesq: String;

begin

while (not Parar) Do

begin

with InnersMonitoramento[innerAtual] Do

begin

if (EstadoInner = ESTADO_CONECTAR) then

begin

Label5.Caption := 'Entrando em Máquina de Estado...';

Ret := Ping(NumInner);

if (Ret = Retorno_OK) then

begin

Label5.Caption := 'Enviando Configurações...';

EstadoInner := ESTADO_ENVIAR_CFG_ON;

end;

end

Else if (EstadoInner = ESTADO_ENVIAR_CFG_ON) then

begin

ConfigurarInnerOnLine();

ConfigurarAcionamento1(1,15);

ConfigurarTipoLeitor(0);

DefinirQuantidadeDigitosCartao(StrToInt(Edit3.Text));

DefinirNumeroCartaoMaster(IntToStr(1));

CartaoMasterLiberaAcesso(1);

ReceberDataHoraDadosOnLine(1);

Ret := EnviarConfiguracoes(NumInner);

if (Ret = Retorno_OK) then

begin

Label5.Caption := 'Envio das Configurações';

EstadoInner := ESTADO_ENVIAR_DATA_HORA;

end;

end

Else if (EstadoInner = ESTADO_ENVIAR_DATA_HORA) then

begin

Data := Now;

DecodeDate(Data, tAno, tMes, tDia);

DecodeTime(Data,tHora, tMinuto, tSegundos, tMiliSegundos);

tAno := StrToInt(Copy(IntToStr(tAno),3,2));

Ret := EnviarRelogio(NumInner,Byte(tDia),Byte(tMes), Byte(tAno), Byte(tHora),Byte(tMinuto), Byte(tSegundos));

if (Ret = Retorno_OK) then

begin

label5.Caption := 'Envio de Relógio';

EstadoInner := ESTADO_ENVIAR_MSG_PADRAO;

end;

end

Else if (EstadoInner = ESTADO_ENVIAR_MSG_PADRAO) then

begin

Ret := EnviarMensagemPadraoOnLine(NumInner,1,' IDENTIFICACAO ');

if (Ret = Retorno_OK) then

begin

label5.Caption := 'Envio de Mensagem Padrão';

EstadoInner := ESTADO_CONFIGURAR_ENTRADA_ON;

end;

end

Else if (EstadoInner = ESTADO_CONFIGURAR_ENTRADA_ON) then

begin

label5.Caption := 'Maquina de Estados - Coletando';

Ret := EnviarFormasEntradasOnLine(NumInner,7,1,12,15,17);

if (Ret = Retorno_OK) then

begin

EstadoInner := ESTADO_POOLING;

end;

end

Else if (EstadoInner = ESTADO_POOLING) then

begin

Ret := ReceberDadosOnLine(NumInner, @Origem, @Complemento, @Cartao, @Dia, @Mes, @Ano, @Hora, @Minuto, @Segundo);

if (Ret = Retorno_OK) then

begin

EstadoInner := ESTADO_VALIDAR_DADOS;

end;

end

Else if (EstadoInner = ESTADO_VALIDAR_DADOS) then

begin

DataPesq := Copy(DateToStr(Date),4,2) + '/' + Copy(DateToStr(Date),1,2) + '/' + Copy(DateToStr(Date),7,4);

Ret := ReceberDadosOnLine(NumInner, @Origem, @Complemento, @Cartao, @Dia, @Mes, @Ano, @Hora, @Minuto, @Segundo);

if (Ret = Retorno_OK) then

begin

CartaoUsuario := Cartao;

sqlUCatraca := 'Select * From Usuario_Catraca';

sqlUCatraca := sqlUCatraca + ' Where ID = ' + #39 + CartaoUsuario + #39;

Q_UCatraca.Close;

Q_UCatraca.SQL.Clear;

Q_UCatraca.SQL.Add(sqlUCatraca);

Q_UCatraca.Open;

if (Q_UCatraca.FieldByName('TIPO_USER').AsString = 'AL') then

begin

sqlAluno := 'Select * From Aluno';

sqlAluno := sqlAluno + ' Where ID = ' + #39 + Q_UCatraca.FieldByName('COD_ALUNO').AsString + #39;

Q_Aluno.Close;

Q_Aluno.SQL.Clear;

Q_Aluno.SQL.Add(sqlAluno);

Q_Aluno.Open;

CartaoUsuario := StringOfChar('0', 7-Length(CartaoUsuario)) + CartaoUsuario;

sqlControleEntrada := 'Select * From Controle_Entrada';

sqlControleEntrada := sqlControleEntrada + ' Where COD_ALUNO = ' + #39 + CartaoUsuario + #39;

sqlControleEntrada := sqlControleEntrada + ' And DATA_ENTRADA = ' + #39 + DataPesq + #39;

Q_ControleEntrada.Close;

Q_ControleEntrada.SQL.Clear;

Q_ControleEntrada.SQL.Add(sqlControleEntrada);

Q_ControleEntrada.Open;

if (Q_ControleEntrada.RecordCount = 0) then

begin

sqlMensalidade := 'Select * From Mensalidade';

sqlMensalidade := sqlMensalidade + ' Where COD_ALUNO = ' + #39 + Q_Aluno.FieldByName('ID').AsString;

sqlMensalidade := sqlMensalidade + ' And DATA_VENC < ' + #39 + DataPesq + #39;

sqlMensalidade := sqlMensalidade + ' And PAGO = ' + #39 + 'N' + #39;

Q_Mensalidade.Close;

Q_Mensalidade.SQL.Clear;

Q_Mensalidade.SQL.Add(sqlMensalidade);

Q_Mensalidade.Open;

if (Q_Mensalidade.RecordCount = 0) then

begin

EstadoInner := ESTADO_LIBERAR_ENTRADA;

end

Else

begin

EstadoInner := ESTADO_BLOQUEAR_ENTRADA;

end;

end

Else

begin

EstadoInner := ESTADO_LIBERAR_SAIDA;

end;

end

Else if (Q_UCatraca.FieldByName('TIPO_USER').AsString = 'FUN') then

begin

CartaoUsuario := StringOfChar('0', 7-Length(CartaoUsuario)) + CartaoUsuario;

sqlControleEntrada := 'Select * From Controle_Entrada';

sqlControleEntrada := sqlControleEntrada + ' Where COD_ALUNO = ' + #39 + CartaoUsuario + #39;

sqlControleEntrada := sqlControleEntrada + ' And DATA_ENTRADA = ' + #39 + DataPesq + #39;

sqlControleEntrada := sqlControleEntrada + ' And LOGADO = ' + #39 + 'S' + #39;

Q_ControleEntrada.Close;

Q_ControleEntrada.SQL.Clear;

Q_ControleEntrada.SQL.Add(sqlControleEntrada);

Q_ControleEntrada.Open;

if (Q_ControleEntrada.RecordCount = 0) then

begin

EstadoInner := ESTADO_LIBERAR_ENTRADA;

end

Else

begin

EstadoInner := ESTADO_LIBERAR_SAIDA;

end;

end

Else if (Q_UCatraca.FieldByName('TIPO_USER').AsString = 'VIS') then

begin

sqlAluno := 'Select * From Aluno';

sqlAluno := sqlAluno + ' Where ID = ' + #39 + Q_UCatraca.FieldByName('COD_ALUNO').AsString + #39;

Q_Aluno.Close;

Q_Aluno.SQL.Clear;

Q_Aluno.SQL.Add(sqlAluno);

Q_Aluno.Open;

CartaoUsuario := StringOfChar('0', 7-Length(CartaoUsuario)) + CartaoUsuario;

sqlControleEntrada := 'Select * From Controle_Entrada';

sqlControleEntrada := sqlControleEntrada + ' Where COD_ALUNO = ' + #39 + CartaoUsuario + #39;

sqlControleEntrada := sqlControleEntrada + ' And DATA_ENTRADA = ' + #39 + DataPesq + #39;

Q_ControleEntrada.Close;

Q_ControleEntrada.SQL.Clear;

Q_ControleEntrada.SQL.Add(sqlControleEntrada);

Q_ControleEntrada.Open;

if (Q_ControleEntrada.RecordCount = 0) then

begin

sqlMensalidade := 'Select * From Mensalidade';

sqlMensalidade := sqlMensalidade + ' Where COD_ALUNO = ' + #39 + Q_Aluno.FieldByName('ID').AsString;

sqlMensalidade := sqlMensalidade + ' And DATA_VENC < ' + #39 + DataPesq + #39;

Q_Mensalidade.Close;

Q_Mensalidade.SQL.Clear;

Q_Mensalidade.SQL.Add(sqlMensalidade);

Q_Mensalidade.Open;

if (Q_Mensalidade.RecordCount = 0) then

begin

EstadoInner := ESTADO_LIBERAR_ENTRADA;

end

Else

begin

EstadoInner := ESTADO_BLOQUEAR_ENTRADA;

end;

end

Else

begin

EstadoInner := ESTADO_LIBERAR_SAIDA;

end;

end

Else

begin

EstadoInner := ESTADO_LIBERA_DOIS_SENTIDOS;

end;

end;

end

Else if (EstadoInner = ESTADO_LIBERAR_ENTRADA) then

begin

Ret := LiberarCatracaEntrada(NumInner);

if (Ret = Retorno_OK) then begin

if (not DataControle.Active) then

DataControle.Active := True;

CartaoUsuario := StringOfChar('0', 7-Length(CartaoUsuario)) + CartaoUsuario;

DataControle.Insert;

DataControle.FieldByName('COD_ALUNO').AsString := CartaoUsuario;

DataControle.FieldByName('DATA_ENTRADA').AsDateTime := Date;

DataControle.FieldByName('HORA_ENTRADA').AsDateTime := Time;

DataControle.FieldByName('LOGADO').AsString := 'S';

DataControle.Post;

DataModule1.TrasFSM.CommitRetaining;

EstadoInner := ESTADO_ENVIAR_MSG_OK_ENTRADA;

end;

end

Else if (EstadoInner = ESTADO_LIBERAR_SAIDA) then

begin

Ret := LiberarCatracaSaida(NumInner);

if (Ret = Retorno_OK) then begin

if (not DataControle.Active) then

DataControle.Active := True;

CartaoUsuario := StringOfChar('0', 7-Length(CartaoUsuario)) + CartaoUsuario;

DataControle.Edit;

DataControle.FieldByName('DATA_SAIDA').AsDateTime := Date;

DataControle.FieldByName('HORA_SAIDA').AsDateTime := Time;

DataControle.FieldByName('LOGADO').AsString := 'N';

DataControle.Post;

DataModule1.TrasFSM.CommitRetaining;

EstadoInner := ESTADO_ENVIAR_MSG_OK_SAIDA;

end;

end

Else if (EstadoInner = ESTADO_BLOQUEAR_ENTRADA) then

begin

Ret := EnviarComandoAcessoNegado(NumInner);

if (Ret = Retorno_OK) then begin

EstadoInner := ESTADO_MSG_ACESSO_NEGADO;

end;

end

Else if (EstadoInner = ESTADO_ENVIAR_MSG_OK_ENTRADA) then

begin

Ret := EnviarMensagemTemporariaOnLine(NumInner,1,'BEM VINDO', 5);

if (Ret = Retorno_OK) then

begin

AtualizaGrid;

EstadoInner := ESTADO_POOLING;

end;

end

Else if (EstadoInner = ESTADO_ENVIAR_MSG_OK_SAIDA) then

begin

Ret := EnviarMensagemTemporariaOnLine(NumInner,1,'ATE LOGO',5);

if (Ret = Retorno_OK) then

begin

AtualizaGrid;

EstadoInner := ESTADO_POOLING;

end;

end

Else if (EstadoInner = ESTADO_MSG_ACESSO_NEGADO) then

begin

Ret := EnviarMensagemTemporariaOnLine(NumInner,1,'ACESSO NEGADO',5);

if (Ret = Retorno_OK) then begin

AtualizaGrid;

EstadoInner := ESTADO_POOLING;

end;

end;

end;//Final do with

InnerAtual := InnerAtual + 1;

if ((InnerAtual + 1) > TotalInners) then

begin

InnerAtual := 0;

end;

Application.ProcessMessages;

Sleep(TotalInners div 100);

end;//Final do While

end;

procedure TForm_ControleCatraca.btn_MaquinaEstadosClick(Sender: TObject);

var

Count : Integer;

begin

TotalInners := StrToInt(Edit2.Text);

DefinirTipoConexao(ComboBox1.ItemIndex + 1);

for Count := 0 to TotalInners - 1 do begin

InnersMonitoramento[Count].NumInner := StrToint(Edit2.Text);

InnersMonitoramento[Count].EstadoInner := ESTADO_CONECTAR;

end;

DefinirPadraoCartao(1);

FecharPortaComunicacao;

Ret := AbrirPortaComunicacao(StrToint(Edit2.Text));

if (Ret = Retorno_OK) then

begin

InnerAtual := 0;

Parar := False;

MaquinaEstado();

end;

end;

end.

Me ajudem ai

uma parte resolvei, estava falatando o setlength(..,..)

procedure TForm_ControleCatraca.btn_MaquinaEstadosClick(Sender: TObject);

var

Count : Integer;

begin

TotalInners := StrToInt(Edit2.Text);

DefinirTipoConexao(ComboBox1.ItemIndex + 1);

SetLength(InnersMonitoramento, TotalInners);

for Count := 0 to TotalInners - 1 do begin

InnersMonitoramento[Count].NumInner := StrToint(Edit2.Text);

InnersMonitoramento[Count].EstadoInner := ESTADO_CONECTAR;

end;

DefinirPadraoCartao(1);

FecharPortaComunicacao;

Ret := AbrirPortaComunicacao(StrToint(Edit2.Text));

if (Ret = Retorno_OK) then

begin

InnerAtual := 0;

Parar := False;

MaquinaEstado();

end;

Agora o problema está no codigo do btn_parar, é o botão que para o estado pooling.

ao debugar percebe que passa normal pelos comando do botão, porém o erro está na hora de sair do while na procedure maquinaEstado.

se alguém souber...

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...