技术论坛

 S7 系列数组元素依次向前或向后移动的便捷方法

返回主题列表
作者 主题
sangshunyang
侠圣

经验值:4092
发帖数:565
精华帖:4
楼主    2019-09-28 10:14:23
主题:S7 系列数组元素依次向前或向后移动的便捷方法 精编帖 

  假设在S7-1200中定义一个长度1000的INT型数组A 现在要把数组中各个元素的值向后移动,A[999]->A[1000], . . . . .A[0]-.>A[1]。循环是一种方法,可是循环这种方法效率低,要运算999次,大家探讨一下其它快速方法,像用间接寻址的方法,做个测试看效率能提高多少。


效率测试方法:是在指令开始执行前计时,指令执行后计时,计算指令用时,指令运行时间短可以放在循环程序中例如循环100万次。

看雪001
至圣

经验值:19338
发帖数:2076
精华帖:72
5楼    2019-09-29 09:04:40
精华帖  精编帖  主题:回复:S7 系列数组元素依次向前或向后移动的便捷方法

Move_BLK(块移动),A[0]->A[1] of 7;原本担心同一个数组区间重叠,仿真了一下没问题:

A[0..7] 原始数据如上图,执行一次块移动后

 块移动程序

 

结果

 

再执行一次块移动

 B数组完全是不需要的。

这个功能可以作为数据记录,非常方便,可以替代FIFO;

块移动内部肯定不是循环。对数组每一个元素进行循环操作时,临时空间只有一个元素长度,零敲碎打,好比打游击战;如果解放战争还用游击战的策略,国庆节不知道要延期多少年?块移动是以N个元素整体移动,好比大兵团作战,以空间换取时间,效率高。

最近在***里听人说起梯形图是低级语言,TIA里的梯形图早都不是s7-300里面的梯形图了!大陆解放70年了(台湾还没解放,不能说全国),我们的思想还没解放。

 

大道至简,知易行难
sangshunyang
侠圣

经验值:4092
发帖数:565
精华帖:4
6楼    2019-09-29 18:00:54
精编帖  主题:回复:S7 系列数组元素依次向前或向后移动的便捷方法

两种方法的比较:

同样的功能,移动10000个数据,执行效率是不同的, S7-1200定时器的分辨率毫秒无法测出一次块移动指令传10000个数据的耗时,测试程序和结果详见图片:

OB1中放置一个计时器。OB30  调用周期10000MS



Zane
版主

经验值:76112
发帖数:19121
精华帖:378
8楼    2019-09-30 10:48:26
精编帖  主题:回复:S7 系列数组元素依次向前或向后移动的便捷方法

点评一下:


一,使用UMOVE_BLK更好,想想为啥?

二,测指令执行时间有用定时器的吗?对定时器的刷新机制也是理解不够呀!应该用指令前后的时间标签的差值,1200也是64位的处理器,得不到这个差值吗?


编程的优劣,对软硬件系统的熟悉是基础,否则就是空谈。


Zane 注册自动化系统工程师 Always save before download
看雪001
至圣

经验值:19338
发帖数:2076
精华帖:72
9楼    2019-09-30 11:55:55
精编帖  主题:回复:S7 系列数组元素依次向前或向后移动的便捷方法

 http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1478141&b_id=66&s_id=84&num=38&myreply=1#anch

论坛里类似的问题讨论蛮多的,一年前的旧帖被我找到了,还有更早的帖子,看看自己的发言挺不好意思的,那时候我对1200、1500接触得少,谈不上对硬件啊固件啊软件啊有什么了解,发言就是凑个热闹,夏虫语冰,鸡同鸭讲。

大道至简,知易行难
shine
至圣

经验值:19840
发帖数:8834
精华帖:39
10楼    2019-09-30 12:21:34
精编帖  主题:回复:S7 系列数组元素依次向前或向后移动的便捷方法

运动是相对的,除了让数据移动,也可以让位置标志移动而数据不动。

拿你的例子,A[0..990],需要数据平移一位,你可以将新的表头定义到A][1],A[0]作为表尾,新数据填入到A[0],这样就不需要移动数据了。

sangshunyang
侠圣

经验值:4092
发帖数:565
精华帖:4
11楼    2019-09-30 14:58:29
精华帖  精编帖  主题:回复:S7 系列数组元素依次向前或向后移动的便捷方法

多谢提醒 

S7-1200读到的系统时间到纳秒级别




=^_^=
侠圣

经验值:4323
发帖数:127
精华帖:6
12楼    2019-09-30 23:07:31
精编帖  主题:回复:S7 系列数组元素依次向前或向后移动的便捷方法

 效率是不是高,不止要看数据移动时的效率,还要看这些数据后期被如何使用时的效率。否则对这种大量数据的FIFO,当然是用指针最快了:只动指针,数据不用动;不过用的时候很可能就比较慢了。

不提无意义的问题; 不做无意义的回答。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。