回复:S7-300怎样实现幂函数?

阿奎利亚

  • 帖子

    5
  • 精华

    2
  • 被关注

    0

论坛等级:新手

注册时间:2009-02-16

普通 普通 如何晋级?

发布于 2009-02-19 19:07:36

0楼

呵呵,侠圣“zhangli0 ”朋友的思路是非常正确的,但是没有考虑相应的错误发生情况及处理的措施。不过就像我前两天碰到的一位朋友在发出“求8位中任意3位为1”时的帖子一样,西门子的例程库中同样有实现求幂函数功能这样的
一个FC。今天我就再次贴出来和大家一起学习,如果有说的不对的地方请大家指正。
这是一个名为“ACCU 2 to Power ACCU 1”的FC,它的位置在“库 —> Standard Library —> S5-S7 Converting Blocks —> FC125 ACCU 2 to Power ACCU 1”,这个FC是用来实现求累加器2中数值X的累加器1中数值Y次幂,其中输入到累加器1和2中的数值均被视为浮点数的格式。
如果函数执行过程中没有出现错误则执行结束后RLO位的状态为0,累加器ACCU1中存放的是计算结果;否则出现错误则RLO为1,同时ACCU1=计算前赋予的指数,ACCU2=计算前赋予的底数。出现错误的原因可能是:1.底数的输入值小于0;2在执行该函数期间,发生数值范围上溢。如果出现溢出情况会将OV状态位置位。
以下是一个调用该FC的例子,假设底数存放于MD10,指数存放于MD20,最后计算的结果存放于MD100,Q1.0用来指示计算过程是否出错。

L 1.500000e+000 // 底数
T MD10
L 3.500000e+000 // 指数
T MD20

L MD10 // ACCU2 = 底数
L MD20 // ACCU1 = 指数

CALL "ACCU 2 to Power ACCU 1" // 调用计算ACCU2的ACCU1次幂的FC
NOP 0
= M 0.0 // 保存RLO状态,用以指示是否出错

A M 0.0
= Q 1.0 // 出错时Q1.0为ON

T MD 100 // 如果计算正确,将ACC1中的计算结果保存在MD100中(结果=4.133514e+000)
// 否则将ACC1中存放的计算前的幂指数传回MD100(=3.500000e+005,假设发生溢 出时输入的是此幂指数)


我思故我在
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54710条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。