APP下载

基于Simulink/Stateflow模型的LNG加注船控制软件开发

2016-01-08张兴龙

朱 晶, 张兴龙

(上海船舶运输科学研究所 航运技术与安全国家重点实验室,上海 200135)

基于Simulink/Stateflow模型的LNG加注船控制软件开发

朱晶,张兴龙

(上海船舶运输科学研究所 航运技术与安全国家重点实验室,上海 200135)

摘要:LNG加注是LNG燃料水上供应链中的关键环节,也是推动LNG作为船用燃料必须首先解决的问题;而LNG加注船加注控制逻辑较复杂,安全性要求高,传统的软件开发方法人工编写代码工作量大,且容易出错。基于此,提出一种快速的自动生成嵌入式软件代码的开发方法。首先在Simulink/Stateflow中构建基于有限状态机模型的仿真系统,然后利用Embedded Coder工具箱由模型自动生成C语言代码,再根据LNG加注船项目进行二次开发整合,最终生成优化的加注控制程序软件。经仿真验证,证明了该方法的可行性,在保证软件质量的同时,大大缩短了软件的开发周期。

关键词:LNG加注船加注;LNG加注控制;Stateflow;Embedded Coder

0引言

随着《国际防止船舶造成污染公约》附则VI和其他一些限制船舶污染物排放的相关法规相继实施,以及石油价格不断攀升,以柴油为主要燃料的船舶运输业面临着节能减排和成本增加的双重压力。

液化天然气(Liquefied Natural Gas, LNG)是一种公认的清洁、高效、优质能源,已在化工、电力、城市燃气等领域得到广泛应用。

在LNG船用燃料工程应用方面起步最早的是挪威,挪威船级社早在2001年就制定出了LNG动力船的规范。我国从2010年才开始在内河开展将LNG作为船用燃料的试点工程。2014年5月26日,中国交通运输部海事局发文核准了“武家嘴57”作为LNG燃料动力试点船舶。该船是我国第一艘获得LNG燃料动力改造批准的海船,标志着我国海船LNG燃料动力试点正式启动[1]。资料显示,在2016年之前,我国新建或改造的LNG动力船舶总数可能超过2 800艘,且船舶的类型涵盖广泛,包括油船、客船、游船、普通货船、集装箱船、滚装船、港内工程船等[2]。随着越来越多的国家正在加入到“油改气”的行列中来,LNG动力船的发展开始进入了春天。

然而,LNG作为船用燃料还有一些问题亟待解决。LNG燃料加注点数量不足、基础配套设施不完善、成熟的加注方式案例少等都是制约LNG动力船普及的阻力。

LNG加注是LNG燃料水上供应链中的关键环节,也是推动LNG作为船用燃料必须首先解决的问题。在船舶LNG燃料加注方面,目前提出的加注方案主要有5种:气体燃料储罐整体更换(the use of portable tanks)、槽罐车加注(tank truck-to-ship bunkering,TTS)、岸基加注(terminal/pipeline-to-ship bunkering,PTS)、趸船加注(pontoon-to-ship bunkering)、加注船加注(ship-to-ship bunkering,STS)。[3]其中加注船加注又称移动加液船加注,具有灵活性高,可以在码头、河道或海上对各种类型的船舶进行加注,以及装载率高、加注容量大等优点。这些优点使得其很有可能成为LNG燃料动力船的主要加注方案。

LNG加注船加注控制是保证LNG燃料水上供应链安全高效的核心。传统的软件开发由开发人员手工编写代码,工作量大,且代码质量不容易保证。此处利用Matlab软件中的Simulink/Stateflow组件,以状态机理论为基础,通过图形化的方式建立加注控制器的仿真模型,利用Embedded Coder工具箱生成嵌入式软件代码,并针对具体项目对生成的代码进行整合开发,得到适用于特定硬件平台的加注控制软件程序。

1LNG加注系统

1.1LNG加注管路系统

以某型LNG加注船为目标船,该船采用2个吊舱式电力推进器作为动力源,全船电力来自于2台LNG燃料发动机。船上配备有1个LNG低温储罐和1个LNG燃料罐。低温储罐是加注船存储LNG的主要容器,主要用于对外加注;燃料罐用于存储加注船自身发动机所需的LNG燃料。图1为LNG加注船加注部分的主要管路系统框图。

图1 加注部分主要管路系统框图

LNG低温储罐CC01布置在主甲板上,储罐后端设置有冷箱,冷箱内布置有潜液泵、质量流量计及相应的管路、阀件和附件。除了图1中所示部件以外,在储罐及管路的相应部位还配置有若干温度变送器、压力变送器和液位变送器等传感器。LNG加注船通过岸基向低温储罐CC01补给,并可通过潜液泵增压向燃料罐CC02充装或经加注装置向客户船进行加注操作。

1.2LNG加注控制系统

LNG加注控制系统包含加注控制功能模块、安全保护功能模块、监测报警功能模块和储罐高高位报警模块4个功能模块。

此处以加注控制功能模块为例,介绍LNG加注控制器软件代码的生成流程。

LNG加注控制模块的控制功能包括LNG低温储罐充装、系统预冷、燃料罐充装和对外加注控制。这些功能通过控制LNG管路中阀门的开启和关闭,以及潜液泵的起动和停止来实现。

1.2.1低温储罐充装

低温储罐充装是指将岸基LNG加液站中的LNG装载至LNG加注船的低温储罐内,充装过程中主要靠岸基加液站来控制LNG的流速及流量。当加注船补液充装口与岸基加注口连接、补液回气口与岸基回气口相连完成后,通过控制货控台的加注控制面板上的按钮来执行和结束充装。另外,当LNG低温储罐液位高于储罐内径85%时,LNG加注控制器会自动结束充装。

1.2.2系统预冷

在对客户船进行加注或对燃料罐进行充装之前,首先要对系统进行预冷,包括潜液泵预冷和流量计预冷2部分。

潜液泵预冷时,开启LNG低温储罐底部的出液阀,使储罐内的部分LNG液体流入泵池,再经泵池溢流口处的管道回至低温储罐。当泵入口与溢流口温度均低于-100 ℃,且两者温度差<3 ℃后,再延时15 min完成泵预冷。潜液泵预冷完成后,启动泵,开始对流量计进行预冷。

1.2.3燃料罐充装

对燃料罐进行充装的优先级高于对客户船进行加注,当对外加注的过程中出现燃料罐需要充装的情况时,对外加注须停止。燃料罐充装可通过操作面板上的燃料罐充装开始按钮来启动,当燃料罐液位达到85%后自动停止,也可随时通过操作面板上的燃料罐充装停止按钮手动结束。

1.2.4客户船加注

客户船加注是指将加注船LNG低温储罐中的LNG加注至客户船的LNG储罐中,加注量通过加注船上的液相流量计和气相流量计来监测。加注船配备有一组加注软管,可连接至客户船的LNG接收口。加注的执行和结束通过货控柜面板上的按钮来控制。

2基于Simulink/Stateflow的LNG加注控制软件设计

2.1开发环境简介

有限状态机(Finite-State Machine,FSM)又称有限状态自动机(简称状态机),是一种具有离散输入、输出状态的系统的数学描述,以“事件驱动”的方式工作,通过离散事件驱动下系统状态间的转移关系来描述一个系统的行为[4]。

Stateflow是集成于Simulink中的交互式图形化设计与开发工具,其仿真原理是有限状态机理论,主要用于事件响应控制系统中的复杂控制逻辑的建模与仿真。Stateflow的模型框图一般会嵌入到Simulink仿真模型中。利用Stateflow可视化的模型和直观的仿真能力,可以清晰、简洁地反映出复杂动态逻辑关系[5]。

Embedded Coder(早期版本中为Real-Time Workshop Embedded Coder,从Matlab Release 2011a版本开始,Real-Time Workshop Embedded Coder工具箱的功能被Embedded Coder工具箱所替代,此处生成代码所用的Matlab版本为Release 2014a)可从Simulink模型图、Stateflow模型图和Matlab函数中生成可读、紧凑且快速的C或C++代码。Embedded Coder在Simulink Coder的基础上,针对嵌入式系统提供了许多配置选项和高级优化,以便对所生成代码的函数、文件和数据进行细粒度控制。这些优化可提高代码效率,且有助于和生产中使用的已有代码、数据类型及校准参数集成。

2.2状态图设计

根据前文所述LNG加注控制模块的功能及控制流程,设计LNG加注控制模块状态图(见图2)。

图2 LNG加注控制模块状态图

图2共包含8个状态,分别为:Standby,LNGLoading,PumpPrecooling,PumpPrecoolFinish,FlowmeterPrecooling,CustomBunkering,FuelTankFilling和EmergencyStop。限于篇幅,图中并未标示出所有状态转移语句。

图2中各个状态间转移的条件:一部分是加注控制面板上相应按钮的开闭状态,如LNG低温储罐充装的开启、潜液泵的启动和对外加注的启动与结束等;也有部分是图形函数的执行结果,如泵预冷完成状态判断、LNG低温储罐和燃料罐充装完成状态判断等。

模型中使用的部分图形函数见图3。

图3LNG加注控制模块模型部分图形函数

2.3验证加注控制模型

Simulink提供了一些用于验证Stateflow模型功能的组件,此处验证模型时使用到了Signal Builder和Scope这2个功能组件。

1) Signal Builder组件用来生成测试用例,利用Signal Builder的不同通道输出时序不同的脉冲信号或模拟量信号,进而模拟实船控制面板按钮及传感器信号。

2) Signal Builder生成的测试信号输入到封装了Stateflow模型的Subsystem组件中,Subsystem组件的输出信号送至Scope组件显示出来,用于检验加注控制模型是否正确。

2.4代码自动生成

以下为生成定制的嵌入式代码的主要步骤。

2.4.1配置模型参数

参数配置对话框中包括了许多标签页,为了能够生成针对嵌入式系统优化的代码,主要对其中几个标签页进行设置。

在Simulink中打开Simulation->Model Configuration Parameters,配置以下选项。

(1) Solver:设置Solver类型为离散(discrete),Type设置为固定步长(Fixed-step),步长设置为0.01 s;

(2) Code Generation:此标签页中主要是选择系统的目标类型,即调用合适的TLC文件来生成代码。点击System target file栏后的Browse按键,然后在弹出的对话框中选择“ert.tlc-Embedded Coder”,即使用Embedded Coder来生成代码,且选择目标语言为C语言。

除了以上2项必须配置的选项外,还可根据实际需求配置其他一些选项卡。例如:

(1) Hardware Implementation:在此选项卡中,可根据所用的硬件平台配置相应的主控芯片,以使Embedded Coder直接生成适配特定硬件目标的嵌入式代码;

(2) Comments:选中Code Generation->Comments->Simulink data object descriptions复选框,可在生成的代码中显示Simulink模型中自己编写的注释文字;

(3) Code Style:在Code Generation->Code Style选项卡中,可设置生成代码的风格。例如可以选择生成的代码是Allman或K&R的缩进风格。

2.4.2生成代码

勾选Code Generation标签页中Generate Code Only复选框,不编译生成可执行文件,点击Generate Code按钮可以直接生成代码。

2.5生成代码分析

利用Embedded Coder工具箱生成的代码默认保存在Stateflow模型目录中的model_ert_rtw(model代表模型名称,下同)文件夹下。该文件夹中有ert_main.c,model.h,model.c,model_private.h,model_types.h和rtwtypes.h等6个自动生成的嵌入式C代码文件。

ert_main.c文件为main函数所在的源文件,该文件中包含了自动生成的main例程函数。

model.h文件中主要定义了3个结构体。其中:DW_model_T结构体定义了状态图模型中所有的状态标志;ExtU_model_T结构体定义了所有的外部输入端口;ExtY_model_T结构体定义了所有的外部输出端口。

model.c文件包含了代码生成所得到的主要函数,具体包括由状态图中的图形函数分别生成的若干个静态函数,以及model_initialize,model_step和model_terminate3个全局函数。由状态图中的图形函数生成的静态函数仅可在model.c文件中被调用,用户一般无需关注。可供用户调用的只有上述3个全局函数。其中,model_step函数实现了模型在一个步长时间内所有的控制算法。代码执行过程中,主函数循环调用model_step函数,model_step函数通过判断状态标志来执行相应的分支语句。

model_private.h,model_types.h和rtwtypes.h等头文件包含了对其他一些参数、变量、数据结构的定义和声明。

2.6代码整合

对于Matlab中的代码自动生成功能,由于Hardware Implementation选项卡中可选的主控平台类型有限,并不是针对任何硬件平台都可以直接生成已配置好底层(如I/O端口)的代码[6]。而在实际应用中,由于性能、成本等要求不同,使得微控制器的品种繁多。不同型号的微控制器在功能、性能和封装等方面很少兼容,这就需要在自动生成的C代码的基础上进行二次开发,手工编写程序框架和硬件系统的初始化程序,并与自动生成的代码进行有机整合。

代码整合主要是对ert_main.c文件进行修改,也可使用自建的包含main函数的源文件替代该文件。在手工整合的过程中,编程人员只需考虑模型的接口,配置好主控芯片的时钟、总线以及端口映射等功能。整合后的嵌入式代码要保证定时器时钟周期与模型仿真时的固定步长一致,模型中的输入、输出变量与所用微控制器的端口对应。

3结语

随着LNG动力船逐渐被推广,建设LNG水上加注设施显得越来越紧迫。LNG加注船加注方式凭借其诸多优势,在发展LNG加注设施方面扮演着十分重要的角色。在介绍LNG加注船加注控制过程的基础上,重点研究了基于Simulink/Stateflow的加注控制软件的设计、仿真、验证及自动生成方法。通过对模型

进行仿真测试,验证了该方法的可行性。基于Stateflow状态图的可视化建模仿真开发方式提升了软件开发的可靠性,便于发现程序设计时的逻辑错误,同时有效缩短了软件的开发周期。

参考文献:

[1]赵虎.我国海船LNG燃料动力试点正式启动[N].中国水运报,2014-5-28(1).

[2]渠沛然.船用LNG或成未来消费中流砥柱[N].中国能源报,2014-7-21(13).

[3]Germanischer Llyod.Study on Standards and Rules for bunkering of gas-fuelled Ships [R].European Maritime Safety Agency,2012.

[4]陈小琴,蒋存波,金红.状态机原理在控制程序设计中的应用[J].制造业自动化,2007,29(10):57-60.

[5]张威.Matlab/Stateflow逻辑系统建模[M].西安:西安电子科技大学出版社,2007.

[6]任佳丽,曹海燕.嵌入式软件自动代码生成和代码整合方法研究[J].太原理工大学学报,2013,44(4):518-521.

收稿日期:2014-10-21

作者简介:朱晶(1988—),男,河南民权人,硕士生,主要从事舰船自动化研究。

文章编号:1674-5949(2015)01-073-05

中图分类号:TP311.52

文献标志码:A

Developing Software of LNG Ship-to-ship Bunkering
Control with Simulink/Stateflow

ZhuJing,ZhangXinglong

(Shanghai Ship and Shipping Research Institute, State Key Laboratory of Navigation and

Safety Technology,Shanghai 200135, China)

Abstract:Bunkering is an important part of LNG-fuel supplying on water. It is also the first problem must be solved in promoting the usage of LNG as the fuel for ships. The control logic for LNG ship-to-ship bunkering is complex, and the safety requirement is high. It is a huge job to write the control software manually, and it is not unusual to make mistakes. In view of this problem a method of automatic programming of the control software is put forward. A simulation system based on finite-state machine is built in Simulink/Stateflow. The C language code based on the simulation system is produced automatically by using the Embedded Coder toolbox. The further development integrates the embedded code with the control system. The feasibility of this method is proved by simulation. This method ensures the quality of the code, in the same time, greatly shortens the software development cycle.

Key words:LNG ship-to-ship bunkering; LNG bunkering control; stateflow; embedded coder