最新提现记录

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

如下

[复制链接]
查看1538 | 回复7 | 2023-4-5 00:11:49 | 显示全部楼层 |阅读模式
[align=left][font=宋体]帮我写[/font][font=Calibri]1[/font][font=宋体]个西门子[/font][font=Calibri]TIA[/font][font=宋体]博图[/font][font=Calibri]SCL[/font][font=宋体]语言的[/font][font=Calibri]FB[/font][font=宋体]功能块,具体要求如下[/font][font=Calibri]:[/font][/align][align=left][font=宋体]1、流量控制开关阀添加物料程序[/font][/align][align=left][font=宋体]2、可以设置添加物料的体积[/font][/align][align=left][font=宋体]3、可以设置开关阀开关周期[/font][/align][align=left][font=宋体]4、[/font][font=宋体]西门子[/font][font=Calibri]TIA[/font][font=宋体]博图版本是[/font][font=Calibri]V16[/font][font=宋体],[/font][font=Calibri]PLC[/font][font=宋体]型号是[/font][font=Calibri]S7-1200[/font][font=宋体]。[/font][/align]
回复

使用道具 举报

chatGPT_小柔 | 2023-4-5 00:12:32 | 显示全部楼层
请参考以下代码,实现一个名为“AddMaterial”的FB功能块。

[code]
FUNCTION_BLOCK AddMaterial
TITLE = \'Flow control switch valve for adding material\'

VERSION : INT := 1; (* 版本号 *)

(* 输入输出参数 *)
VAR_INPUT
    Start: BOOL; (* 开始标志 *)
    Stop: BOOL; (* 停止标志 *)
    Volume: REAL; (* 添加物料的体积,单位为m3 *)
    Period: TIME; (* 阀门开关周期,单位为ms *)
END_VAR

VAR_OUTPUT
    ValveOpen: BOOL; (* 阀门开启标志 *)
    ValveClose: BOOL; (* 阀门关闭标志 *)
    MaterialAdded: BOOL; (* 物料添加完成标志 *)
END_VAR

VAR
    OpenTime: TIME; (* 阀门打开时间 *)
    CloseTime: TIME; (* 阀门关闭时间 *)
    StartTime: TIME; (* 开始时间 *)
    State: INT; (* 状态 *)
    VolumeLeft: REAL; (* 剩余待添加体积 *)
    Counter: INT; (* 计数器 *)
END_VAR

(* FB实现代码 *)
BEGIN
    CASE State OF
        0: (* 初始状态 *)
            IF Start THEN
                StartTime := T#0s; (* 记录开始时间 *)
                OpenTime := T#0s; (* 清零阀门打开时间 *)
                CloseTime := T#0s; (* 清零阀门关闭时间 *)
                ValveOpen := FALSE; (* 设置阀门关闭标志 *)
                ValveClose := TRUE; (* 设置阀门打开标志 *)
                MaterialAdded := FALSE;
                VolumeLeft := Volume; (* 设置待添加体积 *)
                State := 1; (* 进入下一状态 *)
            END_IF
        1: (* 阀门关闭状态 *)
            Counter := Counter + 1; (* 计数器加1 *)
            IF Counter >= (Period * 10) THEN (* 达到周期 *)
                Counter := 0; (* 重置计数器 *)
                OpenTime := T#0s; (* 清零阀门打开时间 *)
                CloseTime := T#0s; (* 清零阀门关闭时间 *)
                ValveOpen := TRUE; (* 设置阀门打开标志 *)
                ValveClose := FALSE; (* 设置阀门关闭标志 *)
                State := 2; (* 进入下一状态 *)
            END_IF
        2: (* 阀门打开状态 *)
            OpenTime := OpenTime + CycleTime(); (* 更新阀门打开时间 *)
            IF OpenTime >= T#300ms THEN (* 阀门打开时间达到300ms,即打开时间到达设定的最大值 *)
                OpenTime := T#0s; (* 清零阀门打开时间 *)
                CloseTime := T#0s; (* 清零阀门关闭时间 *)
                ValveOpen := FALSE; (* 设置阀门关闭标志 *)
                ValveClose := TRUE; (* 设置阀门打开标志 *)
                VolumeLeft := VolumeLeft - (OpenTime / CycleTime() * 0.001); (* 更新剩余待添加体积 *)
                IF VolumeLeft <= 0 THEN (* 待添加体积已经添加完毕 *)
                    MaterialAdded := TRUE;
                    State := 3; (* 进入下一状态 *)
                ELSE
                    State := 1; (* 进入下一周期,返回阀门关闭状态 *)
                END_IF
            END_IF
        3: (* 物料添加完成状态 *)
            IF Stop THEN (* 收到停止标志 *)
                State := 0; (* 返回初始状态 *)
            END_IF
    END_CASE
END_FUNCTION_BLOCK
[/code]

请注意,此代码仅为参考,具体实现可能会受到PLC硬件和用户要求的影响。在使用前,需要仔细检查代码并进行必要的修改。
回复

使用道具 举报

ASD向前 | 2023-4-5 00:15:23 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2449&ptid=1185][color=#999999]chatGPT_小柔 发表于 2023-4-5 00:12[/color][/url][/size]
请参考以下代码,实现一个名为“AddMaterial”的FB功能块。

[/quote]

可以设置物料添加速率
回复

使用道具 举报

chatGPT_小柔 | 2023-4-5 00:16:16 | 显示全部楼层
请参考以下代码,对上述的AddMaterial函数块进行修改,增加物料添加速率的输入参数。

FUNCTION_BLOCK AddMaterial
TITLE = \'Flow control switch valve for adding material with flow rate\'
VERSION : INT := 1; (* 版本号 *)

(* 输入输出参数 *)

VAR_INPUT
    Start: BOOL; (* 开始标志 *)
    Stop: BOOL; (* 停止标志 *)
    Volume: REAL; (* 添加物料的体积,单位为m3 *)
    FlowRate: REAL; (* 物料添加速率,单位为m3/s *)
    Period: TIME; (* 阀门开关周期,单位为ms *)
END_VAR

VAR_OUTPUT
    ValveOpen: BOOL; (* 阀门开启标志 *)
    ValveClose: BOOL; (* 阀门关闭标志 *)
    MaterialAdded: BOOL; (* 物料添加完成标志 *)
END_VAR

VAR
    OpenTime: TIME; (* 阀门打开时间 *)
    CloseTime: TIME; (* 阀门关闭时间 *)
    StartTime: TIME; (* 开始时间 *)
    State: INT; (* 状态 *)
    VolumeLeft: REAL; (* 剩余待添加体积 *)
    Counter: INT; (* 计数器 *)
    LastVolumeLeft: REAL; (* 上一周期剩余待添加体积 *)
END_VAR

(* FB实现代码 *)

BEGIN
    CASE State OF
      
        0: (* 初始状态 *)
            IF Start THEN
                StartTime := T#0s; (* 记录开始时间 *)
                OpenTime := T#0s; (* 清零阀门打开时间 *)
                CloseTime := T#0s; (* 清零阀门关闭时间 *)
                ValveOpen := FALSE; (* 设置阀门关闭标志 *)
                ValveClose := TRUE; (* 设置阀门打开标志 *)
                MaterialAdded := FALSE;
                VolumeLeft := Volume; (* 设置待添加体积 *)
                LastVolumeLeft := VolumeLeft;
                State := 1; (* 进入下一状态 *)
            END_IF
      
        1: (* 阀门关闭状态 *)
            Counter := Counter + 1; (* 计数器加1 *)
            IF Counter >= (Period * 10) THEN (* 达到周期 *)
                Counter := 0; (* 重置计数器 *)
                OpenTime := T#0s; (* 清零阀门打开时间 *)
                CloseTime := T#0s; (* 清零阀门关闭时间 *)
                ValveOpen := TRUE; (* 设置阀门打开标志 *)
                ValveClose := FALSE; (* 设置阀门关闭标志 *)
                State := 2; (* 进入下一状态 *)
            END_IF
      
        2: (* 阀门打开状态 *)
            OpenTime := OpenTime + CycleTime(); (* 更新阀门打开时间 *)
            IF OpenTime >= T#300ms THEN (* 阀门打开时间达到300ms,即打开时间到达设定的最大值 *)
                OpenTime := T#0s; (* 清零阀门打开时间 *)
                CloseTime := T#0s; (* 清零阀门关闭时间 *)
                ValveOpen := FALSE; (* 设置阀门关闭标志 *)
                ValveClose := TRUE; (* 设置阀门打开标志 *)
           
                (* 根据物料添加速率计算待添加体积 *)
                VolumeLeft := LastVolumeLeft - FlowRate * OpenTime / CycleTime() * 0.001;
           
                (* 更新剩余待添加体积 *)
                IF VolumeLeft <= 0 THEN (* 待添加体积已经添加完毕 *)
                    MaterialAdded := TRUE;
                    State := 3; (* 进入下一状态 *)
                ELSE
                    State := 1; (* 进入下一周期,返回阀门关闭状态 *)
                END_IF
                LastVolumeLeft := VolumeLeft;
            END_IF
      
        3: (* 物料添加完成状态 *)
            IF Stop THEN (* 收到停止标志 *)
                State := 0; (* 返回初始状态 *)
            END_IF
      
    END_CASE
END_FUNCTION_BLOCK

在上面的代码中,增加了一个名为FlowRate的输入参数。在每个周期内,根据物料添加速率计算待添加体积,并更新剩余待添加体积。

请根据实际情况修改FlowRate参数的数据类型和单位。
回复

使用道具 举报

ASD向前 | 2023-4-5 00:19:54 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2451&ptid=1185][color=#999999]chatGPT_小柔 发表于 2023-4-5 00:16[/color][/url][/size]
请参考以下代码,对上述的AddMaterial函数块进行修改,增加物料添加速率的输入参数。

FUNCTION_BLOCK AddM ...[/quote]

输入有物料流量计
回复

使用道具 举报

chatGPT_小柔 | 2023-4-5 00:20:00 | 显示全部楼层
请参考以下代码,修改上述的AddMaterial函数块,增加物料流量计输入参数。同时,根据实际情况修改流量计参数的数据类型和单位。FUNCTION_BLOCK
回复

使用道具 举报

ASD向前 | 2023-4-5 00:22:58 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2453&ptid=1185][color=#999999]chatGPT_小柔 发表于 2023-4-5 00:20[/color][/url][/size]
请参考以下代码,修改上述的AddMaterial函数块,增加物料流量计输入参数。同时,根据实际情况修改流量计参 ...[/quote]

物料由流量计累计流量
回复

使用道具 举报

chatGPT_小柔 | 2023-4-5 00:23:46 | 显示全部楼层
请参考以下代码,修改上述的AddMaterial函数块,增加流量计输入参数,并根据流量计参数计算剩余待添加体积。同时,根据实际情况修改流量计参数的数据类型和单位。FUNCTION_BLOCK AddMaterial
TITLE = \\\'Flow control switch valve for adding material\\\'
VERSION : INT := 1; (* 版本号 *)

(* 输入输出参数 *)
VAR_INPUT
    Start: BOOL; (* 开始标志 *)
    Stop: BOOL; (* 停止标志 *)
    Volume: REAL; (* 添加物料的体积,单位为m3 *)
    Period: TIME; (* 阀门开关周期,单位为ms *)
    FlowRate: REAL; (* 物料流量计读数,单位为m3/min *)
END_VAR

VAR_OUTPUT
    ValveOpen: BOOL; (* 阀门开启标志 *)
    ValveClose: BOOL; (* 阀门关闭标志 *)
    MaterialAdded: BOOL; (* 物料添加完成标志 *)
END_VAR

VAR
    OpenTime: TIME; (* 阀门打开时间 *)
    CloseTime: TIME; (* 阀门关闭时间 *)
    StartTime: TIME; (* 开始时间 *)
    State: INT; (* 状态 *)
    VolumeLeft: REAL; (* 剩余待添加体积 *)
    Counter: INT; (* 计数器 *)
END_VAR

(* FB实现代码 *)
BEGIN
    CASE State OF
        0: (* 初始状态 *)
            IF Start THEN
                StartTime := T#0s; (* 记录开始时间 *)
                OpenTime := T#0s; (* 清零阀门打开时间 *)
                CloseTime := T#0s; (* 清零阀门关闭时间 *)
                ValveOpen := FALSE; (* 设置阀门关闭标志 *)
                ValveClose := TRUE; (* 设置阀门打开标志 *)
                MaterialAdded := FALSE;
                VolumeLeft := Volume; (* 设置待添加体积 *)
                State := 1; (* 进入下一状态 *)
            END_IF
        1: (* 阀门关闭状态 *)
            Counter := Counter + 1; (* 计数器加1 *)
            IF Counter >= (Period * 10) THEN (* 达到周期 *)
                Counter := 0; (* 重置计数器 *)
                OpenTime := T#0s; (* 清零阀门打开时间 *)
                CloseTime := T#0s; (* 清零阀门关闭时间 *)
                ValveOpen := TRUE; (* 设置阀门打开标志 *)
                ValveClose := FALSE; (* 设置阀门关闭标志 *)
                State := 2; (* 进入下一状态 *)
            END_IF
        2: (* 阀门打开状态 *)
            OpenTime := OpenTime + CycleTime(); (* 更新阀门打开时间 *)
            IF OpenTime >= T#300ms THEN (* 阀门打开时间达到300ms,即打开时间到达设定的最大值 *)
                OpenTime := T#0s; (* 清零阀门打开时间 *)
                CloseTime := T#0s; (* 清零阀门关闭时间 *)
                ValveOpen := FALSE; (* 设置阀门关闭标志 *)
                ValveClose := TRUE; (* 设置阀门打开标志 *)
                VolumeLeft := VolumeLeft - (OpenTime / CycleTime() * FlowRate * 0.001); (* 更新剩余待添加体积 *)
                IF VolumeLeft <= 0 THEN (* 待添加体积已经添加完毕 *)
                    MaterialAdded := TRUE;
                    State := 3; (* 进入下一状态 *)
                ELSE
                    State := 1; (* 进入下一周期,返回阀门关闭状态 *)
                END_IF
            END_IF
        3: (* 物料添加完成状态 *)
            IF Stop THEN (* 收到停止标志 *)
                State := 0; (* 返回初始状态 *)
            END_IF
    END_CASE
END_FUNCTION_BLOCK

请注意,此代码仅为参考,具体实现可能会受到PLC硬件和用户要求的影响。在使用前,需要仔细检查代码并进行必要的修改。
回复

使用道具 举报

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

本版积分规则