lipengeed
想做一段计算物体长度的程序,用光电开关检测物体经过光电开关的时间,物体移动的速度知道,用S=V*T,怎么编写一段程序,可以计算出物体每一次经过光电开关时的长度,哪位大侠,知道请说一下,谢谢
文艺青年
编码器
邵-王者之师
用输入中断
不过中断程序还没写出来,我也在研究。。。
想程序想的头痛,我来帮楼主顶帖,看看那位大神来解决一下!
东坡牧羊人
这个课题比较新颖,期待中......
renstone
1.使用旋转编码器进行脉冲计数
2. 单传感器检测脉冲上升沿和下降沿并计时。
3.使用两个传感器检测
|-------L------------|
-----------2--------------------1----------
XXXX
s
使用两个传感器,传感器1检测上升沿并开始计时,传感器2检测到下降沿结束计时,在这个时间段内走过的距离就是L + S,L为两个传感器的的间距,速度V * 时间T - 两传感器间距就是尺寸。
看工件大小和精度,工件运动速度的要求了。
回复内容:
对: renstone 1.使用旋转编码器进行脉冲计数2. 单传感器检测脉冲上... 内容的回复!
是的,思路大概就是这样的。
继续顶帖,同时我也在深度研究中。
想了个比较笨的办法。先上程序
INT_0,子程序。
思路是在发生I0.1上升沿时跳转到LBL马上执行T32计时。下降沿采用中断来读取T32的数值。
考虑了一下,这个程序还是会导致误差,原因是当上升沿发生时,不能立即读到跳转指令进行跳转。头想大了。
还希望来个大神指导一下。
继续顶贴,期待大神来解决
下降沿时中断返回,上升沿和下降沿的优先级不一样,上升沿执行时,西门子的plc应当不支持中断嵌套,所以在上升沿脉冲中断子程序中是无法进入比它优先级更低的中断程序的,我的想法是你只要使用脉冲下降沿做为中断返回条件就可以了。在中断子程序中对1ms时钟进行计数,每到1ms,计数器加一,计数结果就是毫秒数。当然,还要考虑计算器清零的问题。
实际上我想他这种根本没必要使用中断方式,只要工件不是太小,传送速度不是太快,普通的顺序执行误差应该不会很大。估计他这个精度要求不高,否则应该考虑旋转编码器脉冲计数的方式或其他方法
研讨会宣传员_3259
这个用PLC高速计数是不是比较好一些。
引用 研讨会宣传员_3259 的回复内容: 这个用PLC高速计数是不是比较好一些。
我也顺便研究了一下高速计数器,可是没什么办法来弄;
还尝试了上升沿中断、下降沿中断加时间抓取,可是限于编程技巧,都没有成功~
总是想中断程序越简单越好,因为中断程序也是需要顺序控制时间的。
继续等待大神上程序启发一下~
顶贴,期待大神前来解决啊!~
试了一下,这样可以实现 DB9.DBW10的值就是定时器运行的值,单位为MS
手头计算机没法装S7 microwin,只有三菱的程序。
三菱的中断程序没法检测一个I/O点的上升沿和下降沿。所以把两个I/O的点接到一块,一个检测上升,一个检测下降,接线图大概如下。
---------
| | |
COM X0 X1
I000 代表检测X0上升沿的中断服务程序,I101表示检测X1下降沿的中断服务程序。中断I101处理完后,D0保存的就是毫秒数。
你可以转换成西门子的测试一下。
我还是偏向不使用中断,把这个检测过程作为步进中的一步完成就行了
研究出来了
200的1MS定时器在子程序进入使能后跳出不会中断计时
主程序,开放2个中断
子程序,I0.1上升沿
I0.1下降沿将计数器值赋给VW0
试了一下好可以,不过貌似我用一个国产光电带I0.1,最快只能小到5MS,不知道什么原因
楼主不知道这个能不能满足你的需要
winter938
这实际上就是测光电开关信号维持的时常,时间的测量,精确的话用输入的上下沿中断处理计时,要求不高的话直接用系统的定时指令就可以了
seaeast_王者之师军团
引用 winter938 的回复内容: 这实际上就是测光电开关信号维持的时常,时间的测量,精确...
楼主的意思是速度已经知道,就是检测光电开关有信号的时间,同意19楼的说法