CN114780382A - 安全冗余编译运行方法、计算机设备及可读存储介质 - Google Patents
安全冗余编译运行方法、计算机设备及可读存储介质 Download PDFInfo
- Publication number
- CN114780382A CN114780382A CN202210271424.6A CN202210271424A CN114780382A CN 114780382 A CN114780382 A CN 114780382A CN 202210271424 A CN202210271424 A CN 202210271424A CN 114780382 A CN114780382 A CN 114780382A
- Authority
- CN
- China
- Prior art keywords
- file
- instruction
- compiler
- operation method
- redundant
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种安全冗余编译运行方法,将IEC61131‑3多语言程序统一转换为结构化文本代码(ST),将ST转换为C语言,调用GCC编译器编译形成目标代码1。将ST转换为LLVM IR,调用LLVM后端编译器形成目标代码2。将ST转换为自定义中间指令,编译形成虚拟机指令文件。将上述3个文件下到3个处理器,分别运行可执行程序和解析虚拟机指令,每个周期运算后通过共享内存或数据总线进行数据有效性表决。本发明从逻辑上实现了源代码的独立处理和物理上独立运行,提升了安全冗余运行的可靠性。
Description
技术领域
本发明属于工控安全领域,具体涉及过程控制、可编程控制器安全冗余运行。
背景技术
符合工业安全仪表SIS系统中,普遍采用IEC61131-3标准的语言开发程序。目前已有文献的解决方案侧重于物理上独立运行和冗余设计,对于源程序转换环节,都采用1种编译器形成产物,1份产物运行在多个物理处理器上。上述方案并未考虑到编译环节潜在的bug或单bit随机错误,需要在逻辑产物形成过程中采用不同的编译方案,此外通用编译器无法直接嵌入防误运行和跟踪记录的功能,需要自主编译过程中插桩处理。为提升安全冗余运行的可靠性,本案由此产生。
发明内容
本发明目的是提升安全运行的可靠性、独立性和排查问题效率。
一种安全冗余编译运行方法,将IEC61131-3程序统一转换为结构化文本语言ST描述,将ST通过不同的编译器处理形成目标产物,分别下载到多核处理器独立运行,运算结果通过三系表决器表决。
进一步地,所述将ST通过不同的编译器处理形成目标产物为,将ST转换为C语言,集成调用GCC编译器形成机器码目标文件1;将ST转换为LLVM IR指令集,调用LLVM后端编译器形成机器码目标文件2;采用自主编译器解析ST文本,形成语义树,输出自定义中间指令集,形成虚拟机指令文件3。
进一步地,所述集成调用GCC编译器的过程中,修改GCC源代码,将基于读取Makefile文件获取文件目录的编译方式修改为从内存中获取编译文件,避免明文代码信息的泄露。
进一步地,所述自主编译器为,定义机器无关的中间指令集,基于IEC61131-3标准定义ST文法,使用flex作为词法分析工具,使用bison作为语法分析工具,通过flex+bison作用形成语义树,遍历语义树,输出虚拟机三地址码指令,三地址码的地址记录的是变量在虚拟数据区的索引。
进一步地,当使能除零、数组越界防误选项时,在语义树中嵌入增加形参是否为0、数组下标和边界值比较的子树,若触发条件调用日志记录函数,便于调试模式下追踪分析。
进一步地,所述虚拟机指令文件3采用快速解释器执行,在初始化阶段构建形成指令序列和关联的解析函数指针,在运行过程通过执行预编译函数调用方式执行,不需要再判断指令类型。
进一步地,所述多核处理器至少包括4个核,其中1个核运行管理维护程序,获取待下载目标文件、指令文件,其余核分别独立运行机器码目标文件1、机器码目标文件2和虚拟机指令文件3。
进一步地,所述三系表决器的表决方案,对于模拟量取中值,对于状态量采用三取二表决,用于表决的核间数据采用共享内存方式访问。
进一步地,通过构建交叉编译环境编译器支持多种硬件处理器。
一种计算机设备,包括处理器和存储器,所述存储器用于存储程序指令,所述处理器被配置用于调用所述程序指令,执行上述安全冗余编译运行方法。
一种计算机可读存储介质,存储有程序指令,所述程序指令用于执行上述安全冗余编译运行方法。
采用上述方案后,本发明具有如下有益效果:
本发明通过ST转C调用GCC编译器、ST转IR调用LLVM编译器、ST转自定义虚拟指令集的三条技术路线,确保了逻辑转换过程中的可靠性、交叉验证的覆盖率,通过在自定义编译器中嵌入防误处理和触发日志记录功能,提升调试诊断效率。本发明确保了物理、逻辑上三系处理流程的独立性,提升了安全冗余运行的置信度。
附图说明
图1是本发明中安全冗余编译运行原理图。
具体实施方式
以下将结合附图1,对本发明的技术方案进行详细说明。
本发明设计了一种安全冗余编译运行方法,具体实施方式为:
1)获取IEC61131-3多种语言的程序,建立转换规则,统一转换为结构化文本语言ST描述。
可选地,其中FBD/LD转换为ST时,将图形符号转换为函数、功能块的调用语句,数据连线是形参传递语句。按照IEC61131-3标准定义的ST描述SFC顺序功能图的关键字和句型,获取SFC顺序功能图的图形文件,直接形成步、转换的ST代码。
2)将ST转换为C语言,集成调用GCC编译器形成机器码目标文件1。
可选地,获取开源GCC工具链和源码,将源码集成到组态软件中,并修改GCC源代码,将基于读取Makefile文件获取文件目录的编译方式修改为从内存中获取编译文件,ST转换C语言后,C代码存储在内存中,组态软件获取待编译的程序列表,可分析出依赖的文件列表,修改GCC读取加载文件的代码,改为从内存中获取源文件数据,避免了明文代码信息泄露的问题。
3)将ST转换为LLVM IR指令集,调用LLVM后端编译器形成机器码目标文件2。
可选地,通过开源flex+bison工具形成ST的语义树,根据LLVM定义的前端IR指令集,编写自定义的LLVM IR生成器,实现ST语义树到LLVM IR的直接映射。
4)采用自主开发的编译器解析ST文本,形成语义树,输出自定义中间指令集,形成虚拟机指令文件3。
可选地,定义一套机器无关的中间指令集(包括数学运算、逻辑运算、位移操作、数据比较、跳转指令),基于IEC61131-3标准定义ST文法,使用flex作为词法分析工具,使用bison作为语法分析工具,通过flex+bison作用形成语义树,遍历语义树,输出虚拟机三地址码指令。其中三地址码的地址记录的是变量在虚拟数据区的索引,虚拟数据区对每个变量采用结构体描述和分配,标记变量类型、初始值、序号等属性。
可选地,当使能除零、数组越界防误选项时,在除法语义树中嵌入增加形参是否为0的判断指令和满足除0条件时日志记录函数调用子树,在数组访问语义树中,对于计算得到的下标值,增加下标和边界值比较的子树,若触发越界条件则调用日志记录函数,便于调试模式下追踪分析。
5)将目标文件、指令文件下载到多核处理器独立运行。
可选地,多核处理器至少包括4个核(Core),其中1个核运行管理维护程序,获取待下载目标文件、指令文件。其它核分别独立运行机器码目标文件1、机器码目标文件2、虚拟机指令文件3。虚拟机指令文件3采用快速解释器执行,在初始化阶段构建形成指令序列和关联的解析函数指针,在运行过程通过执行预编译函数调用方式执行,不需要再判断指令类型。
可选地,每个周期运行时三系表决器的表决方案为:对于模拟量取中值,对于状态量采用三取二表决,用于表决的核间数据采用共享内存方式访问。
可选地,通过构建交叉编译环境编译器支持ARM、X86多种硬件处理器。
此外,本发明还设计了一种计算机设备,包括处理器和存储器,所述存储器用于存储程序指令,所述处理器被配置用于调用所述程序指令,执行上述安全冗余编译运行方法。
此外,本发明还设计了一种计算机可读存储介质,存储有程序指令,所述程序指令用于执行上述安全冗余编译运行方法。
以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。
Claims (11)
1.一种安全冗余编译运行方法,其特征在于:将IEC61131-3程序统一转换为结构化文本语言ST描述,将ST通过不同的编译器处理形成目标产物,分别下载到多核处理器独立运行,运算结果通过三系表决器表决。
2.如权利要求1所述安全冗余编译运行方法,其特征在于:所述将ST通过不同的编译器处理形成目标产物为,将ST转换为C语言,集成调用GCC编译器形成机器码目标文件1;将ST转换为LLVM IR指令集,调用LLVM后端编译器形成机器码目标文件2;采用自主编译器解析ST文本,形成语义树,输出自定义中间指令集,形成虚拟机指令文件3。
3.如权利要求2所述安全冗余编译运行方法,其特征在于:所述集成调用GCC编译器的过程中,修改GCC源代码,将基于读取Makefile文件获取文件目录的编译方式修改为从内存中获取编译文件,避免明文代码信息的泄露。
4.如权利要求2所述安全冗余编译运行方法,其特征在于:所述自主编译器为,定义机器无关的中间指令集,基于IEC61131-3标准定义ST文法,使用flex作为词法分析工具,使用bison作为语法分析工具,通过flex+bison作用形成语义树,遍历语义树,输出虚拟机三地址码指令,三地址码的地址记录的是变量在虚拟数据区的索引。
5.如权利要求4所述安全冗余编译运行方法,其特征在于:当使能除零、数组越界防误选项时,在语义树中嵌入增加形参是否为0、数组下标和边界值比较的子树,若触发条件调用日志记录函数,便于调试模式下追踪分析。
6.如权利要求2所述安全冗余编译运行方法,其特征在于:所述虚拟机指令文件3采用快速解释器执行,在初始化阶段构建形成指令序列和关联的解析函数指针,在运行过程通过执行预编译函数调用方式执行,不需要再判断指令类型。
7.如权利要求1所述安全冗余编译运行方法,其特征在于:所述多核处理器至少包括4个核,其中1个核运行管理维护程序,获取待下载目标文件、指令文件,其余核分别独立运行机器码目标文件1、机器码目标文件2和虚拟机指令文件3。
8.如权利要求1所述安全冗余编译运行方法,其特征在于:所述三系表决器的表决方案,对于模拟量取中值,对于状态量采用三取二表决,用于表决的核间数据采用共享内存方式访问。
9.如权利要求1所述安全冗余编译运行方法,其特征在于:通过构建交叉编译环境编译器支持多种硬件处理器。
10.一种计算机设备,其特征在于:包括处理器和存储器,所述存储器用于存储程序指令,所述处理器被配置用于调用所述程序指令,执行如权利要求1-9中任意一项所述安全冗余编译运行方法。
11.一种计算机可读存储介质,其特征在于:存储有程序指令,所述程序指令用于执行如权利要求1-9中任意一项所述安全冗余编译运行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210271424.6A CN114780382A (zh) | 2022-03-18 | 2022-03-18 | 安全冗余编译运行方法、计算机设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210271424.6A CN114780382A (zh) | 2022-03-18 | 2022-03-18 | 安全冗余编译运行方法、计算机设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114780382A true CN114780382A (zh) | 2022-07-22 |
Family
ID=82426175
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210271424.6A Pending CN114780382A (zh) | 2022-03-18 | 2022-03-18 | 安全冗余编译运行方法、计算机设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114780382A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116360788A (zh) * | 2023-02-17 | 2023-06-30 | 深圳市亿维自动化技术有限公司 | 结构化文本编程语言的编译方法、编译器及电子设备 |
-
2022
- 2022-03-18 CN CN202210271424.6A patent/CN114780382A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116360788A (zh) * | 2023-02-17 | 2023-06-30 | 深圳市亿维自动化技术有限公司 | 结构化文本编程语言的编译方法、编译器及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111488154B (zh) | St语言源代码编译方法、装置、计算机设备及介质 | |
CN109254776B (zh) | 多语言代码编译方法及编译器 | |
US7293261B1 (en) | Language-neutral representation of software code elements | |
US5854932A (en) | Compiler and method for avoiding unnecessary recompilation | |
CN111736846B (zh) | 一种面向动态分析的源代码插桩改进方法 | |
Gómez-Abajo et al. | Wodel-Test: a model-based framework for language-independent mutation testing | |
CN112835323B (zh) | 可编程逻辑控制语言编译方法及装置 | |
Stanier et al. | A study of irreducibility in C programs | |
CN117075909B (zh) | 用于实现并行编程的编译方法、电子设备和介质 | |
CN114780382A (zh) | 安全冗余编译运行方法、计算机设备及可读存储介质 | |
US20210026609A1 (en) | Support device and non-transitory computer-readable recording medium | |
Ebrahimi Salari et al. | Pylc: A framework for transforming and validating plc software using python and pynguin test generator | |
US8434071B2 (en) | Method for translating a graphical workflow in a textual description | |
CN117667045A (zh) | 集成深度学习和plc语言的边缘控制器及代码生成方法 | |
CN108664238A (zh) | 一种解释型脚本语言c-sub的执行方法及装置 | |
Benjamin et al. | Runtime Annotation Checking with Frama-C: The E-ACSL Plug-in | |
Sun et al. | KOP-Fuzzer: A Key-Operation-based Fuzzer for Type Confusion Bugs in JavaScript Engines | |
Darvas et al. | What is special about PLC software model checking | |
Maliavko et al. | The functionally-imperative programming language El and its translator | |
Tarditi et al. | TIL: a type-directed, optimizing compiler for ML | |
Kabra et al. | ST to MISRA-C translator and proposed changes in IEC61131-3 standard | |
Zhang et al. | Parsing statement list program using flex and bison | |
Racković | Construction of a translator for robot-programming languages | |
Maliavko et al. | Functionally Imperative Programming Language El and its Implementation | |
Sow et al. | Parsing Fortran-77 with proprietary extensions |
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 |