python - OSError:异常:访问冲突读取 0x00007FFB1F945B50(随机发生)
问题描述
我正在使用 python、ctypes 在测量设置中与 National Instrument DAQ 对话。我有时(有时是)收到错误:OSError:异常:访问冲突读取 0x00007FFB1F945B50(每次发生错误时,代码 0x00007FFB1F945B50 都是不同的)。我的操作系统是 Windows 10,Python 是 3.4。“有时”是指大多数情况下我们的测量工作正常,但使用相同的设置,每 40 次出现上述错误。在第一步中,我对如何重现此错误以及了解其起源的性质很感兴趣。哪些情况会导致有时仅使用相同的设置才会出现此错误。
Python Traceback 的相关部分是:
File "modulum.py", line 5422, in updateLaserIntensity
outthread = daqio.Output("Dev1/ao0", np.ones(10)*intensity_in_volts, 1e3, -10.0, 10.0) # setting channel ao1 of DAQ to given value
File "D:\development\codebase\daqio.py", line 209, in __init__
None))
OSError: exception: access violation reading 0x00007FFB1F945B50
daqio.Output 类的代码是
class Output( threading.Thread ):
def __init__( self, target, waveform, sampleRate, Uoutmin, Uoutmax):
self.running = True
self.sampleRate = sampleRate
self.periodLength = len( waveform )
# target = 'Dev1/ao0' # obsolete, used as argument of init now
target = target.encode('ascii')
self.OUT = TaskHandle( 0 )
self.data = np.zeros( ( self.periodLength, ), dtype=np.float64 )
# convert waveform to a np array
for i in range( self.periodLength ):
self.data[ i ] = waveform[ i ]
# setup the DAQ hardware
try:
CHK(nidaq.DAQmxCreateTask("",
ctypes.byref( self.OUT )))
# global threadedTask
# threadedTask = self.OUT
# print('Output task is:', threadedTask)
print('')
except:
pass
print('Output Task creation failed, current task pointer is:', runningTask)
CHK(nidaq.DAQmxCreateAOVoltageChan( self.OUT,
target,
"",
float64(Uoutmin),
float64(Uoutmax),
DAQmx_Val_Volts,
None))
CHK(nidaq.DAQmxCfgSampClkTiming( self.OUT,
"",
float64(self.sampleRate),
DAQmx_Val_Rising,
DAQmx_Val_ContSamps,
uInt64(self.periodLength)))
CHK(nidaq.DAQmxWriteAnalogF64( self.OUT,
int32(self.periodLength),
0,
float64(-1),
DAQmx_Val_GroupByChannel,
self.data.ctypes.data,
None,
None))
threading.Thread.__init__( self )
self.runningThread = True
def run( self ):
# try:
# if self.runningThread == True:
CHK(nidaq.DAQmxStartTask( self.OUT ))
def stop( self ):
CHK(nidaq.DAQmxStopTask( self.OUT ))
CHK(nidaq.DAQmxClearTask( self.OUT ))
global threadedTask
threadedTask = TaskHandle( 0 )
nidaq 是 DAQ 的 DLL。
nidaq = ctypes.windll.LoadLibrary('nicaiu.dll')
由于这是一个很难解决的错误,因为它是统计上发生的,所以我非常想在这个问题上提供一些帮助。
解决方案
推荐阅读
- python - 如何摆脱字典元素中的空格?
- javascript -
周围的元素
- reactjs - React + TS:如何获得所有孩子的身高?
- delphi - 如何在我的 Delphi 应用程序中集成 VLC 媒体播放器
- sharepoint - 样式库存在权限问题 SharePoint Online
- python-iris - 如何在 Iris 中提取一些 NEMO 海洋模型输出的区域?
- oop - OOP UML 类图,一个人有多个角色。它的结构应该是怎样的?
- c# - 在 mac 上添加未在 vs 2019 中显示的参考
- android - 在Android手机上,应用程序可以选择使用的APN吗?
- datepicker - Form中的SwiftUI DatePicker随机显示不同的文本