面向模型的设计-如何不重复切尔诺贝利

继续图形编程语言中OOP的主题,我们将更详细地研究基于模型的设计。 什么是面向模型的设计(MOS),如何烹饪以及如何搭配使用。


在描述控制系统的面向模型的设计时,一些作者在其出版物中传达了“模型”一词意为“控制系统的模型”的想法。 什么不对。



为什么这不是真的,如何正确做以及切尔诺贝利在哪里做,请继续阅读。

这是一个典型的例子-受人尊敬的作者的一篇文章的图片,内容为“使用面向模型的设计的软件开发最佳实践”:


图1. MOS的选项之一。

就个人而言,看着这张照片,立即出现一个不雅的问题,对不起,您在哪儿有测试载体?


或者,例如,推荐典型软件开发过程的图片:



图2. MOS处理的另一个版本。

图片中的模型在哪里? 这是从中获取源代码的盒子? 真的吗? 因此,这再次是控制软件的模型。


尤其需要注意的是初始软件需求。
例如,您对控制系统的需求非常普通,几乎是教科书:


当压力超过极限值时,安全阀的关闭(打开)时间应不超过5秒 。”


在这种方案下,您如何订购以检查超过压力几秒钟后安全阀将打开? 显然这里缺少什么。 我们在万不得已的时候转向了取之不尽的真理之源-维基百科:

基于模型的设计提供了一种有效的方法,可在整个设计过程中建立用于通信的通用框架,同时支持开发周期(V模型)。 在基于模型的控制系统设计中,开发体现在以下四个步骤中:

1.对植物进行建模
2.分析和综合工厂的控制器,
3.模拟工厂和控制器,
4.通过部署控制器来集成所有这些阶段。


对象模型的开发是确定MOS的第一步。 首先是对象的模型,然后对其进行控制。 这是正确的:没有对象模型,“谢谢大家-每个人都是自由的”,这不是面向模型的设计,而是完全的消费者欺诈行为。


为什么这很重要,切尔诺贝利从何而来?


在切尔诺贝利,正是在没有对象模型的情况下发生的事情。 苏联科学家问自己:“如果断开电源,并且向反应堆冷却泵提供动力,该动力将由运行在不运转的涡轮上的发电机提供电流,那将会发生什么? “在涡轮机和发电机停止运行之前,泵将抽多少水通过反应堆?” 有趣的是,他们根据美国核电厂事故的经验提出了这样一个问题,当时美国核电厂的供水不足以冷却,而美国反应堆却融化了。 为了确保我们的反应堆没有融化,我们决定进行实验。 也许这个问题的答案将使下一代RBMK反应堆更加安全。 我们想要最好的,但结果却一如既往。 实验的结果是,安全的反应堆首先被带到危险状态,然后被炸毁。 下一代RBMK反应堆已经不再,而且也不是预期的。 阿们


而且,如果可以在对象的数学模型上做同样的事情,而不是在反应堆上进行实验,那么很可能,我们现在将在全球范围内建造RBMK-2400,而不是VVER-1200反应堆。


在核工业切尔诺贝利事故后,对象模型(核反应堆)是该项目的必要部分。 设计人员必须在模型上显示出问题的情况。 因此,由于监管机构的要求,面向模型的设计早于其他行业出现在核工程师中。


但是,即使没有监管部门的要求,对象的模型也极大地简化了控制系统和对象本身的设计。 现在,我们以“梦想成真”的行业为例进行说明。


正确的面向模型的方法。


作为正确的洁净MOS的示例,考虑为水下采矿综合体的液压控制系统开发控制软件的过程(与往常一样,我在计算机上获得此模型绝对是偶然的)。


由供应来控制产生的天然气的主要流量是通过液压水下配件来进行的。 在岸上有一个泵站,该泵站为液压系统提供压力,在有压力的水下通过脐带供油。 阀的打开和关闭由液压执行器执行,液压执行器由分布式控制系统控制。 该系统包括:


  • 整个领域的地面控制模块;
  • 一组水下控制模块(PMU),可直接控制阀门。


为了方便安装和维护,将管道组合成多个歧管,其中必要的阀门和控制模块安装在一个平台上。 如果在地面站中可以使用标准SCADA工具,存档服务器和具有常规和(或)实时操作系统的PLC,则水下控制模块通常是不可操作的微处理器,其控制代码必须与海岸控制软件分开开发。 (没有C ++,只有C,只有硬代码)然后,应将其中的几个PMU集成到通用系统中并进行测试。 同时,整个系统应作为一个整体工作,并规定在水下30年内可打开和关闭阀门。


到目前为止,货架上使用的所有设备都是西方设备,因此货架受到制裁,这使任务变得复杂。 因此,有必要创建一个复杂的系统,其中许多技术解决方案对我们来说都是新的且未经处理。 如何获得结果,并尽可能减少设计错误? 对西方开发商有利:他们已经有经验,知道水下采矿的陷阱。 在这里,面向模型的设计可以帮助开发人员。 我们不会像切尔诺贝利的苏联核科学家那样在昂贵的设备上进行实验,而是创建对象的模型,然后对该模型进行实验。


水下控制系统的集成模型


对于软件设计,将以软件包的形式创建一个集成模型,其中包含水下的液压流体流模型以及配件和控制系统项目。 (见图3)



图3. SPD管理系统集成模型的软件包。


该软件包包含一个项目-地面液压站的模型(图3中的文件200.prt),该模型提供了用于水的地面液压流体供应系统设备动态过程的建模。 (见图4)



图4.地面液压站的设计方案。


与物理过程模型同时,正在开发一个控制系统项目,该项目可用于打开和关闭设备以及控制该设备的操作模式。 图5显示了地面控制模块的草图控制算法。



图5.地面模块控制系统的设计。


在此阶段,可以在不同团队之间划分控制算法的开发。 例如,对于陆基液压站的开发人员而言,海底模块的成本和其中的压力是边界条件。 对于水下设备的开发人员,边界条件是岸上泵站产生的压力。


水下控制模块(PMU)的开发是基于在歧管之间划分主要燃气干线的项目而进行的。 首先,形成井,确定井与岸之间的管道和配件,然后开发用于这些阀的液压控制系统。


对于每个水下模块,形成一个控制系统项目模型和带有已安装阀门的歧管液压系统的设计模型。 在液压系统的设计方案中,安装了阀,这些阀由该水下模块控制。 该设计可以与地面控制模块的开发并行进行,而开发可以独立和并行进行。 为了开发PMU算法和阀门操作,外部系统由控制命令和液压系统的边界条件定义。


考虑水下控制模块(PMU)502。此处使用两个项目:

  • 502.prt-液压系统模型(图6、7);
  • 502a.prt-PMU控制系统的项目(图8)。


图6. PMU的液压回路。


该设计方案提供了液压控制系统行为的模拟,并计算了由502 PMU控制的系统中的流量和压力。 计算出的液压回路使您可以设置对执行器的影响,并获得在物理过程模型中计算出的传感器数据。 只要在502 P区块中没有地面站(图6的左下角),我们就可以将水力发电站产生的压力设置为边界条件。


在该系统中,该图显示了6个液压截止阀和控制阀(ZRA),每个阀固有地代表一个液压缸,该液压缸连接到两条高压和低压管路。 我们向圆柱体的上部施加更大的压力,压力使杆向下移动,向圆柱体的下部施加更大的压力,杆上升。


开关由位于白色块内部的控制阀控制(参见图7)。



图7.模型中的分配阀块。


操作原理很简单:根据滑阀的位置,气缸室将连接到不同的管线。 移动阀芯-改变了活塞杆在油缸中的运动方向。 (有关水力建模的更多详细信息,请参见此处...



图8. PMU控制系统的设计。

水下控制模块的项目管理软件包含多个计算模块,每个计算模块都可以由单独的开发人员或团队进行开发。 在这种情况下,根据功能属性将模块分离,每个块负责控制某种类型的阀门。 应用了面向对象编程的方法,其中的块是OOP类( 此处此处的更多详细信息)


考虑为切断和控制设备设计控制单元的过程。 电路中的该模块接收4个输入信号并生成8个输出信号。 (见图9)



图9. ZRA控制单元(类型1)。


内部框图由两部分算法组成。 第一页显示在图10a中,第二页显示在图10b中。



图10a。 阀门控制单元的设计方案。 工作表1。



图10b。 阀门控制单元的设计方案。 工作表2。


开发本机时,使用以下类型的信号:

  • 通过通讯线接收的信号(蓝色方块);
  • 从信号数据库接收到的参数和信号(浅黄色方框);
  • 信号传输到信号数据库(浅蓝色块);
  • 信号传输到内存(黄色亮块);
  • 从内存收到的信号(绿色亮块)。

阀门控制单元的设计图是矢量。 这意味着不是在每条线上传输单个控制信号,而是传输信号矢量,信号的尺寸对应于安装在PMP中的此类设备的数量。 为了在计算单元与特定设备的信号,参数和命令之间进行通信,使用了接口单元。


因此,已经开发并测试了典型元件的一个控制电路,因为这种类型的设备连接到水下控制模块,所以可以在电路上放置尽可能多的接口单元。 在这种情况下,在PMU中,有两个用于1型截止阀和控制阀的接口单元(见图8)。


控制单元所需的所有可变信号和参数都放在ZRAT1信号的相应类别中。 该类别的一部分如图11所示。


单独类别的分离允许将控制软件模块的开发划分为多个部分,并明确定义程序各个部分之间的交互界面。 因此,控制模块的开发沿着与软件中其他模块的接口独立进行。



图11. ZRAT1控制单元的信号组


项目编码系统


系统包含此类设备的多个实例,这意味着管理软件中甚至还有更多变量。 为了消除与变量名称相关的错误,使用了设备编码系统。 在信号数据库中,形成了信号组,其唯一名称包含系统代码,设备类型和系统内的唯一代码。


在该示例中,在液压回路上,我们有两个实例位于系统502中,由ZRA TYPE 1块控制。 (参见图12。)它们在数据库中的名称是502GTVOO1502GTVOO2 。 信号数据库窗口如图12所示。



图12.控制系统SPD设备信号数据库。


编码系统为控制软件的模块确定变量的名称,并允许您在整个开发的软件模块中自动执行信号命名过程。 任何变量名称均由信号组名称和由“ _”符号连接的变量名称组成。


对于与“ ZRA Type1”射击范围相关的任何截止阀和控制阀,输入信号的名称,状态变量,输出变量的外观类似于“ 电枢代码 _” signal_name 。 对于阀门502GTV002 ,信号数据库中有65个变量,例如:


队伍:
502GTV002_open_rem- 远程打开命令。
502GTV002_close_rem- 远程关闭命令。
502GTV002_open_rem_z- 关闭的初步命令。

钢筋状态变量:
502GTV002_opened- 阀门完全打开。
502GTV002_notopened- 阀门未打开。
502GTV002_notclosed- 阀门未关闭。
502GTV002_losed- 阀门完全关闭。

液压油进出口参数:

502GTV002_XTK1- 工作管路中的压力。
502GTV002_XTK2- 压力管路中的压力。
502GTV002_XTK3- 排放管路中的压力。

如果我们在此方案中再增加一个增强单位,则其名称将为502GTV003,根据公认的编码系统


502模块名称。
GTV- 加固类型。
003- 模块中此类型阀门的序列号。

在控制模块的开发过程中,可以在信号数据库中设置参数值,从而可以验证单独控制单元的运行状况。 特别地,在该示例中,阀的状态由液压流体入口和出口管线中的压力确定。 要与系统的其余部分分开测试控制模块,可以在信号数据库中手动设置此压力。


当该单元作为PMU的一部分运行时,有必要将压力值从各个传感器传递到控制单元。 为此,使用接口块,其名称与设备的名称重合-见图。 13.为了调试方便,同一块显示从传感器接收到的信号值。



图13.从传感器到控制单元ZRA T1的信号传输。

由于该单元的运行,形成了一个团队来移动控制阀中的阀,这些阀负责名称为502GTV002的控制装置。


在联合计算期间,将在水力模型中计算出的参数值传输到传感器读取处理单元(参见图14),在其中分析获得的数据的可靠性,过滤并将其转换为所需的测量值。



图14.处理传感器的设计方案。

图14所示的用于处理传感器读数的计算方案也是一个功能齐全的程序。 要将电路传输到实际控制设备,将实际传感器的输入/输出板接收到的值放在实际设备的数据交换时钟上的“估计值”变量中就足够了。


该回路也是矢量回路,可处理液压回路502.prt中包含的所有传感器。


经过设计和测试的标准设计模块放置在标准解决方案库中,然后供其他开发人员用于所有此类设备。


在调试并检查了典型程序的所有必要计算方案后,任何水下模块的控制软件的开发都变得清晰,简单和有效。 您可以分两步添加任何设备:


  • 放置设备控制单元。
  • 添加与将连接到PMU的设备实例数量一样多的接口单元。

图形语言中的OOP方法论在实践中。


.


. . .


.


« , () 5 »


, . . . . . , , , . , , - , .


, - (. . 15).



15. .


. , 9, 10 7, 8 (. . 16).



16. .


(. . 17). , , . , , .



17. .


, , .


18 . , .


19 .



18. 2- .



19. .


, , , , 30,5 , , 32, .


« () 5 »


, 5 , . , « () 5 », , , , 8 ( ). ( ).


结论


- , !


. .


. .


, , , , . , - , .


- , !


, — .

Source: https://habr.com/ru/post/zh-CN456782/


All Articles