в ручную? лови для самопроверок
еёный_num_reg := (adr(еёный) - adr(самая_первая_переменная_в_слейве)) / 2;
Вид для печати
Если уж тут программы народ начал писать, то ВОТ
Вложение 85069 Вложение 85070 Вложение 85071 Вложение 85072
то есть нужно чтобы real адрес был кратный 4?
Если представить область памяти с возрастающими адресами (от 0 до
какого-либо числа) и расположить переменные, то, если идет первая
переменная типа «байт», то она будет расположена по адресу 0х00,
следующая – 0х01 и т.д. Если дальше идет 4-байтная переменная, она должна
располагаться по адресу 0х04, т.е., кратному 4
Очередность переменных нужно правильно выстраивать я правильно понял?
да
и что там написано?
переводя на русский - флоат всегда должен начинаться с чётного номера регистра (понятно?),Цитата:
Автоматическая адресация переменных производится последовательно, начиная с нулевого адреса (как для битовых переменных, так и для переменных, передаваемых регистрами).
Таким образом, если в модуле используются переменные одного типа, то при запросе устройством – Мастером регистра с адресом «0», модуль считывает первые два байта, для регистра с адресом «1» – вторые два байта и так далее.
Если переменные имеют длину более двух байт, то при запросе регистра с адресом «0», модуль считывает первые два байта первой переменной, для регистра с адресом «1» – вторые два байта первой переменной и так далее.
Но если в модуле используются переменные разных типов (например, одновременно восьмибитный, двухбайтный и четырёхбайтный), то при распределении адресов ПО CoDeSys производит «выравнивание» адресов переменных – упорядо
чение адресов переменных в памяти модуля. Такое упорядочение заключается в организации памяти таким образом, что переменные размером 8 бит, 2 байта и 4 байта располагаются только по определенным адресам: четырёхбайтным переменным
присваиваются адреса, кратные 4; двухбайтным – кратные 2; однобайтным (или восьмибитным) –кратные 1. То есть, независимо от порядка задания переменных, выравнивание назначает переменным адреса, кратные их длине.
Таким образом, первая восьмибитная переменная будет расположена в 0… 7 битах памяти модуля, вторая – в 8… 15 и т.д. Если же вторая переменная двухбайтная, она будет располагаться в 16… 31 битах, т.е., по адресу, кратному 2, и т.д. Четырехбайтная переменная займет следующее свободное место, кратное 4.
Такой порядок размещения переменных в памяти модуля может образовать адресные пространства, не занятые переменными. Эти пространства не отображаются в области ввода/вывода, но они обязательно должны учитываться при организации опроса переменных; учитывать эту особенность следует еще на стадии задания переменных.
\ при этом занимает два номера (понятно?)
при этом - следим за руками - нечётный регистр флоата в адресном пространстве не отображается
понятно?Вложение 85074
Вот ещё можно не переставлять всё в конфигурации, а сделать Slave через структуру: https://cs-cs.net/codesys-modbus-kar...trov-struktury
Но выравнивание и там надо соблюдать