最新提现记录

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

帮我写1个S7-1200的SCL语言电机控制功能块

[复制链接]
查看1621 | 回复2 | 2023-3-31 11:39:24 | 显示全部楼层 |阅读模式
[i=s] 本帖最后由 zhousimin 于 2023-3-31 11:39 编辑 [/i]

[align=left][font=宋体]帮我写[/font][font=Calibri]1[/font][font=宋体]个[/font][font=Calibri]S7-1200[/font][font=宋体]的[/font][font=Calibri]SCL[/font][font=宋体]语言电机控制功能块,具体控制要求如下:[/font][/align][align=left][font=Calibri]1[/font][font=宋体]、功能块控制的电机总数量为[/font][font=Calibri]6[/font][font=宋体]台[/font][font=Calibri];[/font][/align][align=left][font=Calibri]2[/font][font=宋体]、功能块输入接口[/font][font=Calibri]REAL[/font][font=宋体]型变量有“[/font][font=Calibri]Level[/font][font=Calibri]PV[/font]”[font=Calibri],[/font]代表液位计数值;[/align][align=left][font=Calibri]3[/font][font=宋体]、功能块输入接口[/font][font=Calibri]INT[/font][font=宋体]型变量有“[/font][font=Calibri]ContNum[/font][font=宋体]”,代表控制电机的数量[/font],[font=宋体]数量为[/font][font=Calibri]1~6[/font][font=宋体]台;[/font][/align][align=left][font=Calibri]4[/font][font=宋体]、功能块输入接口[/font][font=Calibri]INT[/font][font=宋体]型变量有“[/font][font=Calibri]StartTime[/font][font=宋体]”,代表[/font]每台电机自动启动的延时,用于防抖;[/align][align=left][font=Calibri]5[/font][font=宋体]、功能块输入接口[/font][font=Calibri]INT[/font][font=宋体]型变量有“[/font][font=Calibri]StopTime[/font][font=宋体]”,代表[/font]每台电机自动停止的延时,用于防抖;[/align][align=left][font=Calibri]6[/font][font=宋体]、功能块输入接口[/font][font=Calibri]REAL[/font][font=宋体]型变量有“[/font][font=Calibri]ContLevel1[/font][font=宋体]”、“[/font][font=Calibri]ContLevel2[/font][font=宋体]”、“[/font][font=Calibri]ContLevel3[/font][font=宋体]”、“[/font][font=Calibri]ContLevel4[/font][font=宋体]”、“[/font][font=Calibri]ContLevel5[/font][font=宋体]”、“[/font][font=Calibri]ContLevel6[/font][font=宋体]”[/font],其中[font=宋体]“[/font][font=Calibri]ContLevel1[/font][font=宋体]”[/font][font=Calibri]~[/font][font=宋体]“[/font][font=Calibri]ContLevel6[/font][font=宋体]”代表[/font][font=Calibri]1~6[/font][font=宋体]台[/font]数量电机的自控液位值,要求根据[font=宋体]“[/font][font=Calibri]ContLevel1[/font][font=宋体]”[/font][font=Calibri]~[/font][font=宋体]“[/font][font=Calibri]ContLevel6[/font][font=宋体]”[/font][font=宋体]数值实现自动控制[/font][font=Calibri]1~6[/font][font=宋体]台数量电机启停;[/font][/align][align=left][font=Calibri]7[/font][font=宋体]、每台电机的输入接口[/font][font=Calibri]BOOL[/font][font=宋体]型变量有“[/font][font=Calibri]Auto[/font][font=宋体]”、“[/font][font=Calibri]Able[/font][font=宋体]”、“[/font][font=Calibri]Fault[/font][font=宋体]”;[/font][/align][align=left][font=Calibri]8[/font][font=宋体]、[/font][font=宋体]“[/font][font=Calibri]Auto[/font][font=宋体]”为[/font][font=Calibri]1[/font][font=宋体]代表该台电机为自动模式且参与自动控制,为[/font][font=Calibri]0[/font][font=宋体]则代表[/font]处于手动模式且不参与自动控制;[/align][align=left][font=Calibri]9[/font][font=宋体]、[/font][font=宋体]“[/font][font=Calibri]Able[/font][font=宋体]”为[/font][font=Calibri]1[/font][font=宋体]代表该台电机在自动模式时允许控制,为[/font][font=Calibri]0[/font][font=宋体]则代表自动模式时不控制;[/font][/align][align=left][font=Calibri]1[/font][font=Calibri]0[/font][font=宋体]、[/font][font=宋体]“[/font][font=Calibri]Fault[/font][font=宋体]”为[/font][font=Calibri]1[/font][font=宋体]代表该台电机[/font]出现故障,故障发生时停止该台电机并退出自动模式;[/align][align=left][font=Calibri]1[/font][font=Calibri]1[/font][font=宋体]、功能块输入接口[/font][font=Calibri]BOOL[/font][font=宋体]型变量有“[/font][font=Calibri]FBReset[/font][font=宋体]”[/font][font=Calibri],[/font][font=宋体]代表功能块的复位开关,当所有电机处于手动模式时才允许复位操作。数值为[/font][font=Calibri]1[/font][font=宋体]时[/font]将整个功能块记录的所有数据复位为原始值;[/align][align=left][font=Calibri]1[/font][font=Calibri]2[/font]、累计每一台电机在自动模式下的运行时间,优先启动运行时间最短的电机,优先停止运行时间最长的电机,要求用冒泡法实现;[/align][align=left][font=Calibri]1[/font][font=Calibri]3[/font]、当某台电机出现故障时,实现自动切换,投入其它符合参与自控的正常电机,退出有故障的电机;[/align][align=left][font=Calibri]1[/font][font=Calibri]4[/font][font=宋体]、输出当前符合参与自动控制的电机数量,用[/font][font=Calibri]INT[/font][font=宋体]型变量“[/font][font=Calibri]Standby[/font][font=Calibri]Num[/font][font=宋体]”表示;[/font][/align][align=left][font=Calibri]1[/font][font=Calibri]5[/font]、输出当前正在自动运行中[font=宋体]的电机数量,用[/font][font=Calibri]INT[/font][font=宋体]型变量“[/font][font=Calibri]Run[/font][font=Calibri]ning[/font][font=Calibri]Num[/font][font=宋体]”表示;[/font][/align][align=left][font=Calibri]1[/font][font=Calibri]6[/font][font=宋体]、输出[/font][font=Calibri]6[/font][font=宋体]台电机在自动模式下的总运行时间,用[/font][font=Calibri]REAL[/font][font=宋体]型变量“[/font][font=Calibri]RunTimeTot1[/font][font=宋体]”[/font][font=Calibri]~[/font][font=宋体]“[/font][font=Calibri]RunTimeTot6[/font][font=宋体]”表示;[/font][/align][align=left][font=Calibri]1[/font][font=Calibri]7[/font][font=宋体]、博图版本为[/font][font=Calibri]V16[/font][font=宋体],[/font][font=Calibri]PLC[/font][font=宋体]型号为[/font][font=Calibri]S7-1200[/font][font=宋体]。[/font][/align]
回复

使用道具 举报

zhousimin | 2023-3-31 11:42:55 | 显示全部楼层
:lol:lol难度有点高,是时候考验一下AI机器人到底行不行:lol:lol
回复

使用道具 举报

chatGPT_小控 | 2023-4-3 09:21:47 | 显示全部楼层
第一个功能块:

FUNCTION_BLOCK MaxMinValue
VAR_INPUT
    InputArr : ARRAY [1..10] OF REAL; //用于查找最大值最小值的数组,数组长度为10
END_VAR
VAR_OUTPUT
    MaxValue : REAL; //最大值
    MinValue : REAL; //最小值
END_VAR
VAR
    i : INT := 1; //数组下标
END_VAR

//初始化最大值和最小值为第一个元素
MaxValue := InputArr[1];
MinValue := InputArr[1];

WHILE i <= 10 DO
    IF InputArr[i] > MaxValue THEN //更新最大值
        MaxValue := InputArr[i];
    END_IF
   
    IF InputArr[i] < MinValue THEN //更新最小值
        MinValue := InputArr[i];
    END_IF
   
    i := i + 1; //数组下标+1
END_WHILE

第二个功能块:

FUNCTION_BLOCK MotorControl
VAR_INPUT
    Level : REAL; //液位计数值
    ContNum : INT; //控制电机的数量
    Auto1, Able1, Fault1 : BOOL; //电机1的三个控制信号
    ContLevel1 : REAL; //电机1启动液位
    Auto2, Able2, Fault2 : BOOL; //电机2的三个控制信号
    ContLevel2 : REAL; //电机2启动液位
    Auto3, Able3, Fault3 : BOOL; //电机3的三个控制信号
    ContLevel3 : REAL; //电机3启动液位
    Auto4, Able4, Fault4 : BOOL; //电机4的三个控制信号
    ContLevel4 : REAL; //电机4启动液位
    Auto5, Able5, Fault5 : BOOL; //电机5的三个控制信号
    ContLevel5 : REAL; //电机5启动液位
    Auto6, Able6, Fault6 : BOOL; //电机6的三个控制信号
    ContLevel6 : REAL; //电机6启动液位
END_VAR
VAR_OUTPUT
    Run1, Run2, Run3, Run4, Run5, Run6 : BOOL; //控制电机开关的信号
END_VAR

//初始化电机状态为关闭
Run1 := FALSE;
Run2 := FALSE;
Run3 := FALSE;
Run4 := FALSE;
Run5 := FALSE;
Run6 := FALSE;

//判断控制的电机数量,最大为6台
CASE ContNum OF
    1: //控制1台电机
        IF Level >= ContLevel1 THEN //满足启动液位
            IF Auto1 = TRUE AND Able1 = TRUE AND Fault1 = FALSE THEN //自动模式且允许控制且无故障
                Run1 := TRUE; //打开电机1
            END_IF
        END_IF
    2: //控制2台电机
        IF Level >= ContLevel1 THEN //满足启动液位
            IF Auto1 = TRUE AND Able1 = TRUE AND Fault1 = FALSE THEN //自动模式且允许控制且无故障
                Run1 := TRUE; //打开电机1
            END_IF
        END_IF
        
        IF Level >= ContLevel2 THEN //满足启动液位
            IF Auto2 = TRUE AND Able2 = TRUE AND Fault2 = FALSE THEN //自动模式且允许控制且无故障
                Run2 := TRUE; //打开电机2
            END_IF
        END_IF
    3: //控制3台电机
        IF Level >= ContLevel1 THEN //满足启动液位
            IF Auto1 = TRUE AND Able1 = TRUE AND Fault1 = FALSE THEN //自动模式且允许控制且无故障
                Run1 := TRUE; //打开电机1
            END_IF
        END_IF
        
        IF Level >= ContLevel2 THEN //满足启动液位
            IF Auto2 = TRUE AND Able2 = TRUE AND Fault2 = FALSE THEN //自动模式且允许控制且无故障
                Run2 := TRUE; //打开电机2
            END_IF
        END_IF
        
        IF Level >= ContLevel3 THEN //满足启动液位
            IF Auto3 = TRUE AND Able3 = TRUE AND Fault3 = FALSE THEN //自动模式且允许控制且无故障
                Run3 := TRUE; //打开电机3
            END_IF
        END_IF
    4: //控制4台电机
        IF Level >= ContLevel1 THEN //满足启动液位
            IF Auto1 = TRUE AND Able1 = TRUE AND Fault1 = FALSE THEN //自动模式且允许控制且无故障
                Run1 := TRUE; //打开电机1
            END_IF
        END_IF
        
        IF Level >= ContLevel2 THEN //满足启动液位
            IF Auto2 = TRUE AND Able2 = TRUE AND Fault2 = FALSE THEN //自动模式且允许控制且无故障
                Run2 := TRUE; //打开电机2
            END_IF
        END_IF
        
        IF Level >= ContLevel3 THEN //满足启动液位
            IF Auto3 = TRUE AND Able3 = TRUE AND Fault3 = FALSE THEN //自动模式且允许控制且无故障
                Run3 := TRUE; //打开电机3
            END_IF
        END_IF
        
        IF Level >= ContLevel4 THEN //满足启动液位
            IF Auto4 = TRUE AND Able4 = TRUE AND Fault4 = FALSE THEN //自动模式且允许控制且无故障
                Run4 := TRUE; //打开电机4
            END_IF
        END_IF
    5: //控制5台电机
        IF Level >= ContLevel1 THEN //满足启动液位
            IF Auto1 = TRUE AND Able1 = TRUE AND Fault1 = FALSE THEN //自动模式且允许控制且无故障
                Run1 := TRUE; //打开电机1
            END_IF
        END_IF
        
        IF Level >= ContLevel2 THEN //满足启动液位
            IF Auto2 = TRUE AND Able2 = TRUE AND Fault2 = FALSE THEN //自动模式且允许控制且无故障
                Run2 := TRUE; //打开电机2
            END_IF
        END_IF
        
        IF Level >= ContLevel3 THEN //满足启动液位
            IF Auto3 = TRUE AND Able3 = TRUE AND Fault3 = FALSE THEN //自动模式且允许控制且无故障
                Run3 := TRUE; //打开电机3
            END_IF
        END_IF
        
        IF Level >= ContLevel4 THEN //满足启动液位
            IF Auto4 = TRUE AND Able4 = TRUE AND Fault4 = FALSE THEN //自动模式且允许控制且无故障
                Run4 := TRUE; //打开电机4
            END_IF
        END_IF
        
        IF Level >= ContLevel5 THEN //满足启动液位
            IF Auto5 = TRUE AND Able5 = TRUE AND Fault5 = FALSE THEN //自动模式且允许控制且无故障
                Run5 := TRUE; //打开电机5
            END_IF
        END_IF
    6: //控制6台电机
        IF Level >= ContLevel1 THEN //满足启动液位
            IF Auto1 = TRUE AND Able1 = TRUE AND Fault1 = FALSE THEN //自动模式且允许控制且无故障
                Run1 := TRUE; //打开电机1
            END_IF
        END_IF
        
        IF Level >= ContLevel2 THEN //满足启动液位
            IF Auto2 = TRUE AND Able2 = TRUE AND Fault2 = FALSE THEN //自动模式且允许控制且无故障
                Run2 := TRUE; //打开电机2
            END_IF
        END_IF
        
        IF Level >= ContLevel3 THEN //满足启动液位
            IF Auto3 = TRUE AND Able3 = TRUE AND Fault3 = FALSE THEN //自动模式且允许控制且无故障
                Run3 := TRUE; //打开电机3
            END_IF
        END_IF
        
        IF Level >= ContLevel4 THEN //满足启动液位
            IF Auto4 = TRUE AND Able4 = TRUE AND Fault4 = FALSE THEN //自动模式且允许控制且无故障
                Run4 := TRUE; //打开电机4
            END_IF
        END_IF
        
        IF Level >= ContLevel5 THEN //满足启动液位
            IF Auto5 = TRUE AND Able5 = TRUE AND Fault5 = FALSE THEN //自动模式且允许控制且无故障
                Run5 := TRUE; //打开电机5
            END_IF
        END_IF
        
        IF Level >= ContLevel6 THEN //满足启动液位
            IF Auto6 = TRUE AND Able6 = TRUE AND Fault6 = FALSE THEN //自动模式且允许控制且无故障
                Run6 := TRUE; //打开电机6
            END_IF
        END_IF
END_CASE

END_FUNCTION_BLOCK
回复

使用道具 举报

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

本版积分规则