Skip to main content

生成应用程序代码

应用程序代码是 PLC 在您启动应用程序时执行的机器代码。

CODESYS 从开发系统中编写的源代码自动生成应用程序代码。这是在将应用程序下载到控制器之前自动完成的。在生成应用程序代码之前,执行测试以检查分配、数据类型和库的可用性。此外,内存地址是在生成应用程序代码时分配的。

你可以点击 构建 → 生成代码 显式执行此命令。这对于检测源代码中的任何错误很有用,即使 PLC 尚未连接。错误在“构建”类别的消息视图中输出。

重要

如果您已加密应用程序,请考虑以下信息: 如果在线更改后根据请求生成(新)引导应用程序,则引导应用程序在 RAM 中形成,当前代码未加密。

显式生成应用程序代码

要求:应用程序可以无错误地编译。

  • 点击 构建→ 生成代码.

    生成应用程序代码。有关内存分配的详细信息在消息视图中输出。

有关更多信息,请参阅: 创建引导应用程序

生成应用程序代码时的消息

当您生成应用程序代码时, CODESYS 在消息视图中输出有关内存分配的信息。由于增量内存构建,重新分配仅适用于新的和更改的 POU 和变量,因此会在内存中形成间隙。在线更改具有相同的效果。这种碎片减少了可用内存的数量。但是,您可以通过单击完全重新分配内存 干净的 并因此增加可用内存量。

语法错误和错误 CODESYS 在代码生成和内存分配期间检测到的信息也会在消息视图中输出(建造 类别)。

输出有关内存分配的信息:

  • 生成代码的大小 (以字节为单位):所有代码段的总和

  • 全局数据的大小 (以字节为单位):全局变量使用的总内存。除非输入或输出映射到全局变量区域,否则不包括输入和输出。

  • 为代码和数据分配的总内存大小 (以字节为单位):分配的总内存由已使用的内存区域加上保留的、尚未用于增量构建和在线更改的内存组成。在第一次构建之后,已经使用的内存大约等于最高使用的地址(见下文)。最大的连续内存间隙(见下文)仍然大致对应于总分配内存的差异。但是,随着增量构建和在线更改数量的增加,内存间隙的数量也会增加,最大的连续内存间隙变得更小。

  • 存储区 <n>: 各个保留存储区的内容:

    背景:取决于 PLC 将哪些数据和代码存储在哪些存储区。例如,代码和数据位于同一区域 CODESYS Control Win.对于地址 %I, %M, 和 %Q, 内存总是保留的,即使变量没有分配给地址。在“清理”应用程序后,内存被完全重新分配。在这种情况下,预定义的“对齐”(通常为 8)可能会导致小间隙。较大的间隙是由于没有“清理”而更改日期导致的,例如通过增加数组区域。在这种情况下,仅重新编译受影响的 POU。此外,在在线更改的情况下,内存仅用于新变量和新代码。先前由已删除的变量和代码保留的内存再次可用。因此,在许多增量构建和在线更改之后可能会出现内存碎片。这会产生许多在某些情况下可能根本无法使用的小间隙。为了明确有多少内存是安全可用的,在代码生成过程中会输出内存区域的“最大连续内存间隙”。

    • 最高使用地址 (字节):这是整个分配的内存区域中的最高保留地址。在“清理”操作后的第一次构建期间,内存地址按升序输出到变量,同时考虑到对齐(通常为 8 个字节)。因此,此时使用的最高地址大致对应于使用的内存量。分配的其余内存区域仍然完全可用于增量构建和在线更改。

    • 最大的连续内存间隙 (以字节为单位):这是可用于备份的内存大小。

      分配内存中产生的间隙将尽可能用于其他更改。例如,当类型为全局变量时 Byte 添加后,它被放置在内存的第一个空闲字节中。即使是很小的差距也足够了。但是,FB 实例、结构或数组类型的变量或 POU 的代码必须连续存储,因此会占用更多的内存。因此,它们只能分配到最大的连续内存区域。这就是为什么在代码生成期间输出安全可用的“最大连续内存间隙”(以字节为单位),以及它在总内存中的百分比。

为此,另请参阅: 生成应用程序的选项

加密应用程序代码

有关更多信息,请参阅: 保护应用程序