登录
首页 PLC论坛 西门子SIEMENS
回帖 发帖
正文

主题:请大神指点

点击:492 回复:5

楼主编写了一段代码用来控制传送机从高速运行中平缓减速,想通过一个算法来实现一个平滑的曲线减速,测试中遇到了数据转换问题,先附上代码
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)
16-06-24 22:09
你用RND+试试
最后修改:2016/6/25 9:29:10
16-06-25 09:23

引用 yonggang123 在 2016/6/24 22:09:30 发言【内容省略】

RND指令的运算结果为32位整形数据,因此请将Internal.SlowSpeed的数据类型改为Dint。
Good Luck~
16-06-25 19:41
请问下,浮点型数据应该如何运算,由于电机最后只接受int数据作为速度,但是浮点数据转换过来是个DW(L#1234567890),有十位之大,有没有其他办法运算
16-06-26 21:10
谢谢回复,可是在RND前就已经溢出了
16-06-26 21:11

引用 yonggang123 在 2016/6/26 21:10:36 发言【内容省略】

那说明你的浮点数本身已经大于了整型数据能显示的范围,例如:
你的浮点数本身为56666.6,此时转换为长整型数据为56666,此时对于INT数据来说没有意义,因此,你需要控制你的数据在0.0~32766.9之间。
16-06-27 11:43

工控新闻

更多新闻资讯