基于DL/T 645-2007规约的智慧开关APP升级上位机软件设计
2022-01-22马春雷于华东程显明杨连喜张宝
马春雷,于华东,程显明,杨连喜,张宝
(北京智芯微电子科技有限公司,北京,102200)
0 引言
随着智能电网建设的推进以及低压电器生产技术的不断发展,国家产业化调整给低压电器行业发展带来了新机遇。用电量的持续增长以及智能电网向更高水平发展,近几年适用于12至1250安培低压保护装置的塑壳断路器(Moulded Case Circuit Breaker,MCCB)的技术和性能有很多新的发展和动向[1]。塑壳断路器是电力系统的中流砥柱,对其智能化的提升一直都是控制领域的热点问题[2]。智慧开关属于“控制与保护开关电器”范畴,是低压电器中的新一代产品,它采用模块化的单一产品结构型式,将断路器、接触器、过载继电器、隔离器等主要功能于一体化的多功能电器[3],是传统的断路器、接触器、热继电器、熔断器等低压电器的最佳替代产品[4]。以智能化、模块化、可通信为主要特点的新一代智慧开关将成为市场主流产品。
由于使用过程中需求的改进或者应用程序BUG的修补,仍需要对智慧开关上的APP进行维护、更新,需要工程师到现场拆开壳体更新APP比较麻烦[5],而塑壳断路器的定期维护[6]和软件升级非常重要。
C#.Net框架是微软公司推出的应用软件开发平台,可以进行高效、高质量的Windows应用程序开发,得到了各个领域的广泛应用[7]。
为满足智慧开关软件现场升级需求,依据DL/T 645-2007规约基于C#编程语言设计一款人机交互上位机软件,实现了智慧开关内部APP本地和远程升级功能,提高了通信效率。
1 规约的格式和数据标识
DL/T 645-2007多功能电能表通信规约是为统一和规范多功能电能表与数据终端设备之间的数据交换而制订,成为用户和电网间双向通信的必要环节[8]。协议采用主从结构的半双工通信方式,电能表或其他计量设备为通信从站,并要求每个从站有唯一的地址编码[9]。
1.1 规约格式
主站主动发送信息给从站,而从站不会主动发信息,只是响应主站发送的请求信息。规定主站、从站之间数据传递的基本单位是字节,每个字节包含8位二进制码数据,传输时加上一个起始位,一个偶校验位,一个停止位,如图1所示。D0是字节的最低有效位,D7是字节的最高有效位,传输顺序为先高位后低位[9]。
图1 字节传输序列
1.2 数据标识
数据标识分别用 DI3、DI2、DI1和DI0代表四个字节区分不同数据项,每个字节采用十六进制编码。文件传输过程中只存在一个数据类别用DI3=06H,DI2=01H,DI1=05H来表示,DI0表示文件传输不同的属性。表1列出主站主动与从站交互传输文件的五种不同的属性。
表1 主站下发指令数据标识
表2列出了从站响应主站的五种属性。
表2 从站响应指令数据标识
2 主从交互及文件传输流程
主站(上位机软件)下发传输文件到终端设备,从站是指接收文件的设备(如智慧开关等)。主从交互是APP升级的关键环节,首先,上位机软件发送升级请求帧,下位机初始化正确响应上位机后进行文件写入,然后,文件写入全部完成后查询数据块保证文件传输完整,最后,进行CRC校验并执行升级,升级结束查询软件版本号。
如果是对多个从设备进行程序升级,首次升级时采用广播地址的方式进行,进行两个轮次的广播下发写数据升级命令。两个轮次广播下发完毕,查询从设备的软件版本号,如果有从设备升级失败则以单播的方式对升级失败的从设备进行不大于三个轮次的升级操作。
3 上位机软件设计
3.1 软件结构设计
上位机软件由设备管理、操作控制和数据显示三大功能组成[10]。上位机软件结构如图2所示。
图2 上位机软件结构图
(1)设备管理。设备管理完成智慧开关APP的准备工作,其主要功能如下:
①参数设定。参数设置,包括:波特率、校验位、停止位、传输字节数、软件版本号等。
②地址设定。设置要升级的下位机地址,可以实现一对多传输文件,也可以实现一对一传输。
③串口打开或关闭。可通过串口实现主从交互通信功能。
(2)操作控制。操作控制是文件在向下位机传输过程中,可操作上位机软件进行控制。
①文件浏览。通过文件浏览功能,实现指定类型的文件传输,过滤其他类型,提高效率。
②文件传输。文件传输前上位机软件与下位机通信正常,保证文件顺利传输,传输完成后实现CRC校验功能。
③断点续传。智慧开关内部APP文件传输完成后,下位机会重新组帧进行APP文件升级,偶尔会出现异常帧的情况,导致升级失败。为了防止该类情况发生,断点续传在文件传输完毕后,首先分析是否存在异常帧,若存在则上位机重新传输异常帧对应的数据块。
④传输控制。传输过程中,控制传输的暂停和取消。
(3)数据显示。能够显示传输进度,上位机发送报文信息和上位机接收的报文信息。
3.2 程序流程及实现
C#编程语言以安全、高效的优点作为应用程序的首选。智慧开关内部APP升级的上位机软件是基于C#编程语言,在Windows系统上开发完成,应用了Visual Studio .NET中集成的实用类库,提高了编程效率[11]。上位机软件操作流程如图3所示。
图3 上位机软件操作流程
3.2.1 多线程
线程是程序执行流的最小单元,在开发的应用软件中,大多数线程的数量都不止一个,多个线程可以并发的执行,共享进程的全局变量和堆的数据[12]。上位机软件需要不间断的监听下位机发送过来的数据[13],因此,通过应用Thread类开启一个新的线程,并将IsBackground属性设置为true[14],使其成为后台线程以保证不间断监听下位机消息。
Thread thtwo=new Thread();//开启新的线程
thtwo.IsBackground=true;//设置成后台模式
thtwo.Start();//线程启动
3.2.2 断点续传
为提高智慧开关内部APP文件升级效率,APP文件传输完成后,通过断点分析功能使上位机软件主动和下位机进行交互,下位机将异常帧数据块序号发送到上位机软件,上位机软件针对异常帧数据块序号重新组帧并将新的帧数据块发送至下位机完成APP文件传输。
private void button9_Click(object sender,EventArgs e)//断点分析
{
falseNumFail.Clear();//清空字节数组
}
private void button11_Click(object sender, EventArgs e)//断点续传准备
private void button10_Click(object sender, EventArgs e)//启动续传
{
SendBreakFile();//继续发送断点文件
}
private void SendBreakFile()//发送断点文件函数
falseNumFail为存放异常帧数据块序号的字节数组,清空字节数组是为了每次断点分析时异常帧数据块序号不累加。
3.2.3 CRC校验
CRC校验是数据通信领域中应用最广泛的查错方法之一。下位机接收APP文件完成后,上位机软件和下位机进行交互,下位机及时发送校验码至上位机软件进行文件校验,以保证每次升级时下位机接收到正确的APP文件。
public static void GetCRC32Table() //生成校验码表格函数
public static ulong GetCRC32Value() //获得校验值函数
{
GetCRC32Table();//生成校验码表格函数
}
4 软件测试
软件测试是检测软件功能的最终环节之一。将上位机软件开发程序安装到Windows系统,用串口和智慧开关设备建立连接,进行APP文件传输功能测试,测试结果如图4所示。由反复测试结果可知,上位机软件运行情况良好,操作起来比较方便、快捷,主界面设计人性化,各项功能均满足智慧开关内部APP升级需求。
图4 上位机软件测试结果
5 结论
智慧开关在日常应用过程中,由于需求的改进,需要对内部APP进行维护、更新,需要工程师到现场拆开壳体更新APP比较麻烦。本文基于DL/T 645-2007规约和C#编程语言研发设计一款用于智慧开关APP文件升级的上位机软件,解决了APP升级需要拆壳体的问题。经过多次反复测试,结果表明,该软件不仅能够满足智慧开关内部APP升级需求,而且拥有人性化的主界面,同时运行稳定,操作方便、简单,提高了APP升级效率。