
Сообщение от
Дмитрий Артюховский
он массив читает из сокета, и наверняка объявил его байтовым, соответственно траснслятор поставил вв адресах куда пришлось
Код:
VAR
flag : BOOL;
count : INT:=0;
result : REAL;
inPtr : POINTER TO BYTE;
outPtr : POINTER TO REAL;
stuff : ARRAY[0..7] OF BYTE;
tik : TON;
END_VAR
(* @END_DECLARATION := '0' *)
IF tik.Q THEN
inPtr:=ADR(TEMPO);
stuff[count]:=inPtr^;
inPtr:=inPtr+1;
stuff[count+1]:=inPtr^;
inPtr:=inPtr+1;
stuff[count+2]:=inPtr^;
inPtr:=inPtr+1;
stuff[count+3]:=inPtr^;
outPtr:=ADR(stuff[count]);
flag:=NOT DWORD_TO_BOOL(outPtr MOD 4);
(* IF flag THEN*)
result:=outPtr^;
(* END_IF; *)
count:=(count+1) MOD 5;
END_IF;
tik(IN:=NOT tik.Q,PT:=T#2s);
END_FUNCTION_BLOCK
таким кодом у меня получилось перегрузить плк, когда указатель становится не кратным четырем, единственное чего я не добился, чтоб изначально указатель принял не кратное четырем значение, почему это вдруг транслятор, как Вы пишите, должен раздавать адреса на куда попало?