CodeSys указатели на структуры |
Ответить |
Автор | |
Новичок Присоединился: 26 Июль 2013 Online Status: Offline Публикации: 12 |
Опубликовано: 06 Август 2013 19:08 |
Объявил указатель на структуру. Подскажите синтаксис, как можно обратиться к полям структуры через этот указатель.
Заранее благодарю за помощь.
|
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
В области данных объявляется новый тип-структура, например Tstruct1:
TYPE Tstruct1 : STRUCT i1, i2: INT; b1, b2: BYTE; END_STRUCT END_TYPE потом в разделе данных программы создается переменная st1 типа Tstruct1, и сразу указатель на тип pst1: ----------------------------------------------- PROGRAM PLC_PRG VAR . . . . . . . st1: Tstruct1; pst1: POINTER TO Tstruct1; . . . . . . . . . . . . . . END_VAR ------------------------------------------ в самой программе до использования указателя ему надо присвоить адрес переменной: . . . . . . . . pst1 := ADR(st1); и после можно работать с элементами структуры через указатель экземпляра: . . . . . . . pst1^.i1 := 1234; если есть переменная типа INT a1:INT . . . . . . . a := pst1^.i2; можно обратиться к адресу отдельного элемента структуры, например есть указатель на байт pb1: POINTER TO BYTE: . . . . . . . pb1 := ADR(pst1^.b2); и потом присвоить элементу b2 значение pb1^ = 33; А ваще всё это есть в мануале и начальные вопросы программирования лучше поднатужиться самому - оно полезно .. С уважением, SAN |
|
Новичок Присоединился: 26 Июль 2013 Online Status: Offline Публикации: 12 |
|
Спасибо большое.
Мануалы я конечно же читал. И про указатели , и про структуры. Все объявил в проекте, все компилилось. Только вот момент об указателях на структуры и синтаксис обращения к полям я видимо где-то пропустил. Теперь все стало ясно. |
|
Новичок Присоединился: 26 Июль 2013 Online Status: Offline Публикации: 12 |
|
p.s.
как я понимаю(по аналогии как в С typedef) st1 можно и не объявлять, достаточно просто свой тип данных создать
|
|
Новичок Присоединился: 26 Июль 2013 Online Status: Offline Публикации: 12 |
|
Появились нюансы, вот такой код:
tmpQW256 AT %QW256:WORD; TYPE OUT_VAR_TO_PANEL : STRUCT Year:WORD; Mont:WORD; Day:WORD; Hour:WORD; Minn:WORD; Sec:WORD; END_STRUCT END_TYPE ptOutVarToPanel : POINTER TO OUT_VAR_TO_PANEL; ptOutVarToPanel:= ADR(tmpQW256); В варианте ниже пишется только 11 (записанные слова читаются панелью): ptOutVarToPanel^.Year := 11; ptOutVarToPanel^.Mont := 22; ptOutVarToPanel^.Day := 33 ; ptOutVarToPanel^.Hour := 44 ; ptOutVarToPanel^.Minn := 55 ; ptOutVarToPanel^.Sec := 66 ; А в варианте ниже пишутся все ячейки правильно: tmpQW256 := 11; tmpQW257 := 22; tmpQW258 := 33; tmpQW259 := 44; tmpQW260 := 55; tmpQW261 := 66; А вот если работать с областью %MW , то все всегда работает правильно. Почему запись в область выходов не работает через указатели? |
|
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
|
тык, что то не видно объявлений .. tmpQW257, tmpQW258, tmpQW259, tmpQW260, tmpQW261 %QW - это объявление области выходов, а если работа идет со словами так и надо объявлять двух-байтовые данные %MW С уважением, SAN |
|
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |