掌桥专利:专业的专利平台
掌桥专利
首页

一种工业控制领域基于嵌入式开发环境的C语言开发方法

文献发布时间:2023-06-19 13:45:04


一种工业控制领域基于嵌入式开发环境的C语言开发方法

技术领域

本发明涉及一种工业控制系统的软件开发领域,具体涉及一种工业控制领域基于嵌入式开发环境的C语言开发方法。

背景技术

在工业控制领域,PLC语言是主流的开发语言,但是PLC语言有着容易掌握、直观性强等特点,但难以实现复杂的控制算法编写。因此在面对复杂的算法时,使用C语言进行开发更能满足部分用户的开发需求。而目前使用C语言开发环会存在以下两个个问题:

1.上位机软件集成C语言开发环境的研发成本过高;

2.具备C语言开发能力的用户占比很低;

因此直接在上位机软件中集成C语言开发环境不是个很好的办法。

中国发明专利CN105843659A,公开了一种嵌入式C编译器的实现方法及系统,描述的工业控制领域内C语言开发方法是将C语言的编译环境整合进了上位机软件中,然后通过软件将软件编译好的代码下载至控制器上,没有避免将C语言编译环境整合至上位机软件中所需要的成本。

发明内容

本发明为了克服以上技术的不足,提供了一种工业控制领域基于嵌入式开发环境的C语言开发方法,低成本,易实现的实现了工业控制系统中进行复杂功能的C语言开发。

本发明克服其技术问题所采用的技术方案是:

一种工业控制领域基于嵌入式开发环境的C语言开发方法,具体包括:基于嵌入式开发环境使用C语言开发用户程序,并编译生成第一用户程序固件;控制器对应的上位机软件将第一用户程序固件分为若干子固件,并对子固件计算校验之后,顺序下载至用户程序区,其中,用户程序区设置在控制器的程序存储空间内,用于存放第一用户程序固件;第一用户程序固件下载完成后,控制器上载用户程序区的第一用户程序固件,上位机软件将下载和上载的程序进行校验比对;若校验通过,则上位机软件下发用户任务启动指令并使能用户程序;若校验失败,则擦除用户程序区的用户程序。

进一步的,所述控制器的程序存储空间至少还包括BOOT区、主程序区和用户堆栈缓存区,其中,BOOT区用于存放控制器芯片的启动代码,主程序区用于存放控制器的代码,用户堆栈缓存区用于建立用户程序的堆栈,所述堆栈用于保存用户程序运行时的局部变量,以及在进入中断和任务切换时保存任务的运行现场。

对控制器的程序存储空间进行划分,设置专门的用户程序存储空间,以及用户程序变量存储空间,确保用户程序的稳定运行,保证在中断、程序调度时用户程序的运行数据不会丢失。

进一步的,若上位机软件将下载和上载的程序校验,且校验通过,则上位机软件还向设置在控制器的掉电保持数据区的第一变量写值。

进一步的,控制器的主程序周期性的调用用户程序入口函数,并判断用户程序是否使能,若用户程序使能,则将程序运行指针指向用户程序区的地址,并跳转到用户程序中运行。

进一步的,判断用户程序是否使能具体包括:判断第一变量是否使能,若第一变量使能,则用户程序使能。

通过设置在掉电保持数据区的第一变量,控制用户程序的运行到,并保证控制器掉电重启后依然能够运行用户程序。

进一步的,控制器对应的上位机软件用将第一用户程序固件分为若干子固件,并进行校验,校验计算后顺序下载至用户程序区,具体包括:控制器对应的上位机软件用将用户固件基于预设长度分为若干子固件;分别计算各个子固件的CRC校验值,并将各个子固件的CRC校验值再做一次CRC校验得到第一校验值;将子固件顺序下载至用户程序区。

进一步的,下载完成后,控制器上载用户程序区的用户程序,上位机软件将下载和上载的程序进行校验比对,具体包括:控制器对用户程序区的各个子固件进行CRC校验,并对各个子固件的CRC校验值进行校验,得到第二校验值;控制器将第二校验值发送至上位机软件,上位机软件将第一校验值和第二校验值进行比对。

通过数据校验,保证了下载程序的准确性,保证在跳转到用户程序后,系统工作不会出现异常。按顺序下载可以免去控制器进行排序的操作,增加效率。

进一步的,若校验通过,则控制器将若干子固件打包成第二用户程序固件,并将第二用户程序固件拷贝至用户程序区。

本发明的有益效果是:

1、通用性强,采用常用的嵌入式开发环境,就可实现工业控制领域的C语言开发;

2、较低成本的实现了工业控制系统复杂逻辑控制程序编写,降低了上位机软件的研发成本。

3、对编写的C语言程序进行校验,确保下载程序数据的准确性,保证在跳转到用户程序后,系统工作不会出现异常。

4、设立用户程序堆栈区,确保在中断、程序调度时用户程序的运行数据不会丢失。

5、顺序下载子固件,免去控制器进行排序的操作,增加处理效率。

6、将子固件设置为适配上位机软件的数据包,从而使用户固件不受上位机软件的限制。

附图说明

图1为本发明实施例C语言开发方法流程示意图;

图2为本发明实施例的控制器FLASH分区示意图;

图3为本发明实施例的风力发电机组示意图;

图4为本发明实施例的风力发电机组系统模块示意图;

图5为本发明实施例的主程序调用用户程序示意图。

具体实施方式

为了便于本领域人员更好的理解本发明,下面结合附图和具体实施例对本发明做进一步详细说明,下述仅是示例性的不限定本发明的保护范围。

如图1所示,为本发明实施例的流程图,工业控制领域基于嵌入式开发环境的C语言开发方法具体包括:基于常用的嵌入式开发环境使用C语言开发用户程序,并编译生成第一用户程序固件;控制器对应的上位机软件用将第一用户程序固件分为若干子固件,并计算校验之后,顺序下载至用户程序区,其中,用户程序区设置在控制器的程序存储空间内用于存放第一用户程序固件;用户程序固件下载完成后,控制器上载用户程序区的第一用户程序固件,上位机软件将下载和上载的程序进行校验比对;若校验通过,则上位机软件下发用户任务启动指令并使能用户程序;若校验失败,则擦除用户程序区的用户程序。

其中,控制器的FLASH被划分为四个数据区,如图2所示,分别为BOOT区,主程序区,用户程序区和用户堆栈缓存区,BOOT区用于存放芯片的启动代码;主程序区存放控制器自身的代码;用户程序区用于存放用户开发的代码;用户堆栈缓存区用于建立用户任务的堆栈,堆栈用于保存用户任务运行时的局部变量以及在进入中断和任务切换时保存任务的运行现场。在一些实施方式中,由操作系统内核实现。

并且在控制器的掉电保持数据区申请一个第一变量,作为用户程序控制变量,控制用户程序的运行,确保控制器掉电重启后依然能够运行用户程序。

常用的嵌入式开发环境包括Turbo C 2.0,Visual C++6.0等。基于这些常用的嵌入式开发环境,使用C语言开发用户程序。

以如图3所示的风力发电机组为例,对工业控制领域基于常用嵌入式开发环境的C语言开发方法进行详细说明,风力发电组的系统框图如图4所示。

由于风力发电机的变桨算法、变流算法程序复杂,基本为主机厂自研,通常使用C语言编写。所以需要通过编写偏航控制模块任务和偏航驱动控制模块任务,以完成变桨算法、变流算法。

S1,基于常用嵌入式开发环境使用C语言开发用户程序,并编译生成第一用户程序固件。

用户自行选择嵌入式开发环境对用户程序进行C语言编程,并编译生产第一用户程序固件,在本发明的一个实施例中,

以编写偏航控制模块任务为例,需要实现确定何时开始对风偏航,何时停止,确定何时进行解缆,何时停止,处理手动偏航指令,给偏航驱动控制模块下偏航质量等功能,因此,采用visual C++进行C语言开发。

S2,控制器对应的上位机软件用将第一用户程序固件分为若干子固件,并计算校验之后,顺序下载至用户程序区。

将机舱控制系统对应的控制器的FLASH划分成四个数据区,分别为BOOT区,主程序区,用户程序区和用户堆栈缓存区。BOOT区用于存放芯片的启动代码;主程序区存放控制器自身的代码;用户程序区用于存放用户开发的代码;用户堆栈缓存区用于建立用户任务的堆栈,堆栈用于保存用户任务运行时的局部变量以及在进入中断和任务切换时保存任务的运行现场。并在掉电保持数据区申请一个用户程序控制变量,用于控制用户程序的运行,从而确保控制器掉电重启后依然能够运行用户程序。

在一些实施方式中,控制器对应的上位机软件用将第一用户程序固件基于预设长度分为若干子固件;分别计算各个子固件的CRC校验值,并将各个子固件的CRC校验值再做一次CRC校验得到第一校验值,然后将子固件顺序下载至用户程序区。其中,顺序下载可以免去控制器进行排序的操作,增加效率。

用户程序固件的大小不可控,但是上位机软件可以下载的数据包大小是有限制的,如果用户程序固件的大小大于上位机软件的限制,就需要将固件分为若干子固件适配上位机软件可下载的数据包的大小。

在一些实施方式中,上位机软件会循环检测是否下载完成,若是第一用户程序固件下载完成,则会发送控制器一个发送一个上载用户固件的指令。控制器接收该指令,才会对应上载用户程序。

S3,用户程序固件下载完成后,控制器上载用户程序区的第一用户程序固件,上位机软件将下载和上载的程序进行校验比对。

控制器参照上位机软件的算法对各个子固件进行处理,分别得到各个子固件的校验值,并对各个校验值进行CRC校验,得到第二校验值,然后发送第二校验值至上位机软件,上位机软件将第一校验值与第二校验值进行比对,若校验通过,控制器将子固件合包,重新打包成第二用户程序固件,并将第二用户程序固件拷贝至用户程序区。

上位机软件下发用户任务启动指令,向掉电保持数据区的用户程序控制变量写值,使能用户程序。若校验失败,则下发指令擦除用户程序区。

保证下载程序的准确性,保证跳转到用户程序后,系统工作不会出现异常。

S4,控制器的主程序周期性的调用用户程序入口函数,判断用户程序是否使能,若用户程序使能,则将程序运行指针指向用户程序区的地址,并跳转到用户程序中运行。

控制器主程序周期性的调用用户程序入口函数,判断用户程序控制变量是否使能,若用户程序控制变量使能,则程序运行指针指向FLASH用户程序区的地址,程序跳转到用户程序中运行。如图5所示。

本发明提供的低成本的C语言开发方法,应用于工业控制系统中,能够在常用嵌入式开发环境下使用C语言对控制系统进行编程,满足小众用户的开发需要,简化了控制系统中实现C语言开发的方式,大大降低了成本。

以上仅描述了本发明的基本原理和优选实施方式,本领域人员可以根据上述描述做出许多变化和改进,这些变化和改进应该属于本发明的保护范围。

相关技术
  • 一种工业控制领域基于嵌入式开发环境的C语言开发方法
  • 一种用于工业控制领域的双环光网通信方法及组网
技术分类

06120113793264