回复:STEP7中如何作FC,以实现两个数组的内积之和

jianghehupo

  • 帖子

    141
  • 精华

    3
  • 被关注

    1

论坛等级:侠士

注册时间:2011-10-06

黄金 黄金 如何晋级?

发布于 2011-10-18 12:39:36

28楼

感觉为了一个乘加操作,专门建立两个专用的DB有点儿浪费,还是用指针比较合适,可以指向DB,也可以指向M存储区。
下面是利用POINTER指针做的FC,试验过了,能得出正确的结果,但是自己感觉比较啰嗦,请大家帮忙优化一下。
L 0 // 清零结果暂存器
T #TMP

L 255
T #INDEX
L #CNT
NEXT: T #NUMBER // 循环
L #INDEX
INC 1
T #INDEX

L P##POINTER1 // 得到第一个指针的地址
LAR1
L 0
L W [AR1,P#0.0] // DB编号
==I // 是不是数据块
JC LBL1 // 不是则跳转,是则打开
T #DBNO1
OPN DB [#DBNO1]
LBL1: L D [AR1,P#2.0] // 得到指向数据的地址
LAR1
L #INDEX // 加上偏移量
L 32
*D
TAR1
+D
LAR1
L D [AR1,P#0.0] // 得到数据,暂存
T #VALUE1

L P##POINTER2 // 得到第二个数据
LAR1
L 0
L W [AR1,P#0.0]
==I
JC LBL2
T #DBNO1
OPN DB [#DBNO1]
LBL2: L D [AR1,P#2.0]
LAR1
L #INDEX
L 32
*D
TAR1
+D
LAR1
L D [AR1,P#0.0]

L #VALUE1 // 乘加
*R
L #TMP
+R
T #TMP

L #NUMBER
LOOP NEXT

L #TMP // 返回值
T #RET_VAL
BE

调用的时候:
CALL FC 100
POINTER1:=DB1.DBD0
POINTER2:=P#M 0.0
CNT :=W#16#5
RET_VAL :=MD200
能学多久,就能活多久。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54774条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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