0

我正在尝试使用 Python 3.6 和 PyVisa 库(版本 1.11.1)从 SR245 Boxcar 自动收集数据。9/10 次,效果很好。但是,在两天的时间里,它曾三次导致整个计算机崩溃并重新启动(在 Windows 10 上运行)。这导致了大量数据丢失,我试图找出导致整个系统崩溃的错误。代码在下面(它是一个更大程序的一部分,但我自己也运行了这段代码,它导致了崩溃)。未显示 data_processing 文件,但其中的函数进行了简单的计算(例如,将列表中的值除以另一个列表中的值,从整数列表中返回平均值等)

import pyvisa
from pyvisa.constants import SerialTermination
import time
import numpy as np
from data_processing import *


def connect_boxcar(pNum):
    rm = pyvisa.ResourceManager()
    port = "COM"+pNum
    sr = rm.open_resource(port)
    return sr


def config_boxcar(boxcar):
    #Configure the boxcar settings
    boxcar.write_termination = '\r'
    boxcar.read_termination='\r'
    boxcar.baud_rate=19200
    boxcar.end_output = SerialTermination.termination_char


def preset_scan(boxcar):
    #Reset boxcar settings
    boxcar.write('MR')
    boxcar.write('MS;ET;T1;I2;W0')


def scan(boxcar, num):
    #Send the SCAN command to the boxcar, set to the specified number of data points
    command = 'SC1,2:' + str(num)
    boxcar.write(command)


def read_data(boxcar, num):
    #Read the stored scan data and return it as a value list
    data_list = []
    for x in range(num * 2):
        data_list.append(float(boxcar.query('N')))
    return data_list


def collect_baseline(boxcar, n):
    #Get a baseline signal for later processing
    config_boxcar(boxcar)
    preset_scan(boxcar)
    scan(boxcar, n)
    raw_data = read_data(boxcar, n)
    chan1 = raw_data[::2]
    chan2 = raw_data[1::2]
    normal_data = normalize(chan1, chan2, n)
    return average_list(normal_data)


def main():
    rm = pyvisa.ResourceManager()
    n = 10
    sleep_timer = 0.1 * n + 0.5
    sr245 = rm.open_resource('COM5')

    #Configure/preset
    config_boxcar(sr245)
    preset_scan(sr245)

    #Set a timer to measure scanning time
    t0 = time.time()
    scan(sr245, n)

    time.sleep(sleep_timer)

    raw_data = read_data(sr245, n)
    t1 = time.time()

    #Breakdown data by channel and normalize
    chan1 = raw_data[::2]
    chan2 = raw_data[1::2]
    normal_data = normalize(chan1, chan2, n)

    elapsed_time = t1 - t0
    print('Elapsed time: ', elapsed_time)
    print('Channel 1: ', chan1)
    print('Channel 2: ', chan2)
    print('Normalized Data: ', normal_data)
    print('Average Normalized Data: ', average_list(normal_data))
    print('Standard Deviation: ', np.std(normal_data))


if __name__ == '__main__':
    main()
4

0 回答 0