Сообщение от
SergeyNG
Продолжу тему по поводу самопроизвольного останова ПЛК.
Появилось следующее предположение.
Для проекта используем контроллер ПЛК100 K.L (объемом памяти ввода/вывода 360 байт).
В PLC Configuration объявлен модуль Owen (Master) и к нему подцеплены 45 подэлемента Float variable Comm (Listen) и 21 подэлемент Float variable Comm (Write). Оба используемых типа включают в себя значение типа REAL и комманду на чтение/запись типа BYTE, т.е. всего 5 байт. Если вести подсчет напрямую получаем 45*5+21*5 = 330 байт области вывода этого контроллера. 330 байт < 360 байт, которыми ограничена область ввода/вывода, поэтому для проекта был выбран контроллер с ограниченной лицензией.
При детальном изучении размеров областей памяти во вкладке Target Settings замечено, что область входов занимает 16#7A (122) байта, а область выходов 16#EA (234) байта. Т.е. 330 байт, которые ложатся в области вывода, перекрывают допустимую область вывода для контроллера.
Вопросы:
1. Во время компиляции и загрузки проекта не ругается ни CoDeSys, ни контроллер на превышение допустимых размеров области вывода. Как контролировать попали мы в ограничение или нет? Только подсчитывать на листке бумаги?
2. Было замечено, что подэлементы Float variable Comm (Listen) и Float variable Comm (Write), которые внутри себя имеют типы REAL и BYTE, занимают в памяти контроллера не 5 байт, а 8 байт. А для области ввода/вывода эти подэлементы занимают 5 байт или 8 байт? Если 8, то тут даже прямой расчет на бумаге не поможет.
3. Самый главный вопрос. В своей программе мы перекрыли область памяти за ограниченные контроллером байты вывода и программа работает. Каких результатов ожидать? Может ли это быть причиной самопроизвольных остановов выполнения программы контроллера?