:cool: Будут наказаны за вранье. Кстати, с какого языка они переводили описание ПЛК1хх?
Вид для печати
А такой вариант:
...
VAR
...
source: ARRAY [0..MAX_ELEMENT] OF BYTE := 8, MAX_ELEMENT(8);
destination: ARRAY [0..MAX_ELEMENT] OF BYTE;
sourcePtr: POINTER TO ARRAY [0..MAX_ELEMENT] OF BYTE;
...
END_VAR
Код:
...
2: sourcePtr:= ADR(source);
destination:= sourcePtr^;
...
у меня на компе это за 32ms, а с SysMemLib за 125ms.
?
Этот вариант я исключил из рассмотрения сразу, т.к. размер копируемого блока данных задается в момент компиляции не может быть изменен в процесс выполнения программы. Это, мягко говоря, не удобно.
Но я его протестировал.
Код №4. Используется указатель на массив.
Время выполнения 78 мс.
Время выполнения точно такое же, как и в варианте с SysMemLib. Подозрительно :cool:. Похоже в этом варианте скрытно вызывается функция sysMemMove(). А результат 32 мс вы получили, потому что выполняли копирование 1 раз, а не в цикле ;).Код:sourcePtr2: POINTER TO ARRAY [0..MAX_ELEMENT] OF BYTE;
FOR j:= 1 TO ITERATIONS_NUMBER DO
sourcePtr2:= ADR(source);
destination:= sourcePtr2^;
END_FOR
Не понял, к кому этот вопрос, но на всякий случай отвечу - не знаю. :)
Чтобы закончить следствие, нужно спросить у Логвиненко Андрея откуда скопирована его цитата. :D
Не думал, что из-за этого может подняться такой спор, цитата взята отсюда:
"Порядок программирования контроллеров семейства ПЛК1хх (ПЛК100, ПЛК150, ПЛК154, ПЛК110)" стр. 9 с диска ПЛК версия 8.12.
Подскажите п-та "чайнику".
Имею массив chan:ARRAY[1..4,1..4] OF WORD, пытаюсь обратиться к элементу массива по индексам содержащимся в переменных row:INT и line:INT, но выражение chan[row,line] выдает ошибку.
Где я ошибаюсь?