Корректность использования ресурсов ПЛК согласно его технической спецификации. У меня возникли сомнения. Почему?
В документации указано что время цикла задачи к которой привязан обмен по MODBUS считается адекватным если его значение лежит в пределах 18-20 мс. А у меня так не получается.
Более того, чтобы получить информацию о том как прошел обмен по определенному каналу нужен программный обработчик, т.к. информация из переменных iChannelIndex xDone xError нигде не сохраняется. И если произошла ошибка при чтении/записи по одному из каналов, я этого никак не увижу.
Соответственно в моем понимании это нужно сделать так,:
1. Отдельная задача с циклом 4-6 мс и приоритетом 30 в которой будет обрабатываться результат обмена по каналу и результат записываться в массив
Что-то типа
Но при таком подходе я отнимаю процессорное время от другой задачи и есть риск увеличения джиттера, а мне этого не нужно. Но примеров подобной реализации нет (или я их не нашел), соответственно я задаю вопрос экспертам, чтобы понимать в правильном-ли направлении я двигаюсь. Мне кажется все корректно, но может я не вижу проблем, которые кроются в мелочах.Код:RTRIG_RolDone(CLK := ROL_DORNA.xDone); RTRIG_JawsDone(CLK := JAWS_DORNA.xDone); RTRIG_PushDone(CLK := FR_D720.xDone); IF RTRIG_RolDone.Q THEN GVL.ltD_ChLastRW[roller_drive][ROL_DORNA.iChannelIndex] := TargetVars.stRtc.ltSystemTick; END_IF IF RTRIG_JawsDone.Q THEN GVL.ltD_ChLastRW[jaw_drive][ROL_DORNA.iChannelIndex] := TargetVars.stRtc.ltSystemTick; END_IF IF RTRIG_PushDone.Q THEN GVL.ltFR_ChLastRW[FR_D720.iChannelIndex] := TargetVars.stRtc.ltSystemTick; END_IF
Также подобную реализацию можно повесить на событие (переменная xDone), но про такое в документации вообще написано "ни-ни, это плохо"
Вот:
Т.е. я нарушил все рекомендации из документа, поэтому у меня возникает когнитивный диссонанс - с одной стороны у меня все работает (пока), но эксперты (а составители документа наверное эксперты) мне этого делать не рекомендуют.Код:3. Не назначайте задачам тип Свободное выполнение или Статус. 4. Не изменяйте интервалы вызова и приоритеты задач, которые CODESYS добавляет автоматически. 5. В проекте должна присутствовать хотя бы одна задача с адекватным в рамках вашей системы управления интервалом вызова (обычно такой задачей является MainTask, которая вызывается с интервалом не менее 20 мс). 6. Не редактируйте в компонентах Modbus задачу цикла шины
Отсюда вопрос и сомнения




Ответить с цитированием
