完整文檔
Win32 執行檔
它是 Visual Basic 6 中的桌面應用程序,可讓您以 GERT 網路的形式描述危險物件的結構併計算每個節點的風險因素估計值。該系統基於以 Visual C++ / ATL 實現的 COM 物件的引擎,並且具有用於評估危險的插件系統。每個插件都是一個 COM 物件。此外,還有一個 COM 物件形式的系統外觀,用於整合到 Mathcad 中。
使用的危險評級量表太大(11 分),無法輕鬆手動進行評級。因此,系統的一個重要部分是計算的自動化組件(見圖 5.1)。為此,提出並實施了一種特殊技術,如下一段所述。事實證明,許多已識別的危險與安全工程師使用的危險重疊。這意味著所開發模型的顯著優勢,體現在評估條件、職業健康和安全的方法可以相對容易地適應我們的許多危險因素。重要的是,現有方法允許在危險生產設施的 GOST、法規和文件的基礎上確定物體的各種定量特徵,並將其轉換為通用尺度(評分)。這些方法的存在和測試至關重要,可以簡化開發估計計算方法的勞動密集過程。所提出的方法可以在許多情況下使用,但並非總是如此,並且並非每個專家都會對這種方法感到滿意。因此,需要更大的靈活性。這就是為什麼基於評估模組的實作開發了一個架構作為與危險相關的外部元件。為了提供這種靈活性,有必要為使用者(通常是專家)提供實現自己的價值估計演算法並使用自己的結構和資料庫的能力。由於此類模組與 Hazard 系統之間的連線類型很簡單,因此不建議使用 Visual Basic for Applications 來增加產品的負擔。此類演算法開發的具體細節取決於處理複雜資料結構的需求。因此,託管腳本也是不合適的,並且不合理地使產品變得更重,因為它旨在實現管理對象的演算法,而不是處理結構化資料。這裡的最佳概念是擴充模組(外掛程式)的概念,它是使用 COM 技術實現的。此類模組通常非常緊湊(體積小,對各種庫和組件的依賴性很小,消耗的資源也很少)。它們可以用任何有允許使用 COM 技術開發元件的工具的語言來實現。這提供了更大的實施彈性,但本身並沒有為任務帶來顯著的技術複雜性。當使用低階工具和語言(例如使用 Visual C++)實作此元件時,勞動強度和複雜性會顯著增加。然而,作為一種對於不熟練的程式設計師來說可以使用、勞動強度最小且非常有效的方法,我們提出了在 Visual Basic 中的實作。與Hazard 的通訊類型非常簡單,元件只需是實作IFactorAssign 介面的進程內COM 伺服器,並且可以使用IDispatch 介面和MGertNet 雙介面充當COM 用戶端。使用 Visual Basic 6 建立由進程內 COM 伺服器實現的此類 COM 物件非常簡單,並且可以由不熟練的程式設計師輕鬆執行,因為它本質上是自動化的。開發擴展的明確本質決定了其規範的內容。對於要被 Hazard 辨識、連結並且能夠與其互動的元件,需要滿足以下條件:
例如,實作了通用擴充功能(在 Visual Basic 6 中),這是一個非常複雜的產品並實現了加權平均技術。使用加權平均法實現的評估模組是通用的,因此它使用複雜的圖形介面、複雜的動態資料結構和編輯器,使您能夠有效地描述各種 OPO。因此這不是一個典型的例子。然而,正如已經指出的,所有這些困難與與危險相互作用的機制無關,而是該實施的特徵,對其的某些要求(作為通用商業產品)。對於特殊情況(官方使用),建議創建具有靜態結構的簡單模組,可以由不熟練的程式設計師使用 Visual Basic 進行有效開發。
Hazard 使用 Visual Basic 6 實作為進程外 COM 伺服器 (ActiveX EXE),並由 COM 類別 Hazard.HazardApp 表示。 Hazard 核心包含危險生產設施事故發展模型的程式碼、模型運行和最佳化演算法的程式碼,使用 Visual C++ 6.0 (ATL) 作為進程內 COM 伺服器 (ActiveX DLL) 實作)並由 COM 類別 GERTNETLib.MGertNet 表示。 Hazard 可由 OLE 自動化用戶端使用,它提供了透過建立 Hazard.HazardApp 來建立自己的實例的能力。 HazardApp 類別具有許多公共屬性和方法,這些屬性和方法提供對 Hazard 功能的有限訪問,考慮到在 OLE 自動化伺服器模式下工作的特殊性,已經實現了一個特殊的層(儘管相當「粗糙」)。此層不僅確保功能的正確執行,還確保對 Hazard 核心的存取。後者也可以直接使用 - 透過建立 MGertNet 實例而不運行 Hazard。 GERTNETLib 庫的大多數介面和類別都是開放和創建的(公共的、可創建的),但它們的實現很大程度上對那裡描述的介面的實作施加了限制,因為介面指標到實作C++ 物件的類型的擴展轉換進行。因此,直接使用Hazard核心必須遵循嚴格的規則:創建Hazard實例:
Dim m_haApp As HazardApp
Set m_haApp = CreateObject( "Hazard.HazardApp" )
為了通知客戶端非同步操作的進度,HazardApp 和 MGertNet 為接收器提供了 ICallBack 介面的連接點。讓我們來看看 HazardApp 實例包含的物件。 GertNetMain (唯讀)-事件開發模型。如果沒有模型(未載入或建立了新模型),則為空(無)。 GertNetMainDsp (唯讀)-事件開發模型的 IDispatch 介面。如果沒有模型(未載入或建立了新模型),則為空(無)。
GN_Opt (唯讀)-用於最佳化的模型的副本。僅在優化運行時設定。
GN_Rang (唯讀)-用於排名的模型的副本。僅在排名進行時設定。
GN_Run (唯讀)-運行期間所使用的模型的副本。僅在運行執行期間設定。
Rep1 (唯讀)-模型報告的集合(運行、模型)。
Rep2 (唯讀)-關於措施集的報告集合(最佳化、綜合、措施集的試驗應用)。
XCollection (唯讀)-安全改善措施的集合。每個複合體都由一組活動 (CollSF) 來描述。每個事件 (SafetyPrecaution) 都包含對模型的影響 (FChange) 的集合。為了存取測度複合體,還有一個公共屬性:SFnn(n)。它已編入索引並且是唯讀的。
枚舉器(唯讀)-枚舉器的集合。
因素(唯讀)-危險因子的集合。該集合中的每個因素都被分配了一個來自 Enumerators 集合的枚舉數。
OptimizResultsGetAndClear (唯讀)- SAFEARRAY(IDispatch)。執行優化後使用。呼叫此屬性時,將傳回指向安全改進措施集合的 IDispatch 介面的指標陣列。在這種情況下,呼叫客戶端成為集合的擁有者,並且 Hazard 核心釋放對它們的引用。因此,它只能被呼叫一次。每個集合都包含一系列活動 - 最佳化問題的可能解決方案。
模型編輯器 | 分數表編輯器 |
安全增強編輯器 | 測量包監控器 |