Не совсем понятно условие задачи. У вас три прибора никак не синхронизированы, так что появляется масса вариантов, как сделать.
Ничто не мешает слить все три опроса в один цикл (но это не разумна в плане масштабирования). Разумнее, наоборот, сделать один универсальный клонируемый вариант. Если все приборы по модбасу, то различаются они только адресами и количеством регистров.
Дальше - передача данных. Если данные терять нельзя, то очереди, если можно, то проще через глобальные переменные.
Т.е. чтобы не заморачиваться, я в простой задаче сделал бы три цикла опроса и четвёртый на запись, где все переменные будут собираться в кучу в записываются в файл.
И ещё я не понял, что за хитрые махинации с графиками. Если значение долго не меняется, то оно не появляется на графике. И через час пользователь может решить, что по этому каналу данные не идут, хотя они всего лишь не менялись всё это время. Где логика?
Как реализовать функцию паузы не копируя ее в каждый "While Loop"
так делать не надо. Совсем. В паузе у вас невозможно остановить программу. Бедный пользователь будет биться в конвульсиях, нажимая кнопку "стоп". Да и верхний цикл 5 сек - издевательство на этапе завершения работы.
Можно добавить машину состояний с тремя ражимами
- опрос
- ожидание
- пауза
Два последних будут ждать 10-100 мс,а потом проверять условие, и идти на второй круг, или переходить в другое состояние.