Can';t在Python脚本中从C函数中重新设置值,但可以在控制台中重新设置

Can';t在Python脚本中从C函数中重新设置值,但可以在控制台中重新设置,python,ctypes,Python,Ctypes,我使用python(Pydev)与步进电机进行通信,并使用ctypes的DLL。我正试图找到马达的位置。问题是,如果我在控制台中逐行输入脚本,它会工作,但如果我运行脚本,它总是给我0。 这是我的代码: import ctypes AC=windll.hvpositionerv2 adr=addressof class PositionerInfo (Structure): _fields_=[("id",c_int),("locked",c_bool)] ptr=POINTER(Po

我使用python(Pydev)与步进电机进行通信,并使用ctypes的DLL。我正试图找到马达的位置。问题是,如果我在控制台中逐行输入脚本,它会工作,但如果我运行脚本,它总是给我0。 这是我的代码:

import ctypes

AC=windll.hvpositionerv2
adr=addressof
class PositionerInfo (Structure):
    _fields_=[("id",c_int),("locked",c_bool)]

ptr=POINTER(PositionerInfo)()
devCount=AC.PositionerCheck(adr(ptr))
print("Devices found: "+repr(devCount))
for i in range(min(adr(ptr),devCount)):
     print("ID: "+repr(ptr[i].id)+" Locked? "+repr(ptr[i].locked))

handle=POINTER(c_int)()
AC.PositionerConnect(0,adr(handle))
到目前为止,该程序仅连接到设备。现在,问题是:

ypos=c_int()
AC.PositionerGetPosition(handle,1,adr(ypos)

print(ypos.value)

如果我运行脚本(在Eclipse中)但在控制台中工作,则总是打印0。

我的最佳猜测:这是一个计时问题。连接到硬件后,需要一定的时间才能报告电机位置,在第一次响应之前,您将始终得到0。尝试在AC.PositionerGetPosition之前添加1秒睡眠。

您是否尝试在eclipse之外运行此功能?可能是在eclipse中运行时找不到所需的DLL,而代码仍在运行并打印0?否则可能是时间问题。可能是名称空间冲突,dll与pythons路径上首先列出的python模块同名?C函数原型是什么?此外,要通过引用传递,可以使用函数参数中的
handle=c_int()
,然后使用
byref(handle)
。range()是怎么回事?为什么要采用adr(ptr)的最小值和devCount?