HTTP_QUERY

Recebe uma requisição HTTP GET por um socket configurado como HTTP-Server, extrai a query da requisição para uma STRING e envia de volta uma STRING de resposta, completando a transação HTTP. É um bloco de função (mantém estado entre scans; requer instância).

Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função

Bloco de função

              HTTP_QUERY
           +--------------+
  BOOL ----|START      QSA|---- BOOL
           |              |
  BOOL ----|SEND    SOCKET|---- USINT
           |              |
           |        RESULT|---- INT
           |              |
STRING ----|QS ---------- |----
           |              |
STRING ----|QR ---------- |----
           +--------------+

A saída QSA é ativada na chegada da requisição HTTP e retorna ao estado inativo após o término do envio da resposta; nesse momento RESULT indica o estado do processo (SUCCESS = 0 quando a resposta foi encaminhada). SOCKET informa, no instante em que QSA é ativada, qual socket recebeu a requisição. A entrada SEND é avaliada por transição, após a chegada da requisição, e deve ser ativada depois de montada a string de resposta QR.

Importante

A string de resposta QR pode ser nula, mas sempre deve existir para completar a transação HTTP corrente.

Parâmetros

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

START

IN

BOOL

FALSE

—

Ativa (TRUE) ou cancela (FALSE) o processamento do bloco.

SEND

IN

BOOL

FALSE

—

Avaliado por transição: envia a resposta QR após a chegada da query (QSA).

QS

IN_OUT

STRING

—

—

Recebe a query enviada na requisição HTTP do cliente.

QR

IN_OUT

STRING

—

—

Define a string retornada ao cliente HTTP. Pode ser vazia, mas deve existir.

QSA

OUT

BOOL

FALSE

—

Sinaliza que há uma query a ser processada em QS.

SOCKET

OUT

USINT

0

0 .. MAX_SOCKETS-1

Número do socket que recebeu a requisição HTTP em tratamento.

RESULT

OUT

INT

0

RET_CODE

Código de retorno da última transação (ver Códigos de retorno).

Códigos de retorno

RESULT é do tipo RET_CODE. Use os identificadores com o namespace HILS (ex.: HILS.CO_SOCK_ERR). Códigos mais comuns deste bloco:

Código

Identificador

Significado

0

SUCCESS

Resposta encaminhada ao cliente com sucesso.

63

CO_CONEX_FAIL

Falha no processo de conexão.

67

CO_SOCK_ERR

Erro de socket (não foi possível adquirir/usar o socket).

68

CO_TRA_BUF_OVL

Overflow no buffer de transmissão (resposta grande demais).

10

GL_CMD_TMO

Timeout na execução do comando.

Lista completa dos códigos de retorno: RET_CODE - Códigos de retorno do firmware G5.

Pré-condições

  • O equipamento deve ter ao menos 1 socket configurado como HTTP-Server na porta 80.

  • QR deve estar montada antes de ativar SEND.

Observações

  • A saída QSA fica em TRUE desde a chegada da requisição até o término do envio da resposta; monte QR enquanto QSA estiver ativo.

  • RESULT é atualizado no encerramento da transação.

Ver também

GET_HEXASC_STR, TCP_CONNECT, IS_SOCKET_CONNECTED

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    H_QUERY : HILS.HTTP_QUERY; (* Instancia do bloco de procesamento de query HTTP *)
    QS_STR  : STRING;          (* String que irá receber a query HTTP *)
    QR_STR  : STRING;          (* String de resposta da query HTTP *)
    PREFIX  : STRING := '>: '; (* prefixo a ser acrescentado na resposta *)
END_VAR

(* Abra o browser e digite, por exemplo, 192.168.0.199/?Hello
   (onde 192.168.0.199 é o IP do controlador). O controlador retorna ">: Hello". *)
H_QUERY(
  START := TRUE,
  SEND  := H_QUERY.QSA,
  QS    := QS_STR,
  QR    := QR_STR
  );
IF H_QUERY.QSA THEN
  QR_STR := CONCAT(PREFIX, QS_STR);   (* monta a resposta *)
END_IF;