另外这是最近的改进版本,运算速度了不少,并增加了删去试车前后的数据的功能。不过还是针对这种文件,不一样的话可以找我,我有时间改,或者闲下来后做个有图形化界面,可通用的程序。
以下是原本的F-t图
以下是第二版的F-t图
可以看出它能删去无用的数据。
多段推力的火箭也没问题,因为是只删头尾。
其余操作与1.0一样
一下是代码
#by奇怪的丁仪又敲水滴了(辰星引力航天工作室)
import XXXXXXXXXXXXXplot as pltf = open("TEST_SD.TXT")
a = XXXXad()b = a.split("\n")
c = []
time = []
force = []
I = 0
for i in b:
if (i != "\n")and(i != ""):
c.append(i)
for i in range(len(c)):
d = c[i].split(",")
time.append(float(d[0]))
force.append(float(d[1]))
while force[0] < 3:
force.pop(0)
time.pop(0)#删除试车前的数据
while force[-1] < 3:
force.pop(-1)
time.pop(-1)#删除试车后的数据,不直接设定阈值是考虑到多推力峰
t0 = time[0]
for i in range(len(time)):
force[i]*=0.1#我的实验得到的数据单位是0.1N,我不知道是不是都这样,如果不是的话可以改下代码
time[i] -= t0
for i in range(len(time)-1):
dt = time[i+1]-time[i]
di = force[i]*dt
I += di#积分算总冲
data = input('''请输入相关数据,格式如下:
发动机名称/直径(mm)/长度(mm)/开伞延时(s)/燃料质量(kg)/总质量(kg)/制造商
若要跳过请输入0,不计算比冲,不形成eng文件\n''')
if data != "0":
d = data.split("/")
name = d[0]
diameter = int(d[1])
length = int(d[2])
dertatime = int(d[3])
fuelmass = float(d[4])
mass = float(d[5])
maker = d[6]
else:
mass = 1
XXXXose()f1 = open("时间-推力表.txt", "w")
f1.write("总冲(N.s):%f\n"%I)
if data != "0":
isp = (I/mass)/9.8#计算以秒为单位的比冲
f1.write("比冲(s):%f\n"%isp)
fmax = force[0]
for i in range(len(force)):
if fmax < force[i]:
fmax = force[i]#计算最大推力
f1.write("最大推力(N):%f\n"%fmax)
f1.write("时间(s) 推力(N)\n")
for i in range(len(time)):
f1.write("%f %f\n"%(time[i],force[i]))
XXXXXose()fig = XXXXXXgure(figsize=(20, 10), dpi=100)XXXXXXot(time, force)plt.xlabel("F(N)")
plt.ylabel("t(s)")
plt.title("F - t")
XXXXXXow()XXXXXXvefig("F - t 图")#绘制并保存推力时间曲线if data != "0":
f2 = open("导入openrocket的数据.eng","w")
f2.write("%s %d %d %d %f %f %s\n"%(name, diameter, length, dertatime, fuelmass, mass, maker))
for i in range(len(time)):
f2.write("%.3f %f\n"%(time[i], force[i]))
f2.write(";")
XXXXXose()#生成可以直接导入openrocket的.eng文件以下是.py文件
解算2.0.py
2.34KB
PY
5次下载
以下是.exe文件(要解压缩)
解算2.0.zip
33.58MB
ZIP
2次下载
同样的,我测试过可以用,但我不知道是否会有没被发现的bug,所以有问题麻烦联系我,谢谢