金晓帆
(杭州应用声学研究所 浙江 杭州 310023)
海洋具有非常丰富的资源和广阔的面积,在国家经济、国防等领域具有非常重要的价值[1]。液压绞车由于可靠性高、承载能力强、控制方便,所以在海洋工程装备中具有非常广泛的应用[2],经常被应用于海洋科学研究、海洋打捞救助、海底资源开发、水下目标探测等方面。液压绞车的典型作用是拖曳海洋科学仪器和设备、维持设备在水中的深度或姿态。根据用途不同,液压绞车系统的控制目标也有一定差异[3-5],主要包括以控制拖缆张力稳定为目标的力控制系统,以维持拖体入水深度为目标的深沉补偿系统,以维持拖体收放速度为目标的速度控制系统。液压绞车控制策略的设计、调试和整定一般需要有较丰富的经验,并需要结合实际的机械液压物理系统在实际作业环境下开展较长时间的试验工作,系统调试、测试所需要的时间长、经费投入大。
半实物仿真技术是在20世纪90年代起逐步兴起,并在实际工业、科研过程中得到较为广泛应用的一种现代仿真调试技术[6-7]。系统以被控对象、控制器、驱动器等所有各组成部分的精确数学模型、高性能的实时仿真计算平台为基础,采用一部分虚拟仿真系统和一部分实际物理设备一起构成一个完整的实时交互系统[8-9],可以被用于以下场合:(1)借助于实际的物理设备和虚拟的控制装备,用于测试物理设备的基本技术性能,辅助设备的研究、开发和测试;(2)借助于被控设备的虚拟模型和实际的控制器软件和硬件系统,用于测试控制流程、控制策略、控制器软件、硬件、信号采集和分析处理算法的性能,研究、开发和改进控制算法。
鉴于液压绞车调试时间长,实物验证测试所涉及的配试设备多,调试测试费用高、风险大的特点,研制专用于液压绞车的半实物仿真系统,研制支持半实物仿真的通用控制单元,具有非常重要的意义。
绞车液压系统从形式上主要分为开式系统和闭式系统两种[10]。开式系统以定量泵、溢流阀、比例阀、平衡阀、液压马达等组成,见图1;由电机驱动定量泵提供压力油源,通过溢流阀调节油源压力,然后通过比例阀调节压力油源进入液压马达两腔的方向和流量。系统一般配置有平衡阀,用于调节在负载工况下平稳收放和安全制动的问题。
典型的闭式液压系统见图2,系统主要由变量泵、液压马达、补油泵、溢流阀和冲洗阀等部分组成。系统动力通过电机驱动变量马达实现,驱动绞车旋转的液压马达与液压泵两腔直接连接,当液压泵旋转时,液压马达也同步旋转。在液压马达两腔回路之间并联溢流阀,控制液压马达的驱动力。闭式液压系统不存在显著的节流损失,效率高于开式系统。
尽管绞车液压系统的应用目标、控制策略等方面存在较大差异,从控制接口方面分析,一般包括调节比例泵/阀的模拟控制信号、控制开关阀、电机的启动/停止信号,检测液压系统压力、液压马达位置和速度的模拟量/开关量反馈信号。
在综合分析不同型式和作用的绞车液压系统参数基础上,结合半实物仿真控制的需要,设计了一种通用性较强、成本较低、可以灵活设计和配置控制策略的控制器单元。液压绞车半实物仿真控制器采用STM32系列的STM32F103RC芯片作为主控制器,并扩展必要的外围接口电路,配置专用的电源系统。STM32系列单片机系统是意法半导体(ST)集团专为高性能、低成本、低功耗的嵌入式应用专门设计的支持ARM Cortex®-M0~M7内核的芯片。STM32芯片具有极高的性能,支持主流的Cortex内核,集成了丰富的外设,功耗较低,而且提供非常丰富的软件开发支持,在工业控制系统中具有非常广泛的应用。
控制器的硬件系统基本结构见图3。控制器主要由电源系统、CPU系统、网络接口电路、模拟量输出电路、模拟量输入电路、开关量输入电路、开关量输出电路、人机接口电路等部分组成。CPU系统电路见图4,由于STM32芯片集成度较高,外围设备较为丰富,所以扩展设计较为简单,CPU系统使用内部的看门狗电路监视系统运行,采用3.3 V单一电压供电,需要配置一个8.0 MHz的晶振电路即可工作,系统主频可达72 MHz。
在半实物控制系统中,控制器与模拟仿真设备快速交换数据是系统能够正常工作的基础。一般的专用仿真单元都支持串行和网络通信方式与外部系统交换数据。串行接口传输的数据速率较低,一般用于交换数据量小、实时性要求不高的系统中。网络通信方式数据传输速度高、实时性好,编程实现较为方便,所以在控制器仿真通信系统中应用较为普遍。
为了扩展网络通信接口,控制器扩展了以W5500为核心的以太网通信单元(图5)。W5500是WIZnet推出的一款高性能标准以太网接口芯片,在芯片内部集成了完全的硬件TCP/IP协议栈,MAC单元和PHY设备。W5500的全硬件协议栈技术采用了专用复杂的硬件逻辑门电路实现了完整的TCP/IP协议簇,在实际使用过程中简单易用、可靠性高、安全性好。尤其是其内部集成的MAC和PHY单元非常适合于为中高档单片机设备扩展网络通信接口。
半实物仿真系统的基本原理见图6。在实物控制模式下(图6-a),控制器通过实际的模拟量、开关量输入和输出通道连接到液压驱动系统,接收人机接口装置传入的控制指令并根据指令信号,结合被控液压系统反馈的状态信息(压力、位置和转速)调节输出到液压系统的控制信号。在半实物控制模式下(图6-b),控制器与实际机械液压物理系统的信号断开,通过网络连接外部的机械液压模拟系统,机械液压模拟系统获取控制器通过网络传输的控制信号,并根据控制信号实时计算状态参数、传感器参数,并通过网络将传感器参数反馈到控制器,形成闭环控制系统。图6所示的半实物控制方案可以用于控制器通信接口测试、控制策略测试、人机接口测试、设备操作训练。
为了支持半实物仿真控制和对实际机械液压系统的控制,设计的控制器软件结构见图7。软件系统包括模拟量输入单元、模拟量输出单元、数字量输入单元、数字量输出单元、人机接口单元、网络通信单元、仿真切换控制单元、I/O缓冲单元、控制策略单元等部分。
控制器软件的核心是控制策略单元,实现了根据被控对象的状态和控制目标计算输出控制量的基本功能。在液压绞车控制系统中控制策略可以根据实际控制需求进行设计,常规的控制策略包括PID、模糊PID、自适应控制、预测控制、鲁棒控制等均可应用在绞车液压系统的张力、速度、姿态控制环节中。
控制策略单元计算所需的输入数据和输出数据均保存在统一的I/O缓冲单元中,I/O缓冲单元保存了控制的输出信号,存于D/A和DO缓冲区;I/O缓冲单元同时保存了实际或模拟的机械液压系统反馈的传感器信号,存于A/D和DI缓冲区。
图7中的模拟量输出单元、数字量输出单元实现将控制计算得到的控制量转换为电压、电流模拟信号,驱动被控设备动作;模拟量输入单元、数字量输入单元实现将机械液压系统反馈的传感器信号读入。在实物控制模式下,上述单元实现了与实际物理系统的双向信息交换。
图7中的网络通信单元连接到外部的机械液压模拟系统,实现网络传输的基本功能,可以根据控制信息构造网络报文并将其传输到外部的机械液压模拟系统,并可接收机械液压模拟系统传输的网络报文,进行处理后提取模拟机械液压系统反馈的压力、速度和位置等传感器信号。
仿真切换控制单元实现根据控制指令调节控制器运行模式的基本功能,根据人机接口设备传输的控制指令信号使控制器工作在实物控制模式或半实物仿真模式下。
I/O缓冲单元和仿真切换控制单元是控制器软件系统的核心模块。I/O缓冲单元实现所有控制输入和输出数据的存储,通过一个结构体实现。具体实现代码如下:
#define WINCH_AI_CNT 10
#define WINCH_DA_CNT 6
#define WINCH_DO_CNT 12
#define WINCH_DI_CNT 8
typedef struct
{
unsigned short DataAD[WINCH_AI_CNT];//模拟量输入数据缓冲
unsigned short DataDI[WINCH_DI_CNT];//开关量输入数据缓冲
unsigned short DataDA[WINCH_DA_CNT];//模拟量输出数据缓冲
unsigned short DataDO[WINCH_DO_CNT]; //开关量输出数据缓冲
}IO_Buf,*pIO_Buf;
IO_Buf CtrlBuffer; //I/O缓冲单元定义
unsigned char NetSendBuf[1024];//网络报文缓存
unsigned char NetRecvBuf[1024]; //网络报文缓存
unsigned short RecvLen=0;//报文长度标志
仿真切换控制单元实现仿真模式和实物控制模式下数据流的切换,在仿真模式下通过网络发送和接收控制接口数据,在实物控制模式下通过硬件输入和输出通道发送和接收数据。具体实现包括SimuCtrlModule和NetService两个函数,两个函数均根据全局变量SimMode(仿真状态,当系统被设置为半实物仿真模式时为true)确定工作方式。SimuCtrlModule在非仿真模式下调用UpdateDA、UpdateDO通过硬件输出控制信号,通过UpdateDI、UpdateAI从实际物理系统获取反馈参数;在半实物仿真模式下通过SetZeroDA、SetZeroDO屏蔽实际硬件输出信号,并通过GeneratePacket函数以待发送控制输出信号为基础构造报文,并调用send_data_processing函数通过W5500发送数据到仿真系统。NetService函数为一个独立的网络线程,在仿真模式下工作,实现从W5500所连接的硬件网络数据流中提取数据并输入到I/O缓冲单元的功能。
具体实现如下:
void SimuCtrlModule()
{
if(!SimMode)
{
//输出控制信号
UpdateDA(CtrlBuffer.DataDA,WINCH_DA_CNT);
UpdateDO(CtrlBuffer.DataDO,WINCH_DO_CNT);
//读入传感器信号
UpdateDI(CtrlBuffer.DataDA,WINCH_DI_CNT);
UpdateAI(CtrlBuffer.DataDO,WINCH_AI_CNT);
}
else
{
//屏蔽控制输出
SetZeroDA(CtrlBuffer.DataDA,WINCH_DA_CNT);
SetZeroDO(CtrlBuffer.DataDO,WINCH_DO_CNT);
//构造报文
GeneratePacket(NetSendBuf,&CtrlBuffer,&L en);
//发送数据
send_data_processing(Tcpsock,NetSendBuf,Len);
}
}
void NetService()
{
int i,Len;
unsigned char TmpBuf[1024];
if(!SimMode) return;//非仿真模式,不工作
recv_data_processing(Tcpsock,TmpBuf,&Len);//接收数据
if(Len==0) return;
for(i=0;i { if(RecvLen { if(HeadBuf[RecvLen]==TmpBuf[i]) NetRecvBuf[RecvLen++]=TmpBuf[i];//判断报文头 else RecvLen=0; } else NetRecvBuf[RecvLen++]=TmpBuf[i]; if(RecvLen==TOTAL_LEN) { UpdateSensor(CtrlBuffer,NetRecvBuf);//处理提取的报文,将数据转入到I/O缓冲单元 RecvLen=0; } } } 根据本文设计的半实物控制器方案,设计了用于某型系列海洋绞车的专用控制器。首先根据图8所示的方案,建立了由MATLAB Simulink模型、dSPACE控制器[11]、PROFACE 触摸屏和半实物控制器构成的半实物虚拟仿真测试系统。在机械液压系统设计方案初步确定后,建立了机械液压系统仿真模型,利用虚拟仿真测试系统对液压绞车的控制策略和人机接口功能进行了全面测试。 所建立的液压绞车实时仿真模型以机械液压系统的数学模型为基础,经过实时化、分段线性化处理,然后下载到dSPACE中,控制周期设置为10 ms,求解策略采用四阶龙格库塔法。基于所建立的系统进行了虚拟仿真测试,并将控制器应用到实际的液压绞车系统控制中,对虚拟环境和实物控制模式下的控制性能进行了反复测试和对比分析,测试结果表明虚拟仿真环境下开发和测试的控制策略、软件算法,可以直接应用于实物控制。支持半实物控制功能的控制器的研制和使用极大地加快了绞车系统的整体研制进程,并为系统控制策略的深入分析、算法研究、控制性能的提升提供了一个重要的技术平台,技术经济效果非常显著。4 系统实现和验证