Guest Mario Antonio Postado Outubro 7, 2008 Denunciar Share Postado Outubro 7, 2008 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;interfaceuses 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;implementationuses 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;varFim: 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);labelFim;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);varsqlUsuario1: 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);beginPanel_Usuario.Visible := False;//AtualizaGrid;end;procedure TForm_ControleCatraca.btn_UBiometriaClick(Sender: TObject);beginDataModule1.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);varusuario: 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);varusuario: 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;varsqlControle, DataPesq: String;beginDataPesq := 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;varOrigem, 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 Whileend;procedure TForm_ControleCatraca.btn_MaquinaEstadosClick(Sender: TObject);varCount : 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --Mario -- Postado Outubro 8, 2008 Denunciar Share Postado Outubro 8, 2008 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;interfaceuses 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;implementationuses 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;varFim: 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);labelFim;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);varsqlUsuario1: 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);beginPanel_Usuario.Visible := False;//AtualizaGrid;end;procedure TForm_ControleCatraca.btn_UBiometriaClick(Sender: TObject);beginDataModule1.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);varusuario: 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);varusuario: 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;varsqlControle, DataPesq: String;beginDataPesq := 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;varOrigem, 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 Whileend;procedure TForm_ControleCatraca.btn_MaquinaEstadosClick(Sender: TObject);varCount : 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 aiuma parte resolvei, estava falatando o setlength(..,..)procedure TForm_ControleCatraca.btn_MaquinaEstadosClick(Sender: TObject);varCount : Integer;beginTotalInners := StrToInt(Edit2.Text);DefinirTipoConexao(ComboBox1.ItemIndex + 1);SetLength(InnersMonitoramento, TotalInners);for Count := 0 to TotalInners - 1 do beginInnersMonitoramento[Count].NumInner := StrToint(Edit2.Text);InnersMonitoramento[Count].EstadoInner := ESTADO_CONECTAR;end;DefinirPadraoCartao(1);FecharPortaComunicacao;Ret := AbrirPortaComunicacao(StrToint(Edit2.Text));if (Ret = Retorno_OK) thenbeginInnerAtual := 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
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
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.