Здравствуйте.

Возможно данный вопрос уже поднимался на форме, но я что-то ни как не могу найти подходящий ответ.

Задача такая:
К ПЛК110 подключен 3G-роутер посредством которого должна осуществляется связь по Modbus-TCP с удаленным компьютером. На компьютере установлена самописная программа, которая работает в режиме Modbus-slave.
К программе планируется подключить с несколько десятков устройств. Для того чтобы разгрузить программу и канал 3G хотелось бы сделать так, чтоб контроллеры писали в Modbus-slave групповыми запросами.
Групповой запрос в ПЛК110 в Universal Modbus Device реализуется через переменные STRING.
Вопрос следующий:
Как упаковать переменные в STRING?

Пытался решить следующим способом:

--------------------------------------------------------------
VAR

str1: STRING[8];
str2: STRING[44];
str3: STRING[36];

ptr1: POINTER TO ARRAY[0..7] OF BYTE;
ptr2: POINTER TO ARRAY[0..21] OF INT;
ptr3: POINTER TO ARRAY[0..17] OF INT;

END_VAR

ptr1:=ADR(str1);
ptr2:=ADR(str2);
ptr3:=ADR(str3);

ptr1^[0].0 := parametr11;
ptr1^[0].1 := parametr12;
ptr1^[0].2 := parametr13;
ptr1^[0].3 := parametr14;
ptr1^[0].4 := parametr15;
ptr1^[0].5 := parametr16;
ptr1^[0].6 := parametr17;
ptr1^[0].7 := parametr18;
и так далее для строки str1
(parametr11...parametr18 - переменные типа BOOL)

ptr2^[0] := parametr21;
ptr2^[1] := parametr22;
и так далее для строки str2
(parametr21, parametr22 - переменные типа INT)

ptr3^[0] := REAL_TO_INT(parametr31 * 100);
ptr3^[1] := REAL_TO_INT(parametr32 * 100);
и так далее для строки str3
(paremetr31,parametr32 - переменные типа REAL)

modbus_group1 := str1;
modbus_group2 := str2;
modbus_group3 := str3;

(modbus_group1,modbus_group2,modbus_group3- переменные типа STRING Universal Modbus Device)
--------------------------------------------------------------

После заливки такого кода программа зависает, через некоторое время перезагружается контроллер (наверно watchdog срабатывает)

Что не так в коде? И может какое другое решение есть?
Подскажите пожалуйста.