SCPHI_SERVER

Recebe de um cliente remoto um pacote de dados no protocolo SCP-HI, valida o pacote (CRC e endereço) e executa o comando associado, retornando ao cliente o resultado do processamento com eventuais dados solicitados; o canal utilizado deve estar configurado para protocolo ASCII (sem SOF e EOF). É 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

               SCPHI_SERVER
         +-----------------------+
BOOL ----|EN                  ENO|---- BOOL
         |                       |
BOOL ----|START               EVT|---- BOOL
         |                       |
UINT ----|COMM_SRC    LAST_RESULT|---- INT
         |                       |
UINT ----|COMM_ADDR    GOOD_PACKS|---- UDINT
         |                       |
         |              BAD_PACKS|---- UDINT
         +-----------------------+

Quando ativado, o bloco aguarda no canal especificado por COMM_SRC a recepção de um pacote SCP-HI enviado pelo cliente. Recebido o pacote, seu CRC é validado e, se correto, verifica-se se o endereço de comunicação do pacote coincide com COMM_ADDR ou com 255 (endereço global do protocolo). Validado o endereço, o comando do pacote é interpretado e executado, e o resultado é incluído no pacote de resposta enviado ao cliente remoto.

A saída EVT gera um pulso ao final de toda transação endereçada ao equipamento; nesse instante LAST_RESULT, GOOD_PACKS e BAD_PACKS são atualizados. Pacotes com CRC inválido ou com endereço de comunicação inválido são ignorados pelo bloco.

Importante

Para operação correta, o canal de comunicação utilizado deve ser previamente configurado para operação com protocolo ASCII (sem SOF e EOF).

O canal em COMM_SRC é indicado por um identificador numérico (definido no tipo COMM_CHAN_ID da biblioteca HI_STD, namespace HILS):

Identificador

Faixa de ID

Tipo de canal

COM1_PORT_ID .. COM8_PORT_ID

0 .. 7

Canais seriais COM1 a COM8.

SOCK0_PORT_ID .. SOCK7_PORT_ID

8 .. 15

Sockets 0 a 7 da Ethernet 1.

ETH2_SOCK0_PORT_ID .. ETH2_SOCK7_PORT_ID

16 .. 23

Sockets 0 a 7 da Ethernet 2.

Nota

Cada equipamento possui apenas um subconjunto dos recursos de comunicação acima. Consulte o manual do equipamento para identificar os canais disponíveis.

Parâmetros

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

EN

IN

BOOL

TRUE

—

Habilita a operação do bloco.

START

IN

BOOL

FALSE

—

Inicia ou reseta a operação do bloco (ativo na transição de subida).

COMM_SRC

IN

UINT

0

0 .. 23

Identificador do canal de comunicação utilizado (ver tabela acima).

COMM_ADDR

IN

UINT

1

1 .. 254

Endereço de comunicação do equipamento para o protocolo SCP-HI.

ENO

OUT

BOOL

FALSE

—

Saída de habilitação do bloco.

EVT

OUT

BOOL

FALSE

—

Pulso gerado ao final de toda transação endereçada ao equipamento.

LAST_RESULT

OUT

INT

0

RET_CODE

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

GOOD_PACKS

OUT

UDINT

0

—

Contador de pacotes processados com sucesso.

BAD_PACKS

OUT

UDINT

0

—

Contador de pacotes processados com falha.

Códigos de retorno

LAST_RESULT carrega o código de retorno da última transação (tipo RET_CODE, namespace HILS). Códigos mais comuns deste bloco:

Código

Identificador

Significado

0

SUCCESS

Transação processada com sucesso.

6

GL_INV_CMD

Comando inválido ou não reconhecido.

7

GL_UNA_CMD

Comando não disponível ou não implementado.

70

CO_COM_ERR

Erro genérico de comunicação.

81

CO_PTC_ERR

Mensagem com protocolo inválido.

85

CO_CRC_ERR

Erro de CRC na recepção do frame.

86

CO_INV_DAT

Dado inválido no protocolo.

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

Pré-condições

  • O canal indicado por COMM_SRC deve estar previamente configurado para protocolo ASCII (sem SOF e EOF).

  • COMM_ADDR deve estar na faixa de 1 a 254.

Observações

  • LAST_RESULT, GOOD_PACKS e BAD_PACKS são atualizados apenas no instante em que EVT é gerado.

  • Pacotes com CRC incorreto ou endereço de comunicação inválido são descartados sem gerar EVT.

Ver também

CONFIG_SERIAL, COMM_SEND_REC, COMM_REC_SEND

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    MY_START    : BOOL;               (* Flag de inicialização do processo *)
    SCPHI       : HILS.SCPHI_SERVER;  (* Instancia do bloco servidor SCP-HI *)
    MY_COM_ADDR : USINT := 1;         (* end. de comunicacao do equipamento *)
END_VAR

(* aguarda recepção do pacote SCP-HI e trata o mesmo *)
SCPHI(
  EN        := TRUE,               // Habilitação de entrada
  START     := MY_START,           // Inicia uma transacao (ativa na transição de subida)
  COMM_SRC  := HILS.COM1_PORT_ID,  // Identificador do canal de comunicação (COM1)
  COMM_ADDR := MY_COM_ADDR         // Endereço de comunicacao
  );

IF (SCPHI.EVT) THEN
  // Gerada transação de comunicacao com o equipamento
  IF (SCPHI.LAST_RESULT = HILS.SUCCESS) THEN
    // Transaçao realizada com sucesso
  END_IF;
END_IF;