求一个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日 上午2:39

相关推荐

  • 有关S7-200组网协议的问题

    现在有多台S7-200的PLC,它们之间相隔距离较远,通过GPRS的网络来使他们相互通信。想用其中一台做为主站,其他的为从站,这样只需要到主站PLC的地方就能看到其他从站的状态。&…

    SIMATIC S7-200 2021年7月4日
  • s7-200与触摸屏MT506MV通讯问题

    我现在是S7-200与威伦触摸屏MT506MV通讯模拟量模块EM235,4-20MA电流通过PCL编程转化成0-15.84吨,问题是触摸屏上数值输入元件里面读取地址是VW,输入最小…

    SIMATIC S7-200 2020年11月1日
  • plc的地址设置

    我想做一屏多机,不知道怎样设置plc地址,哪位师父教教我,谢谢! 最佳答案 1、PLC地址在S7200的编程软件里的“系统块”下的“通讯端口”下可以设定PLC的通讯地址!&nbsp…

    SIMATIC S7-200 2021年7月4日
  • 主机plc315-2dp从机200,能在线修改程序吗

    我现在是用主机PLC315-2dp,从机用200的,用DP通讯,我现在手头没200的编程电缆,我想修改200的程序,请问一下,能修改200的程序吗,如果能修改,怎么做才能修改啊?本…

    SIMATIC S7-200 2020年11月1日
  • S7200控制台达伺服电机如何编程

    我现在选用6ES7214-2AD23-0XB8(CPU224XP)控制台达伺服电机,电机转速是3000r/m,减速机速比为175,我现在要做到控制电机每次精确转动1/18圈,最好是…

    SIMATIC S7-200 2020年11月1日
  • EEPROM能存储多少数据

    EEPROM最多能存储多少数据 问题补充:相应的CPU是有程序存储器和数据存储器的容量,但是我不明白EEPROM断电保持区属于哪个,至于型号就以226为例吧,谢谢! 最佳答案 22…

    SIMATIC S7-200 2020年10月31日
  • PC机控制PLC输出的通信问题

    我想将物联网与PLC技术结合起来,设计一个实训平台,用PC机作为上位机控制PLC的输出,使电磁阀进行简单的开关动作,可以使用modbus的通信协议来完成吗?我的PLC型号是226C…

    SIMATIC S7-200 2021年7月5日
  • s7-200plc温度处理编程问题?

    我是初学者,在学习PLC模拟量编程遇到以下问题,1、子程序的符号表里面的名称是随便编写的吗?(见图1);2、子程序中i_di转换指令中的lw0指什么?(见图2);3、子程序中DIV…

    2020年10月31日
  • 计数器清零

    请教各位前辈   程序中有个计数器C15,当计数等于10时计数器C15清零时,但是C15清零后,常开点C15仍闭合,为什么C15清零后,常开点C15仍…

    SIMATIC S7-200 2018年12月6日
  • PLC输出端输出电压是多少

    PLC输出端输出电压是多少,(继电器输出、晶体管输出、晶闸管输出)再告诉一下输入端输入的信号电压是多少呢?(数字量信号) 最佳答案 玖月奇迹你好:  &nbsp…

    SIMATIC S7-200 2020年11月5日

发表回复

登录后才能评论