比 率 20Hz/V
3.2 程序结构
主程序在第一个扫描周期调用子程序SBR0
SBR0高速计数器和定时中断的初始化
INT0对高速计数器求值的定时中断程序
3.3 程序和注释
主程序在第一个扫描周期调用初始化子程序SBR0,仅在第一个扫描周期标志位SM0.1=1。由子程序SBR0实现初始化。
首先,把高速计数器HSC1的控制字节MB47置为16进制数FC,其含义是:正方向计数,可更新预置值(PV),可更新当前值(CV),激活HSC1。
然后,用定义指令HDEF把高速计数器HSC1设置成工作模式0,即没有复位或启动输入,也没有外部的方向选择。当前值SMD48复位为0,预置值SMD52置为FFFF(16进制)。定时中断0间隔时间SMB34置为100ms,中断程序0分配给定时中断0,并允许中断,用指令HSC1启动高速计数器。
每100ms调用一次中断程序0,读出高速计数器的数值后,将其置零。通过HSC1计数值及变换关系来求被测的控制母线电压值。本例中,采用参数为输入0~500V、输出0~10kHz的V/F传动器,100ms时间累计脉冲最多为1kHz,在中断程序中用乘法指令MUL将该计数值乘5,则100ms内最多脉冲累计数为1k×5=5kHz,从而实现显示值与10倍的真实电压值相对应,假设经乘法指令运算后计数值为2200Hz,则实际电压值相应为220V。然后将经程序处理的计数值置入输出字节QBO,以便通过LED来显示被测的模拟电压值。高速计数器和V/F传感器测量模拟电压信号的主程序、子程序和中断程序如下所述。
主程序
LD SM0.1 //用初次扫描存储器位(SM0.1)调用执行初始化操作的子程序。由于采用这样的子程序调用,后续扫描不会再调用这个子程序,从而减少了扫描时间,也提供了一个结构优化的程序。
CALL SBR_0 //调用初始化子程序SBR_0
子程序