说说200 smart高速计数器的计数4
上文说到利用外部中断判断电机旋转方向,由这个旋转方向触发不同的中断重新调用高速计数器的预设值,并采用当前值等于预设值中断重复调用实现模拟电机主轴位置的方法。
今天也来做一个验证,主要是检测直接连接到电机输出轴上的编码器(速比1:1)前提下,用编码器测试电机的旋转频率,同时,再将该频率转换为模拟量输出,连接到下一级电机的变频器输入端子,作为同步频率来源依据的控制。
编程思路:
1) 定义高速计数器(控制字节、当前值、预设值)
2) 定义定时器中断SMB34=100mS、开中断
3) 编辑频率检测程序、根据频率值、用200 smart模拟量转换为相应电压值输出
验证的编码器型号仍然按上文那个,电机额定转速按1445rpm/min值计算
程序:
初始化子程序:

主程序调用初始化子程序:VD4 = 电机在50HZ下的转速1445 rpm/min

定时中断连接的子程序:
中断(100mS)中读取到高速计数器乘600,得到1分钟电机的实际转速,与实际编码器每一转的线数和50HZ状态下比较计算。

实际转速转换为模拟量输出:0-10V,对应于0-50HZ

将程序编译、保存到指定的盘符,连接外部编码器,确认无误后,上电。新建“状态图表”,监控需要的变量地址,图示:

从“状态图表”中看编码器测得实际的运行电机频率VD8为28.96rpm/min转速,VD12为电机按1445rpm/min下所计算得到的模拟量输出值,取VW18直接用MOV_W传送到指定的模拟量输出通道。
注意:经济型PLC(CR系列)不支持模块扩展。
经常性看到网友的提问是关于编码器的硬件连接问题,假设按上述程序为例,我连接的编码器A相连接I0.0;B相连接I0.1(不连接Z相是我选择了高速计数器HSC0模式9),如果这时我将编码器的输出相序与PLC高速输入端子掉换一下,看高速计数器有何表现?

从上图看,数据由正值计数,变为了负值计数。原因是模式9,A/B正交输入时,当A相脉冲超前于B相电角度90方式输入时,为正计数,反之为负计数,脉冲个数保持不变。这个问题当然可以通过改变硬件连接纠正计数方向。
注意:控制字节SM37.3的增计数和减计数,不适合2相高速脉冲输入的高速计数器换向,只能适用于模式0或者模式1,即内部计数方向控制范畴。