ASCII_SR

Este bloco tem por função enviar uma sequência de strings por um canal de comunicação qualquer e opcionalmente receber os pacotes de resposta.

Bloco

                ASCII_SR
          +-------------------+
 BOOL ----|START      TRANS_EV|---- BOOL
          |                   |
USINT ----|COMM_SRC    DONE_EV|---- BOOL
          |                   |
 BOOL ----|ADD_CRLF    CUR_LEN|---- UINT
          |                   |
 BOOL ----|REM_CRLF     RESULT|---- INT
          |                   |
 BOOL ----|REPLY              |
          |                   |
 BOOL ----|NEXT               |
          |                   |
  INT ----|REC_TMO            |
          |                   |
USINT ----|PACKS_N            |
          |                   |
  INT ----|CUR_CMD ---------- |----
          |                   |
      ----|PACKS ------------ |----
          |                   |
      ----|T_BUF ------------ |----
          +-------------------+

O bloco envia uma sequência de strings especificadas em PACKS a um equipamento conectado em um canal de comunicação especificado em COMM_SRC.

O processo é iniciado através da ativação da entrada START que deve permanecer ativa durante todo o tempo de execução.

Para cada string enviada a saída TRANS_EV notifica o fim da transação que pode incluir a espera de uma string de resposta ou não. Em caso afirmativo, o bloco retorna a string recebida e aguarda que o usuário sinalize (através da entrada NEXT) para continuar o processo.

Ao final de cada transação, no evento gerado por TRANS_EV a saída CUR_CMD retorna o índice do comando executado (iniciando em 0) e, caso especificado para aguardar resposta, é retornado em CUR_LEN o tamanho da string de resposta inserida em T_BUF.

Ao final da execução das PACKS_N transações definidas, um pulso na saída DONE_EV é gerado, indicando fim do processo.

Caso ocorra algum erro no processo as saídas TRANS_EV e DONE_EV são ativas retornando em RESULT o código de falha associado.

Durante o processo de envio da string corrente, se a entrada ADD_CRLF estiver ativa, o bloco acrescenta os caracteres CR e LF no final da string corrente antes de enviá-la.

Durante o processo de recepção da resposta, se a entrada REM_CRLF estiver ativa, o bloco remove da resposta todos os caracteres CR e LF encontrados.

Atenção

O parâmetro PACKS, apesar de ser do tipo ANY, deve ser um vetor de strings para operação correta bloco. Desta forma, pode-se passar como parâmetro um vetor de strings de qualquer tamanho suportado.

É possível também definir um vetor de strings de apenas 1 elemento “[0..0]” quando for necessária o envio de uma única string.

Importante

Para a utilização desse bloco, o recurso PPE deve estar desabilitado. Pode-se desabilitar e habilitar esse recurso utilizando-se a variável de sistema F197.

Parâmetros

Nome

Classe

Tipo

Dim.

V. Ini.

Descrição

START

Entrada

BOOL

FALSE

Inicia uma transação de comunicação (ativa na transição de subida)

COMM_SRC

Entrada

USINT

0

Canal de comunicação a ser utilizado

ADD_CRLF

Entrada

BOOL

FALSE

Adiciona CR-LF no final de cada comando a ser enviado

REM_CRLF

Entrada

BOOL

FALSE

Remove CR-LF de cada resposta recebida

REPLY

Entrada

BOOL

FALSE

Habilita resposta do comando corrente

NEXT

Entrada

BOOL

FALSE

Habilita tratamento do próximo comando

REC_TMO

Entrada

INT

0

Timeout em ms a ser aguardado para resposta (0 = default do canal, max = 32767 ms)

PACKS_N

Entrada

USINT

0

Número de pacotes de comunicação a serem enviados

TRANS_EV

Saída

BOOL

FALSE

Gera um pulso quando o comando corrente foi tratado

DONE_EV

Saída

BOOL

FALSE

Gera um pulso no final do tratamento de todos os comandos ou na ocorrência de falhas

CUR_LEN

Saída

UINT

0

Tamanho do buffer de resposta do comando corrente

RESULT

Saída

INT

0

Resultado da transação

CUR_CMD

Entrada/Saída

INT

0

[OUT] Índice do comando corrente tratado (inicia em zero) - [IN] Índice do comando anterior ao próximo a ser processado

PACKS

Entrada/Saída

ANY

Vetor de strings com os comandos ASCII a serem enviados

T_BUF

Entrada/Saída

ANY

Buffer utilizado na transação corrente (envio do comando e recepção da resposta)

RESULT

Tipo Dado

Descrição

INT

Código de retorno na execução da função, do tipo RET_CODE, onde:

  • Se for igual a 0: Função executada com sucesso - código HILS.SUCCESS

  • Se for diferente de 0: Falha na execução da função indica o respectivo código de erro. [2]

COMM_SRC

O canal de comunicação utilizado é especificado por um identificador (valor numérico) conforme indicado na tabela a seguir:

Nome

Ident.

Descrição

HILS.COM1_PORT_ID

0

Canal serial COM1

HILS.COM2_PORT_ID

1

Canal serial COM2

HILS.COM3_PORT_ID

2

Canal serial COM3

HILS.COM4_PORT_ID

3

Canal serial COM4

HILS.COM5_PORT_ID

4

Canal serial COM5

HILS.COM6_PORT_ID

5

Canal serial COM6

HILS.COM7_PORT_ID

6

Canal serial COM7

HILS.COM8_PORT_ID

7

Canal serial COM8

HILS.SOCK0_PORT_ID

8

Controlador Ethernet 1: Socket 0

HILS.SOCK1_PORT_ID

9

Controlador Ethernet 1: Socket 1

HILS.SOCK2_PORT_ID

10

Controlador Ethernet 1: Socket 2

HILS.SOCK3_PORT_ID

11

Controlador Ethernet 1: Socket 3

HILS.SOCK4_PORT_ID

12

Controlador Ethernet 1: Socket 4

HILS.SOCK5_PORT_ID

13

Controlador Ethernet 1: Socket 5

HILS.SOCK6_PORT_ID

14

Controlador Ethernet 1: Socket 6

HILS.SOCK7_PORT_ID

15

Controlador Ethernet 1: Socket 7

HILS.ETH2_SOCK0_PORT_ID

16

Controlador Ethernet 2: Socket 0

HILS.ETH2_SOCK1_PORT_ID

17

Controlador Ethernet 2: Socket 1

HILS.ETH2_SOCK2_PORT_ID

18

Controlador Ethernet 2: Socket 2

HILS.ETH2_SOCK3_PORT_ID

19

Controlador Ethernet 2: Socket 3

HILS.ETH2_SOCK4_PORT_ID

20

Controlador Ethernet 2: Socket 4

HILS.ETH2_SOCK5_PORT_ID

21

Controlador Ethernet 2: Socket 5

HILS.ETH2_SOCK6_PORT_ID

22

Controlador Ethernet 2: Socket 6

HILS.ETH2_SOCK7_PORT_ID

23

Controlador Ethernet 2: Socket 7

Este texto pode ser utilizado como parâmetro pois esta definido no tipo COMM_CHAN_ID disponível na biblioteca HI_STD.

Cada equipamento possui um sub-conjunto dos recursos de comunicação indicados na tabela acima. Para identificar quais recursos estão disponíveis em um dado equipamento, consulte o manual do mesmo.

PACKS, PACKS_N, REPLY, NEXT, CUR_CMD, CUR_LEN, T_BUF

Após a transição de subida no START, a primeira string do vetor PACKS será enviada. Se o flag REPLY estiver habilitado, o bloco irá esperar uma resposta com um timeout que pode ser estendido pelo parâmetro REC_TMO. Caso ocorra algum erro, o processo é encerrado gerendo um evento (pulso) nas saídas TRANS_EV e DONE_EV atualizado na saída RESULT o código da falha ocorrida.

Ao final da execução de uma transação de comunicação, a saída TRANS_EV ficará ativa por um ciclo, indicando ao usuário que as saídas RESULT, e CUR_CMD estão com os valores atualizados para serem avaliados.

Se a entrada REPLY estiver habilitada, a saída T_BUF conterá a resposta da transação corrente, a saída CUR_LEN conterá o tamanho da resposta obtida (nro de bytes) e a saída CUR_CMD indica o índice da transação que esta sendo processada. Se no cíclo seguinte a entrada NEXT estiver inativa, o bloco aguarda até que a entrada NEXT seja ativada, permitindo que a aplicação efetue os tratamentos necessários com a resposta do comando corrente. Caso necessário o processo pode ser cancelado desativando a entrada START.

Para executar a próxima transação, o usuário deverá ativar a entrada NEXT. desta forma, o ciclo descrito no parágrafo anterior se repete para a próxima string até que o nro. de strings especificado em PACKS_N seja processado.

Quando isso ocorrer, a saída DONE_EV ficará ativa durante um ciclo indicando fim de execução.

Importante

Note que, independentemente de ocorrerem falhas no tratamento de uma transação, o bloco continua a interação até que todos as strings especificadas sejam enviadas ou que a aplicação desative o bloco através da entrada START

Exemplo

Declaração de Variáveis

Nome

Classe

Tipo

Dimensão

Valor Inicial

Descrição

AT1

Local

ASCII_SR

Instância do bloco de envio de comandos AT

MY_RET

Local

INT

0

Código de retorno do envio do comando

MY_CNT

Local

USINT

0

Contador de comandos enviados

MY_NEXT

Local

BOOL

TRUE

Habilita envio do próximo comando

MY_START

Local

BOOL

FALSE

Habilita execução do bloco

RDY_CNT

Local

USINT

Contador de transações

END_CNT

Local

USINT

Contador de ciclos

CMDS

Local

STRING

[0..1]:10

[‘AT+CGMM’,’ATI9’]

Comandos a serem enviados (tamamnho maximo 20 caracteres)

BUF

Local

USINT

[0..49]

Respposta dos comandos recebidos

CMD_NO

Local

USINT

2

2

Quantidade de comandos AT

Clique aqui para baixar a tabela de variáveis

Código ST

AT1(  // ASCII_SR
  START    := MY_START,
  COMM_SRC := HILS.COM1_PORT_ID,
  ADD_CRLF := TRUE,
  REM_CRLF := FALSE,
  REPLY    := TRUE,
  NEXT     := MY_NEXT,
  REC_TMO  := 3000,
  PACKS_N  := CMD_NO,
  PACKS    := CMDS,
  T_BUF    := BUF
  );

// Trata fim de transação
IF(AT1.TRANS_EV) THEN

  IF (AT1.RESULT = 0) THEN

    RDY_CNT := RDY_CNT + 1;

    // copia a resposta para uma string de visualização
    HILS.BUF_TO_STRING(AT1.CUR_LEN, BUF, AT_RESP);
    AT_RESP_VEC[AT1.CUR_CMD] := AT_RESP;

    RES_STR[AT_CNT] := AT1.RESP;
    MY_RET := AT1.RESULT;
    IF (AT1.CUR_CMD <= (AT1.PACKS_N - 1)) THEN
      MY_NEXT := TRUE;
    END_IF;
    MY_CNT := MY_CNT + 1;
  ELSE
    // trata erro no processo
  END_IF;

  // Trata fim de execução do ciclo
  IF(AT1.DONE_EV) THEN
    MY_START := FALSE;
    MY_CNT   := 0;
    END_CNT  := END_CNT + 1;
  END_IF;

END_IF;