как можно получить все регистры ModBus одним массивом ?
как можно получить все регистры ModBus одним массивом ?
как к нему обратиться, в этом и есть вопрос
Вот тут гляньте, есть пример
https://www.youtube.com/watch?v=OxC8...doIzVR&index=3
ссылка интересная, но немного не то, либо я все таки не понимаю. У меня контроллер slave устройство, и у него в конфигурации описан массив регистров. Так вот именно как получить ссылку на адрес первого байта этого массива.
https://youtu.be/OxC8_HwU8Dw?list=PL...dTdoIzVR&t=500
Под рукой CDS2.3 нет, но логика такая:
В месте где создается переменная слейва, создаете переменную типа string с нужной длинной, это и есть размер массива, далее ковыряете как надо этот string.
В видео пример для случаев если вы хотите опросить диапазон адресов с разными типами данных
Есть описание девайса, того места где описан этот массив ?
в видео описан случай для мастера, и строка создается в конфигурации, и в нее как раз читается массив данных сразу из слейв устройства. В моем случае как раз то же хочу сделать, но походу туплю. Вот начинаются регистры
FAIL_REG1 AT %QW7.1.0:WORD; (*adrr 001 ;*)
FAIL_REG2 AT %QW7.2.0:WORD; (*adrr 002*)
FAIL_REG3 AT %QW7.3.0:WORD; (*adrr 003 *)
STATE_REG1 AT %QW7.4.0:WORD; (*adrr 004 *)
STATE_REG2 AT %QW7.5.0:WORD; (*adrr*)
STATE_REG3 AT %QW7.6.0:WORD; (*adrr *)
они идут подряд 38 штук разных типов WORD и DWORD(Real), как мне их завернуть в строку для отправки
Я понял ваш вопрос
По сути, ничего делать не надо,
пусть ваши 38 word, dword так ими и остаются, ведь что массив, что строка, для вашего слейва ничего делать не надо.
Мастер и так опросит весь диапазон сразу, как в видео.
Если вам хочется массив который уже собран в программе представить как массив для опроса, что бы вручную не писать, то пока без среды разработки не подскажу
немного не так, мне надо все эти регистры завернуть в строку чтобы записать в лог. Не хочу перечислять по отдельности каждый регистр, ибо при добавлении нового регистра есть шанс забыть добавить его в логгирование
сделал так
VAR
mbBuff: POINTER TO ARRAY[1..68] OF WORD;
Massiv: ARRAY[0..68] OF BYTE;
END_VAR
mbBuff := ADR(FAIL_REG1);
Massiv := mbBuff^;
вот теперь как Massiv или mbBuff преобразовать в строку ???
в тоге преобразование сделал так
FOR i:=0 TO 68 DO
aMyStringArray[i] := WORD_TO_STRING(Massiv[i]);
str := CONCAT(str,aMyStringArray[i]);
str := CONCAT(str, ';');
END_FOR
но в строке одни нули (((