基于RSmodbus协议的双机串行通信(完整资料)_第1页
基于RSmodbus协议的双机串行通信(完整资料)_第2页
基于RSmodbus协议的双机串行通信(完整资料)_第3页
基于RSmodbus协议的双机串行通信(完整资料)_第4页
基于RSmodbus协议的双机串行通信(完整资料)_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于RSmodbus协议的双机串行通信(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)

目录基于RSmodbus协议的双机串行通信(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)TOC\o”1-3"\h\z\uHYPERLINK\l”_Toc310518326"一、Modbus协议分析PAGEREF_Toc310518326\h1HYPERLINK\l”_Toc310518327”1.1两种传输方式PAGEREF_Toc310518327\h2HYPERLINKV1V2V3”};ucharrow4[]={”..。”}; inti;ﻩreving=0;ﻩnodeok=0; timercnt=0x00; asknode=0x00;ﻩtemp16_2=250;ﻩfor(i=0;i〈10;i++){mrx[i]=0x00;} for(i=0;i〈8;i++){mtx[i]=0x00;}Delay400Ms();//启动等待,等LCD讲入工作状态 LCDInit();//LCD初始化ﻩDelay5Ms();//延时片刻(可不要)ﻩDisplayListChar(1,0,row1);ﻩDisplayListChar(2,1,row2);ﻩReadDataLCD();//测试用句无意义ﻩﻩdelaycnt=0xffff;ﻩwhile(delaycnt—-){}ﻩdelaycnt=0xffff;ﻩwhile(delaycnt-—){} DisplayListChar(0,0,row3);ﻩInitUART();ﻩcrcok=1; while(1)ﻩ{ﻩﻩﻩif(crcok==1)ﻩﻩ{ﻩﻩﻩ ﻩﻩ temp16_1=mrx[3];ﻩ ﻩtemp16_1*=temp16_2;ﻩﻩﻩtemp16_1>〉=7; ﻩ switch(mrx[0])ﻩ ﻩ{ﻩ ﻩﻩcase0x01:{row4[1]=(temp16_1/100)+0x30;row4[3]=((temp16_1%100)/10)+0x30;row4[4]=(temp16_1%10)+0x30;break;}ﻩﻩﻩ case0x02:{row4[6]=(temp16_1/100)+0x30;row4[8]=((temp16_1%100)/10)+0x30;row4[9]=(temp16_1%10)+0x30;break;}ﻩ case0x03:{row4[11]=(temp16_1/100)+0x30;row4[13]=((temp16_1%100)/10)+0x30;row4[14]=(temp16_1%10)+0x30;break;}ﻩ ﻩ default:{break;}ﻩ ﻩ} ﻩﻩDisplayListChar(0,1,row4);//在指定位置显示从机发送来的数据ﻩﻩﻩdelaycnt=0x3ff;//显示延迟 ﻩ while(delaycnt——){} ﻩreving=1; ﻩﻩsend101[0]=(asknode++)+0x01;//打包主机发送帧ﻩﻩﻩasknode_save=asknode—1; ﻩﻩasknode%=3; temp16=Crc16(send101,6);//产生16位CRC校验码 ﻩ for(i=0;i<6;i++){mtx[i]=send101[i];} mtx[6]=(temp16>〉8)&0x00ff;ﻩ mtx[7]=temp16&0x00ff;ﻩﻩﻩdelaycnt=0x3ff;while(delaycnt—-){} ﻩfor(i=0;i<8;i++)ﻩ {ﻩtemp8=mtx[i];ﻩ SendOneByte(temp8);ﻩ ﻩ}ﻩﻩ crcok=0; ﻩdelaycnt=0x3ff;ﻩ ﻩwhile(delaycnt-—){}ﻩ timercnt=0; ﻩ reving=0;//发送完毕关闭LED,等待接收 ﻩ} }}//定时100ms,重新发送数据voidTimer0Interrupt(void)interrupt1{TH0=0x3C;TL0=0x0B0;ﻩif(++timercnt==5)ﻩ{ﻩ crcok=1;ﻩﻩasknode=asknode_save; ﻩtimercnt=0; }}//接收从机数据voidUARTInterrupt(void)interrupt4{ﻩucharbyterev;if(RI){RI=0;byterev=SBUF;ﻩﻩmdproc(byterev);}elseTI=0;}voidmdproc(ucharb){ﻩUint16temp16_1,temp16_2; if(nodeok==0) {ﻩﻩ if(b==send101[0])//地址是否正确ﻩﻩ{ nodeok=1;ﻩﻩ revptr=1; mrx[0]=b; } }ﻩelseif(revptr<11)//是否发送完毕ﻩ{ ﻩmrx[revptr++]=b; } else {ﻩ revptr=0; nodeok=0;ﻩﻩtemp16_1=Crc16(mrx,9);ﻩﻩtemp16_2=mrx[9];ﻩ temp16_2<〈=8; ﻩtemp16_2|=mrx[10];ﻩﻩif(temp16_1==temp16_2)//CRC校验是否正确ﻩﻩ{ if(mrx[1]==0x54){asknode=asknode_save;crcok=1;}ﻩ elsecrcok=1;ﻩﻩ} ﻩelse ﻩ{ﻩ asknode=asknode_save;ﻩ crcok=1;ﻩﻩ} }}voidSendOneByte(unsignedcharc){SBUF=c;while(!TI);TI=0;}//初始化串口通信(波特率设置为9600)voidInitUART(void){TMOD=0x20;SCON=0x50;TH1=0xFD;TL1=TH1;PCON=0x00;EA=1;ES=1;TR1=1; TMOD|=0x01;TH0=0x3C;TL0=0xB0;//timersetsat20msET0=1;TR0=1;}//产生16位CRC校验码Uint16Crc16(uchar*puchMsg,Uint16usDataLen){ Uint16uchCRCHi=0xFF;/*高CRC字节初始化*/ﻩUint16uchCRCLo=0xFF;/*低CRC字节初始化*/ Uint16temp16;ﻩUint32uIndex;/*CRC循环中的索引*/ while(usDataLen—-)/*传输消息缓冲区*/ {ﻩ temp16=*puchMsg++; uIndex=uchCRCHi^temp16;/*计算CRC*/ﻩ uchCRCHi=uchCRCLo^auchCRCHi[uIndex];ﻩﻩuchCRCLo=auchCRCLo[uIndex];ﻩ}ﻩreturn(uchCRCHi<〈8|uchCRCLo);}//写数据voidWriteDataLCD(unsignedcharWDLCD){ReadStatusLCD();//检测忙LCD_Data=WDLCD;LCD_RS=1;LCD_RW=0;LCD_E=0;//若晶振速度太高可以在这后加小的延时LCD_E=0;//延时LCD_E=0;LCD_E=1;}//写指令voidWriteCommandLCD(unsignedcharWCLCD,BuysC)//BuysC为0时忽略忙检测{ﻩif(BuysC)ReadStatusLCD();//根据需要检测忙 LCD_Data=WCLCD;ﻩLCD_RS=0;ﻩLCD_RW=0;ﻩLCD_E=0; LCD_E=0;ﻩLCD_E=1;}//读数据unsignedcharReadDataLCD(void){ﻩLCD_RS=1;ﻩLCD_RW=1; LCD_E=0; LCD_E=0;ﻩLCD_E=1;ﻩreturn(LCD_Data);}//读状态unsignedcharReadStatusLCD(void){ﻩLCD_Data=0xFF;ﻩLCD_RS=0;ﻩLCD_RW=1; LCD_E=0; LCD_E=0; LCD_E=1;ﻩwhile(LCD_Data&Busy);//检测忙信号 return(LCD_Data);}//LCD初始化voidLCDInit(void){ﻩLCD_Data=0;ﻩWriteCommandLCD(0x38,0);//三次显示模式设置,不检测忙信号 Delay5Ms();ﻩWriteCommandLCD(0x38,0); Delay5Ms();ﻩWriteCommandLCD(0x38,0); Delay5Ms(); WriteCommandLCD(0x38,1);//显示模式设置,开始要求每次检测忙信号ﻩWriteCommandLCD(0x08,1);//关闭显示ﻩWriteCommandLCD(0x01,1);//显示清屏 WriteCommandLCD(0x06,1);//显示光标移动设置 WriteCommandLCD(0x0C,1);//显示开及光标设置}//按指定位置显示一个字符voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData){ Y&=0x1;ﻩX&=0xF;//限制X不能大于15,Y不能大于1 if(Y)X|=0x40;//当要显示第二行时地址码+0x40; X|=0x80;//算出指令码 WriteCommandLCD(X,0);//这里不检测忙信号,发送地址码 WriteDataLCD(DData);}//按指定位置显示一串字符voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedchar*DData){ unsignedcharListLength; ListLength=0;ﻩY&=0x1;ﻩX&=0xF;//限制X不能大于15,Y不能大于1 while(DData[ListLength]>=0x20)//若到达字串尾则退出 { if(X<=0xF)//X坐标应小于0xFﻩ { ﻩ DisplayOneChar(X,Y,DData[ListLength]);//显示单个字符ﻩﻩ ListLength++; ﻩX++;ﻩ }ﻩ}}//5ms延时voidDelay5Ms(void){ﻩunsignedintTempCyc=5552;ﻩwhile(TempCyc--);}//400ms延时voidDelay400Ms(void){ unsignedcharTempCycA=5; unsignedintTempCycB;ﻩwhile(TempCycA-—)ﻩ{ ﻩTempCycB=7269; ﻩwhile(TempCycB-—); }}/******************************从机*********************************/#include〈reg52。h〉#include〈intrins。h>#defineUint16unsignedint#defineUint32unsignedlong#defineucharunsignedcharsbitnodesel0=P3^2;sbitnodesel1=P3^3;sbitreving=P1^6;sbitSCL2=P1^1;ﻩﻩ//SCL2定义为P1口的第3位脚,连接ADC0831SCL脚sbitSDA2=P1^2;ﻩ //SDA2定义为P1口的第4位脚,连接ADC0831SDA脚sbitCS2=P1^0;ﻩ //CS2定义为P1口的第4位脚,连接ADC0831CS脚bitnodeok;bitcrcok;bitprocok;ucharnode;ucharmtx[11],mrx[10];ucharsend101[9]={0x00,0x04,0x06,0x00,0x00,0x00,0x00,0x00,0x00};uchartimercnt;ucharbyterev;//接收字符ucharrevptr;Uint16delaycnt;voidInitUART(void);voidSendOneByte(unsigned);voidmdproc(uchar);unsignedcharad0831read(void);ﻩ//定义该函数为读取ADC0831的数据Uint16Crc16(Uint16*puchMsg,Uint16usDataLen);voidsend_error_report();//CRC校验出错,发送错误报告/*CRC高位字节值表*/constUint16codeauchCRCHi[]={0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40};/*CRC低位字节值表*/constUint16codeauchCRCLo[]={0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,0x07,0xC7,0x05,0xC5,0xC4,0x04,0xCC,0x0C,0x0D,0xCD,0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,0x08,0xC8,0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC,0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,0x11,0xD1,0xD0,0x10,0xF0,0x30,0x31,0xF1,0x33,0xF3,0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0x29,0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,0xEC,0x2C,0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,0xA0,0x60,0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,0xA5,0x65,0x64,0xA4,0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,0xB4,0x74,0x75,0xB5,0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,0x70,0xB0,0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,0x9C,0x5C,0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,0x99,0x59,0x58,0x98,0x88,0x48,0x49,0x89,0x4B,0x8B,0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40};voidmain(void){ unsignedchartemp8; Uint16temp16;inti; reving=0; crcok=0; nodeok=0; timercnt=0x00; for(i=0;i〈10;i++){mrx[i]=0x00;} for(i=0;i<11;i++){mtx[i]=0x00;} node=!nodesel1;ﻩnode<〈=1; node|=!nodesel0;ﻩsend101[0]=node;//从节点地址ﻩInitUART(); while(1) {ﻩ ﻩif(crcok==1)ﻩ {ﻩﻩ ﻩreving=1; send101[3]=ad0831read();//得到采样数据 ﻩﻩfor(i=0;i〈9;i++)ﻩ { mtx[i]=send101[i];ﻩ } ﻩ temp16=Crc16(send101,9); ﻩ mtx[9]=(temp16>〉8)&0x00ff; ﻩﻩmtx[10]=temp16&0x00ff;ﻩ ﻩdelaycnt=0x3fff;ﻩﻩﻩwhile(delaycnt——){}rw=1; ﻩﻩdelaycnt=0x3ff; ﻩ while(delaycnt——){}for(i=0;i〈11;i++) { temp8=mtx[i];ﻩﻩﻩﻩSendOneByte(temp8); ﻩﻩ} ﻩﻩcrcok=0; ﻩdelaycnt=0x3ff; ﻩwhile(delaycnt--){}ﻩﻩ reving=0;ﻩﻩ} ﻩ }}Uint16Crc16(uchar*puchMsg,Uint16usDataLen){ Uint16uchCRCHi=0xFF;/*高CRC字节初始化*/ Uint16uchCRCLo=0xFF;/*低CRC字节初始化*/ﻩUint16temp16; Uint32uIndex;/*CRC循环中的索引*/ﻩwhile(usDataLen-—)/*传输消息缓冲区*/ﻩ{ﻩﻩtemp16=*puchMsg++; ﻩuIndex=uchCRCHi^temp16;/*计算CRC*/ﻩ uchCRCHi=uchCRCLo^auchCRCHi[uIndex];ﻩ uchCRCLo=auchCRCLo[uIndex];ﻩ}ﻩreturn(uchCRCHi<〈8|uchCRCLo);}voidTimer0Interrupt(void)interrupt1{TH0=0x3C;TL0=0x0B0;ﻩif(++timercnt==50)ﻩ{ timercnt=0; }}voidUARTInterrupt(void)interrupt4{if(RI){RI=0;byterev=SBUF;ﻩ mdproc(byterev);}elseTI=0;}voidmdproc(ucharb)//MODBUS04功能处理过程,先检验节点地址,正确则检验CRC,正确则回复主机要求数据,不正确发送错误报告ﻩif(nodeok==0)ﻩ{ ﻩif(b==node){ﻩ ﻩnodeok=1;ﻩﻩﻩdatalen=7; ﻩ mrx[0]=b; ﻩrevptr=1; } } else {ﻩmrx[revptr++]=b; ﻩif(revptr==8) {ﻩﻩﻩﻩnodeok=0; ﻩﻩtemp16_1=Crc16(mrx,6);ﻩ temp16_2=mrx[6];temp16_2〈<=8;ﻩ ﻩtemp16_2|=mrx[7];ﻩﻩ if(temp16_1==temp16_2)ﻩ ﻩ{ﻩ ﻩﻩ crcok=1; ﻩﻩ}ﻩ elseﻩﻩﻩsend_error_report();ﻩﻩ ﻩﻩ} }}//发送错误报告voidsend_error_report(){ﻩreving=1; send101[1]=0x54;//修改功能码ﻩfor(i=0;i<9;i++){mtx[i]=send101[i];} temp16=Crc16(send101,9); mtx[9]=(temp16>〉8)&0x00ff; mtx[10]=temp16&0x00ff;ﻩdelaycnt=0x3fff;ﻩwhile(delaycnt—-){} rw=1;ﻩdelaycnt=0x3ff; while(delaycnt-—){} for(i=0;i〈11;i++) { ﻩ temp8=mtx[i];ﻩ SendOneByte(temp8);ﻩ}ﻩcrcok=0; delaycnt=0x3ff;ﻩwhile(delaycnt--){} rw=0; reving=0;}voidSendOneByte(unsignedcharc){SBUF=c;while(!TI);TI=0;}voidInitUART(void){TMOD=0x20;SCON=0x50;TH1=0xFE;TL1=TH1;PCON=0x00;EA=1;ES=1;TR1=1;ﻩTMOD|=0x01;TH0=0x3C;TL0=0xB0;//timersetsat20msET0=1;TR0=1;}voiddelay(void) ﻩﻩﻩ//空5个指令{ _nop_();_nop_();_nop_();_nop_();_nop_();}unsignedcharad0831read(void){ ﻩ ﻩ ﻩ ﻩunsignedchari=0,tmp=0;SDA2=1; CS2=0; _nop_();ﻩ_nop_(); SCL2=0;ﻩ_nop_();ﻩ_nop_(); SCL2=1; _nop_();ﻩ_nop_();ﻩSCL2=0;ﻩ_nop_(); _nop_(); SCL2=1;ﻩ_nop_();ﻩ_nop_();ﻩSCL2=0;ﻩ_nop_(); _nop_();ﻩfor(i=0;i<8;i++){ﻩtmp<<=1; if(SDA2) tmp++;ﻩ SCL2=1; _nop_(); _nop_(); SCL2=0; _nop_(); _nop_();ﻩ}ﻩCS2=1;ﻩreturntmp;}基于Python的串口通信(2)Pyvisa安装pyvisasource安装下载pyvisa说明文档:http://pyvisa.readthedocs.org/en/latest/下载链接:❶https://gith/hgrecco/pyvisa

❷http://pyvisa.sourceforge.net/解压命令解压cd/xxx/xxx/pyvisa-master.zip(切换到相关文件所在目录)tarzxvfpyvisa-master。zip手动解压(Mac下像.zip类的格式一般会在Safari下载完成后自动解压)安装visamodulecd/xxx/xxx/pyvisa-master(切换到解压后的文件所在目录)sudopythonsetup.pyinstall(加sudo以避免权限问题:”Permissiondenied...”)注:pyvisa是依托于enum34的,如果是首次安装,还需要先下载enum34并安装:https://pypi.python.org/pypi/enum34/1.0.4安装方法同上:pip安装sudopipinstallpyvisa注:上图中之所以写成pip3.5(pip/pip3)是因为系统里除了自带的Python2外,还装了Python3(pip3为默认pip).安装NI-VISApyvisa是基于NI-VISA库的,所以要正常的使用,还需要安装NI的VISA库:http://www.ni.com/visa/下载链接:http:///download/ni-visa—14.0。1/5023/en/visa通信测试USB模式在IDLE中进行如下测试:〉>>importvisa>>>rm=visa。ResourceManager()〉>>rm。list_resources()(u'USB0::0x0957::0x1A07::MY53203784::INSTR',)〉>〉my_instrument=rm.open_resource(’USB0::0x0957::0x1A07::MY53203784::INSTR')>>>print(my_instrument。query('*IDN?’))AgilentTechnologies,34461A,MY53203784,A.01。09—02。25-01.09—00.35-01—01>〉〉附:一个简单的测试脚本(.py文件)visa#!/usr/bin/envpython#-*—coding:utf-8—*—importvisafrompyvisa.resources.usbimportUSBInstrumentfrompyvisa。constantsimport*rm=visa。ResourceManager()res=rm.list_resources()#printrm#printres#print(len(res))iflen(res)>0:#print(res[0])fordevinres:dev_name=str(dev)ifdev_name.startswith

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论