草稿: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; ); |
八:程序设计过程会使用到很多库, 配置编译器使编译器可以兼容这些库
九:在各个模块里面书写函数。 在线程函数里面实例化他们。套用个文词吧。画龙点睛。。。 定义了那么多类 ,最后如果不去实例化 都是扯了。。
实例化就是画龙点睛。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了