0
点赞
收藏
分享

微信扫一扫

【MPC】无人机模型预测控制复现Data-Driven MPC for Quadrotors项目(Part 1)

君之言之 2024-09-15 阅读 16

系列文章

【C#】最全业务单据号生成(支持定义规则、流水号、传参数)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787

【C#】日期范围生成器(开始日期、结束日期)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129040663

【C#】组件化开发,调用dll组件方法
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129492112

【C#】数据实体类使用
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816638

【C#】单据审批流方案
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128972545

【C#】条码管理操作手册
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126589496

【C#】IIS平台下,WebAPI发布及异常处理
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126539836

【C#】代码模板生成工具
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126890673

【C#】MySQL数据库导入工具(批量Excel插入)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126427323

【C#】简单二维码制作和打印工具
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126884228

【C#】最全单据打印(打印模板、条形码&二维码、字体样式、项目源码)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129415723

【C#】Windows服务(Service)安装及启停方案
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053794

【C#】穿透Session隔离,服务调用外部程序(无窗体界面解决)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053033

【C#】任务计划实现,使用Quartz类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/123667723

【C#】源码解析正则表达式
本文链接:https://blog.csdn.net/youcheng_ge/article/details/118337074

【C#】软件版本和文件MD5记录(XML操作)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/112513871

【C#】测试网络是否连通
本文链接:https://blog.csdn.net/youcheng_ge/article/details/110137288

【C#】根据名称获取编码(Dictionary获取key方法)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129816701

【C#】数据建模,你是使用DataTable还是List?
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129792726

【C#】GridControl控件和数据集双向绑定
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129423755

【C#】GridControl动态更换DataSource,数据查询异常处理
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130305424

【C#】GridControl日期字段显示时分秒
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130718303

【C#】GridControl增加选择列(不用二次点击)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130763713

【C#】数据库检查工具(可跨库访问)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/97172329

【C#】代码解析–打印数据集
本文链接:https://blog.csdn.net/youcheng_ge/article/details/131431829

【C#】代码解析–截取整个方法函数
本文链接:https://blog.csdn.net/youcheng_ge/article/details/109817809

【C#】反射机制,动态加载类文件
本文链接:https://blog.csdn.net/youcheng_ge/article/details/131435110


文章目录


前言

我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,这样外部函数就无法访问你。 又想让你成为全局常量,这样在我的整个生命周期都可以调用你。 可惜世上没有这样的常量,我也无法定义你,因为你在我心中是那么的具体。

哈喽大家好,本专栏为【项目实战】,有别于【底层库】专栏,我们可以发现增加 了『问题描述』、『项目展示』章节,十分贴合项目开发流程,让读者更加清楚本文能够解决的问题、以及产品能够达到的效果。本专栏收纳项目开发过程中的解决方案,是我项目开发相对成熟、可靠方法的总结,在不涉及职务作品保密协议 的前提下,我将问题的解决方案重新梳理,撰写本文分享给大家,大家遇到类似问题,可按本文方案处理。

本专栏会持续更新,不断完善,专栏文章关联性较弱(文章之间依赖性较弱,没有阅读顺序)。大家有任何问题,可以私信我。如果您对本专栏感兴趣,欢迎关注吧,我将带你用最简洁的代码,实现复杂的功能。

·提示:本专栏为项目实战篇,未接触项目开发的同学可能理解困难,不推荐阅读。
3A0N000001


一、问题描述

我们开发出一个工具,可以集成进项目里,完成软件自动升级。工具包含三大部分:文件服务器、自动更新管理工具、自动更新程序。

二、解决方案

2.1 文件服务器

位置

服务器端

功能

FileServer.exe 提供文件的下载服务,与客户端建立http连接,将服务器上的更新包,以数据流形式传输给客户端。

操作方法

方法一:FileServer.exe 双击打开即可以运行。
在这里插入图片描述

方法二:部署到IIS上,开机自动运行。

2.2 自动更新管理工具

位置

服务器端

功能

AutoUpdateManage.exe 自动更新管理工具,功能:建立连接参数配置、生产软件更新列表。

操作方法

AutoUpdateManage.exe 双击打开,【参数设置】服务器连接的配置。
在这里插入图片描述
在这里插入图片描述
【生成更新列表】会在本地生成 update.xml文件,里面内容包含软件的清单列表。
在这里插入图片描述

2.3 自动更新程序

位置

客户端,用户电脑上。

功能

AutoUpdate.exe 负责【客户端】应用的自动升级,与服务端建立链接,接收服务器传来的文件流,将其下载到同级目录下。

操作方法

1、把以下文件,拷贝到【客户端】的同级目录。我这里完全下载,没有客户端程序。
在这里插入图片描述

2、App.config 为配置文件,修改配置文件
配置 主程序(启动程序)、服务器URL等信息
在这里插入图片描述

三、软件开发(源码)

3.1 文件服务器

在这里插入图片描述

3.2 二维码生成源码

        private Bitmap DrawImage(string a_strLabel)
        {
            Thread.Sleep(500);
            string l_strMode = AppConfig.GetValue("qr_mode");
            string l_strSize = AppConfig.GetValue("qr_size");
            string l_strVersion = AppConfig.GetValue("qr_version");
            string l_strCheckLevel = AppConfig.GetValue("qr_checklevel");

            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
            // 生成二维码内容模式分为三种,数字,数字字母,字节,这个基本上都设置成Byte,支持汉字
            qrCodeEncoder.QRCodeEncodeMode = (QRCodeEncoder.ENCODE_MODE)Enum.Parse(typeof(QRCodeEncoder.ENCODE_MODE), l_strMode);
            // 设置二维码的大小,默认4,在尺寸小的情况下,版本参数过高则设备难以识别二维码
            qrCodeEncoder.QRCodeScale = int.Parse(l_strSize);
            // 设置二维码的版本,默认7 该值影响二维码最高数据容量 7大致对应40个汉字长度,内容超出择需提升该数值
            qrCodeEncoder.QRCodeVersion = int.Parse(l_strVersion);
            // 设置错误校验级别,默认中等,二维码被遮挡住一部分实际上也是能扫出内容的,这个效验级别的意思就是
            // 当遮挡部分最大占整体多少时仍然可以被扫出来,M大概在20%左右,H为30%,级别越高相应的数据容量会缩小
            // 那些中间带图标的二维码,其实就是简单粗暴的用LOGO遮挡住了中间部分
            qrCodeEncoder.QRCodeErrorCorrect = (QRCodeEncoder.ERROR_CORRECTION)Enum.Parse(typeof(QRCodeEncoder.ERROR_CORRECTION), l_strCheckLevel);

            return qrCodeEncoder.Encode(a_strLabel, Encoding.UTF8);
        }

四、项目展示

五、资源链接

举报

相关推荐

0 条评论