这是我的设置的摘要:
- 3 轴 CNC,可通过运行在树莓派上的 python 脚本控制
- Windows PC 可以连接到 pi 可以运行脚本
最终目标是让 C# 制作的 UI 启动 CNC 运行的自动化测试周期。在 python 程序中,有一个Cnc
对象存储设备当前位置并包含将其定位到某个位置的方法。
问题是如果我每次想移动 CNC 时都运行一个新脚本,我必须重新初始化Cnc
实例,它会忘记它的位置。所以我想知道我是否可以运行一个包含唯一Cnc
实例的主程序,然后当远程机器想要告诉 CNC 移动它时,它可以使用 argz 为新位置运行不同的脚本python action.py x y z
。然后,该脚本可以与主程序通信以将move
方法调用到适当的位置,而无需重新构建新的Cnc
目的。然后理想情况下,主程序会指示动作何时完成并向“动作”脚本发送回一条消息,该脚本会输出一些内容来告诉远程系统动作已完成,然后它会退出,准备再次调用与新的 argz。
最后,远程系统从任何工作中高度抽象,只需要开始运行主服务器,然后在它想要执行动作的任何时候使用 argz 运行移动脚本。
注意:我的另一个想法是只用当前位置保存一个文本文件,然后总是用文件中的信息重新初始化实例。
编辑:解决了......有点
处理程序.py
处理程序将不断地从名为 input.txt 的文本文件中读取以寻找新的整数。如果收到它将更新名为 output.txt 的文本文件以读取“0”,然后对输入执行一些操作(即移动 cnc),然后将值“1”写入 output.txt。
from time import sleep
cur_pos=0
while True:
with open("input.txt","r") as f:
pos=f.readline()
try:
if pos=='':
pass
else:
pos=int(pos)
except:
print pos
print("exititng...")
exit()
if cur_pos==pos or pos=='':
#suggestion from @Todd W to sleep before next read
sleep(0.3)
pass
else:
print("Current pos: {0:d}, New pos: {1:d}".format(cur_pos,pos))
print("Updating...")
with open("output.txt","w") as f:
f.write("0")
#do some computation with the data
sleep(2)
cur_pos=pos
print("Current pos: {0:d}".format(cur_pos))
with open("output.txt","w") as f:
f.write("1")
pass_action.py
action passer 将接受一个命令行参数,将其写入 input.txt,然后等待 output.txt 读取 '1',之后它将打印 done 并退出。
import sys
from time import sleep
newpos=sys.argv[1]
with open("input.txt","w") as f:
f.write(newpos)
while True:
sleep(0.1)
with open("output.txt","r") as f:
if f.readline()=='1':
break
sys.stdout.write("done")