Здравствуйте const3,
Есть олимпиады/соревнования по программированию и в задании где необходимо было обработать ошибочные данные и тд. У победителя соревнований не было ни одного «try-catch-finally» и тд. все проверялось на предварительном этапе:
1. Если корень квадратный из числа – с начало сравнивалось «число < нуля».
2. Если надо было что-то перемножить сложить - проверялось «действительно ли число».
и тд.
Мораль сей басни такова: перепроверяйте все данные + исправность оборудования!!!
Например:
1. включили пускатель и через какое-то время должен замкнутся дополнительный контакт заведенный на ПЛК1хх, если не успел замкнутся неисправность! Выключение аналогично и тд.
2. при преобразовании из DWORD (0-4294967295, 32 Bit) в WORD (0-65535, 16 Bit)
Проверьте что бы Вам остались не только младшие биты, если DWORD>65535. Аналогично для REAL->WORD и тд.
3. При включении программы или подачи питания на ПЛКххх подождите некоторое время прежде чем принимать решения, что давление/температура низкое и тд. Может просто данные не успели оцифровать или считать по RS485.
4. Проверяйте данные на целостность если коэффициент пропорциональности для ПИД-регулятора = 0 значит что-то здесь не так. В этом случае заменить его своим значением подобранным после пусконаладки и дт.
5. Если температура проветривания теплицы ниже задания значит надо либо задание температуры теплицы сделать ниже либо порог проветривания выше.
6. Если неисправен датчик температуры наружного воздуха значит в автоматическом режиме прекратить управляющее воздействие на исполнительный механизм контура регулирования температуры подачи отопления. и тд.
P. S. Функций обработки исключений в CoDeSys я тоже не встречал, но программы с таким подходом работают и ведут себя адекватно даже при неисправности датчиков и не верных уставок и тд :-)