Python 使用pyserial进行COM端口编程

Python 使用pyserial进行COM端口编程,python,port,pyserial,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=ser

两周前我有一个关于我大学的计划。我必须从连接到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为“假”或“假”

这里有一些关于Metex 14字节协议的信息:


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

您的端口名看起来有误,在windows上您可以使用“COM1”。。。通常情况下,由于设备com端口初始化,您需要在打开端口后添加延迟。。。必须设置就绪发送标志非常奇怪,因为99.9999%的设备不关心这个。。。看起来所有的init都只是默认值(即你可以只做
serial.serial(“COM1”,1200,timeout=5)
这是SDI-12通信设备吗?SDI-12不是标准串行设备…我不知道此设备是否使用SDI-12,但这并不重要。使用rts的这几行脚本可以工作,我不知道为什么。还有其他想法吗?