Advertisement
Guest User

Untitled

a guest
Jun 21st, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.62 KB | None | 0 0
  1. type
  2.   EResNotValid = class (Exception);
  3.   EResUnknownCmd = class (Exception);
  4.   EResNotValidLength = class (Exception);
  5. Const
  6.   RESPONSE_TIMEOUT  = Int16(1000);
  7.   CONNECT_TIMEOUT   = Int16(5000);
  8.   RESPONSE_LENGTH   = int8(8);
  9.  
  10.   //RESPONSE
  11.   RESPONSE = int8(#$52);
  12.  
  13.   //COMANDO
  14.   COMMAND = int8(#$41);
  15.  
  16.   //OPERACIONES
  17.   //Mandar Pulso
  18.   PULSE   = int8(#$50);
  19.   //Leer Entradas
  20.   R_IN    = int8(#$45);
  21.   //Leer Salidas
  22.   W_OUT   = int8(#$53);
  23.  
  24.   //VALOR
  25.   ZERO    = Int8(#$00);
  26.  
  27. function TDataModule1.sendCommand(comando, operacion,
  28.   valor:Integer; IP:String; Port: Integer): TIdBytes;
  29. var
  30.   IdTCPClientL          : TIdTCPClient;
  31.   WriteBytes, response  : TIdBytes;
  32. begin
  33.   IdTCPClientL := TIdTCPClient.Create(nil);
  34.   IdTCPClientL.Host := IP;
  35.   IdTCPClientL.Port := Port;
  36. //  IdTCPClientL.ConnectTimeout:= CONNECT_TIMEOUT;
  37.   IdTCPClientL.ReadTimeout := RESPONSE_TIMEOUT;
  38. //  IdTCPClientL.BoundPortMin := 49152;
  39. //  IdTCPClientL.BoundPortMax := 49162;
  40.  
  41.   SetLength(WriteBytes,4);
  42.  
  43.   WriteBytes[0]:= comando;
  44.   WriteBytes[1]:= operacion;
  45.   WriteBytes[2]:= valor;
  46.   WriteBytes[3]:= ZERO;
  47.  
  48.   try
  49.     IdTCPClientL.Connect;
  50.     if IdTCPClientL.Connected then
  51.     begin
  52.       IdTCPClientL.IOHandler.Write(WriteBytes);
  53.       if IdTCPClientL.IOHandler.InputBufferIsEmpty then
  54.       begin
  55.         IdTCPClientL.IOHandler.CheckForDataOnSource(1000);
  56.         IdTCPClientL.IOHandler.CheckForDisconnect;
  57.         if IdTCPClientL.IOHandler.InputBufferIsEmpty then Exit;
  58.       end;
  59.       IdTCPClientL.IOHandler.ReadBytes(response, IdTCPClientL.IOHandler.InputBuffer.Size);
  60.       result := response;
  61.     end;
  62.   finally
  63.     IdTCPClientL.Disconnect;
  64.     IdTCPClientL.Free;
  65.   end;
  66. end;
  67.  
  68. function TDataModule1.requestStatus(IP: String; Port: Integer): TIdBytes;
  69. begin
  70.   result := sendCommand(COMMAND,R_IN,ZERO,IP,Port);
  71. end;
  72.  
  73. function TDataModule1.ReadIN(received: TIdBytes): Byte;
  74. begin
  75.   if (Length(received) = RESPONSE_LENGTH) then
  76.   begin
  77.     if (received[1] = COMMAND) and (received[0] = RESPONSE) then
  78.     begin
  79.       case received[2] of
  80.         R_IN: begin
  81.           result := received[5];
  82.         end;
  83.         PULSE:begin
  84.           result := received[5];
  85.         end;
  86.         W_OUT:begin
  87.           result := received[5];
  88.         end;
  89.         else
  90.           raise EResUnknownCmd.Create('Unknown Command: '+received[2].ToString+'.');
  91.       end;
  92.     end
  93.     else
  94.       raise EResNotValid.Create('Not a valid response.');
  95.   end
  96.   else
  97.     raise EResNotValidLength.Create('Not a valid size, received length: '+Length(received).ToString);
  98. end;
  99.  
  100. function TDataModule1.ReadOUT(received: TIdBytes): Byte;
  101. begin
  102.   if (Length(received) = RESPONSE_LENGTH) then
  103.   begin
  104.     if (received[1] = COMMAND) and (received[0] = RESPONSE) then
  105.     begin
  106.       case received[2] of
  107.         R_IN: begin
  108.           //checkIn(received[3]);
  109.           result := received[4];
  110.         end;
  111.         PULSE:begin
  112.           result := received[4];
  113.         end;
  114.         W_OUT:begin
  115.           result := received[4];
  116.         end;
  117.         else
  118.           raise EResUnknownCmd.Create('Unknown Command: '+received[2].ToString+'.');
  119.       end;
  120.     end
  121.     else
  122.       raise EResNotValid.Create('Not a valid response.');
  123.   end
  124.   else
  125.     raise EResNotValidLength.Create('Not a valid size, received length: '+Length(received).ToString);
  126. end;
  127.  
  128. {
  129. ejemplo:
  130.     var
  131.       bufReceiv : TIdBytes;
  132.       responseIn, responseOut  : Byte;
  133.    
  134.     //Consulta
  135.     bufReceiv := requestStatus(urlPilona,portPilona);
  136.    
  137.     //respuesta estado Entradas:
  138.     responseIn  := ReadIN(bufReceiv);
  139.    
  140.     //respuesta estado Salidas
  141.     responseOut := ReadOUT(bufReceiv);
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement