如何清除如下消息 “Maximum length of code area reached (max. 64 Kbytes)”?

FAQ ID 771569 解释了可能会导致此错误的原因。该条目中描述了当使用SFC Type时导致代码超出64Kbyte限制的解决方法。用户在步处理中组态了太多的动作或在条件跳转中加入了过多的条件。

如何清除如下消息 "Maximum length of code area reached (max. 64 Kbytes)"?
图 01

然而,该错误消息并不指示那个 Block(SFC type)导致了此错误,此指导说明则可以指导用户进行错误诊断。

1. 激活"Generate SCL source"选项,重新编译程序

  • 在CFC编辑器中通过菜单"Chart > Compile > Charts as Program..." 打开 "Compile program" 对话框
  • 选择"Entire Program"的编译方式,同时激活 "Generate SCL source" 选项。点击"OK"重新编译程序。
    如何清除如下消息 "Maximum length of code area reached (max. 64 Kbytes)"?
    图 02

注意
在老版本的PCS7系统中,"Generate SCL source" 选项在编译对话框中是不可选择的。在此情况下,SCL源文件将会自动生成。

2. 打开并编译生成的SCL源文件

  • 在SIMATIC Manager中切换到组件视图。在组件视图下导航到 "Sources" 文件夹,找到 "@SCLFileFromCFC_SFC_1" 文件。
    如何清除如下消息 "Maximum length of code area reached (max. 64 Kbytes)"?
    图 03
  • 双击该文件或通过右键菜单"Open Object"打开SCL源代码。
  • 使用菜单"File > Compile" 编译源文件。此时将弹出 "Overwrite Blocks" 窗口,点击 "All" 确认。
  • 编译源代码完成操作。

注意
编译过程中,详细的信息将显示在SCL编辑器的错误窗口中。

3. 评估详细的编译日志

在这一步中即可以确定导致程序代码超出 64K byte 限制的SFC type名。而且还可以确定出,SFC type中到底是因为每一步中组态了过多的动作还是切换条件中输入了太多的条件导致了该错误的发生。

在编译日志中使用搜索功能搜索错误
在SCL编辑器中切换到 "Errors" 窗口并滚动到编译日志的起始位置。从编译日志的顶部到底部,搜索错误信息。

注意
错误条目将以字符 "E:"起始,报警条目将以 "W:"起始。

如果在程序中没有其他的错误信息,那么上面描述的第一条错误条目即为错误信息。
在编译过程中,如果有错误的话,则功能块 (功能块号)会立即显示在错误消息上。你需要注意该功能块号。
如何清除如下消息 "Maximum length of code area reached (max. 64 Kbytes)"?
图 04
在SCL源文件中搜索该错误功能块号
切换到SCL编辑器,并将鼠标定位在SCL源代码的起始位置。打开 "Find and Replace" 对话框。在 "Find what"中输入在错误日志中查找到的错误功能块号的搜索的内容。点击 "Find" 按钮执行查找功能。指针将跳转到出错功能块定义的地方。如果该功能块是SFC type的一部分,则会在注释中显示该SFC type的符号名。注意这个名字。
如何清除如下消息 "Maximum length of code area reached (max. 64 Kbytes)"?
图 05
注意
如果在SCL编辑器的错误窗口的错误消息中,双击该功能块号,则指针将自动跳转到相应的功能块。这样可以省去你使用上述搜索的动作。
搜索SCL源代码中缺陷功能块的使用
重复上述搜索操作,直到指针跳到该功能被调用的程序段。 在该行的上一行中将有注释行,用于指示该功能块是用于处理动作还是切换条件。
如何清除如下消息 "Maximum length of code area reached (max. 64 Kbytes)"?
图 06
注意

无论在Simatic Manager中设置的语言为何种语言,SCL源代码中显示的注释总是为德文。 "Aufruf AktionsFC ..." 表示处理动作,"Aufruf TransitionsFC ..." 表示处理切换条件 (通过分析有缺陷的功能块的功能部分,就可以确定是处理动作的代码部分还是处理切换条件的代码部分。

在SCL源代码中将指针滚动到功能块的调用处,注意调用的功能块号。
如何清除如下消息 "Maximum length of code area reached (max. 64 Kbytes)"?
图 07

注意
你也可以使用 "Find and Replace" 功能来跳转到该功能块的起始位置,使用向下搜索 "FUNCTION" 关键字,指针即可跳转到功能块的起始位置。

4. 检查功能块号

再Simatic Manager切换到组件视图。在"Details"模式下,SFC type的块名的前八个字符加上功能块号将显示在"Name (Header)" 列中。

如何清除如下消息 "Maximum length of code area reached (max. 64 Kbytes)"?
图 08

功能块号在配置SFC type时即被分配。
如何清除如下消息 "Maximum length of code area reached (max. 64 Kbytes)"?
图 09

评估代码所能减少的范围
根据导致64 Kbyte容量溢出的原因,必须通过减少每一步中的代码或切换调条件的处理来减少指令数。为了评估步中可以削减的指令的个数,用户可以将步的顺序一分为二,然后执行编译。这样可以减少一半的步和切换条件。在执行该操作之前,最好对相关的block或整个项目预先进行备份。
如果削减了代码后编译时,还是指示代码超出 64K byte的限制,那么需要重复上述步骤。如果编译成功执行,则表示 64 Kbyte代码的限制的错误已经被排除。然后,用户即可在SIMATIC Manager中参考Block文件夹下该SFC type的相关功能块的大小。详细信息可参考网上FAQ ID 24411054。通过对SFC进行分隔的次数及最终的功能块大小,用户可以大概测定每次消减的代码量。

代码削减估算
实际的问题并不是通过简单的删除步和切换条件了解决的,FAQ Entry 24412494 中介绍了可能的修复方式。

注意
在完成编辑大型的SFC type之前,就应该对S7程序进行编译。进行临时的编译可以决定将要设计的SFC type的功能块的大小。这样将方便用户尽早的发现可能存在的代码超过64 Kbyte的限制问题。

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc322597.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日 下午12:03
下一篇 2021年4月12日 上午12:00

相关推荐

发表回复

登录后才能评论