使用pyserial转COM口编程

Using pyserial to COM port programming

两周前,我在我的大学里做了一个项目。我必须从连接在 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' 字符时,该设备会向您的计算机发送 13 个字节包含温度。尽管我尝试更改代码和系统配置中的所有内容,但我无法解决此问题。我的讲师也帮不了我,因为他不在 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。

我想您正在使用的 Metex 设备期望 RTS 为 'False' 或脉冲 false-true-false。

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

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