【动手学电机驱动】TI InstaSPIN-FOC(5)Lab04 电机力矩闭环控制

TI InstaSPIN-FOC(1)电机驱动和控制测试平台
TI InstaSPIN-FOC(2)Lab01 闪灯实验
TI InstaSPIN-FOC(3)Lab03a 测量电压电流漂移量
TI InstaSPIN-FOC(4)Lab02b 电机参数辨识
TI InstaSPIN-FOC(5)Lab04 电机力矩环控制

【动手学电机驱动】 TI InstaSPIN-FOC(5)Lab04 电机力矩闭环控制

    • 1. 项目介绍
      • 1.1 Lab04 项目介绍
    • 2. Lab04 项目实验内容
      • 2.1 硬件连接与设置
      • 2.2 加载用户数据文件
      • 2.3 项目构建与加载
      • 2.4 项目运行与调试
    • 3. Lab02b 程序解读
      • 3.1 程序框图
      • 3.2 包含文件、变量和函数声明
    • 4. Lab04 项目总结


LAUNCHXL-F28027F + BOOSTXL-DRV8301 提供了一个完整的电机驱动和控制评估平台,与 TI 公司的 InstaSPIN FOC配合使用,提供无传感器控制解决方案。

本节基于 LAUNCHXL-F28027F + BOOSTXL-DRV8301 电机驱动和控制测试平台,介绍 Lab04 实验项目“电流环控制”,即电机力矩闭环控制方法。

推荐从 TI 官网下载 【InstaSPIN 实验项目用户手册】(InstaSPIN Projects and Labs User’s Guide),进行学习。


1. 项目介绍

1.1 Lab04 项目介绍

本实验的力矩控制,将 InstaSPIN FOC 或 InstaSPIN MOTION 框架纯粹用作扭矩控制器。

本项目采用单电流环控制,速度环被禁用(通常速度环路作为控制外环),直接将电流参考值 i q , r e f i_{q,ref} iq,ref 发送到 Iq 电流反馈控制器。

学习目标:

  • 如何通过将 InstaSPIN FOC 或 InstaSPIN MOTION 置于用户外部速度控制模式,并直接提供 Iq 参考值来启用直接扭矩命令
  • 如何从 FAST 获取扭矩信息

“用户外部速度控制模式” 禁用提供的速度控制器,并将 FOC 控制系统设置为期望 Iq 扭矩命令作为输入。该扭矩指令输入可以由用户提供,也可以是用户提供的速度环控制器的输出(即速度电流双闭环控制,在下一篇实验中介绍)。


2. Lab04 项目实验内容

FOC 的核心是扭矩控制。扭矩控制经常作为控制内环,而将速度控制环路或位置控制环路作为控制外环。添加控制外环后,系统的不稳定更差。因此,在扭矩控制模式下,才能真正判断FAST 算法及其估计和角度跟踪能力。

你可以设计完美的扭矩控制器。但如果给出阻尼不足、振荡的扭矩参考信号,控制系统的整体性能仍然会很差。速度控制系统也掩盖了FAST-FOC系统的真实性能。添加速度控制器后,FAST FOC 系统的总响应降低。

在 Lab04项目中,我们的目的是将 InstaSPIN FOC 置于用户外部速度控制模式,并直接给定 Iq 的参考值来启用扭矩命令。


2.1 硬件连接与设置

本项目使用 LAUNCHXL-F28027F + BOOSTXL-DRV8301 电机驱动和控制测试平台,相关的软件安装和配置,详见上节【动手学电机驱动】 TI InstaSPIN-FOC(1)电机驱动和控制测试平台。

硬件连接与设置的步骤如下:

  1. 对于 F28027F 控制板,拆除 JP1、JP2 跳线帽,由驱动板提供 3.3V 电源。
  2. 对于 F28027F 控制板,将开关 S1 设置为 ON-ON-ON(向上),UART 开关 S4 设置为 OFF(向下)。
  3. 如下图所示,将 DRV8301 驱动板 插入 F28027F 控制板。注意:接线端子插头应朝向USB连接器。
  4. 将三相 PMSM 电机连接到 DRV8301 驱动板的 3-pin 接线端子 J11。电机连接标记为 A、B、C,但可以以任何顺序连接。
  5. 将直流电源连接到 DRV8301 驱动板的 2-pin 接线端子 J2,注意电源正负极不要接反(正极接 PVDD,负极接 GND)。推荐使用 24V/10A 直流稳压电源。
  6. 打开连接到 DRV8301 驱动板的直流稳压电源。

2.2 加载用户数据文件

1、打开 IDE 软件 CCStudio,从 MotorWare 导入例程项目,在 CCS 侧边栏 “Project Explorer” 选择本项目 “proj_lab04”。

C:\ti\motorware\motorware_1_01_00_18\sw\solutions\instaspin_foc\boards\boostxldrv8301_revB\f28x\f2802xF\projects

如果使用其它型号的 MCU 和驱动板,则参考以上路径规则,选择相应的项目路径。

2、鼠标选中本项目 “proj_lab04”,右键选择 “Properties” 打开属性窗口,添加包含文件 user.h:

Build – C2000 Compiler – Include Options – Add dir to #include search path (–include_path, -I)

添加 user.h 文件的路径:

C:\ti\motorware\motorware_1_01_00_18\sw\modules\hal\boards\boostxldrv8301_revB\f28x\f2802xF\src

注意:如果没有正确导入 user.h,构建项目或编译时将会报错。

在这里插入图片描述

3、检查用户数据文件 user.h。

在 CCS “Project Explorer” 选择本项目 “proj_lab02b” 激活(Active)后,打开 user.c 文件,在文件开头找到声明的包含文件 user.h(以高亮显示)。鼠标移动到高亮的包含文件上,按 F3 就自动打开用户数据文件 user.h。

(1)找到定义电机类型的段落,检查 “USER_MOTOR” 定义为 “My_Motor”,内容如下:

//! \brief Uncomment the motor which should be included at compile
//! \brief These motor ID settings and motor parameters are then available to be used by the control system
//! \brief Once your ideal settings and parameters are identified update the motor section here so it is available in the binary code
#define USER_MOTOR My_Motor

(2)找到定义电机参数的段落 “#elif (USER_MOTOR == My_Motor)”,检查电机极对数、电机参数的值已修改为电机规格书的参数,或通过参数辨识得到的数值。例如:

#elif (USER_MOTOR == My_Motor)
#define USER_MOTOR_TYPE                 MOTOR_Type_Pm
#define USER_MOTOR_NUM_POLE_PAIRS       (2)
#define USER_MOTOR_Rr                   (NULL)
#define USER_MOTOR_Rs                   (0.6958)
#define USER_MOTOR_Ls_d                 (0.001885)
#define USER_MOTOR_Ls_q                 (0.001885)
#define USER_MOTOR_RATED_FLUX           (0.1518)
#define USER_MOTOR_MAGNETIZING_CURRENT  (NULL)
#define USER_MOTOR_RES_EST_CURRENT      (0.2)
#define USER_MOTOR_IND_EST_CURRENT      (-0.2)
#define USER_MOTOR_MAX_CURRENT          (1.0)
#define USER_MOTOR_FLUX_EST_FREQ_Hz     (20.0)

说明:电机参数与具体电机有关,仅供参考。电机参数辨识过程,详见 TI InstaSPIN-FOC(4)Lab02b 电机参数辨识。

(3)定义驱动板电压电流偏移量的的段落,检查已修改为测量的偏移值。

//! \brief ADC current offsets for A, B, and C phases
//! \brief One-time hardware dependent, though the calibration can be done at run-time as well
//! \brief After initial board calibration these values should be updated for your specific hardware so they are available after compile in the binary to be loaded to the controller
#define   I_A_offset    (0.8387260437)
#define   I_B_offset    (0.8367524147)
#define   I_C_offset    (0.8327225447)//! \brief ADC voltage offsets for A, B, and C phases
//! \brief One-time hardware dependent, though the calibration can be done at run-time as well
//! \brief After initial board calibration these values should be updated for your specific hardware so they are available after compile in the binary to be loaded to the controller
#define   V_A_offset    (0.498126924)
#define   V_B_offset    (0.4988828897)
#define   V_C_offset    (0.4985800385)

说明:电压电流偏移量与具体驱动控制板有关,仅供参考。电压电流偏移量测试过程,详见 TI InstaSPIN-FOC(3)Lab03a 测量电压电流漂移量。


2.3 项目构建与加载

4、项目构建(“Build”)。

在 CCS “Project Explorer” 选择本项目 “proj_lab03” 激活(Active)后,通过菜单栏 Project – Build Project 构建(“Build”)项目。也可以点击工具栏上的锤子图标 “Build” 进行构建。

在 CCS 的控制台(Console)窗口栏,将显示构建过程,并最终显示 ”**** Build Finished ****“,说明构建项目成功。

在这里插入图片描述

5、项目调试(“Debug”),将程序烧录到 MCU。

注意:在本步骤之前,要USB 连接控制板套件,并给控制板套件通电,否则找不到目标板而加载失败。 相关步骤可以参见上节 “2.1 硬件连接与设置”。

通过菜单栏 Run-- Debug 开始调试(“Debug”)项目。也可以点击工具栏上的昆虫图标 “Debug” 开始调试。

“Debug” 过程中,弹出窗口显示调试进程,并将并将.out文件加载到目标(将程序烧录到 MCU)。 弹出窗口最后显示 "Finished“,说明调试完成和加载成功。

进入调试状态后,CCS透视图将自动变为 “CCS调试”视图布局。

6、加载脚本文件。

通过调用脚本 “proj_lab04.js”,添加适当的监视窗口变量。

loadJSFile “C:\ti\motorware\motorware_1_01_00_18\sw\solutions\instaspin_foc\src\proj_lab04.js”

7、启用实时调试器。

点击工具栏上的实时模式图标(Enable silicon realtime mode),进入实时模式(Realtime mode)。该图标看起来像一个时钟。

8、执行目标程序。

点击工具栏上的 执行(Resume)图标,开始执行目标程序。该图标看起来像一个绿色按键。也可以通过菜单栏 Run-- Resume,或快捷键 F8,开始执行目标程序。

9、启用连续刷新。

点击工具栏上的 连续刷新(Resume)图标,在监视窗口上启用连续刷新。

在这里插入图片描述


2.4 项目运行与调试

10、启动电机。

在监视窗口中,检查 gMotorVars.UserErrorCode 的值:如果有错误则该变量值将显示具体的错误内容以供排查,如果没有错误则该变量值为 USER_ErrorCode_NoError,可以继续运行。

在监视窗口中,先将 “Flag_enableSys” 设为 1(True)驱动控制 使能,然后将 “Flag_Run_Identify” 设为 1(True)电机运行 使能。

10、强制启动程序。

此时 IqRef 值为 0(默认值),电机并没有开始旋转,但电机轴缓慢振荡。这是由于执行 “强制角度” 的强制启动程序。

观察窗口如下图所示:

  • Flag_enableSys = 1,驱动控制 使能;
  • Flag_Run_Identify = 1,电机运行 使能;
  • Flag_EnableUserParams = 1,控制器从 user.h 读取电机参数;
  • Flag_EnableForceAngle = 1,控制器执行 “强制角度” 的强制启动程序;
  • CtrlState = CTRL_State_Online,CTRL_run 状态机处于 Online 状态;
  • IqRef_A = 0.0,默认的电流参考值 IqRef_A 为 0;
  • Speed_krpm = 0.0,测量的电机转速为 0;
  • Troque_Nm = 0.0,测量的电机转矩为 0;

由于零速度启动时的观测器的反馈不稳定,转子角度和转速信号的估计值精度较差,因此电机很难甚至无法从零速启动。因此设置了 “强制角度” 的强制启动程序,允许 InstaSPIN 在全电机扭矩下从零速度启动。
当电机在 1Hz 以上旋转时,则强制角度关闭,执行真正的闭环控制。强制角度也可以手动关闭。

在这里插入图片描述


11、手动改变设定值 IqRef。

(1)在监视窗口中,将 “IqRef_A” 的值修改为 0.1,电机轴缓慢振荡,但电机仍没有开始旋转。观察窗口如下图所示:

在这里插入图片描述

(2)将 “IqRef_A” 的值修改为 0.2,电机开始旋转。观察窗口如下图所示:
在这里插入图片描述

(3)将 “IqRef_A” 的值修改为 0.25,电机旋转速度更高,直到达到最大转速。观察窗口如下图所示:

在这里插入图片描述
由于本实验的控制策略为扭矩控制器,电机空载时,转速将不断增大直到全速(电压限制)。

(4)将 “IqRef_A” 的值修改为 0.5,电机旋转速度仍处于最大转速。观察窗口如下图所示:

Iq 参考值可以设置为高于最大电机电流,但控制器不允许超过 “user.h” 设置中列出的电流。
在这里插入图片描述
这是由于本实验的控制策略为扭矩控制器,电机空载时,转速不断增大直到全速(电压限制)。


12、将设定值 IqRef 设为负值。

将设定值 Iqref 设为负值,可以让电机反向旋转运行。

先将 Iqref 设为 0,使电机停止运行,再将 Iqref 设为负值。观察窗口如下图所示: Iqref=-0.2,电机反向旋转。

在这里插入图片描述


13、结束运行。

将变量 “Flag_Run_Identify” 设为 0(False),禁止电机运行。将 “Flag_enableSys” 设为 1(True)设为 0(False),禁用驱动控制。

点击工具栏上的 断开(Terminate)图标,断开与所有硬件的连接并终止调试状态。该图标看起来像一个红色方块。也可以通过菜单栏 Run-- Terminate,断开连接并终止调试状态。

14、关闭电源,拆除 USB 连接。

关闭为 DRV8301 驱动板供电的 DC 24V 电源。
拆下连接 计算机(运行 CCS 的计算机) 与 F28027F 控制板的 USB 线缆 。


3. Lab02b 程序解读

3.1 程序框图

本项目的程序框图如下图所示。ROM 中只运行 FAST,InstaSPIN FOC 的其余部分程序在用户RAM 中运行。
在这里插入图片描述

在主程序中的轮询(forever loop)中,通过以下代码 从用户输入的安培数(gMotorVars.IqRef_a)转换 得到参考值 Iq_ref 。

_iq iq_ref = _IQmpy(gMotorVars.IqRef_A,_IQ(1.0/USER_IQ_FULL_SCALE_CURRENT_A));

为了在 FOC 控制中设置 Iq 参考,函数 CTRL_setIq_ref_pu()使用以下代码将 Iq 参考值传递给 Iq 电流环 PI控制器作为控制器的设定值。

// Set the Iq reference that use to come out of the PI speed control
CTRL_setIq_ref_pu(handle, iq_ref);

在进行扭矩控制时,还需要完成另一项任务。当电机运行时,控制器需要知道电机将要施加扭矩的方向。函数 CTRL_setSpd_ref_krpm()用于设置电机是顺时针还是逆时针启动。

// set the speed reference so that the forced angle rotates in the correct direction
// for startup.
if(_IQabs(gMotorVars.Speed_krpm) < _IQ(0.01))
{
if(iq_ref < 0)
CTRL_setSpd_ref_krpm(handle,_IQ(-0.01));
else if(iq_ref > 0)
CTRL_setSpd_ref_krpm(handle,_IQ(0.01));
}

另一点需要注意的是在零速穿越期间。在实际速度为零之前,速度参考值的符号不要取错误的方向。为了强调这一点,如下流程图显示,当速度降至10 RPM 以下时,软件会使用 IqRef 的符号设置速度参考值的方向。

在这里插入图片描述


3.2 包含文件、变量和函数声明

本项目没有新的包含文件和定义新的全局变量。

在初始化过程中,会调用一个函数来禁用速度环 PI 和 SpinTAC 速度控制器。

  • CTRL_setFlag_enableSpeedCtrl(),在该函数的参数中发送错误将导致控制器绕过速度PI控制器,并允许将Iq参考直接发送到Iq PI控制器。

下表列出了实施扭矩控制器所需的主回路中的新函数。

  • CTRL_setIq_ref_pu(),以 Iq 电流参考值作为参数,设置 Iq 电流环 PI 控制器的输入。

4. Lab04 项目总结

一些应用只需要扭矩控制器。InstaSPIN可以很容易地将电机控制器设置为速度控制或扭矩控制。

在本实验室中,电机控制器被设置为扭矩控制器。对于FOC系统,q轴电流 Iq 与扭矩直接相关,因此可以通过设置 IqRef 实现对扭矩的控制。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/450538.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧供排水管网在线监测为城市安全保驾护航

一、方案背景 随着城市化进程的不断推进&#xff0c;城市供排水管网作为城市基础设施的关键组成部分&#xff0c;其安全稳定的运行对于确保城市居民的日常生活、工业生产活动以及整个生态环境的健康具有至关重要的作用。近年来&#xff0c;由于各种原因&#xff0c;城市供排水管…

Mycat 详细介绍及入门实战,解决数据库性能问题

一、基本原理 1、数据分片 &#xff08;1&#xff09;、水平分片 Mycat 将一个大表的数据按照一定的规则拆分成多个小表&#xff0c;分布在不同的数据库节点上。例如&#xff0c;可以根据某个字段的值进行哈希取模&#xff0c;将数据均匀的分布到不同的节点上。 这样做的好处…

安卓开发中轮播图和其指示器的设置

在安卓开发中&#xff0c;轮播图&#xff08;Carousel&#xff09;是一种常见的UI组件&#xff0c;用于展示一系列图片或内容&#xff0c;用户可以左右滑动来切换不同的视图。轮播图通常用于展示广告、新闻、产品图片等。 轮播图的指示器&#xff08;Indicator&#xff09;则是…

k3s安装指定版本以及离线安装(docker)

首先下载你所需要版本的k3s安装包&#xff0c;目录结构如下所示&#xff0c;我这里是v1.19.15k3s2。 1.首先赋予可执行权限后进行安装。 # k3s 需要赋予可执行权限 sudo chmod x k3s sudo chmod x k3s-install.sh2.然后将k3s的二进制文件复制到/usr/local/bin/ cp k3s /us…

【Kafka】Kafka源码解析之producer过程解读

从本篇开始 打算用三篇文章 分别介绍下Producer生产消费&#xff0c;Consumer消费消息 以及Spring是如何集成Kafka 三部分&#xff0c;致于对于Broker的源码解析&#xff0c;因为是scala语言写的&#xff0c;暂时不打算进行学习分享。 总体介绍 clients : 保存的是Kafka客户端…

华为携手竹云发布海外一网通办解决方案,助力海外政务数智化发展

10月14日&#xff0c;第44届GITEX GLOBAL展会&#xff08;GITEX GLOBAL 2024&#xff09;在迪拜世界贸易中心盛大开幕。作为全球最具影响力的科技和创业盛会之一&#xff0c;本届活动吸引180多个国家的6500余家全球知名企业集聚迪拜&#xff0c;展示涵盖人工智能、网络安全、移…

【Linux】解答:为什么创建目录文件,硬链接数是2;创建普通文件时,硬链接数是1?(超详细图文)

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

spring boot热部署

使用热部署解决了每次都需要重新启动的问题&#xff0c;但不过热部署的在对于改动比较小时速度可能快一些&#xff0c;改动大的话尽量停止 1.使用热部署之前需要在pom.xml文件中导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifa…

DS链式二叉树的遍历(11)

文章目录 前言一、链式二叉树的结构结构定义手动搭建 二、二叉树的遍历三种常见遍历(前序、中序、后序)层序遍历 总结 前言 堆是特殊的二叉树&#xff0c;可二叉树本身也很值得研究~   正文开始&#xff01; 一、链式二叉树的结构 前文也提到了二叉树一共有两种&#xff0c;空…

人工智能创造出大量新型蛋白质

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【线性回归分析】:基于实验数据的模型构建与可视化

目录 线性回归分析&#xff1a;基于实验数据的模型构建与可视化 1. 数据准备 2. 构建线性回归模型 3. 可视化 数据分析的核心 构建预测模型 应用场景 预测模型中的挑战 结论 线性回归分析&#xff1a;基于实验数据的模型构建与可视化 在数据分析领域&#xff0c;线性…

《拿下奇怪的前端报错》:1比特丢失导致的音视频播放时长无限增长-浅析http分片传输核心和一个坑点

问题背景 在一个使用MongoDB GridFS实现文件存储和分片读取的项目中&#xff0c;同事遇到了一个令人困惑的问题&#xff1a;音频文件总是丢失最后几秒&#xff0c;视频文件也出现类似情况。更奇怪的是&#xff0c;播放器显示的总时长为无限大。这个问题困扰了团队成员几天&…

wps安装教程

WPS office完整版是一款由金山推出的免费办公软件&#xff0c;软件小巧安装快&#xff0c;占用内存极小&#xff0c;启动速度快。WPS office完整版包含WPS文字、WPS表格、WPS演示三大功能模块&#xff0c;让我们轻松办公。WPS的功能是依据OFFICE用户的使用习惯而设计&#xff0…

Java5.--继承-重写-多态

笔记暂未整理&#xff1a; 一、面向对象的第二大特征&#xff1a;继承 1.分类&#xff1a;业务封装 功能封装 2.作用 封装-->属性的安全&#xff01; 继承-->重用----重用代码&#xff08;属性方法&#xff09; 多态-->扩展 3.实现继承的步骤 ①从多个相似的类中…

OpenShift 4 - 云原生备份容灾 - Velero 和 OADP 基础篇

《OpenShift 4.x HOL教程汇总》 说明&#xff1a; 本文主要说明能够云原生备份容灾的开源项目 Velero 及其红帽扩展项目 OADP 的概念和架构篇。操作篇见《OpenShift 4 - 使用 OADP 对容器应用进行备份和恢复&#xff08;附视频&#xff09; 》 Velero 和 OADP 包含的功能和模…

精品!“缠论分笔预测”,缠论分笔波段空间预测指标!

精品&#xff01;“缠论分笔预测”&#xff0c;缠论分笔波段空间预测指标&#xff01; 使用技巧该指标属于缠论相关指标&#xff0c;可结合缠论使用。使用缠论分笔方法来确定波段的高低点&#xff0c;相比使用“ZIG”算法&#xff0c;似乎更为准确。它能有效减少某些股票高点和…

大模型生图安全疫苗注入赛题解析(DataWhale组队学习)

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月实践赛的大模型生图安全疫苗注入赛道&#xff1b;本文主要整理本次赛事的基本流程和优化方法。&#x1f495;&#x1f495;&#x1f60a; 一…

Unity 山水树木

本章节内容 1. Unity对3D游戏物体的简单操作&#xff1b; 2. 构建山水树木的场景 1. Unity 简易操作 1.1 新建3D游戏场景 1. 打开Unity Hub&#xff0c;点击 New Project &#xff08;新建项目&#xff09;按键&#xff0c;选择第二项 3D(Built-In Render Pipeline)&#xf…

harmonyOS next之实现时间打卡定时器

需求&#xff1a;实现一个时间打卡签到按钮。 实现方法&#xff1a;每隔一秒钟获取一下当前时间。 实现代码如下&#xff1a; Column(){Text(this.curTime).fontColor(#FFFFFF).fontWeight(600).fontSize(32vp)Text(上班打卡).fontColor(#FFFFFF) } .width(170vp) .height(170…

【 香格里拉酒店-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …