应用程序代码是 PLC 在启动应用程序时执行的机器代码。
CODESYS 根据开发系统中编写的源代码自动生成应用程序代码。在将应用程序下载到 PLC 之前会自动完成这项操作。在生成应用程序代码之前,会进行一次测试,以检查分配、数据类型和库的可用性。此外,内存地址是在生成应用程序代码时分配的。
您可以单击“Build Generate Code” 明确执行该命令。这有助于检测源代码中的任何错误,即使 PLC 尚未连接。错误会在 "构建 "类别的信息视图中输出。




注意

如果您对应用程序进行了加密,请考虑以下信息:如果在联机更改后根据请求生成(新的)启动程序,则启动程序将在 RAM 中与当前未加密的代码一起形成。
明确生成应用程序代码
要求:编译应用程序时不会出现任何错误。
-
单击“Build Generate Code” 。
应用程序代码已生成。有关内存分配的详细信息会在消息视图中输出。
生成应用程序代码时的信息
生成程序代码时,CODESYS 会在消息视图中输出有关内存分配的信息。内存中会出现空隙,这是因为内存的增量分配只针对新的和已更改的 POU 和变量。在线更改也有同样的效果。这种碎片会减少可用内存量。不过,你可以点击“Clean” 完全重新分配内存,从而增加可用内存量。
CODESYS 在代码生成和内存分配过程中检测到的语法错误和错误也会在消息视图(“Build” 类别)中输出。
输出有关内存分配的信息:
-
“生成代码的大小” (字节):所有代码段的总和
-
“全局数据” 的大小(字节):全局变量使用的内存总量。除非输入或输出映射在全局变量区域内,否则输入和输出不包括在内。
-
“为代码和数据分配的总内存大小” (字节):已分配的总内存由已使用的内存区域和为增量构建和在线更改预留的未使用内存组成。第一次构建后,已使用的内存约等于最高使用地址(见下文)。最大的连续内存间隙(见下文)仍与已分配内存总量的差额大致相当。不过,随着增量构建和在线更改次数的增加,内存间隙的数量也会增加,最大的连续内存间隙也会变小。
-
“内存区 <n>” :各个保留存储区的内容
背景介绍哪些数据和代码存储在哪些内存区域取决于 PLC。例如,代码和数据位于CODESYS Control Win V3 上的同一区域。对于地址
%I
、%M
和%Q
,内存总是保留的,即使变量没有分配给某个地址。清理应用程序后,内存将完全重新分配。在这种情况下,预定义的对齐(通常为 8)可能会产生小的间隙。间隙变大的原因是在未清理的情况下更改了日期,例如增加了数组区域。在这种情况下,只有受影响的 POU 会被重新编译。此外,在在线更改的情况下,内存仅用于新变量和新代码。之前被删除的变量和代码所保留的内存将重新可用。因此,在多次增量构建和在线更改后,可能会出现内存碎片。这就造成了许多小缝隙,在某些情况下可能根本无法使用。为了明确有多少内存是安全可用的,在代码生成过程中会输出内存区域的 "最大连续内存间隙"。-
“最高使用地址” (字节) :这是整个分配内存区域中最高的保留地址。在 "清除 "操作后的第一次构建过程中,内存地址将按照升序输出到变量中,同时考虑到对齐方式(通常为 8 字节)。因此,此时使用的最高地址与内存使用量大致对应。已分配内存区域的其余部分仍可完全用于增量构建和在线更改。
-
“最大连续内存间隙” (字节):这是可用于备份的内存大小。
在可能的情况下,所分配内存中的空隙会重新用于其他更改。例如,当添加一个
Byte
类型的全局变量时,它将被放置在内存的第一个空闲字节中。即使只有很小的缝隙,也足以做到这一点。但是,FB 实例、结构或数组类型的变量或 POU 的代码必须连续存储,因此相应地占用更多内存。因此,它们只能分配到最大的连续内存区域。这就是为什么在代码生成过程中,会输出安全可用的 "最大连续内存间隙"(以字节为单位)及其占总内存的百分比。
-
注意生成应用程序的选项。
加密应用程序代码
另见