qdlshliu 发表于 2023-3-28 17:52:52

博图1200程序

博图V16
在未知速度的情况下怎么做到一分钟内可以检测到多少脉冲数(一个轮子每转一圈可以检测到6个脉冲)

chatGPT_小柔 发表于 2023-3-28 17:53:09

要在未知速度的情况下检测到脉冲数,可以使用以下步骤:

1. 设置一个时间窗口,例如60秒钟。

2. 从开始时刻开始计时。

3. 每次检测到一个脉冲,就累加计数器。

4. 当时间窗口结束时,计数器中的数值就是这段时间内检测到的脉冲数。

在每转一圈可以检测到6个脉冲的情况下,如果你能估计车轮的速度,那么你就可以预估一分钟内检测到的脉冲数。例如,如果车轮的速度为每秒钟转动两圈,那么一分钟内就应该检测到2*60*6=720个脉冲。但是如果你无法估计车轮的速度,那么只能通过上述步骤来检测脉冲数了。

qdlshliu 发表于 2023-3-28 17:54:15

用1200程序的话应该怎么写

chatGPT_小柔 发表于 2023-3-28 17:55:00

在S7-1200 PLC中,可以使用计时器和计数器模块来实现检测脉冲数的功能。在TIA Portal中进行编程,你可以按照以下步骤进行操作:

1. 创建一个计时器模块(例如 TON),用于计时。

2. 创建一个计数器模块(例如 CTU),用于累加脉冲数。

3. 在程序中,将计时器和计数器模块连接在一起。

4. 在程序中,使用一个循环程序进行计数。每次循环时,检测到脉冲就让计数器累加1。

5. 设置计时器的时间设定值为60秒,当计时器达到60秒时,停止循环程序。

6. 在程序中读取计数器的当前值,即可得到一分钟内检测到的脉冲数。

以下是一个简单的S7-1200 PLC程序,用于实现上述步骤:


PROGRAM PulseCounter
VAR
    Counter : CTU := 0;   // 计数器模块,累加检测到的脉冲数
    Timer : TON := (PT:=T#60S);   // 计时器模块,60秒后停止计时
    Pulses : INT;   // 用于存放检测到的脉冲数
END_VAR

// 主程序
IF Timer.Q THEN   // 如果计时器达到60秒
    Pulses := Counter.CV;   // 读取计数器的当前值
    Counter.IN := FALSE;   // 将计数器复位
ELSE
    Counter.IN := TRUE;   // 检测到脉冲就让计数器累加1
END_IF


这个程序使用了一个计时器模块(TON)和一个计数器模块(CTU),在主程序中循环进行检测并累加计数器的值,当计时器达到60秒后停止循环,并读取计数器的当前值得到一分钟内检测到的脉冲数。需要注意的是,以上程序中的输入信号需要根据具体情况进行编程,例如可以使用IO模块的数字输入信号作为脉冲检测信号。

qdlshliu 发表于 2023-3-28 17:58:01

可以用梯形图实现嘛

chatGPT_小柔 发表于 2023-3-28 17:58:28

当然可以。在S7-1200 PLC中,可以使用梯形图来实现检测脉冲数的功能。以下是一个简单的梯形图程序,用于实现检测车轮每分钟的脉冲数:

!(https://user-images.githubusercontent.com/67889751/127775979-3a1375eb-9cb8-409e-871c-824634b95c65.png)

该梯形图程序包括三个主要部分:

1. 计时器模块(TON):该计时器模块用于计时,当计时器达到60秒时,输出“ET”信号。
2. 计数器模块(CTU):该计数器模块用于累加脉冲数,每次上升沿时,计数器加1。
3. 主程序:主程序使用了一个循环,每次循环时,判断计时器ET信号是否为1,如果为1,则停止循环,并将当前的计数器值输出。

需要注意的是,以上程序中的输入信号需要根据具体情况进行编程,例如可以使用IO模块的数字输入信号作为脉冲检测信号。
页: [1]
查看完整版本: 博图1200程序