首页 / 专利库 / 电脑图像 / 图形处理单元 / 一种面向NB-IoT终端的图形化编程系统

一种面向NB-IoT终端的图形化编程系统

阅读:728发布:2020-05-11

专利汇可以提供一种面向NB-IoT终端的图形化编程系统专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种面向NB-IoT终端的图形化编程系统,包括代码编辑模 块 、控件拖拽模块、流程控 制模 块、源代码生成模块、代码编译模块和程序烧录模块,代码编辑模块提供编辑代码的窗口平台,控件拖拽模块将用户选择的控件库模块中的控件复制到代码编辑模块,流程 控制模块 根据用户操作建立代码编辑模块内各控件之间的执行次序的关系,源代码生成模块在代码编辑模块中的所有控件执行次序关系建立完成之后对其进行整合,得到源代码文件,代码编译模块对源代码文件进行编译得到相应的可执行程序文件,程序烧录模块将可执行程序文件发送至NB-IoT终端。该系统只需拖拽图形化控件,配置其属性,并按照流程逻辑连线,即可完成程序开发工作。,下面是一种面向NB-IoT终端的图形化编程系统专利的具体信息内容。

1.一种面向NB-IoT终端的图形化编程系统,其特征在于,包括:
控件库模,其存储有多种类型的图形化控件;
代码编辑模块,用于提供编辑代码的窗口平台;
控件拖拽模块,用于将用户选择的所述控件库模块中的控件复制到所述代码编辑模块;
流程控制模块,用于根据用户操作建立所述代码编辑模块内各控件之间的执行次序的关系;
源代码生成模块,用于在所述代码编辑模块中的所有控件执行次序关系建立完成之后对其进行整合,得到源代码文件;
代码编译模块,用于对所述源代码文件进行编译得到相应的可执行程序文件;
程序烧录模块,用于将所述可执行程序文件发送至NB-IoT终端。
2.如权利要求1所述的系统,其特征在于,所述控件库模块包含的图形化控件的类型包括以下至少一种:事件控件类型,执行控件类型,通信控件类型,传感器控件类型,流程控制控件类型,子程序控件类型。
3.如权利要求1所述的系统,其特征在于,所述控件拖拽模块包括:
控件记录单元,用于记录用户当前选中的所述控件;
选中记录单元,用于在用户选中所述控件库模块中的控件时改变参考目标的状态;其中,
所述参考目标具有两种不同状态,以区分是否有所述控件被选中。
4.如权利要求1所述的系统,其特征在于,该系统还包括:
文本编辑模块,用于对所述代码编译模块生成的文本代码进行编辑;
信息输出模块,用于检测并输出编译状态信息和烧录状态信息。
5.如权利要求1所述的系统,其特征在于,该系统还包括:控件添加模块,用于为所述控件库模块添加新的图形化控件;其中,所述控件添加模块包括:
窗体建立单元,用于创建控件窗体,并为所述控件窗体添加子控件,所述子控件包括按钮;
代码输入单元,用于输入待添加控件的代码;
控件绑定单元,用于建立添加代码后的所述控件窗体与相应控件图形的绑定关系,形成控件。
6.如权利要求1所述的系统,其特征在于,所述代码编译模块依据终端的设备信息对控件进行编译,生成与相应终端的硬件相适配的可执行程序文件。
7.如权利要求1所述的系统,其特征在于,该系统还包括:代码加密模块,用于对所述代码编译模块生成的可执行程序文件中的代码进行加密;其中,所述代码加密模块包括:
密钥生成单元,用于生成设定字节长度的数组作为密钥;
加密单元,用于利用所述密钥对所述可执行程序文件中的明文代码进行异或运算,得到密文;
循环单元,用于重复以下操作直到循环次数到达设定循环阈值并得到最终加密密文:
对所述密文进行循环移位并使所述加密单元对循环移位后的密文进行异或运算;另外,所述程序烧录模块将所述最终加密密文发送至NB-IoT终端。
8.如权利要求1所述的系统,其特征在于,该系统还包括图形渲染管线,所述图形渲染管线包括:
光栅扫描模块,用于扫描对屏幕进行划分后得到的多个标准区域中所有的像素点,依序判断像素点是否被图元覆盖,并将图元转化为片元;
像素着色模块,用于将片元坐标经过几何变换至纹理空间得到纹理坐标,将纹理坐标转换为对应像素存储在内存中的地址,并通过纹理滤波确定像素点的颜色值,为像素点着色;
Alpha混合模块,用于将前景图像与背景图像根据Alpha值进行混合;
片上缓冲模块,用于缓存图像混合时的背景图像的Alpha值和RGB值,以及缓存Alpha纹理信息,并在所述标准区域绘制结束时将结果写回缓存。
9.如权利要求8所述的系统,其特征在于,所述光栅扫描模块以Z字形顺序进行像素点扫描,并以计算像素点相对于图元四条边的边界函数的方式输出待绘制的像素流。
10.如权利要求1或8或9所述的系统,其特征在于,该系统包括图形渲染IP核,所述图形渲染IP核的数据访存结构包括:
多个作为每个图形处理单元私有缓存的一级缓存;
作为各个图形处理单元共享缓存的二级缓存;
三级缓存;
标签管理模块,用于在接收到外部的数据请求时,读取缓存组编码中的标签值并与请求地址的高位进行比较,判断请求所需的数据是否在缓存中,若在则输出命中ID标识,否则依据LRU管理模块输出的替换数据块编码更新对应数据块的标签值;
所述LRU管理模块,用于在所述请求所需的数据在缓存中的情况下,依据缓存组编码和命中ID标识对相应缓存组的LRU队列状态进行更新,输出请求读取RAM中的地址,否则依据当前LRU队列状态以及替换策略输出替换数据块编码;
随机存储管理模块,用于在所述请求所需的数据在缓存中的情况下,依据所述地址控制缓存读取RAM对应地址中的数据并输出,否则更新RAM中对应的数据块并返回当前请求所需的数据。

说明书全文

一种面向NB-IoT终端的图形化编程系统

技术领域

[0001] 本发明涉及终端编程技术领域,特别涉及一种面向NB-IoT终端的图形化编程系统。

背景技术

[0002] 窄带物联网(Narrow Band Internet of Things,NB-IoT)是面向物联网应用开发的具有大连接、广覆盖、深穿透、低成本、低功耗特点的低功耗广域网(Low Power Wide Area Network,LPWAN)。该技术可广泛应用于信息传输量少、实时性要求不高,但工作环境复杂、对功耗敏感的应用场景,如:工厂设备远程监控、智能农业、智能家居、智能城市、智能环境监控、智能用户服务和智能计量等。
[0003] 一般情况下,开发一款NB-IoT终端产品必定需要经过程序编码环节,目前通常采用计算机语言进行编程来实现。但由于计算机语言跟人们之间平常交流的语言不是一个体系,其具有很强的逻辑性和准确性,一个标点符号的不同都会导致含义的大相径庭,这就要求开发者具有一定的编程基础,并具备与通信相关的知识,导致开发要求较高,难度较大。

发明内容

[0004] (一)发明目的
[0005] 基于此,为了降低开发者的开发难度、提高开发效率、增加编程颗粒度,本发明公开了了一套面向NB-IoT终端的图形构件化编程系统,嵌入式开发者通过简单地拖拽控件即可完成编程。
[0006] (二)技术方案
[0007] 本发明公开了一种面向NB-IoT终端的图形化编程系统,包括:
[0008] 控件库模,其存储有多种类型的图形化控件;
[0009] 代码编辑模块,用于提供编辑代码的窗口平台;
[0010] 控件拖拽模块,用于将用户选择的所述控件库模块中的控件复制到所述代码编辑模块;
[0011] 流程控制模块,用于根据用户操作建立所述代码编辑模块内各控件之间的执行次序的关系;
[0012] 源代码生成模块,用于在所述代码编辑模块中的所有控件执行次序关系建立完成之后对其进行整合,得到源代码文件;
[0013] 代码编译模块,用于对所述源代码文件进行编译得到相应的可执行程序文件;
[0014] 程序烧录模块,用于将所述可执行程序文件发送至NB-IoT终端。
[0015] 在一种可能的实施方式中,所述控件库模块包含的图形化控件的类型包括以下至少一种:事件控件类型,执行控件类型,通信控件类型,传感器控件类型,流程控制控件类型,子程序控件类型。
[0016] 在一种可能的实施方式中,所述控件拖拽模块包括:
[0017] 控件记录单元,用于记录用户当前选中的所述控件;
[0018] 选中记录单元,用于在用户选中所述控件库模块中的控件时改变参考目标的状态;其中,
[0019] 所述参考目标具有两种不同状态,以区分是否有所述控件被选中。
[0020] 在一种可能的实施方式中,该系统还包括:
[0021] 文本编辑模块,用于对所述代码编译模块生成的文本代码进行编辑;
[0022] 信息输出模块,用于检测并输出编译状态信息和烧录状态信息。
[0023] 在一种可能的实施方式中,该系统还包括:控件添加模块,用于为所述控件库模块添加新的图形化控件;其中,所述控件添加模块包括:
[0024] 窗体建立单元,用于创建控件窗体,并为所述控件窗体添加子控件,所述子控件包括按钮;
[0025] 代码输入单元,用于输入待添加控件的代码;
[0026] 控件绑定单元,用于建立添加代码后的所述控件窗体与相应控件图形的绑定关系,形成控件。
[0027] 在一种可能的实施方式中,所述代码编译模块依据终端的设备信息对控件进行编译,生成与相应终端的硬件相适配的可执行程序文件。
[0028] 在一种可能的实施方式中,该系统还包括:代码加密模块,用于对所述代码编译模块生成的可执行程序文件中的代码进行加密;其中,所述代码加密模块包括:
[0029] 密钥生成单元,用于生成设定字节长度的数组作为密钥;
[0030] 加密单元,用于利用所述密钥对所述可执行程序文件中的明文代码进行异或运算,得到密文;
[0031] 循环单元,用于重复以下操作直到循环次数到达设定循环阈值并得到最终加密密文:对所述密文进行循环移位并使所述加密单元对循环移位后的密文进行异或运算;另外,[0032] 所述程序烧录模块将所述最终加密密文发送至NB-IoT终端。
[0033] 在一种可能的实施方式中,该系统还包括图形渲染管线,所述图形渲染管线包括:
[0034] 光栅扫描模块,用于扫描对屏幕进行划分后得到的多个标准区域中所有的像素点,依序判断像素点是否被图元覆盖,并将图元转化为片元;
[0035] 像素着色模块,用于将片元坐标经过几何变换至纹理空间得到纹理坐标,将纹理坐标转换为对应像素存储在内存中的地址,并通过纹理滤波确定像素点的颜色值,为像素点着色;
[0036] Alpha混合模块,用于将前景图像与背景图像根据Alpha值进行混合;
[0037] 片上缓冲模块,用于缓存图像混合时的背景图像的Alpha值和RGB值,以及缓存Alpha纹理信息,并在所述标准区域绘制结束时将结果写回缓存。
[0038] 在一种可能的实施方式中,所述光栅扫描模块以Z字形顺序进行像素点扫描,并以计算像素点相对于图元四条边的边界函数的方式输出待绘制的像素流。
[0039] 在一种可能的实施方式中,该系统包括图形渲染IP核,所述图形渲染IP核的数据访存结构包括:
[0040] 多个作为每个图形处理单元私有缓存的一级缓存;
[0041] 作为各个图形处理单元共享缓存的二级缓存;
[0042] 三级缓存;
[0043] 标签管理模块,用于在接收到外部的数据请求时,读取缓存组编码中的标签值并与请求地址的高位进行比较,判断请求所需的数据是否在缓存中,若在则输出命中ID标识,否则依据LRU管理模块输出的替换数据块编码更新对应数据块的标签值;
[0044] 所述LRU管理模块,用于在所述请求所需的数据在缓存中的情况下,依据缓存组编码和命中ID标识对相应缓存组的LRU队列状态进行更新,输出请求读取RAM中的地址,否则依据当前LRU队列状态以及替换策略输出替换数据块编码;
[0045] 随机存储管理模块,用于在所述请求所需的数据在缓存中的情况下,依据所述地址控制缓存读取RAM对应地址中的数据并输出,否则更新RAM中对应的数据块并返回当前请求所需的数据。
[0046] (三)有益效果
[0047] 本发明公开的面向NB-IoT终端的图形化编程系统,在抽取了不同类型硬件及软件驱动的共性要素后,将这些驱动进一步封装成为GCNB的可拖拽控件,嵌入式开发者能够利用图形化编程语言进行构件化编程,只需拖拽图形化控件,配置其属性,并按照流程逻辑连线,即可完成程序开发工作,这不仅降低了开发槛,提高开发效率,而且增加了编程颗粒度。附图说明
[0048] 以下参考附图描述的实施例是示例性的,旨在用于解释和说明本发明,而不能理解为对本发明的保护范围的限制。
[0049] 图1是本发明公开的图形化编程系统实施例的结构框图
[0050] 图2是图形化编程过程中系统显示界面示意图。
[0051] 图3是串口烧录执行流程示意图。
[0052] 图4是NB-IoT发送控件配置界面的示意图。
[0053] 图5是编译流程示意图。
[0054] 图6是智能农业大棚系统的图形化代码示意图。

具体实施方式

[0055] 为使本发明实施的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行更加详细的描述。
[0056] 下面参考图1-图6详细描述本发明公开的图形化编程系统实施例。图形化编程系统安装于PC端,用于对远程的NB-IoT终端内的用户程序(User程序)进行编写和发送,以对用户程序进行更新。如图1所示,本实施例主要包括有控件库模块、代码编辑模块、控件拖拽模块、流程控制模块、源代码生成模块、代码编译模块和程序烧录模块。
[0057] 图形化编程语言是指仅需通过图标拖动等图形化方式即可完成代码编写的计算机程序开发语言。这种语言具有结构清晰、开发环境执行效率高、编程出错率低和构件灵活等优点。
[0058] 控件库模块存储有多种类型的图形化控件。图标控件库模块为开发者提供了可拖拽控件,它存储于PC端软件代码中的TreeView(C#提供的树结构类型)类型的treeViewIconBox变量中。在一种实施方式中,在抽取控件的公共要素之后,从共性度出发将控件划分为六大类,均定义在枚举类型变量selectedType中,控件库模块包含的图形化控件的类型包括以下至少一种:事件控件类型EventIcon,执行控件类型ExecuteIcon,通信控件类型CommunicateIcon,传感器控件类型SensorIcon,流程控制控件类型FlowControl,子程序控件类型SubFunIcon。
[0059] 控件拖拽单元主要涉及到控件库模块frmIconBox和代码编辑模块frmGraphicCode,用于将用户选择的控件库模块frmIconBox中的控件复制到代码编辑模块frmGraphicCode中。在一种实施方式中,控件拖拽模块包括控件记录单元和选中记录单元。
控件记录单元用于记录用户当前选中的控件。选中记录单元用于在用户选中控件库模块中的控件时改变参考目标的状态。其中,参考目标具有两种不同状态,以区分是否有控件被选中。
[0060] 具体的,在frmIconBox窗体中存在一个TreeNode类型的成员变量SelectedIconNode,当控件树中的某个控件被选中时,即把该控件赋值至
SelectedIconNode,并设置AlreadySelectIconFromTreeView为true。系统在代码编辑模块的窗体中定义了鼠标抬起的事件frmGraphicProgrammer_MouseUp,当鼠标在该窗体中点击时将触发该事件。若在该事件中检测到AlreadySelectIconFromTreeView为true,则将frmIconBox窗体中的SelectedIconNode拷贝至单击鼠标的位置
[0061] 在嵌入式编程中,事件也可以被称之为中断。许多对实时性有要求的功能(如计时、串口接收等)都依赖中断实现,使用中断不但能提高实时性,而且大大降低了资源消耗,使得嵌入式芯片能够完成更加复杂的功能。
[0062] 代码编辑模块是一个提供编辑代码的窗口平台,能够装载并显示用户拖曳过来的图形化控件。
[0063] 流程控制模块用于根据用户操作建立代码编辑模块内各控件之间的执行次序的关系。控件流程控制单元的功能是将控件按照一定的逻辑使用线束连接起来。每个控件均有两个接口:入口点和出口点。入口点是从其它控件连接至本控件的接口,出口点是从本控件连接至其它控件的接口。
[0064] 控件可分为三类:起始控件、中间控件和结尾控件。起始控件主要是main控件和事件控件,它们是一段图形化程序的开始,是不可缺少的。中间控件是数目最多的控件,大部分执行控件、传感器控件等都属于中间控件。结尾控件主要是“结束”控件,它不是必须的控件,有时可省略。
[0065] 在软件中,对入口点和出口点分别注册鼠标按下和鼠标移动的事件,并在事件中添加画线等操作,实现控件之间的逻辑连接功能。在连线完成之后,线束一般是混乱的,甚至有可能有交叉,这非常不方便阅读。为此,在本单元中添加了自动排列图标的功能,该功能通过鼠标上下滑动的事件OnMouseWheel触发。在触发该功能之后,将遍历所有的起始控件,并与其连接的所有控件按照垂直排列规则进行连接。
[0066] “main”控件和“收到开关信号”控件为起始控件。与“main”控件相连的控件在芯片上电后将依次执行,“收到开关信号”控件属于事件控件,与其相连的控件会在该事件被触发之后依次执行。“条件循环”控件与“小灯”控件为中间控件,“结束”控件为结尾控件。
[0067] 如图2所示,源代码生成模块用于在代码编辑模块中的所有控件执行次序关系建立完成之后对其进行整合,得到源代码文件。也就是说,源代码生成模块完成了由图形化代码转变为可编译的源代码的过程。源代码生成模块会遍历所有的起始控件及其子控件,并把这些控件的代码整合在一起。这一功能是依赖于控件的成员变量code实现的。code是自定义结构体类型Code的一个实例。Code内定义了很多字符串,包括全局变量、局部变量、变量初值、中断服务例程、中断服务声明、初始化代码、插入空间位置处的代码、中断使能代码、子函数代码、头文件、宏常数、结构体类型、控件注释、恢复控件用的参数保存信息等。在code变量中保存了控件应该生成的所有代码信息,当双击控件对控件进行配置之后,code变量中的内容也随之发生更改。
[0068] 代码编译模块用于源代码生成模块生成的源代码文件进行编译,得到相应的可执行程序文件。GCC(GNU Compiler Collection,GNU编译器套件)是由GNU组织开发的一套编译系统,以GPL许可证协议发行,目前已被大多数操作系统(如Linux、BSD等)做为标准编译器,而且适用于windows系统。该编译器可广泛支持C/C++、Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,具有很强的跨平台兼容性和可移植性。
[0069] 本系统选择GCC编译器作为内置编译环境,利用CMD命令窗口调用gcc的编译命令。在C#中,可以重定向CMD窗口的输出,本系统重新定义了CMD窗口的标准输出和错误输出,并将它们输出到信息显示单元中。由于信息显示窗口和调用gcc命令的程序不处于同一个线程,故应该使用异步调用的方法保证跨线程的安全性。
[0070] 编译器的执行过程又可细分为五个阶段:词法分析、语法分析、语义分析与中间代码生成、优化、目标代码生成。首先对源程序首先进行的处理过程是词法分析。它是一种线性分析方式,通过对源程序中的代码进行逐行扫描,将其中的单词(如关键字、标识符、变量名等)逐个解析出来,并输出单词序列串。语法分析是根据指定编程语言的规则、语法(如C语言以“;”为语句的结尾)将源代码进一步解析,使单词序列串变为一个个集合,并根据语法决定集合之间的关系。语义分析与中间代码生成阶段将会真正地去理解源代码的“含义”,从而决定生成代码的执行过程,本阶段将按照语法、语义去生成能完成源代码目标的中间代码,并确定程序的运行。优化阶段是对产生的中间代码进行合理的加工,使得产生代码量更少、运行效率更高的目标代码,即obj文件。在对源代码加工处理并优化之后,需要根据具体的运行平台及其指令集由链接器生成相应的可执行代码。
[0071] 使用本系统编写的一个完整程序P由多个程序段Pi(i=0,1,2,······,n)构成,其中P0为主程序段,这是必须要包含的程序段,它决定了main函数的内容。其他的Pi由函数、事件和或子程序组成。除了P0之外,每一个程序段Pi都由一个函数控件、一个事件控件或一个子程序控件做为第一个控件。每个Pi又可由一个二元组来表示:Pi=。其中,B为第一个控件,即函数控件、事件控件或子程序控件。E为代码段Pi的内容,它是这个代码段的功能实现部分。图形化控件是本系统图形化编程的基本单位,通过拖拽图形化控件并按照一定规则连接起来即可生成对应的C代码。
[0072] 程序烧录模块用于将可执行程序文件发送至NB-IoT终端。在一种实施方式中,程序烧录模块采用SWD协议的方式将可执行程序文件发送至NB-IoT终端。SWD调试协议是ARM公司提出的串行调试协议,只需要4根线(VCC、GND、DIO和CLK)即可完成通信,它的结构简单、性能稳定、兼容性强,而且在高速模式下能提供优于JTAG(联合测试工作组)协议的调试速度,解决了引脚占用过多、高速模式下调试速度较慢的问题。大部分芯片均已默认支持这种调试方式。在另一种实施方式中,程序烧录模块对可执行程序文件进行解析,并将解析后得到的数据帧发送至NB-IoT终端。在使用本系统拖拽好程序之后,将编译生成hex文件。如图3所示,程序的烧录过程即为解析hex文件的含义,并将指定的数据写入到终端设备的指定flash中的过程。在系统解析hex文件之后,将按照约定好的数据帧协议进行组帧,然后将数据发送至NB-IoT终端。
[0073] NB-IoT终端软件包括BIOS程序与User程序两部分,BIOS与User程序的切换机理为,在进入BIOS的main函数之后,BIOS程序将使MCU执行如下操作:
[0074] (1)初始化系统时钟并开启看门狗。
[0075] (2)初始化内核定时器Systick,并开启其中断,设置500毫秒的定时间隔,并向User程序提供sysTimeGet和sysTimeSet两个应用程序编程接口(Application Programming Interface,API)接口,User程序可通过这两个接口获取或设置系统时间。
[0076] (3)初始化一个串口,并将该串口做为串口烧录时使用的串口,同时,该串口也可用来打印基本的调试信息。
[0077] (4)将BIOS中驻留的硬件驱动以API的形式供User程序使用。User程序可直接通过API驱动MCU中的基础硬件资源,无需自行编写驱动程序。
[0078] (5)将BIOS的中断向量表拷贝至RAM区。
[0079] (6)判断是否有烧录程序请求。若有,则执行烧录过程,若无,则将User程序工程的起始地址开始的4个字节拷贝到MSP中,并将随后的4个字节拷贝到PC寄存器中。执行完此步骤之后,MCU将从BIOS程序切换到User程序中继续运行。
[0080] 现有的图形化编程技术存在性能优化不足的缺陷,为了尽可能地考虑多种应用场景,图形化软件产生的代码可能存在一定的冗余。而且,对于高级编程者而言,无法利用其丰富的编程经验对代码进行尽可能极致的优化。因此在一种实施方式中,该系统还包括文本编辑模块,用于对代码编译模块生成的文本代码进行编辑。在文本编程环境中,如果开发者本身有一定的编程基础,可以在拖拽出程序大体框架之后,可以根据需求直接修改源代码,实现对图形化代码的二次编程。这些改变将大大增加图形化编程平台的适应性,填补NB-IoT技术的一些空白。为了方便开发者使用,文本编程环境中集成了高级编辑单元和代码搜寻单元。
[0081] 高级编辑单元主要实现了为文本编辑提供便利的功能,如:全选、剪切、复制、粘贴、删除、撤销等。同时,为了方便开发者阅读代码,高级编辑单元提供了代码着色功能。开发者可自己指定语言的格式,本单元将代码中的关键词等按照一定的着色规则进行着色,并对代码中的语句块等进行提示。
[0082] 在编辑代码过程中(尤其是代码量较大的情况),我们常常会面临很难找到指定代码的问题。为此,本软件加入了代码搜寻单元,通过查询功能将能够有效解决该问题。
[0083] 在一种实施方式中,该系统还包括信息输出模块,用于检测并输出编译状态信息和烧录状态信息。信息输出模块是系统提示开发者当前运行状态的窗口,文图形化编程环境和文本变成环境均使用信息输出模块进行信息输出。
[0084] 现有的图形化编程技术存在灵活性不高的缺陷,其所能实现的功能从很大程度上依赖于其自身控件库模块的丰富度。针对开发者的特定应用场景,图形化软件可能鞭长莫及。因此在一种实施方式中,该系统还包括控件添加模块。控件添加模块用于为控件库模块添加新的图形化控件。其中,控件添加模块包括窗体建立单元、代码输入单元和控件绑定单元。窗体建立单元用于创建控件窗体,并为控件窗体添加子控件,子控件包括按钮。代码输入单元用于输入待添加控件的代码。控件绑定单元用于建立添加代码后的控件窗体与相应控件图形的绑定关系,形成控件。
[0085] NB-IoT控件是基于NB-IoT构件再封装得到的,对于通信控件而言,它的主要功能是数据的接收和发送。为此,将NB-IoT构件封装为NB-IoT发送和NB-IoT接收两个控件。由于数据接收是无法预知的,为了提高运行效率、降低编程难度,本课题将数据接收封装为事件控件,借助芯片的中断功能实现数据接收功能。本节将以NB-IoT发送控件为例阐述新增一个控件的步骤。
[0086] 图片是图形化控件的重要展现形式。图片设计完成之后,应与控件进行绑定才可生效。现有的图形化编程技术还存在开发环境间难以互相移植的缺陷。在开发过程中,开发者可能会有更换开发环境的需求。图形化软件的工程一般有各自的组织形式,互相之间不兼容,也无法与文本编程环境兼容,开发者难以在不同开发环境之间进行移植。因此为了尽可能降低绑定控件的难度,本软件将修改过程封装至xml文件中。与以往使用数据库存储控件信息的方式相比,xml文件不但不需要依赖任何数据库管理工具,而且具有良好的数据结构,是一种跨平台、可移植的数据存储方式,能够解决开发出来的程序不能与其他开发环境兼容的问题。打开xml文件之后,添加代码进行绑定。
[0087] NB-IoT发送控件的主要功能是向指定的目标IP地址及端口发送数据,因此,该控件将会使用到UEcom构件中的uecom_init、uecom_linkBase、uecom_linkCS、uecom_send函数。
[0088] 前文中介绍了自定义结构体类型Code的一个实例code,它包含了一个已经生成的控件所包含的所有信息。设计NB-IoT发送控件时,应考虑NB-IoT发送控件的各个功能在使用过程总有可能涉及到code的哪些成员。分析后可知,实现NB-IoT发送控件的功能需要涉及到code变量的初始化代码、插入控件位置处的代码、头文件、控件注释和恢复控件用的参数保存信息等变量。
[0089] 如图4所示,然后需要设计双击之后产生的控件配置窗体,对可供设置的参数使用文本框、单选框、组合框等罗列出来,然后编写修改参数时更新code成员的代码,并编写实例化和退出后的加载和保存代码。具体操作步骤如下:
[0090] (1)新建窗体并命名。此处命名为frmNbSend。
[0091] (2)添加按钮。添加“确定”、“取消”和“注释说明”等按钮,可从已有控件配置窗体中拷贝至此。
[0092] (3)修改frmNbSend的构造函数,传入变量为icon,icon中包含的code即为本控件的代码信息。
[0093] (4)确定本窗体包含的可设置控件为文本框类型的IP地址和端口号输入框以及与数据发送相关的控件。
[0094] (5)实现控件中内容发生改变时相应地对code中的内容进行修改。
[0095] (6)实现点击“确认”按钮时将控件中的代码保存至code的功能。
[0096] 在编写完控件配置窗体后,需将控件配置窗体与控件绑定起来,新增与NB-IoT发送控件的相关代码,完成新控件的添加,以后可选用新添加的控件来进行用户程序的图形化编程了。
[0097] 嵌入式编程产生的可执行代码运行在资源有限且性能各异的硬件上,有时在单片机上并没有操作系统,这使得现有的图形化编程技术存在芯片适应性较低的缺陷,已有的嵌入式图形化编程软件大都只针对特定的芯片,而未充分考虑多款芯片的兼容问题,当需要更换芯片时,改动较大。因此在一种实施方式中,代码编译模块依据终端的设备信息对控件进行编译,生成与相应终端的硬件相适配的可执行程序文件,以提高代码程序的芯片适应性。可以理解的是,系统设置有数据接收模块,用于接收终端发来的设备信息。
[0098] 芯片适应性是指通过本系统开发出的程序可以不经修改而使得其能够运行在不同配置的硬件系统上。芯片适应性依赖于NB-IoT终端的BIOS系统实现。如图5所示,在代码编译模块执行编译操作之前,首先通过串口向NB-IoT终端发送一个命令请求终端汇报设备信息。NB-IoT终端在接收到命令之后将把设备信息发送给本系统,本系统根据收到的设备信息,自动完成编译和烧录时的配置工作。
[0099] 开发者更换芯片时,只需考虑性能是否足够、硬件资源是否充足,而无需考虑芯片更换后的软件移植问题。
[0100] 提高芯片适应性的好处如下:(1)当开发者希望更改MCU时,可直接更换硬件,并使用本平台重新烧录程序,更改芯片的开发成本大幅度下降,用户只需更换新的硬件并使用系统重新烧录程序即可,不需要在平台上做任何修改;(2)能保证产品的成本最低、性能最优,一旦出现性价比更高的芯片,可直接用来替换产品的现有芯片;(3)降低了芯片选型的难度,即使选型出现失误,也不影响已经编码完成的软件,造成的损失也将被最小化。
[0101] 安全性问题是所有通信不得不面对的问题,无线通信在给我们带来无尽便利性的同时也带来了信息被窃取的险。从技术角度分析,信号被拦截是无法避免的,但可以通过技术手段保障真实信息的相对安全,也就是采用信息加密技术。目前常用的加密算法的加密性能虽然较好,但却存在复杂度大、资源占用率高和实现困难的缺点,因此在一种实施方式中,该系统还包括能够实现对称密钥型的轻量级加密方法的代码加密模块,用于使用多轮循环加密的方式对代码编译模块生成的可执行程序文件中的代码进行加密,以提高加密强度。
[0102] 代码加密模块包括密钥生成单元、加密单元和循环单元。密钥生成单元用于生成设定字节长度的数组作为密钥,例如定义一个4字节的数组作为密钥。加密单元用于利用密钥对可执行程序文件中的明文代码(也就是原文数组)进行异或运算,得到第一轮加密后的密文。循环单元用于对加密单元得到的密文进行循环移位,例如循环右移一个字节,然后使加密单元对循环移位后的密文与密钥进行异或运算,得到第二轮加密后的密文,之后重复进行循环移位和加密,直到循环次数到达设定循环阈值。理论上来说,加密强度将随着加密轮数的增加而增强,但这将花费更多的加解密时间、占用更多的资源。在研究了大量应用需求并结合实际情况之后,本实施方式选择5轮加密方式,也就是说,设定循环阈值为5。至此,完成了对原始数据的轻量级加密。另外,程序烧录模块将最终加密密文发送至NB-IoT终端,而不是发送原始的明文。
[0103] 可以理解的是,密文接收端(也就是NB-IoT终端)也会配置有相应的加解密算法,其中解密算法与加密算法的步骤相反。终端与本系统之间的通信均可以通过该加解密算法来加解密通信数据。该加密方法运算量较小,且具有不错的加密性能,加密后的密文长度与原文一致,不会增加网络开销。
[0104] 对于NB-IoT终端来说,其硬件平台被分为核心硬件和可扩展硬件。若NB-IoT终端的硬件直接一体化设计出来,当需求发生改变时,只有重新绘制PCB板,才能新增硬件,因此对硬件进行划分,使得无论是核心硬件亦或是可扩展控件,均可根据实际需求进行添加、裁剪或更换,同时用户可以根据需要自由选择可扩展硬件,而不用为所有的硬件买单,这有利于流线工艺的应用,这将大幅降低生产成本。
[0105] 核心硬件起着“指挥中枢”的作用,不依赖于任何其他模块,只需供电即可运行。核心硬件包括了MCU最小系统、NB-IoT通信模组、连接可扩展硬件的USB接口等组件。MCU最小系统是指可以使MCU正常运行的最小规模的外围硬件电路,它主要包括电源电路、复位电路、晶振电路等。
[0106] 可扩展硬件一般是具有某项具体功能的模块,它具有与核心硬件相对应的USB接口,可与核心硬件结合,组建成符合项目需求的系统。它的所有需求均体现在USB接口上,将它与核心硬件使用USB线连接之后,就能够正常工作,扩展性较强。
[0107] 网络数据发送有两种通信方式:TCP和UDP。UDP是不需要握手而直接发送数据的通信方式,它不会考虑接收方是否真正接收到数据。尽管UDP的发送速度快、占用资源少,但是却不能保证发送的可靠性,有很大机率发生数据丢失问题。因此在一种实施方式中,程序烧录模块通过TCP协议与终端进行数据通信。TCP在数据通信之前会首先进行三次握手,并建立TCP通信链路,若接收方未收到数据,还具有重传机制保证数据通信成功。尽管TCP的发送步骤繁杂,占用资源较多,但却保证了数据通信的稳定性和可靠性。因此,本构件选择TCP做为网络通信方式。
[0108] 大多数低功耗、低带宽限制场景下的图形化人机交互都采用嵌入式系统实现,物联网的快速发展以及人们对于图形化人机交互的强烈需求使物联网场景下的图形渲染系统显得尤为重要。因此,在一种实施方式中,该系统还包括图形渲染管线。渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的并行处理单元。图形渲染管线包括光栅扫描模块、像素着色模块、Alpha混合模块和片上缓冲模块。
[0109] 光栅扫描模块用于扫描对屏幕进行划分后得到的多个标准区域中所有的像素点,依序判断像素点是否被图元覆盖,并将图元转化为片元。
[0110] 光栅扫描模块可以以Z字形顺序进行像素点扫描,使得扫描轨迹曲线在空间上具有较好的相关性,利于提高缓存的命中率,并且硬件电路实现较为简单。光栅扫描模块还可以以计算像素点相对于图元四条边的边界函数的方式输出待绘制的像素流。光栅扫描模块每个周期都能完成一个像素点判定,并输出需要绘制的像素点,提高图形渲染管线的数据吞吐能
[0111] 像素着色模块用于将片元坐标经过几何变换至纹理空间得到纹理坐标。具体的,像素着色模块可以包括坐标变换单元,以进行齐次坐标的矩阵变换。像素着色模块还可以包括快速除法单元,用于将输入转化为浮点数,通过快速求倒数算法,近似求解尾数部分的除法结果,再通过迭代,进一步提高解的精度,最后输出尾数部分的除法结果和指数部分。
[0112] 然后像素着色模块将纹理坐标转换为对应像素存储在内存中的地址,公式为:addr=base_addr+pixle_code*pixel_size,其中addr为像素在内存中的地址,base_addr为该纹理存储的首地址,pixle_code为该像素是该纹理的第几个像素点,pixel_size为每个像素的大小。
[0113] 之后像素着色模块通过纹理滤波确定像素点的颜色值,为像素点着色。也就是说,当片元坐标经过几何变换至纹理空间时,需要通过纹理滤波来确定片元的颜色值,例如通过最近邻滤波、双线性滤波和双三次滤波的方式。
[0114] 具体的,像素着色模块可以包括纹理滤波单元,纹理滤波单元首先计算计算各个像素点的权值,通过参数共享,降低硬件资源开销,随后权值与对应像素点颜色值相乘,计算每个采样点颜色值对片元的贡献,最后通过两两相加的方式计算片元最终的颜色值。
[0115] 片元颜色值的具有两种生成模式。纯色填充模式下,图元被赋予指定的颜色值,不需要访问纹理数据,这样能降低系统的带宽消耗,填充效率极高。纹理贴图模式下,待绘制像素坐标首先转换为纹理像素坐标,随后读取换纹理像素颜色值,最后进行纹理滤波得到片元颜色值。
[0116] Alpha混合模块用于将前景图像与背景图像根据Alpha值进行混合,实现一种半透明效果,模拟了现实世界中前景与背景之间的遮挡关系。
[0117] 片上缓冲模块用于缓存图像混合时的背景图像的Alpha值和RGB值,以及缓存Alpha纹理信息,并在标准区域绘制结束时将结果写回帧缓存。
[0118] 图形渲染管线结合物联网场景下图形显示需求,能够实现在指定区域填充指定颜色,支持图像平移、旋转、缩放,投影等几何变换,支持Alpha混合,并通过优化硬件流水线与模块复用,提高算法的并行度,提高系统的数据处理能力。
[0119] 得益于IoT技术和图形化人机交互的应用和普及,IoT场景图形显示需求日益旺盛。然而,不断增加的图形界面复杂度及分辨率对嵌入式图形系统的计算能力提出了新的要求,传统的嵌入式方案很难满足复杂图形渲染时对于计算能力的需求,导致系统的性能下降严重。因此,在一种实施方式中,该系统包括图形渲染IP核,图形渲染IP核用于根据数据处理系统生成的图元信息以及纹理数据信息完成用户界面的渲染绘制工作。
[0120] 图形渲染IP核的数据访存结构包括:一级缓存、二级缓存、三级缓存、标签管理模块。
[0121] 各一级缓存分别为每个图形处理单元的私有缓存,配置有四组输入输出端口,能提高双线性滤波效率。
[0122] 二级缓存为各个图形处理单元的共享缓存,能有效利用多核运行时纹理数据局部相关性。
[0123] 三级缓存以DDR作为存储介质,降低系统读取Flash中数据的访问延时。
[0124] 图形处理单元、一级缓存、二级缓存、三级缓存依次连接,形成IP核数据访存的一部分结构。
[0125] 实际物理内存中地址的数据块会映射到低位地址相同的缓存的数据块,同时缓存中每个数据块会配有一个标签(TAG),记录了此时缓存中数据块在实际物理内存中的高位地址信息。
[0126] 当系统数据请求发送到缓存后,缓存首先根据请求地址低位,找到数据在缓存中的位置,读取相应的初始化标志位和标签数值,并进行相应的比较。若初始化标志位有效,且标签与请求地址的高位一致,说明此时缓存的数据是请求所需的数据,该数据请求为命中(Hit)状态,将缓存中的数据返回给系统,完成此次数据请求操作。若初始化标志位标志无效或者标签与请求地址的高位不一致,说明此时缓存中的数据不是请求所需的数据,该数据请求为未命中(Miss)状态,此时需要从物理内存中读取正确的数据写回到缓存对应位置,并更新相应的标签,然后将正确的数据返回给系统,完成此次数据读取操作。
[0127] 标签管理模块用于在接收到外部的数据请求时,读取缓存组编码中的标签值并与请求地址的高位进行比较,判断请求所需的数据是否在缓存中,也就是判断请求是否命中。若在,说明已命中,则输出命中ID标识,否则说明未命中,则依据LRU管理模块输出的替换数据块编码更新对应数据块的标签值。
[0128] LRU(Least Recently Used,最近最少使用)管理模块用于在请求所需的数据在缓存中的情况下,依据缓存组编码和命中ID标识对相应缓存组的LRU队列状态进行更新,输出请求读取RAM中的地址,否则依据当前LRU队列状态以及替换策略输出替换数据块编码。
[0129] 具体的,LRU管理模块首先执行一次初始化程序,初始化CAM(Coment-Addressable Memory,内容可寻址存储器)队列,然后根据请求的状态更新CAM队列,在命中状态下,首先判断该请求命中的数据块在队列中的位置,再根据命中信息,更新CAM队列信息。在未命中状态下,首先输出替换数据块编码,再更新CAM队列信息。
[0130] 替换策略可以采用最近最多使用(Most Recently Used,MRU)策略,还可以采用随机替换策略、先进先出策略或最近最多使用(Most Recently Used,MRU)策略。
[0131] 随机存储管理模块用于在请求所需的数据在缓存中的情况下,依据地址控制缓存读取RAM对应地址中的数据并输出,否则更新RAM中对应的数据块并返回当前请求所需的数据。
[0132] 图形渲染IP核基于TBR的图形渲染架构,采用硬件逻辑实现屏幕区域任务划分,通过实时生成的方式减少中间数据缓存,采用LRU组关联缓存,优化了图形渲染IP核的数据访存通路,采用FIFO结构延迟数据访问延迟。
[0133] 以下为将本实施例应用到智能农业大棚系统的具体实施方式。
[0134] 智能农业大棚演示系统的目的是验证利用物联网技术解决农业生产问题的可能性。针对当前农业生产生产过程中的问题,智能农业大棚演示系统应具有的功能为:(1)自动灌溉。在农作物水分不足时,自动灌溉,在灌溉一定量之后自动停止。(2)智能光照。根据光照情况,自动调整光照亮度。(3)智能温控。根据当前温度情况,自动将温度调整至适宜范围。(4)智能报警。若出现温度、湿度等异常情况,应能够直接报警。(5)远程监视。将大棚的各种传感器信息自动上传至服务器,并通过网页、APP、客户端或微信小程序进行展示,使得用户能够通过远程了解智能农业大棚的状态。
[0135] NB-IoT终端负责智能农业大棚参数信息的采集、处理,并将数据定时上传至服务器。服务器收到数据之后将数据转发至手机APP,服务器对数据内容进行分析,若有需要报警的信息,则通过短信报警。
[0136] NB-IoT终端的核心硬件MCU选用MKL36Z64芯片,其是是NXP推出的基于Arm Cortex M0+内核的32位嵌入式MCU;也可以选用S32K144芯片,其是NXP推出的基于Arm Cortex M4F内核的32位嵌入式MCU。通信模组采用高新兴物联推出的ME3616型号模组,该模组是一款专为低功率、低功耗、远距离、海量连接而设计的支持NB-IoT通信标准的窄带物联网通信模组。
[0137] 可扩展硬件则根据上述功能需求配备了开关传感器、光线传感器、温度传感器、土壤湿度传感器,以及彩灯、达风扇和水。开关传感器的作用是通过按键使得用户可以控制MCU的行为,相当于一个按键开关。马达风扇是具有机械部件的执行器件。它含有一台直流电机,可将电能转换为机械能,
[0138] 最后将核心硬件和可扩展硬件通过USB数据线连接为一个整体,完成智能农业大棚系统硬件平台的搭建。可扩展硬件模块的对外接口是A型USB接口,内含4根线,这4根线的具体含义由具体模块决定,但需要与核心硬件的对外接口保持一致。
[0139] NB-IoT终端的软件是通过图形化编程系统以图形拖拽的方式产生的,它主要包括主程序和中断程序,图形化代码示意图如图6所示,软件平台的编码过程与图6的流程图类似,使用者可以将更多时间用在设计逻辑上。本系统共使用了两个事件(中断):收到开关信号事件和时间到达事件。
[0140] 开关信号事件由一个开关传感器触发,主要功能是关闭蜂鸣器。蜂鸣器是本系统用于报警的手段之一,当温度超出了设定的阈值之后,将会启动蜂鸣器进行报警。时间到达事件在一小时到达之后会被触发。此时,NB-IoT终端将会向服务器发送一条记录NB-IoT终端检测到的传感器数据。除了两个事件之外,其余的代码均为主程序代码。本系统中共封装了三个函数:
[0141] (1)采集土壤湿度信息函数。土壤湿度信息由土壤湿度传感器采集而得,若湿度低于灌溉阈值,则启动电机(水泵)开始灌溉,当灌溉水分使得湿度归于正常时,关闭电机完成灌溉过程。
[0142] (2)采集温度信息函数。温度信息由温度传感器采集而得,当温度较高时,系统将会启动马达风扇进行降温,防止温度过高造成火灾的情形,若温度超过了马达风扇的降温能力,NB-IoT终端将使用蜂鸣器的方式进行报警。
[0143] (3)采集光照信息函数。通过光照强度传感器采集到的光照强度数据自动判断是否需要补光或者减光的需求,并根据判断结果控制彩灯的亮度和颜色,以使农作物更好地通过光合作用合成出需要的养分。
[0144] 在拖拽控件之后,通过对控件块的属性进行配置完成代码编写。编程完成之后,利用软件平台的编译和烧录功能将程序烧录入NB-IoT终端中。服务器程序由C#开发而出,并运行于阿里服务器之上,主要完成了接收NB-IoT终端发送的数据并转发至手机App的功能。若有需要报警的信息,则使用短信进行报警。用户手机的Android程序是在官方开发工具Android Studio环境中编写而成,主要功能是向用户展示智能农业大棚的状态信息。至此完成了只能农业大棚系统的软硬件平台的搭建。在实验环境下,对农业大棚系统进行了高温测试、干旱测试等,该系统运行良好,实现了报警、自动灌溉等功能。
[0145] 需要说明的是:在附图中,自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。所描述的实施例是本发明一部分实施例,而不是全部的实施例,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0146] 本文中的模块、单元或组件的划分仅仅是一种逻辑功能的划分,在实际实现时可以有其他的划分方式,例如多个模块和/或单元可以结合或集成于另一个系统中。作为分离部件说明的模块、单元、组件在物理上可以是分开的,也可以是不分开的。作为单元显示的部件可以是物理单元,也可以不是物理单元,即可以位于一个具体地方,也可以分布到网格单元中。因此可以根据实际需要选择其中的部分或全部的单元来实现实施例的方案。
[0147] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈