草稿: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;

);

  

八:程序設計過程會使用到很多庫, 配置編譯器使編譯器可以兼容這些庫

 

九:在各個模塊里面書寫函數。  在線程函數里面實例化他們。套用個文詞吧。畫龍點睛。。。 定義了那么多類 ,最后如果不去實例化 都是扯了。。

實例化就是畫龍點睛。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM