Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type
- EResNotValid = class (Exception);
- EResUnknownCmd = class (Exception);
- EResNotValidLength = class (Exception);
- Const
- RESPONSE_TIMEOUT = Int16(1000);
- CONNECT_TIMEOUT = Int16(5000);
- RESPONSE_LENGTH = int8(8);
- //RESPONSE
- RESPONSE = int8(#$52);
- //COMANDO
- COMMAND = int8(#$41);
- //OPERACIONES
- //Mandar Pulso
- PULSE = int8(#$50);
- //Leer Entradas
- R_IN = int8(#$45);
- //Leer Salidas
- W_OUT = int8(#$53);
- //VALOR
- ZERO = Int8(#$00);
- function TDataModule1.sendCommand(comando, operacion,
- valor:Integer; IP:String; Port: Integer): TIdBytes;
- var
- IdTCPClientL : TIdTCPClient;
- WriteBytes, response : TIdBytes;
- begin
- IdTCPClientL := TIdTCPClient.Create(nil);
- IdTCPClientL.Host := IP;
- IdTCPClientL.Port := Port;
- // IdTCPClientL.ConnectTimeout:= CONNECT_TIMEOUT;
- IdTCPClientL.ReadTimeout := RESPONSE_TIMEOUT;
- // IdTCPClientL.BoundPortMin := 49152;
- // IdTCPClientL.BoundPortMax := 49162;
- SetLength(WriteBytes,4);
- WriteBytes[0]:= comando;
- WriteBytes[1]:= operacion;
- WriteBytes[2]:= valor;
- WriteBytes[3]:= ZERO;
- try
- IdTCPClientL.Connect;
- if IdTCPClientL.Connected then
- begin
- IdTCPClientL.IOHandler.Write(WriteBytes);
- if IdTCPClientL.IOHandler.InputBufferIsEmpty then
- begin
- IdTCPClientL.IOHandler.CheckForDataOnSource(1000);
- IdTCPClientL.IOHandler.CheckForDisconnect;
- if IdTCPClientL.IOHandler.InputBufferIsEmpty then Exit;
- end;
- IdTCPClientL.IOHandler.ReadBytes(response, IdTCPClientL.IOHandler.InputBuffer.Size);
- result := response;
- end;
- finally
- IdTCPClientL.Disconnect;
- IdTCPClientL.Free;
- end;
- end;
- function TDataModule1.requestStatus(IP: String; Port: Integer): TIdBytes;
- begin
- result := sendCommand(COMMAND,R_IN,ZERO,IP,Port);
- end;
- function TDataModule1.ReadIN(received: TIdBytes): Byte;
- begin
- if (Length(received) = RESPONSE_LENGTH) then
- begin
- if (received[1] = COMMAND) and (received[0] = RESPONSE) then
- begin
- case received[2] of
- R_IN: begin
- result := received[5];
- end;
- PULSE:begin
- result := received[5];
- end;
- W_OUT:begin
- result := received[5];
- end;
- else
- raise EResUnknownCmd.Create('Unknown Command: '+received[2].ToString+'.');
- end;
- end
- else
- raise EResNotValid.Create('Not a valid response.');
- end
- else
- raise EResNotValidLength.Create('Not a valid size, received length: '+Length(received).ToString);
- end;
- function TDataModule1.ReadOUT(received: TIdBytes): Byte;
- begin
- if (Length(received) = RESPONSE_LENGTH) then
- begin
- if (received[1] = COMMAND) and (received[0] = RESPONSE) then
- begin
- case received[2] of
- R_IN: begin
- //checkIn(received[3]);
- result := received[4];
- end;
- PULSE:begin
- result := received[4];
- end;
- W_OUT:begin
- result := received[4];
- end;
- else
- raise EResUnknownCmd.Create('Unknown Command: '+received[2].ToString+'.');
- end;
- end
- else
- raise EResNotValid.Create('Not a valid response.');
- end
- else
- raise EResNotValidLength.Create('Not a valid size, received length: '+Length(received).ToString);
- end;
- {
- ejemplo:
- var
- bufReceiv : TIdBytes;
- responseIn, responseOut : Byte;
- //Consulta
- bufReceiv := requestStatus(urlPilona,portPilona);
- //respuesta estado Entradas:
- responseIn := ReadIN(bufReceiv);
- //respuesta estado Salidas
- responseOut := ReadOUT(bufReceiv);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement