На мой взгляд - эксперимент наглядно показывает, что наблюдаемый эффект никак не связан с железом и к СПК тут вопросов нет.
Остаются две момента, которые могут влиять на происходящее:
- какие-то особенности рантайма CODESYS в плане работы с COM-портом
- пользовательский код
Я хотел бы обратить внимание, что OCL - это обертка над библиотекой CAA SerialCom, которая является асинхронной.
Таким образом, выполнение каждого ФБ MB_SerialRequest занимает как минимум 2 цикла контроллера (на практике - их может быть больше).
Если предположить, что в проекте 10 запросов Modbus (по 2 на каждый модуль с DI и по одному на каждый модуль с DO), и они вызываются в задаче с заданным интервалом вызова T#10ms - то период полного опроса шины в принципе не может быть меньше, чем 200 мс (больше - может). Поэтому если длительность нажатия на кнопку меньше, чем 200 мс - то оно может быть пропущено, и это не должно вызывать удивления.
Переписать обмен через синхронную SysCom - совершенно разумная идея в рамках проводимого эксперимента.