DATA_COMM_SCAN
Adquire ciclicamente conjuntos de pacotes de dados de equipamentos remotos através de um canal de comunicação, atualizando uma estrutura de dados local com os valores obtidos. É um bloco de função (mantém estado entre scans; requer instância). Recurso obsoleto, mantido apenas por compatibilidade com aplicações legadas.
Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função
Bloco de função
DATA_COMM_SCAN
+------------------+
BOOL ----|EN ENO|---- BOOL
| |
BOOL ----|START EOT|---- BOOL
| |
UINT ----|COMM_SRC EOC|---- BOOL
| |
TIME ----|IPOLL_TME BLOCK|---- INT
| |
TIME ----|IPACK_TME RESULT|---- INT
| |
----|SPEC ------------ |----
| |
----|DATA ------------ |----
+------------------+
Cada pacote de dados corresponde a uma ou mais variáveis sequenciais de um mesmo
tipo, obtidas de um equipamento com endereço distinto. A aplicação define em
SPEC um vetor da estrutura DATA_PACK_SPEC (uma entrada por bloco a ser
lido) e fornece em DATA a estrutura que receberá os valores adquiridos.
Enquanto ativado por START, o bloco varre os pacotes especificados, gerando um
pulso em EOT ao final de cada bloco (com BLOCK e RESULT referentes a
esse bloco) e um pulso em EOC ao concluir a varredura de todos os blocos.
O canal de comunicação em COMM_SRC é um valor do tipo enumerado
COMM_CHAN_ID (ex.: HILS.COM1_PORT_ID = 0 para a COM1,
HILS.SOCK0_PORT_ID = 8 para o socket 0). Consulte o manual do equipamento
para saber quais canais estão disponíveis.
Nota
Esta função foi classificada como obsoleta e é mantida na biblioteca apenas para compatibilidade com aplicações legadas. Para novos projetos utilize o recurso de Recurso de mapeamento de dados.
Importante
O bloco de dados especificado deve poder ser obtido pelo driver de comunicação em um único pacote. Se necessário, divida-o em blocos menores.
Parâmetros
Nome |
Direção |
Tipo |
Padrão |
Faixa / Unidade |
Descrição |
|---|---|---|---|---|---|
EN |
IN |
BOOL |
TRUE |
— |
Habilitação de entrada do bloco. |
START |
IN |
BOOL |
FALSE |
— |
Ativa o ciclo de comunicação (varredura dos pacotes). |
COMM_SRC |
IN |
UINT |
0 |
|
Canal de comunicação utilizado (identificador do tipo |
IPOLL_TME |
IN |
TIME |
T#10ms |
ms |
Tempo entre ciclos de comunicação. |
IPACK_TME |
IN |
TIME |
T#100ms |
ms |
Tempo entre pacotes de comunicação. |
SPEC |
IN_OUT |
ANY |
— |
— |
Vetor de |
DATA |
IN_OUT |
ANY |
— |
— |
Estrutura de dados que recebe os valores adquiridos remotamente. |
ENO |
OUT |
BOOL |
FALSE |
— |
Saída de habilitação. |
EOT |
OUT |
BOOL |
FALSE |
— |
Pulso ao final da transação de cada bloco de dados. |
EOC |
OUT |
BOOL |
FALSE |
— |
Pulso ao final da varredura de todos os blocos especificados. |
BLOCK |
OUT |
INT |
0 |
— |
Nro. do bloco de dados tratado (inicia em zero), válido quando |
RESULT |
OUT |
INT |
0 |
RET_CODE |
Código de retorno da transação do bloco |
Códigos de retorno
RESULT é do tipo RET_CODE e reflete a última transação concluída
(EOT ativo). Use os identificadores com o namespace HILS (ex.:
HILS.CO_CONEX_FAIL). Códigos mais comuns deste bloco:
Código |
Identificador |
Significado |
|---|---|---|
0 |
SUCCESS |
Bloco de dados adquirido com sucesso. |
5 |
GL_INV_PAR |
Parâmetro(s) inválido(s) na especificação do bloco. |
10 |
GL_CMD_TMO |
Timeout na execução do comando. |
62 |
CO_PENDING |
Comando de comunicação com tratamento pendente. |
63 |
CO_CONEX_FAIL |
Falha no processo de conexão. |
70 |
CO_COM_ERR |
Erro genérico de comunicação. |
74 |
CO_INV_CHA |
Canal de comunicação inválido. |
75 |
CO_INV_STA |
Número da estação (endereço do equipamento) inválido. |
79 |
CO_REC_TMO |
Timeout na recepção do frame. |
87 |
CO_COM_BRO |
Comunicação interrompida. |
Lista completa: RET_CODE - Códigos de retorno do firmware G5.
Pré-condições
O canal indicado em
COMM_SRCdeve estar configurado e disponível no equipamento.SPECdeve ser um vetor válido deDATA_PACK_SPECeDATAdeve ter capacidade suficiente para receber todos os valores adquiridos.Cada bloco especificado deve caber em um único pacote de comunicação do driver.
Observações
Cada entrada de
SPECé uma estruturaDATA_PACK_SPECcom os campos:Campo
Tipo
Descrição
DEV_ADDR
UINT
Endereço de comunicação do equipamento remoto a ser acessado.
DATA_TYPE
UINT
Tipo de dado da variável a obter (vide enumerado
TYPE_LEN_ID).DATA_SIZE
UINT
Quantidade de variáveis a obter no bloco solicitado.
REM_VAR
UINT
Nro. da variável inicial (do tipo especificado) no equipamento remoto.
BLOCKeRESULTsó são significativos no instante em queEOTestá ativo.
Ver também
Exemplo
Clique aqui para baixar a tabela de variáveis
Programa que, pelo canal COM1, obtém 2 blocos de dados: o bloco 0 lê 10 variáveis WORD (Holding registers 20 a 29) do equipamento 1 a partir da variável 5; o bloco 1 lê 6 variáveis BIT (Coils 10 a 15) do equipamento 1 a partir da variável 20.
Código ST
TYPE
(* Estrutura de destino: 10 inteiros do bloco 0 e 6 booleanos do bloco 1 *)
USER_DATA : STRUCT
HOLDING_REG_20_29 : ARRAY[0..9] OF UINT; (* Holding registers 20 a 29 *)
COIL_10_15 : ARRAY[0..5] OF BOOL; (* Coils 10 a 15 *)
END_STRUCT;
END_TYPE
VAR
ST_SCAN : BOOL := FALSE; (* Ativa scan de dados remotos *)
C_SRC : UINT := 0; (* Canal de comunicação (0 = COM1) *)
BK_SPEC : ARRAY[0..1] OF HILS.DATA_PACK_SPEC :=
[[1,3,10,5],[1,1,6,20]]; (* Definição dos blocos a adquirir *)
BK_DATA : USER_DATA; (* Base de dados a receber os valores *)
SCAN : HILS.DATA_COMM_SCAN; (* Bloco de varredura de dados remotos *)
OK_CNT : ULINT := 0; (* Nro. de ciclos de comunicação OK *)
NOK_CNT : ULINT := 0; (* Nro. de ciclos de comunicação com falha *)
END_VAR
(* Controla o scan dos dados a serem obtidos *)
SCAN(
(* EN := TRUE, <- já inicializa com TRUE *)
START := ST_SCAN,
COMM_SRC := C_SRC,
(* IPOLL_TME := <- mantém o default (10 ms) *)
(* IPACK_TME := <- mantém o default (100 ms) *)
SPEC := BK_SPEC,
DATA := BK_DATA
);
(* Contabiliza pacotes com sucesso e com falha *)
IF SCAN.EOT AND (SCAN.BLOCK = 1) THEN
(* Término de um ciclo de aquisição dos pacotes *)
IF (SCAN.RESULT = 0) THEN
OK_CNT := OK_CNT + 1; (* pacotes recebidos com sucesso *)
ELSE
NOK_CNT := NOK_CNT + 1; (* transações com falha *)
END_IF;
END_IF;