zoukankan      html  css  js  c++  java
  • 草稿:SCADA全局底层框架架构

    一:全局基于单文档MFC程序开发。

    二:全局每个功能模块之间完全隔离, 模块之间的数据交流必须使用主板模板。

    三:每个功能块全部都自己的线程,除了PLC功能块 其他都是窗口线程

    四:各个功能命名的前缀依次是:

    硬件功能模组:CGszBoard

    HMI模组:CGszHmi

    CCD模组:CGszCcd

    PLC模组:CGszPlc

    运动模组:CGszMotion

    数据库模组:CGszDataBase

    通讯模组:CGszCommunication

    主板总线模组:CGszMainDataBus

    ×××××××××××××××××××××××××××××

    五:在App的头文件里面声明 线程函数依次是:

    硬件功能模组:static UINT Scada_GszBoard(LPVOID pParam);  

    HMI模组:static UINT Scada_GszHmi(LPVOID pParam)

    CCD模组:static UINT Scada_GszCcd(LPVOID pParam)

    PLC模组:static UINT Scada_GszPlc(LPVOID pParam)

    运动模组:static UINT Scada_GszMotion(LPVOID pParam)

    数据库模组:static UINT Scada_GszDataBase(LPVOID pParam)

    通讯模组:static UINT Scada_GszCommunication(LPVOID pParam)

    主板总线模组:该模组不需要线程

    六:在App的实现文件(就是CPP)文件里去实现这些七个函数。

    七:上述线程分为两类一类是有脸的 一类是无脸的。使用不同全局函数 将上述函数定义为线程函数

    首先有脸线程函数的定义方式:

    CWinThread* AfxBeginThread
    
    (
    
      CRuntimeClass* pThreadClass,//从CWinThread派生的RUNTIME_CLASS类;
    
      intnPriority=THREAD_PRIORITY_NORMAL,//线程优先级,如果为0,则与创建该线程的线程相同;
    
      UINT nStackSize=0,//线程的堆栈大小,如果为0,则与创建该线程的线程相同;
    
      DWORD dwCreateFlags=0,//一个创建标识,如果是CREATE_SUSPENDED,则在悬挂状态创建线程,在线程创建后线程挂起,否则线程在创建后开始线程的执行。
    
      LPSECURITY_ATTRIBUTESlpSecurityAttrs=NULL//线程的安全属性,NT下有用。
    
    );

    然后是无脸函数的定义方式:

    CWinThread* AfxBeginThread(
    
    AFX_THREADPROC pfnThreadProc,//指向工作者线程的执行函数的指针,线程函数原型必须声明如下: UINTExecutingFunction(LPVOID pParam);
    
    LPVOID pParam,//传递给线程函数的一个32位参数,执行函数将用某种方式解释该值。它可以是数值,或是指向一个结构的指针,甚至可以被忽略;
    
    nPriority=THREAD_PRIORITY_NORMAL,//线程的优先级。如果为0,则线程与其父线程具有相同的优先级;
    
    UINTnStackSize=0,//线程为自己分配堆栈的大小,其单位为字节。如果nStackSize被设为0,则线程的堆栈被设置成与父线程堆栈相同大小;
    
    DWORDdwCreateFlags=0,//如果为0,则线程在创建后立刻开始执行。如果为CREATE_SUSPEND,则线程在创建后立刻被挂起;
    
    LPSECURITY_ATTRIBUTES lpSecurityAttrs=NULL//线程的安全属性指针,一般为NULL;
    
    );
    

      

    八:程序设计过程会使用到很多库, 配置编译器使编译器可以兼容这些库

    九:在各个模块里面书写函数。  在线程函数里面实例化他们。套用个文词吧。画龙点睛。。。 定义了那么多类 ,最后如果不去实例化 都是扯了。。

    实例化就是画龙点睛。

  • 相关阅读:
    报错:Failed to create BuildConfig class
    emulator control无法使用问题
    the import android cannot be resolved
    报错:init: Could not find wglGetExtensionsStringARB!
    Android SDK升级后报错error when loading the sdk 发现了元素 d:skin 开头无效内容
    Eclipse Android环境搭建
    android中导入低版本project可能会遇到的编译问题(转自: Victor@Beijing)
    22.9
    GIT文档
    机器学习的几个问题探讨
  • 原文地址:https://www.cnblogs.com/wenluderen/p/4260612.html
Copyright © 2011-2022 走看看