楼主最近还看过
用一个计数器计数(MW2),传感器输出脉冲接PLC输入点(I0.7),用一个按钮(I0.0)每按一下按钮将产生一路计数器输出,第一次按钮使M0.0=1,且将MW2值通过间接寻址送入首址(DB1.DBW100),用MW2 - DB1.DBW100作为一路计数输出(MW10)。第二次按钮使M0.1=1(单脉冲),且将MW2值通过间接寻址送入首址(DB1.DBW102),用MW2 - DB1.DBW100作为第一路计数输出(MW10)。用MW2 - DB1.DBW102作为第二路计数输出(MW12)。。。。见梯形图:
按程序段8的思路,每按一次按钮就多一路计数器输出,每路计数器输出值=原计数器MW2值- 该路计数器产生时的MW2的瞬间值
程序目的:
输送皮带被动轮上安装旋转编码器。皮带入口处安装对射电眼。物件无序地经过电眼进入皮带,受到皮带的输送。程序以数字量模拟皮带上的物件的移动。并在指定的仿真点形成一个虚拟的电眼输出信号。相当于在此地点有一个真实的电眼检测到物件而发出信号。
适用范围:
只建议在主程序中使用SM0.0直接使能。使用次数只受内存空间限制,没有次数限制。每使用一次要增加扫描周期大约 1 毫秒。皮带不可反转。
程序接口:
电眼 位值。位于皮带入口的检测电眼。
仿真距离 使用前或运行过程输入,整数型。电眼到仿真点的毫米距离。
编码器分辨率 使用前输入,整数型。测量带轮转一圈的脉冲数。
直径 使用前输入,实数型。编码器处的皮带轮直径。
数据数 使用前输入,整数型。记录数据占空间的长度。
工作表 整数值。工作用内存的起始地址偏移。
时钟 指令初始化,外部累计编码器脉冲,指令读取。
仿真点 位值。输出仿真电眼的信号。
临时 位值。任意使用未重复的I,Q,M,V,S,L
占用内存量及工作表结构:
VBn 工作表 指令使用。(以后的数据请用户不要修改)
. . . . . .
VBn+14+数据数 最后一个数据 指令使用。最后一个数据的非LSB会超出此范围。
执行过程:
程序一直执行,一直在仿真距离上得到虚拟电眼的检测效果。运行过程中可以更改"仿真距离"
补充说明:
仿真距离。向减小方向更改将可能丢失被跳过的边缘数据。向增大方向更改将使当前输出状态一直延长到发生刷新。
数据数。数值越大能够记录的边缘次数越多。一次检测边缘作为一个数据包。一个数据包占用4个字节。(所以请使用4的倍数作为设定值,以便简化计算内存占用容量。)至少要安排两个数据包的记录空间(8字节)。即最小值为4,4 5 6 7 的效果一样。此时在电眼到仿真点之间只能有一次边缘的变化。
设定为 8 时有 3 个数据,工作表占用 0 至 25 字节。
设定为 64 时有17个数据,工作表占用 0 至 81字节。
设定为 4n 时有n+1 个数据,工作表占用 0 至 17+4n 字节。
数据数一定要设定得足够宽裕。否则边缘数量超过数据数容量时,程序将一直出错,只有STOP可以清除。
使用变化:
当时钟周期=T
且当分辨率/周长=n
仿真间隔=仿真距离×T×n
或者
当时钟周期=T
且分辨率=πd
仿真间隔=仿真距离×T
本程序免费使用。也许不会适用于你的程序。当由于任何原因不适用时,程序作者不负有责任。请用户仔细复核程序内容,再继续使用。