System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 基于数组映射内存地址的PLC程序编译方法及装置制造方法及图纸_技高网

基于数组映射内存地址的PLC程序编译方法及装置制造方法及图纸

技术编号:40873695 阅读:3 留言:0更新日期:2024-04-08 16:41
本申请公开了一种基于数组映射内存地址的PLC程序编译方法、装置、存储介质、电子设备及计算机程序产品,该方法包括:解析PLC源程序,得到PLC源程序中的地址编程语句、以及地址编程语句中用于指向PLC内存地址的直接表示变量;为每个直接表示变量在内存区域中创建相应的数组元素,得到至少一个数组,数组包括多个数组元素,不同的数组位于内存区域中的不同分区;基于数组元素定位方法,根据数组生成地址编程语句对应的中间代码,从而能基于数组元素定位方式实现对直接表示变量指向的内存地址的访问,无需通过创建临时变量声明和地址计算指令来实现访问,极大减少了指令生成数量,简化了编译流程。

【技术实现步骤摘要】

本申请属于编译,尤其涉及一种基于数组映射内存地址的plc程序编译方法、装置、存储介质、电子设备及计算机程序产品。


技术介绍

1、国际电工委员会(international electrotechnical commission,iec)制定的iec61131-3国际标准定义了5种标准编程语言,分别为梯形图(ladder,lad)编程语言、功能块图(function block diagram,fbd)编程语言、顺序功能图(sequential functionchart,sfc)编程语言、指令表(instruction list,il)编程语言及结构化文本(structuredtext,st)编程语言。

2、基于上述标准,很多国产plc(programmable logic controller,可编程逻辑控制器)厂家已经基于不同硬件和操作系统平台研发出自己的plc设备。plc设备通过编程软件编写的plc程序实现逻辑、计时、计数和算术运算。但是,由于机器只能识别机器码(二进制数据),plc程序又是通过高级语言编写的,比如iec61131-3国际标准定义的st编程语言,故需要先通过编译器将plc程序编译为机器码编写的可执行文件,再基于可执行文件实现plc设备的功能。

3、其中,当通过st编程语言编写plc程序时,地址编程在上述标准中的对应项为“直接表示变量(%)”,编译过程中,针对这种变量指向的plc内存地址的访问操作通常是通过构建临时变量的方式实现,也即将标准中规定的直接表示变量(%)的字符串认定为一个临时变量的方式来进行处理。例如,对于直接表示变量%mw100,编译器会把%mw100这种形式的直接表示变量生成一个隐形的临时变量来传递和构建访问对象。但是,对于这种访问方式,若要修改plc某处内存地址处的值时,至少需要三个动作:<1>建立一个临时指针变量,<2>计算%mw100这类形式直接表示变量指针对其所在的数据区内存首地址的偏移,将该临时指针变量指向该偏移位置,<3>对该临时指针变量指向的内存进行修改操作。若plc源程序中出现包含%mw这种形式(比如%mw100、%mw101、%mw102)的多个操作语句时,针对其相应plc内存地址的访问操作,编译器需要构建出多个不同的临时变量,也即上述动作<1>需要重复多次,从而极大地占用了编译器的cpu资源,影响编译器的编译效率。


技术实现思路

1、本申请旨在至少解决现有技术中存在的技术问题之一。为此,本申请提出一种基于数组映射内存地址的plc程序编译方法、装置、存储介质、电子设备及计算机程序产品,能减少编译过程中内存地址访问操作占用的cpu资源,提高编译效率。

2、第一方面,本申请提供了一种基于数组映射内存地址的plc程序编译方法,包括:

3、解析plc源程序,得到所述plc源程序中的地址编程语句、以及所述地址编程语句中用于指向plc内存地址的直接表示变量;

4、为同一类别的所述直接表示变量在内存区域中创建一个相应的数组,所述数组包括多个数组元素,每个所述直接表示变量映射至少一个所述数组元素,所述数组元素用于存储相应类别的一个所述直接表示变量指向的所述plc内存地址处的数据,不同的所述数组位于所述内存区域中的不同分区;

5、基于数组元素定位方法,根据所述数组生成所述地址编程语句对应的中间代码。

6、在一些实施例中,所述为同一类别的所述直接表示变量在内存区域中创建一个相应的数组,包括:

7、根据所有的所述直接表示变量的类别个数,确定数组个数,并在内存区域中创建对应个数的数组,不同的所述数组位于所述内存区域中的不同分区;

8、对于一个类别的所述直接表示变量,根据所述类别的所述直接表示变量的总数和每个所述直接表示变量要访问的数据占用的空间大小,确定所述类别对应数组的存储区域容量。

9、在一些实施例中,所述数组中数组元素的个数的确定步骤,包括:

10、对于一个类别的所述直接表示变量,计算每个所述直接表示变量要访问的数据占用的空间大小和单个数组元素占用的空间大小之间的比值,得到相应直接表示变量占用的数组元素的个数;

11、统计所述类别所有的所述直接表示变量占用的数组元素的个数之和,得到相应数组中数在一些实施例中,所述解析plc源程序,得到所述plc源程序中的地址编程语句、以及所述地址编程语句中用于指向plc内存地址的直接表示变量包括:

12、确定所述plc源程序中包含的编程语句;

13、确定每个所述编程语句中包含的变量;

14、将包含目标字符的所述变量确定为用于指向plc内存地址的直接表示变量,并将包含所述直接表示变量的所述编程语句确定为地址编程语句。

15、在一些实施例中,所述基于数组元素定位方法,根据所述数组生成所述地址编程语句对应的中间代码,包括:

16、对所述地址编程语句进行词法分析,得到多个词法单元;

17、对所述词法单元进行语义解析,得到每个所述词法单元的语义解析结果;

18、基于数组元素定位方法,根据所述数组和所述语义解析结果,生成所述地址编程语句对应的多个中间树节点;

19、根据所述中间树节点生成所述地址编程语句对应的中间代码。

20、在一些实施例中,所述基于数组元素定位方法,根据所述数组和所述语义解析结果,生成所述地址编程语句对应的多个中间树节点,包括:

21、将所述直接表示变量对应的所述词法单元的所述语义解析结果作为第一语义解析结果,将其它的所述词法单元的所述语义解析结果作为第二语义解析结果;

22、根据所述第一语义解析结果从所述数组中确定所述直接表示变量对应的目标数组以及偏移量;

23、根据所述偏移量确定至少一个数组元素的下标,并基于数组元素定位方法,从所述目标数组中确定与所述下标一致的数组元素,作为所述直接表示变量对应的目标数组元素;

24、根据所述目标数组元素在所述内存区域中的存储地址和所述第二语义解析结果,生成所述地址编程语句对应的多个中间树节点。

25、第二方面,本申请提供了一种基于数组映射内存地址的plc程序编译装置,包括:

26、解析模块,用于解析plc源程序,得到所述plc源程序中的地址编程语句、以及所述地址编程语句中用于指向plc内存地址的直接表示变量;

27、创建模块,用于为同一类别的所述直接表示变量在内存区域中创建一个相应的数组,所述数组包括多个数组元素,每个所述直接表示变量映射至少一个所述数组元素,所述数组元素用于存储相应类别的一个所述直接表示变量指向的所述plc内存地址处的数据,不同的所述数组位于所述内存区域中的不同分区;

28、生成模块,用于基于数组元素定位方法,根据所述数组生成所述地址编程语句对应的中间代码。

29、在一些实施例本文档来自技高网...

【技术保护点】

1.一种基于数组映射内存地址的PLC程序编译方法,其特征在于,包括:

2.根据权利要求1所述的PLC程序编译方法,其特征在于,所述为同一类别的所述直接表示变量在内存区域中创建一个相应的数组,包括:

3.根据权利要求2所述的PLC程序编译方法,其特征在于,所述数组中数组元素的个数的确定步骤,包括:

4.根据权利要求1所述的PLC程序编译方法,其特征在于,所述解析PLC源程序,得到所述PLC源程序中的地址编程语句、以及所述地址编程语句中用于指向PLC内存地址的直接表示变量包括:

5.根据权利要求1-4中任一项所述的PLC程序编译方法,其特征在于,所述基于数组元素定位方法,根据所述数组生成所述地址编程语句对应的中间代码,包括:

6.根据权利要求5所述的PLC程序编译方法,其特征在于,所述基于数组元素定位方法,根据所述数组和所述语义解析结果,生成所述地址编程语句对应的多个中间树节点,包括:

7.一种基于数组映射内存地址的PLC程序编译装置,其特征在于,包括:

8.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1-6中任一项所述的基于数组映射内存地址的PLC程序编译方法。

9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-6中任一项所述的基于数组映射内存地址的PLC程序编译方法。

10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-6中任一项所述的基于数组映射内存地址的PLC程序编译方法。

...

【技术特征摘要】

1.一种基于数组映射内存地址的plc程序编译方法,其特征在于,包括:

2.根据权利要求1所述的plc程序编译方法,其特征在于,所述为同一类别的所述直接表示变量在内存区域中创建一个相应的数组,包括:

3.根据权利要求2所述的plc程序编译方法,其特征在于,所述数组中数组元素的个数的确定步骤,包括:

4.根据权利要求1所述的plc程序编译方法,其特征在于,所述解析plc源程序,得到所述plc源程序中的地址编程语句、以及所述地址编程语句中用于指向plc内存地址的直接表示变量包括:

5.根据权利要求1-4中任一项所述的plc程序编译方法,其特征在于,所述基于数组元素定位方法,根据所述数组生成所述地址编程语句对应的中间代码,包括:

6.根据权利要求5所述的plc程序编译方法,其特征在于,所述基于...

【专利技术属性】
技术研发人员:唐为军张铎
申请(专利权)人:北京东土科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1