1、客户为了便于维护现场设备,但同时又避免终端客户随意修改设备参数,故采用动态密码赋予终端客户临时权限,动态密码每小时自动更新一次;

用户权限.jpg

2、如上图所示,此用户等级为不同级别的保护,但是密码均为固定不可自动变更的;


权限设置.jpg

3、如上图所示,对数值输入对话框进行保护,并赋予密码6等级;


动态密码宏.jpg

4、如上图所示,通过系统寄存器的运算和赋值,将用户等级更改为动态密码,此动态密码与时间相关,并赋予计算公式,得到密码赋给SRW10118,每次需要赋予终端客户临时权限时,只需根据计算公式算出密码,并将此密码告知终端用户即可。


5、代码如下:

#include <macro.h>

int MacroMain()
{
    // Here to add macro code.
    unsigned short data[4] = {0};
    unsigned short p1 = 0;//年
    unsigned short p2 = 0;//月
    unsigned short p3 = 0;//日
    unsigned short p4 = 0;//时
    unsigned int p5,p6;
    char mima1[8] = {0};
    char mima2[8] = {0};
    GetMem(data,@时间@,0,4*sizeof(unsigned short));
    p1 = data[0];
    p2 = data[1];
    p3 = data[2];
    p4 = data[3];
    p5=p1*p2+p3*p4;//计算公式
    p6=p4*3600+p2*30;
    mima1[0] = (p5/10000+0x30);
    mima1[1] = ((p5%10000/1000)+0x30);
    mima1[2] = ((p5%1000/100)+0x30);
    mima1[3] = ((p5%100/10)+0x30);
    mima1[4] = ((p5%10)+0x30);

    mima2[0] = (p6/10000+0x30);
    mima2[1] = ((p6%10000/1000)+0x30);
    mima2[2] = ((p6%1000/100)+0x30);
    mima2[3] = ((p6%100/10)+0x30);
    mima2[4] = ((p6%10)+0x30);
    SetMem(mima1,@密码@,0,8);
    SetMem(mima2,@密码@,4,8); 
    
    return 0;
}