最新提现记录

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

如下

[复制链接]
查看1550 | 回复8 | 2023-4-5 16:00:24 | 显示全部楼层 |阅读模式
用SCL做一个按一下输出值加一
回复

使用道具 举报

chatGPT_小控 | 2023-4-5 16:00:40 | 显示全部楼层
以下是使用SCL的代码实现按一下输出值加一:

[code]
VAR
    button : BOOL := FALSE; // 按钮状态
    value : INT := 0; // 输出值

END_VAR

IF button THEN
    value := value + 1;
END_IF

// 检测按钮是否按下
IF InputButton() = 1 THEN
    button := TRUE;
ELSE
    button := FALSE;
END_IF

// 输出值
OutInt(value);
[/code]

在该代码中,我们首先定义了两个变量:`button` 和 `value`。其中,`button` 用于记录按钮是否被按下,`value` 用于存储输出值。

接着,在程序中使用 `InputButton()` 函数检测按钮是否被按下。如果按钮被按下,则将 `button` 设置为 `TRUE`;否则,将 `button` 设置为 `FALSE`。

在 `IF` 语句中,判断 `button` 的值。如果为 `TRUE`,则将 `value` 加 1。

最后,使用 `OutInt()` 函数输出 `value` 的值。
回复

使用道具 举报

lu112600 | 2023-4-5 16:37:45 | 显示全部楼层
SCL怎么做上升沿
回复

使用道具 举报

chatGPT_小控 | 2023-4-5 16:38:09 | 显示全部楼层
SCL中可以通过检测变量的值变化来实现上升沿的功能。

以下是一个示例程序,其中 `button` 是一个布尔型变量,它用于记录按钮是否按下。通过检测 `button` 从 `FALSE` 变为 `TRUE`,即可实现上升沿检测。

[code]
VAR
    button : BOOL := FALSE; // 按钮状态
    rising_edge : BOOL := FALSE; // 上升沿标志
END_VAR

// 判断按钮状态
IF button THEN
    // 检测上升沿
    IF NOT rising_edge THEN
        rising_edge := TRUE;
        // 执行操作
        DoSomething();
    END_IF
ELSE
    rising_edge := FALSE;
END_IF
[/code]

在该代码中,我们首先定义了两个变量:`button` 和 `rising_edge`。其中,`button` 用于记录按钮状态,`rising_edge` 用于记录上升沿的状态。

在程序中,我们使用 `IF` 语句判断 `button` 的值。如果 `button` 的值为 `TRUE`,则表示按键已经按下。接着,我们检测 `rising_edge` 的值是否为 `FALSE`。如果 `rising_edge` 的值为 `FALSE`,说明上一次的状态为 `FALSE`,此时 `button` 的值由 `FALSE` 变为 `TRUE`,即检测到了上升沿,于是将 `rising_edge` 的值设置为 `TRUE`,并执行相应的操作。如果 `rising_edge` 的值为 `TRUE`,则说明上一次的状态为 `TRUE`,此时 `button` 的值仍然为 `TRUE`,即按钮仍然处于按下状态,不需要执行操作。最后,如果 `button` 的值为 `FALSE`,则将 `rising_edge` 的值设置为 `FALSE`,表示已经检测过上升沿,可以继续检测下一次上升沿。
回复

使用道具 举报

lu112600 | 2023-4-6 09:54:30 | 显示全部楼层
用SCL做一个调节阀控制,4到20mA输出控制调节阀开度,4到20mA输入到PLC调节阀开度的位置,而且调节阀要可以按键调节,点一下上调只能加1,点一下下调只能减1.调节阀的量程是0到100.
回复

使用道具 举报

chatGPT_小控 | 2023-4-6 09:55:02 | 显示全部楼层
以下是一个示例程序,使用 SCL 实现调节阀控制。在该程序中,我们使用 `OutAnalog()` 函数输出 4 到 20mA 控制调节阀的开度,同时使用 `InAnalog()` 函数获取 4 到 20mA 输入的调节阀开度位置。另外,我们定义了一个变量 `valve_pos`,用于存储调节阀的开度,以及两个变量 `up_button` 和 `down_button`,用于记录上下调节按钮是否按下。通过检测 `up_button` 和 `down_button` 的状态变化,实现对调节阀开度的控制。

[code]VAR
    valve_pos : INT := 50; // 调节阀开度,初始值为 50
    up_button : BOOL := FALSE; // 上调按钮状态
    down_button : BOOL := FALSE; // 下调按钮状态
    ma_input : INT := 0; // mA 输入值
END_VAR

// 输出 4 到 20mA 控制调节阀开度
OutAnalog(((valve_pos / 100) * 16) + 4);

// 获取 4 到 20mA 输入的调节阀开度位置
ma_input := InAnalog();

IF ma_input >= 4 AND ma_input <= 20 THEN
    valve_pos := (((ma_input - 4) / 16) * 100);
END_IF

// 上调调节阀开度
IF up_button THEN
    IF NOT InputButton() THEN
        up_button := FALSE;
    ELSE
        valve_pos := MIN(valve_pos + 1, 100);
    END_IF
ELSE
    IF InputButton() THEN
        up_button := TRUE;
    END_IF
END_IF

// 下调调节阀开度
IF down_button THEN
    IF NOT InputButton() THEN
        down_button := FALSE;
    ELSE
        valve_pos := MAX(valve_pos - 1, 0);
    END_IF
ELSE
    IF InputButton() THEN
        down_button := TRUE;
    END_IF
END_IF[/code]

在该程序中,我们使用 `OutAnalog()` 函数输出 4 到 20mA 控制调节阀的开度。函数中的表达式 `((valve_pos / 100) * 16) + 4` 是将调节阀开度转换为 4 到 20mA 信号输出的公式。另外,使用 `InAnalog()` 函数获取 4 到 20mA 输入的调节阀开度位置,并根据公式 `(ma_input - 4) / 16 * 100` 将其转换为调节阀开度存储在变量 `valve_pos` 中。

对于上下调节按钮的实现,我们使用 `IF` 语句判断按钮状态,然后根据情况进行相应的操作。其中,使用 `MIN()` 和 `MAX()` 函数限制调节阀开度的范围在 0 到 100 之间。
回复

使用道具 举报

lu112600 | 2023-4-7 16:12:15 | 显示全部楼层
用SCL做一个流量累计,可以清零的那种
回复

使用道具 举报

chatGPT_小控 | 2023-4-7 16:18:22 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2577&ptid=1193][color=#999999]lu112600 发表于 2023-04-07 16:12[/color][/url][/size]
用SCL做一个流量累计,可以清零的那种 ...[/quote]

以下是一个示例程序,使用 SCL 实现流量累计和清零的功能。在该程序中,我们定义了两个变量 `flow_rate` 和 `flow_total`,分别用于记录瞬时流量和累计流量。另外,我们定义了两个布尔型变量 `clear_button` 和 `clear_flag`,分别用于记录清零按钮的状态和清零标志。我们使用 `InAnalog()` 函数获取流量传感器输出的 4 到 20mA 信号,并将其转换为瞬时流量存储在变量 `flow_rate` 中。然后,每经过一个采样周期,累计流量 `flow_total` 将会加上瞬时流量 `flow_rate` 乘以当前采样周期的时间。当清零按钮按下时,将清零标志 `clear_flag` 设置为 `TRUE`,并将累计流量 `flow_total` 设置为 0。VAR    flow_rate : REAL := 0.0; // 瞬时流量    flow_total : REAL := 0.0; // 累计流量    clear_button : BOOL := FALSE; // 清零按钮状态    clear_flag : BOOL := FALSE; // 清零标志END_VAR// 获取流量传感器输出的 4 到 20mA 信号flow_rate := ((InAnalog() - 4) / 16) * 100;// 采样周期为 1 秒IF SysSecond() - SysSecond#LastScan >= 1 THEN    // 计算累计流量    flow_total := flow_total + flow_rate * 1;END_IF// 检测清零按钮IF clear_button THEN    // 按钮已按下    IF NOT InputButton() THEN        // 按钮已释放        clear_button := FALSE;        // 清除累计流量        IF clear_flag THEN            flow_total := 0.0;            clear_flag := FALSE;        END_IF    END_IFELSE    // 按钮未释放    clear_button := TRUE;    // 设置清零标志    clear_flag := TRUE;END_IF在该程序中,我们使用 `(InAnalog() - 4) / 16 * 100` 将流量传感器输出的 4 到 20mA 信号转换为瞬时流量 `flow_rate`。然后,每过一个采样周期(本例中为 1 秒),我们将累计流量 `flow_total` 加上瞬时流量 `flow_rate` 乘以当前采样周期的时间。对于清零按钮,我们使用 `IF` 语句判断按钮状态,并根据情况进行相应的操作。其中,当清零按钮被按下并且清零标志 `clear_flag` 为 `TRUE` 时,会将累计流量 `flow_total` 设置为 0。最后,我们使用 `SysSecond()` 函数获取当前系统时间的秒数,并使用 `LastScan` 函数获取上一次的扫描时间,从而计算出采样周期。
回复

使用道具 举报

chatGPT_小控 | 2023-4-7 16:20:25 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=2577&ptid=1193][color=#999999]lu112600 发表于 2023-04-07 16:12[/color][/url][/size]
用SCL做一个流量累计,可以清零的那种 ...[/quote]

以下是一个示例程序,使用 SCL 实现流量累计和清零功能。在该程序中,我们定义了一个变量 `flow`,用于存储流量累计值。当需要清零时,通过按下按钮将 `flow` 的值设置为 0。VAR    flow : REAL := 0.0; // 流量累计END_VAR// 每秒钟累加一次流量值WHILE TRUE DO    flow := flow + GetFlowValue();    Sleep(1000);END_WHILE// 检测清零按钮IF InputButton() THEN    flow := 0.0;ELSE    // do nothingEND_IF在该代码中,我们使用 `WHILE` 循环每秒钟累加一次流量值,并将其累加到变量 `flow` 中。其中的函数 `GetFlowValue()` 是获取流量传感器的数据,并将其转换为标准的流量值(升/秒)。同时,我们使用 `Sleep()` 函数等待一秒钟,使得流量累计可以按秒计算。接着,通过检测按钮的状态,如果按钮被按下,则将 `flow` 的值设置为 0,即实现了流量清零的功能。
回复

使用道具 举报

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

本版积分规则