background image

   

数。这一过程是回路输入转换的逆过程。

3.2 PID 温度控制程序

    //主程序
    LD SM0.1 //首次扫描时为 ON
    CALL 0  //调用初始化子程序 0
    //初始化子程序 0,装载 PID 指令的回路表
    LD SM0.0  //给定值存入累加器
    DTR AC0, AC0 //将 32 位整数转换成实数
    /R 64000.0,AC0 //累加器中的实数标准化
    +R 0.5, AC0 //加上偏移值,使其在
   0.0~1.0 之间
    MOVR ACO, VD104 //装入给定值
    MOVR 2, VD112 //装入回路增益 2
    MOVR 1, VD116 //装入采样时间 1s
    MOVR 30, VD120 //装入积分时间 30min
    MOVR 0, VD124 //关闭微分作用
    LDN T32
    TON T32, 1000 //设置定时器 32 中断的
 时间间隔为 1s
    ATDH 0, 21 //设置定时器 32 中断(中
断号为

21)执行 PID 指令

    ENI   //允许中断,子程序 0 结束
    //中断程序 0
    LD SM0.0
    XORD AC0, ACO   //清除累加器
    MOVW AIWO, AC0 //将待转化的模拟量
 存入累加器
    LDW>= AC0, 0 //如果模拟量数值为正
    JMP 0  //直接转换成实数
    ORD 16#FFFF0000, ACO //将 AC0

    

内的数

值进行符号扩展

,扩展为 32 

位负数
    LBL 0
    DTR AC0, AC0 //将 32 位整数转换成实数
    /R  64000.0, AC0 //累加器中的实数标准化
    +R 0.5, AC0 //加上偏移值,使其在
 0.0~1.0 之间
    MOVR ACO, VD100 //装入标准化的过程变量
    LD I0.0    //在自动方式下,执行 PID 指令
    PID VB100, 0 //

    

回路表的起始地址为

VB100,回路号为 0

    LD SM0.0
    MOVR VD108, AC0 //将回路输出送入累加器
    -R 0.5, AC0
    *R 64000.0, AC0     
    ROUND AC0, AC0 //将实数转换为 32 位整数