开源代码分享(24)-考虑柔性负荷的综合能源系统低碳经济优化调度

参考文献:

[1]薛开阳,楚瀛,凌梓,等.考虑柔性负荷的综合能源系统低碳经济优化调度[J].可再生能源, 2019, 37(08): 1206-1213.

[2]刘蓉晖,李子林,杨秀,等.考虑用户侧柔性负荷的社区综合能源系统日前优化调度[J].太阳能学报, 2019, 40(10):2842-2850.

1.基本原理

        基于能源集线器( Energy Hub EH )概念建立了含电热柔性负荷需求的 IES 模型 [9] [10] EH 的能源供给侧包括电网电能 新能源发电 风机 光伏)和天然气 EH 的能源转化存储环节包括燃气轮机 燃气锅炉和储能装置 蓄电池 蓄热槽 );需求 侧电热负荷均由基础负荷和柔性负荷组成 IES 结构如图 1 所示

1.1 柔性负荷模型

1.2 碳交易模型

1.3 IES 低碳经济调度模型

1)目标函数

       
        综合能源系统日运行成本包括分布式电源运行成本、电网购电成本、用户侧柔性负荷优化
的补偿成本、燃气轮机的燃料成本、蓄电池及蓄热槽的折旧成本,目标函数如式( 13 )所示。

2)约束条件

2.运行结果展示

3.matlab代码


%采用CPIEX求解某微网的运行优化情况,下层优化得出的微网向配电网购电或售电功率,以及各机组的出力
%基于能源集线器概念,结合需求侧柔性负荷的可平移、可转移、可削减特性,构建了含风光储、燃气轮机、柔性负荷等
%在内的 IES 模型。 综合考虑了系统运行成本和碳交易成本,建立了以总成本最低为优化目标的 IES 低碳经济
%调度模型,采用cplex求解器对算例进行求解。
%场景1 考虑包括可平移、可转移、可削减的柔性电负荷和包括可平移、可削减的柔性热负荷参与系统优化调度的情况;
clc;clear;close all;
%读取数据 
%电负荷、热负荷、光伏、风机、购电价、售电价
e_load=[160	150	140	140	130	135	150	180	215	250	275	320	335	290	260	275	270	280	320	360	345	310	220	160];%电负荷
h_load=[135	140 150 135 140 120 115 100 115 115 160 180 190 170 140 130 145 200 220 230 160 150 140 130];%热负荷
ppv=[0 0 0	0 0	10 15 25 45 75 90 100 80 100 50  40 30 15 10 0 0 0 0 0  ];%光伏预测数据
pwt=[60 65  70 75 80 85 90 100 125 150 130 110 100 120 125 130 140 160 180 200 175 160 155 150];%风机预测数据
buy_price=[0.25	0.25 0.25 0.25 0.25 0.25 0.25 0.53 0.53 0.53 0.82 0.82 0.82 0.82 0.8 0.53 0.53 0.53 0.82 0.82 0.82 0.53 0.53 0.53];%购电价
sell_price=[0.22 0.22 0.22 0.22 0.22 0.22 0.22 0.42 0.42 0.42 0.65 0.65 0.65 0.65 0.65 0.42 0.42 0.42 0.65 0.65 0.65 0.42 0.42 0.42];%售电价
%需求响应数据
Pcut=[10 10 10 10 10 10 15 15 25 50 50 50 50 50 50 50 50 50 50 50 40 40 15 10];%可削减电负荷
Temp_Pcut=binvar(1,24,'full'); % 电负荷削减标志
PPcut=sdpvar(1,24,'full');%电负荷消减量
n1=zeros(1,1);%消减连续
Hcut=[25 25 25 25 25 25 25 25 30 40 40 40 40 40 40 40 40 40 50 50 30 30 20 15];%可削减热负荷
Temp_Hcut=binvar(1,24,'full'); % 热负荷削减标志
HHcut=sdpvar(1,24,'full');%热负荷消减量
n2=zeros(1,1);%消减连续

Ptran=[0 0 0 0 0 0 0 0 0 0 0 0 25 25 25 25 0 0 0 0 0 0 0 0 ];%可转移电负荷
Temp_Ptran=binvar(1,24,'full'); % 可转移电负荷 转移标志
PPtran=sdpvar(1,24,'full');%电负荷转移量

Pshift1=[0 0 0 0 0 0 0 0 0 0 0 25 25 0 0 0 0 0 0 0 0 0 0 0 ];%可平移电负荷1
Temp_Pshift1=binvar(1,24,'full'); % 可平移电负荷1 平移标志
PPshift1=sdpvar(1,24,'full');%可平移电负荷1量
Pshift2=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  25 25 25 0 0 ];%可平移电负荷2
Temp_Pshift2=binvar(1,24,'full'); % 可平移电负荷2 平移标志
PPshift2=sdpvar(1,24,'full');%可平移电负荷2量
Hshift=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 45 45 0 0 0 0 ];%可平移热负荷
Temp_Hshift=binvar(1,24,'full'); % 可平移热负荷 平移标志
HHshift=sdpvar(1,24,'full');%可平移热负荷量

for i=1:24
    Pfix(i)=e_load(i)-Pshift1(i)-Pshift2(i)-Ptran(i)-Pcut(i);%基础电负荷
end
for i=1:24
    Hfix(i)=h_load(i)-Hshift(i)-Hcut(i);%基础热负荷
end


%定义机组变量
P_pv=sdpvar(1,24,'full');%光伏电输出功率
P_wt=sdpvar(1,24,'full');%风机电输出功率
P_mt=sdpvar(1,24,'full');%燃气轮机电输出功率
P_GB=sdpvar(1,24,'full');%燃气锅炉输出热功率

Pbuy=sdpvar(1,24,'full');%从电网购电电量
Psell=sdpvar(1,24,'full');%向电网售电电量
Pnet=sdpvar(1,24,'full');%与电网交换功率
Temp_net=binvar(1,24,'full'); % 购|售电标志

Pcharge=sdpvar(1,24,'full');%充电功率
UPcharge=binvar(1,24,'full');%充电标志  
Pdischarge=sdpvar(1,24,'full');%放电功率
UPdischarge=binvar(1,24,'full');%放电标志  
B=sdpvar(1,24,'full');%电储能余量

Hcharge=sdpvar(1,24,'full');%储热系统充热
Hdischarge=sdpvar(1,24,'full');%储热系统放热
UHcharge=binvar(1,24,'full'); %储热系统充热标志
UHdischarge=binvar(1,24,'full'); %储热系统放热标志
H=sdpvar(1,24,'full'); %热储能余量


%储能参数
%电储能参数
E_storage_max=0.95*100;E_storage_min=0.4*100;e_loss=0.001;e_charge=0.9;e_discharge=0.9;%电储能容量/自损/充电/放电
%热储能参数
H_storage_max=0.95*100;H_storage_min=0.4*100;h_loss=0.001;h_charge=0.9;h_discharge=0.9;%热储能容量//自损/充热/放热
%约束条件
Constraints =[];
省略......
      
%% 目标函数
%% 从大电网的购电成本
C_gridbuy=0;
for i=1:24
    C_gridbuy=C_gridbuy+Pbuy(i)*buy_price(i);
end
%% 向大电网的售电成本
C_gridsell=0;
for i=1:24
    C_gridsell=C_gridsell+Psell(i)*sell_price(i);
end
%运行成本
C_OM=0;
for i=1:24
 C_OM=C_OM+0.72*P_pv(i)+0.52*P_wt(i);%风机光伏运维成本
end

%% 燃料成本
C_fuel=0;
for i=1:24
 C_fuel=C_fuel+2.5*P_GB(i)/9.7+2.5*P_mt(i)/0.45/9.7;%耗气成本
end
%% 储能运行成本
C_storge=0;
for i=1:24
 C_storge=C_storge+0.5*(Pcharge(i)+Pdischarge(i)+Hcharge(i)+Hdischarge(i));%储能运行成本
end

%% 补偿成本
C_L=0;
for i=1:24
    C_L=C_L+0.2*(PPshift1(i)+PPshift2(i))+0.1*HHshift(i)+0.3*PPtran(i)+0.4*PPcut(i)+0.2*HHcut(i);
end
%% 碳交易成本

Q_carbon=0;%碳排放量-碳配额量(克)
for i=1:24
    Q_carbon=Q_carbon+(((1303-798)*(Pbuy(i)+abs(Psell(i)))+(564.7-424)*(P_GB(i)/9.7+P_mt(i)/0.45/9.7)+...
        (43-78)*P_wt(i)+(154.5-78)*P_pv(i)+91.3*(Pcharge(i)+Pdischarge(i))));
end

E_v=sdpvar(1,5);%每段区间内的长度,分为5段,每段长度是2000
lamda=0.15*10^(-3);%碳交易基价
Constraints=[Constraints,
   Q_carbon==sum(E_v),%总长度等于Q_carbon
   0<=E_v(1:4)<=120000,%除了最后一段,每段区间长度小于等于120000g
   0<=E_v(5),
  ];
%碳交易成本
C_CO2=0;
for v=1:5
    C_CO2=C_CO2+(lamda+(v-1)*0.25*lamda)*E_v(v);
end


F= C_OM+C_fuel+C_gridbuy+C_gridsell+C_storge+C_L+C_CO2;
ops = sdpsettings('solver','cplex', 'verbose', 2);%参数指定程序用cplex求解器
optimize(Constraints,F,ops)
% ops=sdpsettings('solver','cplex');%设置求解方式
% [model,recoveryalmip,diagnostic,internalmodel]=export(Constraints,F,ops);%转为cplex模型
% milpt=Cplex('milp for htc');
% milpt.Model.sense='minimize';
% milpt.Model.obj=model.f;
% milpt.Model.lb=model.lb;
% milpt.Model.ub=model.ub;
% milpt.Model.A=[model.Aineq;model.Aeq];
% milpt.Model.lhs=[-inf*ones(size(model.bineq,1),1);model.beq];
% milpt.Model.rhs=[model.bineq;model.beq];
% milpt.Model.ctype=model.ctype;
% milpt.writeModel('ab.lp');%输出cplex模型(注意大小写)
% milpt.solve();%模型求解

F=value(F)%成本
P_pv=value(P_pv);
P_wt=value(P_wt);
P_mt=value(P_mt);
P_GB=value(P_GB);
Pcharge=value(Pcharge);
Pdischarge=value(Pdischarge);
Hcharge=value(Hcharge);
Hdischarge=value(Hdischarge);
Pbuy=value(Pbuy);
Psell=value(Psell);
PPshift1=value(PPshift1);
PPshift2=value(PPshift2);
PPtran=value(PPtran);
PPcut=value(PPcut);
HHshift=value(HHshift);
HHcut=value(HHcut);

%% 画图

figure
ee=value([Pfix;Pcut;Pshift1;Pshift2;Ptran]);
bar(ee',1,'stack')
hold on
plot(Pfix+Pcut+Pshift1+Pshift2+Ptran,'g-*','linewidth',2)
hold on 
plot(Pfix,'y-*','linewidth',2)
xlabel('时间/h');
ylabel('电负荷功率/kW');
legend('基础电负荷','可消减电负荷','可平移电负荷1','可平移电负荷2','可转移电负荷','等效负荷','固定负荷');
title('优化前用户侧柔性电负荷分布');


figure
hh=value([Hfix;Hcut;Hshift]);
bar(hh',1,'stack');
hold on
plot(Hfix+Hcut+Hshift,'c-*','linewidth',2)
hold on 
plot(Hfix,'y-*','linewidth',2)
legend('基础热负荷','可消减热负荷','可平移热负荷','等效热负荷','基础热负荷');
xlabel('时间/h');
ylabel('热负荷功率/kW');
title('优化前用户侧柔性热负荷分布');

for i=1:24
    op_e_load(i)=Pfix(i)+Pcut(i)+PPshift1(i)+PPshift2(i)+PPtran(i)-PPcut(i);
end
x=1:24;

figure
bar(e_load-op_e_load,'b');
hold on
xlabel('时间/h');
ylabel('电负荷/kW');
yyaxis right
plot(buy_price,'r--*','linewidth',2);
xlabel('时间/h');
ylabel('电价');
title('需求响应前后电负荷曲线');
legend('响应电负荷','市场电价');

figure
bar(e_load,'r');
hold on
plot(op_e_load,'g-*','linewidth',2);
xlabel('时间/h');
ylabel('电负荷/kW');
title('需求响应前后电负荷曲线');
legend('优化前电负荷','优化后电负荷');

E_v=value(E_v);
figure
bar(E_v,0.5)
xlabel('时间/h');
ylabel('碳交易量');
yyaxis right
ecc=(lamda+(v-1)*0.25*lamda)*E_v;
plot(ecc,'r-*','linewidth',2)
ylabel('碳交易成本');
ylim([24 50]);
legend('阶梯式碳交易量','阶梯式碳交易成本');

figure
s=(((1303-798)*(Pbuy+abs(Psell))+(564.7-424)*(P_GB/9.7+P_mt/0.45/9.7)+...
        (43-78)*P_wt+(154.5-78)*P_pv+91.3*(Pcharge+Pdischarge)));
bar(s,0.5,'g')
hold on
yyaxis right
plot(buy_price,'r-*','linewidth',2);
xlabel('时间/h');
ylabel('电价');
title('碳交易总量');
legend('碳交易总量','市场电价');

for i=1:24
    op_h_load(i)=Hfix(i)+Hcut(i)+HHshift(i)-HHcut(i);
end
x=1:24;
figure
bar(h_load,'r');
hold on
plot(op_h_load,'g-*','linewidth',2);
xlabel('时间/h');
ylabel('热负荷/kW');
title('需求响应前后热负荷曲线');
legend('优化前热负荷','优化后热负荷');

figure
bar(h_load-op_h_load,'r');
hold on
xlabel('时间/h');
ylabel('热负荷/kW');
yyaxis right
plot(buy_price,'g--*','linewidth',2);
xlabel('时间/h');
ylabel('电价');
title('需求响应前后热负荷曲线');
legend('响应热负荷','市场电价');


b=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
eee=value([Pbuy;Pdischarge;P_pv; P_mt;P_wt]);
eee1=value([Psell;-Pcharge;b;b;b]);
figure
bar(eee','stack');
hold on
plot(x,op_e_load,'-gs');
legend('电网交互功率','蓄电池充放电','光伏出力','燃气轮机供电','风电出力','电负荷需求');
bar(eee1','stack');
title('电负荷平衡');
xlabel('时段');ylabel('功率/kW');

b=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
hhh=value([P_GB;Hdischarge;0.83*P_mt/0.45]);
hhh1=value([b;-Hcharge;b]);
figure
bar(hhh','stack');
hold on
plot(x,op_h_load,'-rs');
legend('燃气锅炉产热','热储能充放热','燃气轮机供热','热负荷需求');
bar(hhh1','stack');
title('热负荷平衡');
xlabel('时段');ylabel('功率/kW');


for i=1:24
    PPPcut(i)=Pcut(i)-PPcut(i); %所剩的可消减电负荷
end
figure
ee=value([Pfix;PPPcut;PPshift1;PPshift2;PPtran]);
bar(ee','stack');
legend('基础电负荷','可消减电负荷','可平移电负荷1','可平移电负荷2','可转移电负荷');
xlabel('时间/h');
ylabel('电负荷功率/kW');
title('优化后用户侧柔性电负荷分布');

for i=1:24
    HHHcut(i)=Hcut(i)-HHcut(i); %所剩的可消减热负荷
end
figure
hh=value([Hfix;HHHcut;HHshift]);
bar(hh','stack');
legend('基础热负荷','可消减热负荷','可平移热负荷');
xlabel('时间/h');
ylabel('热负荷功率/kW');
title('优化后用户侧柔性热负荷分布');

        以上仅为部分代码,完整代码获取方式如下:

开源代码分享(24)-考虑柔性负荷的综合能源系统低碳经济优化调度matlab代码资源-CSDN文库

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧药房系统源码解析:开发高效医保购药小程序教学

今天&#xff0c;小编将为大家讲解智慧药房系统的源码结构及其开发过程&#xff0c;旨在为开发者提供一份高效、可靠的指南。 一、系统架构概述 智慧药房系统由前端和后端两部分组成。医保购药小程序则是智慧药房系统的一个重要应用场景&#xff0c;其功能主要包括药品浏览、医…

学浪app视频下载方法,让你随时随地观看

学浪app客户端现在越来越难&#xff0c;不但禁止了录屏软件&#xff0c;而且连抓包都禁止了&#xff0c;其实学浪的难度很高&#xff0c;我只是很幸运&#xff0c;找到了网页进入学浪的方法&#xff0c;但是我知道这个方法不稳定&#xff0c;所以就做成了软件&#xff0c;大家直…

Vscode上使用Clang,MSVC, MinGW, (Release, Debug)开发c++完全配置教程(包含常见错误),不断更新中.....

1.VSCode报错头文件找不到 clang(pp_file_not_found) 在Fallback Flags中添加 -I&#xff08;是-include的意思&#xff0c;链接你的编译器对应头文件地址&#xff0c;比如我下面的是MSVC的地址&#xff09; 问题得到解决~

成为程序员后,我才真正明白的那些事儿

嗨&#xff0c;我是小路。一名努力向上生长&#xff0c;提高职业能力的90后程序员。今天想和大家分享一下踏入编程世界&#xff0c;成为一名程序员以来&#xff0c;那些让我恍然大悟、受益匪浅的道理。无论你是正在考虑转行编程&#xff0c;还是已经在路上持续精进程序猿们&…

Java集合相关的List、Set、Map基础知识

目录 一、集合介绍 二、List 三、Map HashMap的数据结构 如何理解红黑树 四、set 一、集合介绍 在Java中&#xff0c;集合是一种用于存储对象的数据结构&#xff0c;它提供了一种更加灵活和强大的方式来处理和操作数据。Java集合框架提供了一系列接口和类&#xff0c;用…

leetcode1143. 最长公共子序列(ACM模式解法)

题目描述 给你一个序列X和另一个序列Z&#xff0c;当Z中的所有元素都在X中存在&#xff0c;并且在X中的下标顺序是严格递增的&#xff0c;那么就把Z叫做X的子序列。 例如&#xff1a;Z是序列X的一个子序列&#xff0c;Z中的元素在X中的下标序列为<1,2,4,6>。 现给你两个…

界面组件DevExpress Blazor UI v23.2 - 支持.NET 8、全新的项目模版

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验&#xff0c;这个UI自建库提供了一套全面的原生Blazor UI组件&#xff08;包括Pivot Grid、调度程序、图表、数据编辑器和报表等&#xff09;。 DevExpress Blazor控件目前已经升级…

4/26发布发布:缺了好几次的作业,矩形法+二分法求下面方程根+顺序查找n+程序填空,补一下还有八九没做,炸8412 字不是干的,哈哈哈

OK了发布 你说的对&#xff0c;但是釜山行里逃过了六节车厢的丧尸&#xff0c;却逃不过一节车厢的人心&#xff0c;这说明了什么&#xff1f;说明一节更比六节强&#xff0c;王中王&#xff0c;火腿肠&#xff0c;果冻我要喜之郎&#xff0c;上课要听鹏哥讲&#xff01; 目录…

合合信息:acge_text_embedding 文本向量化模型登顶 C-MTEB 中文榜单

近期&#xff0c;合合信息的 acge_text_embedding 文本向量化模型在最近的比赛中获得了 MTEB 中文榜单&#xff08;C-MTEB&#xff09;榜首&#xff01;C-MTEB 作为中文文本向量性能的评测标准&#xff0c;以其全面性和权威性在业内享有盛誉值得关注。接下来让我们仔细分析一下…

SL1581 耐压30V蓝牙音响应用 24降5V 12降5V 外围简单

SL1581蓝牙音响应用方案是一种高效、稳定的电源管理方案&#xff0c;专为蓝牙音响设备设计。该方案采用耐压30V降压5V的设计&#xff0c;能够有效地将高电压降至适合蓝牙音响设备工作的低电压&#xff0c;保证设备的稳定运行。同时&#xff0c;外围电路设计简单&#xff0c;方便…

分布式与一致性协议之CAP(五)

CAP 理论 如何使用BASE理论 以InfluxDB系统中DATA节点的集群实现为例。DATA节点的核心功能是读和写&#xff0c;所以基本可用是指读和写的基本可用。我们可以通过分片和多副本实现读和写的基本可用。也就是说&#xff0c;将同一业务的数据先分片&#xff0c;再以多份副本的形…

C语言基础知识笔记——万字学习记录

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本文主要参考浙大翁恺老师的C语言讲解以及其他博主的C语言学习笔记&#xff0c;进而梳理C语言的基础知识&#xff0c;为后续系统性学习数据结构和其他语言等知识夯实一定的基础。&#xff08;其他博主学习笔记的链接包括&#x…

【运维】Git 分支管理

一般来讲&#xff0c;系统代码需要经过研发、测试、生产三种环境。那么在Git上如何管理分支&#xff0c;才不会乱&#xff1f;在线上生产环境有问题时有条不紊的解决。 经过发展&#xff0c;有一个Git Flow原理可帮助解决。设置以下几种分支。 master——production生产环境。…

Fusion360导入STL和OBJ文件转化为实体文件自由编辑

Fusion360导入STL和OBJ文件转化为实体文件自由编辑 1.概述 在模型网站上下载的3D打印文件通常是STL和OBJ格式文件&#xff0c;该类型文件都是网格类型的文件&#xff0c;Fusion360只可以对实体文件进行编辑。因此不能对他们直接修改&#xff0c;需要导入文件将他们转为实体文…

Linux多进程(五) 进程池 C++实现

一、进程池的概念 1.1、什么是进程池 进程池是一种并发编程模式&#xff0c;用于管理和重用多个处理任务的进程。它通常用于需要频繁创建和销毁进程的情况&#xff0c;以避免因此产生的开销。 进程池的优点包括&#xff1a; 减少进程创建销毁的开销&#xff1a;避免频繁创建和…

笔记:编写程序,分别采用面向对象和 pyplot 快捷函数的方式绘制正弦曲线 和余弦曲线。 提示:使用 sin()或 cos()函数生成正弦值或余弦值。

文章目录 前言一、面向对象和 pyplot 快捷函数的方式是什么&#xff1f;二、编写代码面向对象的方法&#xff1a;使用 pyplot 快捷函数的方法&#xff1a; 总结 前言 本文将探讨如何使用编程语言编写程序&#xff0c;通过两种不同的方法绘制正弦曲线和余弦曲线。我们将分别采用…

备考2024年小学生古诗文大会:做做10道历年真题和知识点(持续)

根据往年的安排&#xff0c;2024年上海市小学生古诗文大会预计还有一个月就将启动。我们继续来随机看10道往年的上海小学生古诗文大会真题&#xff0c;这些题目来自我去重、合并后的1700在线题库&#xff0c;每道题我都提供了参考答案和独家解析。 根据往期的经验&#xff0c;只…

【网络原理】TCP协议的相关机制(确认应答、超时重传)

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】Java网络编程中的基本概念及实现UDP、TCP客户端服务器程序&#xff08;万字博文&#xff09; 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制&#xff08;CRC算法、MD5算法&#xff09; 文章目…

uniapp制作分页查询功能

效果 代码 标签中 <uni-pagination change"pageChanged" :current"pageIndex" :pageSize"pageSize" :total"pageTotle" class"pagination" /> data中 pageIndex: 1, //分页器页码 pageSize: 10, //分页器每页显示…

第72天:漏洞发现-Web框架中间件联动GobyAfrogXrayAwvsVulmap

案例一&#xff1a;某 APP-Web 扫描-常规&联动-Burp&Awvs&Xray Acunetix 一款商业的 Web 漏洞扫描程序&#xff0c;它可以检查 Web 应用程序中的漏洞&#xff0c;如 SQL 注入、跨站脚本攻击、身份验证页上的弱口令长度等。它拥有一个操作方便的图形用户界 面&#…
最新文章