我想请教一下下面那个入门程序,因为实在是不能理解,希望大哥们指教一下小弟,这个问题困惑我一周了,烦恼啊!
主程序:
LD First_Scan_On:SM0.1 // 首次扫描标志(SM0.1=1)
R Q0.0, 1 //脉冲串输出Q0.0复位(Q0.0=0).
MOVB 16#F8, HSC0_Ctrl:SMB37 // 装载HSC0的控制位
MOVD +0, HSC0_CV:SMD38 // HSC0当前值(CV)为0。
MOVD +1000, HSC0_PV:SMD42 // HSCO的第一次设定值(PV)为1000
HDEF 0, 0 // HSC0定义模式0
CALL SBR_0:SBR0 // 调用子程序0。
CALL SBR_1:SBR1 // 调用子程序1。
SBR_0:
LD Always_On:SM0.0
MOVB 16#8D, PLS0_Ctrl:SMB67 // 装载脉冲输出(PLS0)的控制位:PT0,时基
// 1ms,可更新,激活
MOVW +1, PLS0_Cycle:SMW68 // 脉冲周期1ms。
MOVD +30000, PTO0_PC:SMD72 // 产生30000个脉冲。
PLS 0 // 起动脉冲输出(PLS0),从输出端Q0.0输出脉冲
SBR_1:
LD Always_On:SM0.0
ATCH INT_0:INT0, 12 //把中断程序0分配给中断事件12(HSC0的当前值CV等于设定值PV)
ENI //允许中断
HSC 0 // 按主程序中对HSC0的初始组态特性,起动HSC0。Start HSC0.
INT_0:
LD Always_On:SM0.0 // Load SM0.0.
S Q0.1, 1 // 输出端Q0.1置位(Q0.1=1)
MOVB 16#A0, HSC0_Ctrl:SMB37 // 重置HSC0的控制位,仅更新设定值(PV)
MOVD +1500, HSC0_PV:SMD42 // 为HSC0设置新的设定值1500(第二设定值)
ATCH INT_1:INT1, 12 // 用中断程序1取代中断程序0,分配给中断事件12 Attach interrupt event 12 to
HSC 0 // 起动HSC0,为其装载新的设定值
INT_1:
LD Always_On:SM0.0
S Q0.2, 1 //输出端Q0.2置位(Q0.2=1)
MOVB 16#B0, HSC0_Ctrl:SMB37 // 重置HSC0的控制位,更新设定值,并改成减计
//数(反向计数)
MOVD +1000, HSC0_PV:SMD42 // HSC0的下一个设定值为1000(第三设定值)
ATCH INT_2:INT2, 12 // 用中断程序2取代中断程序1,分配给中断事件12
HSC 0 // 起动HSC0,为其装载新的设定值和方向。
INT_2:
LD Always_On:SM0.0
R Q0.1, 2 // 输出端Q0.1和Q0.2复位(Q0.1=0,Q0.2=0)
MOVB 16#D8, HSC0_Ctrl:SMB37 // 重置HSC0的控制位,更新CV,并改成正向计
// 数(增计数)
MOVD +0, HSC0_CV:SMD38 // HSC0的当前值复位(CV=0)
ATCH INT_0:INT0, 12 // 把中断程序0分配给中断事件12
HSC 0 // 重新起动HSC 0.
对于上面的程序,我有几个问题:
问题1:在SBR_0中,MOVD 30000,SMD72
产生30000个脉冲(共60S),这个60秒的时间是怎么知道的呢(我的一个同事说是60秒)?
问题2:在INT_0中,到1500(经过3S)调用INT_1,这个3秒的时间又是怎样得知的呢?
问题3:在中断1中,计数改为减计数,减到1000时(经过2S)调用中断2,这个时间2秒又是怎样得知的呢?
问题4:在中断2里面,它调用中断0,用的是事件12(目前值和设定值相等,调用),中断2里面的设定值不变,还是1000,我的见解是在中断2里面调用中断0的条件是当前值要达到1000才能调用中断0,可是注释说--HSC0改成加计数,并将当前计数值置为0,而设定值PV保持不变(1000)
重新把中断程序0分配给中断事件12,程序再次起动HSC0运行。
注释的意思是一个重新分配的问题,根本没所谓的要满足什么条件才调用中断0,所以我就苦闷了,应该怎样理解呢?
拿中断1来说,当HSC0的计数脉冲达到第三设定值1000时,调用中断程序2。这里就有个要满足当前值和设定值相等才能调用,怎么在中断2里面,不用满足条件,而是重新分配给中断0 了呢,晕啊。
最后一个问题:第二个设定值是1500,然后改为减计数器,设定值为1000,那么从1500到1000的转变,是从1500减到1000吗。
希望有谁可以帮我解决这个苦恼的问题。
问题补充:
第一到第三个问题提到的时间,我不知道是对还是错,是一个同事说是那些时间。
我是200的新手,在入门的阶段,希望有人可以讲得容易理解一点,我将全部分拿出来了。
产品版区:SIMATIC S7-200
悬赏分:20 | 解决时间:2008-08-26 08:38:14 | 提问者: 国大阿四分地 -
最佳答案
回答者:
边城&浪子
-
资深学长  第3级
2008-08-23 23:22:27
提问者对于答案的评价:
谢谢大家的热情解答
应该是脉冲周期乘上脉冲数得出的吧!
回答者: SG9 - 资深顾问  第13级
2008-08-18 12:26:47
恕我直言,入门阶段不应该直接对程序进行分析,应该先学习S7200相关的编程指令和功能,这样才能更好的领悟和使用S7200。
回答者: bsayy - 资深学长  第3级
2008-08-19 03:13:18
对于西门子给出的一些程序,有的地方实在是令人费解,有可能是从某个工程上摘出的一段吧,有时候按照程序做都不对,所以呢,还是自己慢慢的编,从小一点的程序入手,经验积累到一定程度了,就会明白了。
回答者: hanyun - 初级技术员  第5级
2008-08-21 14:21:52
同意2楼 这绝不是入门级的程序
回答者: xiaohaoc - 中级技术员  第6级
2008-08-21 15:29:48
这不是入门学的程序,如果能看懂哪就不应叫入门,先看看编程指令和功能。
回答者: 柴刀 - 毕业实践员  第4级
2008-08-22 11:09:14
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!