发表于:2016/6/24 22:09:30
#0楼
楼主编写了一段代码用来控制传送机从高速运行中平缓减速,想通过一个算法来实现一个平滑的曲线减速,测试中遇到了数据转换问题,先附上代码
SP05: L #FQ1.Parameter.Stoppos_2
L #FQ1.Status_to_CO.Position
-R
T #Internal.Distance_ToStopPos
L #Internal.Distance_ToStopPos
L L#1300
/D
L #Internal.Distance_ToStopPos
*D
DTR
SQRT
RND
T #Internal.SlowSpeed
A(
L #Internal.SlowSpeed
L #FQ1.Parameter.Speed_4
>I
)
JC FF01
L #FQ1.Parameter.Speed_4
T #Internal.SlowSpeed
FF01: A(
L #Internal.SlowSpeed
L #FQ1.Parameter.Speed_2
>I
)
JC FF02
L #Internal.SlowSpeed
T #FQ1.Speed.Control
JU SP01
FF02: L #FQ1.Parameter.Speed_2
T #FQ1.Speed.Control
JU SP01
问题出现在所有的位置参数都是DW(现场的距离是2米,程序中距离值是用浮点型定义的2.0,也就是#FQ1.Parameter.Stoppos_2=2.0,这个数据转换成整型数据非常大),所以运算到下面会溢出
L #Internal.Distance_ToStopPos
L L#1300
/D
L #Internal.Distance_ToStopPos
*D
DTR
SQRT
RND
T #Internal.SlowSpeed
到这里结果就成了0 ,请大神指点一下如何改进! ( #Internal.SlowSpeed 是 int, #Internal.Distance_ToStopPos 是DW)
SP05: L #FQ1.Parameter.Stoppos_2
L #FQ1.Status_to_CO.Position
-R
T #Internal.Distance_ToStopPos
L #Internal.Distance_ToStopPos
L L#1300
/D
L #Internal.Distance_ToStopPos
*D
DTR
SQRT
RND
T #Internal.SlowSpeed
A(
L #Internal.SlowSpeed
L #FQ1.Parameter.Speed_4
>I
)
JC FF01
L #FQ1.Parameter.Speed_4
T #Internal.SlowSpeed
FF01: A(
L #Internal.SlowSpeed
L #FQ1.Parameter.Speed_2
>I
)
JC FF02
L #Internal.SlowSpeed
T #FQ1.Speed.Control
JU SP01
FF02: L #FQ1.Parameter.Speed_2
T #FQ1.Speed.Control
JU SP01
问题出现在所有的位置参数都是DW(现场的距离是2米,程序中距离值是用浮点型定义的2.0,也就是#FQ1.Parameter.Stoppos_2=2.0,这个数据转换成整型数据非常大),所以运算到下面会溢出
L #Internal.Distance_ToStopPos
L L#1300
/D
L #Internal.Distance_ToStopPos
*D
DTR
SQRT
RND
T #Internal.SlowSpeed
到这里结果就成了0 ,请大神指点一下如何改进! ( #Internal.SlowSpeed 是 int, #Internal.Distance_ToStopPos 是DW)