基于DDE技术的船舶液舱装载状态及稳性的实时监测系统设计
2014-09-27宗钰炀周玉龙
宗钰炀 周玉龙 周 密
(江苏科技大学 船舶与海洋工程学院 镇江 212003)
引 言
船舶的浮态及稳性对船舶安全顺利地完成其使命任务影响十分重大,因而实现船舶的浮态及稳性的实时准确监测报警显得尤为必要。
目前的监控系统上位机主要采用工业组态软件,它相当于一个“二次开发平台”,一般不需要自己编写程序,使用起来方便快捷。其中西门子的WinCC组态软件不仅能够生成可视化监控界面,实现对监控对象的实时监测报警,而且由于其具有强大的SQL2005数据库,还可实现数据归档、报警记录以及报表打印等功能。[1]通过WinCC组态软件设计的监测界面可以直观显示船舶液舱的液温液位数据,虽然缺乏对复杂数据的计算处理功能,不能实现对液舱装载及浮态稳性数据的计算,然而VB可以很好地解决这一问题。为了更好地发挥WinCC和VB软件的优势,本文利用数据交换技术将WinCC液舱液位液温监测系统和刘文艳学者采用VB编程软件设计的“浮态调整辅助决策系统”[2]结合起来,从而获得更为理想的结果。
目前,组态软件和VB应用程序主要采取DDE、OLE、OPC三种方式进行数据交换。[3]本文利用VB与WinCC组态软件的功能互补性,采用DDE技术进行数据的动态交换,实现船舶液舱装载及稳性的实时监测系统。
1 DDE技术
动态数据交换(Dynamic Data Exchange,简称DDE),是一种在Windows操作系统中实现进程间通信的技术。DDE使用系统共享内存来实现进程之间的数据交换,并通过DDE协议同步传递数据。使用DDE通讯需要有两个Windows应用程序,其中一方作为服务器处理信息,另一方作为客户机获得信息。[4-5]客户机与服务器之间数据交换的方式称为连接。DDE有三种连接方式:热连接、温连接、冷连接。[6]热连接能够实现数据的双向通信,而温连接与冷连接均不能实现。所以根据监测设计系统的需求,本文采用热连接的方式进行WinCC液位液温监测系统软件与“浮态辅助决策系统”(如图1所示)之间数据交换。
图1 “浮态辅助决策系统”界面
2 基于DDE的监测系统的实现
2.1 系统设计
以某船为原型,对该船各类舱室的液位、液温进行监测,共设置280个监测点,并根据监测液舱舱深及液体性质选择相应的压力传感器。但是由于液体密度的变化、电源电压的波动、信号的衰弱等均会使测量结果产生较大误差,因此,还应对监测数据进行修正。例如根据压力传感器原理= ρgh,采用双差压法,即一个压力传感器测量已知液位下的压差,另一个测量需测液位下的压差,通过计算消除密度对测量结果的影响。并确定电源电压波动、信号衰弱等与测量值和实际值之间的关系,通过相应公式对这些影响进行消弱或消除,最后在PLC中对这些计算公式进行编程,实现对监测值的修正。将PLC与传感器进行正确连接,并通过PROFIBUS电缆与上位机进行连接。在上位机中采用WinCC软件对监测界面、监测变量、采集周期、归档周期、网络传输速率等进行组态设置,实现组态软件WinCC对船舶液位、液温的实时监测系统。
原有的“浮态辅助决策系统”需要人工(手动)输入现场液舱液位数据后才能进行液舱数据及浮态稳性数据的计算,其系统界面如图1所示。采用人工输入不仅会造成输入误差,而且从采集现场数据到人工输入数据也产生了相应的时间误差,工作繁琐,不符合现代化船舶监测系统的要求。本文通过DDE数据交换机制,将WinCC液位监测系统与“浮态辅助决策系统”完美结合,并实现了两个系统平台之间的数据交换。
系统运行的具体过程如下:组态软件WinCC通过PLC和传感器实时获取现场液位、液温的采集数据;通过DDE通讯机制,将液位数据传递给VB应用程序“浮态辅助决策系统”;在VB应用程序中完成液舱相关数据(液舱液重、重量的垂向坐标、重量的纵向坐标等)以及船舶浮态稳性数据的计算,实现VB系统对船舶液舱装载及稳性状态的实时监测;将VB应用程序计算得出的重要稳性数据通过DDE传递给WinCC,实现WinCC系统对船舶装载及稳性状态的实时监测。系统结构图见图2。
图2 系统结构
2.2 以VB作为DDE客户端的实时监测系统
当WinCC软件中的变量通过传感器和PLC获取到现场液位数据后,该系统并不能进行复杂的数据处理计算,这就需要“浮态辅助决策系统”来解决这一问题。以WinCC液位监测系统作为DDE服务器,VB应用程序“浮态辅助决策系统”作为DDE客户机,通过DDE服务器将监测到的实时液位值传递给DDE客户机。
为实现两个系统软件对DDE的支持,以WinCC系统作为服务器,VB应用程序作为客户机,根据系统设计需要作如下所示设置:
(1)在WinCC项目的WinCC Explorer中的“计算机属性->启动”中添加应用程序DdeServ.exe,同时添加命令行参数:/v/n;
(2)在VB应用程序“浮态辅助决策系统”的窗体上添加140个文本控件用来读取船舶的140个液舱液位值,并对这些控件进行如下的属性设置:Visible=False;LinkTopic=WinCC︱﹨PC-201305161509﹨zyy﹨zyy.mcp;LinkItem=1号燃油舱液位(各个文本控件需要读取WinCC中的对应变量名);LinkMode=Automatic。
当WinCC系统与现场PLC以及传感器连接正确后,激活WinCC系统,同时运行“浮态辅助决策系统”。此时,通过液位传感器采集到的液位信号,通过PLC的转换为数值信息,传递给WinCC中设置的相应变量。通过以上两个步骤的设置,此时作为DDE服务器的WinCC就会根据作为DDE客户机的“浮态辅助决策系统”的要求,实时传递数据。由步骤(2)中的设置可知,WinCC中读取液位数据的相关变量就会实时的将液位数值更新给中添加的对应的文本控件。例如,当文本控件的LinkMode属性设置为“1号燃油舱液位”时变量名为“1号燃油舱”的变量就会将自己变量数值实时更新给该文本控件。
然而在“浮态辅助决策系统”中实时显示液位数据并不能达到实时计算船舶装载及稳性数据的目的,因为该系统中液位数据是在DataGrid网格控件中显示并非文本控件。由于VB中只有文本控件、图片控件等支持DDE通讯而DataGrid控件并不支持DDE通讯,所以采用的文本控件仅仅是作为中间对象来获取液位的实时数据,还需要对“浮态辅助决策系统”中相关程序进行添加修改将其获取的数据赋值给相应的网格控件。其中添加的文本控件仅仅是作为中间量用来对实时液位的读取,并不需要在系统运行界面显示,所以将这些文本控件均设置为不可见并置于最底层。
在系统程序中将各类液舱的液位所对应的文本控件数值赋值给相应的液舱数组,例如燃油舱数组在VB程序中定义为ranyou(12),在程序中对1号燃油舱进行赋值:ranyou(1)=Text2.Text,其他液舱相同,再将这些数组值赋值给相应的网格控件列。其部分程序如下:
在该程序中液位数组均除以1000是为了使单位保持一致,在VB程序中液位的单位为“米”。
文本控件的液位数值是根据WinCC服务器端的数据的改变而实时变化的,但“浮态辅助决策系统”中的其他数据并不能实时变化,这就需要对其中程序进行一些修改。为此在系统中添加了8个Timer控件,时间间隔设置为2 s(时间可调),并分别将源程序中液舱数据计算、初稳性数据计算、大倾角稳性数据计算、稳性曲线绘制、稳性计算按钮等相关程序添加到各个Timer事件中,根据系统目的进行一定的修改。最终实现了“浮态辅助决策系统”液位的实时变化以及相关数据的自动计算。
当WinCC液位监测系统被激活运行时,运行“浮态辅助决策系统”液位列则自动更新显示当前的实时监测液位,各类液舱的数据在网格控件中以5 s的速度轮换显示,并且系统还能自动计算出相应液位下的 液舱各类数值,以及船舶的浮态稳性数据。图3为该系统运行时的界面,由图中可知目前网格控件中显示的是压载水舱的相关数据。系统界面中还设置了手动操作按钮和自动计算按钮,当不需要系统实时计算稳性数据时可以按下手动操作按钮,节约了系统资源,提高了系统利用率。
2.3 以WinCC作为DDE客户端的实时监测系统
将WinCC监测系统作为DDE客户端,VB应用程序“浮态辅助决策系统”作为DDE服务器。由服务器向WinCC客户端传递船舶液舱实时液量值以及初稳心高、极限风速等相关数据。
WinCC作为客户端的具体设置如下:
(1)将VB应用程序“浮态辅助决策系统”窗口按照下页表1中的VB作为服务器进行设置,LinkMode属性设置为1-source,LinkTopic设置为Form1。
(2)将VB应用程序生成可执行文件JCXT.exe,其文件名称与工程名JCXT.vbp相同。
(3)在WinCC变量管理器下添加新的驱动程序Windows DDE,在DDE通道下新建连接,并设置其相关属性,应用程序为JCXT,主题为Form1。
图3 VB系统运行界面
表1 VB的DDE属性设置
(4)本文设计系统监测对象为35个液舱,故有35个与之相应的液重数据,还有由VB应用程序计算的实时初稳性高、极限风速等相关数据。在(3)中新建的连接下建立如上所述的相应变量,并对其相关属性进行设置。图4为1号燃油舱液重所对应的变量的属性设置,单击图中的选择按钮,设置条目名称为Text5(文本控件名应与VB中相对应),数据类型为浮点数。其他变量设置与此相同。
图4 变量属性
(5)在WinCC监测画面中对画面进行设置,添加新的I/O域,设置为与DDE下的变量进行动态连接,触发为一旦改变,输出格式根据具体连接变量确定。
(6)在“浮态辅助决策系统”中添加39个文本控件,均设置为不可见且置于底层。由于需要从VB服务器读取的数据均在网格控件当中,网格控件并不支持DDE通讯,所以添加的39个文本控件仍是作为中间量的,这就需要先将网格控件中的相关数据赋值给对应的文本控件。在对液舱数据进行计算的时间事件程序中添加的部分程序如下:
在计算稳性数据的相应时间事件下插入如下程序语句 :Text22.Text = .TextMatrix(4, 2)用来读取极限风速值;Text20.Text = lbl_udg.Caption用来判断极限风速是否满足军规要求;Text21.Text = .TextMatrix(7, 2)用来读取修正后的初稳心高值;Text19.Text = lbl_hdg用来判断初稳心高是否满足军规要求。
通过以上程序修改,将液重、初稳心高、极限风速等相关数据实时赋值给相应的文本控件,通过VB设置的DDE服务器传递给WinCC客户机中相应的变量中,其运行界面如图5所示。由图中可以看到,WinCC系统界面中也能够实时显示液重、初稳心高、极限风速等数据。
图5 WinCC运行界面
3 结 论
本文主要介绍了DDE动态数据交换技术,并利用其实现了VB应用软件及WinCC组态软件程序之间的实时数据交换。通过DDE技术将WinCC监测的液位数据实时更新到“浮态辅助决策系统”中,将原来的手动液位输入变成了实时自动更新,并实现了“浮态辅助决策系统”对船舶液舱装载状态及稳性的实时监测。同时通过DDE技术将计算的稳性数据实时传递给WinCC软件,实现了WinCC软件对船舶液舱装载状态及稳性的实时监测。通过该技术实现了不同软件之间功能的互补,提高了系统自动化监测的程度。该监测系统还具有一定的通用性,通过更改相关船舶资料,可以将其应用到其他船舶上,对其他船舶监测系统的设计具有一定的参考价值。
[1]赵鹏飞,周玉龙,赵鹏,等.基于组态软件WinCC的船舶监测报警系统的设计与研究[J].船舶,2013(1):66-69.
[2]刘文艳,周玉龙,赵鹏.试验舰船浮态调整辅助决策系统研究[J].船舶,2012(2):7-10.
[3]彭道刚,杨平,徐春梅,等.基于DDE的分布式监控系统设计及应用[J].仪器仪表学报,2006(6):482-484.
[4]侯广宁,隋涛,孔震,等.基于DDE技术的组态王和VB的通信[J].电子质量,2013(2):8-10.
[5]贺泽,邱长华,张家泰,等.利用DDE技术实现不同应用之间的数据交换[J].应用科技,2004(5):7-9.
[6]王树勇.利用DDE技术实现组态王与VB应用程序的数据通讯[J].科技资讯,2009(23):247.