使用Python等待特定串口输入后发送串口输出

0 投票
1 回答
763 浏览
提问于 2025-04-18 17:50

这个项目的背景是这样的。我想写一个脚本,让它在树莓派启动时自动运行,并且只要树莓派开着,它就一直运行。这个脚本需要通过rs232端口输出一个文本文件,但只有在接收到来自数控机床的chr17(ASCII码)时才会输出。chr17我认为也是软件流控制的xon代码。

所以,当机器请求输入时,树莓派就会输出脚本指定的文件内容。当机器发出请求时,它会输出chr17。而当输出完文件的最后一行时,它会输出chr18来表示结束。

关于树莓派的内存,我不太清楚执行这个脚本的最有效方法,我觉得使用while循环可能会占用太多内存。不过我也不太确定。

如果有人能帮我写这个脚本,我会非常感激。

目前这个代码在机器请求输入后执行是有效的。但我需要它能够持续运行,然后一旦看到机器请求输入,就应该输出文件。

这是我现在的代码,如果你觉得有需要修改的地方,随意改动,或者如果不太有用的话可以完全从头开始,哈哈。

import serial
port = serial.Serial("/dev/ttyAMA0", baudrate=4800, bytesize=7, parity='E')
machinenumber = "BND-2"
cncfile = "/home/pi/myNAS/myShare/e-matix/Machines/%s/Upload/9937.cnc" % machinenumber

try:
    port.open()
except Exception, e:
print "error opening serial port:" + str(e)
if port.isOpen():
    port.write(open(cncfile, "rb").read())
    print ("worked")
    print (open(cncfile, "rb").read())
else:
    print ("cannot open port")
    time.sleep(5)
port.close()

1 个回答

0

1) 把脚本放到定时任务(crontab)里,设置成在系统启动时自动运行:

@reboot  python /path/to/script.py

http://www.cyberciti.biz/faq/linux-execute-cron-job-after-system-reboot/

2) 把上面的脚本放进一个 while 循环里,这样它就会运行完后再重新开始。

撰写回答