1、操作界面
2、程序实现
REGION 找零确认
IF #找零确认 THEN //复位
#"50元张数" := 0.0;
#"20元张数" := 0.0;
#"10元张数" := 0.0;
#"5元张数" := 0.0;
#"1元张数" := 0.0;
#"5毛张数" := 0.0;
"HMI.data".I输入价格 := 0.0;
FILL_BLK(IN := 0,
COUNT := 12,
OUT => #St饮料数量[0]);
#余额不足 := 0;
END_IF;
END_REGION
REGION 饮料选择
IF #饮料选择.%X1 THEN
#购买价格Temp := 2;
END_IF;
IF #饮料选择.%X2 THEN
#购买价格Temp := 3;
END_IF;
IF #饮料选择.%X3 THEN
#购买价格Temp := 2;
END_IF;
IF #饮料选择.%X4 THEN
#购买价格Temp := 4;
END_IF;
IF #饮料选择.%X5 THEN
#购买价格Temp := 4.5;
END_IF;
IF #饮料选择.%X6 THEN
#购买价格Temp := 3;
END_IF;
IF #饮料选择.%X7 THEN
#购买价格Temp := 2;
END_IF;
IF #饮料选择.%X8 THEN
#购买价格Temp := 4;
END_IF;
IF #饮料选择.%X9 THEN
#购买价格Temp := 3;
END_IF;
IF #饮料选择.%X10 THEN
#购买价格Temp := 2;
END_IF;
IF #饮料选择.%X11 THEN
#购买价格Temp := 1.5;
END_IF;
IF #饮料选择.%X12 THEN
#购买价格Temp := 1.5;
END_IF;
IF #饮料选择<>0 THEN
#购买力Temp := #找零 - #购买价格Temp;
IF #购买力Temp < 0 THEN
#余额不足 := 1;
ELSE
#余额不足 := 0;
END_IF;
END_IF;
END_REGION
REGION #找零
#找零 := #输入价格 - (#饮料数量[0] * 2 + #饮料数量[1] * 3 + #饮料数量[2] * 2 + #饮料数量[3] * 4 + #饮料数量[4] * 4.5 + #饮料数量[5] * 3
+ #饮料数量[6] * 2 + #饮料数量[7] * 4 + #饮料数量[8] * 3 + #饮料数量[9] * 2 + #饮料数量[10] * 1.5 + #饮料数量[11] * 1.5);
#UP1(CLK := #饮料选择 <> 0 AND NOT #余额不足);
#COUNT := LN(#饮料选择) / LN(2) - 1;
IF #UP1.Q THEN
#St饮料数量[#COUNT] := #St饮料数量[#COUNT] + 1;
END_IF;
#饮料数量 := #St饮料数量;
END_REGION
REGION 找零比较
IF #找零 > 0 AND CEIL(#找零) > #找零 THEN //找零有小数,
#"50元张数" := FLOOR(#找零 / 50.0);
#temp1 := #找零 - 0.5 - #"50元张数" * 50.0;
#"20元张数" := FLOOR(#temp1 / 20.0);
#temp2 := #temp1 - #"20元张数" * 20.0;
#"10元张数" := FLOOR(#temp2 / 10.0);
#temp3 := #temp2 - #"10元张数" * 10.0;
#"5元张数" := FLOOR(#temp3 / 5.0);
#temp4 := #temp3 - #"5元张数" * 5;
#"1元张数" := FLOOR(#temp4);
#"5毛张数" := 1;
;
END_IF;
IF #找零 > 0 AND CEIL(#找零) = #找零 THEN //找零是整数
#"50元张数" := FLOOR(#找零 / 50.0);
#temp1 := #找零 - #"50元张数" * 50.0;
#"20元张数" := FLOOR(#temp1 / 20.0);
#temp2 := #temp1 - #"20元张数" * 20.0;
#"10元张数" := FLOOR(#temp2 / 10.0);
#temp3 := #temp2 - #"10元张数" * 10.0;
#"5元张数" := FLOOR(#temp3 / 5.0);
#temp4 := #temp3 - #"5元张数" * 5;
#"1元张数" := FLOOR(#temp4);
#"5毛张数" := 0;
;
END_IF;
#找5毛张数 := REAL_TO_INT(#"5毛张数");
#"找1元张数" := REAL_TO_INT(#"1元张数");
#"找5元张数" := REAL_TO_INT(#"5元张数");
#"找10元张数" := REAL_TO_INT(#"10元张数");
#"找20元张数" := REAL_TO_INT(#"20元张数");
#"找50元张数" := REAL_TO_INT(#"50元张数");
END_REGION