最新提现记录

  • 恭喜 admin 于 2023-6-6 15:17 成功提现 500元
  • 恭喜 admin 于 2023-5-3 09:45 成功提现 400元

用SCL写一个备用自投的程序

[复制链接]
查看1581 | 回复3 | 2023-4-21 23:40:56 | 显示全部楼层 |阅读模式
1.该程序能在博途中运行;
2.该程序是一个函数块;
3.能实现7台电机的5用2备功能;
回复

使用道具 举报

chatGPT_小智 | 2023-4-21 23:42:19 | 显示全部楼层
请参考以下备用自投程序:

[code]FUNCTION_BLOCK FB_RedundantStart
TITLE = 'Redundant Start Block'
VERSION : INT := 1;

VAR_INPUT
    Enable : BOOL;                          (* 主控制开关 *)
    Motor1_Start : BOOL;                    (* 电机1启动信号 *)
    Motor2_Start : BOOL;                    (* 电机2启动信号 *)
    Motor3_Start : BOOL;                    (* 电机3启动信号 *)
    Motor4_Start : BOOL;                    (* 电机4启动信号 *)
    Motor5_Start : BOOL;                    (* 电机5启动信号 *)
    Motor6_Start : BOOL;                    (* 电机6启动信号 *)
    Motor7_Start : BOOL;                    (* 电机7启动信号 *)
END_VAR

VAR_OUTPUT
    Motor1_Run : BOOL;                      (* 电机1运行信号 *)
    Motor2_Run : BOOL;                      (* 电机2运行信号 *)
    Motor3_Run : BOOL;                      (* 电机3运行信号 *)
    Motor4_Run : BOOL;                      (* 电机4运行信号 *)
    Motor5_Run : BOOL;                      (* 电机5运行信号 *)
    Motor6_Run : BOOL;                      (* 电机6运行信号 *)
    Motor7_Run : BOOL;                      (* 电机7运行信号 *)
END_VAR

VAR_TEMP
    All_Run : BOOL;                         (* 所有电机运行标志 *)
    Running_Count : INT := 0;               (* 运行的电机数量 *)
    Is_Run : ARRAY[1..7] OF BOOL := [FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE];    (* 每个电机的运行标志 *)
    i : INT;                                (* 循环计数器 *)
END_VAR

BEGIN
(* 检查主控制开关是否打开 *)
IF Enable THEN
    (* 检查每个电机启动信号 *)
    IF Motor1_Start THEN
        Is_Run[1] := TRUE;
    END_IF
    IF Motor2_Start THEN
        Is_Run[2] := TRUE;
    END_IF
    IF Motor3_Start THEN
        Is_Run[3] := TRUE;
    END_IF
    IF Motor4_Start THEN
        Is_Run[4] := TRUE;
    END_IF
    IF Motor5_Start THEN
        Is_Run[5] := TRUE;
    END_IF
    IF Motor6_Start THEN
        Is_Run[6] := TRUE;
    END_IF
    IF Motor7_Start THEN
        Is_Run[7] := TRUE;
    END_IF

    (* 计算正在运行的电机数量 *)
    Running_Count := 0;
    FOR i:=1 TO 7 DO
        Running_Count := Running_Count + INT_TO_BOOL(Is_Run[i]);
    END_FOR

    (* 判断是否需要备用自投 *)
    IF Running_Count > 5 THEN
        All_Run := FALSE;
        IF Is_Run[1] THEN
            Is_Run[1] := FALSE;
        ELSIF Is_Run[2] THEN
            Is_Run[2] := FALSE;
        ELSIF Is_Run[3] THEN
            Is_Run[3] := FALSE;
        ELSIF Is_Run[4] THEN
            Is_Run[4] := FALSE;
        ELSIF Is_Run[5] THEN
            Is_Run[5] := FALSE;
        ELSIF Is_Run[6] THEN
            Is_Run[6] := FALSE;
        ELSE
            Is_Run[7] := FALSE;
        END_IF
    END_IF

    (* 设置每个电机的运行标志 *)
    Motor1_Run := Is_Run[1];
    Motor2_Run := Is_Run[2];
    Motor3_Run := Is_Run[3];
    Motor4_Run := Is_Run[4];
    Motor5_Run := Is_Run[5];
    Motor6_Run := Is_Run[6];
    Motor7_Run := Is_Run[7];
ELSE
    (* 主控制开关未打开,所有电机关闭 *)
    Motor1_Run := FALSE;
    Motor2_Run := FALSE;
    Motor3_Run := FALSE;
    Motor4_Run := FALSE;
    Motor5_Run := FALSE;
    Motor6_Run := FALSE;
    Motor7_Run := FALSE;
END_IF;

END_FUNCTION_BLOCK[/code]

该函数块可以实现7台电机的5用2备功能。输入参数中,Enable为主控制开关,Motor1_Start到Motor7_Start为对应的电机启动信号;输出参数中,Motor1_Run到Motor7_Run为对应的电机运行信号。当启动的电机数量超过5台时,程序会自动关闭一个正在运行的电机。当主控制开关未打开时,所有电机都会关闭。
回复

使用道具 举报

auto2023 | 2023-4-21 23:44:40 | 显示全部楼层
未实现5台运行电机中有一台故障停下来了,去启动备用的电机的功能
回复

使用道具 举报

chatGPT_小智 | 2023-4-21 23:45:57 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=3299&ptid=1418][color=#999999]auto2023 发表于 2023-04-21 23:44[/color][/url][/size]
未实现5台运行电机中有一台故障停下来了,去启动备用 ...[/quote]

请参考以下更新的备用自投程序:FUNCTION_BLOCK FB_RedundantStartTITLE = 'Redundant Start Block'VERSION : INT := 2;VAR_INPUT    Enable : BOOL;                          (* 主控制开关 *)    Motor1_Start : BOOL;                    (* 电机1启动信号 *)    Motor2_Start : BOOL;                    (* 电机2启动信号 *)    Motor3_Start : BOOL;                    (* 电机3启动信号 *)    Motor4_Start : BOOL;                    (* 电机4启动信号 *)    Motor5_Start : BOOL;                    (* 电机5启动信号 *)    Motor6_Start : BOOL;                    (* 电机6启动信号 *)    Motor7_Start : BOOL;                    (* 电机7启动信号 *)END_VARVAR_OUTPUT    Motor1_Run : BOOL;                      (* 电机1运行信号 *)    Motor2_Run : BOOL;                      (* 电机2运行信号 *)    Motor3_Run : BOOL;                      (* 电机3运行信号 *)    Motor4_Run : BOOL;                      (* 电机4运行信号 *)    Motor5_Run : BOOL;                      (* 电机5运行信号 *)    Motor6_Run : BOOL;                      (* 电机6运行信号 *)    Motor7_Run : BOOL;                      (* 电机7运行信号 *)END_VARVAR_TEMP    All_Run : BOOL;                         (* 所有电机运行标志 *)    Running_Count : INT := 0;               (* 运行的电机数量 *)    Is_Run : ARRAY[1..7] OF BOOL := FALSE;  (* 每个电机的运行标志 *)    i, stop_motor : INT;                   (* 循环计数器,停止运行的电机编号 *)BEGIN(* 检查主控制开关是否打开 *)IF Enable THEN    (* 检查每个电机启动信号 *)    IF Motor1_Start THEN        Is_Run[1] := TRUE;    END_IF    IF Motor2_Start THEN        Is_Run[2] := TRUE;    END_IF    IF Motor3_Start THEN        Is_Run[3] := TRUE;    END_IF    IF Motor4_Start THEN        Is_Run[4] := TRUE;    END_IF    IF Motor5_Start THEN        Is_Run[5] := TRUE;    END_IF    IF Motor6_Start THEN        Is_Run[6] := TRUE;    END_IF    IF Motor7_Start THEN        Is_Run[7] := TRUE;    END_IF    (* 计算正在运行的电机数量 *)    Running_Count := 0;    FOR i:=1 TO 7 DO        Running_Count := Running_Count + INT_TO_BOOL(Is_Run[i]);    END_FOR    (* 判断是否需要备用自投 *)    IF Running_Count > 5 THEN        All_Run := FALSE;        stop_motor := 0;        (* 找出第一个故障的电机 *)        FOR i:=1 TO 5 DO            IF NOT Is_Run[i] THEN                stop_motor := i;                EXIT;            END_IF        END_FOR        (* 如果有故障电机,则使用备用电机替代其运行 *)        IF stop_motor > 0 THEN            Is_Run[stop_motor] := TRUE;        END_IF    ELSE        All_Run := TRUE;    END_IF    (* 设置每个电机的运行标志 *)    Motor1_Run := Is_Run[1];    Motor2_Run := Is_Run[2];    Motor3_Run := Is_Run[3];    Motor4_Run := Is_Run[4];    Motor5_Run := Is_Run[5];    Motor6_Run := Is_Run[6];    Motor7_Run := Is_Run[7];ELSE    (* 主控制开关未打开,所有电机关闭 *)    Motor1_Run := FALSE;    Motor2_Run := FALSE;    Motor3_Run := FALSE;    Motor4_Run := FALSE;    Motor5_Run := FALSE;    Motor6_Run := FALSE;    Motor7_Run := FALSE;END_IF;END_FUNCTION_BLOCK在更新的程序中,如果5台运行电机中有一台停下来,则程序会尝试使用备用电机替代其运行。如果主控制开关未打开,所有电机都会关闭。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则