回复:指令

芳季

西门子1847工业学习平台

  • 帖子

    15530
  • 精华

    101
  • 被关注

    963

论坛等级:至圣

注册时间:2007-08-03

钻石 钻石 如何晋级?

发布于 2009-07-14 22:06:51

0楼

为人为到底,正好这段时间在自己学习库。送一个给你。我自己做的。请指教。希望可以提出意见让我成长。
SUBROUTINE_BLOCK 域和:SBR1
TITLE=子程序注释
// 程序目的:
// 把指定连续V区域中的整数进行求和。
// 适用范围:
// 不适合在中断中使用。建议在使用时通过边缘指令调用一次。
// 参数类型:
// 连续数 字。总共参与计算的字的个数。
// 起始位 偏移量,字。第一个数据的地址相对VB0的增量。
// 模式 字节。计算对象的位长。0:8位;1:16位;2:32位。
// 执行过程:每执行一次得到一次计算结果。
VAR_INPUT
连续数:WORD;
首址偏移:WORD; // 这是对VB0的偏移量。
模式:BYTE; // 0:字节;1:字;2:双字
END_VAR
VAR_OUTPUT
域和:DINT;
END_VAR
VAR
循环值:WORD;
过程量:DWORD;
起始位:DWORD;
END_VAR
BEGIN
Network 1 // 确定具体指针值。清除旧值。
LD SM0.0
MOVW 16#0800, LW15
MOVW LW2, LW17
ANDB 2#11, LB4
MOVD +0, LD5
MOVW +0, LW9
Network 2 // 用循环累加。循环次数是数据的个数。
LD SM0.0
FOR LW9, +1, LW0
Network 3 // 按照模式指定的位长转换成双字进行计算。 利用起始位作指针,指示循环过程中变化的当前累加位置。指针值增加,指向下一个对象。
LDN L6.0
AN L6.1
BTI *LD15, LW11
ITD LW11, LD11
INCD LD15
Network 4 // 这是16位时计算
LD L6.0
AN L6.1
ITD *LD15, LD11
+D 2, LD15
Network 5 // 这是32位时计算
LD L6.1
MOVD *LD15, LD11
+D 4, LD15
Network 6 // 第一个值加进和中。
LD SM0.0
+D LD11, LD5
Network 7
NEXT
END_SUBROUTINE_BLOCK

Y侠:我又在班门献丑了。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33266条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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