Код:
from pyModbusTCP.client import ModbusClient
from datetime import datetime
import pandas as pd
import time

def save_last_data(stroke):
    stroke.to_csv('save_last_data.csv',mode='a',index=False,header=False)

def read_data():
    client = ModbusClient(host='127.0.0.1', port=502, auto_open=True)
    col_name = ['time','result','duration']
    df = pd.DataFrame(columns=col_name)
    while True:
        time.sleep(1) # запрос каждую секунду
        try:
            start_time = time.time()
            result = client.read_input_registers(0,1)
            duration = time.time() - start_time # расчитать время в секундах затраченное на запрос/ответ
            df.loc[len(df)] = [datetime.now(),result[0],duration]   # текущее время, значение регистра, потраченное время
            save_last_data(df.tail(1))  # запись в конец файла
            if len(df) > 10:            # если записей в таблице больше десяти удаляем старую
                df = df.iloc[1:]    
                if result[0] == 1:      # если регистр принимает определенное значение заканчиваем работу
                    print(df)
                    break
        except Exception as e:
            print(f'Что топошло не так: {str(e)}')
            break
    client.close()

if __name__ == "__main__":
    read_data()
должно быть достаточно