问题描述
应将 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 中的代码大小,请执行以下操作:
- 进入“项目”->“选项”->“构建”。
- 选择“替换常量”。
- 选择“排除对象”...并开始一一排除系统库中的灰色 FB 和 FUN。
- 如果您不确定要排除的内容,请执行“全部清除”和“全部重建”命令。还要定期执行它们。
如果以上没有帮助您的代码需要审查和优化。一般来说,尽量避免使用多个 IF...ELSIF 语句,而是使用 MUX 和 SEL 运算符以及(一点点)CASE 逻辑。切换到 POINTER 算术并将数据压缩到 ARRAYS 中也有帮助。使用位访问 BYTE、WORD 和 DWORD 变量而不是 BOOL 变量。
,MEMCPY 已经是一个优化的库函数(即它调用一个函数,它不应该“内联代码”)。我不知道你将如何优化它。您的代码需要进行一些重构以减少其他地方的重复代码,减少您正在使用的内存变量的数量,或者需要更好的硬件。现在 64 kB 已经很小了。我参与的 PLCopen 控制器有 4 MB,其中 64 kB 仅用于保留数据...
也许像您在评论中看到的那样修改您的问题,读者真的不太清楚为什么您认为 MEMCPY 是您的麻烦制造者....