高级编程实例,调试不成功,每个周期静态变量#s_RunNum 都清零,这样始终检测不到启动台数是否已经到达要求的数量或者超过要求的数量,求解这个变量该如何定义,谢谢
#s_Number := LIMIT_INT(IN := #TotalSum, MN := 0, MX := 8);
#min := #ToTal_Run_Time[0];
#min_num := 0;
#s_RunNum := 0;
FOR #temp_1 := 0 TO 7 DO
IF #ToTal_Run_Time[#temp_1] < #min THEN
#min := #ToTal_Run_Time[#temp_1]; //记录第一小值
#min_num := #temp_1; //记录当前值编号
END_IF;
END_FOR;
#s_Static[0] := #min_num; //将最小的运行时间记录在数组第0位
FOR #temp_1 := 1 TO 7 DO
FOR #temp_2 := 0 TO 7 DO
FOR #temp_3 := 0 TO #temp_1 - 1 DO
IF #temp_2 = #s_Static[#temp_3] THEN
GOTO AA;
END_IF;
END_FOR;
#min := #ToTal_Run_Time[#temp_2]; //第二小的运行时间
#min_num := #temp_2;
EXIT;
AA:
CONTINUE;
END_FOR;
FOR #temp_2 := #min_num + 1 TO 7 DO
FOR #temp_3 := 0 TO #temp_1 - 1 DO
IF #temp_2 = #s_Static[#temp_3] THEN
GOTO BB;
END_IF;
END_FOR;
IF #min > #ToTal_Run_Time[#temp_2] THEN
#min_num := #temp_2;
#min := #ToTal_Run_Time[#temp_2];
END_IF;
BB:
CONTINUE;
END_FOR;
#s_Static[#temp_1] := #min_num;
END_FOR;
(*
运行时间统计
*)
FOR #temp_1 := 0 TO 7 BY 1 DO
#InOut_1[#temp_1].Start := 0;
#InOut_1[#temp_1].Stop := 0;
IF #InOut_1[#temp_1].Motor_Run THEN
#s_RunTime[#temp_1] := RUNTIME(#MEM[#temp_1]); //运行时间统计
#ToTal_Run_Time[#temp_1] += #s_RunTime[#temp_1]; //运行时间累加
ELSE
#MEM[#temp_1] := 0.0; //没有电机运行的时候中间变量必须清零
END_IF;
END_FOR;
(*
当启动数量没有达到要求数量
*)
IF #s_RunNum < #s_Number THEN
FOR #temp_1 := 0 TO 7 BY 1 DO
IF #InOut_1[#s_Static[#temp_1]].Motor_Run OR #InOut_1[#s_Static[#temp_1]].Motor_Flaut THEN
CONTINUE;
ELSE
#InOut_1[#s_Static[#temp_1]].Start := TRUE;
EXIT;
END_IF;
END_FOR;
END_IF;
(*
当启动数量超过了要求的数量
*)
IF #s_RunNum > #s_Number THEN
FOR #temp_1 := 7 TO 0 BY -1 DO
IF #InOut_1[#s_Static[#temp_1]].Motor_Run THEN
#InOut_1[#s_Static[#temp_1]].Stop := TRUE;
EXIT;
ELSE
CONTINUE;
END_IF;
END_FOR;
END_IF;
//启动电机
FOR #temp_1 := 0 TO 7 BY 1 DO
"MOTOR_CONTROL"(#InOut_1[#temp_1]);
IF #InOut_1[#temp_1].Motor_Run THEN
#s_RunNum += 1; //启动电机数量统计
END_IF;
END_FOR;