创新功能(1)-多语言编程与编译
· 阅读需 6 分钟
1. 多语言编程与编译能力
IEC61131-3与计算机语言(C/C++/Rust)混合开发
- 项目主程序使用语言: IEC61131-3
- 库开发支持的语言: IEC61131-3、C、C++、Rust
- 多语言混合编译: 支持
- 多混合源码调试: 支持
- 编译方式: 2级编译 (IDE编译 + 安装编译)
- IDE编译输出格式: WebAssembly (第1级)
- 安装编译输出格式: 机器指令程序 (第2级)
- C、C++编译框架
- IDE自动完成源码的编译
- 或使用cmake自定义编译架构
- Rust编译框架
- IDE自动完成源码的编译
- 或使用cargo自定义编译架构
2. 支持计算机程序(C/C++/Rust)的方式
WasomeCodeX支持两种计算机程序(C/C++/Rust)的方式:
- 方式1:单独编译成动态库文件,启动时动态加载 (传统方式)
- 方式2:与IEC61131-3程序混合编译与调试 (业界首家)
技术架构如下:
3. 动态库的传统方式的主要问题
在使用动态库的传统方式中,存在着多个主要问题:
-
动态库方式C++开发的复杂度
目前市场许多IDE支持C++开发需要使用独立的三方IDE,比如Visual Studio。用户不得不在两个IDE分别完成开发,编译和调试。使用效率非常不理想。 -
巨大安全风险
由于用户开发的动态库代码和PLC厂商的runtime运行在一个地址空间,任何用户代码的错误,可能造成巨大的风险。比如用户C地址操作的一个写入错误的地址,可能破坏PLC厂商在runtime的某个功能安全保护。 -
多语言程序的热更新和热备份支持复杂性
目前工业界尚没有发现能够支持在引入C/C++编程后可以支持热更新和热备份能力的产品。计算机编程引入的堆操作,带来内存布局的不确定性是一个主要的障碍。一些产品在ST中扩展的指针地址访问,在文档中申明其应用中如使用了地址操作,将不能支持热更新和热备份。 -
缺乏对Rust等更多计算机编程语言的支持