【C#】电磁炮仿真模拟软件【开源】
kmakise2021/08/07原创 电磁炮 IP:河北
关键词
电磁炮

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

视频 :XXXXXXXXXXXXXXXXXXXXXXXX/video/BV1KX4y1F7tT

github:XXXXXXXXXXXXXXXXXX/kmakise/CoilgunRailgunUtility/

3.png

2.png

1.png



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

部分计算代码:

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);
        }
    }

}


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

改进型I.png



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

来自:物理高能技术 / 电磁炮
16
9
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
三水合番
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了 XXXXXXXXXXXXXXXXXXXXXXXXX/packages/coilgunrailgunutility-mono/ 有想法的可以吧github ID告诉我 我去加collaborator


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

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

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

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

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

改用WPF 写吧,winfrom 太丑了

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

期待!

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

太强了,期待


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

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

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

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

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

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

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

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

插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}