【发布时间】:2016-06-19 18:57:52
【问题描述】:
我无法让我的 Windows 7 笔记本电脑与 Newport CONEX-PP motion controller 通话。我已经尝试过 python (Spyder/Anaconda) 和一个名为 Termite 的串行端口流媒体程序,无论哪种情况,结果都是相同的:设备没有响应。最终目标是使用 python 与控制器进行通信。
控制器通过他们卖给我的明确用于此设备的 USB 电缆连接到我的计算机。连接器有一对指示灯,当设备接收数据(红色)或发送数据(绿色)时会闪烁。该设备还附带一个打包的 GUI 程序,似乎可以正常工作。每个按钮我都没有试过,我试过的都有预期的结果。
访问此设备的文档几乎不存在。盒子里的 CD 有一种连接方式,上面链接的网页有另一种连接方式。第一种方式(盒子里的 CD)创建一个模块的层次结构,该层次结构以它无法识别的模块结尾(这是 Newport 提供的代码 sn-p):
import sys
sys.path.append(r'C:\Newport\MotionControl\CONEX-PP\Bin')
import clr
clr.AddReference("Newport.CONEXPP.CommandInterface")
from CommandInterfaceConexPP import *
import System
instrument="COM5"
print 'Instrument Key=>', instrument
myPP = ConexPP()
ret = myPP.OpenInstrument(instrument)
print 'OpenInstrument => ', ret
result, response, errString = myPP.SR_Get(1)
最后一行返回:
Traceback(最近一次调用最后一次):
文件“”,第 2 行,在 结果,响应,errString = myPP.SR_Get(1)
TypeError: 没有方法匹配给定的参数
我猜这是因为各种模块引用在某些方面很混乱。但我不知道,我对 python 比较陌生,我唯一一次将它用于串行通信,供应商提供的示例文件很简单。
与控制器通信的第二种方式是通过visa模块(CONEX_SMC_common模块导入visa模块):
import sys
sys.path.append(r'C:\Newport\NewportPython')
class CONEX(CONEXSMC): def __init__(self):
super(CONEX,self).__init__() device_key = 'com5'
self.connect=self.rm.open_resource(device_key, baud_rate=57600, timeout=2000, data_bits=8, write_termination='\r\n',read_termination='\r\n')
mine.connect.read()
最后一个 mine.connect.read() 命令返回:
VisaIOError: VI_ERROR_TMO (-1073807339): 操作完成前超时。
如果相反,我向端口mine.connect.write('VE') 写入数据,则连接器上的指示灯呈红色闪烁,就好像它收到了一些数据并返回:
(4L, )
如果我要“我的”对象mine.__dict__ 的字典,我会得到:
{'connect': , 'device_key': u'ASRL5::INSTR', 'list_of_devices': (u'ASRL5::INSTR',), 'rm':)>}
VISA 的 ASRL5::INSTR 资源至少与控制器有关,因为当我从笔记本电脑上拔下设备时,它消失了,GUI 程序将停止工作。
也许我在这里缺少一些简单的东西。我已经安装了 NI VISA,而且我不只是使用来自网站的 DLL 运行。哦,我找到了一个 Github 问题/答案with this exact problem 但最终结果没有意义,在 hgrecco 告诉他使用“open_resource”后线程被关闭,这正是我正在使用的。
使用 Termite 的结果是相同的,我显然可以连接到控制器并让灯闪烁红光,但它从不响应,无论是通过 Termite 还是通过执行请求的操作。
我也试过pySerial:
import serial
ser = serial.Serial('com5')
ser.write('VE\r\n')
ser.read()
Python 只是一直在那里等待,我猜是因为我没有设置超时限制。
所以,如果有人对这个特定的运动控制器、Newport 设备或一般的串行端口通信有任何经验,并且可以阐明这个问题,我将不胜感激。大约 7 小时后,我没有想法了。
【问题讨论】:
标签: python python-2.7 serial-port