Мы с нескрываемым интересом изучили представленный код.
Оригинально названы переменные, имя "_" умилило.
Поступила жалоба на неправильное считывание float-ов из облака.
В ModBus Slave float-ов обнаружено не было. Хм...
Зато есть ФБ, в котором есть 8 входов типа REAL и нет начинки... Интригует.
Адрес первой переменной присваивается указателю на ФБ. ЧЕГО
И далее в коде
PSlave^.A := PSlave^.A + 1 + k;
PSlave^.B := PSlave^.B + 2 + l;
PSlave^.C := PSlave^.C + 3 + k;
PSlave^.D := PSlave^.D + 4 + l;
PSlave^.E := PSlave^.E + 5 + k;
PSlave^.F := PSlave^.F + 6 + l;
PSlave^.G := PSlave^.G + 7 + k;
PSlave^.H := PSlave^.H + 8 + l;
где l и k - константы REAL.
Я, конечно понимаю, что пытались сделать, но во первых, забыли про middleendian выравнивание в modbus
И зачем ТАК извращённо то?
Вставить флоат в modbus slave религия не позволяет или почему?
Идем дальше - настройки тучки:
Почему адреса float -ов нечётные? Естественно читает пол флоата от одного и половину от другого.
Далее:
Адреса идут 16-ти ричные. А задаются как будто они десятичные. Вот последние 3 и нули.








Ответить с цитированием