使用pyserial:打印结果

Layoverbox上的信息

我对以下代码有以下担忧:

  1. 我如何打印出收到的结果,例如,如果我键入status1,它应该返回close1 / open1?我正在使用的USB控制器已连接了锁,它们具有一组可以通过ASCII进行通信的命令,就像我发送命令status1一样,它应该回传open1 / close1。

  2. 在条件行中,if (ser.isOpen() == False):它不会完全检查端口是否打开,因为即使没有任何连接,它也会绕过该行并尝试发送明显返回错误的命令

以下是代码(我使用的是python 3,但其中一些代码基于python 2):

import serial

#Using  pyserial Library to establish connection
#Global Variables
ser = 0

#Initialize Serial Port
def serial_connection():
    COMPORT = 3
    global ser
    ser = serial.Serial()
    ser.baudrate = 38400 #Suggested rate in Southco documentation, both locks and program must be at same rate
    ser.port = COMPORT - 1 #counter for port name starts at 0




    #check to see if port is open or closed
    if (ser.isOpen() == False):
        print ('The Port %d is Open '%COMPORT + ser.portstr)
          #timeout in seconds
        ser.timeout = 10
        ser.open()

    else:
        print ('The Port %d is closed ' %COMPORT)


#call the serial_connection() function
serial_connection()
ser.write(b'close2\r\n')

在此先感谢您和任何澄清,请多多指教。

巴尼

on 1)您必须使连接到串行端口的方法发送命令以等待答复,如果在合理的时间内未收到答复,则超时。希望锁中的回复具有一致的终止符,例如回车符,以便您可以发现该错误并解码收到的字符串以检查open1 / close1。您必须留出时间来发送命令的字符,这要稍稍延迟一些时间,然后再用终止回车符的返回时间来保留字符。如果经过的时间更长,并且您没有响应,则超时并返回失败。我已经使用Python状态机完成了这种事情,该状态机在单独的线程中运行,因此主程序可以继续关注用户。

在2)

线

如果(ser.isOpen()== False):

样式项-isOpen是一个相当清晰的方法名称,如果端口打开则将返回true。与其与False进行比较,不如使用ser.isOpen()或不使用ser.isOpen()可能更清楚。查看您的代码,很难看到您要实现的目标-如果端口未打开,您是否想打开它?在这种情况下,逻辑应为:

if not ser.isOpen():
    print ('The Port %d is **closed - opening** Stephan: '%COMPORT + ser.portstr)
      #timeout in seconds
    ser.timeout = 10
    ser.open()

else:
    print ('The Port %d is **open** Stephan' %COMPORT)

无论哪种方式,您的serial_connection()函数都会返回,并且您的调用代码将调用ser.write(),因此您在2中描述的行为不足为奇。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 toString 打印结果数组

来自分类Dev

如何使用Swift打印DynamoDB查询结果

来自分类Dev

使用g ++的C ++,无结果,无打印

来自分类Dev

使用INNER JOIN的mySQL查询的打印结果

来自分类Dev

使用Genie打印选择查询的结果

来自分类Dev

在TextArea中使用vkbeautify漂亮打印结果

来自分类Dev

使用Pyserial发送文件?

来自分类Dev

使用pySerial读取响应AT命令

来自分类Dev

如何使用jQuery获取打印为PDF结果

来自分类Dev

使用结果列表元素打印正确的列表索引

来自分类Dev

打印hGetContents的结果后,为什么不能使用hPutStr?

来自分类Dev

如何使用window.print在结果中打印单个行

来自分类Dev

尝试使用ajax从php接收json并以HTML打印结果

来自分类Dev

如何不使用print()打印功能的结果?

来自分类Dev

如何使用bs4正确打印Google搜索结果?

来自分类Dev

如何使用只读形式的表单打印mysql结果

来自分类Dev

如何使用JavaScript并在Kendo UI模板中打印结果?

来自分类Dev

grep多个模式并使用匹配模式打印结果

来自分类Dev

打印hGetContents的结果后,为什么不能使用hPutStr?

来自分类Dev

如何使用awk逐行打印其他程序的结果?

来自分类Dev

如何使用自定义标题打印awk命令的结果

来自分类Dev

闪亮的动态 UI:无法从使用 renderUI 创建的 uiOutput 打印结果

来自分类Dev

使用 php 打印星形图案时出现意外结果

来自分类Dev

功能的打印结果

来自分类Dev

如何打印脚本结果?

来自分类Dev

IntStream平均的打印结果

来自分类Dev

了解此打印结果

来自分类Dev

如何打印脚本结果?

来自分类Dev

使R打印仅结果