Показано с 1 по 10 из 15

Тема: ПЛК210 Глюки опроса

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Если же это всё же выравнивание, то лучше протестировать структуру из нескольких WORD, чтобы проверить то, как выравнивание работает.
    И ещё, если я не вру (пишу по памяти). Если поискать в справке по CodeSys 3.5, то там в разделе pragma была возможность включить режим выравнивания побайтно.
    Я пробовал выравнивать побайтно через pragme pack_mode. Не помогло. Все стало работать нормально когда удалил из структуры все BOOL, оставил только WORD и объединения. Необходимые битовые маски из BOOL собрал в коде программы в WORD. И в полях узла ModbusTCP_Slave_Device привязывал уже WORD-переменные, а не битовые.

    Регистры.jpg

    Кстати, если кто не знал (я точно не знал, но подозревал), то на скриншоте выше область памяти под %QW48 и под %QX96.0 - одна и та же область. Но слово "BOOL" справа от адресов %QX96.n сбивала с толку. Я думал под каждый %QX96.n отводится по байту и %QX96.0 и %QX96.1 будут иметь два разных адреса. Однако если через POINTER взять адреса %QX96.0 и %QX96.1, то они будут одинаковыми и %QX96.0 по %QX96.7 занимают 1 байт. Таким образом логичнее было бы разработчикам Codesys в соотнесении входов-выходов писать тип переменной не BOOL, а BIT.

  2. #2

    По умолчанию

    Цитата Сообщение от Задумкин Сергей Посмотреть сообщение
    Я пробовал выравнивать побайтно через pragme pack_mode. Не помогло. Все стало работать нормально когда удалил из структуры все BOOL, оставил только WORD и объединения. Необходимые битовые маски из BOOL собрал в коде программы в WORD. И в полях узла ModbusTCP_Slave_Device привязывал уже WORD-переменные, а не битовые.

    Регистры.jpg

    Кстати, если кто не знал (я точно не знал, но подозревал), то на скриншоте выше область памяти под %QW48 и под %QX96.0 - одна и та же область. Но слово "BOOL" справа от адресов %QX96.n сбивала с толку. Я думал под каждый %QX96.n отводится по байту и %QX96.0 и %QX96.1 будут иметь два разных адреса. Однако если через POINTER взять адреса %QX96.0 и %QX96.1, то они будут одинаковыми и %QX96.0 по %QX96.7 занимают 1 байт. Таким образом логичнее было бы разработчикам Codesys в соотнесении входов-выходов писать тип переменной не BOOL, а BIT.
    Ну надписи в столбце слева "bit0...bit15" тоже как-бы намекают... А BOOL наверное говорит о том, что можно к каждому из битов %QX... привязать отдельную переменную типа BOOL

Похожие темы

  1. Ответов: 7
    Последнее сообщение: 08.12.2023, 08:54
  2. Ответов: 1
    Последнее сообщение: 05.03.2020, 08:38
  3. Глюки в 1.3.22b
    от Андрей555 в разделе Программируемые реле
    Ответов: 20
    Последнее сообщение: 21.10.2011, 16:25
  4. глюки плк
    от bango в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 24.05.2010, 23:44
  5. Глюки
    от Milchuk в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 29.11.2007, 12:08

Метки этой темы

Ваши права

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