huangahoo 发表于 2023-3-31 21:40:46

三个电磁阀a,b,c轮流接通

要求如下:1.当启动信号为1时,三个电磁阀a,b,c轮流循环通电。
2.通电间隔时间为120秒,每个电磁阀通电持续时间为2秒
3.用西门子博图V15写一个FB
4.编程语言用SCL

chatGPT_小柔 发表于 2023-3-31 21:43:17

以下是实现三个电磁阀轮流接通的SCL代码:


FUNCTION_BLOCK FBRotateValve
TITLE = \"Rotate valve function block\"

VAR_INPUT
    StartSignal : BOOL; // 启动信号
END_VAR

VAR_OUTPUT
    ValveA : BOOL; // 电磁阀A输出
    ValveB : BOOL; // 电磁阀B输出
    ValveC : BOOL; // 电磁阀C输出
END_VAR

VAR
    Timer1 : TON; // 计时器1,用于计算通电持续时间
    Timer2 : TON; // 计时器2,用于计算通电间隔时间
    ValveIndex : INT := 0; // 当前接通的电磁阀编号,0表示未接通任何电磁阀
    LastTime : TIME := T#0s; // 上次接通电磁阀的时间点
END_VAR

// Constants
CONST
    SwitchInterval : TIME := T#120s; // 通电间隔时间
    ValveDuration : TIME := T#2s; // 电磁阀通电持续时间
END_CONST

// Main logic
BEGIN
    IF StartSignal THEN
      // 计时器2判断是否需要切换电磁阀
      IF NOT Timer2(IN := TRUE, PT := SwitchInterval) THEN
            // 未到切换时间,继续保持当前电磁阀通电
            CASE ValveIndex OF
                0:
                  ValveA := FALSE;
                  ValveB := FALSE;
                  ValveC := FALSE;
                1:
                  ValveA := TRUE;
                  ValveB := FALSE;
                  ValveC := FALSE;
                2:
                  ValveA := FALSE;
                  ValveB := TRUE;
                  ValveC := FALSE;
                3:
                  ValveA := FALSE;
                  ValveB := FALSE;
                  ValveC := TRUE;
            END_CASE
      ELSE
            // 到达切换时间,切换到下一个电磁阀
            ValveIndex := ValveIndex + 1;
            IF ValveIndex > 3 THEN
                ValveIndex := 1;
            END_IF
            LastTime := TIMER() - ValveDuration; // 记录切换时间,用于计时器1的时间累积
      END_IF

      // 计时器1控制电磁阀通电持续时间
      Timer1(IN := (ValveIndex <> 0 AND Timer2.Q)), PT := ValveDuration;
      IF Timer1.Q THEN
            ValveA := FALSE;
            ValveB := FALSE;
            ValveC := FALSE;
      ELSE
            CASE ValveIndex OF
                0:
                  ValveA := FALSE;
                  ValveB := FALSE;
                  ValveC := FALSE;
                1:
                  ValveA := TRUE;
                  ValveB := FALSE;
                  ValveC := FALSE;
                2:
                  ValveA := FALSE;
                  ValveB := TRUE;
                  ValveC := FALSE;
                3:
                  ValveA := FALSE;
                  ValveB := FALSE;
                  ValveC := TRUE;
            END_CASE
      END_IF
    ELSE
      // 停止信号,关闭所有电磁阀
      ValveA := FALSE;
      ValveB := FALSE;
      ValveC := FALSE;
      ValveIndex := 0;
      Timer1(IN := FALSE);
      Timer2(IN := FALSE);
    END_IF
END_FUNCTION_BLOCK


在主程序中,可以实例化这个FB并进行测试:


PROGRAM Main
TITLE = \"Main program\"

VAR
    FBRotate : FBRotateValve; // 实例化轮流接通电磁阀的函数块
    StartSignal : BOOL := FALSE; // 启动信号
END_VAR

// Main logic
BEGIN
    // 模拟启动信号
    IF T#1s THEN
      StartSignal := TRUE;
    ELSE
      StartSignal := FALSE;
    END_IF

    // 调用轮流接通电磁阀的函数块
    FBRotate(StartSignal := StartSignal);

    // 显示当前电磁阀状态
    IF FBRotate.ValveA THEN
      // 电磁阀A接通中
      // ...
    END_IF
    IF FBRotate.ValveB THEN
      // 电磁阀B接通中
      // ...
    END_IF
    IF FBRotate.ValveC THEN
      // 电磁阀C接通中
      // ...
    END_IF
END_PROGRAM

huangahoo 发表于 2023-3-31 21:49:48

你知道两级风选机吗

chatGPT_小柔 发表于 2023-3-31 21:50:53

是的,两级风选机是一种常用于废旧物资回收及再生利用行业中的设备。其主要作用是对混合的废旧物料进行风力分离,将较轻的杂质和较重的有价值的物资分开。

两级风选机通常由上下两个部分组成,其中上部为预选分离部分,下部为风力分离部分。在上部,通过振动和筛分等方式将混合物料进行初步分类和分离,然后再通过风力分离部分进行精细分离。具体而言,在风力分离部分,会通过调整风力大小和方向,将混合物料分割成较轻和较重两部分,分别进入不同的出料口,从而实现物料的分离和回收利用。

两级风选机具有结构简单、运行稳定、分选效果好、低能耗等特点,已广泛应用于废旧物资、建筑垃圾、矿产等行业中。
页: [1]
查看完整版本: 三个电磁阀a,b,c轮流接通