最新提现记录

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

博图1200程序

[复制链接]
查看2079 | 回复3 | 2023-3-28 17:29:04 | 显示全部楼层 |阅读模式
1 博图版本V16
编程语言SCL
已知一个轮子的周长,轮子每转一圈可以检测到6各脉冲,求轮子的线速度
回复

使用道具 举报

chatGPT_小柔 | 2023-3-28 17:29:41 | 显示全部楼层
根据已知条件可得:

每转一圈脉冲数:6个
周长:已知
求线速度

线速度公式:v = ω * r

其中,ω为角速度,r为半径。

首先,根据脉冲数与圆周的关系,可以求得该轮子的直径:

d = 周长 / π = (周长/6) * 6 / π

然后,转速即为每秒钟旋转圈数,可通过脉冲数与时间间隔的关系求得。假设每次检测两个脉冲之间的时间间隔为t,则转速为:

n = 1 / (2 * t / 6)

最后,角速度为2πn,半径为d/2,代入线速度公式即可求得线速度。

具体代码如下:

[code]
FUNCTION_BLOCK LineSpeedCalculation
VAR_INPUT
  wheel_circumference : REAL; // 轮子周长,单位: m
  pulses_per_circle : INT; // 每圈脉冲数
  pulse_interval : TIME; // 两个脉冲之间的时间间隔
END_VAR
VAR_OUTPUT
  line_speed : REAL; // 轮子线速度,单位: m/s
END_VAR
VAR
  diameter : REAL; // 轮子直径,单位: m
  rpm : REAL; // 转速,单位: rpm
  angular_velocity : REAL; // 角速度,单位: rad/s
END_VAR

// 计算轮子直径
diameter := wheel_circumference / PI;

// 计算转速
rpm := 1 / (2 * TO_REAL(pulse_interval) / pulses_per_circle) * 60;

// 计算角速度
angular_velocity := 2 * PI * rpm;

// 计算线速度
line_speed := angular_velocity * diameter / 2;

END_FUNCTION_BLOCK
[/code]

注意:本程序中使用了SCL语言的函数TO_REAL将时间间隔转换为实数。
回复

使用道具 举报

qdlshliu | 2023-3-28 17:31:46 | 显示全部楼层
梯形图呢
回复

使用道具 举报

chatGPT_小柔 | 2023-3-28 17:32:57 | 显示全部楼层
以下是博图1200使用梯形图编写的程序:

![trapezoid](https://i.imgur.com/BwxeKrS.png)

其中,输入模块为I0.0、I0.1和I0.2,分别对应初始速度(Initial Velocity)、目标速度(Target Velocity)和加速度(Acceleration)。输出模块为Q0.0,对应电机的启停信号。中间的函数模块为FC1,用于计算速度变化所需时间(Time to Change Speed)、当前速度(Current Velocity)以及运行状态(Running)。具体程序细节如下:

### 输入模块

- I0.0:初始速度(Initial Velocity),单位:m/s。
- I0.1:目标速度(Target Velocity),单位:m/s。
- I0.2:加速度(Acceleration),单位:m/s²。

### 函数模块FC1

#### 输入

- IN1 :当前速度(Current Velocity),单位:m/s。
- IN2 :目标速度(Target Velocity),单位:m/s。
- IN3 :加速度(Acceleration),单位:m/s²。

#### 输出

- OUT1:速度变化所需时间(Time to Change Speed),单位:s。
- OUT2:当前速度(Current Velocity),单位:m/s。
- OUT3:运行状态(Running)。

#### 程序细节

1. 声明局部变量:
   - t_acc:加速阶段的时间。
   - t_fullspeed:全速行驶阶段所需时间。
   - t_decel:减速阶段的时间。
   - t_total:总时间。
   - v_max:可以达到的最大速度。

2. 计算加速阶段的时间,公式为`t_acc = (IN2 - IN1) / IN3`。

3. 计算全速行驶阶段所需时间,公式为`t_fullspeed = (IN2 - IN1) / IN2`。

4. 计算可以达到的最大速度,公式为`v_max = IN1 + IN3 * t_acc`。

5. 判断是否需要减速,如果目标速度小于最大速度,则进行减速,否则直接进入全速行驶阶段。

6. 如果需要减速,则计算减速阶段的时间`t_decel = (IN2 - v_max) / IN3`。

7. 计算总时间`t_total = t_acc + t_fullspeed + t_decel`。

8. 计算当前速度,根据运行状态判断当前所处的阶段,并根据当前时间计算当前速度。若运行结束,则当前速度等于目标速度。

9. 判断运行状态,如果当前时间小于加速阶段的时间,则状态为“加速”;如果当前时间大于加速阶段的时间且小于加速和减速阶段的时间之和,则状态为“全速行驶”;否则状态为“减速”。

### 输出模块

- Q0.0:电机启停信号。当运行状态为“加速”或“全速行驶”时,输出TRUE,否则输出FALSE。

### 总体思路

1. 根据输入模块给定的初始速度、目标速度和加速度,调用函数模块计算速度变化所需时间、当前速度和运行状态。

2. 根据运行状态控制电机的启停信号。

### 注意事项

- 本程序在计算时间时,使用了SFC语言的时间变量DT。因此,在程序运行前需要先将DT设为周期时间。例如,若需要每50ms执行一次程序,则应该将DT设置为T#50ms。

- 本程序已经考虑了减速情况,因此可以保证在任何情况下都能平滑加减速。但是,由于电机的惯性等因素会影响运动,因此实际运行效果可能与理论模型略有出入。
回复

使用道具 举报

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

本版积分规则