Если я всё правильно понял...
Оптимизация самой программы мало влияет на пропуски, поскольку информация программе приходит с одного из модулей, который опрашивается дискретно. Видимо, в момент, когда проходит сигнал на счетчик, опроса иногда не бывает. Я вижу 2 варианта.
Идеальный, поставить счетчик импульсов, с которого считывать по сети число прошедших импульсов. Аппаратно ничего не пропустите, а программно получите последнее актуальное число.
Не идеальный, посадить блок расширения, который передает сигнал контроллеру на отдельную линию модбас и максимально быстро опрашивать его. Но, в зависимости от скорости, пропуски теоретически всё равно могут быть.