Datacom基本架構
- 顯示界面
- 資料結構
- 對點函式
- CheckLink函式
- 通信
- 與STS進行共享記憶體交流
- 與DCS通信
顯示界面

??左側界面(CEmluatorDataBaseView)為STS工程內通訊點,右上方(CLn2000DataBaseView)為DCS通信點,右下方(CDataComView)為對應的樹控制元件,中間(CDataRelationView)為兩者通信點的顯示界面
資料結構
??在CDataComApp::InitInstance()初始化函式里的OpenShareMem()函式里打開STS的共享記憶體,初始化了關于STS的指標和變數
PVT* pPVAT; //指向PVAT陣列的指標
PVT* pPVDT; //指向PVDT陣列的指標
char * pAVNumber; //指向PVAT共享記憶體開始存放AV點總數的指標
char * pDVNumber; //指向PVDT共享記憶體開始存放DV點總數的指標
int iPVANumber;
int iPVDNumber;
unsigned int *piPVANumber; //SS中指向PVA資料個數的指標
unsigned int *piPVDNumber; //SS中指向PVD資料個數的指標
// Cmap mapp;//存取PVAT、pvdt陣列的值;
//double* pPVA; //指向PVA陣列的指標
char *pSSData; //指向SS共享記憶體的指標.
unsigned int* pPVA; //指向PVA陣列的指標
unsigned int* pPVD; //指向PVD陣列的指標
MCB* pMcb; //指向MCB陣列的指標
??對于DCS的資料點讀取是通過讀取上位資料庫生成的資料庫檔案來獲得的,是通過CDataComApp::FindPAS300DBFile()獲取,通過某種方式(還沒有找到相關代碼),初始化了以下變數,
CDataAIList m_DataAIList; //存放AI資料點的鏈表
CDataAOList m_DataAOList; //存放AO資料點的鏈表
CDataDIList m_DataDIList; //存放DI資料點的鏈表
CDataDOList m_DataDOList; //存放DO資料點的鏈表
對點函式
??對點函式為CMainFrame::OnAutocreaterstable() 其意義是自動自動對應DCS資料庫和STS中的重名點,
??具體來說就是看m_DataXXList和pPVXT是否有有同名的點且這兩個同名點須沒有鏈接輸入,如果有的話把相關資訊加在m_RelationshipList鏈表里,從而建立連接關系,
CheckLink函式
??函式的主要功能在于一方面檢查m_RelationshipList鏈表中的鏈接索引號是否正常
另一方面初始化相關的變數,主要有:
//這四個陣列的初始化為根據遍歷DCS里的四個鏈表和m_RelationshipList的元素進行索引比對
//將鏈表里的相關資訊賦給陣列里的元素,前兩個陣列的索引由InsertPointByNode求出,后兩個由InsertPointBySort求出
//當遍歷完成后再將陣列元素的地址賦給m_RelationshipList鏈表元素CRelationshipItem里的空指標pData
CSimpleDataAI m_SimpleDataAI_M[MAXLINKNUM]; //和LN建立連接的AI點
CSimpleDataDI m_SimpleDataDI_M[MAXLINKNUM]; //和LN建立連接的DI點
CSimpleDataAO m_SimpleDataAO_M[MAXLINKNUM]; //和LN建立連接的AO點
CSimpleDataDO m_SimpleDataDO_M[MAXLINKNUM]; //和LN建立連接的DO點
//主要資料的互動都是通過這四個陣列
typedef CMap<unsigned int ,unsigned int, int, int> Cmap;
Cmap MapAO,MapDO;//由點的索引(ID)找上述陣列的索引
和
int iValideLinkAONum; //有效的DCS AO點連接個數
CRelationshipItem* pValideLinkAO; //存放有效DCS AO點連接的鏈表
int iValideLinkDONum; //有效的DCS DO點連接個數
CRelationshipItem* pValideLinkDO; //存放有效DCS DO點連接的鏈表
//是從m_RelationshipList提取出來的AODO點
通信
??開始通信函式OnStartbc里完成的主要任務一方面通過CheckLink函式初始化相關變數,
??另一方面開啟相關DCS通信執行緒,打開定時器開始和STS進行共享記憶體交流,出現錯誤的話把相關錯誤寫到“檢測錯誤記錄.txt”檔案里,
與STS進行共享記憶體交流
??在MainFrm里的OnTimer函式里先是通過訪問:
int iValideLinkAONum; //有效的DCS AO點連接個數
CRelationshipItem* pValideLinkAO; //存放有效DCS AO點連接的鏈表
int iValideLinkDONum; //有效的DCS DO點連接個數
CRelationshipItem* pValideLinkDO; //存放有效DCS DO點連接的鏈表
來把DCS的AODO寫到pPVA和pPVD的相關輸入點(相對于STS)里,再從pPVA和pPVD的相關輸出點(相對于STS)寫到AIDI陣列里
(對于AODO,沒有直接使用陣列,而是使用CRelationshipItem類里的指標,這個指標視該點DCS側的性質指向著對應的陣列其中的元素)
與DCS通信
??接受DCS點的狀態在ReceiveAndDecodeaAVPackage和ReceiveAndDecodeaDVPackage兩個執行緒入口函式里,實際上每個站都要開辟兩個執行緒,對應這兩個入口函式,具體以UDP的方式接受DCS發過來的AVDV值,寫入上面的AODO陣列里,
??發給DCS相關資料的執行緒在CodeAndSendPackage入口函式里,按站打包,把AIDI陣列里面的值發送出去,每個包的組成是:
開始標志位7698 ->站號 ->資料區長度 ->資料點總數 ->n個點(資料型別 ID 實時資料) ->結束標志位1234
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/218783.html
標籤:其他
上一篇:python斐波納契數列拙見
