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:
|
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 |
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;