入门程序的疑惑

我想请教一下下面那个入门程序,因为实在是不能理解,希望大哥们指教一下小弟,这个问题困惑我一周了,烦恼啊!
 主程序:
 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的新手,在入门的阶段,希望有人可以讲得容易理解一点,我将全部分拿出来了。

最佳答案

第一个问题:SMD72是系统专用寄存器,其作用是PTO 0的脉冲计数值,也就是PLC第一个脉冲输出点的脉冲输出计数,应该是只读的,能直接写入数据?
  第二个问题:我不知道你从哪里看到的3s? 
  ATCH   INT_1:INT1, 12   这条指令的意思应该是,当中断事件12发生时,执行中断程序1.而中断事件12是HSC0 CV=PV,也就是说当高速计数器0的当前值等于设定值,执行中断程序1.何来3S? 
  第三个问题:如上,我没看见何处有2S?
  第四个问题:ATCH   INT_0:INT0, 12意思就是 HSC0 CV=PV才能执行INT_0,这就是条件啊,
  最后一个问题:《第二个设定值是1500,然后改为减计数器,设定值为1000,那么从1500到1000的转变,是从1500减到1000吗》是的。
  建议先看看书,想看懂一段程序,至少你要知道这段程序中所用到的指令是什么意思。如果没有书,至少应该看懂系统手册。网上可以下载的。
 

提问者对于答案的评价:
谢谢大家的热情解答

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc356076.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日
下一篇 2021年7月5日

相关推荐

  • 用模拟量可以控制步进电机和伺服电机吗

    用模拟量可以控制步进电机和伺服电机吗? 如果可以的话,这和用脉冲控制的区别是什么? 最佳答案 模拟量控制步进还没见过。 控制伺服倒是很常见。伺服一般可以做定位、…

    SIMATIC S7-200 2021年7月5日
  • 200PLC子程序问题

    想在200PLC里面写一个通用的子程序,发现在子程序内部定义局部变量的时候,in和out以及in_out类型的数据个数加起来不能超过16个,想请教一下是不是确实有这样的限制。 专家…

    SIMATIC S7-200 2020年11月1日
  • 刷新方式

    1ms,10ms,100ms是不是每隔1ms,10ms,100ms就刷新一次呢? 在刷新的时候,是不是不管动断、动合接点在什么位置都会随定时器的状态而发生改变? 问题补充…

    SIMATIC S7-200 2021年7月5日
  • 组态王和s7-200PLC通信程序,modbus485通信

    我想用modbus485通信。连接PLC和组态王,但不知道程序怎么写,各位大侠请指导一下,我附上一张图片,看这样写对不对,是不是就是按这样的程序写, 图片说明:  &nb…

    2017年6月12日
  • 200和昆仑通泰通讯屏不上?

    S7-200  cpu224和昆仑通泰TPC7062kx触摸屏通讯不上?怎么解决啊 钻石用户推荐最佳答案 1.检测通讯线缆;2.检测CPU224通讯设置;3.检…

    SIMATIC S7-200 2021年7月5日
  • 2台S7-226与触摸屏通讯

    2台S7-226与触摸屏通讯,要求2个PLC能互享数据,触摸屏也能访问两个PLC。三者之间距离不超过20米。请给出方案,本人通讯方面知识很少,请多给些提示。谢了! 最佳答案 一个2…

    SIMATIC S7-200 2021年7月5日
  • 请教对编码器脉冲比较熟的

    我的S7-200 挂了两个电机带编码器的  现在两个编码器怎么比较计数差值达到一个脉冲值的时候产生的状态位 问题补充:现在电机速度是每秒 转…

    SIMATIC S7-200 2020年10月31日
  • s7-200可以恢复原厂设置吗?

    现场的cpu是以前用原装编程电缆调试过的,现在手头上只有国产的编程电缆,怎么连都连不上,怀疑是以前调试的时候将波特率设到187.5k了,国产电缆达不到。 不知道s7-20…

    SIMATIC S7-200 2021年7月5日
  • PTO向导步0的结束位置脉冲

    PTO向导中包络表设置项,步0的结束位置脉冲怎么确定,怎么得出来的脉冲数值呀?请教各位大神。图片里结束位置脉冲是自己随便填的,目标速度填的是步进电机最大速度1000转折算出来的 最…

    SIMATIC S7-200 2021年7月5日
  • s7-200 224通讯错误

    现在win7 64位和224通讯不了,如图。PG设置里面也不正常,站参数地址改不成0。地址也刷新不出来。PPI线是好的别人电脑可以下载驱动也是安装好了。 图片说明: &n…

    2021年7月5日

发表回复

登录后才能评论