BMS上位机(三)

这篇具有很好参考价值的文章主要介绍了BMS上位机(三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

总述

上位机开发中很少提及软件的升级,一般都是直接打包发送,相对不是很友好,有时无法及时更新软件中的问题和特性。

软件升级

流程

实现

下载文件

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace RemoteUpgrade
{
    class DownloadPack
    {
        public DownloadPack()
        { 
        
        }

        public delegate void UpdateState(int percent, bool is_error);
        public event UpdateState UpdateProcess;

        public bool DownloadFile(string url_path, string dest_path)
        {
            try
            {
                if (!Directory.Exists(dest_path))
                    Directory.CreateDirectory(dest_path);
                WebClient wc = new WebClient();
                string filename = "Update_NewVersion.zip";
                filename = Path.Combine(dest_path, filename);
                File.Delete(filename);
                //wc.DownloadFile(download, filename);
                wc.DownloadFileAsync(new Uri(url_path), filename);
                wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
                wc.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wc_DownloadFileCompleted);
                //wc.Dispose();
            }
            catch(Exception e)
            {
                return false;
            }
            return true;
        }

        void wc_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            (sender as WebClient).Dispose();
            if (e.Error != null)
            {
                UpdateProcess(0, true);
            }
            else 
            {
                UpdateProcess(100, false);
            }
        }

        void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            if (e.ProgressPercentage < 100)
                UpdateProcess(e.ProgressPercentage, false);
        }
    }
}

解压文件

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ICSharpCode.SharpZipLib.Zip;

namespace RemoteUpgrade
{
    class Unpack
    {
        public Unpack()
        { 
        
        }

        public bool UnZIP(string zipFilePath, string saveDirectory)
        {
            if (!File.Exists(zipFilePath))
            {
                return false;
            }
            try
            {

                if (!Directory.Exists(saveDirectory))
                {
                    //解压后存放的 文件夹路径
                    Directory.CreateDirectory(saveDirectory);
                }

     
                using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
                {

                    ZipEntry theEntry;
                    while ((theEntry = s.GetNextEntry()) != null)
                    {
                        string directoryName = Path.GetDirectoryName(theEntry.Name);
                        string fileName = Path.GetFileName(theEntry.Name);

                        // create directory
                        if (directoryName.Length > 0)
                        {
                            //创建目录
                            string saveDir = Path.Combine(saveDirectory, directoryName);
                            Directory.CreateDirectory(saveDir);
                        }

                        if (fileName != String.Empty)
                        {
                            string saveFilePath = Path.Combine(saveDirectory, theEntry.Name);
                            using (FileStream streamWriter = File.Create(saveFilePath))
                            {
                                int size = 2048;
                                byte[] data = new byte[2048];
                                while (true)
                                {
                                    size = s.Read(data, 0, data.Length);
                                    if (size > 0)
                                    {
                                        streamWriter.Write(data, 0, size);
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch(Exception ex)
            {
                return false;
            }
            return true;
        
        }
    }
}

应用传参

ShellExecute(IntPtr.Zero, "open", 应用路径, 参数, null , 1);

总结

升级流程相对比较简单,但是要考虑异常情况的处理,防止升级后的软件打开情况,需要做好校验工作。

获取程序

关注微信公众号 Chipcode 发送bms文章来源地址https://www.toymoban.com/news/detail-618969.html

到了这里,关于BMS上位机(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • BMS——电池均衡算法

    BMS——电池均衡算法

    1.1 基本概念 ​  在电池簇电芯间容量存在一致性差异时,会导致电池系统整体可用电量下降及SOC估算不准以致出现充放电末端出现跳变。电池均衡的意义就是利用电力电子技术,使锂离子电池单体电压或电池组电压偏差保持在预期的范围内,从而保证每个单体电池在正常

    2024年02月11日
    浏览(8)
  • 关于BMS的介绍及应用领域

    电池管理系统 (Battery Management System,BMS)是一种集成电路系统,它用于监测和控制电池系统状态,以确保电池的正常运行和安全使用。BMS的应用涵盖了电动汽车、储能系统、无人机、电动工具等各个领域,可以提高电池的使用寿命、安全性能和续航能力。在这篇文章中,我

    2024年02月02日
    浏览(8)
  • BMS-SOC算法——安时积分法

    安时积分法是一种电池电量计量的基础方法,它采用AH累积的方法,对动态的锂电池进行实时的SOC估算。安时积分法的计算公式如下: SOC(t)=SOC0​+CE1​∫0t​I(τ)dτ 其中,SOC0​是电池电荷状态的初始电量值;CE是电池的额定容量;I(t)为电池在t时刻的充放电电流;t为充放电的

    2024年02月09日
    浏览(10)
  • STM32-LTC6804方案成熟BMS方案

    STM32-LTC6804方案成熟BMS方案

        本文介绍2款基于STM32F407的以凌力尔特(linear)LTC6804芯片为主的BMS方案。2款方案都是从板或者说是子板方案,都是要配套STM32F407主板来使用。理解后可以直接打样制作,文末提供了整体方案的下载链接!     这里提一下凌力尔特(linear)半导体,2017年3月,ADI以148亿美

    2024年02月08日
    浏览(9)
  • 三电技术(电池(BMS)、电驱(MCU)、电控(VCU))

    三电技术(电池(BMS)、电驱(MCU)、电控(VCU))

    三电技术不仅是新能源汽车的核心技术,也是基础性技术。 三电是指电池,电驱(电机),电控,简称 BMC。 为了区分新能源汽车上的低压电池将其称为 动力电池 ,“动力电池“也是行业术语。 动力电池系统通常由电芯,电池组,电池管理系统,冷却系统,高低压线束,保护

    2023年04月18日
    浏览(8)
  • ARM---CAN2.0B读取 汽车BMS报文

    Qt CAN编程1- CAN总线整体介绍 - 简书 STM32---CAN2.0B读取新能源汽车BMS报文-CSDN博客 CAN通信标准帧和扩展帧介绍_can扩展帧-CSDN博客 【精选】详解CAN 2.0协议_can2.0-CSDN博客 QT实现CAN通信_五个板栗的技术博客_51CTO博客 linux CAN通讯基于Qt代码编写_pf_can-CSDN博客 QT 新手小白USBCAN 学习_qt ca

    2024年01月21日
    浏览(7)
  • BMS再进阶(新能源汽车电池管理系统)

    BMS再进阶(新能源汽车电池管理系统)

    一文入门BMS(电池管理系统)_bms电池管理-CSDN博客 BMS进阶(Type-C、PD快充、充电IC、SOC算法、电池管理IC)_充电ic asi aso功能-CSDN博客 本文是上面两篇博客的续篇,之前都是讲解一些BMS基本原理,接下来将会更加深入地去了解BMS的行业应用及职位的要求。 写着写着感觉又不小心

    2024年02月19日
    浏览(10)
  • 【BMS软开系列】1、 ISO 26262功能安全标准 (一)

    【BMS软开系列】1、 ISO 26262功能安全标准 (一)

    这是第一篇关于BMS相关的文章,也是记录和加深自己对知识的一个掌握程度,如果您也是研究这一方面的可以关注公众号加我好友,一起学习交流。进入正题 红色:重点 粉色:次重点 绿色:了解 黄色:专业名词 紫色:可探究点 BMS(Battery Management System),也叫电池管理系统。

    2024年02月01日
    浏览(10)
  • VCU自学习一——新能源汽车三电VCU、MCU、BMS

    VCU自学习一——新能源汽车三电VCU、MCU、BMS

    在新能源汽车的整个平台架构中,VCU (Vehicle Control Unit 整车控制器)、MCU (Moter Control Unit 电机控制器)和 BMS (BATTERY MANAGEMENT SYSTEM 电池管理系统)是最重要的核心技术,对整车的动力性、经济性、可靠性和安全性等有着重要影响。 MCU有时会理解为微处理单元,不同于此处的

    2024年01月16日
    浏览(13)
  • BMS电池管理系统纯硬件版,和软件版有什么区别?

    当今社会,电池已经成为人们生活和工作中不可或缺的重要组成部分。而电池的使用寿命、性能和安全性等问题一直是人们关注的焦点。为了保证电池的安全、高效和长寿命运行,BMS电池管理系统应运而生。 BMS电池管理系统通常由硬件和软件两部分组成,其中 硬件版BMS 和

    2023年04月23日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包