0

我正在使用 minimummodbus 通过 Modbus RS-485 进行通信。该代码每 6 秒读取 4 个寄存器。然后,每分钟将每个变量的平均值保存在 csv 文件中。目标是每分钟都有时间序列数据,但有时我会丢失 1 分钟的数据,因为在循环的每一步中读数之间的睡眠时间并不相同。

我试图通过休息完成过程所需的时间来调整时间,但很难调整它。

任何想法如何改进它或任何关于不同方式的建议以准确地每分钟保存数据?

def collect_data():
    try:
        register_3204 = instr.read_registers(3203,4,3)
        register_3208 = instr.read_registers(3207,4,3) 
        register_3220 = instr.read_registers(3219,4,3)
        register_3224 = instr.read_registers(3223,4,3)
        EaImport = convert_64bit(register_3204)
        EaExport = convert_64bit(register_3208)
        ErImport = convert_64bit(register_3220)
        ErExport = convert_64bit(register_3224)
        data=[EaImport,EaExport,ErImport,ErExport]
    except IOError:
        print("Failed to read from instrument")
    return (data)


startt = time.time()

with open('/iEM_test/iEM3155.csv', 'a', buffering=0) as file:
    while True:
        average = np.hstack([0])
        for i in range(10):
            data=(collect_data())
            data1=np.hstack([data[0], data[1], data[2], data[3]])
            average = average + data1
            stopt= time.time()
            sleeptime = 6-(stopt-startt) - 0.000925925926
            time.sleep(sleeptime)
            startt = time.time()
        average1=average/10
        dt= datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')
        data=[dt,str(average1[0]),str(average1[1]),str(average1[2]),str(average1[3])]
        data_str=",".join(data)
        file.write(data_str + '\n')

以下是我使用实际代码获得的数据

5/5/2019 18:08:59   37.8401 4.407   13.0227 43.797
5/5/2019 18:09:59   37.8532 4.4073  13.0277 43.797
5/5/2019 18:10:59   37.856  4.408   13.029  43.797
5/5/2019 18:12:00   37.8599 4.408   13.0292 43.7976
5/5/2019 18:13:00   37.8824 4.408   13.03   43.798
5/5/2019 18:14:00   37.9075 4.408   13.03   43.79877

18:11 有一个小跳跃。

4

0 回答 0