草稿: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下有用。

);
复制代码

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;
 
);

  

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

 

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

实例化就是画龙点睛。

 

posted @   wenluderen  阅读(1753)  评论(9编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示