спасибо, не надо.
и у меня работает. лучше изучение основных принципов, чем сиюминутное "как именно сделать", хотя четкой границы нет и одно перетекает в другое.
пока удалось наступить почти на все грабли, оттого что некачественно изучил документацию, вот и возникают "детские" вопросы типа "индексного регистра в панели или канала в slave".
поэтому в выходные заново перечитаю и осмыслю документацию на кодесис и панель и большинство вопросов отпадут.
1) для Валенок: я посмотрел, выравнивание не всегда происходит по квартам. Если объявить структуру STRUCT1 из 16 битных, то смещение очередного компонента равно размеру предыдущего, то есть выравнивания и следовательно "щелей" внутри такой структуры нет.
2) если эта структура типа STRUCT1 является элементом другой структуры типа STRUCT3 (STA : STRUCT3), то в зависимости от размеров элементов, в STA могут появляться щели. Щели не инициализируются, поэтому до перезагрузки контроллера в них лежит оставшийся "мусор" (при перезаписи дампа структуры по указателю в область обмена "мусор" виден). Вреда для исполняемой программы от мусора нет, но при отладке менее удобно, мусор остается от тех же маркеров-заполнителей ( CLEAR_ARR) после изменения размера структуры.
на экранах - область обмена modbus (скриншот панели), начиная с 0 адреса, увеличение адр. сверху вниз по столбцам
________программа
Сформулирую по другому.
1.Порядок не меняется - к счастью нет никаких оптимизаций.
2.Элементы структуры выравниваются обычным (для КДС) порядком,т.е. есть разница :
dword, word, byte, byte
byte, byte, dword, word (Вот они щели. Причем две)
dword, byte, word, byte (И тут. Но другие)
3.Размер структуры всегда кратен 4.
хорошо бы автоматизировать составление таблиц длин и смещений
для последующей работы с панелью, можно анализировать при помощи заполнения маркерами или полиномами, а то при большом количестве переменных вручную ненадежно, да и изменение структуры может вести к переделке таблицы.
И в продолжение вчерашней темы о производительности - плк:
при копировании дампа структуры (более 300 байт) в память обмена ПЛК-100L, в цикл контроллера я добавил "на пробу" еще 100 таких перезаписываний. Справляется, обслуживает логику программы и еще два сегмента Modbus.