Bloco que executa uma leitura de dados via SDO de um escravo remoto em rede CANopen.
Representação Ladder

Estrutura do Bloco
Tipo de Variável |
Nome |
Tipo de Dado |
Descrição |
VAR_INPUT |
Execute |
BOOL |
Habilitação do bloco |
NodeID# |
BYTE |
Endereço do escravo |
|
Index# |
WORD |
Indice do objeto a ser acessado no escravo |
|
SubIndex# |
BYTE |
Sub-índice do objeto |
|
Size# |
BYTE |
Tamanho do dado acessado, em bytes |
|
Timeout# |
WORD |
Tempo de espera máximo para chegada do dado, a partir do início da solicitação [ms] |
|
VAR_OUTPUT |
Done |
BOOL |
Habilitação de saída |
Active |
BOOL |
Sinalizador de aguardo de resposta |
|
Busy |
BOOL |
Sinalizador de que o cliente SDO está ocupado com outra requisição |
|
Error |
BOOL |
Sinalizador de erro na execução |
|
ErrorID |
BYTE USINT |
Identificador do erro ocorrido |
|
Value |
BYTE USINT |
Variável que armazena os dados recebidos |
|
VAR |
CO_SDOREAD_INST_0 |
CO_SDOREAD |
Instância de acesso à estrutura do bloco |
Funcionamento
Este bloco, quando detecta uma borda de subida em Execute, verifica se o cliente SDO no endereço especificado em NodeID# está livre para envio de dados (variável Busy em nível FALSE). Caso esteja, envia a requisição de leitura para o objeto de tamanho Size# localizado em Index# e SubIndex# e seta a saída Active, resetando-a ao receber a resposta do escravo. Os dados recebidos são armazenados na variável Value. Caso o escravo não esteja livre, o bloco aguarda Busy ir para nível FALSE para reenviar a solicitação.
|
NOTA! Caso Execute vá para nível FALSE e Busy ainda esteja em nível TRUE, a requisição é cancelada. |
|
NOTA! Value é um array de tamanho igual a Size#. É importante verificar esta compatibilidade para não gerar erros no bloco. |
|
NOTA! Somente é possível ler um objeto (BYTE, WORD, DWORD) por bloco. Não é possível ler um array de objetos. |
Quando Execute possui valor FALSE, Done permanece FALSE. A saída Done só é ativada quando o bloco termina a execução com sucesso, permanecendo em nível TRUE até que Execute receba FALSE.
Caso haja algum erro na execução, a saída Error é ativada e ErrorID exibe o código do erro segundo a tabela abaixo.
Código |
Descrição |
0 |
Executado com sucesso |
1 |
Cartão não pode executar a função |
2 |
Timeout na resposta do escravo |
3 |
Escravo retornou erro |
Fluxograma do Bloco

Exemplo em Ladder

O exemplo acima requisita leitura do dado de tamanho SIZE, localizado em INDEX - SUBINDEX, do equipamento NODEID. Esse dado é repassado a VALUE. Finalizado o bloco com sucesso, a saída Done é ativada.
Exemplo em ST
O exemplo abaixo, exibe as instruções para aplicação do exemplo acima na linguagem ST.
VAR ERROR : BOOL; INDEX, TIMEOUT : WORD; NODEID, SUBINDEX : BYTE; VALUE : UDINT; CO_SDOREAD_INST_0 : FB_CO_SDOREAD; END_VAR
CO_SDOREAD_INST_0.Execute := DI1; CO_SDOREAD_INST_0( NodeId:=NODEID, Index:=INDEX, SubIndex:=SUBINDEX, Size:=4, Timeout:=TIMEOUT); ERROR := CO_SDOREAD_INST_0.Error; VALUE := CO_SDOREAD_INST_0.Value; DO1 := CO_SDOREAD_INST_0.Done;
|
|---|