西门子200PLC高速计数问题请教大家。

1.我用HSC0的10模式,来计数AB相脉冲,我用状态表监控HSC0的数值不断变化,可是SMD38当前计数值怎么没变化?

2.当前的计数值在哪个寄存器里?怎么取出来?

3.设定值是6000,计数值到6000后产生中断,这个没问题,但是编码器转动时,HSC0还会计数。怎么写程序就可以实现计数到6000后,在中断里HSC0里面的当前值马上清零,旋转编码器旋转时,还不会计数。等再启动时才开始计数

最佳答案

给你个例子吧

// 主程序:
// 在主程序中,首先将输出Q0.0置,0,因为这是脉冲输出功能的需要。再初始化高速计
// 数器HSC0,然后调用子程序0和1。
// HSC0起动后具有下列特性:可更新CV和PV值,正向计数。
// 当脉冲输出数达到SMD72中规定的个数后,程序就终止。
// 主程序
 LD           SM0.1        // 首次扫描标志(SM0.1=1)。
 R             Q0.0,1     // 脉冲输出Q0.0复位(Q0.0=0)。
 MOVB    16#F8,SMB37        // 装载HSC0的控制位:
//      激活HSC0,可更新CV,可更新PV,
//      可改变方向,正向计数。
// HSC指令用这些控制位来组态HSC。
 MOVD   0,SMD38// HSC0当前值(CV)为0。
 MOVD   1000,SMD42          // HSC0的第一次设定值(PV)为1000。
 HDEF     0,0           // HSC0定为模式0。
 CALL      0                 // 调用子程序0。
 CALL      1                 // 调用子程序1。
 MEND                       // 主程序结束。
// 子程序0:
// 子程序0初始化,并激活脉冲输出(PLS)。
// 在特殊存储字节SMB67中定义脉冲输出特性:脉冲串(PT0),时基,可更新数值,激活PLS。
// SMW68定义脉冲周期,其值为时基的倍数。
// 最后,在SMD72中指定需要产生的脉冲数。(SMD72)为内存双字,即4个字节)。
// 子程序0
 SBR       0               // 子程序0
 MOVB  16#8D,SMB67     // 装载脉冲输出(PLS0)的控制位:PT0,时基1ms,可更新,激活。
 MOVW 1,SMW68             // 脉冲周期1ms。
 MOVD  30000,SMD72      // 产生30000个脉冲。
 PLS        0               // 起动脉冲输出(PLS 0),从输出端Q0.0输出脉冲。
 RET                        // 子程序0结束。
// 子程序1:
// 子程序1起动HSC0,并把中断程序0分配给中断事件12(HSC 0的当前值CV等于设定值PV)。
// 只要脉冲计数值(当前值CV)达到设定值(PV),该事件就会发生。
// 最后,允许中断。
// 子程序1
 SBR       0               // 子程序1。
 ATCH   0,12       // 把中断程序0分配给中断事件12(HSC 0的CV=PV)。
 ENI                         // 允许中断。
 HSC       0               // 按主程序中对HSC 0的初始组态特性,起动HSC0。
 RET                        // 子程序1结束。
//  * * * * * * * * * * * * * * * * * * * *
// 中断程序0:
// 当HSC 0的计数脉冲达到第一,设定值1000时,调用中断程序0。
// 输出端Q0.1置位(Q0.1=1)。
// 为HSC 0设置新的设定值1500(第二设定值)
// 用中断程序1取代中断程序0,分配给中断事件12(HSC 0的CV=PV)。
// 中断程序0
 INT       0               // 中断程序0。
 S            Q0. 1,1  // 输出端Q0.1置位(Q0.1=1)。
 MOVB  16#A0,SMB37     // 重置HSC 0的控制位,仅更新设定值(PV)。
 MOVD  1500,SMD42        // HSC 0的下一个设定值为1500(第二设定值)。
 ATCH   1,12       // 用中断程序1取代中断程序0,分配给中断事件12。
 HSC       0               // 起动HSC 0,,为其装载新的设定值。
 RETI                      // 中断程序0结束。
// 中断程序1:
// 当HSC 0的计数脉冲达到第二设定值1500时,调用中断程序1。
// 输出端Q0.2置位(Q0.2=1)。
// HSC 0改成减计数,并置新的设定值1000(第三设定值)。
// 用中断程序2取代中断程序1,分配给中断事件12(HSC 0的CV=PV)。
// 中断程序1:
 INT       1               // 中断程序1。
 S            Q0. 2,1  // 输出端Q0.2置位(Q0.2=1)。
 MOVB  16#B0,SMB37     // 重置HSC 0的控制位,更新设定值,并改成减计数(反向计数)。
 MOVD  1000,SMD42        // HSC 0的下一个设定值为1000(第三设定值)。
 ATCH   2,12       // 用中断程序2取代中断程序1,分配给中断事件12。
 HSC       0               // 起动HSC 0,,为其装载新的设定值和方向。
 RETI                      // 中断程序1结束。
//  * * * * * * * * * * * * * * * * * * * *
// 中断程序2:
// 当HSC 0的计数脉冲达到第三设定值1000时,调用中断程序2。
// 输出端Q0.1和Q0.2复位(Q0.1=0,Q0.2=0)。
// HSC 0的计数方向重新改为正向(增计数),并将当前计数值置为0,而设定值PV保持不变(1000)。
// 重新把中断程序0分配给中断事件12,程序再次起动HSC 0运行。
// 当脉冲数达到SMD72中规定的个数后,程序就终止。
// 中断程序2:
 INT       2               // 中断程序2。
 R            Q0. 1,2  // 输出端Q0.1和Q0.2复位(Q0.1=0,Q0.2=0)。
 MOVB  16#D8,SMB37     // 重置HSC 0的控制位,更新CV,改为正向计数(增计数)。
 MOVD  0,SMD38              // HSC 0的当前值复位(CV=0)。
 ATCH   0,12       // 把中断程序0分配给中断事件12。
 HSC       0               // 重新起动HSC 0。
 RETI                      // 中断程序2结束。

 既然利用脉冲输出,必须选用CPU 224DC/DC/DC 

提问者对于答案的评价:
谢谢

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月1日 下午2:25
下一篇 2020年11月1日 下午2:25

相关推荐

  • 帮咱推荐一款触摸屏

    与S7200配,PPI通讯,最好10寸屏,品牌要求是西门子,满足以上条件的话价格尽量低。 最佳答案 smart line 或者smart line&n…

    SIMATIC S7-200 2020年10月31日
  • 文本手册在哪里

    文本显示器的编辑和教程,请教各位大师指点指点 最佳答案 可以参考Micro ”n Power 西门子 S7-200 ·&nbsp…

    SIMATIC S7-200 2017年6月24日
  • 自由口通信问题1

    初学者,问题比较幼稚,在此请教 看了系统手册上的例子,不是很明白 1.MOVB 10,SMB34 它的作用是什么 2.已温控表为例…

    SIMATIC S7-200 2021年7月5日
  • S7-200 扩展模块EM223

    S7-200 扩展模块EM223 32入 32出的订货号是多少 最佳答案 32个输入/32个输出   6ES7&nbsp…

    SIMATIC S7-200 2020年11月1日
  • 光电编码器与S7200的连接

    各位师傅:我找了个长春禹衡光学有限公司的光电编码器(A-ZKT-56B-12B-G8-26E-10m-j),编码器有A-B-Z三组信号线,5V供电。请问我用编码器与CPU226(2…

    SIMATIC S7-200 2017年8月26日
  • 麻烦大神给看看,FB里的JCN怎么没有跳转?

    如附件监控程序,仿真的时候JCN正常跳转了,但是实际下载到PLC里就没有跳转,换了一个PLC还是一样的结果。。RLO=0,满足跳转条件了,怎么就不跳呢?  &n…

    2021年7月5日
  • smart-200 modbus通讯

    modbus地址是3031,2425,2627,2829,3233,3435,PLC起始地址为VB200,对应输出地址是多少?总共带有5个仪表从站 问题补充:modbus相对VB的…

    SIMATIC S7-200 2017年6月18日
  • s7 200控制伺服精确定位

    S7 200位置控制安川伺服电机,系统运行要求加减速平滑过渡,但设置了加减速时间,位置总是控制不准。脉冲总是过冲。请问各位有何方法可以解决一下? 问题补充:PLC&nbs…

    SIMATIC S7-200 2020年10月31日
  • 6GK7 243-1EX00-OXE0和6GK7 243-1GX00-OXE0有什么区别

    请问大家,S7-200以太网模块EM243-1的两个型号6GK7 243-1EX00-OXE0和6GK7 243-1GX00-OXE0有什么区别??? 最佳答案…

    SIMATIC S7-200 2017年5月28日
  • 电机装上编码器如何知道转速

    请问我把一个编码器直接安装在电机的轴上,程序应该如何写才能知道这个电机的实际转速啊,还要让电机的实际转速显示在触摸屏上,以便观看。最好举个例子,把程序说详细一点。如果实在不好说的话…

    SIMATIC S7-200 2020年11月5日