吕 滔,邓玉娇,陈兰英,蒋 阳
(中国核动力研究设计院 核反应堆系统设计技术重点实验室,成都 610213)
安全级DCS软件分为固件及工程组态两部分。固件是写入EROM或EEPROM中的程序,是一个系统最基础、最底层工作的软件,应用软件要在固件的基础上运行。本文提到的模块软件下装工作仅针对固件,也可称为嵌入式软件。安全级DCS模块软件开发与普通软件有所不同,如GB 12172《核电厂安全级系统计算机软件》中,通过控制和降低软件复杂度,确保软件运行行为的确定性[1]。因此,即使当前已有很多关于固件更新的方案[2],均需要经过充分的验证后,才能用于安全级DCS。安全级DCS平台目前还处于传统的直接将下载线插入JTAG插座进行软件下装的方式,基于现有模式,探索一种简单高效的方式,提升模块软件的下装效率,保证产品质量。
表1 芯片下装方式Table 1 Chip download method
嵌入式芯片的软件下装方式分为ICP(In Circuit Programing)在电路编程、ISP(In System Programing)在系统编程、IAP(In Applicating Programing)在应用编程3种。ICP为板级电路下装,不需要通信协议,可通过电路直接将软件灌入芯片中;ISP方式需要在芯片内部预先烧录可执行Bootloader程序,这是利用系统级的通信将软件传输到芯片,相对于ICP更方便,但第一次下载会比较复杂;IAP是在ISP的基础上进一步优化,芯片内有可执行的应用程序。因此,在支持网络通信的情况下,可以通过网络获取软件,进行在线升级。
这3种下装方式方便程度不同,但均区别于传统的预先烧录程序再装上电路板的方式,可以在芯片焊接到电路板以后再进行灵活的编程调试。本文不再就这3种方式的具体细节进行展开,仅对它们的特点进行简单的对比。
IAP方式可支持远程在线更新,因其使用方便,目前在商业领域已广泛应用。如手机的固件更新,不需要厂家额外提供任何硬件支持,只需要手机在有网络的环境下进行固件下载更新即可。但安全级DCS的所有软件均为自主开发,受开发周期等因素制约,目前仍使用第1种以实现最简单的ICP方式,即通过专用下载器连接板上下载口进行下装。
在ICP的下载模式下,每次更新程序时需要将模块外壳拆开,连接板上的JTAG插座进行软件下装。基于现有安全级DCS平台,其内部不止一个芯片,下载完一个芯片后还需要切换下载口再进行一次下装,以安全级DCS某模块为例,软件下装具体流程如图1所示。
图1 模块软件下装流程图Fig.1 Flow chart of module software download
从图1可以看出,用这种方式进行下装,每次更新程序都需要将模块拆开,再挨个逐一按程序进行下装,这样手动操作复杂,效率低下。
从实践中发现,软件下装的很多操作都是简单重复的动作,如果可以实现自动化、批量化操作,可以大量节省时间。但下载口插拔、切换、外壳拆装都受到下载接口在模块内部的因素制约,因此下载接口引出是实现批量化下装的关键,可以避免模块外壳拆装、下载线插拔等非必要的操作。
DCS系统采用模块化的设计,从前面插入功能模块,后面引出信号,模块故障时只需将模块拔出更换即可,不用重新接线。基于此特点,模块的下载口可以通过后面引出,每次进行软件下载时,不用再进行下载线的插拔动作,这种方式可以避免拆壳与下载线的插拔,节省大量时间,提升下装稳定性。图2为下载口引出的示意图。
图2 下载接口引出示意图Fig.2 Schematic diagram of download interface lead
针对多模块下装的问题,初步提出了3个方案。方案一为多个下载器对多个芯片进行下载,方案二为下载完成后由下位机自动切换下载接口,方案三为JTAG链式配置[3]。如图3所示(实际模块内部有两个相同芯片,示意图仅展示一个芯片的情况,下同)。
图3 批量下装方案Fig.3 Batch downloading plan
1)多个下载器
准备多个下载器,将下载器一个个与芯片连接进行下装,此方案最原始也最简洁。但必须使用专用的下载器与下载软件,且下载器价格不菲,在几百到几千不等,单纯地增加下载器需要增加不少成本。仅5张模块就需要10个下载器,如此多的下载器缠在一起,线路上容易混杂,出现问题时需要逐个进行排查,软件操作上也会变得复杂,可能会出现部分模块软件更新遗漏。
2)切换下载口
同一时间只能对一个芯片进行下装,下装成功后切换到下一个芯片继续下载,中途无插拔模块的等待时间。此方案不能直接提升太多的效率,需要单独开发专用的下位机软、硬件与上位机软件进行支持。但因为不用手动干预,中途可以腾出时间做标识整理等其他相关工作,也可一人操作多台设备来提升效率。此方案的缺点为有下载口切换失败的风险,开发工装时需要做好切换成功确认的反馈机制,保证下装的稳定性。
3)JTAG链式配置
现大多数芯片均支持JTAG接口下装软件,可将芯片的JTAG以菊花链的形式连接起来拓展,只需通过一个接口便可以对所有的芯片进行软件下装,下装时接线数量少,简洁美观。虽然串联会不稳定,但下装失败即所有模块下装失败,省去了逐一进行下装结果确认的步骤,反而有利于下装结果的判断。它的缺点是JTAG链必须保持完整,且JTAG链不能无限扩展。
经过综合比对,决定尝试最为简单高效、开发难度低的JTAG链式配置方案。选用此方案需要对JTAG链可扩展数量进行确认,并且需要在模块数量发生变化时同样保持JTAG链路的完整性。
以安全级DCS平台某模块为例,每个模块内有两个EPM2210芯片,尝试以5张模块共10个芯片进行菊花链串联。经过测试后,5张模块可以稳定进行软件下装,基本能满足软件下装效率提升的要求。对于JTAG链完整问题可采用手动切换的方式,因为生产环节一般为批量下装,模块数量基本都会大于5张,所以切换频率不高,对软件下装影响不大。如果需要集成自动化,可以考虑换成模拟开关切换,需要注意的是选择模拟开关时要关注开关内阻,内阻过大会影响信号传输。
批量下装方案主要包括硬件与软件两部分。硬件上只需要将下载接口按线序连接好即可,需要做的设计较少;软件上需要做一个界面进行简单配置,不直接使用原生烧录软件进行操作,避免了复杂的操作,保证下装操作的正确性。
3.2.1 硬件设计
JTAG(Joint Test Action Group,联合测试行动组)是一种国际标准测试协议(IEEE 1149.1兼容)。标准的JTAG接口是4线——TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。在使用时,将TMS、TCK并联连接接口,TDI、TDO是串行数据接口,下载时将所有芯片的TDI、TDO串联起来即可完成菊花链的配置。
由于JTAG链必须保持完整,所以将10个芯片进行串联连接后,每次下装至少需要5张模块,否则链路不完整,无法下装。根据生产实际情况,一般生产过程为批量软件下装,一般工单数量都会大于5张,所以切换频率并不高,因此直接采用多档位的旋钮开关方便手动切换,模块数量变化时通过旋钮即可轻松切换,不用重新进行接线。连接示意图如图4所示,根据模块数量(x)的变化,将S触点与Dx连接,即可使JTAG链路完整。
图4 下载接口引出示意图Fig.4 Schematic diagram of download interface lead
3.2.2 软件设计
1)TCL脚本
如果直接使用原生烧录软件进行下装操作,每次都需要根据芯片数量重新配置下载文件,存在操作失误的隐患。EPM2210芯片下载使用的软件为QuartusⅡ[4],该软件支持TCL(Tool Command Language)控制[5],因此可以使用脚本对QuartusⅡ进行操作,从而实现软件下装工作。
TCL是一种非常简单易学的语言,能够快速上手,几乎能在所有的环境下运行,通用性好,因此用来编写一些短小的脚本语言非常适用。
QuartusⅡ一段关于下装的指令如下:
quartus_pgm.exe -c USB-Blaster[0]-m JTAG -o"PV;%1%"。
各指令的含义为:
-c<jtagserver cable number>:选择下载器编号。
-m<programming mode>:下载模式。
-o<programming operation> :下载操作。
"PV;%1%":选择文件必须选一个参数;P<Program>:下载;V<Verify>:校验;%1为命令行的传递参数,最多支持0~9,共10个参数的输入,此处需要输入下装文件路径。如果需要在JTAG模式下进行多张模块下装,只需要将-o "PV;%1%"指令进行复制粘贴即可。
将指令编辑好后,存为扩展名“.BAT”的脚本文件即可直接运行,但实际使用时会根据下装文件的更改,脚本也需要随之修改。直接修改脚本命令存在改错命令等情况,操作不方便。因此,还需要开发一个可视化界面,固定不变的指令存入脚本,需要配置的信息由可视化界面完成,并下发给脚本。
2)可视化界面
界面设计采用QT,QT拥有友好丰富的界面库,用户可以从工具栏直接拖拽界面元素直接使用,而不用通过代码去实现,节省了大量的开发时间,可以快速开发软件。
界面软件向脚本传递参数部分代码如下所示:
QProcess*m_process;
QStringstr=QDir::currentPath()+"/Down/Script";//脚本路径
m_process->setWorkingDirectory(str);
QStringcommand=QString("%1/Altera%2.bat %3")
.arg(str)
.arg(i)
.arg(U_File);
if(m_process)
{
m_process->start(command);
m_process->waitForFinished(TIMEOUT);
}
这里根据下载芯片数量不同,分别保存为“Altera1~Altera5”的脚本,上位机根据下载数量i选择不同的脚本进行调用,然后将下载文件“U_File”传入脚本进行下载。完成后的操作界面如图5所示。
图5 下装操作界面Fig.5 Download operation interface
经过软件优化,简化了操作,可以有效避免软件下装过程中过多操作带来的人因失误,同时在一定程度上提高软件下装的效率。工装搭建完成后,经过一段时间的试用,验证了其下装功能的稳定性,在使用中明显提高了效率。改进后以5张批量下装,统计对比5张模块所用时间见表2。
由表2可见,经过改进,模块的软件下装效率得到了显著提升。模块不再进行拆装,不光节省了大量的时间,还减少了拆装过程对模块的损失,提升了模块软件升级过程中的产品质量。
表2 改进前后下装对照Table 2 Comparison of download before and after improvement
安全级DCS出于对安全问题等因素的考虑,其技术会有一定的局限性,有时会为了稳定性舍弃一定的便利性。因此,基于现有的平台技术特点,寻求简单可行的方案,低成本、高效地开发过渡性工装以解决安全级DCS模块软件下装效率低、风险大的问题,对安全级DCS产品生产效率提升与质量保证有着积极的意义。因为平台模块型号众多,各自使用的芯片不尽相同,软件下装方式也不完全相同,现只针对其中一种数量最大的模块进行试验,在适用稳定后,还会逐步探索,实现对所有模块软件的批量化下装。