由于我国主动隔振系统的研究起步较晚,技术并不成熟,较多主动隔振控制算法仍在仿真实验阶段,很少有在实际应用中的案例[1]。而对于实验阶段的主动隔振来说,为验证控制算法的控制效果,往往希望能够实时观察被控对象的振动情况,并通过对比参数调整前后被控对象的振动曲线,来判断控制算法在不同条件下控制效果的好坏。因此,拥有1个配套上位机监控系统对于隔振实验来说很有必要。本文作者以某型柴油机为对象,开发了1套主动隔振系统上位机监测软件,并对自适应主动隔振算法进行研究。
1 主动隔振系统总体框架主动隔振系统是指能够实现对被控对象的振动实时监测,并根据所监测的振动信息利用自适应算法得出实时的控制规律,最终控制作动器产生反振力从而抑制其振动的1套完整系统。系统主要由上、下位机2部分组成。
下位机是系统硬件部分,主要功能是实时采集被控区域的振动信号,并根据所采集的振动信号进行次级通道辨识,再由自适应算法得出实时的控制规律,经由功率放大器输出给作动器,控制作动器产生相应频率的反振力。上位机是系统PC端显示系统,主要功能是通过以太网接收下位机辨识结果以及采集的实时加速度信号,并在显示软件中绘制成曲线。本文上、下位机之间的通讯连接采用C/S模式,即客户端/服务器模式[2]。下位机为系统服务器,上位机显示系统为客户端。系统具体结构如图1所示。
本文中上位机的主要功能是接收并显示下位机加速度传感器采集的实时振动信息,以及读取、存储并修改下位机的重要参数,本文采用UDP协议发送和接收数据。
为保证数据传输的成功率,在设计过程中应避免数据报发生分片。对UDP数据报来说,需要在应用层限制每个UDP数据报的大小,一般不超过1 472个字节[6]。本文采样频率为4 K,每个通道的单个数据为2个字节,总的通道数为12个,则每秒采集96 KB大小的数据。为方便编程及数据的解析同时避免IP分片,本文将每次采集的12个通道的数据组合为一个数据结构体作为最小的数据单元,每个数据包中均包含50个这样的数据单元,即总的用户数据大小为1 200字节,上位机每秒将接收到80个这样的数据包。
此外,UDP协议在通信过程中发送端可于任意时刻自由发送数据,接收端无法确认何时接收到来自何地的数据,且接收到数据后也不会有任何确认信息。因此,本文在UDP协议的基础上,在应用层协议中引入了数据包确认、掉包重发以及排序机制。为此本协议自定义了一个长度为5个字节的应用层协议头,协议头的组成为1个字节的数据包类型标识、2个字节的数据包序号(包括1个字节的前序号和1个字节的后序号)以及2个字节的数据长度标识,使通讯在不占用太多系统资源的条件下满足一定的传输可靠性。此外,在模拟量通道数据之前为3个字节的数字量通道数据,用于标识下位机的重要报警信息。因此,一个UDP数据报的大小应为协议头大小加上用户数据大小,总共为1 208个字节,远小于1 472个字节,不会发生IP分片。自定义用户协议头结构如图2所示。
数据包的确认机制主要通过自定义协议头中的数据包序号来实现,数据包序号包含前序号和后序号2个信息。前序号为当前数据包的序号,后序号为期望下一个数据包的序号。为保证确认机制的实现,在客户端引入接收缓冲区,用于存放验证后的数据。客户端确认机制的流程图如图3所示。其中VeriFied和LastVerif分别为保存当前接收到数据包序号和前一个接收到的数据包序号的数组,Count为接收到数据包的次数。
在服务器与客户端进行通信的过程中,当数据传输过程中发生了掉包或者是发送的数据出现了错误,就需要对丢掉的以及发生错误的数据包进行重新发送,并在客户端对重发的数据进行排序,以确保接收数据的正确性。为实现重发以及数据包的排序,在服务器引入2个发送缓冲区,一个用于存放已发送的数据包,一个用于向上位机发送数据;在客户端引入一个接收队列,用于存放验证后的数据包。服务器采用2个缓冲区的目的是存放发送后的数据包,用于客户端验证掉包后的重发。重发机制如图4所示。
对于客户端,为保证显示数据的实时性,本文使用多线程技术,将接收数据以及验证过程放在一个线程中,将解码数据包的过程放在另一个线程中,2个线程同步运行从而保证接收数据与解码显示数据的同步性。为给重发及排序过程留出一定的时间,且保证接收数据的实时性,规定上位机在接收到10个数据包之后再开启解码线程。客户端接收队列如图5所示。
对于服务器,为保证数据包重发的实现,服务器需要缓存部分已发送的数据包。为此,在服务器引入了2个缓冲区,一个用于发送实时的数据,另一个用于缓存部分已发送的数据包。服务器的2个缓冲区及工作模式如图6所示。
本文中上位机使用Socket以简化编程。为减小数据通信过程中出错的可能性,在进行参数配置时,选用与实时数据不同的Socket进行通信。这里将实时数据通信所用Socket命名为Socket1,而将参数配置所使用的Socket命名为Socket2。由于在进行参数设置时,并不是每次都需要配置所有参数,大多数情况下仅需要修改个别参数。因此在本设计中,将所有参数分别通过不同的数据包进行发送,且只有当界面上发生更改后,才将更改的参数数据发送至下位机,没有更改的参数不做处理。
2.2 参数配置及储存参数配置界面的主要功能是对下位机某些重要参数的值进行修改,同时具有从下位机中读取出这些参数值的功能。此外,还可将修改后的参数值或者从下位机中读取出来的参数值保存至计算机本地文件中,也可从本地文件中读取参数信息并下载至下位机。本文使用XML文档来存储用户配置信息,包括下位机配置参数以及通道辨识数据。下面将对操作XML文件的具体方法进行说明。
1)创建XML文件
这里首先声明一个XmlDocument对象命名为xmlDoc,随后创建XML文档的文件头,创建完文件头后,需要创建文件的根元素,即根结点。这里创建一个名称为Settings的根结点,根结点创建完成后,通过xmlDoc.Save方法将该XML文件保存至本地文件夹中。
2)读取XML文件
读取XML文件信息之前,首先声明一个XmlDocument对象,再调用该对象的Load方法,从指定的路径中加载XML文件。加载完XML文件后,即可通过调用对象的SelectSingleNode以及GetAttribute方法来获取该XML文件指定的结点和属性值。这样就可根据该元素的属性名称得到该结点的属性以及所包含的子结点信息。
3)向XML文件中添加数据
在向XML文档中添加新数据的时候,也必须先通过XmlDocument对象加载整个XML文档。然后调用SelectSingleNode方法来获取根结点,通过CreateElement方法创建新的元素,使用CreateAttribute方法创建属性,用AppendChild将新建的结点挂接在其他结点上,通过SetAttributeNode来设置结点的属性。完成后,再创建该结点的子结点,最后将新创建的<set>结点挂接到根结点上,并保存文件,这样即可向已有的XML文件中加入新的结点。
2.3 程序界面设计结合用户对监测系统界面的要求可将界面划分如下:
1)通道辨识界面,主要用于显示接收下位机通道辨识得到的滤波器系数,并以曲线的形式显示在界面上,并且软件提供了辨识系数保存至本地和本地辨识系数下载的功能。此外,界面上留有指定区域用以显示下位机的报警信息,当下位机出现报警时,会在界面上以红色标出。
2)实时曲线界面,用于显示各个通道的实时数据,并可选择将其中4个通道的数据以曲线的形式显示在界面上,并且软件提供了数据保存功能,可以一次保存1 000个数据点,用于进一步的数据分析。此外,该界面也留有指定的报警显示区域。
3)参数配置界面,用于完成下位机配置信息的下载。打开该界面时,软件会读取下位机当前的配置信息并显示,辨识滤波器系数也会被读取,并以曲线的形式显示在通道辨识界面上。此外,软件提供了配置信息保存至本地和本地配置信息下载功能。设计好的系统界面主要功能模块如图7所示。
在实际控制过程中,很难得到次级通道
假设n时刻的参考信号为
$X\left( n \right)={{\left[ x\left( n \right),x\left( n-1 \right),\cdots ,x\left( n-L+1 \right) \right]}^{\rm T}}{\text{,}} $ | (1) |
假定控制滤波器
$ W\left( n \right)={{\left[ {{w}_{0}},{{w}_{1}},\cdots ,{{w}_{L-1}} \right]}^{\rm T}}{\text{,}} $ | (2) |
假定次级通道的估计模型为M阶的横向滤波器,即
$ S\left( n \right)={{\left[ {{s}_{0}},{{s}_{1}},\cdots ,{{s}_{M-1}} \right]}^{\rm T}}{\text{,}} $ | (3) |
则该时刻的误差信号为:
$ e\left( n \right)=d\left( n \right)-u\left( n \right)=d\left( n \right)-S{{\left( n \right)}^{\rm T}}Y\left( n \right){\text{,}} $ | (4) |
式中
$ Y\left( n \right)={{\left[ y\left( n \right),y\left( n-1 \right),\cdots ,y\left( n-L+1 \right) \right]}^{\rm T}}{\text{,}} $ | (5) |
其中
$e\left( n \right)=d\left( n \right)-\sum\nolimits_{l=0}^{L-1}{{{w}_{l}}\hat{x}\left( n-l \right)} {\text{。}} $ | (6) |
式中
$ \hat{X}\left( n \right)={{\left[ \hat{x}\left( n \right),\hat{x}\left( n-1 \right),\cdots ,\hat{x}\left( n-L+1 \right) \right]}^{\rm T}}{\text{,}} $ | (7) |
则可将误差信号表示为:
$ e\left( n \right)=d\left( n \right)-{{\left[ \hat{X}\left( n \right) \right]}^{\rm T}}W\left( n \right){\text{,}} $ | (8) |
这里仍采用均方误差作为其性能函数,则性能函数
$ J\left( n \right)=E\left\{ {{e}^{2}}\left( n \right) \right\}{\text{,}} $ | (9) |
根据梯度下降法,可知控制滤波器权向量的递推方程为:
$W\left( n+1 \right)=W\left( n \right)-\lambda \nabla J {\text{。}} $ | (10) |
式中
$ \nabla J=\frac{\partial {{e}^{2}}\left( n \right)}{\partial w}=-2e\left( n \right)\hat{X}\left( n \right){\text{。}} $ | (11) |
将式(10)代入式(9)得到滤波器权向量的递推公式为:
$ W\left( n+1 \right)=W\left( n \right)+2\lambda e\left( n \right)\hat{x}\left( n \right){\text{。}} $ | (12) |
以上即为FxLMS算法,FxLMS算法与LMS算法最大的区别在于增加了一个次级通道来减小甚至消除功率放放大器、作动器等设备形成的误差通道所造成的影响。
4 主动隔振系统验证 4.1 通信功能验证在该验证环节中,首先配置下位机,使下位机共上传4 800个数据包,且每上传5个数据包便丢失一个数据包,之后通过修改数据包的上传时间间隔,观察上位机记录的丢包次数和接收到的重发数据包数,以检测通信协议的可靠性。经验证,当下位机上传时间间隔在4 ms及以上时,上位机收到的总包数为4 800,记录的丢包次数和重发包数均为960,此时协议可靠。而当时间间隔约为2.6 ms时,上位机收到的总包数为4 607,丢包次数为1 003,重发包数为910,此时协议丢包率达到4%。而下位机在实际控制过程中数据包的上传时间间隔约为20 ms,因此可以认为该通信协议可靠。
4.2 主动隔振系统效果验证在本验证环节中,以控制器输出的白噪声作为次级通道的输入,利用LMS算法对次级通道估计模型的横向滤波器权向量进行更新。并将辨识得到的次级通道的估计模型应用到主动控制上,进行主动控制的台架试验。首先打开功放对4个通道依次进行辨识,稳定后所得的4个次级通道估计模型的权向量系数如图9所示。
可以看出辨识数据均逐渐趋于收敛,适合用于主动隔振控制。将该组辨识结果应用于主动隔振,所得到的控制数据如图10所示。可以看出控制数据平稳且峰值适当。可认为主动隔振监控系统运作良好,无严重丢包现象,且达到隔振目的。
本文在分析主动隔振系统对于振动监测显示需求的基础上,运用C#语言进行上位机系统软件的开发,实现上、下位机之间的实时、可靠的传输数据,对自适应主动隔振算法进行了研究。并在台架试验中,上位机软件实现了对柴油机振动状态的实时监测,监测精度较高,同时取得了较好的主动隔振效果。通过使用此上位机软件对柴油机进行实时监测,一方面有助于柴油机主动隔振系统的开发,另一方面通过观察和分析柴油机运行过程中振动状态的变化,能够及时发现甚至预测柴油机可能出现的故障,提高柴油机运行的安全性,同时也符合智能船舶的发展理念。本监控系统软件的设计思路和实现方法,可为国内柴油机主动隔振系统开发等领域提供一定的参考。
此监控软件还有些需要改进的方面,例如目前该软件只能导出短时间内的振动数据,因此在后续的开发过程中可通过使用数据库等技术进行优化等。
[1] |
朱明刚. 船用柴油发电机组振动主动控制研究[D]. 哈尔滨: 哈尔滨工程大学, 2012.
|
[2] |
JOEL Kanter. Understanding Thin-Client/Server Computing. ISBN 1-57231-744-2, 1997.
|
[3] |
张攀. 船用往复式机械的振动主动控制技术研究[D]. 哈尔滨: 哈尔滨工程大学, 2013.
|
[4] |
罗福强, 杨剑, 张敏辉. C#程序设计经典教程[M]. 北京出版社: 清华大学出版社, 2014
|
[5] |
张锋. 基于压电作动器的齿轮传动系统振动主动控制及算法研究[D]. 重庆: 重庆大学, 2013.
|
[6] |
张恺. 基于UDP的可靠文件传输协议的设计与实现[D]. 西安: 西安电子科技大学, 2014.
|