我正试图通过PyQT4控制Thorlabs APT ActiveX电机。这是我初始化类的最简单版本,受到here和here代码的启发。
import sys
import comtypes.gen.MG17MotorLib as APTMotorLib
from PyQt4 import QtGui
from PyQt4 import QAxContainer
channel1 = APTMotorLib.CHAN1_ID
class APTMotor(QAxContainer.QAxWidget):
def __init__(self, parent):
self.parent = parent
super(APTMotor, self).__init__()
self.setControl('MGMOTOR.MGMotorCtrl.1')
#motor specific initialization
self.SetHWSerialNum(my_serial_number)
self.StartCtrl()
self.EnableHWChannel(chanel1)
app = QtGui.QApplication(sys.argv)
motor = APTMotor(app)
我的motor
对象在很多方面都有效。例如,以下所有内容都会返回我期望的值。
motor.GetStageAxisInfo_MinPos(channel1)
motor.GetStageAxisInfo_MaxPos(channel1)
motor.GetPosition_Position(channel1)
motor.GetStatusBits_Bits(channel1)
但是,将参数传递给我的motor
对象的方法并不能正常工作。例如,考虑方法MoveAbsoluteEx(int lChanID, double fAbsPosCh1, double fAbsPosCh2, bool bWait);
。
我可以毫无错误地调用motor.MoveAbsoluteEx(channel1, destination, 0., True)
(我的电机没有通道2)。实际上电机确实在移动。问题是,无论destination
的值如何,我的电机总是移动到零毫米。
我从APT事件日志中知道实际发送的命令 为零。相关输出为CMGMotorCtrl::MoveAbsoluteEx(0,0.0000,0.0000,1)
。整数是正确的(当我更改python变量时更改),但浮点数总是传递为零。