"Illegal data address"

Estou tentando uma aplicação com um controlador de temperatura, a comunicação é Modbus rtu. Só que não consigo ler os dados a partir de qualquer endereço que não seja o endereço Zero ou 32.
Consigo ler os dados dos registradores que preciso na janela de edição do data source, mas se colocar qualquer endereço (offset) diferente de zero, dá erro de “Illegal data address”.

Se eu colocar endereço zero e numero de registradores até 13, eu consigo ler.
Se eu colocar endereço 1, 2, 3…n não consigo ler nenhum, mesmo colocando 1 no numero de registradores.

Pergunto se eu criar um data point para receber todos os registradores posso separar os dados depois? Como fazer?

ola Inacio,

pode ser que o seu controlador exija que a requisicao seja feita a partir do zero e não permita puxar dados “avulsos”; ou pode ser que tenha havido algum engano em selecionar holding register no lugar de input coils, e assim por diante.
como vc falou, colocando zero e numero de registradores ele le, entao tem mesmo algum dado a partir dali…

mas vale a pena verificar com clareza (no manual do equipamento) se os registradores sao do tipo Holding (registradores retentivos) e se sao numeros de 2 bytes, ou binarios, etc.

apenas para ter certeza que nao foi feito confusao, veja que na tela do datasource tem uma parte de teste (teste do localizador) onde se digita um endereço (mesmo que id do slave) e uma quantidade de registradores, apenas para verificar se a comunicacao na porta está OK; e outra parte da tela que sao os datapoints de verdade, esta parte libera apenas quando salva o datasource…

la nos datapoints vc deve adicionar um ponto de cada vez, prestando atencao que na nomenclatura utilizada, dependendo do equipamento, “id” ou “endereço” ou “slave” são a mesma coisa; e “offset” significa o mesmo que “registrador”.

o correto normalmente e criar um datasource, salva-lo, depois comecar a adicionar os registradores um por um (na parte inferior da tela, em “datapoints”, usando o botao verde/adicionar, nao esquecendo de salvar cada um)

se voce adicionar um datapoint para o registrador (offset) zero, salvar, depois ir adicionando um datapoint de cada vez, cada um com seu offset 1, 2, 3, etc até o 13, provavelmente ira funcionar.

isso por que o scada de fato ja faz a leitura “agrupada”, e se existir um registrador de numero zero e mais os outros ate 13, ele deve fazer tudo de uma leitura só (similar o que acontece na janela de testes que esta funcionando), e automaticamente os dados irao cada um para o datapoint correto.

verifique com cautela as configuraçoes e havendo problemas poste novamente com o modelo exato do equipamento, e de preferencia um link para o pdf/manual/datasheet do fabricante, assim ficará mais facil de te ajudar.

att

poste mais informacoes como o modelo

O controlador de temperatura é da Alfatronic modelo CTM 12 + serial. no link tem a ficha técnica e a imagem da tela do Scadabr.
http://www.arteeterna.com.br/inacio/scadabr.rar
O manual do equipamento não está muito detalhado (também não estou conseguindo muita informação com o fabricante).

Na tela de edição do data source, eu fiz o teste em “leitura de dados modbus”

Na parte do “teste de localizador de ponto”, também só consigo ver o registrador zero (offset 0), qualquer outro dá erro.

O que eu fiz até agora:

Criei um data source tipo modbus serial.
criei alguns data points com offset 0 , 2 , 6, que é o que mais me interessa. Todos são de 2 bytes. Porém só o primeiro é que consigo ver.

Agora criei um novo data source, para partir do zero.
Eu tentei fazer da maneira que voce indica, adicionar um datapoint para o registrador zero, salvar e depois ou outros, mas do mesmo jeito só aparece os dados do registrador zero, os demais não.

Acredito que o problema seja mesmo o controlador que não permita dados avulsos. (ou eu que ainda não aprendi direito. Sou novato na area). E se realmente for isso, tenho como receber todos os dados num unico data point e depois separar?

PS.: Em teste que fiz com um inversor de frequencia (WEG CFW08) não tive problemas.

Olá Inacio,

Tente ligar a opção “contiguous batches only” no DataSource. Já tivemos casos semelhantes antes no fórum.

Att.

Tentei ligar a opção “Apenas quantidades contínuas” no data source, mas continuo com o mesmo erro.

Entrei em contato com o fabricante do controlador e nem eles não sabem direito, a principio a leitura tem que ser feita sempre a partir do primeiro registrador, no caso zero.

E se eu criar um data point para receber 8 bytes e depois atraves de algum script separar os dados e jogar em outro data point? É possivel ou seria muita imaginação minha.
Exemplo.
Recebo num data point um dado enorme
byte1byte2byte3byte4byte5byte6byte7byte8
Ai (não sei como) separar o byte1 para o data point 1, o byte2 para o data point2 … … byte 8 para o data point 8

Pelo que consigo ver, essa seria a minha solução (ou trocar de controlador).

No datasource crie dataspoints para os 3 primeiros registradores, tente tanto input e output register fazendo assim:

Registrador 1 Offset 0
Registrador X Offset 1
Registrador 2 Offset 2
Registrador X Offset 3
Registrador 3 Offset 4 // configure 2 bytes pra ele, esta 1 byte no manual porque seria apenas 1 byte de informação.

O Registrador X você não vai usar, terá que fazer isso seu equipamento esta fora da norma do protocolo, onde se deve começar com endereços em ordem numérica e não de 2 em 2.

Pela sua imagem em leitura de dados esta OK, os registradores ate o 13 esta respondendo começando em offset 0 (outros offset são atribuídos automaticamente), o erro “Illegal data address” você sempre terá devido a falta de ordem numérica, ou seja, não da pra “pular” offset. poque request do software e feito para ler em ordem ex:

de 0 ao 13
de 5 ao 13
de 10 ao 13

“criar um data point para receber 8 bytes”
Nao seria possível, não fez confusão com a dados de status? Ele retorna 8 bits e não 8 bytes