技术论坛

【S7-200 Smart开源标准化编程】天花板级冒泡排序子程序封装

作者 主题
奇侠

经验值: 8144
发帖数: 843
精华帖: 14
主题:【S7-200 Smart开源标准化编程】天花板级冒泡排序子程序封装
精华帖精华帖星级2级 推荐帖


只看楼主 只看精华 楼主 2023-01-07 23:58:18

有坛友问有关排序的问题,我也正好在完善【S7-200 Smart开源标准化编程】里的排序子程序,现在测试完成了,我把这个子程序单独出来给大家使用。

首先排序子程序使用三个区域:

1、源数据区

2、排序后的目的数据区

3、源数据地址的指针排序区

子程序功能:

1、单周期内排序和多周期内排序的选择:单周期内排序适合少量的数据排序,多周期内排序适合大量的数据排序。多周期排序属于异步操作,所以在完成信号为真之前,启动排序的信号不能为0。

2、排序功能在源数据区内实现,或者是源数据区内的数据不变在目的数据区进行排序的选择。此功能可用于多周期内排序,这样源数据区数值的变化不会影响排序结果。

3、源数据地址的指针排序功能的选择。此功能可用于间接寻址。

4、排序功能升序和降序的选择。

5、子程序内的看门狗复位功能选择。

6、对待排序数据的数据类型的选择,可以选择字节,整数,双整数,浮点数。

7、数据数量可选择范围2-32767(这个最大范围值都大于200的V区了,子程序中多处使用了看门狗复位,但还是不能保证在实际应用中不出现看门狗超时)

8、最最重要的一条,这个子程序可以重复调用。

程序是在2.6软件版本下创建的。

下面的文件是子程序的导出文件,下载后解压,导入,祝玩愉快。有使用问题回复就行。

------------------------------------

73楼说的对,程序里确实循环次数多,所以进行了改进,并进行了测试。

smart200标准化2.6实践20230421.smart.zip

排序测试.smart.zip



13478405725
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1804561&b_id=64&s_id=0&num=77

至圣

经验值: 19841
发帖数: 4383
精华帖: 2
回复:Smart 200 天花板级冒泡排序子程序
推荐帖


只看楼主 只看精华 1楼 2023-01-08 00:23:39

谢谢分享了


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67550
发帖数: 14784
精华帖: 100
回复:Smart 200 天花板级冒泡排序子程序
推荐帖


只看楼主 只看精华 2楼 2023-01-08 00:47:14

说两句看看怎么安排喂狗的?


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 8144
发帖数: 843
精华帖: 14
回复:Smart 200 天花板级冒泡排序子程序
推荐帖


只看楼主 只看精华 楼主 3楼 2023-01-08 08:25:42
以下是引用芳季在2023-01-08 00:47:14的发言 >2楼

说两句看看怎么安排喂狗的?

芳工有时间给测试测试,看看程序有没有什么问题。说说使用感受。


13478405725
以下网友喜欢您的帖子:

  
游侠

经验值: 510
发帖数: 87
精华帖: 0
回复:Smart 200 天花板级冒泡排序子程序
推荐帖


只看楼主 只看精华 4楼 2023-01-08 10:10:34
谢谢分享,楼主太厉害了
 
以下网友喜欢您的帖子:

  
侠士

经验值: 1559
发帖数: 122
精华帖: 0
回复:Smart 200 天花板级冒泡排序子程序
推荐帖


只看楼主 只看精华 5楼 2023-01-08 10:37:27

谢谢分享,楼主太厉害了


林肯公园
以下网友喜欢您的帖子:

  
侠士

经验值: 1307
发帖数: 91
精华帖: 0
回复:Smart 200 天花板级冒泡排序子程序
推荐帖


只看楼主 只看精华 6楼 2023-01-08 14:50:00

冒泡泡算法的应用场合?能举例吗?


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 8877
发帖数: 2002
精华帖: 12
回复:Smart 200 天花板级冒泡排序子程序
推荐帖


只看楼主 只看精华 7楼 2023-01-08 19:08:44
以下是引用haijun168在2023-01-08 14:50:00的发言 >6楼

冒泡泡算法的应用场合?能举例吗?

任何你想对数据排序的场合


污水处理自控工程师,简称污师。
以下网友喜欢您的帖子:

  
侠客

经验值: 979
发帖数: 82
精华帖: 1
回复:Smart 200 天花板级冒泡排序子程序
推荐帖


只看楼主 只看精华 8楼 2023-01-08 19:26:15

不错,支持一下。编译后占多少字节


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67550
发帖数: 14784
精华帖: 100
回复:Smart 200 天花板级冒泡排序子程序封装
推荐帖


只看楼主 只看精华 9楼 2023-01-08 23:23:31
以下是引用will666在2023-01-08 19:08:44的发言 >7楼

任何你想对数据排序的场合

以下是引用haijun168在2023-01-08 14:50:00的发言 >6楼:冒泡泡算法的应用场...

引用6楼详细内容:

冒泡泡算法的应用场合?能举例吗?

所以就是什么情况要全体排序嘛。


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2841
发帖数: 451
精华帖: 2
回复:Smart 200 天花板级冒泡排序子程序封装
推荐帖


只看楼主 只看精华 10楼 2023-01-09 08:29:40

测试看看。现在很多排序也需要有设备标签,这块排序上能不能也添加上。


利而不害,为而不争;专注暖通空调行业
以下网友喜欢您的帖子:

  
至圣

经验值: 67550
发帖数: 14784
精华帖: 100
回复:Smart 200 天花板级冒泡排序子程序封装
推荐帖


只看楼主 只看精华 11楼 2023-01-09 08:56:48

没理解三个指针参数是什么意思。

准备排序的数据指针

排序完的数据指针

排序数据的指针

=====================

我试了一下,

头4个开关量全off。

3:双字

数据数100。

准备排序的数据&vb0。

排序完的数据&vb500 。

排序数据的指针&vb1000。

静态区&vb1500。

vd0等100个数用状态表写入倒序99到0。

接通开始。VD0等全0了。

=====================

更改为向外部输出数据。

成功了。

执行时间670毫秒

=====================

改成降序。

结果仍然升序。

……

可能我的问题。后面试过其他之后回来试又没事了。


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 8144
发帖数: 843
精华帖: 14
回复:Smart 200 天花板级冒泡排序子程序封装
推荐帖


只看楼主 只看精华 楼主 12楼 2023-01-09 09:50:11
以下是引用芳季在2023-01-09 08:56:48的发言 >11楼

没理解三个指针参数是什么意思。

准备排序的数据指针

排序完的数据指针

排序数据的指针

=====================

我试了一下,

头4个开关量全off。

3:双字

数据数100。

准备排序的数据&vb0。

排序完的数据&vb500 。

排序数据的指针&vb1000。

静态区&vb1500。

vd0等100个数用状态表写入倒序99到0。

接通开始。VD0等全0了。

=====================

更改为向外部输出数据。

成功了。

执行时间670毫秒

=====================

改成降序。

结果仍然升序。

……

我进行了测试,没有出现你所述的情况。

给程序截图发上来我看看,我在我的PLC上复现一下


13478405725
以下网友喜欢您的帖子:

  
至圣

经验值: 67550
发帖数: 14784
精华帖: 100
回复:Smart 200 天花板级冒泡排序子程序封装
推荐帖


只看楼主 只看精华 13楼 2023-01-09 09:57:30

排序数据的指针

是不是结果不是用数值表示,而是用指针表示?如果开关关闭,那么这个指针的参数就会忽略?指向任何区域都不会变更该指向的数据?

开始;多周期;完成之间有什么逻辑关系?

选择多周期,开始信号是不是要坚持到完成为止?


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 8144
发帖数: 843
精华帖: 14
回复:Smart 200 天花板级冒泡排序子程序封装
推荐帖


只看楼主 只看精华 楼主 14楼 2023-01-09 09:59:19
以下是引用芳季在2023-01-09 09:57:30的发言 >13楼

排序数据的指针

是不是结果不是用数值表示,而是用指针表示?如果开关关闭,那么这个指针的参数就会忽略?指向任何区域都不会变更该指向的数据?

是的,这样做的好处是便于未来进行间接寻址的应用


13478405725
以下网友喜欢您的帖子:

  
奇侠

经验值: 8144
发帖数: 843
精华帖: 14
回复:Smart 200 天花板级冒泡排序子程序封装
推荐帖


只看楼主 只看精华 楼主 15楼 2023-01-09 10:17:14
以下是引用芳季在2023-01-09 09:57:30的发言 >13楼

排序数据的指针

是不是结果不是用数值表示,而是用指针表示?如果开关关闭,那么这个指针的参数就会忽略?指向任何区域都不会变更该指向的数据?

对《待排序数据的指针》进行排序我觉得需要做一点更改,就是对指针进行排序时,必须以使用排序后的目的区域为前提


13478405725
以下网友喜欢您的帖子:

  
至圣

经验值: 67550
发帖数: 14784
精华帖: 100
回复:Smart 200 天花板级冒泡排序子程序封装
推荐帖


只看楼主 只看精华 16楼 2023-01-09 10:30:48

你是总会复位看门狗的。会不会对真的发生这样的错误,误复位了?人家的程序也有这样的问题的啊。

我说不清楚,出现人家的程序希望看门狗能够预防一些事情,而你的程序又复位了,会不会有问题。好歹看门狗是属于全局变量。

我想你可以声明一下运行时间,各种数据类型下,各种数据数下,大概出几个有代表性的数据形容一下扫描时间。

我现在正在理解贴中我提到的三者的关系,测试扫描时间。但是未能完成。你先回复我三者关系吧。


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2811
发帖数: 159
精华帖: 0
回复:Smart 200 天花板级冒泡排序子程序封装
推荐帖


只看楼主 只看精华 17楼 2023-01-09 10:59:18

不错,坚决支持一下。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67550
发帖数: 14784
精华帖: 100
回复:Smart 200 天花板级冒泡排序子程序封装
推荐帖


只看楼主 只看精华 18楼 2023-01-09 11:08:38

数据源的排序方向,与,期望的排序方向相反时,扫描时间为595。

方向相同是扫描时间为555

多出40毫秒。

我曾经做过一个这样最简的排序。

逆序比顺序多了33毫秒。

同样100个数据。同样双字整数。

这40和33,有没有什么意思?

同样有另一个比较。总的扫描时间我的最简程序倒序是81毫秒。楼主的是595毫秒。

这里看出更多的功能产生了更多的执行时间。

建议这样行不行。但是做肯定是不容易的了。

:不要把太多的判断放在循环中。宁可判断完了再去选择运行哪一个循环。特别特别是内循环。一点点的程序将会循环非常多次数,产生非常大的扫描时间。

做4套程序对应字节字双字浮点,也不要在内循环内干这些事情。

我仍然记住有一句话,如果10年前你做了现在就没有我什么事了。我是有一点顾及了plc的感受。没把大量间接寻址交给cn做。现在smart处理能力提升了,该做的事情可以做了。你记得那个贴是说什么吗?

我是比较注意扫描周期的。超过50毫秒,就能在设备的动作中看得见了。

着眼点不同,不要介意。


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 8144
发帖数: 843
精华帖: 14
回复:Smart 200 天花板级冒泡排序子程序封装
推荐帖


只看楼主 只看精华 楼主 19楼 2023-01-09 11:16:44
以下是引用芳季在2023-01-09 10:30:48的发言 >16楼

你是总会复位看门狗的。会不会对真的发生这样的错误,误复位了?人家的程序也有这样的问题的啊。

我说不清楚,出现人家的程序希望看门狗能够预防一些事情,而你的程序又复位了,会不会有问题。好歹看门狗是属于全局变量。

我想你可以声明一下运行时间,各种数据类型下,各种数据数下,大概出几个有代表性的数据形容一下扫描时间。

我现在正在理解贴中我提到的三者的关系,测试扫描时间。但是未能完成。你先回复我三者关系吧。

你说的对,我更新了程序。增加了看门狗复位开关,想使用看门狗复位功能就打开,不想使用就关闭。排序功能在应用时基本上不会每个周期都排序,只在排序期间复位看门狗应该问题不大。


13478405725
以下网友喜欢您的帖子:

  
收起
【S7-200 Smart开源标准化编程】天花板级冒泡排序子程序封装
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。