PDA

Просмотр полной версии : Помогите с выравниванием



gvasily
30.10.2012, 14:46
Добрый день!
Прошу помочь.

По моему, я не совсем разобрался с выравниванием, но может быть дело во float. Честно, много читал, но все равно не понимаю :(

Проблема вот в чем. По логике выравнивания номер регистра первого float должен быть 2, а второго - 4.

Но при установке этих параметров на панель выводятся неверные значения!

Если же я ставлю 3 и 5, то все ок...

Также странно, что шестым у меня идет ASCII строка, которая по идее, должна быть седьмой, так как float занимает две пары байтов, но чтобы она правильно выводилось - надо поставить 6.

В общем, помогите пожалуйста!

Yegor
30.10.2012, 15:57
По логике выравнивания номер регистра первого float должен быть 2, а второго - 4.Если первый float будет по адресу 2, то какой по-вашему адрес должен быть у третьего «8 bits»?

gvasily
30.10.2012, 16:05
Если первый float будет по адресу 2, то какой по-вашему адрес должен быть у третьего «8 bits»?

Как во втором столбце второй таблицы - №1.

первый и второй "8бит" - в нулевом регистре
третий и "пустое место для выравнивания" в первом регистре
первый флоат во втором регистре

Тут еще непонятка.
По теории выравнивания - первый float должен вроде выравниваться по адресу, кратному 4, т.е. вроде как вообще должен иметь адрес 4...

petera
30.10.2012, 19:26
Как во втором столбце второй таблицы - №1.

первый и второй "8бит" - в нулевом регистре
третий и "пустое место для выравнивания" в первом регистре
первый флоат во втором регистре

Тут еще непонятка.
По теории выравнивания - первый float должен вроде выравниваться по адресу, кратному 4, т.е. вроде как вообще должен иметь адрес 4...
В таблице красиво нарисовано, но в конфигурация MODBUS ей не соответствует "пустого места для выравнивания" то и нет три раза по "8бит" и сразу "первый флоат "

Валенок
30.10.2012, 21:46
Таблица - соответствует. Конфигурация неявно запендюрит еще байт. Курим про выравнивание.
1флоат - 2,3
2флоат - 4,5
Тока вот для ИП слова в реалах нужно переставлять.
Настроил 1 флоат с 3 (3,4)- получил приблизительно правильный рез-т т.к. любое значение второго слова влияет в пределах 1%


По теории выравнивания - первый float должен вроде выравниваться по адресу, кратному 4 байт, т.е. вроде как вообще должен иметь адрес 4 -й байт -> 2 регистр...

to gvasily
А почему в ИП "число регистров" - 1 ?

gvasily
31.10.2012, 09:47
Тока вот для ИП слова в реалах нужно переставлять.

Каким образом переставлять? Видел "переставление" в примере вывода строки ASCII. Целая процедура...


Настроил 1 флоат с 3 (3,4)- получил приблизительно правильный рез-т т.к. любое значение второго слова влияет в пределах 1%


А, помню, когда разные варианты перебирал, какое-то число он вывел на 0.1 меньше, но я в голову не взял.


Настроил 1 флоат с 3 (3,4)- получил А почему в ИП "число регистров" - 1 ?

Если ставлю 2 - выводит нули :(

Гарчев Евгений
31.10.2012, 10:51
Каким образом переставлять? Видел "переставление" в примере вывода строки ASCII. Целая процедура...

ИП читает в нормальной последовательности регистры, переставлять ничего не надо



Если ставлю 2 - выводит нули :(

Все правильно, адрес регистра для первого флоата - 2, для второго - 4, а нули выводит, скорее всего, из-за того, что кол-во регистров Вы так и оставили 1 в конфигураторе ИП, а надо поставить - 2.

gvasily
31.10.2012, 12:26
ИП читает в нормальной последовательности регистры, переставлять ничего не надо

Все правильно, адрес регистра для первого флоата - 2, для второго - 4, а нули выводит, скорее всего, из-за того, что кол-во регистров Вы так и оставили 1 в конфигураторе ИП, а надо поставить - 2.

Евгений, Вы правы!!
Я поставил два регистра, но забыл изменить адрес на 2!!!

Теперь все выводится как надо!

Спасибо!
Тема закрыта.

Валенок
31.10.2012, 22:29
Вот ведь удивится автор темы просто поменяв ИП на СП.

PS
А техподдержке не мешало бы сказать что real-слейв переставляет слова непосредственно в конфигурации.