при старте проекта в ПЛК выдает сообщение программа загружена исключение
Вид для печати
при старте проекта в ПЛК выдает сообщение программа загружена исключение
Добрый день.
Судя по "AccessViolation" - у вас ошибки при работе с памятью (при использовании массивов, указателей или чего-то подобного).
Можете почитать статью про отладку в CODESYS V3.5 (ссылка в подписи) - там рассматривается эта тема.
Если не разберетесь - пишите мне в телеграм (в подписи), поможем решить вашу проблему.
Спасибо Евгений Кислов за оперативную помощь!!!
Моя ошибка была в том, что в индекс массива пытался записать число больше чем размер массива. Режим эмуляции данную ошибку игнорировал.
Было:PHP код:
Variable: ARRAY [0..100]OF REAL;
Variable1: ARRAY [0..10] OF INT := [00, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100];
Стало:PHP код:
FOR n := 0 TO 10 BY 1 DO
FOR x := 0 TO 10 BY 1 DO
Variable[n*10+x] := … / Линейное уравнение Y = Yn + (X - Xn)*(Yk - Yn)/ (Xk - Xn)
END_FOR
END_FOR
PHP код:
FOR n := 0 TO 9 BY 1 DO
FOR x := 0 TO 10 BY 1 DO
Variable[n*10+x] := … / Линейное уравнение Y = Yn + (X - Xn)*(Yk - Yn)/ (Xk - Xn)
END_FOR
END_FOR
Ещё прям классным правилом является использование констант. Можно писать так (пишу определение и обход массива):
В таком случае мы используем именованные константы для границ массива. Это позволяет назвать их как надо (например, для какого-нить буфера данных назвать SMSBufferSize, что сразу понятно), и везде подставлять их значения. Если надо будет что-то поменять - то меняется константа в одном месте.PHP код:VAR
arrData : ARRAY [DataStart..DataMax] OF WORD;
wIndex : WORD;
END_VAR
VAR CONSTANT
DataStart : WORD := 0;
DataMax : WORD := 10;
END_VAR
FOR iIndex := DataStart TO DataMax DO
lalala := arrData[iIndex];
END_FOR
Хорошее замечание.
Сделал функцию так как часто использую:
PHP код:FUNCTION LinearEquation : BOOL
VAR_INPUT
rArr : REFERENCE TO ARRAY[0..100] OF REAL;
iXn, iXk : INT;
rYn, rYk : REAL;
END_VAR
VAR
iX : INT;
END_VAR
PHP код:IF (iXk-iXn)<>0 THEN
FOR iX := iXn TO iXk BY 1 DO
rArr[iX] := rYn + (iX-iXn)*(rYk-rYn)/(iXk-iXn);
END_FOR
END_IF