【发布时间】:2015-02-19 14:20:31
【问题描述】:
我有一个Digi Transport WR41 蜂窝路由器,它运行一个它自己的专有操作系统和一个 Python 2.6 解释器。路由器有一个串行端口 (RJ45),我已将它连接到 Windows 7 PC 上的串行端口 (DB9)。电缆布线是直通配置。
在PC上,我已经安装了RealTerm Serial Capture program并连接到COM1。
我希望能够使用python(和pyserial)通过串行连接读取/写入数据。
我的python脚本非常基础:
import serial
ser = serial.Serial(port=0, baudrate=9600, parity=serial.PARITY_EVEN, timeout=1)
ser.write(‘hello world’)
#ser.read(1000)
当我从RealTerm 发送数据时,我可以通过ser.read(1000) 在python 中很好地读取它。这整天有效。
但是,当我尝试通过 ser.write('hello world') 从 python 发送数据时,我无法在 RealTerm 中看到它。
认为这可能是 RealTerm 问题,我在 PC 上尝试了其他模拟器/捕获程序:TeraTerm 和 Serial Port Monitor 6(由 Eltima 提供),但我从未看到数据显示。
Serial Port Monitor 6 是唯一显示某种活动的程序,但我仍然没有看到我的数据。我对串行通信知之甚少,无法理解输出,但摘录如下:
[19/02/2015 07:58:21]
435 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM1)
STATUS_SUCCESS
IOCTL_SERIAL_WAIT_ON_MASK - Request is used to wait for the occurrence of any wait event specified by using an IOCTL_SERIAL_SET_WAIT_MASK request
Mask - 0x00000010 (EV_DSR)
----------------------------------------------------------------------------------
[19/02/2015 07:58:21]
437 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM1)
STATUS_SUCCESS
IOCTL_SERIAL_GET_WAIT_MASK - Request returns the event wait mask that is currently set on a COM port
Mask - 0x00000119 (EV_CTS | EV_DSR | EV_RING | EV_RXCHAR)
----------------------------------------------------------------------------------
[19/02/2015 07:58:21]
439 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM1)
STATUS_SUCCESS
IOCTL_SERIAL_GET_MODEMSTATUS - Request updates the modem status, and returns the value of the modem status register before the update
Modem Status - 0x00000080 (MS_RLSD_ON)
----------------------------------------------------------------------------------
路由器有一个Bytes Sent 的计数器。每次我调用 ser.write('hello world') 时,我都会看到它增加了正确的字节数。
我在 SO 上查看了两个类似的问题:
- pySerial sends ASCII data but recieving device does not respond to it
- PySerial can read but not write
我已验证设备、RealTerm 和 python 代码的波特率、奇偶校验、停止位、控制流等设置一致。
任何其他想法为什么与 pyserial 的串行通信只能以一种方式工作?为什么允许读取但不允许写入?
【问题讨论】: