при старте проекта в ПЛК выдает сообщение программа загружена исключение
при старте проекта в ПЛК выдает сообщение программа загружена исключение
Я не волшебник, я только учусь...
Добрый день.
Судя по "AccessViolation" - у вас ошибки при работе с памятью (при использовании массивов, указателей или чего-то подобного).
Можете почитать статью про отладку в CODESYS V3.5 (ссылка в подписи) - там рассматривается эта тема.
Если не разберетесь - пишите мне в телеграм (в подписи), поможем решить вашу проблему.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Спасибо Евгений Кислов за оперативную помощь!!!
Моя ошибка была в том, что в индекс массива пытался записать число больше чем размер массива. Режим эмуляции данную ошибку игнорировал.
Было: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
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab
Хорошее замечание.
Сделал функцию так как часто использую:
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
Я не волшебник, я только учусь...