PDA

Просмотр полной версии : СПК указатели



Dimko
13.11.2015, 15:23
Имеем СПК 105 с прошивкой 3.939 Codesys SP5 Patch5. К нему ПР200 и два ПЧВ1.
У пр200 использую аналоговые входа для Ai1 и Ai2. Программа работает нормально.
Начал рисовать визуализацию для СПК. И заметил не понятную вещь.
При добавлении более 3 экранов визуализации, у меня адрес указателя теряется, сброс заводской и очистить всё не помогает.

Часть кода
(
VAR
ai1_float,ai2_float,
ai3_float,ai4_float : ARRAY[1..2] OF WORD; (* Массив из ПР200 биты идут 2-1-4-3*)
Ai1,Ai2,Ai3,Ai4 : real;
a1,a2,a3,a4 : POINTER TO REAL;
END_VAR

a1:= ADR(ai1_float[1]);
Ai1 := a1^;
a2:= ADR(ai2_float[1]);
Ai2 := a2^;
a3:= ADR(ai3_float[1]);
Ai3 := a3^;
a4:= ADR(ai4_float[1]);
Ai4 := a4^;
)

20800

т.е. указатель а1 почему-то присваиваеться к Ai2 а не Ai1

Без визуализации всё норм, как разобрать?

Валенок
13.11.2015, 16:46
На картинке все нормально присваивается. Что пришло - то и положилось.

PS
И вообще - сложно как-то. Проще надо быть


var
ai : array[1..4] of real;
p : pointer to array[1..4] of real;
----------
p := adr(ai_float); //ai_float[1..8] of word видимо где у Вас
ai := p^;

ну или без p
sysmemcpy(adr(ai),adr(ai_float),sizeof(ai)); //тут (в кдс3) аналог этой функции есть где-то

Dimko
15.11.2015, 02:08
Валенок спасибо за совет! Разобрался был глюк при копировании элементов визуализации.