一种基于图形化的C语言代码文件自动化生成系统技术方案

技术编号:36541009 阅读:20 留言:0更新日期:2023-02-01 16:39
本发明专利技术公开了一种基于图形化的C语言代码文件自动化生成系统,包括:数据结构模块、数据映射模块、C语言代码文件生成模块和数据存储模块,数据结构模块用于保存组件的变量,数据映射模块用于在两个数据模型之间建立数据元素的对应关系,对数据字段和目标字段进行匹配,完成数据的转换,C语言代码文件生成模块用于结合数据结构以及运算规则,根据数据信息生成最终的C语言代码文件,数据存储模块用于对生成的代码进行存储,本发明专利技术使用简单易用的自动代码生成机制,能够自动生成符合MISRA标准的高质量生产C代码,提高了代码的可读性,并且通过代码生成器提供了各种接口和标准化的文件交换格式,能够将工具集成到用户的开发过程和工具链中。和工具链中。和工具链中。

【技术实现步骤摘要】
一种基于图形化的C语言代码文件自动化生成系统


[0001]本专利技术涉及计算机
,具体为一种基于图形化的C语言代码文件自动化生成系统。

技术介绍

[0002]随着工业控制场景下控制软件复杂度的提升,基于文本的开发方式,即根据文本形式的规格说明书进行编码实现,然后通过在原型系统或实物系统上的运行来开展测试、调试,已经很难满足当前在高质量保证的基础上,快速进行产品或系统交付的市场需求,而基于模型的设计,利用自动代码生成工具将规格模型直接转化为可以运行的产品级代码,是应对这种开发挑战的有效手段。PLC可编程逻辑控制器是在工业控制领域广泛应用的嵌入式处理器,它是专门为工业环境下的数字化操作而设计的电子设备。基于PLC的工业控制软件开发是应用PLC的一项核心任务。专用的控制器由于带有CPU/MPU,所以逻辑控制可以通过编程实现,因而使得控制器具有了很大的灵活性,但是对于大多数的使用者来说,通用的C语言编程或者其他的编程语言仍然是一道很大的关卡,使用起来不够方便。目前PLC的开发现状存在很多困难,原有的梯形图系统是为了简化编程而形成,由于系统变得非常复杂,梯形图并不擅长复杂的编程表达,因而造成编程困难,阅读困难;PLC基本是用C语言进行开发,而C语言是学习成本非常高的语言,加上互联网行业的发展导致C语言开发人员无法满足工业开发需求;PLC程序对确定性,实时性,安全性有极高的要求,并且开发标准碎片化严重,国内外大中企业均有自己的IDE产品,使得生成的控制程序无法跨厂商使用,移植性较差。
[0003]所以,人们需要一种基于图形化的C语言代码文件自动化生成系统来解决上述问题。

技术实现思路

[0004]本在于提供一种基于图形化的C语言代码文件自动化生成系统,以解决上述
技术介绍
中提出的问题。
[0005]为了解决上述技术问题,本专利技术提供如下技术方案:一种基于图形化的C语言代码文件自动化生成系统,包括数据结构模块、数据映射模块、C语言代码文件生成模块和数据存储模块,其中,
[0006]所述数据结构模块用于保存组件的变量,所述数据结构模块的输出端连接所述数据映射模块的输入端;
[0007]所述数据映射模块用于在两个数据模型之间建立数据元素的对应关系,对数据字段和目标字段进行匹配,执行数据映射操作后完成数据的转换;
[0008]所述C语言代码文件生成模块用于结合数据结构以及运算规则,根据数据信息生成最终的C语言代码文件;
[0009]所述C语言代码文件生成模块的输出端连接所述数据存储模块的输入端;
[0010]所述数据存储模块用于对生成的代码进行存储。
[0011]进一步的,所述数据结构模块中保存了组件的变量,所述组件与函数头一样,是自动生成的,用户对此数据结构没有影响,该数据结构的一部分由组件的实例变量组成,可以在任何方法中使用,因此,它们必须被传递给所有生成的函数,同时,数据结构还依赖于代码扩展器,因此对用户隐藏了确切的命名。
[0012]进一步的,所述数据结构中用户定义的关于C语言变量的元素名称必须是有效的ANSI C 标识符,除了C的保留关键字外,名称本身也是保留的;为了方便地访问组件的元素,将为每个元素自动定义一个宏,然后可以通过元素名称访问每个元素,在其他组件中定义的公共元素可以从C函数中使用符号定义对象来访问,访问权限仅限于基本元素、数组和矩阵;
[0013]其中,矩阵元素搜索算法具体为:
[0014]函数f(x,y)依赖于两个变量x、y,二者分别表示行列式Δ的绝对值,ω和δ;该函数返回为函数值矩阵,所述函数值矩阵由[X,Y]=meshgrid(x,y)在网格上获得,然后,以最大网格点Nx
×
Ny线性扫描区域[x1,x
N

[y1,y
N
],直到达到绝对精度公差dx和dy。
[0015]进一步的,所述数据映射模块包括ID映射和数据结构映射;
[0016]所述ID映射对于每个方法或进程,都会生成一个C函数,功能头为自动生成时,C代码只在函数体本身中使用;其中,为组件的方法和过程所生成的函数的名称取决于代码扩展器和所生成的代码的软件体系结构;根据代码扩展器,实现了一个唯一的名称空间,不同类中的方法可以具有相同的名称,并且没有任何命名冲突;
[0017]所述数据结构映射具体为:对于基本类型,可以使用如int,float,double等类型的方法名称,当访问数组或矩阵时,使用C语言的方式通过索引操作符“[]”进行操作,由于用户定义类型的方法名称依赖于扩展程序,因此只能在了解该方法生成的确切函数名称的情况下调用用户定义类型的方法;
[0018]当使用预定义的元素时,这些元素是模型类型的;
[0019]所述定义为C语言标准定义或用户自定义;
[0020]当切换规范级别时,如固定点代码,模型类型逻辑元素可以用位表示,为了实现数据的一致性,代码生成必须创建额外的消息副本,如果在功能代码中使用消息进行读或写访问,则需要附加代码以确保将当前值从消息原件安全复制到本地副本;在流程主体中,只使用这些本地副本,最后,所有可能在流程主体中更改其值的本地副本都必须写回消息原件;
[0021]在SEDL和方框图组件中,通常可以很好地检测这些消息,然而,当对规范使用C代码时,此功能的可用性有限,此时,用户必须自己处理数据的一致性,该条件下无法检测用户在指定的C代码中写入的变量,只识别少数几种特殊情况。
[0022]若一个变量在宏、外部函数或通过寻址运算符和指针算术介质中发生了更改,则不会检测到该更改;当使用消息时,此行为会导致在进程开始时创建消息副本,但在进程阻塞或进程异常终止的情况下,无法在进程结束时写回。
[0023]进一步的,在所述数据映射模块中,方法的参数被映射为该方法生成的函数的参数列表中的函数参数,这些参数也可以通过参数的名称来访问;根据一般的C语言语法规则,函数局部变量可以在方法体中声明。这里只能声明C数据类型的变量,但不能声明模型
类型的变量,特别是在C的主体规范组件中,不能使用用户定义类型的局部变量;
[0024]由于每个实现变体都有一个代码变体,因此用户可以定义有关实现变体的局部变量及其数据类型。
[0025]进一步的,所述数据映射模块使用线性插值映射算法,具体为:
[0026][0027]其中x是自变量,x1和x0是自变量的已知值,f(x)是自变量x的因变量值,同时使用多个指标值来评估差值的准确性,最终选择RMSE平方差作为误差评估算法;
[0028]其中,RMSE误差评估算法为:
[0029][0030]其中,N为推算数,O
i
为观测数据点,P
i
为推算数据点,RMSE为误差值提供与实际值和预测值相同的维数,RMSE值越小表明模型的误差越小。
[0031]进一步的,所述C语言代码文件生成模块通过将代码生成器模型映射到AUTOSAR结构来生成本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于图形化的C语言代码文件自动化生成系统,其特征在于:所述系统包括:数据结构模块、数据映射模块、C语言代码文件生成模块和数据存储模块,其中,所述数据结构模块用于保存组件的变量,所述数据结构模块的输出端连接所述数据映射模块的输入端;所述数据映射模块用于在两个数据模型之间建立数据元素的对应关系,对数据字段和目标字段进行匹配,执行数据映射操作后完成数据的转换;所述C语言代码文件生成模块用于结合数据结构以及运算规则,根据数据信息生成最终的C语言代码文件;所述C语言代码文件生成模块的输出端连接所述数据存储模块的输入端;所述数据存储模块用于对生成的代码进行存储。2.根据权利要求1所述的一种基于图形化的C语言代码文件自动化生成系统,其特征在于:所述数据结构模块中保存了组件的变量,所述组件与函数头是自动生成的,用户行为对此数据结构没有影响,所述数据结构的一部分由组件的实例变量组成;所述数据结构依赖于代码扩展器,并对用户隐藏了确切的命名。3.根据权利要求2所述的一种基于图形化的C语言代码文件自动化生成系统,其特征在于:所述数据结构中用户定义的关于C语言变量的元素名称必须是有效的ANSI C标识符;访问组件的元素时,每个元素将自动定义为一个宏,通过元素名称访问对应元素,在其他组件中定义的公共元素通过C函数中的符号定义对象进行访问;其中,矩阵元素搜索算法具体为:函数f(x,y)依赖于两个变量x、y,二者分别表示行列式Δ的绝对值,ω和δ;该函数返回为函数值矩阵,所述函数值矩阵由[X,Y]=meshgrid(x,y)在网格上获得,然后,以最大网格点Nx
×
Ny线性扫描区域[x1,x
N
]
×
[y1,y
N
],直到达到绝对精度公差dx和dy。4.根据权利要求1所述的一种基于图形化的C语言代码文件自动化生成系统,其特征在于:所述数据映射模块包括ID映射和数据结构映射;所述ID映射对于每个方法或进程,会生成与其相对应的C函数,当功能头为自动生成时,C代码只在函数体本身中使用;其中,为组件的方法和过程所生成的函数的名称取决于代码扩展器和所生成的代码...

【专利技术属性】
技术研发人员:裴景秋张国防张心怡
申请(专利权)人:江苏升瑞科技产业发展有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1