Тут такая штука. после того, как я разобрался с массивами - выяснилось, переменные типа DWORD не передаются по модбас. все остальные работают на чтение и запись. в итоге оставил передачу только 2-х регистровых значений: в программе переменные заполняются, значения в них меняются, но при опросе - все адреса содержат нули.
вот так выглядит передача данных из массива по регистрам:
.......
MBSlaveImage : ARRAY [0..1] OF MB_RTU_SIMPLE_SLAVE_DATA_DESCR :=
(*(eType := MBS_holding_REGISTER, wItemsCount:=82, wMbOffset:=0 ),*)
(eType := MBS_input_REGISTER, wItemsCount:=30, wMbOffset:=0 ),
(eType := MBS_Coil, wItemsCount:=2, wMbOffset:=0 );
END_VAR
-------------------------------------------------------------------------------------------------------------------
IF finit THEN
(*MBSlaveImage[0].DataAddr := ADR(awSlaveRegisters[0]);*)
MBSlaveImage[0].DataAddr := ADR(awSlaveRegistersD[0]);
MBSlaveImage[1].DataAddr := ADR(abySlaveCoils[0]);
END_IF
...............