// -------------------------- 1. 命令上升沿检测(防止持续触发) --------------------------
#Edge_Add := "rep".Add AND NOT "rep".Add_Prev;
#Edge_Delete := "rep".Delete AND NOT "rep".Delete_Prev;
#Edge_Modify := "rep".Modify AND NOT "rep".Modify_Prev;
#Edge_Query := "rep".Query AND NOT "rep".Query_Prev;
// 存储上一周期命令状态(确保按钮按一次仅触发一次)
"rep".Add_Prev := "rep".Add;
"rep".Delete_Prev := "rep".Delete;
"rep".Modify_Prev := "rep".Modify;
"rep".Query_Prev := "rep".Query;
// 读取HMI输入的目标配方名称(从“设置配方”读取)
#TargetMaterial := "rep".设置配方.混合物料;
// -------------------------- 2. 配方新增(Add):名称重复则自动修改,不新增 --------------------------
IF #Edge_Add THEN
#RecipeExist := FALSE; // 先假设配方不存在
// 第一步:检测名称是否重复
FOR #i := 0 TO 9 DO
IF "rep".rep[#i].混合物料 = #TargetMaterial AND #TargetMaterial <> '' THEN
#RecipeExist := TRUE; // 发现重复名称
EXIT;
END_IF;
END_FOR;
// 第二步:无重复→新增;有重复→自动修改
IF NOT #RecipeExist THEN
// 新增:找第一个空配方(名称为空)存储数据
FOR #i := 0 TO 9 DO
IF "rep".rep[#i].混合物料 = '' THEN
"rep".rep[#i] := "rep".设置配方;
EXIT;
END_IF;
END_FOR;
ELSE
// 重复→自动修改原配方参数
FOR #i := 0 TO 9 DO
IF "rep".rep[#i].混合物料 = #TargetMaterial THEN
"rep".rep[#i] := "rep".设置配方;
EXIT;
END_IF;
END_FOR;
END_IF;
END_IF;
// -------------------------- 3. 配方查询(Query):仅按名称查询,结果显示到预览配方 --------------------------
IF #Edge_Query THEN
#RecipeExist := FALSE;
"rep".预览配方 := "rep".空配方; // 先清空预览区域,避免旧数据残留
FOR #i := 0 TO 9 DO
IF "rep".rep[#i].混合物料 = #TargetMaterial AND #TargetMaterial <> '' THEN
"rep".预览配方 := "rep".rep[#i];
#RecipeExist := TRUE;
EXIT;
END_IF;
END_FOR;
END_IF;
// -------------------------- 4. 配方修改(Modify):修改后自动触发查询,刷新预览 --------------------------
IF #Edge_Modify THEN
#RecipeExist := FALSE;
FOR #i := 0 TO 9 DO
IF "rep".rep[#i].混合物料 = #TargetMaterial AND #TargetMaterial <> '' THEN
"rep".rep[#i] := "rep".设置配方;
#RecipeExist := TRUE;
EXIT;
END_IF;
END_FOR;
// 修改成功后,自动触发查询逻辑,刷新预览配方
IF #RecipeExist THEN
"rep".预览配方 := "rep".空配方; // 先清空预览区
FOR #i := 0 TO 9 DO
IF "rep".rep[#i].混合物料 = #TargetMaterial THEN
"rep".预览配方 := "rep".rep[#i];
EXIT;
END_IF;
END_FOR;
END_IF;
END_IF;
// -------------------------- 5. 配方删除(Delete):完全清空所有数据+预览区名称 --------------------------
IF #Edge_Delete THEN
#RecipeExist := FALSE;
FOR #i := 0 TO 9 DO
// 精准匹配目标名称(非空才执行删除)
IF "rep".rep[#i].混合物料 = #TargetMaterial AND #TargetMaterial <> '' THEN
"rep".rep[#i] := "rep".空配方;
#RecipeExist := TRUE;
EXIT;
END_IF;
END_FOR;
// 2. 关键:删除成功后,强制清空预览配方的所有数据(包括混合物料名称)
IF #RecipeExist THEN
"rep".预览配方 := "rep".空配方;
END_IF;
END_IF;