使用pyserial进行COM端口编程

时间:2015-10-26 16:58:37

标签: python port pyserial

我两个星期前在我的大学做了一个项目。我必须从连接在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。

1 个答案:

答案 0 :(得分:0)

我想你正在使用的Metex设备要求RTS为“假”'或者是脉冲式假真假。

这里有一些关于Metex 14字节协议的信息:http://sigrok.org/wiki/Multimeter_ICs#Metex_14-byte_ASCII

一种非常简单的调查方法是在PC上使用终端程序(允许您控制RTS的程序)手动与Metex仪表进行通信,并查看RTS必须达到什么级别才能获得Metex设备回应D。