用博图SCL编写1200PLC 7段S型速度曲线
1、博图V16SCL编写2、基本变量最大速度、最多加速度 、加加速度3、7段S型速度曲线
4、符合博图编写规范
5、起是速度为零
好的,以下是符合博图编写规范的SCL代码实现:
//声明变量
VAR
vMax : REAL; //最大速度
aMax : REAL; //最大加速度
jMax : REAL; //最大加加速度
t1 : REAL; //第一段时间
t2 : REAL; //第二段时间
t3 : REAL; //第三段时间
t4 : REAL; //第四段时间
t5 : REAL; //第五段时间
t6 : REAL; //第六段时间
t7 : REAL; //第七段时间
s1 : REAL; //第一段距离
s2 : REAL; //第二段距离
s3 : REAL; //第三段距离
s4 : REAL; //第四段距离
s5 : REAL; //第五段距离
s6 : REAL; //第六段距离
s7 : REAL; //第七段距离
END_VAR
//初始化变量
vMax := 10; //最大速度为10m/s
aMax := 2; //最大加速度为2m/s^2
jMax := 4; //最大加加速度为4m/s^3
//计算各段距离和时间
s1 := vMax*vMax/(2*aMax); //第一段距离
t1 := vMax/aMax; //第一段时间
s2 := s1; //第二段距离
t2 := t1/2; //第二段时间
s3 := s2 + vMax*t2 - 0.5*aMax*t2*t2; //第三段距离
t3 := (s3 - s2)/vMax + t2; //第三段时间
s4 := s3 + vMax*t3; //第四段距离
t4 := (s4 - s3)/vMax + t3; //第四段时间
s5 := s4 + vMax*t4 - 0.5*aMax*t4*t4; //第五段距离
t5 := (s5 - s4)/vMax + t4; //第五段时间
s6 := s5 + vMax*t5; //第六段距离
t6 := (s6 - s5)/vMax + t5; //第六段时间
s7 := s6 + vMax*t6 - 0.5*aMax*t6*t6; //第七段距离
t7 := (s7 - s6)/vMax + t6; //第七段时间
//定义速度曲线函数
FUNCTION_SPEED_PROFILE : REAL
VAR_IN_OUT
t : REAL; //当前时间
END_VAR
VAR_INPUT
s0 : REAL; //起始位置,初始速度为0
END_VAR
VAR
s : REAL; //当前位置
v : REAL; //当前速度
END_VAR
BEGIN
s := s0;
//计算各段速度
IF t <= t1 THEN
v := aMax*t;
ELSIF t <= t2 THEN
v := vMax;
ELSIF t <= t3 THEN
v := vMax - aMax*(t - t2);
ELSIF t <= t4 THEN
v := vMax;
ELSIF t <= t5 THEN
v := vMax + aMax*(t - t4);
ELSIF t <= t6 THEN
v := vMax;
ELSIF t <= t7 THEN
v := vMax - aMax*(t - t6);
ELSE
v := 0;
END_IF;
//计算当前位置
s := s + (v + vMax)/2*(t - TIME());
FUNCTION_SPEED_PROFILE := s;
END_FUNCTION
在程序中,我们首先定义了变量vMax、aMax和jMax,分别代表最大速度、最大加速度和最大加加速度。然后,根据7段S型速度曲线的特点,我们计算出了各段距离和时间,并定义了一个函数FUNCTION_SPEED_PROFILE来计算速度曲线。
在FUNCTION_SPEED_PROFILE函数中,我们传入s0作为起始位置,并将初始速度设置为0。随着时间的推移,我们根据时间段计算出当前速度,并根据速度计算出当前位置。最后返回当前位置。
注意:以上代码仅为示例,请根据实际项目需求进行修改和调整。
页:
[1]