AstraRegul
Руководство системного интегратора
×

6.17. ПРОГРАММА POU_test

Для работы программы POU_test в «Менеджер библиотек» проекта необходимо добавить библиотеку PsLog.
В таблице локальных переменных описан массив var_array из 5-ти переменных типа REAL и следом под ним указатель pVar.
Записав TRUE в переменную start будет происходить однократное выполнение алгоритма программы POU_test. Первоначально в указатель pVar будет записан адрес переменной Var_Real.
Далее при выполнении цикла FOR будет происходить обнуление такого количества переменных массива var_array, которое соответствует значению переменной maxindex. Так как переменная maxindex инициирована значением 5, то при выполнении цикла FOR будет происходить выход за диапазон массива var_array и 0 также запишется в указатель pVar. Указатель не может иметь нулевое значение! При попытке разыменовать указатель командой pVar^:=558 возникает ошибка. Наличие в составе приложения Application неявной функции CheckBounds предотвращает переход контроллера в исключение по этой ошибке и остановку выполнения приложения пользователя.
Пользователь может изменить код функции CheckBounds и, например, ограничить выход за пределы массива var_array при maxindex<0 или maxindex>4.
 
Так же будет создан журнал «mylog_2», в который будут записаны сообщения step_1, step_2, step_3 и step_4 при выполнении отдельных частей программы.
 
Когда оператор в __TRY вызывает исключение (в программе POU_test – это деление на ноль), приложение не останавливается. Вместо этого приложение выполняет операторы в __CATCH, запускает обработку исключений и затем выполняет операторы в __FINALLY. Обработка исключения заканчивается на __ENDTRY, а приложение выполняет последующие операторы.
 
Нет деления на ноль (соответствующий код в переменной strExceptionText):
 
Деление на ноль (соответствующий код в переменной strExceptionText) :