在S200系统里,可以将HSC0配置成模式12 ,然后在Q0.0端口生成一个100KHz的脉冲,将被测脉冲输入I0.0,然后通过I0.0端口的中断服务程序里,分别读取HSC的读数,然后计算差值,即可计算出被测脉冲的宽度。可是Smart的HSC没有了模式12,得占用I0.0端口来计数,输入端口不够用了,如何解决?再者我想向PLC的设计者提出一个技术问题,可否设计一个专门用于脉宽计数的门控计数器,实现us级的测量。如果是单片机,很简单,几条指令就能解决。PLC这么强大的东西怎么就没这个功能呢
问题补充:
感谢 云山雾绕 的及时相助,您的思路是对的,可是如果按照您的方法去做,被测脉冲只能是ms级别的PLC可以计数,但是如果到了us级别的脉冲,PLC似乎就有点无能为力了呢。S200 Smart PLC这么强大的内核感觉都没发挥出来,计数方面都没有8051厉害。
最佳答案
控制思路:
1) 启用外部输入I0.0的上升沿中断和I0.0的下降沿中断,其中中断事件号分别为0和1
2) 启用定时中断10,设置定时中断时间1mS (SMB34),在定时中断子程序中编辑时间累积程序,并判断结果
3) 开中断
4) 主程序中初始化、复位判断标志位
程序样例:
定义外部输入上升沿、下降沿中断,中断事件号分别为0和1;定时中断10,时间1mS,开中断,
在上升沿中断中启用M0.0,启动在定时中断中进行加1指令用于时间累积:
在下降沿中断中停止启用M0.0
在定时中断中编辑产品判断时间程序:VB1保留上次的检测时间数据
在主程序中调用初始化和复位判断结果,
控制原理:
启用外部输入上升沿中断和下降沿中断捕捉高速传感器信号,并调用定时中断。当检测开始I0.0有上升沿触发信号后,启用定时中断按每一毫秒调用时间的累积,这样,当I0.0出现下降沿中断后,可以在定时中断中判断这个上升沿触发和下降沿触发后的时间累积差。当检测过程时间小于7mS,则激活M0.2 = 1(判断为正品);当检测过程时间大于14mS,则激活M0.1 = 1(判断为废品)。判断结果处理后,由M0.3触发判断结果标志位清除,等待第二次判断开始。
上述控制原理仅仅是一种控制思路,因为没有实际的外部硬件(高灵敏度高速传感器),无法真实进行程序的验证。
任意连接了一个按钮替代,
当I0.0接通时间为27mS时,M0.1(废品)标志位为1。
提问者对于答案的评价:
虽然没能解决我的问题,但也指了条路
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc281398.html