【问题标题】:Device will not recognize commands or respond when communicating using PySerial使用 PySerial 进行通信时,设备将无法识别命令或响应
【发布时间】:2016-05-21 16:42:08
【问题描述】:

我正在尝试使用 PySerial 模块与 Omega CNi16D 温度控制器通信。使用厂商提供的基本通讯软件,我可以将一些设置写入控制器,确保我正确地进行了硬件配置和设置。但是,当我尝试在 Python 3.4 中使用 PySerial 执行此操作时遇到问题。我怀疑我没有以适当的形式发送字节码。这是我尝试过的:

import serial
ser = serial.Serial('COM3', 9600, bytesize = 7, stopbits=1, timeout=0.1,\
       parity=serial.PARITY_ODD) #these are the settings on my controller
print(ser.isOpen())
ser.write(b'*01W01A003E8')

我从isOpen() 获得了 True 返回,但该命令没有任何反应。 *01W01A003E8 是手册中给出的示例命令之一,其中* 是识别字符,01 是我在控制器端设置的从地址(我使用的是 RS485),W01A003E8 是hex-ASCII 命令将设定点设置为 -100。

以下是我尝试过的其他一些事情,但没有成功: 尝试在ser.write() 之前给一些睡眠时间;尝试了应该从控制器返回读取值的不同命令,但我总是得到一个空字节对象(ser.read() 在任何命令返回 b'' 之后。);尝试切换到 RS232 模式,该模式不需要命令中的从地址;试过ser.write('*01W01A003E8'.encode('ascii'))'utf-8'

我感觉我向控制器发送了错误的字节对象。在手册中(http://www.omega.com/Manuals/manualpdf/M3397.pdf part.5),听起来我可以发送指定格式的 ASCII 码来完成这项工作。

【问题讨论】:

  • 我很困惑,ascii 不需要字节数组。你的行结束分隔符在哪里?(例如:回车意味着\r\n)如果在ascii/no modbus 模式下使用设备,请不要使用字节模式。
  • 我认为 PySerial 的 write() 方法需要一个字节对象作为输入。 PySerial 中还有其他模式/方法吗?

标签: python serial-port pyserial rs485


【解决方案1】:

在考虑了“dsgdfg”的评论后,我发现了问题所在。这是一件非常简单的事情。我错过了两件事。

首先,我应该在命令上附加回车符。我以某种方式假设这将在write() 方法中实现,但我错了。

其次,事实证明,为了从控制器获得响应,我需要大约 0.1 秒的时间让设备消化并响应。换句话说,time.sleep(0.1)read() 命令之前是必需的。

感谢您的有用评论!由于我怀疑是错误的事情,我认为我应该更改帖子的标题。

【讨论】:

    猜你喜欢
    • 2021-09-07
    • 2020-06-08
    • 1970-01-01
    • 2017-05-13
    • 2017-02-02
    • 2014-06-25
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多