CN106844310A - 一种结构化文本代码处理方法和系统 - Google Patents
一种结构化文本代码处理方法和系统 Download PDFInfo
- Publication number
- CN106844310A CN106844310A CN201710052306.5A CN201710052306A CN106844310A CN 106844310 A CN106844310 A CN 106844310A CN 201710052306 A CN201710052306 A CN 201710052306A CN 106844310 A CN106844310 A CN 106844310A
- Authority
- CN
- China
- Prior art keywords
- code
- structured text
- component
- function
- module
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/151—Transformation
- G06F40/157—Transformation using dictionaries or tables
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开一种结构化文本代码处理方法:将结构化文本代码(ST)按照程序组织单元转换为C代码,在C代码中嵌入预定义的接口函数,调用编译器将C代码编译为可独立加载和替换的二进制组件,实现装置运行状态下可独立替换单个程序组织单元,确保了于IEC61131‑3标准的结构化文本代码应用程序的高效运行和可靠地增量更新。本发明还公开了一种结构化文本代码的处理系统,所述系统包括结构化文本编辑模块、代码转换模块、代码编译模块、通信模块、系统软件模块。
Description
技术领域
本发明属于工业控制编程领域,具体涉及结构化文本代码的处理方法。
背景技术
IEC61131标准将结构化、模块化编程引入工业控制领域,可提高PLC、DCS等控制系统的开放性、兼容性、可维护性。符合IEC61131标准的控制器产品,即使是不同厂家制造,其编程语言和使用方法也是相同的,产品维护人员和用户可以一次学习,多次使用,可减少人员培训、系统维护的成本。其中结构化文本由于不涉及到图形的存储格式,以纯文本的代码来实现程序的逻辑,可实现复杂的控制算法,并利于不同版本、不同厂家的程序复用,得到了广泛应用。
结构化文本(ST)是一种是类似于Pascal的高级编程语言,特别适合复杂的算法技术,程序结构清晰,便于编程人员和操作维护人员进行算法沟通。结构化文本需要转换为装置可运行的目标文件才能运行。常规的实现方案是将结构化文本转换为解释型指令,在装置内解释执行,其缺点是运行效率低,不适用实时性要求高的应用场景。有厂家将ST代码直接转换为机器指令,当更新硬件型号时,需要修改转换表,同时从ST代码转换到机器汇编指令的过程复杂,出现错误时很难定位和排查,存在隐患。也有文献提出将ST代码转换为C语言,并将整个工程编译为1个二进制目标文件后运行,将ST代码转换为C语言,转换关系明确可视,之后调用经过严格测试和大规模应用的第三方编译器编译C代码,过程可靠,C代码的运行效率高,适用于实时性要求高的场景。然而工业控制和其它行业编程的一个显著差异是,需要在装置运行时刻能部分更新替换程序,装置的实时任务不能中断。如果编译为1个可执行程序,即使只修改一行代码,也需重新形成代码,重新编译链接形成可执行程序,并停止装置程序运行,重新加载可执行程序,无法满足在线无扰更新的场景。因此,在面向工业控制应用开发中,用户需要使用标准的结构化文本,转换后的代码需要高效率运行,还需要支持增量无扰更新等关键需求,尚未有文献提出同时满足上述需求的可行解决方案,为了解决上述问题,本案由此产生。
发明内容
本发明的目的是将结构化文本转换为高效率运行的目标代码,并以程序组织单元(POU)为单位独立编译为二进制组件库,实现程序高效率运行和在线增量更新。为了达成上述目的,本发明提供一种结构化文本代码处理方法,其特征在于包括如下步骤:
将结构化文本代码按照程序组织单元转换为C代码文件;
在转换过程中嵌入预定义的接口函数;
将各个程序组织单元转换后的C代码文件编译为独立的二进制组件库;
装置获取并加载若干二进制组件库,运行接口函数。
优选地,所述方法还包括:
装置的功能代码由若干编译后二进制组件构成,装置在初始化时加载各个组件,获取固定名称的C接口函数地址,形成初始化、运行函数链表。
装置运行过程中,可替换更新二进制组件库。装置在非实时线程中更新替换加载组件,记录新的接口函数地址,在实时任务运行阶段更新组件接口函数地址,实现组件增量更新。
单个程序组织单元转换后的C代码包括如下内容:输入变量声明、输出变量声明、功能块实例名声明、系统功能回调函数指针变量、组件的初始化接口函数、组件的任务接口函数、组件变量读写接口函数。
在代码转换前,预先建立IEC61131-3标准定义的变量类型、函数、功能块、语句的转换映射表,根据转换映射表,将结构化文本代码转换为有限子集的C代码。
优选地,所述的装置包括嵌入式装置和PC机虚拟装置。针对嵌入式Linux操作系统的装置,组件编译为*.so文件,针对嵌入式Vxworks操作系统的装置,组件编译为*.cdf文件,针对PC机虚拟装置,组件编译为*.dll文件。
优选地,装置在加载组件时,将全局变量读写接口函数地址赋给组件内系统功能回调函数指针变量,组件之间的数据交互通过调用函数指针实现。
一种结构化文本代码处理系统,其特征在于,所述系统包括:结构化文本编辑模块、代码转换模块、代码编译模块、通信模块、系统软件模块。其中:
所述的结构化文本编辑模块,提供文本编辑界面,编写结构化文本代码,并以程序组织单元为单位存储多个文本代码;
所述的代码转换模块,以程序组织单元为单位分析结构化文本代码,转换为对应的C代码文件,并在C代码中嵌入和系统软件模块预定义的接口函数;
所述的代码编译模块,自动形成Makefile文件,调用嵌入式装置或PC机虚拟装置对应的编译器,将C代码文件编译形成二进制组件库;
所述的通信模块,用于将编译后的二进制组件传输到装置指定目录;
所述的系统软件模块,运行在装置中。装置系统软件模块在初始化时加载各个组件,获取固定名称的C接口函数地址,形成初始化、运行函数链表。在实时任务中运行各个组件的任务函数。装置运行过程中,系统软件模块的非实时线程可更新替换加载组件,记录新的接口函数地址,在实时任务运行阶段更新组件接口函数地址,实现组件增量更新。
采用上述方案后,本发明具有如下有益效果:以程序组织单元为单位将将ST转换为C代码,并且在转换过程中设计相关程序结构,嵌入预定义接口,并编译为独立的二进制组件,系统软件模块加载组件,提取预定义接口,运行组件任务函数,确保了程序的高效率可靠运行。支持以程序组织单元对应的组件的更新替换,实现装置运行时刻可替换部分ST代码对应的功能,即保证了高效率运行,也实现了高可靠地在线增量更新,更新过程中不需要停止装置的实时运行功能。
附图说明
图1是本发明中的结构化文本代码处理过程;
图2是本发明中组件结构原理图;
图3是本发明中增量更新原理图;
图4是本发明中结构化文本处理系统图;
具体实施方式
以下将结合附图,对本发明的技术方案进行详细说明。以图1为例,结构化文本代码处理方法实现步骤如下:
1)将结构化文本代码按照程序组织单元转换为C代码文件。结构化文本以程序组织单元为单位存储为若干ST文本文件,将ST文本文件转换为C代码文件。优选地,可基于flex-bison构建相应的语义树,完成前端分析和提取工作。开发后端转换模块,在转换过程中,获取预先定义的转换表,构建ST语言的变量类型、语句类型对应的C语言转换模型,例如ST的SINT类型和C语言的char对应,ST的INT类型和C语言的short对应,ST的DATE类型和自定义的C结构体对应,ST的IF-ELSE语句转换为C语言的if-else语句等。
2)在转换过程中嵌入预定义的接口函数。将C代码文本按照输入变量声明、输出变量声明、功能块实例名声明、系统功能回调函数指针变量、组件的初始化接口函数、组件的任务接口函数、组件变量读写接口函数等顺序组织。其中组件的初始化接口函数、组件的任务接口函数、组件变量读写接口函数为系统软件预先定义的接口函数,在相关接口函数内形成相关变量设置、函数调用的代码。优选地,预先定义的接口函数可命名为compInit、compTask、compReadVar、compWriteVar等。
3)将各个程序组织单元转换后的C代码文件编译为独立的二进制组件库。将公共系统库(通用的结构体、IEC61131-3标准的函数、功能块对应的C代码库)、C代码文件编译链接为组件。C代码组件原理如图2所示,以PC机虚拟装置运行的组件为例,在Windows下组件编译为动态链接库(dll),dll是一组源代码模块,每个模块包括一组可被外部模块调用的函数,模块的变量作为私有数据,通过接口函数访问和修改。
4)装置获取并加载若干二进制组件库,运行接口函数。装置的功能代码由若干编译后二进制组件构成,装置系统软件在初始化时加载各个组件,组件文件被映射到装置系统软件进程的地址空间,操作系统为组件分配相关变量对应的存储器。装置系统软件获取固定名称的C接口函数地址,形成初始化、运行函数链表。组件之间的数据交互通过调用全局变量读写接口函数指针实现。
5)装置运行过程中,可替换更新二进制组件库。如图3所示,装置在非实时线程中更新替换加载组件,记录新的接口函数地址,在实时任务运行阶段更新组件接口函数地址,实现组件增量更新。
一种结构化文本代码处理系统,所述系统如图4所示,包括:结构化文本编辑模块、代码转换模块、代码编译模块、通信模块、系统软件模块。其中:
所述的结构化文本编辑模块,提供文本编辑界面,编写结构化文本代码,并以程序组织单元为单位存储多个文本代码;
所述的代码转换模块,以程序组织单元为单位分析结构化文本代码,转换为对应的C代码文件,并在C代码中嵌入和系统软件模块预定义的接口函数;
所述的代码编译模块,自动形成Makefile文件,调用嵌入式装置或PC机虚拟装置对应的编译器,将C代码文件编译形成二进制组件库;
所述的通信模块,用于将编译后的二进制组件传输到装置指定目录;
所述的系统软件模块,运行在装置中。装置系统软件模块在初始化时加载各个组件,获取固定名称的C接口函数地址,形成初始化、运行函数链表。在实时任务中运行各个组件的任务函数。装置运行过程中,系统软件模块的非实时线程可更新替换加载组件,记录新的接口函数地址,在实时任务运行阶段更新组件接口函数地址,实现组件增量更新。
以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。
Claims (8)
1.一种结构化文本代码处理方法,其特征在于,包括:
将结构化文本代码按照程序组织单元转换为C代码文件;
在上述转换过程中嵌入预定义的接口函数;
将各个程序组织单元转换后的C代码文件编译为独立的二进制组件库;
装置获取并加载若干上述二进制组件库,运行接口函数。
2.如权利要求1所述的一种结构化文本代码处理方法,其特征在于,装置的功能代码由若干编译后二进制组件构成,装置在初始化时加载各个组件,获取固定名称的C接口函数地址,形成初始化、运行函数链表。
3.如权利要求1所述的一种结构化文本代码处理方法,其特征在于,装置运行过程中,替换更新二进制组件库;
装置在非实时线程中更新替换加载组件,记录新的接口函数地址,在实时任务运行阶段更新组件接口函数地址,实现组件增量更新。
4.如权利要求1所述的一种结构化文本代码处理方法,其特征在于,单个程序组织单元转换后的C代码文件包括如下内容:输入变量声明、输出变量声明、功能块实例名声明、系统功能回调函数指针变量、组件的初始化接口函数、组件的任务接口函数、组件变量读写接口函数。
5.如权利要求1所述的一种结构化文本代码处理方法,其特征在于,在代码转换前,预先建立IEC61131-3标准定义的变量类型、函数、功能块、语句的转换映射表,根据转换映射表,将结构化文本代码转换为有限子集的C代码。
6.如权利要求1所述的一种结构化文本代码处理方法,其特征在于,所述的装置包括嵌入式装置和PC机虚拟装置;
针对嵌入式Linux操作系统的装置,组件编译为*.so文件;
针对嵌入式Vxworks操作系统的装置,组件编译为*.cdf文件;
针对PC机虚拟装置,组件编译为*.dll文件。
7.如权利要求2所述的一种结构化文本代码处理方法,其特征在于,装置在加载组件时,将全局变量读写接口函数地址赋给组件内系统功能回调函数指针变量,组件之间的数据交互通过调用函数指针实现。
8.一种结构化文本代码处理系统,其特征在于,所述系统包括:结构化文本编辑模块、代码转换模块、代码编译模块、通信模块和系统软件模块,其中:
所述的结构化文本编辑模块,提供文本编辑界面,编写结构化文本代码,并以程序组织单元为单位存储多个文本代码;
所述的代码转换模块,以程序组织单元为单位分析结构化文本代码,转换为对应的C代码文件,并在C代码中嵌入系统软件模块预定义的接口函数;
所述的代码编译模块,自动形成Makefile文件,调用嵌入式装置或PC机虚拟装置对应的编译器,将C代码文件编译形成二进制组件库;
所述的通信模块,用于将编译后的二进制组件传输到装置指定目录;
所述的系统软件模块,运行在装置中;
装置系统软件模块在初始化时加载各个组件,获取固定名称的C接口函数地址,形成初始化、运行函数链表;
在实时任务中运行各个组件的任务函数;
装置运行过程中,系统软件模块的非实时线程可更新替换加载组件,记录新的接口函数地址,在实时任务运行阶段更新组件接口函数地址,实现组件增量更新。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710052306.5A CN106844310A (zh) | 2017-01-22 | 2017-01-22 | 一种结构化文本代码处理方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710052306.5A CN106844310A (zh) | 2017-01-22 | 2017-01-22 | 一种结构化文本代码处理方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106844310A true CN106844310A (zh) | 2017-06-13 |
Family
ID=59120375
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710052306.5A Pending CN106844310A (zh) | 2017-01-22 | 2017-01-22 | 一种结构化文本代码处理方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106844310A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107273138A (zh) * | 2017-07-04 | 2017-10-20 | 杭州铜板街互联网金融信息服务有限公司 | 基于Android业务模块间交互的解耦方法和系统 |
CN108776594A (zh) * | 2018-06-05 | 2018-11-09 | 西安交通大学 | 适用于处理器实时控制的软件编程及其汇编链接方法 |
CN108804105A (zh) * | 2018-04-13 | 2018-11-13 | 南京南瑞继保电气有限公司 | 一种程序组织单元编译处理方法 |
CN111857033A (zh) * | 2020-08-07 | 2020-10-30 | 深圳市派姆智能机器有限公司 | 一种可编程控制器的编译系统 |
CN112269579A (zh) * | 2020-11-02 | 2021-01-26 | 中电凯杰科技有限公司 | 一种基于stm32处理器的编译型plc控制器系统及实现方法 |
CN112817598A (zh) * | 2021-01-13 | 2021-05-18 | 浙江华云信息科技有限公司 | 编译期的代码注入方法 |
CN112818176A (zh) * | 2021-02-08 | 2021-05-18 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN113360142A (zh) * | 2021-06-24 | 2021-09-07 | 广东工贸职业技术学院 | 一种数控内嵌plc中间文件的设计与编译方法 |
CN115208250A (zh) * | 2022-07-07 | 2022-10-18 | 北京瑞祺皓迪技术股份有限公司 | 一种基于对象的步进电机控制装置、方法及系统 |
CN115576265A (zh) * | 2022-11-21 | 2023-01-06 | 博智安全科技股份有限公司 | Plc设备模拟方法、装置、设备以及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929214A (zh) * | 2011-08-11 | 2013-02-13 | 西门子公司 | 一种嵌入式多处理单元并行处理系统及其运行方法 |
EP2650785A1 (en) * | 2012-04-10 | 2013-10-16 | Siemens Aktiengesellschaft | Method, system, and computer program product for transforming machine code to source code |
-
2017
- 2017-01-22 CN CN201710052306.5A patent/CN106844310A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929214A (zh) * | 2011-08-11 | 2013-02-13 | 西门子公司 | 一种嵌入式多处理单元并行处理系统及其运行方法 |
EP2650785A1 (en) * | 2012-04-10 | 2013-10-16 | Siemens Aktiengesellschaft | Method, system, and computer program product for transforming machine code to source code |
Non-Patent Citations (2)
Title |
---|
贾翔宇 等: "编译型PLC的设计与实现", 《电子设计工程》 * |
魏进家 等: "《工程分析程序设计》", 31 January 2015, 西安交通大学出版社 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107273138A (zh) * | 2017-07-04 | 2017-10-20 | 杭州铜板街互联网金融信息服务有限公司 | 基于Android业务模块间交互的解耦方法和系统 |
CN108804105A (zh) * | 2018-04-13 | 2018-11-13 | 南京南瑞继保电气有限公司 | 一种程序组织单元编译处理方法 |
CN108804105B (zh) * | 2018-04-13 | 2022-02-18 | 南京南瑞继保电气有限公司 | 一种程序组织单元编译处理方法 |
CN108776594B (zh) * | 2018-06-05 | 2021-02-09 | 西安交通大学 | 适用于处理器实时控制的软件编程及其汇编链接方法 |
CN108776594A (zh) * | 2018-06-05 | 2018-11-09 | 西安交通大学 | 适用于处理器实时控制的软件编程及其汇编链接方法 |
CN111857033A (zh) * | 2020-08-07 | 2020-10-30 | 深圳市派姆智能机器有限公司 | 一种可编程控制器的编译系统 |
CN112269579A (zh) * | 2020-11-02 | 2021-01-26 | 中电凯杰科技有限公司 | 一种基于stm32处理器的编译型plc控制器系统及实现方法 |
CN112817598A (zh) * | 2021-01-13 | 2021-05-18 | 浙江华云信息科技有限公司 | 编译期的代码注入方法 |
CN112818176A (zh) * | 2021-02-08 | 2021-05-18 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN112818176B (zh) * | 2021-02-08 | 2023-12-12 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN113360142A (zh) * | 2021-06-24 | 2021-09-07 | 广东工贸职业技术学院 | 一种数控内嵌plc中间文件的设计与编译方法 |
CN115208250A (zh) * | 2022-07-07 | 2022-10-18 | 北京瑞祺皓迪技术股份有限公司 | 一种基于对象的步进电机控制装置、方法及系统 |
CN115576265A (zh) * | 2022-11-21 | 2023-01-06 | 博智安全科技股份有限公司 | Plc设备模拟方法、装置、设备以及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106844310A (zh) | 一种结构化文本代码处理方法和系统 | |
US9235381B2 (en) | Method and device for the programming and configuration of a programmable logic controller | |
EP3304229B1 (en) | Method and system for generating plc code with a connectivity model | |
EP2169547B1 (en) | Compilation model for programmable logic controllers (PLC). | |
Crnkovic et al. | A case study: demands on component-based development | |
JP4850556B2 (ja) | プログラム作成支援装置およびその方法 | |
CN106933568B (zh) | 一种组态软件系统及一种工业控制方法 | |
CN106737676A (zh) | 一种基于脚本可二次开发的工业机器人编程系统 | |
US20210116890A1 (en) | Production Control System | |
JP2009146229A (ja) | プログラマブルコントローラシステム | |
CN104991810B (zh) | 自动添加apk到安卓系统中的方法及处理系统 | |
Kaiser et al. | Model-based automatic generation of digital twin models for the simulation of reconfigurable manufacturing systems for timber construction | |
WO2021040727A1 (en) | Plc code generation with a knowledge graph | |
CN104881396A (zh) | 图形化程序的编译文件形成方法 | |
CN108121285B (zh) | 基于连续功能图的应用软件协同编译方法及装置 | |
CN102081378A (zh) | 基于宏程序的通用代码转换方法及装置 | |
US10228674B2 (en) | Processing device and method for configuring an automation system | |
Wenger et al. | Transformation of IEC 61131-3 to IEC 61499 based on a model driven development approach | |
CN101021792A (zh) | 一种动态编程方法 | |
CN112417660A (zh) | 一种管道支吊架自动编码的方法及系统 | |
CN104238438A (zh) | 一种plc通用平台及其设计方法 | |
CN1936746A (zh) | 基于arm的嵌入式数控系统g代码解释器 | |
Bergert et al. | Automated PLC software generation based on standardized digital process information | |
EP3673336A1 (en) | Building and tracking of an automation engineering environment | |
CN113625661B (zh) | 一种数控内嵌plc中间文件转化指令表的设计方法 |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20170613 |
|
WD01 | Invention patent application deemed withdrawn after publication |