ASCII_SR
Envia uma sequência de strings ASCII por um canal de comunicação qualquer e, opcionalmente, recebe os pacotes de resposta de cada comando. É um bloco de função (mantém estado entre scans; requer instância) e exige o recurso PPE desabilitado.
Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função
Bloco de função
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 a sequência de strings especificadas em PACKS ao equipamento
conectado no canal de comunicação indicado em COMM_SRC. O processo é iniciado
pela 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 gera um pulso notificando o fim da
transação — que pode incluir ou não a espera de uma string de resposta. Quando há
resposta, o bloco a retorna em T_BUF e aguarda que o usuário sinalize (pela
entrada NEXT) para continuar o processo. No evento de TRANS_EV, a saída
CUR_CMD retorna o índice do comando executado (iniciando em 0) e, quando
especificada a espera por resposta, CUR_LEN retorna 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 indica o fim do processo. Caso ocorra algum erro, as saídas TRANS_EV
e DONE_EV são ativadas retornando em RESULT o código de falha associado.
Durante o envio da string corrente, se ADD_CRLF estiver ativa, o bloco acrescenta
os caracteres CR e LF ao final da string antes de enviá-la. Durante a recepção da
resposta, se REM_CRLF estiver ativa, o bloco remove da resposta todos os
caracteres CR e LF encontrados.
O canal de comunicação (COMM_SRC) é identificado por um valor numérico. Os
identificadores disponíveis (do tipo COMM_CHAN_ID) são, por exemplo,
HILS.COM1_PORT_ID .. HILS.COM8_PORT_ID para os canais seriais e
HILS.SOCK0_PORT_ID .. HILS.SOCK7_PORT_ID para os sockets Ethernet. Cada
equipamento suporta apenas um subconjunto desses recursos; consulte o manual do
equipamento.
Atenção
O parâmetro PACKS, apesar de ser do tipo ANY, deve ser um vetor de
strings para a operação correta do bloco. Pode-se passar um vetor de strings de
qualquer tamanho suportado, inclusive um vetor de um único elemento ([0..0])
quando for necessário o envio de uma única string.
Importante
Para a utilização deste bloco, o recurso PPE deve estar desabilitado. Pode-se desabilitar e habilitar esse recurso por meio da variável de sistema F197.
Nota
Após a transição de subida em START, a primeira string do vetor PACKS
é enviada. Se REPLY estiver habilitada, o bloco aguarda a resposta com um
timeout que pode ser estendido por REC_TMO; T_BUF conterá a resposta e
CUR_LEN o seu tamanho (nº de bytes). Se, no ciclo seguinte, NEXT estiver
inativa, o bloco aguarda a ativação de NEXT para que a aplicação trate a
resposta antes de prosseguir. Independentemente de falhas em uma transação, o
bloco prossegue até enviar todas as strings de PACKS_N ou até a aplicação
desativar START.
Parâmetros
Nome |
Direção |
Tipo |
Padrão |
Faixa / Unidade |
Descrição |
|---|---|---|---|---|---|
START |
IN |
BOOL |
FALSE |
— |
Inicia uma transação de comunicação (ativa na transição de subida) e deve permanecer ativa durante toda a execução. |
COMM_SRC |
IN |
USINT |
0 |
|
Canal de comunicação a ser utilizado (identificador |
ADD_CRLF |
IN |
BOOL |
FALSE |
— |
Adiciona CR-LF ao final de cada comando enviado. |
REM_CRLF |
IN |
BOOL |
FALSE |
— |
Remove CR-LF de cada resposta recebida. |
REPLY |
IN |
BOOL |
FALSE |
— |
Habilita a espera pela resposta do comando corrente. |
NEXT |
IN |
BOOL |
FALSE |
— |
Habilita o tratamento do próximo comando. |
REC_TMO |
IN |
INT |
0 |
|
Timeout aguardado pela resposta (0 = default do canal). |
PACKS_N |
IN |
USINT |
0 |
— |
Número de pacotes (strings) a serem enviados. |
TRANS_EV |
OUT |
BOOL |
FALSE |
— |
Pulso gerado quando o comando corrente foi tratado. |
DONE_EV |
OUT |
BOOL |
FALSE |
— |
Pulso gerado no fim do tratamento de todos os comandos ou na ocorrência de falha. |
CUR_LEN |
OUT |
UINT |
0 |
bytes |
Tamanho do buffer de resposta do comando corrente. |
RESULT |
OUT |
INT |
0 |
RET_CODE |
Código de retorno da transação (ver Códigos de retorno). |
CUR_CMD |
IN_OUT |
INT |
0 |
— |
[OUT] Índice do comando corrente tratado (inicia em 0); [IN] índice do comando anterior ao próximo a ser processado. |
PACKS |
IN_OUT |
ANY |
— |
— |
Vetor de strings com os comandos ASCII a serem enviados. |
T_BUF |
IN_OUT |
ANY |
— |
— |
Buffer utilizado na transação corrente (envio do comando e recepção da resposta). |
Códigos de retorno
RESULT é do tipo RET_CODE. Use os identificadores com o namespace HILS
(ex.: HILS.CO_REC_TMO). Códigos mais comuns deste bloco:
Código |
Identificador |
Significado |
|---|---|---|
0 |
SUCCESS |
Transação executada com sucesso. |
5 |
GL_INV_PAR |
Parâmetro(s) inválido(s). |
10 |
GL_CMD_TMO |
Timeout na execução do comando. |
68 |
CO_TRA_BUF_OVL |
Overflow no buffer de transmissão. |
69 |
CO_REC_BUF_OVR |
Overrun no buffer de recepção. |
70 |
CO_COM_ERR |
Erro genérico de comunicação. |
74 |
CO_INV_CHA |
Canal de comunicação inválido. |
79 |
CO_REC_TMO |
Timeout na recepção da resposta. |
87 |
CO_COM_BRO |
Comunicação interrompida. |
Lista completa dos códigos de retorno: RET_CODE - Códigos de retorno do firmware G5.
Pré-condições
O recurso PPE deve estar desabilitado (variável de sistema F197).
O canal indicado em
COMM_SRCdeve estar configurado e disponível no equipamento.PACKSdeve ser um vetor de strings com pelo menosPACKS_Nelementos.
Observações
TRANS_EVfica ativa por um ciclo ao fim de cada transação, indicando queRESULT,CUR_CMD(eCUR_LEN/T_BUF, quando há resposta) estão atualizados para avaliação.Para executar a próxima transação, ative
NEXT; o ciclo se repete até processar asPACKS_Nstrings.O processo pode ser cancelado a qualquer momento desativando
START.
Ver também
Exemplo
Clique aqui para baixar a tabela de variáveis
Código ST
VAR
AT1 : HILS.ASCII_SR; (* Instância do bloco de envio de comandos AT *)
MY_RET : INT := 0; (* Código de retorno do envio do comando *)
MY_CNT : USINT := 0; (* Contador de comandos enviados *)
MY_NEXT : BOOL := TRUE; (* Habilita envio do próximo comando *)
MY_START : BOOL := FALSE; (* Habilita execução do bloco *)
RDY_CNT : USINT; (* Contador de transações concluídas *)
END_CNT : USINT; (* Contador de ciclos concluídos *)
CMDS : ARRAY [0..1] OF STRING[10] := ['AT+CGMM','ATI9'];(* Comandos a serem enviados *)
BUF : ARRAY [0..49] OF USINT; (* Resposta dos comandos recebidos *)
CMD_NO : USINT := 2; (* Quantidade de comandos AT *)
AT_RESP : STRING; (* Resposta corrente convertida em string *)
AT_RESP_VEC : ARRAY [0..1] OF STRING; (* Respostas por índice de comando *)
END_VAR
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;
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;