智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案

智能矿井沙盘模型涉及环境感知系统(甲烷/一氧化碳/风速/温度/粉尘/矿压等多类型传感器)、智能控制中心、井下通信网络(5G/WiFi6/UWB定位基站)、煤矿工作面实训装备等多个子系统的协同控制。一套完整的智能矿井沙盘控制系统,需要实现“环境感知层采集数据→网络传输层实时回传→智能控制层分析决策→执行层自动响应”的完整闭环。与煤矿设备模型(聚焦单体设备动作)不同,智能矿井沙盘控制系统的核心是多层协同与双向联动——地面调度中心指令下发、井下设备状态反馈、传感器数据实时映射,每个环节的控制逻辑必须与实际智能矿井系统一致。

本文结合筑城世纪模型在工业模型控制系统开发中的项目经验(2008年成立,2000㎡制作工厂,控制系统自主研发,已为华北电力大学、国机集团、巴斯夫、国家电网、清华大学等500+企事业单位提供服务),梳理智能矿井沙盘模型多系统协同控制系统的设计与实现方案,涵盖系统架构、硬件选型、多类型传感器信号采集与模拟、Modbus RTU寄存器映射、多路执行器协同控制代码实现及数字孪生数据对接要点。

一、为什么智能矿井沙盘必须用STM32+Modbus RTU方案
智能矿井沙盘的控制系统有几个特殊要求:

第一,多类型传感器信号采集与模拟要求高。 矿井环境感知系统涉及甲烷、一氧化碳、风速、温度、粉尘、矿压等多种传感器,部分传感器需采集真实信号(如温度、风速),部分需模拟信号(如甲烷浓度、矿压数据)。STM32的多通道ADC、数字接口和DAC输出可满足混合信号处理需求。

第二,多子系统协同控制逻辑复杂。 智能矿井沙盘涉及感知层、传输层、控制层、执行层四个层面的协同——传感器数据变化触发通信链路状态更新,通信状态影响控制中心决策,控制指令驱动执行层设备动作。各层之间的联动逻辑需通过状态机精确调度。

第三,地面-井下双向联动是核心演示功能。 地面调度中心发出的控制指令需通过模拟通信网络传输至井下执行设备,井下设备状态需实时反馈至地面调度中心。这要求控制系统支持双向数据流和异步事件处理。

第四,后期修改频繁。 智能矿井沙盘的控制逻辑经常根据客户需求调整(如新增“故障模拟”模式、调整传感器报警阈值)。自主研发的控制系统通过寄存器在线修改参数即可完成调整。

STM32 vs PLC 选型对比
对比项 PLC方案 STM32方案
硬件成本 8000-15000元 800-1500元
混合信号处理 需专用模拟量/数字量模块 ADC/DAC/GPIO直接处理
多子系统协同 梯形图实现困难 C语言状态机灵活可控
双向联动逻辑 实现困难 中断+状态机精确调度
后期修改 需编程软件授权+工程师到场 寄存器在线修改,无需重编译
为什么用RS485/Modbus RTU?
智能矿井沙盘模型内部传感器和执行器分布广泛(井下巷道、地面调度中心、通信基站等多区域),RS485总线支持多点通讯(理论32个节点),一线串接所有设备,布线简洁。Modbus RTU是工业标准协议,支持接入触摸屏、云平台网关、数字孪生系统等第三方设备。

二、系统架构设计
2.1 总体架构
text
┌─────────────────────────────────────────────────────────────┐
│ 数字孪生大屏/云平台(数据可视化 + 远程控制) │
│ 实时数据展示 井下三维地图 远程指令下发 │
└─────────────────────────┬───────────────────────────────────┘
│ MQTT/HTTP(4G/WiFi网关)
┌─────────────────────────▼───────────────────────────────────┐
│ 触摸屏/中控平板(Modbus RTU 主站) │
│ 本地监控 手动控制 参数设置 模式切换 │
└─────────────────────────┬───────────────────────────────────┘
│ RS485(9600,8N1,120Ω终端电阻)
┌─────────────────────────▼───────────────────────────────────┐
│ STM32F103RCT6 从站(边缘计算网关) │
│ 传感器采集 → 逻辑判断 → 执行器驱动 → 数据上报 │
└───────┬─────────┬─────────┬─────────┬───────────────────────┘
│ │ │ │
┌───▼───┐ ┌───▼───┐ ┌───▼───┐ ┌───▼───┐
│传感器 │ │通信 │ │控制 │ │执行器 │
│采集 │ │链路 │ │中心 │ │驱动 │
│(环境 │ │指示 │ │联动 │ │(电机/ │
│感知) │ │(5G/ │ │(地面- │ │灯带/ │
│ │ │UWB) │ │井下) │ │指示灯)│
└───────┘ └───────┘ └───────┘ └───────┘
2.2 硬件选型
组件 选型 数量 选型理由
主控MCU STM32F103RCT6 1 256KB Flash,51个GPIO,3个USART
温湿度传感器 DHT22 2-3 数字输出,精度±0.5°C
风速传感器 热膜式风速传感器 1-2 模拟输出,0-5V
气体传感器 MQ系列(甲烷/CO模拟) 2-3 模拟输出,浓度模拟
粉尘传感器 GP2Y1010AU0F 1-2 模拟输出,PWM驱动
通讯接口 MAX485ESA 1 RS485收发器
执行器驱动 DRV8833/继电器模组 依执行器数 驱动微型电机/电磁阀
灯带 WS2812B(60灯/米) 依链路数 单总线控制,通信链路指示
数据网关 ESP8266/4G模块 1 WiFi/4G上云
2.3 GPIO分配表
端口 功能 信号类型 说明
PA9/PA10 USART1 通讯 与触摸屏RS485通讯
PA2/PA3 USART2 通讯 预留与4G/WiFi网关通讯
PB0 温湿度传感器1 单总线 DHT22(井下巷道)
PB1 温湿度传感器2 单总线 DHT22(地面调度中心)
PA0 风速传感器 ADC输入 0-5V模拟量
PA1 甲烷传感器 ADC输入 模拟浓度信号
PA4 一氧化碳传感器 ADC输入 模拟浓度信号
PA5 粉尘传感器 ADC输入 模拟浓度信号
PB3 采煤机电机 PWM输出 滚筒旋转控制
PB4 刮板输送机电机 PWM输出 链轮驱动控制
PB5 液压支架电机 PWM输出 升降柱控制
PB6 5G基站指示灯 GPIO输出 通信覆盖指示
PB7 UWB定位指示灯 GPIO输出 定位信号指示
三、Modbus寄存器映射设计
以下为智能矿井沙盘控制系统的寄存器定义(共40个保持寄存器):

3.1 系统控制寄存器(40001-40008)
寄存器地址 偏移地址 功能 数据类型 读写 取值范围 说明
40001 0x0000 系统启停 bit R/W 0/1 0=停止,1=启动
40002 0x0001 运行模式 uint16 R/W 1-3 1=自动演示,2=手动控制,3=故障模拟
40003 0x0002 当前场景 uint16 R 0-4 0=待机,1=感知层,2=传输层,3=控制层,4=全场景
40004 0x0003 采集周期 uint16 R/W 1-60 传感器采集周期(秒)
40005 0x0004 系统状态 uint16 R 0-3 0=停止,1=运行,2=告警,3=故障
40006 0x0005 故障代码 uint16 R 0-99 0=无故障
40007 0x0006 数据上报 bit R/W 0/1 0=不上报云端,1=上报云端
40008 0x0007 固件版本 uint16 R — 只读
3.2 环境感知传感器数据寄存器(40009-40018,只读)
寄存器地址 偏移地址 功能 数据类型 单位 说明
40009 0x0008 井下温度 uint16 0.1°C 如255=25.5°C
40010 0x0009 井下湿度 uint16 0.1%RH
40011 0x000A 风速 uint16 0.1m/s
40012 0x000B 甲烷浓度 uint16 0.01% 0-100%LEL
40013 0x000C 一氧化碳浓度 uint16 ppm
40014 0x000D 粉尘浓度 uint16 mg/m³
40015 0x000E 矿压数据 uint16 MPa 模拟值
40016 0x000F 地面温度 uint16 0.1°C
40017 0x0010 地面湿度 uint16 0.1%RH
3.3 通信与定位系统寄存器(40019-40028)
寄存器地址 偏移地址 功能 数据类型 读写 说明
40019 0x0012 5G基站状态 uint16 R/W 0=离线,1=在线,2=故障
40020 0x0013 WiFi6基站状态 uint16 R/W 同上
40021 0x0014 UWB定位状态 uint16 R/W 同上
40022 0x0015 井下人员定位数 uint16 R 当前井下人员数量
40023 0x0016 井下车辆定位数 uint16 R 当前井下车辆数量
40024 0x0017 通信覆盖率 uint16 R 0-100%
40025 0x0018 信号强度指示 uint16 R 0-100
40026 0x0019 应急广播状态 bit R/W 0=关闭,1=开启
3.4 执行器控制与阈值寄存器(40029-40040)
寄存器地址 偏移地址 功能 数据类型 读写 说明
40029 0x001C 采煤机启停 bit R/W 0=停止,1=启动
40030 0x001D 采煤机速度 uint16 R/W 0-100%
40031 0x001E 刮板输送机启停 bit R/W 0=停止,1=启动
40032 0x001F 液压支架动作 uint16 R/W 1=降架,2=移架,3=升架,4=推溜
40033 0x0020 甲烷报警阈值 uint16 R/W %LEL
40034 0x0021 一氧化碳报警阈值 uint16 R/W ppm
40035 0x0022 风速下限阈值 uint16 R/W m/s
40036 0x0023 温度上限阈值 uint16 R/W 0.1°C
40037 0x0024 地面-井下联动 bit R/W 0=关闭,1=开启
40038 0x0025 故障模拟类型 uint16 R/W 1=传感器故障,2=通信中断,3=设备故障
40039 0x0026 演示速度 uint16 R/W 1-5档
四、核心代码实现
4.1 系统初始化与多类型传感器采集
cpp
#include “ModbusRTU.h”
#include “DHT.h”
#include <Wire.h>

#define SLAVE_ID 1
#define BAUD_RATE 9600

// 传感器GPIO定义
#define DHTPIN1 PB0 // 井下温湿度
#define DHTPIN2 PB1 // 地面温湿度
#define DHTTYPE DHT22

#define ADC_WIND_SPEED PA0 // 风速传感器
#define ADC_METHANE PA1 // 甲烷传感器
#define ADC_CO PA4 // 一氧化碳传感器
#define ADC_DUST PA5 // 粉尘传感器

// 执行器GPIO定义
#define MOTOR_SHEARER PB3 // 采煤机电机(PWM)
#define MOTOR_CONVEYOR PB4 // 刮板输送机电机(PWM)
#define MOTOR_SUPPORT PB5 // 液压支架电机(PWM)
#define LED_5G PB6 // 5G基站指示灯
#define LED_UWB PB7 // UWB定位指示灯

ModbusRTU mb;
uint16_t holdingRegs[40] = {0};

// 传感器数据结构
struct SensorData {
float temp_underground;
float hum_underground;
float wind_speed;
float methane;
float co;
float dust;
float pressure;
float temp_ground;
float hum_ground;
};

SensorData sensor;

DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);

// 滑动平均滤波器
#define FILTER_SIZE 5
float filterBuffer[FILTER_SIZE];
int filterIndex = 0;

float movingAverage(float newValue) {
filterBuffer[filterIndex] = newValue;
filterIndex = (filterIndex + 1) % FILTER_SIZE;
float sum = 0;
for (int i = 0; i < FILTER_SIZE; i++) sum += filterBuffer[i];
return sum / FILTER_SIZE;
}

void setup() {
SystemClock_Config(); // 72MHz
Serial1.begin(BAUD_RATE);
mb.begin(&Serial1);
mb.slave(SLAVE_ID);
mb.addHreg(0, holdingRegs, 40);

mb.onGet(handleRead);
mb.onSet(handleWrite);

dht1.begin();
dht2.begin();

pinMode(MOTOR_SHEARER, OUTPUT);
pinMode(MOTOR_CONVEYOR, OUTPUT);
pinMode(MOTOR_SUPPORT, OUTPUT);
pinMode(LED_5G, OUTPUT);
pinMode(LED_UWB, OUTPUT);

Timer1.initialize(1000000);
Timer1.attachInterrupt(sensorCollectTick);

}

void loop() {
mb.task();
}
4.2 多传感器数据采集与报警逻辑
cpp
void sensorCollectTick() {
// 采集井下温湿度
sensor.temp_underground = dht1.readTemperature();
sensor.hum_underground = dht1.readHumidity();

// 采集地面温湿度
sensor.temp_ground = dht2.readTemperature();
sensor.hum_ground = dht2.readHumidity();

// 采集风速(模拟量转工程值,0-5V对应0-20m/s)
int windADC = analogRead(ADC_WIND_SPEED);
sensor.wind_speed = (windADC / 4095.0) * 20.0;

// 采集甲烷浓度(模拟量转0-100%LEL)
int methADC = analogRead(ADC_METHANE);
sensor.methane = (methADC / 4095.0) * 100.0;

// 采集一氧化碳浓度
int coADC = analogRead(ADC_CO);
sensor.co = (coADC / 4095.0) * 500.0;

// 采集粉尘浓度
int dustADC = analogRead(ADC_DUST);
sensor.dust = (dustADC / 4095.0) * 50.0;

// 更新寄存器
holdingRegs[8] = (uint16_t)(sensor.temp_underground * 10);
holdingRegs[9] = (uint16_t)(sensor.hum_underground * 10);
holdingRegs[10] = (uint16_t)(sensor.wind_speed * 10);
holdingRegs[11] = (uint16_t)(sensor.methane * 100);
holdingRegs[12] = (uint16_t)(sensor.co);
holdingRegs[13] = (uint16_t)(sensor.dust * 10);
holdingRegs[15] = (uint16_t)(sensor.temp_ground * 10);
holdingRegs[16] = (uint16_t)(sensor.hum_ground * 10);

// 报警逻辑
uint16_t methThreshold = holdingRegs[32];
uint16_t coThreshold = holdingRegs[33];

if (sensor.methane > methThreshold || sensor.co > coThreshold) {
    holdingRegs[4] = 2;  // 系统状态=告警
    // 触发报警灯闪烁
    digitalWrite(LED_5G, HIGH);
    delay(100);
    digitalWrite(LED_5G, LOW);
} else {
    holdingRegs[4] = 1;  // 系统状态=运行
}

// 自动演示模式
if (holdingRegs[1] == 1) {
    autoDemo();
}

}
4.3 地面-井下双向联动控制
cpp
void autoDemo() {
uint8_t scene = holdingRegs[2];
uint8_t 联动状态 = holdingRegs[36];

switch(scene) {
    case 1:  // 感知层演示
        simulateSensorTrend();
        break;
    case 2:  // 传输层演示
        simulateCommunication();
        break;
    case 3:  // 控制层演示
        if (联动状态 == 1) {
            groundToUndergroundControl();
        }
        break;
    case 4:  // 全场景演示
        fullSceneDemo();
        break;
}

}

void simulateSensorTrend() {
// 模拟甲烷浓度缓慢上升(展示报警触发)
static float trend = 0;
trend += 0.1;
if (trend > 20) trend = 0;
sensor.methane = 10 + trend;
holdingRegs[11] = (uint16_t)(sensor.methane * 100);
}

void simulateCommunication() {
// 模拟5G基站覆盖范围
static int coverage = 0;
coverage = (coverage + 1) % 100;
holdingRegs[23] = coverage;

// 灯带动态显示通信链路状态
if (coverage > 70) {
    digitalWrite(LED_5G, HIGH);
} else if (coverage > 40) {
    digitalWrite(LED_5G, HIGH);
    delay(500);
    digitalWrite(LED_5G, LOW);
    delay(500);
} else {
    digitalWrite(LED_5G, HIGH);
    delay(200);
    digitalWrite(LED_5G, LOW);
    delay(200);
}

}

void groundToUndergroundControl() {
// 地面调度中心发出指令 → 井下设备响应
if (holdingRegs[28] == 1) { // 采煤机启动指令
analogWrite(MOTOR_SHEARER, holdingRegs[29]);
holdingRegs[28] = 0;
}

if (holdingRegs[30] == 1) {  // 刮板输送机启动指令
    analogWrite(MOTOR_CONVEYOR, 180);
    holdingRegs[30] = 0;
}

}

void fullSceneDemo() {
// 完整闭环:感知→传输→控制→执行
static int step = 0;
step = (step + 1) % 4;

switch(step) {
    case 0: sensorCollectTick(); break;
    case 1: digitalWrite(LED_5G, HIGH); break;
    case 2: holdingRegs[36] = 1; break;
    case 3: groundToUndergroundControl(); break;
}

}
4.4 寄存器读写回调
cpp
uint16_t handleRead(uint16_t offset, uint8_t index) {
return holdingRegs[offset];
}

void handleWrite(uint16_t offset, uint8_t index, uint16_t value) {
switch(offset) {
case 0: // 系统启停
holdingRegs[0] = value;
break;
case 1: // 运行模式切换
holdingRegs[1] = value;
break;
case 2: // 场景切换
holdingRegs[2] = value;
break;
case 28: // 采煤机启停
if (value == 1) analogWrite(MOTOR_SHEARER, holdingRegs[29]);
else analogWrite(MOTOR_SHEARER, 0);
holdingRegs[28] = value;
break;
case 29: // 采煤机速度
if (holdingRegs[28] == 1) analogWrite(MOTOR_SHEARER, value);
holdingRegs[29] = value;
break;
case 30: // 刮板输送机启停
if (value == 1) analogWrite(MOTOR_CONVEYOR, 180);
else analogWrite(MOTOR_CONVEYOR, 0);
holdingRegs[30] = value;
break;
case 32: case 33: case 34: case 35:
holdingRegs[offset] = value;
break;
case 36: // 地面-井下联动开关
holdingRegs[36] = value;
break;
case 37: // 故障模拟
if (value == 1) simulateFault();
holdingRegs[37] = value;
break;
default:
holdingRegs[offset] = value;
break;
}
}
五、关键技术细节
5.1 多类型传感器混合信号采集
智能矿井沙盘涉及数字传感器(DHT22温湿度)、模拟传感器(风速、气体浓度、粉尘)和模拟信号发生器(矿压)。STM32的ADC支持多通道扫描模式,可同时采集多路模拟信号。

注意事项: 气体传感器(MQ系列)需预热3-5分钟才能输出稳定信号,粉尘传感器(GP2Y1010AU0F)需PWM驱动(典型驱动周期10ms,占空比0.32ms)。传感器数据存在噪声,建议在软件中做滑动平均滤波。

5.2 通信链路状态模拟
智能矿井沙盘的通信网络演示需要通过灯带或指示灯展示5G基站覆盖范围、信号强度、定位精度等信息。WS2812B灯带支持独立控制每个灯珠,可用不同颜色表示信号强度(绿色=强,黄色=中,红色=弱),用灯珠点亮数量表示覆盖范围。

5.3 地面-井下双向联动的异步事件处理
地面调度中心与井下设备之间的双向联动涉及异步事件处理——地面指令下发后需等待井下设备响应,井下状态变化后需主动上报地面。建议采用状态机+事件队列的设计模式:地面指令入队→状态机逐条处理→执行完成后生成响应事件→上报地面。

5.4 故障模拟与应急演练
智能矿井沙盘通常需要支持故障模拟功能(传感器故障、通信中断、设备故障),用于安全培训和应急演练。建议设计独立的故障注入寄存器(40037),写入不同故障码触发对应的故障模拟场景。

以“传感器故障模拟”为例:当40037写入1时,控制系统将指定传感器的读数强制置零或置为异常值(如甲烷浓度突变为0或100%),同时触发系统状态切换为“故障”并点亮报警灯。在煤矿安全培训场景中,学员需要根据沙盘上的异常指示判断故障类型并执行应急预案,这比单纯的理论培训直观得多,也是智能矿井沙盘区别于普通展示沙盘的核心价值。

5.5 通讯异常处理
策略 实现方式 适用场景
保持当前状态 不改变输出,等待通讯恢复 展厅演示
自动切换应急模式 切换至预设安全状态 安全要求较高
状态上报 向上位机发送故障码 远程监控
六、现场调试要点
6.1 传感器异常排查
现象 排查方向 解决方案
温湿度读数异常 接线/时序 确认DHT22供电3.3-5V,数据线接上拉电阻
气体浓度读数跳变 ADC噪声/预热不足 增加软件滤波,预热3-5分钟
风速传感器无数据 供电/信号 确认传感器供电正常,检查信号线
粉尘传感器无输出 PWM驱动 确认PWM驱动信号正确(10ms周期,0.32ms高电平)
6.2 通信链路指示异常排查
现象 排查方向 解决方案
灯带全亮或全灭 数据线虚接 重新焊接,确认GPIO输出电平
灯带颜色错误 数据时序 确认系统时钟72MHz,WS2812B时序正确
灯带供电不足 电源 测量末端电压,<4.8V需增加供电点
6.3 地面-井下联动异常排查
现象 排查方向 解决方案
地面指令下发无响应 寄存器地址 确认指令写入正确的寄存器地址
井下设备动作延迟 状态机调度 检查定时器中断周期(1ms)
联动逻辑错乱 状态机状态 检查状态机状态转换条件
6.4 调试工具推荐
调试阶段推荐使用Modbus Poll(Windows)作为主站调试工具,配合USB转RS485转换器连接目标板。通讯正常后,依次测试各寄存器的读写功能,确认传感器数据更新正常后再测试联动逻辑。

七、工程实践能力
基于STM32平台的多系统协同控制方案,已在筑城世纪多个工业模型项目中完成部署验证:

华北电力大学火电原理教学沙盘:多路温度、压力传感器采集与多设备联动控制

国机集团柬埔寨燃机联合循环电站沙盘:6级灯光联动、65米灯带,多节点时序控制

上述项目验证的核心能力(多类型传感器混合信号采集、多子系统协同控制、Modbus RTU数据对接、地面-井下双向联动逻辑),与智能矿井沙盘的控制需求一致。

筑城世纪模型在智能矿井沙盘方向具备以下三项核心交付能力:

  1. 矿井智能化系统理解能力

技术团队具备对接矿井智能化系统设计图纸的能力,能够按图纸精确还原传感器部署位置、通信基站布局、数据传输链路和控制逻辑。传感器类型识别、通信协议标识、控制层级划分按图施工,可签署技术图纸确认单。

  1. 控制系统自主研发能力

控制系统基于STM32平台自主研发,支持多类型传感器混合信号采集、多子系统协同控制、地面-井下双向联动逻辑编程、Modbus RTU数据对接。后期可根据客户需求随时修改控制逻辑和阈值参数,无需依赖第三方。

  1. 全流程自主交付能力

2000㎡制作工厂,位于北京通州,可为京津冀地区智能矿井项目提供本地化定制服务。设计、3D打印、CNC加工、喷涂、组装、控制系统编程全部自主完成,不外包。签约前出具《模型制作工艺说明》,零增项承诺写入合同。有图纸就能做。

八、总结
智能矿井沙盘模型多系统协同控制系统的设计,核心在于三个层面:

  1. 多类型传感器混合信号采集是感知基础。 智能矿井涉及数字传感器、模拟传感器和信号发生器,需要ADC多通道扫描、数字接口和软件滤波的综合运用。气体传感器的预热和粉尘传感器的PWM驱动是容易被忽视的细节。

  2. 多系统协同与双向联动是核心。 智能矿井沙盘的价值在于展示“感知→传输→控制→执行”的完整闭环。采用状态机+事件队列的设计模式,将感知层、传输层、控制层、执行层定义为独立状态,各层之间通过事件驱动切换,逻辑清晰、便于调试。

  3. 控制系统自主可控是保障。 智能矿井沙盘在交付后经常需要根据客户需求调整控制逻辑(如新增故障模拟模式、调整报警阈值、修改联动规则)。自主研发的控制系统才能做到“想改就改、想升级就升级”。

筑城世纪模型的智能矿井沙盘控制系统方案,基于STM32平台自主研发,支持Modbus RTU协议,已在多套工业模型项目中完成部署验证。控制系统支持多类型传感器混合信号采集、多子系统协同控制、地面-井下双向联动、故障模拟与应急演练,后期可根据需求随时修改控制逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值