本发明涉及的是分布式工业控制领域,特别是指一种基于WIFI与CAN总线的分布式工业控制系统中多机程序的远程在线升级方法。
背景技术:
传统的工业控制领域中对多机设备进行程序更新的方法大多为对每个单元进行单独的更新。复杂的工业环境和单一更新的方式使得程序更新效率大大降低,机器数量的增加对更新工作更是一种巨大的挑战。近年来,虽然出现了一些多机应用程序在线升级的方法,但是对引导程序BOOTLOADER的升级基本都是采用单一更新的方式。应用程序在线升级的方法也大多是基于某种单一的总线,因此程序的更新或是要到现场采用专用的转接器连接到总线对程序进行更新,或是不能精确对具体某一设备进行更新,又或是因为巨大的代码量使得更新时间大大加长。
技术实现要素:
本发明针对现有技术的不足,提出了一种基于WIFI与CAN总线远程多机程序升级方法。
一种基于WIFI与CAN总线远程多机程序升级方法,该方法具体包括以下步骤:
步骤一:系统上电后,在线的中转编号将会显示到PC机,用户根据需要决定对部分或所有中转下的单元进行更新,被选中的中转暂停当前工作转到升级模式,同时该中转所管辖下的相应下位机将接收到PC机下发的升级命令。
步骤二:根据用户提供的更新程序,决定是对应用程序部分升级或是全部升级,或是对BOOTLOADER程序进行升级,并选择相应的文件拷贝到PC机。为了缩短应用程序升级时间,通常在会将应用程序中某些相对独立且只读的大批量数据固定在一个地址范围,即程序段A,而其他的程序数据和代码则分配在另一个地址范围,即程序段B。第一次将应用程序全部升级后,后续的程序功能修改就可以选择只更新程序段B的部分程序升级方式。
步骤三:所有的下位机单元上电后自动进入BOOTLOADER并对应用程序进行校验,校验通过后由BOOTLOADER跳转到应用程序,否则等待更新。
下位机在运行应用程序时,如果PC机执行过步骤一和二时,下位机将接收中转模块转发的PC机命令,自动复位,进入BOOTLOADER,等待更新。下位机应用程序接收到PC机准备升级程序命令时,将对比程序自身校验码和PC机命令中的升级程序校验码,如果两个校验码不一致,则执行复位命令准备进行更新;如果两个校验码相等,表示下位机已经升级过该程序,则不执行复位更新命令。这样即可以避免同一个WIFI中转下某些已经升级过应用程序的下位机重复升级,减少下位机程序存储器的烧写次数。
步骤五:更新开始后,PC机将更新程序分成多段数据进行下发,中转每接收一段更新数据即进行校验。若是校验有误则请求上位机重新发送本段,否则将该段程序通过CAN总线发送到下位机。
步骤六:下位机每接收一段更新数据即进行校验,若是校验有误则通过中转请求PC机重新发送本段,否则将接收的更新数据写入下位机应用程序存储区,并请求发送下一段更新数据。
步骤七:PC机判断是否已经发送结束,若是结束则发送升级结束的标志,否则重复步骤五与步骤六。
步骤八:中转接收到升级结束的标志,恢复正常工作,同时下位机对接收的所有更新数据(升级后应用程序)再次进行校验,校验通过后则跳转到升级后的应用程序,校验不通过则上报PC机相应的下位机编号,重复步骤一到七。
对BOOTLOADER程序进行升级,具体包括如下三个步骤:
步骤1:需要先将下位机应用程序更新为特定的BOOTLOADER写入程序;该写入程序与普通的BOOTLOADER程序类似,不过其程序存放地址和更新程序时写入地址不同。如普通的BOOTLOADER程序地址范围为段A,更新应用程序时写入地址范围在段B;而BOOTLOADER写入程序的地址范围为段B,更新应用程序时写入地址范围为段A。在步骤二选择BOOTLOADER写入程序的更新文件后,按照步骤三至步骤八操作完成更新。更新完成后,下位机将启动BOOTLOADER写入程序,继续等待下一步程序更新。
步骤2:更新真正的BOOTLOADER程序,此时选择真正的BOOTLOADER程序更新文件,重复步骤三至八操作完成BOOTLOADER程序的升级。
步骤3:完成BOOTLOADER程序升级后,下位机当前的特定BOOTLOADER写入程序已不需要使用,可以将下位机的应用程序更新回正常的应用程序。
本发明的有益效果是:可以远程对下位机的部分或全部单元进行应用程序或引导程序BOOTLOADER的升级,而不需要亲临现场。采用中转与下位机双重校验的模式,同时可以对升级失败的设备进行单独定点升级,避免对总线上单个设备的升级而使得其他设备重复升级问题。采用分段更新的方式,可解决升级程序大小超出下位机内存可用容量无法一次更新的问题。采用程序分段设计的方式,仅对修改的程序段进行更新,避免单一修改全部更新的弊端,大大提高了更新的效率与成功率。
附图说明
图1:系统组成框图
图2:系统运行流程图
图3:BOOTLOADER更新流程图
具体实施方式
结合图1说明本实施方式。根据现场需求,将下位机之间通过CAN总线进行连接,同时每个CAN总线上连接有一个WIFI中转。在现场的适当位置安置工业无线路由器并且将所有WIFI中转与之相连。同时将路由器连接到互联网,PC机连接到路由器即可对下位机程序进行升级。
结合图2说明本实施方式,本具体实施方式:
步骤一:系统上电后,在线的中转编号将会显示到PC机,用户根据需要决定对部分或所有中转下的单元进行更新,被选中的中转暂停当前工作转到升级模式,同时该中转所管辖下的相应下位机将接收到PC机下发的升级命令。
步骤二:根据用户提供的更新程序,决定是对应用程序部分升级或是全部升级,或是对BOOTLOADER程序进行升级,并选择相应的文件拷贝到PC机。为了缩短应用程序升级时间,通常在会将应用程序中某些相对独立且只读的大批量数据(如点阵字库)固定在一个地址范围,即程序段A,而其他的程序数据和代码则分配在另一个地址范围,即程序段B。第一次将应用程序全部升级后,后续的程序功能修改就可以选择只更新程序段B的部分程序升级方式。
步骤三:所有的下位机单元上电后自动进入BOOTLOADER并对应用程序进行校验,校验通过后由BOOTLOADER跳转到应用程序,否则等待更新。
下位机在运行应用程序时,如果PC机执行过步骤一和二时,下位机将接收中转模块转发的PC机命令,自动复位,进入BOOTLOADER,等待更新。下位机应用程序接收到PC机准备升级程序命令时,将对比程序自身校验码和PC机命令中的升级程序校验码,如果两个校验码不一致,则执行复位命令准备进行更新;如果两个校验码相等,表示下位机已经升级过该程序,则不执行复位更新命令。这样即可以避免同一个WIFI中转下某些已经升级过应用程序的下位机重复升级,减少下位机程序存储器的烧写次数。
步骤五:更新开始后,PC机将更新程序分成多段数据进行下发,中转每接收一段更新数据即进行校验。若是校验有误则请求上位机重新发送本段,否则将该段程序通过CAN总线发送到下位机。
步骤六:下位机每接收一段更新数据即进行校验,若是校验有误则通过中转请求PC机重新发送本段,否则将接收的更新数据写入下位机应用程序存储区,并请求发送下一段更新数据。
步骤七:PC机判断是否已经发送结束,若是结束则发送升级结束的标志,否则重复步骤五与步骤六。
步骤八:中转接收到升级结束的标志,恢复正常工作,同时下位机对接收的更新数据(升级后应用程序)再次进行校验,校验通过后则跳转到升级后的应用程序,校验不通过则上报PC机相应的下位机编号,重复步骤一到七。
结合图3说明本实施方式,本具体实施方式:
若是对BOOTLOADER程序进行升级,比较通用的方法为如下三个步骤:
首先,需要先将下位机应用程序更新为特定的BOOTLOADER写入程序,该写入程序与普通的BOOTLOADER程序类似,不过其程序存放地址和更新程序时写入地址不同。如普通的BOOTLOADER程序地址范围为段A,更新应用程序时写入地址范围在段B;而BOOTLOADER写入程序的地址范围为段B,更新新的BOOTLOADER时写入地址范围为段A。在步骤二选择BOOTLOADER写入程序的更新文件后,按照步骤三至步骤八操作完成更新。更新完成后,下位机将启动BOOTLOADER写入程序,继续等待程序更新。
接下来,更新真正的BOOTLOADER程序,此时选择真正的BOOTLOADER程序更新文件,重复步骤三至八操作完成BOOTLOADER程序的升级。
最后,完成BOOTLOADER程序升级后,下位机当前的特定BOOTLOADER写入程序已不需要使用,可以将下位机的应用程序更新回正常的应用程序。