这个 CODESYS Recipes 食谱经理
这个 CODESYS Recipes on 是一个用于存储变量(配方)集并将其加载到控制器或通过编程系统的系统。使用配方管理器,可以集中管理应用程序的不同配置或参数状态,将其保存到控制器中,并在需要时恢复它们。这允许应用程序的行为灵活地适应不同的操作状态或产品变体。
在 a 中使用食谱管理器 CODESYS 项目
要使用配方管理器,必须在应用程序的设备树中创建配方管理器对象。 必须在 “配方管理器” 下方添加至少一个配方定义,这样才能创建、管理和处理配方。
有关更多信息,请参阅以下内容: 配方定义
食谱管理的基本原则
配方由一组定义的变量组成,即配方定义。加载或写入配方时,配方中包含的所有变量都会同时在控制器上更新。因此,可以以一致且可重复的方式设置或读取参数组
存储位置和存储格式等设置是在食谱管理器对象中配置的。可以在此对象下创建任意数量的配方定义。
食谱可以是:
存储在文件中
从文件加载到控制器
仅在控制器内管理
在远程设备上使用食谱
如果涉及数据源变量并配置了数据源交换,则配方中的变量值将自动传输到/从另一个控制器传输。读取和写入是同步发生的。这意味着配方定义中配置的所有变量都将同时更新。
阅读或写作后,你可以使用通话 g_RecipeManager.LastError 检查传输是否成功 (g_RecipeManager.LastError = 0)。
运营概念
食谱管理可以从不同的级别进行控制:
CODESYS 编程接口
您可以直接在编程接口中手动加载、编辑和保存配方。
可视化
在可视化中,配方命令的调用是通过使用实现的 输入配置(执行命令) 用于可视化元素。通过这样做,可视化用户可以控制配方命令的执行。
应用程序程序
运行时,可以在应用程序中调用配方定义和配方命令。为此,您可以使用以下方法在代码中实现写入、读取或监视配方定义的过程:
RecipeManCommands功能块从RecipeManagement图书馆。有关更多信息,请参阅: RecipeMan 命令 (FB)
加载模式
食谱管理器支持两种加载模式来加载食谱文件:
精确匹配
只有当配方文件结构完全匹配相应配方定义的变量列表时,才会加载配方文件中的数据。
选择性匹配
来自配方文件的所有变量出现在配方定义的变量列表中都会被加载,无论它们在列表中的位置如何。 配方文件中不存在数据的变量将不会更新。
在以下情况下,食谱管理器中选定的加载模式尤其重要:
配方文件是使用外部编辑器创建或修改的,不再与内部配置的变量或它们的顺序完全匹配。
配方文件已针对新应用程序进行了扩展,但不能再用于不需要这些额外变量的旧项目。 (更简单的解决方案是创建 V2 文件,但加载模式也可以促进兼容性。)
如果无法加载配方文件
如果无法加载配方文件,则将加载模式设置为 选择性匹配。 请注意,此设置适用于加载到集成了食谱管理器的应用程序中的所有配方。
有关更多信息,请参阅以下内容: 配方管理器
文件访问权限
出于安全原因,对位于 PLC 文件系统之外的外部文件的访问受到限制。 因此,任何在外部目录中打开或写入文件的尝试都将失败。
如果是 CODESYS Control Win SL,例如,默认路径是指运行时文件的目录 PlcLogic 它们代表内部 PLC 文件系统。
为避免访问冲突,请使用此目录或特定控制器的另一个内部目录作为根路径。
如果无法通过主机系统的文件资源管理器访问或不应访问 PLC 文件系统,则使用 选项卡:文件 之内 CODESYS 管理文件(例如,食谱中使用的文件)。
故障排除
以下过程可用于评估错误状态:
捕获操作返回的错误代码
将返回值与列表中定义的错误状态进行比较 返回值 (GVL)。
正在获取最后一次发生的错误
要获取上次出现的错误代码,请使用
RecipeManCommands.GetLastError()方法。
要详细分析加载操作是完全成功还是部分成功(例如,如果未加载配方的所有变量),请使用 RecipeManCommands.GetLastInfo() 方法。
此方法提供了一个信息代码,可以使用以下方法进行评估 信息值 (ENUM) 列举。
提示
存储的错误代码可能必须手动重置,例如使用 RecipeManCommands.ResetLastInfo() 方法。
检测变化
要轻松检测变化,请使用 信息值 (ENUM) 按故障排除部分中所述的枚举。
如果需要有关状态更改的更多详细信息,则可以实现冗余数据结构。这使您可以比较配方的先前状态和当前状态,以及控制器上的当前变量值。
滑动窗口机制
滑动窗口机制通常用于读取配方值及其变量名称。
它用于通过使用窗口大小和偏移量(窗口在数据列表中的位置)来查看在更大的缓冲区内定义的条目范围。
有关更多信息,请参阅以下内容: recipemanCommands.getrecipeValues (), recipemanCommands.getrecipeVariableNames (),以及 recipemanCommands.getrecipeNames ()

配方文件的命名方案
配方文件遵循已定义的命名方案,因此,例如,它们可以在文件系统中被唯一标识。
Note the following naming scheme: <recipe>.<recipe definition>.<extension>
Recipe: 特定食谱的名称。Recipe definition:相应配方定义的名称。Extension:文件扩展名(例如.txt 或 .csv),在 “食谱管理器” 选项卡的设备树中指定。
浮点数的特殊功能
对于类型为的变量 REAL 或者 LREAL,则要区分该价值是否完全可兑换。
如果可以精确地转换该值,则仅将数值保存在配方文件中。
如果无法进行精确转换,则在配方文件中数值旁边写入十六进制编码的字符串。这应该产生这样的效果,即不可转换的浮点数也会返回
此功能可以通过以下方式禁用 RECIPE_GENERATE_SIMPLE_STRINGREAL 编译器定义。
提示
在父应用程序的对象属性中 构建 选项卡,你可以输入 RECIPE_GENERATE_SIMPLE_STRINGREAL 编译器在 编译器定义 领域。因此,不存储十六进制编码的字符串
有关更多信息,请参阅以下内容: 对话框:属性:构建
控制器上的配方管理 — 内存使用情况
当你清除 PLC 中的配方管理 选项,配方管理器和配方定义不会占用 PLC 上的任何内存。
当您选择此选项时,将为配方管理器和所有配方定义生成代码,并将此代码存储在 PLC 上。所用内存的大小主要取决于配方的数量及其变量以及变量的数据类型。是否填写配方定义的字段也有影响。无法计算配方的内存使用量。它必须在需要时通过实验来确定。下表仅提供一些指导原则。
代码大小(字节) | 数据大小(字节) | 总计(字节) | |
|---|---|---|---|
用 100 定义食谱 | 194406 | 79400 | 267352 |
用 200 定义食谱 | 238318 | 121284 | 459344 |
用 300 定义食谱 | 282230 | 163084 | 543856 |
用 100 定义食谱 | 192742 | 69884 | 343168 |
用 200 定义食谱 | 235446 | 101568 | 436872 |
用 300 定义食谱 | 278146 | 133284 | 510072 |
用 100 定义食谱 | 203278 | 870084 | 1154000 |
用 100 定义食谱 | 255570 | 1709784 | 2973296 |
用 100 定义食谱 | 307886 | 2549484 | 2964112 |