Instabilidade escrita Driver MProt

Olá Devs!

Tenho uma aplicação rodando Elipse E3 Server na versão 5.1.175 contendo um driver MProt v4.0.19 comunicando com um PLC Siemens 1511-1PN.

Minha aplicação contém alguns scripts rodando no server que fazem escritas sequenciais em aproximadamente 8 a 9 propriedades de um um determinado XObject, como o exemplo abaixo:

18

Cada uma dessas propriedades está lincada com uma IOTag do driver acima referido, conforme exemplo abaixo:

02

Os elementos IOTag estão configurados da seguinte forma:

Ocorre que muitas vezes um (ou mais) desses Tags não é atualizado conforme o valor definido no script. Isso ocorre de forma totalmente aleatória, com a maioria dos Tags sendo atualizados com sucesso ao final do script e outros não. O estranho é que o script é executado até o final e sem apresentar nenhum erro.

Já tentei alterar a propriedade “AdviseType” dos IOTag para o valor “AdviseInAdvise”, porém o problema persiste.

Alguém tem alguma ideia do porquê isso ocorre e/ou de como resolver? Desde já agradeço a ajuda!

Régis,
Sugiro que você altere o tipo da propriedade do XObject para IOTag. Assim poderá utilizar o método Write ou WriteEx no script, assegurando a escrita do valor no driver de comunicação.
Caso queira manter mesmo tipo de dado, sugiro que teste uma conexão reversa nas associações, ao invés de conexão bidirecional.

Enrico,

Obrigado pelo retorno, vou aplicar essas alterações em minha aplicação e realizar testes, posteriormente retorno com um feedback dos resultados obtidos.

Prezado Enrico,

Passei praticamente 2 dias inteiros tentando resolver o problema, aplicando as mais variadas configurações de Driver e/ou IOTag, porém sem sucesso. Apliquei suas sugestões propostas aqui no fórum e também aquelas propostas em nosso contato telefônico.

Seguem algumas das variações de tentativas realizadas:

  • Atualizar a plataforma para a versão mais atual disponível no site (5.1.195);
  • Alterar o parâmetro WriteSyncMode do Driver;
  • Alterar o parâmetro WriteFeedbackMode do Driver;
  • Alterar (aumentar e diminuir) o tempo de Scan dos objetos IOTag;
  • Alterar o parâmetro AdviseType dos objetos IOTag;
  • Diferentes variações de todos os parâmetros acima;
  • Alterar os parâmetros AllowWrite e AllowRead dos objetos IOTag para False, executando escritas com os métodos Write() e WriteEx() respectivamente;
  • Monitorar o retorno do método WriteEx() após executar escrita síncrona;

Após cada teste realizado eu analisei o arquivo de Log IOData afim de identificar qualquer erro de escrita, porém nenhum erro foi reportado. Também nenhum erro de script foi gerado, simplesmente de forma aleatória uma ou outra Tag deixa de ser escrita sem qualquer falha de script.

Consegui finalmente resolver o problema (de forma paliativa) executando re-escritas em sequência, conforme ilustrado a seguir:

Executando o Loop 1x o problema é observado com alta frequência. Executando-se 2x o problema é observado em menor frequência. Executando-se 3x o problema deixa de ser observado em um regime de testes de 100 tentativas, o que passa a ser tolerável no contesto da aplicação atual.

Vou prosseguir com a aplicação utilizando a medida proposta acima, porém peço a gentileza que analisem internamente essa ocorrência, retornando com uma solução mais “definitiva” ao caso observado.

Desde já agradeço a atenção.

Régis,
Para investigar seria preciso você gerar logs do driver, não só do E3 e IOData. Ative o log do driver na janela de configuração do driver, aba Setup, opção ‘Log to File:’.
Sugiro deixar o valor padrão de cada propriedade do driver e testar sem loop o comando WriteEx.
Se preferir, envie os arquivos por e-mail para enrico@elipse.com.br.