我有一个来自USB测量仪器的SDK,带有一个用Visual Basic编写的示例程序,但我想使用Python来控制仪器
我使用msl.loadlib中的LoadLibrary加载Python中的.net DLL
仪器响应良好,并按我的要求执行,但我在最后一行得到一个System.NullReferenceException
,我不明白。有人有主意吗?可能是来自.NET的bug吗
代码:
from msl.loadlib import LoadLibrary
from time import sleep
import ctypes
class sekonic():
def __init__(self, name):
NET = LoadLibrary(r'C:\Users\Adrien Lucca\Desktop\WORKSPACE\mechelen\C7000_SDK_old.dll', 'net')
self.name = name
self.lib = NET.lib.C7000.SDK(ctypes.c_ulong)
#the machine and its functions
device = sekonic("sek")
#connect to the machine
SDKResult = device.lib.SK_Connect()
while (device.lib.SKF_STATUS_COM.SUCCESS != SDKResult):
print("connection failed")
print('try turning the C7000 ON')
SDKResult = device.lib.SK_Connect()
print("connection established")
#initialize variables
MeasResult = device.lib.SKS_MEAS_RESULT()
Config = device.lib.SKS_MEAS_CONFIG()
DeviceInfo = device.lib.SKS_DEVICE_INFO()
#get info
SDKResult = device.lib.SK_GetDeviceInfo(DeviceInfo)
if (SDKResult[1].Status == 0):
print ("IDLE")
if (SDKResult[1].Remote == 0):
print ("REMOTE OFF")
#set remote
SDKResult = device.lib.SK_SetRemoteMode(1)
while (device.lib.SKF_STATUS_COM.SUCCESS != SDKResult):
print("set remote mode failed ")
SDKResult = device.lib.SK_SetRemoteMode(1)
#get info
SDKResult = device.lib.SK_GetDeviceInfo(DeviceInfo)
if (SDKResult[1].Status == 0):
print ("IDLE")
if (SDKResult[1].Remote == 1):
print ("REMOTE ON")
#configuration
Params = device.lib.SK_GetMeasConfig(Config)
if (Params[1].MeasuringMode) != 0:
Params[1].MeasuringMode= 0
if (Params[1].MeasuringMode) == 0:
print("Measuring Mode: AMBIENT")
if (Params[1].FieldOfView) != 1:
Params[1].FieldOfView = 1
if (Params[1].FieldOfView) == 1:
print("10deg Observer")
if (Params[1].ExposureTime) != 0:
Params[1].ExposureTime = 0
if (Params[1].ExposureTime) == 0:
print("AUTO exposure")
if (Params[1].MeasuringMethod) !=0:
Params[1].MeasuringMethod = 0
if (Params[1].MeasuringMethod) ==0:
print("SINGLE measurement mode")
#write new parameters
device.lib.SK_SetMeasConfig(Params[1])
#
# Start measurement
#
Measurement = device.lib.SK_StartMeasuring()
i = 0
SDKResult = device.lib.SK_GetDeviceInfo(DeviceInfo)
if (SDKResult[1].Status==3):
print("MEASURING")
while SDKResult[1].Status == 3:
sleep(.1)
SDKResult = device.lib.SK_GetDeviceInfo(DeviceInfo)
if(i>=10000):
print("error waiting 100s")
break
i += 1
if (SDKResult[1].Status == 0):
print ("IDLE")
#get the measurement results
#HERE IT CRASHES
#System.NullReferenceException: La reference d'objet n'est pas definie a une instance d'un objet.
SDKResult = device.lib.SK_GetMeasuringResult(MeasResult)
返回:
connection established
IDLE
IDLE
REMOTE ON
Measuring Mode: AMBIENT
10deg Observer
AUTO exposure
SINGLE measurement mode
MEASURING
IDLE
Traceback (most recent call last):
File "C:\Users\Adrien Lucca\Desktop\WORKSPACE\mechelen\SekoniC7000.py", line 125, in <module>
SDKResult = device.lib.SK_GetMeasuringResult(MeasResult)
System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
à C7000.SDK.SK_GetMeasuringResult(SKS_MEAS_RESULT& MeasResult)
目前没有回答
相关问题 更多 >
编程相关推荐