论文部分内容阅读
PLC指令执行方式通常有两种,解释执行和编译执行。传统的解释型PLC,易于移植,但是执行效率低。而传统的编译型PLC,采用把PLC源代码直接翻译为目标机器码的方式,执行效率高,但是移植性差。 基于传统解释执行和编译执行方式的优缺点,本文提出了一种新的指令编译执行方式,即首先把PLC源代码编译为C代码,然后采用交叉编译工具把C代码编译为目标机器所能识别的二进制码。由于C语言编译器的种类繁多,根据不同的目标机器采用对应的交叉编译工具,可以有效解决编译执行方式移植性差的问题。本文主要分为两部分,一部分是PLC源代码到C代码的编译系统的设计实现,另一部分是C代码的交叉编译过程。编译系统主要由词法分析、语法分析、语义分析、代码生成、符号表和错误处理构成,其中,词法分析采用词法分析器生成工具Flex来生成,语法分析采用语法分析器生成器Bison来生成,语义分析主要进行静态类型检查,代码生成进行代码变换,符号表和错误处理存在于编译系统的各个步骤中。经过编译系统生成的C代码会被封装成一个Function()函数,它是整个嵌入式软件中的逻辑运算部分,而PLCRun部分主要是进行外设的驱动、初始化,以及主函数中循环调用Function()函数。本文中,目标机器选择意法半导体的stm32芯片,交叉编译工具链是基于gcc的arm-none-eabi-gcc。而且,PLCRun部分和Funciton()函数被烧录到stm32内Flash的不同地址块,它们之间通过指针跳转来实现函数调用,通过在SRAM中设置一块专用的地址块来实现参数传递。这种分开烧录的方式能有效节省烧录时间,提升开发效率。 本文最终在stm32F103ZGT6芯片上进行验证,主要进行了三个方面的分析,正确性分析、执行效率分析、代码占用空间分析。正确性分析是采用输入接按键,输出接LED的方式验证,执行效率和代码占用空间均是与解释型PLC进行对比,结果显示执行效率显著提升,代码占用空间降低。