求一个0-10MS之间可调的定时器程序

主程序区:
 LD     SM0.1                 //首次扫描时调用一次
 CALL   SBR_1:SBR1
 //
 LD     SM0.0                 //一直调用
 CALL   SBR_0:SBR0
 //--------------------------------------------------
 子程序区:

 子程序0(一直调用,计时用):
 LD     M0.0
 AN     T32
 TON    T32, VW0   //此寄存器的值即为可调的定时时间(0-10MS),我是通过屏来实现的
 子程序1(首次扫描调用,初始化程序用):
 LD     SM0.0
 R      M0.0, 1
 ATCH   INT_0:INT0, 1               //在I0.0 的下降沿触发的中断事件
 ATCH   INT_1:INT1, 21              //定时器T32,CT = PT 中断时触发的中断事件
 ENI
 //----------------------------------------------------------
 中断程序区:

 中断0(在I0.0 的下降沿时触发):
 LD     SM0.0
 S      M0.0, 1                     //检测到I0.0的下降沿,置位M0.0到子程序0开始计时
 R      Q0.1, 1                     //并复位控制输出
 中断1(定时器T32,CT = PT 中断时触发的中断事件):
 LD     SM0.0
 S      Q0.1, 1                     //定时时间到,输出控制
 R      M0.0, 1                     //并复位定时器执行条件(M0.0),为后面再次计时做准备

 以上是小弟做的一个0-10MS可调定时器程序,是通过检测交流电的过零点(由I0.0输入),然后延时输出控制振机的振动强度用的(由Q0.1输出)

 。但在测试过程中感觉还是有点问题,就是输出控制不是很准确。再说这还只是一个小程序,扫描周期是很短的,而实际项目的程序是很长的

 ,扫描周期应该会在10MS以外,这样输出控制的准确性就更难保证了。希望各位给能点意见,或是修改我上面的程序,或是干脆重写一个都行

 ,哪怕是给点思路,也非常感激!!

 俺的联系方式:lyrun1120@163.com    QQ:262823396

问题补充:
1、谢谢shine的回答!我上面程序用的是输入中断+时间到中断,输出控制也是在中断里面完成的,一直调用的那个子程序只是计时用。但感觉那个计时还是无法避开程序的扫描周期。你说的定时中断要怎么个用法呢?
  我刚刚看到西门子系统手册上面有一句话:“对于1ms分辨率的定时器来说,定时器位和当前值的更新不与扫描周期同步。对于大于1ms的程序扫描周期,定时器位和当前值在一次扫描内刷新多次。”我对这句话的理解是:1ms定时器的刷新是按毫秒级来进行的,跟程序的扫描周期(大于1m)无关,那使1ms定时器得以计时的条件又是怎么刷新的,如本例中的M0.0 ?

 2、非常感谢 yanxiao 的热心指点!小弟不才,不过我觉得你的这个思路应该是非常好的!我会认真地去验证这种做法的。现在的主要问题是,我PLC(226CN)的高速输出(Q0.0,Q0.1)已经被用来控制步进电机了,还有一个要补充的,就是我所要求的分辨率只要达到毫秒级就可以了,即1ms,2ms,3ms...10ms可调就行了,是用来触发可控硅输出的。
 

最佳答案

1、是不是触发可控硅之类用的?
 2、用1ms分辨率的定时器,最大误差就做不到1ms以下。
 3、可以利用PTO输出+高速计数器中断,来模拟定时功能。
 当I0.1测到过零信号,中断进入服务程序,开启Q0.0的PTO,内反馈到高速计数器,设定高速计数中断。当高速计数达到目标值时中断,控制Q0.1输出(使用立即指令)。
 如果PTO值允许输出100KHz(比如224XP),那么可以做到0.01ms的分辨率。至少20KHZ也可以达到0.05ms的分辨率。但是误差仍可达到数百us。因为中断是要等到当前的指令执行完后才响应的,而有的指令耗时比较长,达百us以上,可以查手册的附录参考。

提问者对于答案的评价:
非常谢谢yanxiao的精彩回答,还有shine。但分数只能给一个人,不好意思...

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

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

相关推荐

  • 是变频器的干扰吗?

    用一CPU224XP和一K-TP178micro触摸屏控制一台变频水泵,HMI上一个按钮控制启停,然后又水压控制变频水泵,达到恒压。现出现一现象,水泵运行一段时间就停止了,没有过载…

    SIMATIC S7-200 2020年11月1日
  • 用s7-200pid向导时,编程问题

    一直调用PID用自带的调节面板对过程监视1.想实现无扰动切换,需要如何编程2.调用向导生成的pid程序 需要对模拟量进行量化么,如图3 如何实现负反馈控制,是需…

    SIMATIC S7-200 2017年11月19日
  • 关于windows-7与s7-200

    s7-200编程软件在windowsXP上能正常运行,可是在windows-7上不能运行,这是我什么?上s7-200编程软件版本不够高吗?哪位大侠知道怎么做请告诉小弟。在下先谢谢了…

    SIMATIC S7-200 2020年11月1日
  • s7-200Q0.0 Q0.1 高速脉冲输出 电压等级?

    现有 224 DC/DC/DC  想控制司服电机  采用脉冲方向 方式   &n…

    SIMATIC S7-200 2021年7月4日
  • s7200 位指令P的用法

    micro win sp4 v6.0软件 位指令P动作后执行一个扫描周期,请问我在一个P指令后为20个REAL数赋值,赋值是否可靠?程序能否…

    SIMATIC S7-200 2021年7月4日
  • 如何读取S7-200CPU运行的总时间?

    S7-300CPU读取系统运行总时间可以直接调取系统块,但S7-200CPU好像没有找到相关的系统块?请问如果读取200PLC的总运行时间?单位为小时 最佳答案 LD &…

    SIMATIC S7-200 2020年10月31日
  • S7-200怎么连接3个触摸屏

    CPU224XP只有两个自由口,怎么连接3个触摸屏,求指点 问题补充:是不是PLC和触摸屏上是不是都要设置的?菜鸟求详细指教,最好是附上图片。 最佳答案 是不是PLC和触摸屏上是不…

    2020年10月31日
  • S7-200和EM235模拟量采集的问题

    还有我要采集一个变化比较灵敏的模拟量信号,在系统块的输入滤波器器的模拟量中采样数设为128,死区设置为0,这样可以吗?我试着设死区,但是只要有死区,信号波动就很大,我在程序中用了一…

    SIMATIC S7-200 2021年7月5日
  • S7200高数计数

    各位大侠你们好,我现有一个有关高数计数的问题请教一下,现在我有一把增量式的光栅尺,采用高数计数4,模式10,数据可以拿到,现在我想用外部复位按钮I0.5来复位,清除当前的数据,请问…

    SIMATIC S7-200 2020年10月31日
  • CPU226 CN模块出现致命错误,换了三个模块块,信息显示0009,急啊。

    我的一块CPU226使用过程*现SF/DIAG变红灯,STOP变黄灯,PLC不好运行,通过电脑检测错误为:用户程序永久存储区错误,把程序清除,重新下载,可以运行一会,只在重新上电自…

    SIMATIC S7-200 2017年8月18日

发表回复

登录后才能评论