0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

模块化程序设计案例DCIM-3

汽车电子技术 来源:玉工讲技术 作者: 玉素甫·买买提 2023-02-21 16:23 次阅读

说到模型、模式等概念,我们大概知道什么意思。虽然说不出具体定义,但日常生活或成长过程中肯定接触过。比如,我们从小学开始接触的纸质的考勤表(矩阵,也算是人工智能的根),表格中打勾代表1,空格代表0...。也就是我们几乎都具备了设计模型的能力,但怎么能让现实问题或需求分解成多个模型并将他们用代码标识出来,最终让计算机能够进行处理或计算这个过程离不开编程思想及编写程序(函数)。本文以数据中心基础设施管理系统DCIM(Data Center Infrastructure management)为例,简要讨论模块化编程案例。

1、DCIM系统需求及架构设想

在设计较复杂的程序时,一般采用自顶向下的方法,将问题划分为几个部分,各个部分再进行细化,直到分解为较好解决问题为止。利用函数,不仅可以实现程序的模块化,使得程序设计更加简单和直观,而且还可以把程序中经常用到的一些计算或操作编写成通用函数,以供随时调用。

DCIM(数据中心基础设施管理系统)接入数据中心电力运行、配电监控系统、环境监控系统和安装的设备等数据,提供电力容量管理、温湿度监控管理、UPS电池监控管理、动环告警管理、设备管理、数字运维、能耗分析、智能化巡检、智能运营等业务功能。使整个数据中心的管理更加智能化,提升整体运维效率及运营水平。

DCIM(数据中心基础设施管理系统)应采用可靠稳定的操作系统及编程语言(例如本例企图底层用C语言构建一样),以保证系统的通用性和安全性。DCIM应采用分层模块化设计架构,对整个数据中心进行集中管理,并具有良好的扩容性,可在满足现有需求的同时,可根据后继不断扩容的需求,快速灵活地接入新设备、新系统。其架构示意图1如下所示:

图片

图1 DCIM模块化架构图

2、将模块化架构改为功能(函数)

根据需求构建了图1所示的架构之后,接下来我们通过编程思想尝试用函数来描述(编程)图1的各模块。我们首先用主程序、子程序、子过程等框架把软件的主要结构和流程描述出来,并定义和调试好各个框架之间的输入、输出链接关系。模块化的目的是为了降低程序复杂度,使程序设计、调试和维护等操作简单化,将上面模块改为函数后的示意图如下图2所示:

图片

图2 DCIM的函数示意图

3、用C语言“实现”各功能(函数)

用C语言开发软件系统时,为了方便用户大都采用菜单(menu)方式。软件运行时,首先在屏幕上显示出各种功能,用户只要按一些简单的键,便可以进入相应的功能,就像在饭店点菜一样。图3为上述DCIM模拟程序运行后菜单的示意。

图片

图3 DCIM模拟程序主菜单

它共有6个功能,用户只要按一个数字(如“6”),便可进入下一层相应的功能——南向接口。该层又是一个菜单,用户继续选择。

图片

图4 DCIM模拟程序子菜单

上图3和4所对应的部分代码截图如下,完整代码详见本文附件1:

图片

图5 DCIM菜单部分代码

通常程序实现时,主菜单由主函数提供,下面的各级子菜单由各级子函数提供。最末一级的菜单,才提供一些具体的功能。菜单程序是一种常见的程序。它主要由两部分内容构成:

(1)显示菜单——由一些显示操作提供。

(2)根据用户的选择转向相应的函数——由选择结构实现。

从这个过程可以看出,编程过程中理解需求并将其改变为合理的结构(或架构)看起来不需要懂代码而更需要理解业务本身,也是非常关键的环(当然编写程序也很重要)。现实生活中,虽然我们不写程序,但不知不觉中采用编程思维,比如将一个复杂项目分解多个子项目并制定里程碑事件(整体计划),之后按阶段计划逐步进入子项目的实施推进。以上菜单的具体实现代码详见本文附件1所示的dcim.h头文件和main.c源文件,具体代码函的意思不再赘述,感兴趣者可以自行测试。在我看来,看此段代码好比到施工现场看施工过程一样,只是在这个现场中一个码农刚刚开始了“搬砖”任务。

4、结束语

也许以上程序给我们产生回到“文本时代”的感觉。虽然这样文本菜单看起来很过时(或很low),但计算机专业人员反而更喜欢这样简单直接或直白的方式跟计算机进行“交流”,不喜欢中间接入“中介”--图形化界面。大多数非专业用户喜欢图形化界面,也是日常生活中计算机常用的形式。

实际上现在DCIM已经跨越了面向过程和面向对象的编程思想,开始应用面向模式的编程思想(即,我们的注意力转向教授智能机器而不是直接编程,现在讨论这些为时过早)。图像化界面程序开发多数采用面向对象的编程思想,接下来的文章中进一步讨论。

附件1:DCIM模拟系统完整代码

//main.c  源文件
#include 
#include 
#include 
#include "dcim.h"


char printMainMenu();
char printSubMain();


int main() {
  int menuID;
  //init();    //初始化函数,相当于建筑工程中的准备材料并运到现场
  while (1) {
    menuID = printMainMenu();
    switch (menuID) {
    case '1': resourMgmt(); break;
    case '2': performanceMgmt(); break;
    case '3': troubleMgmt(); break;
    case '4': CustomerMgmt(); break;
    case '5': pueMgmt(); break;
    case '6':
      while (1) {
        menuID = printSubMain();
        switch (menuID) {
        case '1': DEMSapi(); break;
        case '2': BAapi(); break;
        case '3': PUEapi(); break;
        case '4': DNCCapi(); break;
        case '5': Pwoer(); break;
        }
        if (menuID == '0') break;
      }
      break;
    case '0': exit(EXIT_SUCCESS);
    }
  }
  //fclose(fp);  --关闭初始化init()函数中打开的文件
  return 0;
}


//打印主菜单
char printMainMenu() {
  char menuID;
  system("cls");
  printf("***********数据中心基础设施管理系统(DCIM )**********************\\n"); 
  printf("*                                                                *\\n");
  printf("*             ------------------------------------------         *\\n");
  printf("*            |  Data Center Infrastructure management  |         *\\n");
  printf("*             ------------------------------------------         *\\n");
  printf("*                                                                *\\n");
  printf("*                1)资源管理                                      *\\n");
  printf("*                2)性能管理                                      *\\n");
  printf("*                3)故障管理                                      *\\n");
  printf("*                4)客户管理                                      *\\n");
  printf("*                5)能效管理                                      *\\n");
  printf("*                6)南向接口                                      *\\n");
  printf("*                0)退出软件                                      *\\n");
  printf("*                                                                *\\n");
  printf("*            -----------------------------------------           *\\n");
  printf("*                  请在上述功能中选择(1——6)                    *\\n");
  printf("*                                                                *\\n");
  printf("******************************************************************\\n");
  fflush(stdin);
  menuID = getch();
  return menuID;
}


//打印子菜单
char printSubMain() {
  char menuID;
  system("cls");
  printf("*****************南向接口信息*************************************\\n");
  printf("*                                                                *\\n");
  printf("*                1)动力环监控系统                                *\\n");
  printf("*                2)BA楼宇智能化系统                              *\\n");
  printf("*                3)能耗系统                                      *\\n");
  printf("*                4)冷机群控系统                                  *\\n");
  printf("*                5)电力系统                                      *\\n");
  printf("*                0)返回主菜单                                    *\\n");
  printf("*                                                                *\\n");
  printf("******************************************************************\\n");
  fflush(stdin);
  menuID = getch();
  return menuID;
}


//dcim.h  头文件需要独立放到另一个文件


int resourMgmt() {


};
  int performanceMgmt() {
    return 0;
  };
  int troubleMgmt() {
    return 0;
  };
  int CustomerMgmt() {
    return 0;
  };
  int pueMgmt() {
    return 0;
  };
  int DEMSapi() {
    return 0;
  };
  int BAapi() {
    return 0;
  };
  int PUEapi() {
    return 0;
  };
  int DNCCapi() {
    return 0;
  };
  int Pwoer() {
    return 0;
  };
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作
    +关注

    关注

    0

    文章

    43

    浏览量

    18796
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79541
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61309
收藏 人收藏

    评论

    相关推荐

    关于如何写模块化程序

    本帖最后由 eehome 于 2013-1-5 10:04 编辑 附件里是一个模块化程序,实现用12864显示1302设置的时间,但是出现图示重复定义的错误,从错误上看是reg52.h的重复
    发表于 12-30 15:51

    模块化程序

    现在大家写程序都是模块化吗,就是不同的模块放在不同的文件夹里。比如所有的h文件放一起,所有的h文件声明一起,主程序只有一小段就行,很好的,就是刚开始学习
    发表于 11-12 15:15

    VerilogHDL模块化程序设计

    VerilogHDL模块化程序设计中文期刊文章作  者:向兵作者机构:[1]绵阳职业技术学院,四川绵阳621000出 版 物:《科技资讯》 (科技资讯)年 卷 期:2017年 第27期摘  要
    发表于 05-04 12:06

    《通过uart协议理解何为接口设计何为模块化设计(封装)》含程序和视频

    该视频以uart为例,通过简单的协议来阐述何为接口协议,如何进行模块化设计(封装),并完成UART的数据发送和数据接收模块设计三个部分。一、何为接口协议二、何为模块化设计三、模块化
    发表于 07-16 12:37

    嵌入式模块化程序设计的相关资料分享

    模块化程序设计是指在进行程序设计时将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一
    发表于 11-09 08:20

    嵌入式编程中C语言的模块化和模拟面向对象的相关资料推荐

    模块化嵌入式编程中需要对程序进行模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构
    发表于 12-15 08:51

    C语言模块化程序设计理解

    程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),C语言模块化程序设计需理解如下概念:  (1)
    发表于 12-15 06:34

    C语言模块化程序设计需理解哪些呢

    (依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了>相对论), C语言模块化程序设计需理解如下概念:(1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块
    发表于 12-15 06:04

    嵌入式系统的微模块化程序设计有何作用

    什么是嵌入式系统的微模块化程序设计?嵌入式系统的微模块化程序设计有何作用?
    发表于 12-24 06:35

    模块化程序设计简单解释

    模块化程序设计模块化程序设计是指在进行程序设计时将一个大程序按照功能划分为若干小
    发表于 02-23 06:05

    模块化程序设计

    模块化程序设计思想,单片机c语言的模块化设计,方便移植,将程序封装备用。
    发表于 03-22 15:29 9次下载

    模块化程序设计

    模块化程序设计,利用c语言的移植性好特点,更好的利用c语言。
    发表于 03-23 09:25 0次下载

    C语言指针用作函数参数模块化程序设计以及增量测试方法的程序

    本文档的主要内容详细介绍的是C语言指针用作函数参数模块化程序设计以及增量测试方法的程序
    发表于 12-25 08:00 1次下载
    C语言指针用作函数参数<b class='flag-5'>模块化</b><b class='flag-5'>程序设计</b>以及增量测试方法的<b class='flag-5'>程序</b>

    嵌入式软件开发之模块化程序设计(三)

    模块化程序设计是指在进行程序设计时将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一
    发表于 11-03 21:06 10次下载
    嵌入式软件开发之<b class='flag-5'>模块化</b><b class='flag-5'>程序设计</b>(三)

    c++程序设计_基于proteus的51单片机开发实例30-模块化程序设计

    1. 基于proteus的51单片机开发实例30-模块化程序设计1.1. 实验目的模块化程序设计不知不觉我们的51单片机开发实例已经进行到第三十篇了,是时候进行一个总结和反思了,总结什
    发表于 11-21 15:36 13次下载
    c++<b class='flag-5'>程序设计</b>_基于proteus的51单片机开发实例30-<b class='flag-5'>模块化</b><b class='flag-5'>程序设计</b>