紫外工控论坛

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2635|回复: 0

[C/VC] 三菱FX PLC编程口通信C语言源代码

[复制链接]
冰糖 发表于 2013-9-25 22:28:02 | 显示全部楼层 |阅读模式

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

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

x
fxnew.h


  1. #define DELAY_TIMES 30000L
  2. #define TRUE 1
  3. #define FALSE 0
  4. #define TRUE 1
  5. #define FALSE 0
  6. #define FORCE_ON 0x37
  7. #define FORCE_OFF 0x38
  8. void init_plc(void);
  9. int check_plc(void);
  10. int _read_data_register(unsigned int uAddress,unsigned int number);
  11. int _read_mdata_register(unsigned int uAddress,unsigned int number);
  12. int _write_data_register(unsigned int uAddress,unsigned int number);
  13. int _force_m_contact(unsigned int uAddress,unsigned char ucOn_off);
  14. int read_data_register(unsigned int uAddress,unsigned int number);
  15. int read_mdata_register(unsigned int uAddress,unsigned int number);
  16. int write_data_register(unsigned int uAddress,unsigned int number);
  17. int force_m_contact(unsigned int uAddress,unsigned char ucOn_off);
  18. int _read_m_register(unsigned int uAddress,unsigned int number);
  19. int read_m_register(unsigned int uAddress,unsigned int number);
  20. int TESTING=0;
  21. unsigned int uRead_value[25];
  22. unsigned int uWrite_value[25];
  23. unsigned int COMM_PORT=1;
  24. unsigned int STATS_PORT=0x2fd;
  25. unsigned int DATA_PORT=0x2f8;
  26. void init_plc(void)
  27. {       _AX=0xfa;
  28. _DX=COMM_PORT;
  29. geninterrupt(0x14);
  30. while((inportb(STATS_PORT)&1)!=0)inportb(DATA_PORT);

  31. }
  32. int check_plc(void)
  33. {       long lTmp;
  34. if(TESTING==1)return TRUE;
  35. init_plc();
  36. for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
  37. {       if((inportb(STATS_PORT)&0x20)!=0)
  38.    break;
  39. }
  40. if(lTmp>=DELAY_TIMES)
  41.   return(FALSE);
  42. outportb(DATA_PORT,5);
  43. disable();
  44. for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
  45. {       if((inportb(STATS_PORT)&1)!=0)
  46.    break;
  47. }
  48. if(lTmp>=DELAY_TIMES)
  49. { enable();
  50.   return(FALSE);
  51. }
  52. if((lTmp=inportb(DATA_PORT))==6)
  53. {  enable();
  54.   return(TRUE);
  55. }
  56. else
  57. {  enable();
  58.   return(FALSE);
  59. }
  60. }
  61. int read_data_register(unsigned int uAddress,unsigned int number)
  62. { int i;
  63. for(i=0;i<3;i++)
  64.   if(_read_data_register(uAddress,number)==TRUE)
  65.    return TRUE;
  66. return FALSE;
  67. }
  68. int _read_data_register(unsigned int uAddress,unsigned int number)
  69. {       unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
  70. unsigned char uReceive[104];
  71. unsigned int uTmp;
  72. unsigned int uSum;
  73. unsigned int num;
  74. long lTmp;
  75. int i,j;
  76. if(TESTING==1)
  77. {       for(i=0;i<number;i++)uRead_value[i]=0;
  78.   return TRUE;
  79. }
  80. init_plc();
  81. num=number*2;
  82. if((num/16)>=10)
  83.   uSend[6]=(unsigned char)(num/16+0x41-10);
  84. else
  85.   uSend[6]=(unsigned char)(num/16+0x30);
  86. if((num%16)>=10)
  87.   uSend[7]=(unsigned char)((num%16)+0x41-10);
  88. else
  89.   uSend[7]=(unsigned char)((num%16)+0x30);
  90. uAddress=uAddress*2+0x1000;
  91. uTmp=uAddress & 0x000f;
  92. uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  93. uTmp=(uAddress>>4) & 0x000f;
  94. uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  95. uTmp=(uAddress>>8) & 0x000f;
  96. uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  97. uTmp=(uAddress>>12)&0x000f;
  98. uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  99. uSum=0;
  100. for(i=1;i<9;i++)
  101.   uSum=uSum+(unsigned char)uSend[i];
  102. uTmp=uSum&0x000f;
  103. uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  104. uTmp=(uSum>>4)&0x000f;
  105. uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

  106. for(i=0;i<11;i++)
  107. {       for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
  108.   {       if((inportb(STATS_PORT)&0x20)!=0)
  109.     break;
  110.   }
  111.   if(lTmp>=DELAY_TIMES)
  112.   {
  113.    
  114.    return(FALSE);
  115.   }
  116.   outportb(DATA_PORT,uSend[i]);
  117. }
  118. disable();

  119. for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)
  120. {       if((inportb(STATS_PORT)&1)!=0)
  121.    break;
  122. }
  123. if(lTmp>=DELAY_TIMES)
  124. {
  125.   enable();
  126.   return(FALSE);
  127. }
  128. uReceive[0]=inportb(DATA_PORT);
  129. if(uReceive[0]!=2)
  130. {
  131.   enable();
  132.   return(FALSE);
  133. }
  134. for(i=1;i<number*4+4;i++)
  135. {       for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
  136.   {       if((inportb(STATS_PORT)&1)!=0)
  137.     break;
  138.   }
  139.   if(lTmp>=DELAY_TIMES)
  140.   {
  141.    enable();
  142.    return(FALSE);
  143.   }
  144.   uReceive[i]=inportb(DATA_PORT);
  145. }
  146. enable();
  147. uSum=0;
  148. for(i=1;i<number*4+2;i++)
  149.   uSum=uSum+(unsigned int)uReceive[i];
  150. uTmp=uSum&0xf;
  151. uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

  152. if((unsigned char)uTmp!=uReceive[number*4+3])return(FALSE);
  153. uTmp=(uSum>>4)&0xf;
  154. uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

  155. if((unsigned char)uTmp!=uReceive[number*4+2])return(FALSE);
  156. for(j=0;j<number;j++)
  157. { for(i=j*4+1;i<j*4+5;i++)
  158.    uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;
  159.   uRead_value[j]=(((((uReceive[j*4+3]<<4)+uReceive[j*4+4])<<4)+uReceive[j*4+1])<<4)+uReceive[j*4+2];
  160. }
  161. return TRUE;
  162. }
  163. int read_mdata_register(unsigned int uAddress,unsigned int number)
  164. { int i;
  165. for(i=0;i<3;i++)
  166.   if(_read_mdata_register(uAddress,number)==TRUE)
  167.    return TRUE;
  168. return FALSE;
  169. }
  170. int _read_mdata_register(unsigned int uAddress,unsigned int number)
  171. {       unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
  172. unsigned char uReceive[104];
  173. unsigned int uTmp;
  174. unsigned int uSum;
  175. unsigned int num;
  176. long lTmp;
  177. int i,j;
  178. if(TESTING==1)
  179. {       for(i=0;i<number;i++)uRead_value[i]=0;
  180.   return TRUE;
  181. }
  182. init_plc();
  183. num=number*2;
  184. if((num/16)>=10)
  185.   uSend[6]=(unsigned char)(num/16+0x41-10);
  186. else
  187.   uSend[6]=(unsigned char)(num/16+0x30);
  188. if((num%16)>=10)
  189.   uSend[7]=(unsigned char)((num%16)+0x41-10);
  190. else
  191.   uSend[7]=(unsigned char)((num%16)+0x30);
  192. /*uAddress=uAddress*2+0x1000;*/
  193. uTmp=uAddress & 0x000f;
  194. uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  195. uTmp=(uAddress>>4) & 0x000f;
  196. uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  197. uTmp=(uAddress>>8) & 0x000f;
  198. uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  199. uTmp=(uAddress>>12)&0x000f;
  200. uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  201. uSum=0;
  202. for(i=1;i<9;i++)
  203.   uSum=uSum+(unsigned char)uSend[i];
  204. uTmp=uSum&0x000f;
  205. uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  206. uTmp=(uSum>>4)&0x000f;
  207. uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  208. for(i=0;i<11;i++)
  209. {       for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
  210.   {       if((inportb(STATS_PORT)&0x20)!=0)
  211.     break;
  212.   }
  213.   if(lTmp>=DELAY_TIMES)
  214.   {
  215.    
  216.    return(FALSE);
  217.   }
  218.   outportb(DATA_PORT,uSend[i]);
  219. }
  220. disable();

  221. for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)
  222. {       if((inportb(STATS_PORT)&1)!=0)
  223.    break;
  224. }
  225. if(lTmp>=DELAY_TIMES)
  226. {
  227.   enable();
  228.   return(FALSE);
  229. }
  230. uReceive[0]=inportb(DATA_PORT);
  231. if(uReceive[0]!=2)
  232. {
  233.   enable();
  234.   return(FALSE);
  235. }
  236. for(i=1;i<number*4+4;i++)
  237. {       for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
  238.   {       if((inportb(STATS_PORT)&1)!=0)
  239.     break;
  240.   }
  241.   if(lTmp>=DELAY_TIMES)
  242.   {
  243.    enable();
  244.    return(FALSE);
  245.   }
  246.   uReceive[i]=inportb(DATA_PORT);
  247. }
  248. enable();
  249. uSum=0;
  250. for(i=1;i<number*4+2;i++)
  251.   uSum=uSum+(unsigned int)uReceive[i];
  252. uTmp=uSum&0xf;
  253. uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

  254. if((unsigned char)uTmp!=uReceive[number*4+3])return(FALSE);
  255. uTmp=(uSum>>4)&0xf;
  256. uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

  257. if((unsigned char)uTmp!=uReceive[number*4+2])return(FALSE);
  258. for(j=0;j<number;j++)
  259. { for(i=j*4+1;i<j*4+5;i++)
  260.    uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;
  261.   uRead_value[j]=(((((uReceive[j*4+3]<<4)+uReceive[j*4+4])<<4)+uReceive[j*4+1])<<4)+uReceive[j*4+2];
  262. }
  263. return TRUE;
  264. }
  265. int write_data_register(unsigned int uAddress,unsigned int number)
  266. { int i;
  267. for(i=0;i<3;i++)
  268.   if(_write_data_register(uAddress,number)==TRUE)
  269.    return TRUE;
  270. return FALSE;
  271. }
  272. int _write_data_register(unsigned int uAddress,unsigned int number)
  273. {       unsigned char uSend[111];
  274. unsigned int uTmp,uSum,num;
  275. long lTmp;
  276. int i;
  277. if(TESTING==1)return TRUE;

  278. init_plc();
  279. uSend[0]=2;
  280. uSend[1]=0x31;
  281. uSend[number*4+8]=3;
  282. num=(number*2)/16;
  283. if(num>=10)uSend[6]=num+0x41-10;
  284. else  uSend[6]=num+0x30;
  285. num=(number*2)%16;
  286. if(num>=10)uSend[7]=num+0x41-10;
  287. else uSend[7]=num+0x30;
  288. uAddress=0x1000+2*uAddress;
  289. uTmp=uAddress&0x000f;
  290. uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  291. uTmp=(uAddress>>4)&0x000f;
  292. uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  293. uTmp=(uAddress>>8)&0x000f;
  294. uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  295. uTmp=(uAddress>>12)&0x000f;
  296. uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  297. for(i=0;i<number;i++)
  298. {
  299.   uTmp=uWrite_value[i]&0x000f;
  300.   uSend[i*4+9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  301.   uTmp=(uWrite_value[i]>>4)&0x000f;
  302.   uSend[i*4+8]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  303.   uTmp=(uWrite_value[i]>>8)&0x000f;
  304.   uSend[i*4+11]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  305.   uTmp=(uWrite_value[i]>>12)&0x000f;
  306.   uSend[i*4+10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  307. }
  308. uSum=0;
  309. for(i=1;i<9+number*4;i++)
  310.   uSum+=uSend[i];
  311. uTmp=uSum&0x000f;
  312. uSend[number*4+10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  313. uTmp=(uSum>>4)&0x000f;
  314. uSend[number*4+9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  315. for(i=0;i<11+number*4;i++)
  316. {       for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
  317.   {       if((inportb(STATS_PORT)&0x20)!=0)
  318.     break;
  319.   }
  320.   if(lTmp>=DELAY_TIMES)
  321.   {
  322.    /*enable();*/
  323.    return(FALSE);
  324.   }
  325.   outportb(DATA_PORT,uSend[i]);
  326. }
  327. disable();
  328. for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
  329. {       if((inportb(STATS_PORT)&1)!=0)
  330.    break;
  331. }
  332. if(lTmp>=DELAY_TIMES)
  333. {
  334.    enable();
  335.   return(FALSE);
  336. }
  337. if(inportb(DATA_PORT)!=6)
  338. {
  339.   enable();
  340.   return(FALSE);
  341. }
  342. else
  343. {
  344.   enable();
  345.   return(TRUE);
  346. }
  347. }
  348. int force_m_contact(unsigned uAddress,unsigned char ucOn_off)
  349. { int i;
  350. for(i=0;i<3;i++)
  351.   if(_force_m_contact(uAddress,ucOn_off)==TRUE)
  352.    return TRUE;
  353. return FALSE;
  354. }
  355. int _force_m_contact(unsigned uAddress,unsigned char ucOn_off)
  356. {       unsigned uSend[]={2,0x37,0x30,0x30,0x30,0x30,3,0x30,0x30};
  357. unsigned uTmp,uSum,i;
  358. long lTmp;
  359. if(TESTING==1)return TRUE;
  360. init_plc();
  361. uAddress=uAddress+0x800;
  362. uSend[1]=ucOn_off;
  363. uTmp=uAddress&0x000f;
  364. uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  365. uTmp=(uAddress>>4)&0x000f;
  366. uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  367. uTmp=(uAddress>>8)&0x000f;
  368. uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  369. uTmp=(uAddress>>12)&0x000f;
  370. uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  371. uSum=0;
  372. for(i=1;i<7;i++)
  373.   uSum+=uSend[i];
  374. uTmp=uSum&0x000f;
  375. uSend[8]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  376. uTmp=(uSum>>4)&0x000f;
  377. uSend[7]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  378. for(i=0;i<9;i++)
  379. {       for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
  380.   {       if((inportb(STATS_PORT)&0x20)!=0)
  381.     break;
  382.   }
  383.   if(lTmp>=DELAY_TIMES)
  384.   {     
  385.    enable();
  386.    return(FALSE);
  387.   }
  388.   outportb(DATA_PORT,uSend[i]);
  389. }
  390. disable();
  391. for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
  392. {       if((inportb(STATS_PORT)&1)!=0)
  393.    break;
  394. }
  395. if(lTmp>=DELAY_TIMES)
  396. {      
  397.   enable();
  398.   return(FALSE);
  399. }
  400. if(inportb(DATA_PORT)!=6)
  401. {      
  402.   enable();
  403.   return(FALSE);
  404. }
  405. else
  406. {       enable();
  407.   return(TRUE);
  408. }
  409. }
  410. int read_m_register(unsigned int uAddress,unsigned int number)
  411. { int i;
  412. for(i=0;i<3;i++)
  413.   if(_read_m_register(uAddress,number)==TRUE)
  414.    return TRUE;
  415. return FALSE;
  416. }
  417. int _read_m_register(unsigned int uAddress,unsigned int number)
  418. {       unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
  419. unsigned char uReceive[54];
  420. unsigned int uTmp;
  421. unsigned int uSum;
  422. unsigned int num;
  423. long lTmp;
  424. int i,j;
  425. if(TESTING==1)
  426. {       for(i=0;i<number;i++)uRead_value[i]=0;
  427.   return TRUE;
  428. }
  429. init_plc();
  430. num=number;
  431. if((num/16)>=10)
  432.   uSend[6]=(unsigned char)(num/16+0x41-10);
  433. else
  434.   uSend[6]=(unsigned char)(num/16+0x30);
  435. if((num%16)>=10)
  436.   uSend[7]=(unsigned char)((num%16)+0x41-10);
  437. else
  438.   uSend[7]=(unsigned char)((num%16)+0x30);
  439. uAddress=uAddress/8+0x100;
  440. uTmp=uAddress & 0x000f;
  441. uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  442. uTmp=(uAddress>>4) & 0x000f;
  443. uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  444. uTmp=(uAddress>>8) & 0x000f;
  445. uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  446. uTmp=(uAddress>>12)&0x000f;
  447. uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  448. uSum=0;
  449. for(i=1;i<9;i++)
  450.   uSum=uSum+(unsigned char)uSend[i];
  451. uTmp=uSum&0x000f;
  452. uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  453. uTmp=(uSum>>4)&0x000f;
  454. uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
  455.    
  456. for(i=0;i<11;i++)
  457. {       for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
  458.   {       if((inportb(STATS_PORT)&0x20)!=0)
  459.     break;
  460.   }
  461.   if(lTmp>=DELAY_TIMES)
  462.   {
  463.    /*enable();*/
  464.    return(FALSE);
  465.   }
  466.   outportb(DATA_PORT,uSend[i]);
  467. }
  468. disable();

  469. for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)
  470. {       if((inportb(STATS_PORT)&1)!=0)
  471.    break;
  472. }
  473. if(lTmp>=DELAY_TIMES)
  474. {
  475.   enable();
  476.   return(FALSE);
  477. }
  478. uReceive[0]=inportb(DATA_PORT);
  479. if(uReceive[0]!=2)
  480. {
  481.   enable();
  482.   return(FALSE);
  483. }
  484. for(i=1;i<number*2+4;i++)
  485. {       for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
  486.   {       if((inportb(STATS_PORT)&1)!=0)
  487.     break;
  488.   }
  489.   if(lTmp>=DELAY_TIMES)
  490.   {
  491.    enable();
  492.    return(FALSE);
  493.   }
  494.   uReceive[i]=inportb(DATA_PORT);
  495. }
  496. enable();
  497. uSum=0;
  498. for(i=1;i<number*2+2;i++)
  499.   uSum=uSum+(unsigned int)uReceive[i];
  500. uTmp=uSum&0xf;
  501. uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

  502. if((unsigned char)uTmp!=uReceive[number*2+3])return(FALSE);
  503. uTmp=(uSum>>4)&0xf;
  504. uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);

  505. if((unsigned char)uTmp!=uReceive[number*2+2])return(FALSE);
  506. for(j=0;j<number;j++)
  507. { for(i=j*2+1;i<j*2+3;i++)
  508.    uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;
  509.   uRead_value[j]=((uReceive[j*2+1])<<4)+uReceive[j*2+2];
  510. }
  511. return TRUE;
  512. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


--------------------------------------------------------------------------------------------------------------------
本站是工控技术交流站点,论坛内容均为网络收集或会员所发表,并不代表本站立场,会员拥有该内容的所有权力及责任!
本站内容如有侵犯您的版权,请按下面方式联系本站管理员,我们将及时删除处理
管理员:冰糖 QQ:5483695(请直击主题), Mail:admin#ziwai.net(#改成@) 其它非本人.
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!

QQ|Archiver|手机版|小黑屋|紫外工控论坛. ( 苏ICP备11032118号-1 )

GMT+8, 2024-3-29 04:10 , Processed in 0.343752 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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