Leitura de Strings => Elipse E3 - CLP Delta - IHM Delta

Bom Dia;
Estou com um problema quando trabalho com String…

int16 => hr4096.i16
int32 => hr4096.i32.sw
float => hr4096.f.sw

string => hr4096.s40.sb

int16, int32 e float, com este ajuste funciona bem, valores batem com CLP / IHM

Porém, quando utilizo string, a melhor situação foi:
hr4096.s40.sb com inversão no Byte…
assim, quando digito um texto no E3. Na IHM, o texto aparece na ordem correta…
Exemplo:
Digito no E3: ExemploStrings (12 Byte)
Na IHM Aparece Igual. ExemploStrings

Problema:
Sempre que a String formada é uma quantidade Ímpar, o Ultimo Byte não é Considerado…
Exemplo:
Digito no E3: ExemploString (11 Byte)
Quando Confirmo o Valor (Pressiono Enter)
Na IHM | E3 Aparece: ExemploStrin (Eliminando “g”)
Eliminando sempre o Ultimo Caracter | Byte

Demais casos de inversão de Byte, Word ou DWord, embaralha a String na IHM…

OBS:

  • E3 -> 4.8.300
  • Drive Modbus -> v3.1.36
  • Delta DVP SE
  • DOP-B07E411

Bom dia Saimond,

Os registros de memória do protocolo Modbus são todos WORDs de 16-bits.
Sendo assim, cada registro de memória, pode armazenar “2 bytes/caracteres”.
O driver vai trabalhar com a leitura/escrita em 16-bits, então, a string deverá ser “par” para preencher todos os registros de memória.
Se a string ficar “ímpar”, o driver vai truncar o String para um tamanho "par”.

Criarei uma solicitação para o setor de desenvolvimento desenvolver uma opção para o driver adicionar um espaço ao invés de truncar.

Por enquanto, sugiro que trates isso via script no E3. Por exemplo, utilizando o evento Validade do Setpoint:

Sub Texto17_Validate(Cancel, NewValue)
tam = Len(NewValue)
‘ msgbox tam
if tam MOD 2 <> 0 then
msgbox “impar”
NewValue = NewValue + Chr(32) ‘add espaço
msgbox Len(NewValue)
else
msgbox “par”
end if

End Sub