# 生成应用程序代码

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

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

可以单击编译 ➔ 生成代码显式执行命令。这对于检测源代码中的任何错误都很有用，即使在尚未连接PLC的情况下也是如此。错误将输出到消息视图（“编译”类别）。

### 显式生成应用程序代码​

要求：可以编译该应用程序而没有任何错误。

1.单击编译 ➔ 生成代码。
⇒生成应用程序代码。消息视图中将显示有关内存分配的详细信息。

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

生成应用程序代码时，MetaFacture在消息视图中输出有关内存分配的信息。由于内存增量编译，重新分配仅用于新的和更改的POU和变量，因此内存中会出现间隙。在线修改具有相同的效果。这种碎片减少了可用内存量。但是，您可以通过单击清除完全重新分配内存，从而增加可用内存量。

MetaFacture在代码生成和内存分配期间检测到的语法错误和错误显示在编译类别的消息视图中。

内存分配的输出信息：

- 生成代码大小（字节）：所有代码段的和
- 全局数据大小（字节）：全局变量使用的总内存。输入和输出不包括在内，除非输入或输出映射到全局变量的区域。
- 为代码和数据分配的总内存大小（字节）：分配的总内存由已经使用的内存区域加上为增量编译和在线更改预留的、尚未使用的内存组成。在首次编译之后，已经使用的内存大约等于使用的最高地址(见下文)。最大的连续内存间隙(见下文)仍然大致相当于分配的总内存的差值。然而，随着增量编译和在线更改的数量增加，内存间隙的数量也会增加，最大的连续内存间隙会变小。
- 存储区：各个保留内存区域的内容
  背景：它取决于PLC将哪些数据和代码存储在哪些存储区域。例如，代码和数据位于MetaFacture Control Win V3的同一区域中。对于地址%I，%M，和%Q，内存始终是保留的，即使变量没有分配给地址。清除应用程序后，将完全重新分配内存。在这种情况下，预定义的对齐会产生小的间隙（通常为8）。较大的间隔是由于更改日期而不进行清理而导致的，例如增加数组区域。在这种情况下，仅重编译受影响的POU。此外，在在线更改的情况下，内存仅用于新变量和新代码。之前被删除的变量和代码保留的内存重新可用。因此，在多次增量构建和在线更改之后，可能会出现内存碎片。这就产生了许多在某些情况下可能根本无法使用的小间隙。为了明确有多少内存是安全可用的，在代码生成过程中会输出内存区域的“最大连续内存间隙”。
  - 最高使用地址（字节）：这是整个已分配内存区域中最高的保留地址。在“清理”操作之后的首次编译期间，内存地址将按升序输出到变量，并考虑对齐（通常为8个字节）。因此，此时所使用的最高地址大约对应于所使用的内存量。剩余的已分配内存区域仍然完全可以用于增量编译和在线更改。
  - 最大连续内存间隙（字节）：这是可用于备份的内存大小。
    在可能的情况下，会为其他更改重用分配内存中的间隙。例如，当添加一个Byte 类型的全局变量时，它被放置在内存的第一个空闲字节中。仅一个小间隙足够。但是，FB实例、类型结构或数组的变量或POU的代码必须连续存储，因此相应地占用更多内存。因此，它们只能分配给最大的连续内存区域。这就是为什么在代码生成过程中会输出安全可用的“最大连续内存间隙”(字节)，以及它在总内存中的百分比。

- 注意用于生成应用程序的选项。