Comunicação Modbus

Bom dia, preciso fazer o Elipse E3 comunicar com um controlador de um grupo gerador DSE8610 da Deep Sea, uso as funções 3 e 16 do protocolo. Consigo ler os resistradores mas não consigo escrever. Estou usando word para escrita.
Para dar um comando eu preciso escrever em dois registradores ao mesmo tempo, nas tags 4104 e 4105, esses valores são tabelados e complementares, dá algum erro na escrita, preciso de ajuda com essa função, segue abaixo o log:

Ele precisa gravar ao mesmo tempo nos tags 4104 e 4105, mas para no 4104
Esse tag é somente escrita e o tag 772 é um tag de leitura, que altera seu valor em função dos tags 4104 e 4105.

29/05/2015 10:52:49.426 (05F8) DRIVER MODBUS exception response - type 2(ILLEGAL DATA ADDRESS)!
29/05/2015 10:52:51.446 (05F8) IO RX: TIMEOUT
29/05/2015 10:52:51.446 (05F8) TAG ==> (2.023) Tag(2.3.0.4104).WriteValue (10:52:49.423) 35701 = ERROR (hr=80004005)
29/05/2015 10:52:51.446 (307C) IO TX: 00 0D 00 00 00 06 02 03 03 04 00 01
29/05/2015 10:52:51.448 (307C) IO RX: 00 0D 00 00 00 05 02 03 02 00 00
29/05/2015 10:52:51.449 (05F8) TAG <== (0.003) Tag(2.3.0.772).ReadValue = (10:52:51.446) 0
29/05/2015 10:52:52.954 (307C) IO TX: 00 0E 00 00 00 06 02 03 03 04 00 01
29/05/2015 10:52:52.956 (307C) IO RX: 00 0E 00 00 00 05 02 03 02 00 00
29/05/2015 10:52:52.956 (05F8) TAG <== (0.002) Tag(2.3.0.772).ReadValue = (10:52:52.954) 0

Quem puder me ajudar eu agradeço,

Italo Moura

Italo,
A exceção ILLEGAL DATA ADDRESS diz apenas que o driver está tentando ler/escrever em endereços ou faixas de endereços que não existem no equipamento.

Na documentação do fabricante do equipamento encontrei o seguinte:

· Control
Control is performed by sending System Control Keys to the module, and also sending the bitwise opposite (or one’s compliment) of the control key to another register ‘in the same write operation’ for security.
To modbus register 4104 (decimal) write the system control key as below
To modbus register 4105 (decimal) write the compliment of the system control key as below
Both of these registers MUST be written to the controller at the SAME TIME using the SAME MODBUS WRITE COMMAND.
A table of Control Keys and the ones compliment of the keys is included overleaf.

Como diz na documentação, você deve fazer apenas um comando para escrever nos dois endereços. Para isto você pode criar um bloco de dois elementos com parametrização N sendo 2,3,0,4104, e fazer um comando Write no bloco.

Lembre de dar valores complementares para os elementos do bloco.

Uma outra saída que talvez funcione é criar um tag com endereço 4104 no formato DWORD.

Não deu certo, fiz isso e encaminhei o log para o Sr. Kotres dar uma olhada. Ele tenta escrever mas não consegue, criei o bloco e fiz o script.
Deve ter algum erro, encaminhei para ele também a resposta de dois e-mails que o fabricante me mandou, tem o contato do suporte técnico deles e a explicação de como escrever no registrador.

Valeu…

Nesse log é possível ver que está escrevendo mais de um segundo depois, preciso escrever ao emsmo tempo:

12/06/2015 15:37:10.109 (17E4) TAG ==> (1.065) Tag(2.2.0.4104[2]).WriteBlock (15:37:09.031) 35700 = ERROR (hr=80004005)
12/06/2015 15:37:10.187 (15AC) IO TX: 00 01 00 00 00 0F 02 10 10 08 00 04 08 00 00 74 8B 00 00 00 00
12/06/2015 15:37:10.203 (15AC) IO RX: 00 01 00 00 00 03 02 90 02
12/06/2015 15:37:10.203 (17E4) DRIVER MODBUS exception response - type 2(ILLEGAL DATA ADDRESS)!
12/06/2015 15:37:11.265 (17E4) IO RX: TIMEOUT
12/06/2015 15:37:11.265 (17E4) TAG ==> (1.075) Tag(2.2.0.4104[2]).WriteBlock (15:37:10.187) 29835 = ERROR (hr=80004005)
12/06/2015 15:37:13.500 (15AC) IO TX: 00 02 00 00 00 0F 02 10 10 08 00 04 08 00 00 00 00 00 00 00 00
12/06/2015 15:37:13.500 (15AC) IO RX: 00 02 00 00 00 03 02 90 02
12/06/2015 15:37:13.500 (17E4) DRIVER MODBUS exception response - type 2(ILLEGAL DATA ADDRESS)!

Abaixo segue o script que uso:

Application.GetObject(“Driver1.ControlKey”).WriteEx 35700
Application.GetObject(“Driver1.ControlKey”).WriteEx 29835

É isso, até o momento não consegui escrever no registrador.

Esse script escreve os valores um depois do outro, e o equipamento espera que os valores sejam enviados ao mesmo tempo É preciso escrever nos elementos do bloco de uma só vez. Esse KB ajudou a resolver a questão:
http://kb.elipse.com.br/pt-br/questions/676/KB-28855%3A+Enviando+múltiplos+valores+de+uma+só+vez+para+um+bloco+de+comunicação.

Boa tarde,

você ainda está com o problema de escrita no DS?
Como o Kotres citou, tem que escrever num tag bloco ao mesmo tempo.
E uma word é o complemento de outra.
Por exemplo.

Para Modo parada
Application.GetObject(“Driver.Esteio.Gerador.Comandos.Page_16.Cmd_R1.Cmd_1”).Value = 35700
Application.GetObject(“Driver.Esteio.Gerador.Comandos.Page_16.Cmd_R1.Cmd_2”).Value = 29835

Para partir o gmg
Application.GetObject(“Driver.Esteio.Gerador.Comandos.Page_16.Cmd_R1.Cmd_1”).Value = 35705
Application.GetObject(“Driver.Esteio.Gerador.Comandos.Page_16.Cmd_R1.Cmd_2”).Value = 29830

qualquer dúvida entra em contato.

Obrigado, mas já resolvemos o problema com o seguinte KB:

http://kb.elipse.com.br/pt-br/questions/676/KB-28855%3A+Enviando+múltiplos+valores+de+uma+só+vez+para+um+bloco+de+comunicação.

Obrigado pela ajuda pessoal.

Boa Tarde,
Pessoal estou precisando de um material para iniciar um projeto supervisório para se comunicar com controlador DS2060 da Deep Sea em um gerador.
Obrigado!

Jairo,

Para configurar a comunicação entre o supervisório e o equipamento, bem como os endereços que cada tag de comunicação irá buscar, você pode utilizar o manual de configuração que acompanha o driver (arquivo .chm ou pdf).

Qualquer dúvida peço que informe.

Vinicius,

como consigo o driver do controlador DS2060 Deep Sea.
tem um link?

Jairo,

Para fazer o download do driver você pode acessar o site da Elipse (no link abaixo) e buscar pelo protocolo de comunicação de seu equipamento:
http://www.elipse.com.br/port/download_drivers.aspx

Caso o seu equipamento suporte o protocolo ModBus por exemplo, faça o download do arquivo Driver Modicon Modbus Master (ASC/RTU/TCP)

Olá, como você resolveu esse problema? Uso esse kb e sempre dá erro na primeira linha depois de entrar no bloco.