西莫电机圈

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

查看: 6596|回复: 36

[讨论] 异步电机间接型矢量控制驱动程序(C语言)及有关问题讨论

  [复制链接]

该用户从未签到

发表于 2010-6-15 10:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 roccy 于 2010-6-17 14:28 编辑

我现在在做异步电机的矢量控制。这是我用C语言编写的矢量控制驱动程序。运行起来,电机不能被软件来控制,转速飞快,电流超高。只能调节电压来控制。想向各位前辈们请教并讨论一下究竟是哪里出了问题。用的软件里有许多那个公司开发的程序,基本上都标了注释。如果有遗漏和表达不清楚的地方,请回贴指正,我会再详细写明。希望各位前辈讨论并帮忙指出程序的错误之处,谢谢各位。
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过

该用户从未签到

 楼主| 发表于 2010-6-15 10:55 | 显示全部楼层
本帖最后由 mator 于 2010-6-15 10:58 编辑

#include <mwio3.h>

/* AD的range設定 */
#define CH0_RANGE 400.0 /* CH0 range for vu */
#define CH1_RANGE 400.0 /* CH1 range for vw */
#define CH2_RANGE 50.0 /* CH2 range for iu */
#define CH3_RANGE 50.0 /* CH3 range for iw */
#define CH4_RANGE 400.0 /* CH4 range for E */
#define CH5_RANGE 50.0 /* CH5 range for Idc */
#define CH6_RANGE 10.0 /* CH6 range for CH6 */
#define CH7_RANGE 10.0 /* CH7 range for CH7 */

/* 数值设定 */
#define PI(n) 3.14159265358979 * n /* 圆周率*π */
#define BDN 0   /*  */
#define CH 0   /*  */
#define tr 0.084904545  /* L2/r2 转子时间常数 */
#define TM 200   /* 速度计算间隔[μs] */
#define FM 5000   /* 速度计算间隔[Hz] */
#define RESOLUTION 4000  /* encoder的P/R(1000) 4倍 */
#define r1 12.8   /* 等价电路常数 定子电阻r1 旋转后的值 */
#define r2 10.17   /* 等价电路常数 转子电阻r2 */
#define l1 0.033645354  /* 等价电路常数 定子电感 l1' */
#define l2 0.033645354  /* 等价电路常数  转子电感  l2' */
#define Lm 0.553222582  /* 等价电路常数 励磁电感  M' */
#define L1 0.863479227  /* 等价电路常数(2相机) 有效电感  L1 = l1' + 3/2 * M' */
#define L2 0.863479227  /* 等价电路常数(2相机) 有效电感  L2 = l2' + 3/2 * M' */
#define M 0.829833873  /* 等价电路常数(2相机)  励磁电感  M  = 3/2 * M' */

/* AD变换读取用变量 */
float vu, vw;    /* 电压传感器变量 */
float iu, iv, iw;   /* 电流传感器变量 */
float E;    /* 直流电压变量 */
float Idc;    /* 直流电流变量 */
float CH6, CH7;   /* 未使用变量 */

/* 电压指令变量 */
float u, v, w;   /* 电压指令变量 */
float d, q, a, b;   /* 电压指令变量、dq, ab轴 */
float *pu, *pv, *pw, *pa, *pb; /* 电压指令变量、dq, ab軸指针 */
float umax, umin;   /* u相电压指令变量 最大值,最小值 */
float vmax, vmin;   /* v相电压指令变量 最大值,最小值 */
float wmax, wmin;   /* w相电压指令变量 最大值,最小值 */
float flux, torque;   /* 磁通指令,转矩指令 */
float K_torque;   /* 转矩指令系数 */
float K_d, K_q;   /* 电压指令系数 */
float K_v;    /* 电压指令系数 */
float K;

/* 电流反馈变量 */
float id, iq, ia, ib;   /* 电流反馈 */
float *pia, *pib, *pid, *piq;  /* 电流反馈指针 */
float id_ref, iq_ref;   /* 电流指令 */
float kp_i, ki_i, kd_i, t_i;  /* PID计算常数 */
mwPID *ppid_iu, *ppid_iw;  /* PID构造体的指针(iu, iw) */

/* PWM变量 */
float DeadT;    /* deadtime */
float Fc;    /* 载波频率 */
float Status;    /* 1:ON, 0:OFF */

/* 速度计算变量 */
volatile int counter, count, pin; /* 计算用 */
float cnt0, cntn;   /* 计数值 */
float counterS;   /* 旋转方向的调整 */
float dcnt;    /* 计数的增加 */
float dcntmax;   /* 计数增加的最大值 */
float rpm;    /* 速度[rpm] */
float Krpm;    /* 速度计算常数 */
float omega_r;   /* 转子速度 */
float Komega_r;   /* 转子角速度计算常数 */
float omega_ref;   /* 转速指令(rad/s) 根据rpm_ref计算 */
float rpm_ref;   /* 转数指令(rpm) */
float omega_limit;   /* 转数指令上限 */
float omega_min;   /* 转数指令下限 */

/* 角度计算变量 */
float omega_s;   /* 滑动频率 */
float omega_e;   /* 电源角频率 */
float theta;    /* 角度(dq转换) */

interrupt void z_int(void)   /* 中断处理 */
{
counter++;   /* Add variable 'counter' */
watch_data();   /* 波形观测函数 */
}

interrupt void carrier_int(void)   /* 中断处理 */
{
/* 0组 */
pev_ad_start(0, 0);    /* AD转换开始函数 */
while(pev_ad_in_st(0, 0));   /* AD转换器状态读取函数 */
pev_ad_in_grp(0, 0, &vu, &vw, &iu, &iw);   /* AD转换值输入函数 */

/* 1组 */
pev_ad_start(0, 1);   /* AD转换开始函数 */
while(pev_ad_in_st(0, 1));   /* AD转换器状态读取函数 */
pev_ad_in_grp(0, 1, &E, &Idc, &CH6, &CH7);   /* AD转换值输入函数 */

iu = iu + 0.24;  /* 电流误差调整 */
iw = iw + 0.08;  /* 电流误差调整 */
iv = -iu - iw;  /* iu + iw + iv = 0 */
mwPIDcal(ppid_iu, iu); /* PID计算(iu) */
mwPIDcal(ppid_iw, iw); /* PID计算(iw) */
uw2ab(iu, iw, pia, pib); /* 3相/2相坐标转换函数 */
ab2dq(ia, ib, theta, pid, piq); /* 旋转/静止坐标转换函数 */
omega_ref = rpm_ref / (PI(2) * 60); /* 速度指令转换(rpm → rad/s) */
if(omega_ref > omega_limit) {omega_ref = omega_limit;} /* 速度指令的上限与下限 */
if(omega_ref < omega_min)
{
  omega_ref = omega_ref - omega_min;
  if(omega_e < omega_min)
  {
   Status = 0.0;
   pev_inverter_stop_pwm(BDN, CH);  /* 3相PWM停止函数 */
  }
}
else { Status = 1.0; }
torque = K_torque * (omega_ref - omega_r); /* 转矩指令计算 */
if( torque > 0.5 ) {torque = 0.5;}  /* 转矩上限 */
id_ref = flux / M;    /* d轴电流指令值 id = φ2 / M */
iq_ref = (torque * L2) / (2 * M * flux); /* q轴电流指令值 iq = (τ * L2) / (极对数(2) * M * φ2) */
d = K * (K_d * (id_ref - id) + r1 * id - omega_e * l1 * iq);     /* d轴电压指令值 */
q = K * (K_q * (iq_ref - iq) + omega_e * l1 * id + r1 * iq + ((omega_e * M * M) / L2) * id); /* q轴电压指令值 */
dq2ab(d, q, theta, pa, pb); /* 静止/旋转坐标转换函数 */
ab2uvw(a, b, pu, pv, pw); /* 2相/3相坐标转换函数 */
if(u > umax) {u = umax;}
if(u < umin) {u = umin;}
if(v > vmax) {v = vmax;}
if(v < vmin) {v = vmin;}
if(w > wmax) {w = wmax;}
if(w < wmin) {w = wmin;}
pev_inverter_set_uvw(BDN, CH, u, v, w);   /* 3相PWM生成器指令输出函数 */
if(Status == 1.0) {pev_inverter_start_pwm(BDN, CH);} /* 3相PWM开始函数 */
watch_data();
}

interrupt void rpm_timer0(void)    /* 中断处理 */
{
cnt0 = cntn;
cntn = pev_abz_read(BDN); /* 计数器值读取函数 */
dcnt = cntn - cnt0;
if(dcnt > dcntmax) {dcnt = dcnt - RESOLUTION;}
else if(dcnt < -dcntmax) {dcnt = dcnt + RESOLUTION;}
if(dcnt <= 0.0) { dcnt = (-1.0) * dcnt;} /* 绝对值 */
rpm = Krpm * dcnt;
omega_r = Komega_r * dcnt;
omega_e = omega_r + (1.0 / tr) * (iq_ref / id_ref);
theta += TM * 0.000001 * omega_e; /* 积分器(θ = θ + Δt * wr) Δt是采样间隔 */

if(theta > PI(2.0)) {theta -= PI(2.0);}
else if (theta < -PI(2.0)) {theta += PI(2.0);}
if(Status == 0.0) {theta = 0.0;}
watch_data();
}

void main(void)   /* 变量初始化 */
{
Fc = 5000.0;  /* 载波频率[Hz] */
DeadT = 3.5;  /* deadtime[μs] */
flux = 0.7735;
torque = 0.0;  /* 转矩初始值 */
kp_i = 1.0;  /* PID 比例系数 */
ki_i = 1.0;  /* PID 积分系数 */
kd_i = 0.0;  /* PID 微分系数 */
t_i = 1 / (2 * Fc); /* PID 低通滤波器时间常数 */
K_d = 0.2;
K_q = 0.2;
K_torque = 1.0;  /* 转矩指令系数 */
K = 0.04;
umax = vmax = wmax = 0.99;
umin = vmin = wmin = -0.99;
omega_limit = 52.36; /* 速度上限 */
omega_min = 0.0628; /* 速度下限 */
dcnt = 0.0;
dcntmax = RESOLUTION * 0.5;
Krpm = 60.0 * FM / RESOLUTION;
Komega_r = PI(2) * FM / RESOLUTION;
pu = &u;
pv = &v;
pw = &w;
pa = &a;
pb = &b;
pia = &ia;
pib = &ib;
pid = &id;
piq = &iq;

/* 初始条件 */
d = 0.0;
q = 0.0;
id_ref = 0.0;
iq_ref = 0.0;
omega_ref = 0.0;
rpm_ref = 0.0;
counter = 0.0;
cnt0 = cntn = 0.0;
pin = 0.0;
u = v = w = 0.0;
vu = vw = 0.0;
iu = 0.0;
iw = 0.0;
iv = 0.0;
CH6 = CH7 = 0.0;
omega_s = omega_e = omega_r = 0.0;
theta = 0.0;
rpm = 0.0;
mwPIDinit(ppid_iu, kp_i, ki_i, kd_i, t_i, 1/Fc, 0.0, 0.0); /* PID函数的初始化 iu */
mwPIDinit(ppid_iw, kp_i, ki_i, kd_i, t_i, 1/Fc, 0.0, 0.0); /* PID函数的初始化 iw */
/* 1:ON SW, 0:OFF SW */
while(rpm_ref == 0.0) {Status = 0; watch_data();}
int_disable();  /* CPU中断处理禁止函数 */

pev_init(BDN);  /* PEV板初始化 */
pev_inverter_init(BDN, CH, Fc, 1000.0*DeadT); /* PWM模式与载波频率的设定函数 */
pev_inverter_set_syncint(BDN, 1/Fc*4.0); /* 载波同期中断时间设定函数 */
pev_inverter_set_uvw(BDN, CH, 0, 0, 0);  /* 3相PWM生成器指令值输出函数(初始值) */
int5_init_vector(carrier_int);   /* 中断处理输入的中断处理函数指定函数 */
pev_inverter_enable_up_int5(BDN);  /* 载波同期中断信号输出开始函数 */
int5_enable_int();    /* 外部中断处理输入许可函数 */
int_enable();     /* CPU中断处理许可函数 */
int6_init_vector(z_int);   /* 中断处理输入的中断处理函数指定函数 */
pev_abz_set_mode(BDN, 0);   /* 计数器的初始化函数 */
/* 0:オープンコレクタ入力, 1:差動入力 */
pev_abz_enable_int6(BDN);   /* 计数器的Z中断处理许可函数 */
int6_enable_int();    /* 外部中断处理输入许可函数 */
wait(1000000.0/Fc);    /* 等待时间的设定[μs] */
Status = 1.0;
pev_inverter_start_pwm(BDN, CH);  /* 3相PWM开始 */

/* ADの初期化 */
pev_ad_set_range(0, 0, CH0_RANGE, CH1_RANGE, CH2_RANGE, CH3_RANGE); /* AD转换器的输入范围设定函数 组0 */
pev_ad_set_range(0, 1, CH4_RANGE, CH5_RANGE, CH6_RANGE, CH7_RANGE); /* AD转换器的输入范围设定函数 组1 */
timer0_init(TM);   /* 计时器的初始化 */
timer0_init_vector(rpm_timer0);  /* 计时器中断处理函数指定函数 */
timer0_start();    /* 计时器计算开始函数 */
timer0_enable_int();   /* 计时器中断处理许可函数 */
int_enable();    /* CPU中断处理许可函数 */
while(1)
{
  pin = pev_abz_in_pin(BDN); /* 计数器输出状态函数 */
  /* b0:A, b1:B, b2:Z */
  watch_data();
}
}
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2010-6-15 11:28 | 显示全部楼层
看的晕了,建议你先调节电流环,调好了再调速度环。电流直接给定一个值去调试。
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2010-6-15 11:39 | 显示全部楼层
回复 3# archdevil


    您能说具体一些嘛。比如说在这个程序里是哪个部分。电流环是电流反馈吗?
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2010-6-15 11:58 | 显示全部楼层
id_ref = flux / M;    /* d轴电流指令值 id = φ2 / M */
iq_ref = (torque * L2) / (2 * M * flux); /* q轴电流指令值 iq = (τ * L2) / (极对数(2) * M * φ2) */
d = K * (K_d * (id_ref - id) + r1 * id - omega_e * l1 * iq);     /* d轴电压指令值 */
q = K * (K_q * (iq_ref - iq) + omega_e * l1 * id + r1 * iq + ((omega_e * M * M) / L2) * id); /* q轴电压指令值 */
dq2ab(d, q, theta, pa, pb); /* 静止/旋转坐标转换函数 */
ab2uvw(a, b, pu, pv, pw); /* 2相/3相坐标转换函数 */
先给定id iq为固定值,再固定给个旋转的角度,看转换后出来的三相电流给定对不对,反馈有没有跟随上。
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2010-6-15 12:11 | 显示全部楼层
回复 5# archdevil

您的意思是说id_ref和iq_ref不是写出计算公式,而是直接代入值吗?
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2010-6-15 14:13 | 显示全部楼层
回复 5# archdevil
id和iq用下面这两个式子求出的值。
id_ref = φ2 / M = 0.9322;
iq_ref = (τ*L2) / (p*M*φ2) = 0.9416;
旋转角度应该就是程序里的theta变量吧。我随便写了个值。
theta = 3;
我想请问,转换后出来的三相电流iu,iv,iw给定对不对,反馈有没有跟上,要去和哪个比较?
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2010-6-15 14:18 | 显示全部楼层
本帖最后由 mator 于 2010-6-15 16:10 编辑

vector_control

vector_control
这是程序的控制流程图。

评分

参与人数 1西莫币 +6 收起 理由
roccy + 6 感谢分享

查看全部评分

西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2010-6-15 14:54 | 显示全部楼层
旋转角度是个变化的值,范围0~360度的。角度不能给固定值,电流可以给固定值。这样转换后的三相给定是三个正弦波,且三相对称。如果电流环调的好,那么三相反馈电流能跟随三相给定电流。把电流环调好后,就可以调节速度环,也就是id iq是通过速度环算出来的,不用给固定值了。

评分

参与人数 1西莫币 +3 收起 理由
roccy + 3 多谢支持

查看全部评分

西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2010-6-15 14:55 | 显示全部楼层
比如说角度可以每个循环加1,这样就相当于一个固定转速了。
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2010-6-15 16:04 | 显示全部楼层
回复 9# archdevil


非常感谢,一下子明白了很多。   
但请问,三相反馈电流是PWM后得到的电流吗?给定电流又是哪里?
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2010-6-15 16:06 | 显示全部楼层
本帖最后由 mator 于 2010-6-15 16:08 编辑

西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2010-6-15 16:09 | 显示全部楼层
反馈电流是电机实际输出的电流,电流环输出占空比到电机驱动电机转,电机就会有实际电流输出。给定电流就是你自己固定给的id iq值。
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2010-6-15 16:17 | 显示全部楼层

vector_control

vector_control
回复 13# archdevil

那请问在这张图里能不能理解为,给定电流是id_refiq_ref,反馈电流是idiq啊?


西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2010-6-15 17:34 | 显示全部楼层
回复 9# archdevil gg.JPG

我不知道我理解的给定电流和反馈电流对不对。在控制图里给定电流应该是id_refiq_ref,反馈电流应该是idiq吧。结果,反馈电流好像没能跟上给定电流,在数据图中已经竞标出。请问这是怎么个情况啊?哪里出现问题了呢?三条正弦波没有出来,是不是PWM出了问题?可是看程序没有觉得哪儿出毛病啊。

西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2010-6-17 14:02 | 显示全部楼层
你说的对,反馈电流就是id iq,至于为什么没输出三相正弦,就要查下了,有可能是pwm有问题。可以把id_ref和iq_ref给一个固定值,然后theta给一个固定值,把电流环的积分I去掉只留下P,就能算出三相IU IV IW在此theta角度下的值,看是否和软件算出的值一致,不一致则说明程序有问题。如果一致,再把theta角固定累加,到360度后重新从0开始累加,,就可以输出三相电流给定的正弦波形。
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2010-6-17 14:05 | 显示全部楼层
有matlab模型吗?方便的话可以传给我一份:archdevilcs@hotmail.com  谢谢。
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2010-6-17 14:15 | 显示全部楼层
回复 16# archdevil


    太谢谢了。第一次实际编程序做这些,被这么一说就明白了很多,非常感谢。
  您上次说的角度不能给固定值,电流可以给固定值。这里的角度指的不是theta,是flux吗?

  还想请问,我的dq给定电压是这么计算的,请问这样算对不对呢。还有K_d,K_q,K这三个系数应该设为多少呢。我看过相关的一些书籍,这点儿没太弄明白。
  d = K * (K_d * (id_ref - id) + r1 * id - omega_e * l1 * iq);                        
   q = K * (K_q * (iq_ref - iq) + omega_e * l1 * id + r1 * iq + ((omega_e * M * M) / L2) * id);
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2010-6-17 14:52 | 显示全部楼层
角度就是theta,flux是异步电机磁链,矢量控制时是个固定的值。flux不变的,就等于是Id_ref值不变。K_d,K_q就是pid调节的P值,外面就不需要再乘K了。参数是具体实际应用中调节出来的,没有规定值。
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

 楼主| 发表于 2010-6-17 15:17 | 显示全部楼层
回复 19# archdevil


    theta和flux搞糊涂了,不好意思。谢谢您,我再试试看。
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|西莫电机圈 ( 浙ICP备10025899号-3 浙公网安备:33028202000436号

GMT+8, 2024-9-28 00:54 , Processed in 2.231982 second(s), 35 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表