【问题标题】:i am sending commands through serial port in python but they are sent multiple times instead of one我通过python中的串口发送命令,但它们被发送多次而不是一次
【发布时间】:2023-04-01 05:50:02
【问题描述】:

我正在使用 com 端口串行发送一些具有特定响应的命令..这些命令保存在一个文件中..我通过文件逐行读取每个命令并通过 com 端口串行发送..但是当我我使用魔术终端(软件)从接收器端看到它..我发现每个命令都会执行多次..我只发送一次..我在 pycharm 中编写了一个代码..在控制台中我是看到该命令只执行一次,但从 uart 接收端来看,故事是另一回事..我被这个问题困住了..我保持相同的波特率和一切,但无法诊断问题.. 代码的github链接是:https://github.com/AkshatPant06/Akshat-Pant/blob/master/cmd%20list

def recvResponse():
ser.write(serial.to_bytes(intCmd))
time.sleep(1)
data_recv=ser.read(2)
return data_recv

这是我用来接收 2 字节响应的..

【问题讨论】:

    标签: python python-3.x serial-port


    【解决方案1】:

    您的代码似乎没有任何问题。至少在我可以重现的范围内,它只发送一次命令(我在环回设置串行端口后尝试了你的功能)。

    我不能肯定地说,但可能是您使用的终端有两个窗口,一个用于输入,另一个用于输出,不知何故您对端口进出的内容感到困惑。

    处理此类问题的一种简单方法是在您的端口上使用嗅探器。您可以在 Windows 上将 com0com 和 Termite 结合使用,正如我最近解释的 here

    如您所见,此终端上只有一个窗口,设置转发后,您将看到进出端口的所有内容。这样可以更轻松地查看您的代码正在编写和读取的内容。

    为了给您一个应用嗅探器技巧的常规场景,您可以参考以下屏幕截图:

    在这种情况下,我们在计算机上有两个真正的串行端口。在第一个 (COM9) 上,我们正在运行一个 Modbus 服务器(您可以将其想象为一堆内存地址,每个地址都存储一个 16 位数字)。在COM10 上,我们有一个客户端正在发送查询,询问前 10 个地址的内容(使用 Modbus 术语称为寄存器)。在一般用例中,我们将这些端口与电缆相连,因此我们知道(理论上)COM10 上的客户端正在发送一个数据帧,要求这十个寄存器,而COM9 上的服务器正在回答这些数字存储在这些寄存器上。但是我们只能看到服务器上的内容(图片左侧)和客户端正在接收的内容(右侧)。我们看不到总线上正在运行的是什么(是的,我们知道它是什么,但我们不知道 Modbus 协议在内部是什么样子的)。

    如果我们想点击总线以查看每一侧发送和接收的内容,我们可以使用 com0com 创建几个虚拟端口,并使用 Termite 创建一个端口转发连接,类似于以下屏幕截图:

    现在我们已将 Modbus 服务器移至虚拟串行端口之一(在本例中为COM4)。安装 com0com 后,我们得到(默认情况下,但您可以更改名称或添加更多端口对,当然)一对转发端口(@98​​7654332@)。现在,如果我们想查看通过端口循环的内容,我们打开 Termite(图片右下方)并设置另一个端口转发方案,在本例中是从虚拟端口 COM5 到真实端口 COM9

    最后(与我们嗅探之前完全相同),我们将COM9COM10 用电缆连接在一起。但是现在我们可以看到总线上来回的所有数据(您在 Termite 上看到的所有 HEX 值都以绿色/蓝色字体显示)。

    如您所见,这将提供类似于您可以使用 more professional tools 执行的操作。

    【讨论】:

    • 你真是帮了大忙
    • 我很高兴以上内容对您有所帮助。在处理串口时,我总是觉得它非常方便。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多