程序自动更新

2024-06-30

程序自动更新(精选九篇)

程序自动更新 篇1

随着计算机网络的日益发展,企业信息管理系统越来越多地应用于企业的日常管理和事务处理,大大提高了企业的办公效率。此类软件系统客户端多、分布广,企业的网络管理人员技术水平参差不齐,这些都对C/S模式的信息管理系统客户端的更新带来影响,常因更新的不及时或不完全而导致系统运行不正常甚至无法运行。为此,在分析当前主流的软件系统更新方式的基础上提出了新的自动更新程序设计方案,其主要功能就是当软件系统进行变更时,各客户端主动侦测其变更并自动完成与服务器文件的同步。其特点就是服务器端文件可以不做成安装程序,而由客户端根据自己的情况进行选择下载更新,并可应对软件系统复杂的目录结构和众多的文件,实现强制更新和断点续传功能,确保客户端软件系统的完备性。下面将介绍通过Visual C++编写程序来实现C/S模式信息管理系统的自动更新。

1 系统设计原理及设计方案

当前常用的自动更新模式主要特点[1]是:(1)利用版本号控制版本升级。(2)更新后的程序单独运行,不需要相互间同步。

经查阅资料及相关文献,归纳出C/S模式信息管理系统具有文件量大、更新频繁、客户端散布面大且相互协同的特点[5],而当前的自动更新模式不适用于信息管理系统[2,5],主要原因是:

(1)信息管理系统除了程序文件外还有数以千计的资料文件,如图像文件、模板文件、声音文件、配置文件等等,而这些文件一般没有版本号,而且修改频繁,如果靠版本号控制就只能手动修改更新信息文件,进而需要做大量的工作,然而客户的系统维护人员不一定都能完成这项工作。而且在实际工作中,大部分客户都希望系统能自动完成这项工作。

(2)客户端必须强制升级到最高版本,否则会导致系统的运行故障。比如在系统维护时在数据库中的CLIENT表中添加一个非空的字段“EMAIL”而客户端在没有及时更新数据模板文件,在此表中添加记录时就会导致系统错误;同样在打印报表时也不会有此项内容。所以,在客户端登录系统时必须强制更新至最新版本。

鉴于上述原因本文提出了下面的自动更新程序设计方案。

1.1 设计原理

从服务器下载版本信息文件,判断是否需要更新,如需要则生成需要更新的文件列表,依次从服务器下载文件。其设计原理如图1所示。

1.2 设计方案

自动更新重要的是收集更新信息形成版本信息文件,服务器端设计Get Info.exe程序递归访问文件目录,并创建版本文件Updata Info.ini。客户端设计Auto Update.exe程序从服务器获取版本文件,判断是否需要更新,若需要更新则从服务器下载新文件。自动更新程序独立于主程序执行,更新程序须中止主程序运行,更新成功后启动主程序。设计方案如图2所示。

1)服务器端程序其功能就是扫描软件系统的目录结构并生成名称为Updata Info.ini的版本文件,具体内容为:

(1)取得程序初始目录和文件下载的URL。

(2)取得软件系统的所有文件列表及修改时间。

(3)将文件信息写入版本文件Updata Info.ini。

(4)如果列表中还有文件就返回(3),否则结束程序。

2)客户端程序其功能就是与服务器建立链接完成软件系统的更新,具体操作为:

(1)下载版本文件,如果下载失败则更新失败。

(2)判断是否需要进行更新,如果需要更新则生成待更新文件列表,中断主程序的运行;不需要更新则结束更新程序。

具体条件包括:

(1)链接是否成功;

(2)服务器端文件的修改时间是否大于客户端文件的修改时间;

(3)以上两条件全部满足,继续进行后续工作流程,否则,结束更新。

(3)依据待更新文件列表从服务器下载文件,并修改本地更新记录为断点续传提供依据。

(4)判断是否还有文件需要更新,有则返回(3),否则执行(5)。

(5)结束更新程序,并启动主程序。

2 自动更新程序设计

自动更新程序的实现方式有很多种,本文将通过API函数URLDownload To File()实现网络文件的自动下载[2],用软件的方法对更新过程实施控制。

2.1 服务器端程序设计

创建服务器端程序Get Info.exe,其主要功能是收集服务器上信息管理系统的新版本的程序及文件信息,并创建版本文件Update Info.ini。具体步骤为:

(1)程序初始化操作。主要是取得当前路径和基本的URL地址。

(2)调用CBrowse Dir类的函数递归扫描当前路径下的所有目录和文件,形成文件信息列表,其结构如下:

(3)取文件信息列表的一个节点,以其相对路径与基本URL地址连接为文件下载URL地址,将文件相对路径、修改时间及下载地址写入Update Info.ini文件,结构如下:

(4)判断文件信息列表是否为NULL,若为空程序结束,否则返回(3)执行。

2.2 客户端程序设计

创建客户端程序Auto Update.exe,其主要功能是完成版本文件的下载,生成更新文件列表,完成自动更新:

(1)下载版本文件Update Info.ini。若下载失败则退出更新程序,判断程序如下:

(2)判断是否需要更新,若不需要更新则退出更新程序。调用CProcess类判断主程序是否在运行,若在运行则中止其运行。

(3)按更新文件列表下载文件,并修改本地更新信息,直至全部文件下载成功。若下载失败则提示下载失败退出更新程序。

3 应用实例

该自动更新程序投入信息隐藏系统使用,运营近一年时间中,系统更新118次均成功更新,未因客户端更新不及时或不完备而引发系统故障,运行情况如图3、图4所示。

4 结语

应用本自动更新程序,每次软件系统更新,只需要服务器端的文件系统更新后运行Get Info.exe程序,就可以完成全部客户端的更新实现。极大地缩短了软件系统维护升级工作的时间,大大提高了工作人员的效率。与类似软件相比有如下创新点:(1)以文件修改时间作为是否下载的依据;(2)以INI文件模拟数据库存储文件信息;(3)实现了单文件或多模块有选择性的更新。

通过实际应用,本文设计的自动更新程序有效地解决了上述信息管理系统客户端更新存在的问题,实现了客户端的强制更新和断点续传,确保了客户端的完备性,同时在并发用户增多的情况下,减轻了服务器的负荷,达到了设计要求。即可用于局域网的更新,也可用于Internet上实现更新。

参考文献

[1]何航校,蒋兆远.一种改进的通用客户端自动升级模型及实现[J].兰州交通大学学报,2005(8):110113.

[2]赵晓娥.用VC++实现程序的自动更新.西安文理学院学报:自然科学版,2006.

[3]杨传伟,孟凡荣.C/S客户端软件自动更新系统的设计与实现.计算机工程与设计,2007(9).

[4]余俊伟.医院信息系统客户端应用软件自动更新的实现[J].中国医疗器械杂志,2006.

小程序更新历程 篇2

2017年1月9日

微信小程序正式上线。2017年3月27日

【1】 面向个人开发者开放

【2】公众号自定义菜单栏跳转小程序

【3】公众号模版消息可打开相关小程序

2017年3月28日

2017年4月14日

2017年4月17日

2017年4月18日

2017年4月20日

2017年4月22日

2017年4月25日

2017年4月26日

2017年4月28日

2017年5月8日

2017年5月10日

2017年5月12日

2017年5月19日

【4】扫描线下二维码直接进入小程序

【5】APP与小程序全面打通,APP分享可用小程序打开 【6】公众号关联小程序,可选择给粉丝下发通知

开放了蓝牙、卡券、获取用户通讯地址和访问场景,兼容ES6 API 等 支持长按识别二维码进入小程序 小程序支持第三方平台开发和管理 小程序码全新上线,支持长按或扫码进入 公众号可以关联不同主体的小程序 公众号图文消息支持添加小程序卡片 公众号和小程序支持同名了 公众号可快速创建“门店小程序” 公众号可快速注册并认证新的小程序 开放了群ID的接口,可获取群ID和群名称

开放“附近的小程序”功能

上线”小程序数据助手“,支持实时查询小程序数据 【1】小程序页面可放置转发按钮,新增页面内转发功能

(小程序开放群相关能力)

【2】丰富基础能力,支持接入微信运动步数数据等 2017年5月27日

【1】小程序码生成数量无限制

 

【2】数据分析功能优化

【3】模板信息升级功能

2017年6月1日

公众号推文可以通过图文链接打开小程序 2017年6月3日

2017年6月16日 2017年6月21日

2017年7月6日

2017年7月11日

2017年7月21日

开放小程序自定义关键词搜索功能

小程序新增“星标”功能 【1】小程序打开小程序

【2】门店小程序的门店页支持添加视频 【3】门店小程序支持接口管理 1】新增小程序运维中心

2】第三方平台可统一管理公众号与小程序

1】提升界面使用体验 2】丰富内容展示组件 3】完善系统硬件能力 【1】状态信息展示 【2】门店小程序数据查询 【3】数据分析能力升级 【4】模版消息管理接口

【 【 【 【 【

2017年7月26日

【1】放置按钮获取用户信息

【2】获取用户UnionID

2017年8月5日

【1】一个小程序可关联最多50个公众号

【2】支持门店小程序跳转关联小程序

2017年8月17日

2017年8月18日

3】小程序支持版本回退

【1】「附近的小程序」能力升级,新增餐饮类目筛选

【2】小程序管理员可授权其他成员管理后台

【1】小程序可自定义分享配图

【2】客服消息支持发送小程序卡片 【3】小程序快速获取发票抬头信息 【4】支持指纹识别 【5】可读取系统字体大小

【6】App 分享小程序消息到微信,支持获取群相关信息 以上均为各位网友参考,如有问题或需要可以联系: 佛山市腾帮网络科技有限公司 黄女士:1365 2903 808

程序自动更新 篇3

随着医院业务工作的不断发展, 信息系统软件的数量越来越多, 功能越来越强大, 规模也越来越庞大。软件的广泛应用对软件产品的及时更新提出了较高的要求[1-2], 特别是医院的各信息系统以及辅助系统等的众多软件, 其开发工具有PB、C#等多种, 如果每1个程序都开发1个自动更新程序, 既费时又费力, 所以开发1个适合所有软件的通用自动更新程序是非常必要的。

目前“军字一号”信息系统客户端的门诊挂号、收费等很多程序都采用绿色拷贝安装模式, 不支持程序自动更新, 所以每次程序版本更新时都需要对每台电脑进行人工操作, 而医院客户端电脑有上千台, 这就给信息系统维护人员造成了很大的压力[3]。

2 设计与实现

软件产品更新的方法主要有如下几种:邮寄更新法、软件补丁包下载法、软件在线升级方法[4]等。根据“军字一号”信息系统内网的特点以及客户端及时更新的要求, 本系统采用在线升级的方式。

2.1 开发工具

本系统使用VB (Visual Basic) 作为开发工具, 它是微软公司开发的包含协助开发环境的事件驱动编程语言。从任何标准来说, VB都是世界上使用人数最多的语言。VB拥有图形用户界面 (GUI) 和快速应用程序开发 (RAD) 系统, 可以轻易地使用DAO、RDO、ADO连接数据库, 或者轻松地创建Active X控件。程序员可以轻松地使用VB提供的组件快速建立一个应用程序[5,6]。

2.2 设计思路

一个通用的自动更新程序应该完全独立于应用程序[7,8], 只负责每次启动应用程序前检查并更新应用程序。客户端程序实施自动更新的前提条件是:专用更新服务器必须支持客户端每次启动时的检查更新程序[9]。

服务器端设置:1 自动更新服务器可单独架设, 也可和其他服务器配合使用;2 服务器端为每一个应用程序建立1个更新目录;3 服务器端根据每个应用程序自动生成自动更新配置文件Update.ini, 该配置文件要监视更新的文件名称、版本号、自动更新的方式以及环境变量注册表的更改等。

客户端设置:1 客户端每次启动前都必须检测服务器当前版本号, 保证应用程序可及时更新至最新版本;2 客户端自动下载服务器的自动更新配置文件update.ini, 然后根据update.ini的具体配置内容进行更新;3 将下载的配置文件复制到程序目录下[10,11,12,13], 并与本地列表文件相比较, 若有不同, 则自动更新。

2.3 程序流程介绍

本控制程序主要有2 个配置文件, 1 个配置文件存放置本地, 负责记录自动更新的网络共享目录、更新日期、访问更新目录的用户名、密码等;另外1 个配置文件每次从服务器更新目录上下载, 负责存放每次更新后客户端需要更改的环境变量、更新方式 (完全覆盖还是部分覆盖) 、备份原程序等。其流程, 见图1。

3 系统特点

3.1 适用性强

本程序适用于采用任何开发工具开发的应用程序, 只需要将本程序放入需要更新的客户端应用程序目录下, 更改配置文件中的更新目录网络地址以及更新完成后需要运行的客户端程序名就可以, 同时还可以根据远端配置文件个性化定制每个应用程序的更新方式。

3.2 灵活性强

本程序既适用于增量补丁更新, 如卡巴斯基、瑞星、诺顿等, 又适用于客户端整体更新, 只需要在配置文件中进行简单设置就能实现。

3.3 极大减少了信息维护工程师的工作量

使用该程序对“军字一号”信息系统众多客户端程序进行简单设置, 就实现了及时自动更新功能, 避免了手工更新众多客户端费时、费力又容易遗漏的情况[14]。

3.4 更新速度快

所有应用程序更新都在后台运行, 前端使用人员感觉不到升级过程。更新过程监控性强, 如果更新失败, 可以及时恢复老版本程序, 不影响前端工作, 也不影响正常的医疗工作[15]。

4 讨论

怎样更新电脑驱动程序? 篇4

第一步:将新下载的驱动程序解压到硬盘中指定路径,一般更新驱动程序都需要从网上下载,网上下载的软件大都是经过压缩的“压缩包”,必须用压缩解压缩软件如WinZip解压缩到指定文件夹才可以安装使用。

第二步:在桌面上右键单击“我的电脑”,选择“属性”一“设备管理器”。

第三步:在“设备管理器”窗口中会出现计算机中的硬件设备列表。打开“监视器”,选中下面的监视器名,然后单击下面左边的“属性”按钮。

第四步:在显示器属性页面单击“驱动程序”一“升级驱动程序”按钮,启动“升级驱动程序”向导,单击“下一步”,

第五步:此时出现选择窗口。可以选择让系统自己搜索驱动程序或是自己升级驱动程序。一般选择第一个选项,单击“下一步”。

第六步:出现设置驱动程序搜索位置的界面,可以选择从软盘搜索,也可以选择从光盘搜索,由于新的驱动程序已在硬盘中,应选择“指定一个位置”选项,单击“下一步”。

第七步:单击“浏览”找到驱动程序所在文件夹,单击“确定”。

第八步:Windows会分析所选驱动程序,并与正在使用的驱动程序比较,给出结果。如果安装选定的驱动程序,单击“下一步”。

第九步:系统开始复制驱动程序,然后出现“完成窗口”,单击“完成”按钮。

远程更新ARM程序的设计与实现 篇5

在实际工程应用中, ARM程序通常采用JTAG口进行更新, 在ARM电路板单板阶段通过JTAG口调试也是ARM开发的一种理想选择。但当ARM电路板装入整机投入真正的使用环境后, 当用户对ARM软件功能或性能提出新的要求时, ARM软件的更新维护如果仍然通过JTAG调试口, 将较大的提高维护成本。本文提出一种通过RS232串口远程实现ARM软件的更新机制, 通过在ARM内部FLASH中植入一段bootloadr来更新应用程序和引导应用程序的运行。现以AT91SAM7S512为例, 对此更新机制的设计思想、设计方法及可靠性设计进行介绍。

2 设计思想

整个系统由三部分组成, 分别为ARM模块, 串口模块和上位机模块。通过串口建立上位机和ARM之间的远程通信, 系统框图如图1:

设计中将ARM芯片内部FLASH分为两块存储区域如图2, 一部分存放bootloader镜像文件, 一部分存放应用程序的镜像文件。

2.1 bootloader

bootloader是ARM芯片上电或复位后最先执行的程序代码, 利用此段代码可建立与上位机之间的交互, 实现应用程序的存储, 并将ARM操作地址跳转到应用程序入口。

2.2 应用程序

应用程序为ARM实际工作时的目标程序。

设计的工作流程为:先将bootloader镜像文件利用JTAG口烧写到ARM内部FLASH的第一部分。芯片上电或复位后, ARM总会自动进入bootloader, 通过bootloader判断是否有上位机发送的程序更新请求, 如果有程序更新请求, 则上位机将应用程序的镜像文件发送至ARM, 并利用bootloader将应用程序存储至ARM芯片内部FLASH的第二部分;如果没有更新程序请求, 则bootloader将ARM操作地址跳转到ARM内部FLASH的第二部分, 运行应用程序。程序设计的流程框图如图3。

3 设计方法

3.1 bootloader设计

bootloader的设计主要分为三部分程序设计模块:ARM和上位机交互模块, 存储应用程序模块和加载应用程序模块。

3.1.1 ARM和上位机交互模块

ARM和上位机之间的通过RS232串口通信, 主要完成的功能为:判断是否需要更新ARM的应用程序;接收上位机发送的应用程序镜像文件。

设计流程:ARM上电后, bootloader在一定的时间内判断是否需要更新应用程序, 如果需要更新则bootloader和上位机进行握手应答, 握手成功后上位机发送应用程序的镜像文件发送至bootloader, 发送完成后, bootloader对应用程序镜像文件的所有字节进行校验;如果不需要更新应用程序, 则bootloader将ARM的操作地址跳转到应用程序入口, 运行应用程序。

可靠性设计:ARM和上位机交互的可靠性主要体现在ARM和上位机之间的数据传输可靠, 防止出现误码、缺码现象, 因此两者必须建立健全的通信机制。本设计两者之间的通信方式采用应答方式, 即其中一个发出命令后, 另一个收到命令后必须给出反馈信息后, 才能进行下一步操作。除此之外两者之间传输的数据应包裹在一个完整帧内, 格式为:帧头+数据+帧尾+校验和, 数据传输过程中在任何一点出现错误, 应立即给出错误指示, 中止进行下一步操作。

3.1.2 存储应用程序模块

AT91SAM7S512芯片内部FLASH总大小为512Kbytes, 共有两个单元, 每个单元为256Kbytes。第一个存储单元的地址范围为:0x100000-0x13FFFF, 第二个存储单元的地址范围为:0x140000-0x17FFFF。每个单元均有独立的FLASH控制器, EFC0和EFC1。利用对FLASH控制器的操作, 可进行ARM内部FLASH的读, 写及擦除操作。现将应用程序的镜像文件存储在第二个FLASH单元中, 起始地址为0x140000。EFC1的基地址为0x FFFFFF00, EFC1的寄存器见表1。

设计流程:bootloader接收到应用程序镜像文件后, 将数据以一个PAGE (256字节) 的大小为一组依次写入AT91SAM7S512内部FLASH, 对AT91SAM7S512一个PAGE写操作的流程如图5所示。

可靠性设计:存储应用程序的可靠性主要体现在数据应完全正确写入AT91SAM7S512内部FLASH, 因此设计中在对每个PAGE进行写操作前和写操作后, 均需通过MC_FSR寄存器检查内部FLASH是否空闲, 除此之外在每个PAGE写完成后可增加适当的延时, 确保数据完全写入。

3.1.3 加载应用程序模块

加载应用程序模块的主要功能为将ARM的操作地址跳转到应用程序入口。

设计流程:ARM上电或复位后, 在一定时间内没有接收到更新应用程序请求后, bootloader将ARM的操作地址跳转到应用程序的入口地址0x140000, 运行应用程序。将操作地址跳转到0X140000地址处, 使用的汇编指令为:ldr pc=0x140000。

可靠性设计:加载应用程序模块的可靠性设计主要体现在bootloader能够准确、快速将操作地址跳转到0X140000处, 并且应用程序能够可靠运行, 不受bootloader的干扰。因此在bootloader设计中应禁止软件看门狗功能, 防止应用程序还未完全启动而系统自动复位;其次应严格设定bootloader判断是否有更新应用程序请求的时间, 最好控制在10ms内。

3.2 应用程序设计

在应用程序设计中, 为使bootloader成功加载到应用程序, 应用程序在使用编译器生成镜像文件时, 必须将编译器的ROM地址设置为0X140000。本设计采用的编译器为ADS1.2, 编译器的ROM设置如图6。

为保证应用程序的高速、可靠运行, 在应用程序设计中, 应将应用程序从FLASH中完全复制到SDRAM中, 本部分代码需在应用程序启动代码 (.S文件) 中完成。

4 结论

本文浅谈了通过RS232串口更新ARM芯片AT91SAM7S512程序的基本设计思想及设计方法。通过对一些关键点进行可靠性设计, 使设计具有较高的实用性, 能够直接应用到工程中。本设计思想具有一定的扩展性, 可以应用到多种微处理器中, 如单片机、ARM等。其次也可应用于多种接口中, 如RS422接口, CAN接口、以太网接口等。

参考文献

[1]杨宗德.嵌入式ARM系统原理与实例开发[M].北京:北京大学出版社, 2007.

[2]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社, 2003.

程序自动更新 篇6

1 背景综述

1.1 主要程序更新方式

目前, 除了通过仿真器或烧录器更新程序方式, 还有Bootloader技术、ISP技术以及IAP技术3种程序更新的方法:

1.1.1 Bootloader

引导加载程序, 是指系统通电时, 控制器将存储在外部非易失性存储器中的代码载入到内部高速存储器单元中执行的过程。

1.1.2 ISP (In System Programming)

在内部Bootloader程序段代码引导下, 通过外部硬件电路在程序代码没有运行时通过通信接口下载或擦除用户代码。

1.1.3 IAP (In Application Programing)

IAP是指在应用编程, 即在程序运行时编程。在程序运行时编程是指利用片内程序运行时更新Flash数据的方法, 就是利用代码对片内Flash存储器进行擦除/编程。在外部硬设的作用下, 动态的, 在用户程序运行时进行程序更新。这种下载方式是利用片内的一小段代码往程序寄存器里写入数据或更新数据实现程序代码的下载。实际上单片机的ISP下载方式也是基于IAP技术实现的, 即在单片机出产前往芯片内部的固件中烧录一段boot程序, 通电后程序开始运行时, 芯片检测到上位机有下载请求后便开始与上位机建立通信, 然后将数据下载到数据存储区。

1.2 STM32系列简介

STM32微控制器在ARM Cortex-M3内核的基本架构上作出了改进。STM32增加的Thumb2指令集代码密度的聚合度、大幅度提高嵌套向量中断控制器中断响应的紧耦合, 使处理速度显著提升也降低了系统功耗。用户可以把代码容量降低45%、所需内存容量降低了一半。此外, STM32还提供了丰富的外围接口, 常见的有多通道ADC、TIM、USB控制器以及I2C、SPI、CAN等总线接口。还配备了低电压检测器、时钟安全管理和看门狗定时器等硬件来提高STM32处理器的可靠性。

2 IAP技术

2.1 IAP技术原理

如图1所示, STM32上电复位后从复位向量表中取出复位中断向量的地址, 跳转执行复位中断服务程序, 执行IAP的main函数, 如图标号①所示。执行完IAP主函数后, STM32内部写入新程序, 跳转到新程序的复位向量表中取出复位中断向量地址, 跳 (转下页) 转执行复位中断服务程序, 执行新程序的main函数, 如图标号③所示。新程序的main函数是一个死循环函数, 且STM32的两个中断向量表在芯片内部存储区位置不同。

新的main函数执行过程中, PC指针在新的中断请求下不是跳转到新程序的中断向量表中, 而是跳转到0X08000004地址处, 如图标号⑤所示;程序会根据中断源程序跳转到相应的中断服务程序, 如图标号⑥所示;中断服务程序执行完成返回main函数, 如图标号⑧所示。

对上述过程的分析我们得知在STM32中写入IAP程序时, 用户代码要在IAP程序偏移量为X的地址后面写入数据, 并且当中断向量表移动时, 移动的偏移量为x。

2.2 IAP技术关键点

通过IAP程序下载过程的分析, 程序更新时PC指针在启动区移动, 在完成程序代码烧入存储区时不允许跳到正常的存储区域, 并结合微控制器原理应注意五个要点。

2.2.1 禁止中断

中断会使指针跳转到中断服务程序, 故在进入boot启动区需要禁止所有中断。如定时器、Sys Tick、A/D、外部I/O等中断方式。

2.2.2 禁用底层外围接口

对于一些外围接口的使用, 如ADC+DMA多路A/D采样, 采样过程将与A/D采样预设置通道序列一致。进行程序更新时 (PC指针跳转到引导区前没有被禁用) , 当程序跳回到常态存储区运行时存储通道的值会发生错位。

2.2.3 使用实时操作系统

实时操作系统具有不同的特点, 在运行时只有禁止所有任务和屏蔽信号量, 才能有效避免PC指针跳转到常态存储区。代码设定跳转地址:

2.2.4 使用看门狗

使用芯片时容易忽略看门狗启用导致PC指针跳转, 一般芯片看门狗一旦使能就不能禁用, 可以通过在Boot区中加入看门狗的喂狗指令。特别要注意的是, 当对片内进行数据擦除或Flash数据更新时, 可以定量分析其过程需要的时间, 同时也可以在这个过程中喂狗来解决问题。代码实现喂狗并执行跳转:

2.2.5 存储空间分配

人为设置程序boot引导区码存储代码量大小, 减少占用的存储空间, 使底层接口尽可能减少中断的使用。boot引导区程序代码要求简洁、及时的喂狗, 避免使用复杂的驱动算法。

2.3 IAP的实现

单片机的内部存储器分为两种:一种为启动区 (boot) , 用来存储IAP功能代码;一种为常态存储区, 用来存储除其他功能用户程序代码。MCU在运行时IAP程序 (PC) 指针不断指向执行程序指令的位置。在正常运行时, PC指针只会在常态存储区中移动读取指令, 如图2所示。当用户更新程序, 程序指令将PC指针指向引导区。更新存储区指令码的功能是通过通讯方式接收用户需要更新的程序数据, 并通过检验接收的程序数据是否正确, 根据协议将程序代码写入常态存储区, 如图3所示。程序更新完成后PC指针跳回到常态存储区, 执行用户程序, 实现更新程序的功能。

3 IAP的应用

随着电子科技的不断发展, ST公司推出的STM32系列微控制器高性能、低成本、低功耗使其在工业控制、消费电子、手持设备、汽车电子、安防监控等领域得到了广泛的应用。当产品电路板被外壳层层封装, 或者安装在狭窄空间等难以触及的地方后, 我们很难对其进行程序更新, 这时候IAP技术就可以解决这个问题。在中国“三网融合”的总体趋势下, 未来几年, 中国数字电视、电子游戏机等消费类电子产品和高端家电市场需求增加, 再加上工业部门持续增长, 将拉大对16、32位高端MCU的需求。

在此背景下意法半导体 (ST) 推出新款以绘图功能为主轴的STM32微控制器, 应用在便携式或可穿戴式消费电子产品, 智能建筑和工业控制器, 智能设备, 个人医疗设备和定点照护医疗设备的应用[1]。而这些系统产品对封装要求极高, 如果产品出现问题利用传统技术就能拆卸产品, 这样产品的售后就成了很大的问题。因此, 传统下载技术已经不能满足产品维护的要求, 这给IAP下载提供了市场需求。

4 结论

IAP技术是微控制器通过通信接口对正在运行的程序进行更新的技术, 它与ICP或ISP有区别。ICP是通过在线仿真器对单片机进行程序烧写的技术而ISP则是通过单片机内置的Bootloader程序引导的烧写技术。ICP和ISP都基于外部硬件和特定接口的实行操作, 如连接下载线、设置跳线帽, IAP下载技术是在片内先烧入一段IAP程序, 这段代码负责与上位机软件进行握手同步, 然后通过外围通信接口从上位机软件程序接收发送数据请求后, 在片内指定的内存区域内存储数据, 然后跳转到执行新的编写程序, 从而实现程序的更新。这是其他下载技术无法做到的, 如果使用远距离或无线的数据传输方案还可实现远程编程和无线编程。

摘要:通过分析程序更新过程介绍如何利用IAP技术实现用户程序的更新。如果在Boot区中加入TCP/IP协议, 那么在技术上就可以实现网络对产品进行在线升级, 这样提高系统可维护性同时还可降低产品的维护成本, 在未来得到广泛的应用。

关键词:ST,STM32,IAP,程序更新

参考文献

[1]施莳颖《.科技》意法STM32微控制器, 支援穿戴式装置、智慧家电[J/OL].台北:中时电子报, 2016, 3, 3.

[2]蒙博宇.STM32自学笔记[M].第二版.北京:北京航空航天大学出版社, 2014.1:419-430.

医院系统客户端的自动更新 篇7

根据医院工作的特点,医院信息系统(HIS)软件选用C/S模式[1]。HIS子模块较多,各模块之间相互调用,个性化比较强,并且经常提出应用需求,为此要经常修改操作界面或者增减模块,这是B/S模式不能满足的;医院需要打印电子病历、化验单、检查单、挂号单、申请单等各种不同的书面材料,需要系统很好地与打印机连接,B/S模式在打印功能方面也有些欠缺。尽管C/S模式有很多优点,但还是不能很好地适应医院各种繁杂的维护工作,而B/S模式的更新、维护工作都很方便。为此,我们可以设置一个自动更新软件来弥补[2]。因为B/S模式可以说是基于特定通信协议(HTTP)的C/S架构,医院软件基础是C/S模式,有少部分需要与B/S模式共同完成,并不是绝对的C/S模式。

1 设计思路

软件自动更新有两种方法:① 在局域网内自动更新[2],此方法是利用局域网内已知计算机用户名和密码,通过访问文件服务器的共享文件,再把里面的程序COPY到本地硬盘进行覆盖,此时如果用户没有使用新的版本,这种方法容易造成数据的不一致;② 利用FTP服务器下载文件更新,在同一个局域网内,通过在服务器端存放版本信息文件(.up文件)内部的参数设置文件(ini文件)来判别软件的版本信息,实行自动更新。

根据医院客户端多、容错率低、要求数据一致性的特点,我们选用利用FTP服务器下载文件这种方法,及时有效地解决了系统软件更新问题[3]。

我院现信息系统大多是基于PB开发,为了提高兼容性,我们仍选用PB来开发本地客户端的自动更新程序[4]。

2 实现方法

2.1 外部参数文件的设置

更新程序需要有存放参数的配置文件(建立connect.ini文件),存放FTP服务器的IP用户名及版本号。根据实际情况设置verson和runname (版本号和需要更新的.exe程序[5,6]),实例如下:

意思就是通过端口21 访问FTP服务器,更新护士站nurse.exe文件,版本号为v.1.0.0.2。

2.2 服务器端设置

在FTP服务器的根目录下设置一个名为bv1.0.0.2.up的文本文档文件,其中.up是不可以修改的,而文件名的第一个字母是a~z之间的任意字母标注,当首字母为a时,更新程序会读出这个文件内的第一行,并以消息盒的形式呈现给用户。

在FTP服务器用户的根目录下存放需要更新的文件列表。其中,要在客户端删除的文件用“-”号开头;在后面加上相对路径,用“+>”表示要更新到客户端的哪个路径下(相对路径),“+”号表示从FTP服务器端的哪个文件下更新。具体实例如下:

-temperature.pbd

//删除客户端的outsys.exe文件

+>temperature.pbd

//添加到客户端out1sys.exe文件

+update nursetemperature.pbd

// 文件源是FTP服务器上的update nurse文件夹下的temperature.pbd文件

2.3 程序设计

打开pb9.0 建立工作组workspace,添加应用application,设置Global Variables的如下全局变量[3]:

string rnewtitle="系统自动更新程序"

//自动更新界面的title

string newfilename="sysup.txt"

// 上面提到的在FTP服务器中的bv1.0.0.2.up文件会更新此文件名放在客户端程序根目录下。

然后建立更新窗口w_renew(图1):

在窗口上建立st_1 文本框用来显示更显得版本号,显示窗口w_renew的open事件代码如下:

st_2.text=" 本程序已经有了新的版本,新版本号是:"+version+",请选择:"

this.title=rnewtitle

最后建立commandbutton命令按钮,用来实现软件更新操作,主要说明开始更新调用FTP服务器的单击click事件:

(1)定义变量和链接服务器:

int li_step,li_rtn,li_i=0,i=1,j=1

string s_temp=""

string oldname[100]

string newname[100,2]

long ll_connect //FTP句柄

ll_connect = n_FTP.uf_FTPconnect(FTP_ip,FTP_name,FTP_pass,FTP_port) // 联接FTP

(2)建立函数(Functions):

//Uf_sethpb(strings s_ts,integer i_jd)returns(none)

st_1.text=s_ts+string(i_jd)+"%"

hpb_1.position=i_jd

Return

(3)删除文件:

//此处可以先对旧文件进行备份,最后再删除。

li_step=30//随便定义一个整型

uf_sethpb(" 正在删除旧的文件.......... ",li_step)// 显示到进度条上

int k

k=1

do while k<i

li_step=li_step+30/100 // 从30% 开始加载

uf_sethpb(" 正在删除旧的文件.......... ",li_step)

if oldname[k]<>"" or isnull(oldname[k]) then// 不管oldname是否为空都删除

File Delete(oldname[k])

end if

k++

loop

(4)更新文件:

li_step=60

uf_sethpb("正在下载新文件..........",li_step)

k=1

do while k<j

li_step=li_step+40/100

uf_sethpb(" 正在下载新文件.......... ",li_step)

if newname[k,1]<>"" or isnull(newname[k,1]) then

if n_FTP.uf_FTPgetfile(newname[k,1],newname[k,2])then

end if

k++

loop

li_step=100

uf_sethpb("更新完毕!",li_step)

(5)更新完毕是否开启新系统:

li_rtn=Message Box(" 询问"," 系统成功更新是否启动系统?",question!,yesno!,1)

if li_rtn=2 then

close(parent)//直接关闭

else

run(runname)

close(parent)//开启新系统再关闭

end if

3 结论

在实际工作中,我们还注意到网络的负载能力和单机的负载能力,并在这方面采取了一些措施。比如:将客户端进行分组,在软件更新时间上进行交错(先外科后内科或者先住院部后门诊)[7]。

自动更新系统上线后,给我院的系统软件实施工程师带来了极大方便,使全院的软件更新维护工作轻松了很多,特别是以前对于一些限制人员进入的科室,如ICU、新生儿科、透析室、妇产科这些科室,现在每个科室只要装个更新软件,就可以自行更新,不但方便了大家的工作,更提高了工作效率[8]。

摘要:目的 实现整个医院局域网内基于C/S架构开发的软件的自动更新。方法 针对C/S模式软件更新不方便的问题,设计一种在同一局域网内基于FTP协议的客户端自动更新方案,并利用Power Builder9.0完成软件的开发和测试。结果 实现了医院局域网内各客户端对C/S架构软件的自动检测与更新。结论 此软件的应用大大减轻了医院局域网的维护工作,提高了工作效率。

关键词:医院局域网,程序自动更新,FTP,C/S模式

参考文献

[1]顾希,曹鸣.软件自动更新的两种方法[J].医疗卫生装备,2005,26(2):38-39,48.

[2]徐国宝.B/S模式和C/S模式信息协同管理系统的研究与应用[D].广东:广州,广东工业大学,2014.

[3]赵卫绩,刘井莲.基于FTP协议的客户端自动更新程序的设计与实现[J].科学技术与工程,2010,10(34):8591-8593.

[4]王超.基于Power Builder应用程序的设计[J].数字技术与应用,2014,(4):153-154.

[5]周芮.医院信息系统自动升级的实现[D].吉林:长春,吉林大学,2006.

[6]贺广新.c/s模式下客户端软件自动升级的设计与实现[D].陕西:西安,西安电子科技大学,2013.

[7]王鹏,孟媛.局域网内软件的自动更新[J].医疗卫生装备,2009,30(9):49-50.

通用软件自动更新平台构建研究 篇8

随着桌面应用程序新版本的不断发布, 客户端运行的版本也越来越杂, 版本、数据结构的兼容也成为后续开发必须考虑的问题, 而且兼容性方面的问题越来越多, 开发及维护成本越来越高。

2问题的分析

随着因特网的普及, 通过网络来实现桌面应用程序的更新升级已经成为可能。在程序中加入在线更新的功能将能有效地解决前面讨论的版本维护难题。

关于通信协议, 可以编写程序实现Socket通信, 也可以采用比较成熟的HTTP协议。考虑到诸多因素, 笔者选择了HTTP协议。

3 HTTP协议特点

HTTP协议 (超文本传输协议) 的主要特点可概括如下:

(1) 简单快速:客户向服务器请求服务时, 只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。

(2) 由于HTTP协议简单, 使得HTTP服务器的程序规模小, 因而通信速度很快。

(3) 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

(4) 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求, 并收到客户的应答后, 即断开连接。采用这种方式可以节省传输时间。

(5) 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息, 则它必须重传, 这样可能导致每次连接传送的数据量增大。另一方面, 在服务器不需要先前信息时它的应答就较快。

另外, 笔者在实验中发现很多网络都设置了防火墙, 考虑到安全问题, 网络管理员会屏蔽很多端口。而对于HTTP最常用的80端口通常是开放的, 这也是笔者选择HTTP协议的一个重要因素。

4数据流程及数据结构

实际应用中可以对流程进行扩展, 例如自动程序线程定时启动、开始更新前检查上次留下的缓存、断点续传等。

该平台中有多个软件产品, 存储在U_Products表中。每个软件产品有多个用于客户端验证的序列号, 存储在U_Clients。序列号是客户端的凭证, 只有授权了的序列号才能访问平台。而且序列号表还标出了该序列号允许升级的版本范围。同时, 每个软件产品对应的多个文件, 通过服务端脚本输出一个文件列表。客户端连接上服务器后首先要做的就是下载属于它的文件列表。

文件列表用于比较客户端文件与服务器上的各个文件的新旧。其中的时间戳是主要比较字段, 文件名用于记录定位。

5客户端工作流程

需要指出的是表1列出的是基本的流程。实际中客户端工作流程会比表1复杂的多。

主程序启动之后, 创建自动升级程序的线程。该线程在后台运行, 首先读出产品的序列号, 通过URL参数传值的形式传到Web端。此处传值可以更加灵活, 可以在用户允许的前提下, 将更多的信息传给服务器。例如当前软件版本, 客户端操作系统版本, 客户端计算机硬件信息等等。

运行在Web端的脚本响应请求, 判断序列号是否合法, 即序列号是否正确, 是否过期。通过之后输出与该序列号对应的软件的所有文件列表。

自动升级程序开始通过HTTP协议下载这个列表。下载完毕后读出上一次升级之后, 保存下来的文件列表, 并与下载下来的列表进行对比, 通过时间戳对比找出新文件。通常只要时间戳不一样就将文件加入的需要下载的文件列表中, 也可以采用时间戳转成浮点数后大小对比的策略。例如平台中放的是稳定的正式版, 而有些客户端已经通过其他途径得到新版本更高的测试版。第二种策略就可以避免高版本文件通过升级之后版本降低。这也是为什么采用时间戳, 而不是文件MD5唯一哈希值的原因。

得到新文件列表之后, 再次通过HTTP协议逐一下载新文件到缓存目录中。下载新文件的URL由文件编号和序列号共同确定。每下载一个文件, 更新一次本地的文件列表。这样如果出现网络中断, 用户退出等异常, 下次启动可以跳过已经下载过的文件。虽然这不是严格意义上的断点续传, 但在一定程度上提高了程序的容错能力。

数据全部下载完毕之后询问用户是否立即应用更新。如果是则退出主程序, 将缓存文件夹中的文件移动到主程序所在的目录中, 并覆盖。否则保持缓存中的文件, 供下次升级使用。

6改进及结束语

网络状况很差的时候更新所需要的时间很长。对于该问题, 可以对文件进行逐个ZIP压缩, 通过HTTP协议传输压缩流, 而不是文件本身的数据流。客户端下载之后进行解压缩。此处是对文件逐个压缩, 而不是整体打包。因为整体打包之后会出现客户端只需要更新一个文件而不得不下载整个压缩包的情况。而且整体打包也对断点续传提出了更高的要求。

另外出于某种原因的考虑, 有时需要更多考虑数据安全。例如未授权的序列号不能获得新版本的文件, 且一个序列号只能对应一个客户端。对此可以采用动态序列号的方式, 即下载完文件列表时或更新结束时, 都将原有的序列号作废, 动态创建一个新的值。

另外对于重大缺陷的修复更新, 更希望能强制更新。对此可以在自动更新程序发现更新时, 强制停止主程序的响应。通过这一策略甚至可以做到所有的新版本发布之后, 客户端迅速跟进, 并全部更新到最新版本。

笔者使用微软的C#语言来实现, 经过反复测试, 发现ZIP压缩之后, 对网络要求低了很多, 更新效率提高很多。通过动态序列号及强制更新策略也基本能保证客户端版本可控。

参考文献

[1]C.J.Date.数据库系统导论[M].北京:机械工业出版社, 2000.

[2]殷人昆.数据结构 (用面向对象方法与C++描述) [M].北京:清华大学出版社, 1999.

《交通气象站》数据自动更新的实现 篇9

关键词:交通气象站,气象数据,大洋非编

1、引言

中国气象频道在各省落地插播是中国气象局一方面为了让当地百姓更广泛地了解气象方面的知识, 另一方面是让各省能够提供一个全天候发布各类气象信息服务于民生的专业化电视频道, 更是解决预警信息覆盖最后一公里的不可或缺的传播手段之一, 《交通气象站》作为一档预报我省主要高速公路分段预报、能见度预报以及安全出行温馨提示的节目, 用到气象自动站、精细化预报、预警信息、交通气象预报等数据, 为了自动处理数据需编写程序处理转换相关数据使之为大洋非编系统和字幕机能够识别处理的文本文件。

2、原始数据介绍

2.1 精细化预报产品文件格式

精细化预报产品为ASCII文件, 每个文件可以由一份或多份公报组成, 每份公报的格式如下:

产品描述

产品代码、预报的起报时间年月日时 (世界时)

总站数

(第一个站) :站号, 经度 (度) , 纬度 (度) , 海拔高度, 时效个数 (时效可扩充) , 预报产品个数 (预报要素可扩充)

003预报结果………

006预报结果……………………

(第n个站) :站号, 经度 (度) , 纬度 (度) , 海拔高度, 时效个数 (时效可扩充) 、预报产品个数 (预报要素可扩充)

003预报结果………

006预报结果……………………

NNNN

每个预报时效预报要素包括温度、相对湿度、风向、风速、气压、降水量、总云量、低云量、天气现象、能见度、最高气温、最低气温、最大相对湿度、最小相对湿度、24小时累计降水量、12小时累计降水量、12小时总云量、12小时低云量、12小时天气现象、12小时风向、12小时风速。

2.2 气象自动站报文格式

福建省气象自动站数据为顺序数据文件, 有3条记录, 第1条记录共6组, 每组用1个半角空格分隔, 包括区站号、纬度、经度、观测场拔海高度、气压传感器拔海高度和观测方式, 第2条记录共52个要数值, 每组用1个半角空格分隔, 按排列顺序及长度分配, 包括观测时间, 当前时刻的2分钟平均风向、风速, 当前时刻的10分钟平均风向、风速, 每一小时内10分钟最大风速的风向、风速, 每一小时内10分钟最大风速出现的时间, 当前时刻的瞬时风向、风速, 每一小时内极大风速的风向、风速, 每一小时内极大风速出现的时间, 每1小时内的雨量累计值, 当前时刻的空气温度, 每1小时内的最高气温, 每1小时内最高气温出现时间, 每1小时内的最低气温, 每1小时内最低气温出现时间, 当前时刻的相对温度, 每1小时内的最小相对温度值, 每1小时内的最小相对温度出现的时间, 当前时刻的水汽压值, 当前时刻的露点温度值, 当前时刻的本站气压值, 每1小时内的最高本站气压值, 每1小时内最高本站气压出现的时间, 每1小时内的最低本站气压值, 每1小时内最低本站气压出现的时间, 当前时刻的草面 (雪面) 温度值, 每1小时内的草面 (雪面) 最高温度, 每1小时内草面 (雪面) 最高温度出现时间, 每1小时内的草面 (雪面) 最低温度, 每1小时内草面 (雪面) 最低温度出现时间, 当前时刻的地面温度值, 每1小时内的地面最高温度, 每1小时内地面最高温度出现的时间, 每1小时内的地面最低温度, 每1小时内地面最低温度出现的时间, 当前时刻的5CM地温值, 当前时刻的10CM地温值, 当前时刻的15CM地温值, 当前时刻的20CM地温值, 当前时刻的40CM地温值, 当前时刻的80CM地温值, 当前时刻的160CM地温值, 当前时刻的320CM地温值, 每1小时内的蒸发累计量, 当前时刻的海平面气压值, 当前时刻的能见度, 每1小时内的最小能见度, 每1小时内最小能见度出现时间, 第3条记录为小时内的分钟降水量, 120个字节, 每分钟2个字节, 即1—2位为第1分钟记录, 即3—4位为第2分钟记录……, 如此类推, 119—120位为第60分钟的记录;每分钟无降水时存入“00”, 微量存入“, , ”, 降水量≥10.0mm时一律存入99, 缺测存入“//”。

2.3 交通气象预报文件格式

交通气象预报为Word文档, 格式如下:

该预报文件对我省主要的七条高速公路 (沈海高速 (G15) 、福银高速 (G70) 、宁武高速 (G1514) 、浦南高速 (G3) 、泉三高速 (G72) 、漳龙高速 (G76) 、永武高速 (G25) ) 各路段做预报。

3、大洋非编系统配置介绍

大洋非编城市天气故事板每个频道栏目对应一个配置文件 (气象预报配置文件.inf) , 此文件内容包含该城市天气故事板主要使用的公共参数和需要引用到的其他配置文件信息, 包括气象电码格式说明.cft、节目城市配置.dat、气象电码对照表.dat、气象预报选项.dat、气象图像库.dat五个文件。这些配置文件除气象电码对照表.dat对所有故事板通用外, 其它都要根据具体的节目情况进行具体配置。

4、程序实现数据处理

由于大洋非编系统只能识别标准的天气预报代码文件, 这就要求将自动站数据、精细化预报代码转换为标准的天气预报代码文件。气象自动站数据主要读取站点名、温度、风力、风向和湿度等几个要素, 目前实现气象自动站数据每小时自动更新, 因气象自动站数据自动传输, 由于设备或通讯故障造成数据错误, 比如当前时次无数据, 夏秋季温度出现零摄氏度, 无降水的天气出现大量降水的数据等等, 对于无数据情况, 程序自动将无数据站点抛弃, 对于雨量值程序能根据自动站经纬度取相邻的四个站点的雨量值判断该站点数值是否在合理值范围内, 若出现疑似错误数据, 给出错误提示, 待人工判断数值是否正确, 若是错误数据则本时段不播出该站点数据, 程序也可设置自动丢弃该疑似错误数据, 待下个时次继续读取判断。

精细化预报数据主要读取站点名、天气、温度等信息, 目前每天更新三次, 当程序读取到最新文件时即自动处理生成标准的气象代码文件和字幕机可调用的文本文件, 字幕机将调用的文本文件进行文图转换, 将数字代码翻译成让观众可识别的文字和天气图标信息。

预警信息文档根据省台重要天气信息报内容, 去掉文件编号、签发人等信息, 只截取中间主要预警信息内容段落, 同24小时站点预报数据一起在一字屏上滚动播出。

九地市九指数数据为每天早上各地市上传数据, 程序能定时读取服务器上相关目录下文件只要有最新数据就给出提示, 直到所有九地市九指数数据都到齐后停止扫描。

交通气象预报文档为Word格式文档, 程序处理主要难点在于对Word文档读取并按照相应表格顺序处理数据。使用Delphi提供的Servers控件调用Word, 并使用Word的属性, 读取表格内数据到内存中, 再根据读取的数据生成大洋非编和字幕机可调用的文档。

程序实现各数据在《交通气象站》节目中所示位置如下图所示:

5、小结

上一篇:综合抽放技术下一篇:想象作文的训练方法