技术论坛

 蹭热度:循环程序的本质

返回主题列表
作者 主题
yanxiao
版主

经验值:22911
发帖数:11588
精华帖:37
楼主    2022-06-28 14:43:00
主题:蹭热度:循环程序的本质 精华帖  精编帖 

循环程序的本质:就是用同一段代码,处理不同的数据。

不过,这是废话。


计算机中的数据,都是放在存贮器中,以地址方式访问,因此,程序指令访问数据的方式,可称之为数据的寻址方式。

1、如果数据直接出现在指令中,称之立即寻址方式

一般,常数可以直接放入指令中,直观又快速。

比如:

MOVW 0,AC0 // 0就是常数,直接出现在指令中

2、如果指令中出现的是一个具体的数据地址,可称之为直接寻址方式

这可能是使用最多的一种寻址方式

比如:

MOVW VW0,AC0 // VW0是数据地址,把VW0中的数据装入AC0中

3、上面两种寻址方式,在循环中处理不同的数据,似乎是达不到的,因为数据寻址与代码绑得太紧了。

所以,第三种的寻址方式,称之为间接寻址

比如:

MOVD &VW0,AC1 // 间址寻址的准备,把VW0的地址装入AC1

MOVW *AC1,AC0 // 间址寻址,AC1中存贮数据的地址,由此地址指向的数据装入AC0

这样,一条MOVW *AC1,AC0就可以处理不同的数据,只要变更AC1中的数据地址即可。


以上这些也是废话,在PLC内混谁还不懂呢?


在Smart中,大部分的数据支持间接寻址

唯独位变量不能间接寻址,比如Ix.x、Mx.x、Qx.x等等。

关于位变量通过编程方式实现间接寻址,另贴讨论。


抛个砖,期待高人的见解。


Zane
至圣

经验值:65276
发帖数:17857
精华帖:349
1楼    2022-06-28 16:31:40
精编帖  主题:回复:蹭热度:循环程序的本质

应该讲一下主循环OB1与用户程序循环体(FOR/NEXT循环,GOTO跳转循环)的区别


另外,定时中断是否也可以算是循环?

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

经验值:65276
发帖数:17857
精华帖:349
2楼    2022-06-28 16:33:56
精编帖  主题:回复:蹭热度:循环程序的本质

OB1可以算是同一段代码处理同一段数据

Zane 注册自动化系统工程师 Always save before download
yanxiao
版主

经验值:22911
发帖数:11588
精华帖:37
3楼    2022-06-28 16:52:37
精编帖  主题:回复:蹭热度:循环程序的本质

我一般不将“大循环”视为“循环”。

我开一天电脑,所有的事情都在重复不断地进行,就象输入打字,调用的可能是同一段输入代码,这样的重复,不视为我指的循环。

福禄寿的手
游侠

经验值:466
发帖数:116
精华帖:0
4楼    2022-06-28 17:37:02
精编帖  主题:回复:蹭热度:循环程序的本质

定时中断是否也可以算是循环?

yanxiao
版主

经验值:22911
发帖数:11588
精华帖:37
5楼    2022-06-28 23:07:31
精编帖  主题:回复:蹭热度:循环程序的本质

循环,如果光是抠字面意思,无事不循环,这就不用举例了。


显然,我这里所指的循环,指的是特定的循环,有必要增加一些附加约束:

循环体内,必然会处理一些数据,我这里的循环,是指进入循环体前,所有等待处理的数据都是现成的。

这个怎么说呢?

比如,排序,做个循环,需要参与排序的数据,已经存在,现成。

比如对一列温度采样数据做排序,做掐头去尾的滤波,所有采样值必须已经采完,这里做一个循环体,数据是现成的。

而如果做滑动平均滤波,采一个温度值,计算一次,虽然不断地采样,不断地计算,看上去循环重复,但这种重复,不是这里所指的循环。


从这个意义上讲,OB1、中断等,依赖将来产生的数据做处理的重复过程,原则上不算这里的狭义循环。

Zane
至圣

经验值:65276
发帖数:17857
精华帖:349
6楼    2022-06-29 09:40:57
精编帖  主题:回复:蹭热度:循环程序的本质

可不可以这么理解

OB1与定时中断属于系统循环

而FOR/NEXT 属于用户程序循环,用户程序循环是在一个扫描周期内或一个定时中断事件内同步执行的

Zane 注册自动化系统工程师 Always save before download
yanxiao
版主

经验值:22911
发帖数:11588
精华帖:37
7楼    2022-06-29 11:09:38
精编帖  主题:回复:蹭热度:循环程序的本质

针对1楼的回复:


For/Next和GOTO组成的循环,本质相同,是循环次数有限的循环。

OB1、中断构成的循环,理论上次数不限,何时终止未知,属无限循环。

芳季
至圣

经验值:54590
发帖数:12899
精华帖:90
8楼    2022-06-29 11:13:14
精编帖  主题:回复:蹭热度:循环程序的本质

我绝对同意第二行。

我说定时中断等同于第二条线程。

芳季
至圣

经验值:54590
发帖数:12899
精华帖:90
9楼    2022-06-29 11:18:38
精华帖  精编帖  主题:回复:蹭热度:循环程序的本质

看题目,不看内文,我觉得这个循环就是为了节省空间。把有限循环次数摊开秤流水顺序,需要n倍的程序空间。运行作用一样。经过循环,明显节省了非常多的程序空间。处理器只是多处理了循环头和尾的一些小事情。

Zane
至圣

经验值:65276
发帖数:17857
精华帖:349
10楼    2022-06-29 11:19:54
精编帖  主题:回复:蹭热度:循环程序的本质

我说定时中断等同于第二条线程。

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

这个不能同意,毕竟与OB1是有差别的,扫描周期不可变,超时机制也不同于OB1


S7-400就有背景扫描的OB块,这个作为第二线程差不多

Zane 注册自动化系统工程师 Always save before download
post_jingbian_commit.aspx
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。