Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 15

Тема: Неправильно отображаются значения переменных (ПЛК-154 slave, СП270-Т master)

  1. #1

    По умолчанию Неправильно отображаются значения переменных (ПЛК-154 slave, СП270-Т master)

    Доброго времени суток!

    Помогите, пожалуйста, разобраться где у меня ошибка.
    Есть 4 переменные типа DWORD, 2 из них отображаются
    правильно, а 2 другие полная лажа.
    Скорее всего что-то из-за неправильного понимания мной
    выравнивания переменных в памяти.

    Более подробно во вложении.

    Заранее спасибо!
    Вложения Вложения
    • Тип файла: doc Error.doc (231.0 Кб, Просмотров: 22)

  2. #2

    По умолчанию

    Все дело в выравнивании. Смотрим документацию - 4-х байтные начинаются с четного адреса. В Вашем случае с 8.

  3. #3

    По умолчанию

    Андрей, если я Вас правильно понял, то значит будут 8, 10, 12, 14?
    А как же сейчас правильно работают переменные с адресами 9 и 13?
    Или они прихватывают смежные байты?

  4. #4
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,249

    По умолчанию

    4-х байтные переменные размещаются по адресам кратным четырем, т.е. 0,4,8,12 и т.д.. Регистры всегда кратны двум - 0,2,4,6 и т.д.

  5. #5

    По умолчанию

    Спасибо! Т.е., если я правильно понял, то в СП2701-Т для этих 4-х байтных переменных
    будут след. адреса (в моем случае): 8, 12, 16, 20 и тип данных DWord? Или я опять туплю?
    Последний раз редактировалось TAASoft; 21.05.2011 в 00:29.

  6. #6

    По умолчанию

    чувак, это овен, тут нет логики. У меня такая же ситуация, тоже думал что и 4х байтовые переменные по документации на 4,8, 12, 16 и т.д. А нифига подобного, у меня и с нуля отображалось и с 9го, методом тыка надо делать. Это не единственная лажа у овенов), у тебя все впереди
    Последний раз редактировалось ward; 21.05.2011 в 16:27.

  7. #7

    По умолчанию

    Цитата Сообщение от TAASoft Посмотреть сообщение
    Спасибо! Т.е., если я правильно понял, то в СП2701-Т для этих 4-х байтных переменных
    будут след. адреса (в моем случае): 8, 12, 16, 20 и тип данных DWord? Или я опять туплю?
    Цитата Сообщение от ward Посмотреть сообщение
    чувак, это овен, тут нет логики. У меня такая же ситуация, тоже думал что и 4х байтовые переменные по документации на 4,8, 12, 16 и т.д. А нифига подобного, у меня и с нуля отображалось и с 9го, методом тыка надо делать. Это не единственная лажа у овенов), у тебя все впереди
    Лажа обычно в головах и в нежелании читать документацию.
    Такие же странности при обмене по ModBus Вы встретите и в других контроллерах под CoDeSys. Понимаю, что все мы крутые эксперты, а CoDeSys "писали какие то лабухи"... однако документация - полезная вешчь.
    0 адрес, как это не странно тоже четный.
    И с 9 можно считывать, и с 10, и с 11.
    Но чтобы получать ликвидные данные, а не часть от одного параметра, а часть от другого стоит следовать документации.
    Четко прописано:
    Память одна, что для битовых переменных, что для 2-х байтных, что для 4-х байтных. Адреса идут последовательно.
    2 байта занимают один регистр и адресуются 0,1,2,3,4,5,6...
    4 байта занимают 2 регистра и адресуются 0,2,4,6,8. Выравнивание и сделано как раз для умельцев, которые добавляют в разнобой 2 и 4 байта, и потом не знают что откуда брать... И это механизм CoDeSys...

  8. #8

    По умолчанию

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    4 байта занимают 2 регистра и адресуются 0,2,4,6,8. Выравнивание и сделано как раз для умельцев, которые добавляют в разнобой 2 и 4 байта, и потом не знают что откуда брать... И это механизм CoDeSys...
    у меня кроме 2 байтов было и 8 бит, с 9го адреса считывал отчетливо 4х байтовую..., а если после этих 4х байт сунуть еще четыре байта, то их надо будет не с 11го(!!!!) считывать, а с 12го, и где логика, сэр?
    девятка явно не входит в перечисление 0,2,4,6...., собственно как и 11, зато 12 да
    Последний раз редактировалось ward; 21.05.2011 в 16:57.

  9. #9

    По умолчанию

    Логика то как раз в том, чтобы не проводить эксперименты над собой,и не тратить свое время на изыскания, не сбивать с толку других специалистов...
    Если Вы добавите регистр (адрес 0) а потом 2 4-х байтных переменных, то по адресу 1 Вы получите часть данных из одной переменной, часть из дугой. НАВЕРНОЕ при условии, что второе 4-х байтное не пренимает значение, которое выходит за младшие 2 байта, Вы получите ликвидные данные, а если выходит - врядли.
    Но в общем то мне заниматься этими изысканиями и не интересно и времени нет. По тому что принцип описанный в документации на 100% работает - проверено уже не в одном проекте (лично мною). Да и форум показывает что все работает корректно (вопросов очень мало по выравниванию). а если и возникают - заканчиваются просто. Переставил - работает - спасибо.

  10. #10

    По умолчанию

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    Логика то как раз в том, чтобы не проводить эксперименты над собой,и не тратить свое время на изыскания, не сбивать с толку других специалистов...
    Если Вы добавите регистр (адрес 0) а потом 2 4-х байтных переменных, то по адресу 1 Вы получите часть данных из одной переменной, часть из дугой. НАВЕРНОЕ при условии, что второе 4-х байтное не пренимает значение, которое выходит за младшие 2 байта, Вы получите ликвидные данные, а если выходит - врядли.
    Но в общем то мне заниматься этими изысканиями и не интересно и времени нет. По тому что принцип описанный в документации на 100% работает - проверено уже не в одном проекте (лично мною). Да и форум показывает что все работает корректно (вопросов очень мало по выравниванию). а если и возникают - заканчиваются просто. Переставил - работает - спасибо.
    спасибо за внимание
    Последний раз редактировалось ward; 21.05.2011 в 17:40.

Страница 1 из 2 12 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •