回复:S7 200冒泡排序的疑问

芳季

西门子1847工业学习平台

  • 帖子

    15834
  • 精华

    104
  • 被关注

    993

论坛等级:至圣

注册时间:2007-08-03

钻石 钻石 如何晋级?

发布于 2019-02-25 15:13:33

3楼

看看这个能用不?

SUBROUTINE_BLOCK I排序:SBR1

TITLE=密码:dddd

// 程序耗时。

// 10个数据 倒序排列使用16.5毫秒 顺序排列用11毫秒

// 

// 20个数据 倒序  66毫秒 顺序  43

// 

// 30个数据 倒序  150毫秒 顺序  96

// 

// 40个数据 倒序 267 顺序 171

// 

// 50个数据 倒序 418 顺序 267

// 

// 55个 倒序 508 顺序 324

VAR_INPUT

表头:INT;

个数:INT;

END_VAR

VAR

外当前:INT;

外次数:INT;

内当前:INT;

内次数:INT;

指针1:DWORD;

指针2:DWORD;

save:INT;

END_VAR

BEGIN

Network 1 

LD     SM0.0

MOVW   16#0800, LW12

MOVW   LW2, LW6

DECW   LW6

MOVW   LW2, LW10

MOVW   0, LW4

MOVW   0, LW8

Network 2 

LD SM0.0

FOR    LW4, 1, LW6

Network 3 

LD SM0.0

DECW   LW10

Network 4 // 确定比较区域的首个地址的偏移

LD SM0.0

MOVW   LW0, LW14

Network 5 

LD SM0.0

FOR    LW8, 1, LW10

Network 6 // 确定另一个相邻的比较数据

LD SM0.0

MOVD   +2, LD16

+D     LD12, LD16

Network 7 // 第一个大于第二个就换位 内循环 第一轮执行 第一个与第二个比较 第二轮执行 第二个与第三个比较 。。。。。。

LDW>   *LD12, *LD16

MOVW   *LD12, LW20

MOVW   *LD16, *LD12

MOVW   LW20, *LD16

Network 8 // 指向下一个数据

LD     SM0.0

INCD   LD12

INCD   LD12

Network 9 // 内循环返回 

NEXT

Network 10 // 第一次执行到这里内循环已经执行了LW2次。 最大值已经出现在最下面。

NEXT 

END_SUBROUTINE_BLOCK

这个是在原位进行排序。会破坏原有数据。使用前要块移动到其他地方再排。

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33312条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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