完整文档
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 核心释放对它们的引用。因此,它只能被调用一次。每个集合都包含一系列活动 - 优化问题的可能解决方案。
模型编辑器 | 分数表编辑器 |
安全增强编辑器 | 测量包监控器 |