Вот пример "бешенной синусоиды"
PROGRAM PLC_PRG
VAR
func: ARRAY[0..157] OF VisuStructPoint;
p_cnt: INT;
i: INT;
x, y: REAL;
init: BOOL;
scan, way: INT;
fwd: BOOL;
END_VAR
IF init THEN
IF (scan = 10) THEN
(* Смена направления движения *)
IF (way = 10) THEN
fwd := NOT(fwd);
way := 0;
ELSE
way := way + 1;
END_IF
IF (fwd) THEN
(* Перемещаем на 10 точек вправо *)
FOR i := 0 TO p_cnt - 1 DO
func[i].iX := func[i].iX + 10;
END_FOR
ELSE
(* Перемещаем на 10 точек влево *)
FOR i := 0 TO p_cnt - 1 DO
func[i].iX := func[i].iX - 10;
END_FOR
END_IF
scan := 0;
ELSE
scan := scan + 1;
END_IF
ELSE
p_cnt := 158;
FOR i := 0 TO p_cnt - 1 DO
x := i / 25.0;
y := SIN(x);
func[i].iX := 100 + REAL_TO_INT(x * 100);
func[i].iY := 240 - REAL_TO_INT(y * 100);
END_FOR
fwd := TRUE;
init := TRUE;
END_IF
Все работает в эмуляции, но только если вписать в свойствах "Переменные состояний->Невидимый" что-нибудь. Достаточно даже просто "FALSE", либо переменную, которую при инициализации обнулять ну и т.п. Если этого не сделать то на экране отражается первоначальная закорючка (я использовал кривую Безье). И что самое интересное, этот ... нюанс... ну нигде не обозначен!




Ответить с цитированием
