编程实例求助

已锁定

denxi

  • 帖子

    55
  • 精华

    1
  • 被关注

    0

论坛等级:游侠

注册时间:2012-07-31

普通 普通 如何晋级?

编程实例求助

269

6

2019-05-21 20:02:57

高级编程实例,调试不成功,每个周期静态变量#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;                                                    
编程实例求助 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

S7-1200精英训练营

共有1959条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。