【C#】电磁炮仿真模拟软件【开源】
kmakise 2021-8-7原创 电磁炮
关键词
电磁炮

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

视频 :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 个月前 - 2021-08-07 12:34:08]

来自:高压与强磁 / 电磁炮
5
三水合番
2个月20天前
1楼

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

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

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

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥
2个月20天前
3楼

楼主真能折腾

sticker

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

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

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
依格古德曼
2个月20天前 修改于 2个月20天前
5楼

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

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

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


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

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

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

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

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

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


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

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

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

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

所属专业
所属分类
上级专业
同级专业
%7B%22isDisplay%22%3Atrue%7D
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传
空空如也~
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
{{forum.displayName}}
{{forum.countThreads}}
篇文章,
{{forum.countPosts}}
条回复
{{forum.description || "暂无简介"}}
ID: {{user.uid}}
学术分隐藏
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

支持的图片格式:jpg, jpeg, png
插入公式
分享回复:{{shareId}}
加载中...
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

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

空空如也

下载资料
{{fileName}}
大小:{{size}}
下载当前附件将花费 {{costMessage}}
{{description}}
你当前剩余 {{holdMessage}}
{{fileName}}
大小:{{size}}
当前附件免费。
你已购买过此附件,下载当前附件不需要花费积分。
加载中...
{{errorInfo}}
附件已丢失
当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}