我两个星期前在我的大学做了一个项目。我必须从连接在COM端口上的METEX设备读取温度。我决定使用Python的pyserial。我在互联网上找到了一些例子,按照他们的说法我做了这样的事情:
import serial
ser = serial.Serial(
port='\\.\COM1',
baudrate=1200,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_TWO,
bytesize=serial.SEVENBITS,
timeout=5
)
if ser.isOpen():
ser.close()
ser.open()
ser.write('D')
s=ser.read(13)
print s
ser.close
它不起作用,但应该这样做。通常,当您发送“D' D”时,此设备会向您的计算机发送包含温度的13个字节。 char到它。虽然我试图改变代码和系统配置中的所有内容,但我无法解决这个问题。我的讲师无法帮助我,因为他没有用Python工作。他试过,因为他告诉我他用C编写的旧程序,但他只有exec文件没有代码。程序在我执行Python脚本的同一台计算机上工作,所以我确信COM端口,设备和系统正常工作。
今天,我意外地添加了代码:
import time
import serial
ser = serial.Serial(
port='\\.\COM1',
baudrate=1200,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_TWO,
bytesize=serial.SEVENBITS,
timeout=5
)
ser.setRTS(False)
time.sleep(0.5)
ser.setRTS(True)
time.sleep(0.5)
ser.setRTS(False)
if ser.isOpen():
ser.close()
ser.open()
ser.write('D')
s=ser.read(13)
print s
ser.close
现在它完美无缺。为什么??!! 我必须从这个练习中做出报告并逐行描述我的代码。求你帮帮我。
操作系统:Windows XP。
答案 0 :(得分:0)
我想你正在使用的Metex设备要求RTS为“假”'或者是脉冲式假真假。
这里有一些关于Metex 14字节协议的信息:http://sigrok.org/wiki/Multimeter_ICs#Metex_14-byte_ASCII
一种非常简单的调查方法是在PC上使用终端程序(允许您控制RTS的程序)手动与Metex仪表进行通信,并查看RTS必须达到什么级别才能获得Metex设备回应D。