加载中
加载中
表情图片
评为精选
鼓励
加载中...
分享
加载中...
文件下载
加载中...
修改排序
加载中...
【C#】电磁炮仿真模拟软件【开源】
kmakise2021/08/07原创 电磁炮 IP:河北
关键词
电磁炮

attachment icon CoilgunRailgunUtility.zip 7.24MB ZIP 724次下载

视频 :https://www.bilibili.com/video/BV1KX4y1F7tT

github:https://github.com/kmakise/CoilgunRailgunUtility/

3.png

2.png

1.png



打算写个功能更全面的仿真软件,由于个人时间能力有限打算开源出来,希望有想法的小伙伴可以一起开发。

部分计算代码:

C#
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.10.96 },             { 0.20.92 },             { 0.30.88 },             { 0.40.85 },             { 0.60.79 },             { 0.80.74 },             { 1.00.69 },             { 1.50.60 },             { 2.00.52 },             { 3.00.43 },             { 4.00.37 },             { 5.00.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, 142 * 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);         }     } }


还有关于线圈磁阻炮有点想法

改进型I.png



[修改于 3年5个月前 - 2021/08/07 12:34:08]

来自:物理高能技术 / 电磁炮
16
9
新版本公告
~~空空如也
三水合番
3年5个月前 IP:四川
895732

可以介绍一下这个软件使用的算法吗?

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kmakise作者
3年5个月前 IP:河北
895741
引用三水合番发表于1楼的内容
可以介绍一下这个软件使用的算法吗?

我一会把源代码发出来 可以到github下载 很多功能还没做完 最近事情太多没时间弄 打算长期维护更新

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥
3年5个月前 IP:四川
895746

楼主真能折腾

sticker

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kmakise作者
3年5个月前 IP:河北
895747
引用虎哥发表于3楼的内容
楼主真能折腾

哈哈哈,生命不息,折腾不止

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
依格古德曼
3年5个月前 修改于 3年5个月前 IP:香港
895750

开源看csharp有点头疼啊,我一般用python做这类东西。

技术栈为:Python+astropy.units+Qt for Python+WebView开发。

astropy.units负责处理单位,Qt+一堆绘图工具(例如pyqtgraph,pyvista,matplotlib)+WebView负责结果可视化。


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kmakise作者
3年5个月前 IP:河北
895755
引用依格古德曼发表于5楼的内容
开源看csharp有点头疼啊,我一般用python做这类东西。技术栈为:Python+astropy...

感觉这个 Release一个exe别人用着也方便

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
三水合番
3年5个月前 IP:四川
895775
引用kmakise发表于2楼的内容
我一会把源代码发出来 可以到github下载 很多功能还没做完 最近事情太多没时间弄 打算长期维护更...

没有计算电磁力,还有弹丸运动对电流影响的部分吗?

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kmakise作者
3年5个月前 IP:河北
895782
引用三水合番发表于7楼的内容
没有计算电磁力,还有弹丸运动对电流影响的部分吗?

这个还是还没写完 我最近时间也不是很充裕所以开源出来了想让大家一起来维护 另外有大佬打包到Arch Linux的AUR了 https://aur.archlinux.org/packages/coilgunrailgunutility-mono/ 有想法的可以吧github ID告诉我 我去加collaborator


引用
评论(4)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kmakise作者
3年5个月前 IP:河北
895789
引用三水合番发表于1楼的内容
可以介绍一下这个软件使用的算法吗?

这个项目才开始还没做到关键的部分

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
大仙
3年2个月前 IP:上海
898433
引用依格古德曼发表于5楼的内容
开源看csharp有点头疼啊,我一般用python做这类东西。技术栈为:Python+astropy...

Py 编译出来独立运行程序很大的,楼主做的这个估计才10Kb 不到

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
航模发烧友
3年2个月前 IP:广东
898434

改用WPF 写吧,winfrom 太丑了

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
KC83252
3年2个月前 IP:北京
898723

期待!

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
椰子咯
8个月26天前 IP:山东
931216

太强了,期待


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
荷城工业_Nitload_Industry
8个月23天前 IP:安徽
931330
引用大仙发表于10楼的内容
Py 编译出来独立运行程序很大的,楼主做的这个估计才10Kb 不到

不至于吧,C#写个hello world都42k了,何况这个还是图形化(不确定是winform还是wpf)。当然用了AOT另说

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
大仙
8个月23天前 IP:广东
931331
引用荷城工业_Nitload_Industry发表于14楼的内容
不至于吧,C#写个hello world都42k了,何况这个还是图形化(不确定是winform还是w...

我写个winform的串口助手大概19k,不知道你这个hello world是咋写的?

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
荷城工业_Nitload_Industry
8个月23天前 IP:安徽
931332
引用大仙发表于15楼的内容
我写个winform的串口助手大概19k,不知道你这个hello world是咋写的?

当时用的还是.net frameswork,估计是编译器把.net库给打包了进去(debug模式,估计还有调试符号)

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

kmakise
进士 机友 笔友
文章
3
回复
10
学术分
0
2021/08/07注册,3年4个月前活动

bilibili:XXXXXXXXXXXXXXXXXXXXXXXXXX/22908638 github:XXXXXXXXXXXXXXXXXX/kmakise

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:河北
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也