Отдельная задача для опроса COM порта от весового модуля CAS CI-1560. Нужно ли?
Здравствуйте. Осваиваю CodeSys (3.5 SP5.5). Имею СПК207 и весовой модуль CAS CI-1560.
За день разобрался, как их подружить, научился парсить то, что рассказывает мне весовой модуль.
Далее эта связка будет использоваться в узле смешивания компонентов - будет работа с модулями дискретного ввода-вывода, отображение на дисплее всякого.
Возникли вопросы, на которые я уже часа 4 честно ищу ответы. Посмотрел несколько вебинаров, поискал по форуму по словам "задача"...
Есть много примеров реализации общения по нестандартным протоколам. Есть целый мануал про это. Но там вся реализация пишется в PLC_PRG.
У меня же есть смутное подозрение, что общение с COM портом лучше вынести в отдельную задачу - и для отладки, и вообще для порядка в коде.
Не могу найти какое-то внятное описание лучших практик по этому поводу. В CDSv3.5_FirstStart_v3.0 настоятельно НЕ рекомендуют новичкам связываться с задачами: "Это связано с тем, что принцип обработки в CODESYS достаточно сложен (используется механизм вытесняющей многозадачности) и мало документирован".
С другой стороны - для общения по Модбасу, вроде бы, задачи чуть ли не автоматически создаются. Значит, это всё же имеет большой смысл...
Отсюда вопросы:
1) стоит ли вообще связываться с задачами для общения с COM портом? (постоянное циклическое считывание веса по 232).
2) У меня уже есть рабочий функциональный блок общения с портом с двумя вложенными методами. Попробовал сделать из него задачу - но к задаче можно привязать только программу. А у программы нет понятия "метод"... Есть "действие", но в руководстве сказано, что это рудимент, да и действию не передать параметры. В CodesysTaskManagment.pdf описано, как можно к задаче прикрутить именно ФБ. Но опять же вопрос - если для этого нужно костыльно прописывать (имя ФБ) что-то руками - может, это не лучший способ, и сокрытие функционала привязки к задаче именно ФБ чем-то оправдано?
Как лучше поступить в данном случае?
2.а) создать COM_PRG, в нём просто создать экземпляр уже готового ФБ, вызвать его и успокоиться на этом?
2.б) создать COM_PRG и переписать весь функционал в него, а вместо методов всё же использовать "действия", как-то накостылив обработку нужных мне данных без передачи параметров?
2.в) по примеру из Приложение Г CodesysTaskManagment.pdf всё же прикрутить к задаче экземпляр ФБ? Но нужно ли для его объявления создавать отдельный от PLC_PRG файл, или в этом нет большого смысла, и можно объявить экземпляр в PLC_PRG?
3) Если я всё же свяжусь с отдельной задачей - есть ли какие-то методики подбора оптимального периода её вызова исходя из скорости работы протокола 232 и длины передаваемого пакета байт?
Я некоторое время программировал (для себя) Arduino и STM32, и после них осталось понимание, что не нужно лишний раз запускать процесс, если это приведёт лишь к бесполезной перезаписи ячеек памяти.
Например, сейчас у меня настроена скорость передачи 19200 (максимальная для весового модуля). Количество передаваемых им байт: 22 штуки в пакете. Есть ли смысл заморочиться и подогнать периодичность вызова задачи прослушивания порта так, чтоб не было холостых вызовов? Или как у всех - просто выставить примерно 20 милисекунд, и не морочить голову?)
Спасибо заранее за ответы и советы :)