CN113688136B - 一种基于mvc模型的plc变量表分组方法及系统 - Google Patents
一种基于mvc模型的plc变量表分组方法及系统 Download PDFInfo
- Publication number
- CN113688136B CN113688136B CN202110982902.XA CN202110982902A CN113688136B CN 113688136 B CN113688136 B CN 113688136B CN 202110982902 A CN202110982902 A CN 202110982902A CN 113688136 B CN113688136 B CN 113688136B
- Authority
- CN
- China
- Prior art keywords
- data
- variable
- variable table
- model
- grouping
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
本发明提出了一种基于MVC模型的PLC变量表分组方法及系统,包括:建立变量表的结构,包括:抽象一个共同的基类QMyDataType,从该基类中派生出多种基础数据类型,为数据类型表中数据项的子节点提供可选的数据类型;将变量表的数据存储在基类QMyUserType的一个实例中;将分组类作为数据类型派生自QMyUserType,QMyUserType的基类有一个isGroup属性,只有添加分组的时候将其置为1;变量表每添加一个分组则创建一个QMyDataType对象,插入到m_varRootType中;再创建一个model关联到分组数据,变量表维护一个QMap容器的变量,建立分组名称与其model的映射;当检测到用户请求查看分组数据时,在项目树上仅显示分组名称;根据分组名称获取分组的model并关联到视图类上;遍历rootType,存储为分层结构的xml格式;读取的时候解析xml文件生成rootType。
Description
技术领域
本发明涉及PLC可编程控制器技术领域,特别涉及一种基于MVC模型的PLC变量表分组方法及系统。
背景技术
PLC可编程控制器在世界自动化领域广泛应用。随着越来越多的PLC厂商出现,各个厂商的PLC之间需要相互协作、相互移植的需求显著增多。IEC61131-3标准是由国际电工委员会(IEC)制定IEC 61131标准的第3部分,用于规范可编程逻辑控制器的编程规范,使得各个厂商之间的PLC程序更容易互相移植,互相兼容。
变量是IEC61131-3标准中的一个重要组成部分,变量表也是PLC集成开发平台软件中的一个重要模块。变量表的结构复杂,其设计合理性显得尤为重要。自动化工程师在编程时习惯使用表格的方式定义变量,每个变量有多个属性,变量类型可以是基础类型也可以是自定义类型,维数可以是1~n维。所以变量表一般都是以树形列表的形式出现。
变量表的数据量可能会很大,大型项目有上千个变量。为了便于查找方便本发明需要为变量分组。
一般的方法是给每个变量添加一个所属分组名称的属性,显示的时候根据分组名称过滤。由于分组名称是可以修改的,这就导致修改分组名称的时候需要去更新该分组下所有变量的数据带来时间和资源的浪费。
另一种方法是使用组合模式维护一份分组与所属变量名称的清单,在树形结构中显示分组与变量的主从关系,这种方法可以清晰查看分组与变量的主从关系。但是所有分组的变量都会在一个界面中显示会很混乱,此外变量个数太多的时候,通过树形结构来查看主从关系也很不方便。
此外,工业现场实际项目应用中变量表的数据个数可能有几千甚至上万个。自动化工程师在编程过程中会把相关的变量放到连续的区域,使用过程中中希望能够快速定位到某些数据。但是变量个数太多的情况下,无法实现快速定位。
发明内容
本发明的目的旨在至少解决所述技术缺陷之一。
为此,本发明的目的在于提出一种基于MVC模型的PLC变量表分组方法及系统。
为了实现上述目的,本发明的实施例提供一种基于MVC模型的PLC变量表分组方法,包括如下步骤:
步骤S1,建立变量表的结构,包括:抽象一个共同的基类QMyDataType,从该基类中派生出多种基础数据类型,为数据类型表中数据项的子节点提供可选的数据类型,其中,所述所数据类型表的每个数据项即为变量表允许选择使用的变量类型;
步骤S2,将所述变量表的数据存储在所述基类QMyUserType的一个实例m_varRootType中;
步骤S3,将分组类作为一种数据类型派生自QMyUserType,QMyUserType的基类QMyDataType有一个isGroup属性,只有添加分组的时候将其置为1,变量表每添加一个分组则创建一个QMyDataType对象,插入到m_varRootType中;再创建一个model关联到分组数据,变量表维护一个QMap容器的变量,建立分组名称与其model的映射;当检测到用户请求查看分组数据时,在项目树上仅显示分组名称;当检测到用选中一个分组时,针对选中的该分组创建视图类;根据分组名称获取分组的model并关联到视图类上,在表格中对变量的修改更新到了m_varRootType的对应子项中;在数据存储时,遍历m_varRootType,存储为分层结构的xml格式;读取的时候解析xml文件生成m_varRootType。
进一步,在所述步骤S1中,当扩展数据类型时,在所述基类的基础上添加新类型的派生类。
进一步,在所述步骤S1中,所述变量表中的数据采用基本数据类型或采用数据类型表中定义的复杂数据类型;其中,所述复杂数据类型为用户自定义数据类型。
进一步,在所述步骤S3中,将分组也作为一种数据类型和具体的数据类型一样从同一个基类派生。
进一步,在所述步骤S3中,读取xml文件创建变量表的m_varRootType结构以后,再遍历这个m_varRootType的子节点,将isGroup为1的节点找出来生成各自的model,model和分组通过QMap容器的变量关联起来。
本发明实施例还提出一种基于MVC模型的PLC变量表分组系统,包括:变量表结构建立模块、变量表数据存储模块和变量表分组模块,其中,
所述变量表结构建立模块用于建立变量表的结构,包括:抽象一个共同的基类QMyDataType,从该基类中派生出多种基础数据类型,为数据类型表中数据项的子节点提供可选的数据类型,其中,所述所数据类型表的每个数据项即为变量表允许选择使用的变量类型;
所述变量表数据存储模块用于将所述变量表的数据存储在所述基类QMyUserType的一个实例m_varRootType中;
所述变量表分组模块用于将将分组类作为一种数据类型派生自QMyUserType,QMyUserType的基类QMyDataType有一个isGroup属性,只有添加分组的时候将其置为1,变量表每添加一个分组则创建一个QMyDataType对象,插入到m_varRootType中;再创建一个model关联到分组数据,变量表维护一个QMap容器的变量,建立分组名称与其model的映射;当检测到用户请求查看分组数据时,在项目树上仅显示分组名称;当检测到用选中一个分组时,针对选中的该分组创建视图类;根据分组名称获取分组的model并关联到视图类上,在表格中对变量的修改更新到了m_varRootType的对应子项中;在数据存储时,遍历m_varRootType,存储为分层结构的xml格式;读取的时候解析xml文件生成m_varRootType。
进一步,所述变量表结构建立模块在扩展数据类型时,在所述基类的基础上添加新类型的派生类。
进一步,所述变量表中的数据采用基本数据类型或采用数据类型表中定义的复杂数据类型;其中,所述复杂数据类型为用户自定义数据类型。
进一步,所述变量表分组模块用于所述变量表分组模块将分组作为一种数据类型和具体的数据类型一样从同一个基类派生。
进一步,所述变量表分组模块读取xml文件创建变量表的m_varRootType结构以后,再通过遍历这个rootType的子节点,将isGroup为1的节点找出来生成各自的model,model和分组通过QMap容器的变量关联起来。
根据本发明实施例的基于MVC模型的PLC变量表分组方法及系统,提供一种能够不增加后续维护工作量,不需要单独维护分组和变量名称的方法来实现变量表的分组,而且还能同时打开多个分组的窗口。本发明选用Qt开发框架,Qt开发框架作为跨平台C++图形用户界面应用程序开发框架,其既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(MetaObject Compiler,moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。Qt的MVC开发模式也是一种常用的开发模式,它能将数据处理、数据组织、数据展示、数据编辑分离开来,实现各功能的解耦和模块化,在实际开发过程中具有较广泛的应用。
本发明解决了现有的工业现场实际项目应用中,自动化工程师在编程过程中会把相关的变量放到连续的区域,使用过程中中无法快速定位到某些数据的问题,本发明通过提供一种能够不增加后续维护工作量,不需要单独维护分组和变量名称的方法来实现变量表的分组,而且还能同时打开多个分组的窗口。
本发明将分组作为一种数据类型的方法,避免了向每个子元素设置分组名称属性。分组名称修改也仅仅需要更新分组节点的信息,对子项没有任何影响。通过为每一个分组创建Model实现多个分组数据可同时查看的功能,所有分组共用视图部分代码。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1为根据本发明实施例的基于MVC模型的PLC变量表分组方法的流程图;
图2a和图2b为根据本发明实施例的数据类型表的示意图;
图3为根据本发明实施例的变量表的示意图;
图4为根据本发明实施例的数据类型设计架构图;
图5为根据本发明实施例的数据类型派生示意图;
图6为根据本发明实施例的分组名称示意图;
图7为根据本发明实施例的变量表的结构示意图;
图8为根据本发明实施例的基于MVC模型的PLC变量表分组系统的结构图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
本发明提出一种基于MVC模型的PLC变量表分组方法及系统,涉及数据表类的设计,实现,数据表的分组以及存储读取。
如图1所示,本发明实施例的基于MVC模型的PLC变量表分组方法,包括如下步骤:
步骤S1,建立变量表的结构,包括:抽象一个共同的基类QMyDataType,从该基类中派生出多种数据类型,包括技术数据类型例如bool,byte,word等,以及自定义类型QMyUserType。需要说明的是,本步骤不是构成了数据表,而是为数据类型表中数据项的子节点提供可选的数据类型。
具体的,设计变量表,变量表中每一个变量包含多个属性,例如名称,维数,类型,地址,说明等。在本发明的实施例中,变量可以是复杂结构也可以是简单结构。需要说明的是,简单结构的类型就是基本的数据类型,复杂结构的类型是用户自定义类型。现有技术中的方法是将所有的数据类型混淆在一起共用一个基类,每个变量都是这个基类的一个对象。而本发明则是抽象一个共同的基类,各种数据类型分别从这个基类派生出来,将来数据类型扩展的时候只需要添加新类型的派生类,不需要修改原有的代码,这些数据类型还可以给多种数据表使用。
变量所使用的基本数据类型包括BOOL,REAL,INT,WORD,DWORD等,变量所使用的复杂类型也是由这些基础类型组成,复杂类型在数据类型表中进行定义供变量表使用。数据类型表的每一个数据项就是变量表可以选择使用的变量类型。数据类型表和变量表的关系举例如图2a和图2b所示。如图2a所示,在数据类型表中定义了t1,t2两种数据类型,t1,t2分别有自己的子节点。如图2b所示,基础类型是诸如BOOL Byte这种基础类型,数据类型表的每个数据项不直接使用这些类型,是数据项的若干个子项使用。其中,aa bb构成了数据类型表。BOOL,REAL,INT,WORD,DWORD,BYTE,DINT是基本数据类型,它们没有构成数据类型表,而是为数据类型表的数据项aa1...bb1提供了可选的数据类型。
变量表中的变量可以选用基础类型,也可以选择数据类型表中的定义的类型t1,t2,如图3所示。
如图3所示,变量表中的数据可以使用基本数据类型,也可以使用数据类型表中定义的复杂数据类型。数据类型表中的数据类型可以很复杂,子项的维数可以自定义,子项的类型可以是另外一个数据类型。变量表的维数也可以自定义。本质上讲数据类型表和变量表没有区别,他们的数据可以从同一个基类派生。数据类设计,如图4所示。
QMyDataType是所有数据类型的基类,它定义了各种数据类型共有的属性和接口。除了基本的数据类型以外,QMyUserType是自定义数据类型,这种类型可以由多种基础类型和复杂类型组成,并且维护了一个子节点list。
步骤S2,将变量表的数据存储在基类QMyUserType的一个实例m_varRootType。
数据表的实现:整个变量表的数据存储在QMyDataType的一个实例中。
QMyDataType*m_varRootType;
m_varRootType=new QMyUserType("","");
QMyVarModel类派生自QAbstractItemModel,关联了QMyDataType实例对象。
QMyVarModel*m_varModel;
m_varModel=new QMyVarModel(this,this);
m_varModel->setRootType(m_varRootType);
变量表数据编辑触发表数据的更新。
步骤S3,将分组类作为一种数据类型派生自QMyUserType,QMyUserType的基类QMyDataType有一个isGroup属性,只有添加分组的时候将其置为1,变量表每添加一个分组则创建一个QMyDataType对象,插入到m_varRootType中;再创建一个model关联到分组数据,变量表维护一个QMap容器的变量,建立分组名称与其model的映射;当检测到用户请求查看分组数据时,在项目树上仅显示分组名称;当检测到用选中一个分组时,针对选中的该分组创建视图类;根据分组名称获取分组的model并关联到视图类上,在表格中对变量的修改更新到了m_varRootType的对应子项中;在数据存储时,遍历m_varRootType,存储为分层结构的xml格式;读取的时候解析xml文件生成m_varRootType。其中,m_varRootType和rootType是同一个参数。
如图5所示,本发明将分组类作为一种数据类型派生自QMyUserType,QMyUserType有一个isGroup属性,只有在QMyGroupType类中才能置为1。
整个变量表的数据存储在m_varRootType中,每个变量是m_varRootType的一个子项,每个变量可以是1~n维的基础数据类型,也可以是1~n维的复杂数据类型(复杂类型在数据类型表中定义)。本发明将分组名称生成一个QMyUserType的实例,作为变量表的一个子项添加到m_varRootType中。
本发明给变量表维护一个QMap容器的变量,其定义为QMap<QString,QMyVarModel*>m_varModels;
每添加一个分组创建一个QMyDataType对象,插入到m_varRootType中。
QMyDataType*type=genType(name,name);
type->setGroup(1);
m_varRootType->insert(m_varRootType->childCount(),type);
再创建一个model关联到分组,m_varModels中新增当前分组与其model的映射。
QMyVarModel*model=new QMyVarModel(this,this);
model->setRootType(type);
m_varModels[name]=model;
自动化工程师需要查看分组数据的时候,本发明在项目树上仅显示分组名称,如图6所示。
选中某个分组,创建视图类,根据分组名称获取分组的Model并关联到视图类上,在表格中对变量的修改更新到了m_varRootType的对应子项中。
QMyVarDockWidget*var=new QMyVarDockWidget(name,this->doc());
QMyVarModel*model=this->doc()->getVarModel(name);
var->setModel(model);
虽然是从同一个基类派生,实际上变量表的结构如图7所示,root下面插入了若干个Group,Group下面插入了若干个variable。
在本步骤中,存储的时候只需要遍历rootType,数据以xml格式存储。数据表分组的特点在于它不是单独创建一个结构,而是将分组也作为一种数据类型和具体的数据类型一样从同一个基类派生。
读取的时候解析xml文件生成rootType。读取xml文件创建变量表的m_varRootType结构以后,再遍历这个m_varRootType的子节点,将isGroup为1的节点找出来生成各自的model,model和分组通过QMap容器的变量关联起来。这种存储方式更加灵活,也不存在以后的版本兼容问题。
如图8所示,本发明实施例还提供一种基于MVC模型的PLC变量表分组系统,包括:变量表结构建立模块1、变量表数据存储模块2和变量表分组模块3。
具体的,变量表结构建立模块1用于建立变量表的结构,包括:抽象一个共同的基类QMyDataType,从该基类中派生出多种数据类型,包括技术数据类型例如bool,byte,word等,以及自定义类型QMyUserType。需要说明的是,本步骤不是构成了数据表,而是为数据类型表中数据项的子节点提供可选的数据类型。
变量表结构建立模块1设计变量表,变量表中每一个变量包含多个属性,例如名称,维数,类型,地址,说明等。在本发明的实施例中,变量可以是复杂结构也可以是简单结构。需要说明的是,简单结构的类型就是基本的数据类型,复杂结构的类型是用户自定义类型。现有技术中的方法是将所有的数据类型混淆在一起共用一个基类,每个变量都是这个基类的一个对象。而本发明则是抽象一个共同的基类,各种数据类型分别从这个基类派生出来,将来数据类型扩展的时候只需要添加新类型的派生类,不需要修改原有的代码,这些数据类型还可以给多种数据表使用。
变量所使用的基本数据类型包括BOOL,REAL,INT,WORD,DWORD等,变量所使用的复杂类型也是由这些基础类型组成,复杂类型在数据类型表中进行定义供变量表使用。数据类型表的每一个数据项就是变量表可以选择使用的变量类型。数据类型表和变量表的关系举例如图2所示。
在数据类型表中定义了t1,t2两种数据类型,t1,t2分别有自己的子节点。
变量表中的变量可以选用基础类型,也可以选择数据类型表中的定义的类型t1,t2,如图3所示。
如图3所示,变量表中的数据可以使用基本数据类型,也可以使用数据类型表中定义的复杂数据类型。数据类型表中的数据类型可以很复杂,子项的维数可以自定义,子项的类型可以是另外一个数据类型。变量表的维数也可以自定义。本质上讲数据类型表和变量表没有区别,他们的数据可以从同一个基类派生。数据类设计,如图4所示。
QMyDataType是所有数据类型的基类,它定义了各种数据类型共有的属性和接口。除了基本的数据类型以外,QMyUserType是自定义数据类型,这种类型可以由多种基础类型和复杂类型组成,并且维护了一个子节点list。
变量表数据存储模块2用于将变量表的数据存储在基类QMyUserType的一个实例m_varRootType中。
具体的,数据表的实现:整个变量表的数据存储在QMyDataType的一个实例中。
QMyDataType*m_varRootType;
m_varRootType=new QMyUserType("","");
QMyVarModel类派生自QAbstractItemModel,关联了QMyDataType实例对象。
QMyVarModel*m_varModel;
m_varModel=new QMyVarModel(this,this);
m_varModel->setRootType(m_varRootType);
变量表数据编辑触发表数据的更新。
变量表分组模块3用于用于将将分组类作为一种数据类型派生自QMyUserType,QMyUserType的基类QMyDataType有一个isGroup属性,只有添加分组的时候将其置为1,变量表每添加一个分组则创建一个QMyDataType对象,插入到m_varRootType中;再创建一个model关联到分组数据,变量表维护一个QMap容器的变量,建立分组名称与其model的映射;当检测到用户请求查看分组数据时,在项目树上仅显示分组名称;当检测到用选中一个分组时,针对选中的该分组创建视图类;根据分组名称获取分组的model并关联到视图类上,在表格中对变量的修改更新到了m_varRootType的对应子项中;在数据存储时,遍历m_varRootType,存储为分层结构的xml格式;读取的时候解析xml文件生成m_varRootType。
如图5所示,变量表分组模块3将分组类作为一种数据类型派生自QMyUserType,QMyUserType有一个isGroup属性,只有在QMyGroupType类中才能置为1。
整个变量表的数据存储在m_varRootType中,每个变量是m_varRootType的一个子项,每个变量可以是1~n维的基础数据类型,也可以是1~n维的复杂数据类型(复杂类型在数据类型表中定义)。本发明将分组名称生成一个QMyUserType的实例,作为变量表的一个子项添加到m_varRootType中。
本发明给变量表维护一个QMap容器的变量,其定义为QMap<QString,QMyVarModel*>m_varModels;
每添加一个分组创建一个QMyDataType对象,插入到m_varRootType中。
QMyDataType*type=genType(name,name);
type->setGroup(1);
m_varRootType->insert(m_varRootType->childCount(),type);
再创建一个model关联到分组,m_varModels中新增当前分组与其model的映射。
QMyVarModel*model=new QMyVarModel(this,this);
model->setRootType(type);
m_varModels[name]=model;
自动化工程师需要查看分组数据的时候,本发明在项目树上仅显示分组名称,如图6所示。
选中某个分组,创建视图类,根据分组名称获取分组的Model并关联到视图类上,在表格中对变量的修改更新到了m_varRootType的对应子项中。
QMyVarDockWidget*var=new QMyVarDockWidget(name,this->doc());
QMyVarModel*model=this->doc()->getVarModel(name);
var->setModel(model);
虽然是从同一个基类派生,实际上变量表的结构如图7所示,root下面插入了若干个Group,Group下面插入了若干个variable。
在本步骤中,存储的时候只需要遍历rootType,数据以xml格式存储。数据表分组的特点在于它不是单独创建一个结构,而是将分组也作为一种数据类型和具体的数据类型一样从同一个基类派生。
读取的时候解析xml文件生成rootType。,读取xml文件创建变量表的m_varRootType结构以后,再遍历这个m_varRootType的子节点,将isGroup为1的节点找出来生成各自的model,model和分组通过QMap容器的变量关联起来。这种存储方式更加灵活,也不存在以后的版本兼容问题。
本发明实施例提供的基于MVC模型的PLC变量表分组方法及系统,将所有数据类型(包括基础类型,自定义类型和分组)从一个基类派生;将分组作为一种数据类型存在;每个分组创建一个Model,Model与分组名称一一对应。除了工控行业,其他软件开发涉及到数据表分组都可能用到本发明的方法。需要说明的是,以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
根据本发明实施例的基于MVC模型的PLC变量表分组方法及系统,提供一种能够不增加后续维护工作量,不需要单独维护分组和变量名称的方法来实现变量表的分组,而且还能同时打开多个分组的窗口。本发明选用Qt开发框架,Qt开发框架作为跨平台C++图形用户界面应用程序开发框架,其既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(MetaObject Compiler,moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。Qt的MVC开发模式也是一种常用的开发模式,它能将数据处理、数据组织、数据展示、数据编辑分离开来,实现各功能的解耦和模块化,在实际开发过程中具有较广泛的应用。
本发明解决了现有的工业现场实际项目应用中,自动化工程师在编程过程中会把相关的变量放到连续的区域,使用过程中中无法快速定位到某些数据的问题,本发明通过提供一种能够不增加后续维护工作量,不需要单独维护分组和变量名称的方法来实现变量表的分组,而且还能同时打开多个分组的窗口。
本发明将分组作为一种数据类型的方法,避免了向每个子元素设置分组名称属性。分组名称修改也仅仅需要更新分组节点的信息,对子项没有任何影响。通过为每一个分组创建Model实现多个分组数据可同时查看的功能,所有分组共用视图部分代码。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在不脱离本发明的原理和宗旨的情况下在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。本发明的范围由所附权利要求及其等同限定。
Claims (10)
1.一种基于MVC模型的PLC变量表分组方法,其特征在于,包括如下步骤:
步骤S1,建立变量表的结构,包括:抽象一个共同的基类QMyDataType,从该基类中派生出多种基础数据类型,为数据类型表中数据项的子节点提供可选的数据类型,其中,所述数据类型表的每个数据项即为变量表允许选择使用的变量类型;
步骤S2,将所述变量表的数据存储在所述基类QMyUserType的一个实例m_varRootType中;
步骤S3,将分组类作为一种数据类型派生自QMyUserType,QMyUserType的基类QMyDataType有一个isGroup属性,只有添加分组的时候将其置为1,变量表每添加一个分组则创建一个QMyDataType对象,插入到m_varRootType中;再创建一个model关联到分组数据,变量表维护一个QMap容器的变量,建立分组名称与其model的映射;当检测到用户请求查看分组数据时,在项目树上仅显示分组名称;当检测到用选中一个分组时,针对选中的该分组创建视图类;根据分组名称获取分组的model并关联到视图类上,在表格中对变量的修改更新到了m_varRootType的对应子项中;在数据存储时,遍历m_varRootType,存储为分层结构的xml格式;读取的时候解析xml文件生成m_varRootType。
2.如权利要求1所述的基于MVC模型的PLC变量表分组方法,其特征在于,在所述步骤S1中,当扩展数据类型时,在所述基类的基础上添加新类型的派生类。
3.如权利要求1所述的基于MVC模型的PLC变量表分组方法,其特征在于,在所述步骤S1中,所述变量表中的数据采用基本数据类型或采用数据类型表中定义的复杂数据类型;其中,所述复杂数据类型为用户自定义数据类型。
4.如权利要求1所述的基于MVC模型的PLC变量表分组方法,其特征在于,在所述步骤S3中,将分组也作为一种数据类型和具体的数据类型一样从同一个基类派生。
5.如权利要求1所述的基于MVC模型的PLC变量表分组方法,其特征在于,在所述步骤S3中,读取xml文件创建变量表的m_varRootType结构以后,再遍历这个m_varRootType的子节点,将isGroup为1的节点找出来生成各自的model,model和分组通过QMap容器的变量关联起来。
6.一种基于MVC模型的PLC变量表分组系统,其特征在于,包括:变量表结构建立模块、变量表数据存储模块和变量表分组模块,其中,
所述变量表结构建立模块用于建立变量表的结构,包括:抽象一个共同的基类QMyDataType,从该基类中派生出多种基础数据类型,为数据类型表中数据项的子节点提供可选的数据类型,其中,所述数据类型表的每个数据项即为变量表允许选择使用的变量类型;
所述变量表数据存储模块用于将所述变量表的数据存储在所述基类QMyUserType的一个实例m_varRootType中;
所述变量表分组模块用于将将分组类作为一种数据类型派生自QMyUserType,QMyUserType的基类QMyDataType有一个isGroup属性,只有添加分组的时候将其置为1,变量表每添加一个分组则创建一个QMyDataType对象,插入到m_varRootType中;再创建一个model关联到分组数据,变量表维护一个QMap容器的变量,建立分组名称与其model的映射;当检测到用户请求查看分组数据时,在项目树上仅显示分组名称;当检测到用选中一个分组时,针对选中的该分组创建视图类;根据分组名称获取分组的model并关联到视图类上,在表格中对变量的修改更新到了m_varRootType的对应子项中;在数据存储时,遍历m_varRootType,存储为分层结构的xml格式;读取的时候解析xml文件生成m_varRootType。
7.如权利要求6所述的基于MVC模型的PLC变量表分组系统,其特征在于,所述变量表结构建立模块在扩展数据类型时,在所述基类的基础上添加新类型的派生类。
8.如权利要求6所述的基于MVC模型的PLC变量表分组系统,其特征在于,所述变量表中的数据采用基本数据类型或采用数据类型表中定义的复杂数据类型;其中,所述复杂数据类型为用户自定义数据类型。
9.如权利要求6所述的基于MVC模型的PLC变量表分组系统,其特征在于,所述变量表分组模块将分组作为一种数据类型和具体的数据类型一样从同一个基类派生。
10.如权利要求6所述的基于MVC模型的PLC变量表分组系统,其特征在于,所述变量表分组模块读取xml文件创建变量表的m_varRootType结构以后,再通过遍历这个rootType的子节点,将isGroup为1的节点找出来生成各自的model,model和分组通过QMap容器的变量关联起来。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110982902.XA CN113688136B (zh) | 2021-08-25 | 2021-08-25 | 一种基于mvc模型的plc变量表分组方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110982902.XA CN113688136B (zh) | 2021-08-25 | 2021-08-25 | 一种基于mvc模型的plc变量表分组方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113688136A CN113688136A (zh) | 2021-11-23 |
CN113688136B true CN113688136B (zh) | 2023-04-28 |
Family
ID=78582575
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110982902.XA Active CN113688136B (zh) | 2021-08-25 | 2021-08-25 | 一种基于mvc模型的plc变量表分组方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113688136B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101197818A (zh) * | 2006-12-08 | 2008-06-11 | 中兴通讯股份有限公司 | 一种asn.1报文面向对象的处理方法 |
CN104965497A (zh) * | 2015-06-25 | 2015-10-07 | 惠州时代电池有限公司 | 在线式生产数据快速生成与管理方法及系统 |
CN108756962A (zh) * | 2018-05-04 | 2018-11-06 | 西安科技大学 | 一种基于mvc设计模式的液压支架监测方法及系统 |
CN110825369A (zh) * | 2019-11-07 | 2020-02-21 | 四川长虹电器股份有限公司 | 一种基于java语言的代码自动生成的方法 |
CN112035093A (zh) * | 2020-08-24 | 2020-12-04 | 北京博皓科技有限公司 | 一种能够快速安全和灵活生产软件的程序框架 |
-
2021
- 2021-08-25 CN CN202110982902.XA patent/CN113688136B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101197818A (zh) * | 2006-12-08 | 2008-06-11 | 中兴通讯股份有限公司 | 一种asn.1报文面向对象的处理方法 |
CN104965497A (zh) * | 2015-06-25 | 2015-10-07 | 惠州时代电池有限公司 | 在线式生产数据快速生成与管理方法及系统 |
CN108756962A (zh) * | 2018-05-04 | 2018-11-06 | 西安科技大学 | 一种基于mvc设计模式的液压支架监测方法及系统 |
CN110825369A (zh) * | 2019-11-07 | 2020-02-21 | 四川长虹电器股份有限公司 | 一种基于java语言的代码自动生成的方法 |
CN112035093A (zh) * | 2020-08-24 | 2020-12-04 | 北京博皓科技有限公司 | 一种能够快速安全和灵活生产软件的程序框架 |
Non-Patent Citations (1)
Title |
---|
刘斌 ; 孙喜龙 ; 吴宗生 ; .基于MVC模式的油气管道信息系统一体化设计.信息技术.2016,(12),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN113688136A (zh) | 2021-11-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9158508B2 (en) | Strategy editor for process control supporting drag and drop connections to declarations | |
US5392220A (en) | Method and system for organizing data | |
US7468731B2 (en) | Automatic resizing of moved attribute elements on a graphical representation of a control object | |
CN108681444A (zh) | 一种基于xml技术的软plc组态开发方法 | |
US20140196006A1 (en) | Appearance objects for configuring and graphically displaying programmed/configured process control | |
US8850335B2 (en) | Strategy editor supporting automatic designation of displayed line style based upon a connection data type | |
US20090327942A1 (en) | multi-mode editor for configuring process control blocks including both logical functions and arithmetic computations | |
EP0496494A2 (en) | Software maintenance system | |
CN112099792B (zh) | 一种可视化ui样式设计方法及系统 | |
CA2144877A1 (en) | Program modeling system | |
US20140222181A1 (en) | Automatically updating graphical symbols in a control loop strategy diagram | |
US20070240070A1 (en) | Strategy editor supporting designating execution order via control object graphical representations | |
Witsch et al. | Close integration between UML and IEC 61131-3: New possibilities through object-oriented extensions | |
Drath | AutomationML: the industrial cookbook | |
CN111722598B (zh) | 一种用于工业过程的模块工程化的系统和方法 | |
CN113688136B (zh) | 一种基于mvc模型的plc变量表分组方法及系统 | |
EP3712733A1 (en) | Method and system of preparing engineering data for industrial control systems | |
US20060184715A1 (en) | Method and system for exchanging description data between projects | |
Nierstrasz | Research topics in software composition. | |
US20030188292A1 (en) | System and method for configuration using an object tree formed of hierarchically graduatable objects | |
JP3326713B2 (ja) | 図的プログラミング方法 | |
Latif et al. | Feature-based design and the object-oriented approach | |
Usher | An object-oriented approach to product modeling for manufacturing systems | |
CN111090419B (zh) | 一种基于结点入度变化的树结构可视化方法 | |
Tsai et al. | Automated class testing using threaded multi-way trees to represent the behaviour of state machines |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |