⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 module.c

📁 Keil平台
💻 C
📖 第 1 页 / 共 5 页
字号:
        case DATA_TEMP:     value = Jkmk.temp[index];  break;

        case DATA_MKCFG:    value = Jkmk.mk_cfg[index]; break;
        case DATA_AICFG:    value = Jkmk.ai_cfg[index]; break;
        case DATA_AOCFG:    value = Jkmk.ao_cfg[index]; break;
        case DATA_ALMCFG:   value = Jkmk.alm_cfg[index]; break;
        case DATA_TMCFG:    value = Jkmk.tm_cfg[index]; break;

        case DATA_DICFG:    value = Jkmk.di_cfg[index]; break;
        case DATA_DOCFG:    value = Jkmk.do_cfg[index]; break;
        case DATA_ALMMAP:   value = Jkmk.alm_map[index];break;
        case DATA_TM:       value = Jkmk.tm_v[index];   break;
        default: break;
        }
        break;
    case MODULE_CDMK:
        switch (type & MASK_DATA_TYPE)
        {
        case DATA_MKCFG:    value = Cdmk[module].mk_cfg[index]; break;
        case DATA_AI:       value = Cdmk[module].ai_v[index]; break;
        case DATA_AO:       value = Cdmk[module].ao_v[index]; break;
        case DATA_DI:       value = Cdmk[module].di_v[index]; break;
        case DATA_DO:       value = Cdmk[module].do_v[index]; break;
        case DATA_ALM:      value = Cdmk[module].alm_v[index]; break;
        default: break;
        }
        break;
    case MODULE_JYMK:
        switch (type & MASK_DATA_TYPE)
        {
        case DATA_MKCFG:    value = Jymk[module].mk_cfg[index]; break;
        case DATA_AI:       value = Jymk[module].ai_v[index]; break;
        case DATA_ALM:      value = Jymk[module].alm_v[index]; break;
        default: break;
        }
        break;
    case MODULE_DDMK:
        switch (type & MASK_DATA_TYPE)
        {
        case DATA_MKCFG:    value = Ddmk[module].mk_cfg[index]; break;
        case DATA_AI:       value = Ddmk[module].ai_v[index]; break;
        case DATA_ALM:      value = Ddmk[module].alm_v[index]; break;
        default: break;
        }
        break;
    case MODULE_KRMK:
        switch (type & MASK_DATA_TYPE)
        {
        case DATA_MKCFG:    value = Krmk[module].mk_cfg[index]; break;
        case DATA_DI:       value = Krmk[module].di_v[index]; break;
        case DATA_ALM:      value = Krmk[module].alm_v[index]; break;
        default: break;
        }
        break;
    case MODULE_COMMK:
        switch (type & MASK_DATA_TYPE)
        {
        case DATA_MKCFG:    value = Commk[module].mk_cfg[index]; break;
        case DATA_ALM:      value = Commk[module].alm_v[index]; break;
        default: break;
        }
        break;
    default:
        value = 0;
        break;
    }
    return value;
}

uchar GetModuleIndex(uchar type, uchar addr)
{
    uchar i;
    switch (type & MASK_MODULE)
    {
    case MODULE_JKMK:
        return 0;
        break;
    case MODULE_CDMK:
        for (i = 0; i < MAX_CDMK; i++)
        {
            if (Cdmk[i].mk_cfg[0] == addr)
               return i;
        }
        break;
    case MODULE_JYMK:
        for (i = 0; i < MAX_JYMK; i++)
        {
            if (Jymk[i].mk_cfg[0] == addr)
               return i;
        }
        break;
    case MODULE_DDMK:
        for (i = 0; i < MAX_DDMK; i++)
        {
            if (Ddmk[i].mk_cfg[0] == addr)
               return i;
        }
        break;
    case MODULE_KRMK:
        for (i = 0; i < MAX_KRMK; i++)
        {
            if (Krmk[i].mk_cfg[0] == addr)
               return i;
        }
        break;
    default: break;
    }
    return (uchar)(0xFF);
}

/****************************************************************************/
char *GetAlarmStr(char *s, uchar type, uchar index, uchar module, uchar flag)
{
    
    *s= '\0';
    flag = flag&0x7F;
    switch (type & MASK_MODULE)
    {
    case MODULE_JKMK:
        switch (index)
        {
        //1段
        case 10:
        case 11:
            //是否有降压单元
            if ( 1 == Jkmk.mk_cfg[47])
            {//无降压单元
                if (0 == Jkmk.mk_cfg[50])
                {//不分段
                    scat(s, "母线");
                }
                else
                {//分段
                    scat(s, "母线1段");
                }
                GetItem(flag, AlarmJkmk[index], Str_Buf);
                scat(s, Str_Buf);
            }
            else
            {//有降压单元
                GetItem(0, AlarmJkmk[index], Str_Buf);
                scat(s, Str_Buf);
                GetItem(flag, AlarmJkmk[index], Str_Buf);
                scat(s, Str_Buf);
            }
            break;
        //2段
        case 13:
        case 14:
            //是否有降压单元
            if ( 1 == Jkmk.mk_cfg[47])
            {//无降压单元
                if (0 == Jkmk.mk_cfg[50])
                {//不分段 这个分支不会执行,因为在告警处理时 不分段就取消的2段告警
                    scat(s, "母线");
                }
                else
                {//分段
                    scat(s, "母线2段");
                }
                GetItem(flag, AlarmJkmk[index], Str_Buf);
                scat(s, Str_Buf);
            }
            else
            {//有降压单元
                GetItem(0, AlarmJkmk[index], Str_Buf);
                scat(s, Str_Buf);
                GetItem(flag, AlarmJkmk[index], Str_Buf);
                scat(s, Str_Buf);
            }
            break;
        default:
            GetItem(0, AlarmJkmk[index], Str_Buf);
            scat(s, Str_Buf);
            GetItem(flag, AlarmJkmk[index], Str_Buf);
            scat(s, Str_Buf);
            break;
        }
/*
        TextFormat(Str_Buf, "%2d ", type);//debug
        scat(s, Str_Buf);
        TextFormat(Str_Buf, "%2d ", module);//debug
        scat(s, Str_Buf);
        TextFormat(Str_Buf, "%2d ", index);//debug
        scat(s, Str_Buf);
        TextFormat(Str_Buf, "%2d ", flag);//debug
        scat(s, Str_Buf);
*/
        break;
    case MODULE_CDMK:
        TextFormat(Str_Buf, "充电模块%2d", module+1);
        scat(s, Str_Buf);
        GetItem(0, AlarmCdmk[index], Str_Buf);
        scat(s, Str_Buf);
        GetItem(flag, AlarmCdmk[index], Str_Buf);
        scat(s, Str_Buf);
        break;
    case MODULE_JYMK:
        if (index == 0)
        {
            scat(s, "绝缘模块");
            GetItem(0, AlarmJymk[0], Str_Buf);
            scat(s, Str_Buf);
            GetItem(flag, AlarmJymk[0], Str_Buf);
            scat(s, Str_Buf);
        }
        else
        {
            //支路处理
            GetItem(0, AlarmJymk[index], Str_Buf);
            scat(s, Str_Buf);
            GetItem(flag, AlarmJymk[index], Str_Buf);
            scat(s, Str_Buf);
            if (index < 5)
            {
                GetItem(flag, AlarmJymk[index], Str_Buf);
                scat(s, Str_Buf);
            }
            else
            {
                if ((index%2) == 0)
                {
                    TextFormat(Str_Buf, "支路%3d", Index2Num(type, index, module));
                    scat(s, Str_Buf);
                    GetItem(flag, AlarmJymk[6], Str_Buf);
                    scat(s, Str_Buf);
                }
                else
                {
                    TextFormat(Str_Buf, "支路%3d", Index2Num(type, index, module));
                    scat(s, Str_Buf);
                    GetItem(flag, AlarmJymk[7], Str_Buf);
                    scat(s, Str_Buf);
                }
            }
        }
        break;
    case MODULE_DDMK:
        //单体处理
        if (index == 0)
        {//通讯中断
            TextFormat(s, "电导模块%1d ", module+1);
            GetItem(0, AlarmKrmk[0], Str_Buf);
            scat(s, Str_Buf);
            GetItem(flag, AlarmDdmk[0], Str_Buf);
            scat(s, Str_Buf);
        }
        else
        {//单体告警
            TextFormat(s, "电导模块%1d ", module+1);
            TextFormat(Str_Buf, "单体%2d", Index2Num(type, index, module));
            scat(s, Str_Buf);
            GetItem(flag, AlarmDdmk[1], Str_Buf);
            scat(s, Str_Buf);
        }
        break;
    case MODULE_KRMK:
        //支路处理
        if (index == 0)
        {
            TextFormat(s, "开入模块%1d", module+1);
            GetItem(0, AlarmKrmk[0], Str_Buf);
            scat(s, Str_Buf);
            GetItem(flag, AlarmKrmk[0], Str_Buf);
            scat(s, Str_Buf);
        }
        else
        {
            //根据安装位置生成相应告警文字
            switch (ModuleLocate(type, index, module))
            {
            case 0://母线1段
                //是否分段
                if (0 == Jkmk.mk_cfg[50])
                {
                    scat(s, "母线");
                }
                else
                {
                    scat(s, "母线1段");
                }
                break;
            case 1://母线2段
                scat(s, "母线2段");
                break;
            case 2://交流输出
                scat(s, "交流输出");
                break;
            case 3://其它开关状态
                scat(s, "其它开关");
                break;
            }
            TextFormat(Str_Buf, "支路%3d", Index2Num(type, index, module));
            scat(s, Str_Buf);
            GetItem(flag, AlarmKrmk[1], Str_Buf);
            scat(s, Str_Buf);
        }
        break;
    }
    return s;
}
/***************************************************************************/
int ModuleLocate(uchar type, uchar index, uchar module)
{
    int i;
    int flag;
    int num;
    switch (type & MASK_MODULE)
    {
    case MODULE_JKMK:        break;
    case MODULE_CDMK:        break;
    case MODULE_JYMK:
        num = index - 5;
        break;
    case MODULE_DDMK:
        
        break;
    case MODULE_KRMK:
        //判断母线是否分段 0不分段 1分段
        //根据安装位置生成相应告警文字
        //交流输出数量Jkmk.mk_cfg[58]
        //母线1段馈出数量Jkmk.mk_cfg[56]
        //母线2段馈出数量Jkmk.mk_cfg[57]
        //自定状态量数量Jkmk.mk_cfg[59]
        num = 0;
        for (i = 0; i < module; i++)
        {
            num += Krmk[i].mk_cfg[3];
        }
        num += index;
        //区间分类
        if (num <= Jkmk.mk_cfg[56])
        {
            return 0;//MX 1
        }
        else if (num <= Jkmk.mk_cfg[56] + Jkmk.mk_cfg[57])
        {
            return 1;//MX 2
        }
        else if (num <= Jkmk.mk_cfg[58] + Jkmk.mk_cfg[56] + Jkmk.mk_cfg[57])
        {
            return 2;//AC 
        }
        else
        {
            return 3;//OTHER
        }
        break;
    }
}
/***************************************************************************/
void ModuleUpdataTime(char *buf)
{
    int i;
    for (i = 0; i < 6; i++)
    {
        Jkmk.temp[i] = buf[i];
    }
}
//
int Index2Num(uchar type, uchar index, uchar module)
{
    int i;
    int flag;
    int num;
    switch (type & MASK_MODULE)
    {
    case MODULE_JKMK:        break;
    case MODULE_CDMK:        break;
    case MODULE_JYMK:
        num = index - 5;
        break;
    case MODULE_DDMK:
        num = index;
        break;
    case MODULE_KRMK:
        //判断母线是否分段 0不分段 1分段
            //根据安装位置生成相应告警文字
        num = 0;
        for (i = 0; i < module; i++)
        {
            num += Krmk[i].mk_cfg[3];
        }
        num += index;
        if (num <= Jkmk.mk_cfg[56])
        {
            num = num;//MX 1
        }
        else if (num <= Jkmk.mk_cfg[56] + Jkmk.mk_cfg[57])
        {
            num -= Jkmk.mk_cfg[56];//MX 2
        }
        else if (num <= Jkmk.mk_cfg[58] + Jkmk.mk_cfg[56] + Jkmk.mk_cfg[57])
        {
            num -= Jkmk.mk_cfg[56] + Jkmk.mk_cfg[57]; // AC
        }
        else
        {
            num -= Jkmk.mk_cfg[58] + Jkmk.mk_cfg[56] + Jkmk.mk_cfg[57];//OTHER
        }

        break;
    }

    return num;
}
/****************************************************************************/
char *OldAlarmStr(char *buf, uchar index, uchar style)
{
//    ALARM *alm;
//    alm = &OldAlarmBuf[index];
//    switch (style)
//    {
//    case 0:
//        TextFormat(buf, "%2d", index+1);
//        break;
//    case 1:
//        GetAlarmStr(buf, alm->type, alm->index, alm->module, alm->flag);
//        break;
//    case 2:
//        timestr(alm->time1, buf);
//        break;
//    case 3:
//        timestr(alm->time2, buf);
//        break;
//    }
//    return buf;
}

char *NewAlarmStr(char *buf, uchar index, uchar style)
{
//    ALARM *alm;
//    alm = &NewAlarmBuf[index];
//    switch (style)
//    {
//    case 0:
//        TextFormat(buf, "%2d", index+1);
//        break;
//    case 1:
//        GetAlarmStr(buf, alm->type, alm->index, alm->module, alm->flag);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -