可以介绍一下这个软件使用的算法吗?
视频 :XXXXXXXXXXXXXXXXXXXXXXXX/video/BV1KX4y1F7tT
github:XXXXXXXXXXXXXXXXXX/kmakise/CoilgunRailgunUtility/
打算写个功能更全面的仿真软件,由于个人时间能力有限打算开源出来,希望有想法的小伙伴可以一起开发。
部分计算代码:
namespace RailgunCalcWin
{
public class RailgunCalculator
{
public const string STRC_MLGJT = "未来道具研究所 2021 All Rights Reserved";
public const string STRC_VERSN = "\r\n Railgun Coilgun Calculation Utility V1.0 \r\n";
public const string STRC_GITHB = "\r\n Home: https://kmakise.cn";
public const string STRC_HOMEL = "\r\n Github: https://github.com/kmakise";
//弹丸质量
public double BLT_rad = 0; //直径
public double BLT_len = 0; //长度
public double BLT_m = 0; //质量
public double BLT_s = 0; //截面积
//功率动能
public double PA_bltm = 0; //弹丸质量
public double PA_accd = 0; //加速距离
public double PA_aimv = 0; //目标速度
public double PA_time = 0; //加速时间
public double PA_accv = 0; //加速度
public double PA_watt = 0; //平均功率
public double PA_ekval = 0; //动能
//电流电压
public double VC_avpw = 0; //平均功率
public double VC_pwvt = 0; //电源电压
public double VC_capvt = 0; //逆变电压
public double VC_acctim = 0; //加速时间
public double VC_nek = 0; //转换效率
public double VC_ntf = 0; //逆变效率
public double VC_dischargeCur = 0; //放电电流
public double VC_powerCur = 0; //直供电流
public double VC_heatout = 0; //热耗功率
public double VC_btmah = 0; //电池功耗
//电容器
public double CPT_CapU = 0; //电压
public double CPT_CapI = 0; //电流
public double CPT_CapT = 0; //时间
public double CPT_energy = 0; //储能量
public double CPT_capval = 0; //电容量
//动能比计算
public double EKP_outek = 0; //出口动能
public double EKP_sblt = 0; //出口动能
public double EKP_ekpst = 0; //动能比
//电感量计算
public double COIL_Rad = 0;//半径
public double COIL_Len = 0;//长度
public double COIL_Thi = 0;//厚度
public double COIL_Wrd = 0;//线直径
public double COIL_Rpt = 0;//电阻率
public double COIL_Cln = 0;//匝数
public double COIL_Wln = 0;//线长
public double COIL_Res = 0;//内阻
public double COIL_Lin = 0;//电感
//长冈系数
private double[,] COIL_CGK = new double[,]{
{ 0.1, 0.96 },
{ 0.2, 0.92 },
{ 0.3, 0.88 },
{ 0.4, 0.85 },
{ 0.6, 0.79 },
{ 0.8, 0.74 },
{ 1.0, 0.69 },
{ 1.5, 0.60 },
{ 2.0, 0.52 },
{ 3.0, 0.43 },
{ 4.0, 0.37 },
{ 5.0, 0.32 },
{ 10 , 0.20 },
{ 20 , 0.12 },
};
//1/t系数
private double[,] COIL_1PT = new double[,] {
{1 ,0 },
{5 ,0.23},
{10,0.28},
{20,0.31},
{30,0.32},
};
public RailgunCalculator()
{
}
//弹丸质量计算 rad直径 len长度
public void BLT_CalcWeightData()
{
this.BLT_s = ((this.BLT_rad / 10) / 2) * ((this.BLT_rad / 10) / 2) * 3.1415926;
this.BLT_m = (this.BLT_s * this.BLT_len / 10) * 7.8;//7.8g/cm3
}
// 功率动能计算
public void PA_CalcAccData()
{
this.PA_time = (this.PA_accd / 1000) / (this.PA_aimv / 2); //时间 = 路程/平均速度
this.PA_accv = this.PA_aimv / this.PA_time; //加速度 = 速度变化/时间
this.PA_ekval = (this.PA_bltm / 1000) * this.PA_aimv * this.PA_aimv / 2; //速度 :m/s 质量kg 动能定理 E=mv²/2 p = E/t 1W=1J/s
this.PA_watt = this.PA_ekval / this.PA_time; //功率 = (质量x速度平方) / 2 / t
}
//电流电压计算
public void VC_CalcCurrentData()
{
this.VC_dischargeCur = (this.VC_avpw / this.VC_capvt) / (this.VC_nek / 100);// I = (P/U)/η
this.VC_powerCur = (this.VC_avpw / this.VC_pwvt) / (this.VC_nek / 100) / (this.VC_ntf / 100);
this.VC_heatout = this.VC_powerCur - (this.VC_avpw / this.VC_pwvt);
this.VC_btmah = this.VC_powerCur * (this.VC_acctim / 1000) / 3600 * 1000;
}
//电容计算 CapU 电压 CapI电流 CapT时间
public void CPT_CalcCapData()
{
this.CPT_energy = this.CPT_CapU * this.CPT_CapI * this.CPT_CapT / 1000; // w = uit
this.CPT_capval = 2 * this.CPT_energy / (this.CPT_CapU * this.CPT_CapU) * 1000000; //Ec=0.5CU² C=2Ec/U²
}
// 动能比计算
public void EKP_CalcOEkData()
{
this.EKP_ekpst = (1.0 / this.EKP_sblt) * this.EKP_outek;
}
//分段直线方程查表
private double chatLinerTf(double[,] chat,int num,double input)
{
int index = 0;
double x, y, x1, x2, y1, y2;
double k, b;
index = 0xFF;
//find adc val from table
for (int i = 0; i < (num - 1); i++)
{
if (chat[i,0] <= input && chat[i + 1,0] > input)
{
index = i;
break;
}
}
if (index == 0xFF)
{
return 0;
}
x1 = chat[index ,0];
x2 = chat[index + 1 ,0];
y1 = chat[index ,1];
y2 = chat[index + 1 ,1];
k = (y2 - y1) / (x2 - x1);
b = y1 - k * x1;
x = input;
y = k * x + b;
return y;
}
//电感计算
public void COIL_CalcLvalData()
{
this.COIL_Cln = (int)(this.COIL_Len * this.COIL_Thi * Math.PI / 4 / this.COIL_Wrd);//匝数 = 长度 x 厚度x π/ 4 / 线径
this.COIL_Wln = (this.COIL_Rad - this.COIL_Thi / 2) * 2 * Math.PI * COIL_Cln / 1000;//长度 = 2* 平均半径 * pi * n
this.COIL_Res = this.COIL_Rpt / ((this.COIL_Wrd / 2) * (this.COIL_Wrd / 2) * Math.PI) * this.COIL_Wln * 1000;//内阻 = 电阻率 / 截面积 * 长度
//L = ( 4pi * 平均半径 * 总匝数^2 / 长度 ) * (pi * 平均半径 * 长冈系数 - 线圈厚度 * (0.693 + 1/t系数)) x 10^-7 H
double avrad = ((this.COIL_Rad - this.COIL_Thi / 2) / 1000); //平均半径
double lenm = (this.COIL_Len / 1000); //长度 m
double thim = (this.COIL_Thi / 1000); //厚度 m
double x1 = (4 * Math.PI * avrad * Math.Pow(this.COIL_Cln, 2)) / lenm; //( 4pi * 平均半径 * 总匝数^2 / 长度 )
double x2 = Math.PI * avrad * chatLinerTf(COIL_CGK, 14, 2 * avrad / lenm); //pi * 平均半径 * 长冈系数
double x3 = thim * (0.693 + chatLinerTf(COIL_1PT, 5, lenm / thim)); //线圈厚度 * (0.693 + 1/t系数)
this.COIL_Lin = x1 * (x2 - x3) * Math.Pow(10,-1);
}
}
}
还有关于线圈磁阻炮有点想法
[修改于 3年5个月前 - 2021/08/07 12:34:08]
开源看csharp有点头疼啊,我一般用python做这类东西。
技术栈为:Python+astropy.units+Qt for Python+WebView开发。
astropy.units负责处理单位,Qt+一堆绘图工具(例如pyqtgraph,pyvista,matplotlib)+WebView负责结果可视化。
没有计算电磁力,还有弹丸运动对电流影响的部分吗?
这个还是还没写完 我最近时间也不是很充裕所以开源出来了想让大家一起来维护 另外有大佬打包到Arch Linux的AUR了 XXXXXXXXXXXXXXXXXXXXXXXXX/packages/coilgunrailgunutility-mono/ 有想法的可以吧github ID告诉我 我去加collaborator
开源看csharp有点头疼啊,我一般用python做这类东西。技术栈为:Python+astropy...
Py 编译出来独立运行程序很大的,楼主做的这个估计才10Kb 不到
Py 编译出来独立运行程序很大的,楼主做的这个估计才10Kb 不到
不至于吧,C#写个hello world都42k了,何况这个还是图形化(不确定是winform还是wpf)。当然用了AOT另说
引用荷城工业_Nitload_Industry发表于14楼的内容不至于吧,C#写个hello world都42k了,何况这个还是图形化(不确定是winform还是w...
我写个winform的串口助手大概19k,不知道你这个hello world是咋写的?
我写个winform的串口助手大概19k,不知道你这个hello world是咋写的?
当时用的还是.net frameswork,估计是编译器把.net库给打包了进去(debug模式,估计还有调试符号)
200字以内,仅用于支线交流,主线讨论请采用回复功能。