需要优化代码(Reduce the size) CODESYS ST (TwinCat 2) 节省内存

问题描述

应将 beckhoff BC9000 PLC(最大 64 kB)的代码大小(CODESYS ST、TwinCat 2)减至最小:

var

word_CO2: word;

代码跳过

需要减少这段代码的大小:

MEMcpy(ADR(word_CO2),ADR(ReceiveBuffer[3]),1);

MEMcpy(ADR(word_CO2)+1,ADR(ReceiveBuffer[2]),1);

解决方法

要减少 CoDeSys 2.3 中的代码大小,请执行以下操作:

  1. 进入“项目”->“选项”->“构建”。
  2. 选择“替换常量”。
  3. 选择“排除对象”...并开始一一排除系统库中的灰色 FB 和 FUN。
  4. 如果您不确定要排除的内容,请执行“全部清除”和“全部重建”命令。还要定期执行它们。

如果以上没有帮助您的代码需要审查和优化。一般来说,尽量避免使用多个 IF...ELSIF 语句,而是使用 MUX 和 SEL 运算符以及(一点点)CASE 逻辑。切换到 POINTER 算术并将数据压缩到 ARRAYS 中也有帮助。使用位访问 BYTE、WORD 和 DWORD 变量而不是 BOOL 变量。

,

MEMCPY 已经是一个优化的库函数(即它调用一个函数,它不应该“内联代码”)。我不知道你将如何优化它。您的代码需要进行一些重构以减少其他地方的重复代码,减少您正在使用的内存变量的数量,或者需要更好的硬件。现在 64 kB 已经很小了。我参与的 PLCopen 控制器有 4 MB,其中 64 kB 仅用于保留数据...

也许像您在评论中看到的那样修改您的问题,读者真的不太清楚为什么您认为 MEMCPY 是您的麻烦制造者....

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...