实现C#与信捷PLC通讯_第1页
实现C#与信捷PLC通讯_第2页
实现C#与信捷PLC通讯_第3页
实现C#与信捷PLC通讯_第4页
实现C#与信捷PLC通讯_第5页
已阅读5页,还剩10页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

实现C#与信捷PLC通讯

实现C#与信捷PLC通讯

信捷PLC在与PC通讯的时候,作为下位机,则上机必须按照MODBUS

RTU的数据格式与其进行数据交换;下面为大家讲解相关使用:

1、什么是MODBUSRTU协议?

MODBUSRTU的数据格式:请阅读《Modbus协议中文版.pdf》,通过这个

介绍你会对MODBUS协议有所了解,其中还详细介绍了modbus通讯的另一种

模式一一MODBUSASCII模式,关于两者之间的区别,在此不再重复阐述,

《Modbus协议中文版.pdf》上都有介绍,使用中请区分RTU和ASCH模式,

不能笼统的认为使用的协议是MODBUS协议。

2、MODBUSRTU的数据格式:

地址域功能码数据CRC或(LRC)

例如:0106000100179804

0106000100179804

从机地址功能码数据地址数据CRC校验

这一串数据的意思是:把数据0x0017(十进制23)写入1号从机地址

0x0001数据地址。

2.1功能码

「功能码描述功能码描述I

0x01读线圈状态0x05写单个线圈

0x02读离散输入状态0x06写单个保持寄存器

0x03读保持寄存器0x10写多个保持寄存器

0x04读输入寄存器0x0F写多个线圈

2.2读寄存器:(0x03功能码)

读取格式:

地址功能码寄存器起始地址寄存器数量CRC16校验

Adrr0x03高8位低8位高8位低8位低8位高8位

返回格式:

地址功能码字节数寄存器数据CRC16校验

Adrr0x03N高8位低8位低8位高8位

2.3写寄存器:(0x10功能码):

写入格式:

地址功能码寄存器起始地址寄存器数量寄存器数据CRC16校验

Adr0x10高8位低8位高8位低8位高8位低8位低8位高8位

r

返回格式:

地址功能码寄存器起始地址寄存器数量CRC16校验

Adrr0x10高8位低8位高8位低8位低8位高8位

2.4示例

发送:()1()3()0()100()1D5CA

从机地址功能号数据地址读取数据个数CRC校验

1

实现C#与信捷PLC通讯

那么PLC接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断

数据无误,则返回信息给主机:

返回内容:0103020017F84A

从机地址功能号数据字节个数数据CRC校验

MODBUS主机就完成了一次对从机PLC数据的读操作,实现了通讯。

3、核心代码

usingSystem;

usingSystem.IO.Ports;

usingSystem.Threading;

namespaceSylowIy.Base

{

publicclassPLCHelper

{

publicSerialPortSerPort{get;set;}

publicintIntTimeOut{get;set;}

publicstringStrPError{get;set;)

publicPLCHelper(SerialPortmserPort,intmTimeOut)

1

this.SerPort=mserPort;

this.IntTimeOut=mTimeOut;

)

//CRC校验

publicbyteflCRC16(byte[]bytData)

(

byte[]numArray=newbyte[bylData.Length+2];

intmaxValue=(int)ushort.MaxValue;

intnuml=40961;

for(intindex1=0;index1<bylData.Lenglh;++indexl)

(

maxValueA=(int)bytData[index1];

for(intindex2=0;index2<8;++index2)

(

intnum2=maxValue&1;

maxValue»=1;

if(num2==1)

maxValueA=num1;

)

)

Anay.Copy((Array)bytData,0,(Array)numArray,0,bytData.Length);

numArray[numArray.Length-2|=(byte)(maxValue&(int)byte.MaxValue);

numArray[numArray.Length-1]=(byte)(maxValue»8);

returnnumArray;

publicbytelJstringToBytes(stringstrValue)

(

strValue=strValue.Replace("",

byte[]numArray=newbyte[strValue.Leng(h/2];

for(intstartindex=0;startindex<strValue.Length;startindex+=2)

numArray[startIndex/2]=Convert.ToByte(strValue.Substring(startIndex,2),16);

returnnumArray;

)

〃初始化端口

2

实现C#与信捷PLC通讯

publicboolPlc_Ini(stringstrCom)

(

try

(

if(this.ScrPort.IsOpcn)

this.SerPort.Close();

this.SerPort.PortName=strCom;

this.ScrPort.BaudRatc=19200;

Ihis.SerPort.DataBits=8;

this.SerPort.Parity=Parity.Even;

this.ScrPort.StopBits=StopBits.One;

ihis.SerPort.ReadTimeoul=2000;

this.SerPort.Open();

returntrue;

)

catch(Exceptionex)

{

ihis.StrPError="初始化PLC通讯端口错误:"+ex.Message;

returnfalse;

publicstringhytcToHcxStr(bytc[]bytes)

{

stringstr=string.Empty;

if(bytes!=null)

(

for(intindex=0;index<bytes.Length;++index)

str=str+bytes[index].ToString("X2")+"

)

returnstr;

I

〃读取M寄存器

publicboolRead_M(intintAddr,intintCount,refstringflstrValue)

(

sirValue=newstring[intCount];

boolflag;

try

(

bytc[]bytData=newhyte[6]

(

(byte)1,

(byte)I,

(byte)0,

(byte)0,

(byte)0,

(byte)0

1;,

byte[]bytes1=this.stringToBytes(intAddr.ToString("X2").PadLeft(4,,()1));

bytData⑵=bytesl[0J;

bytData[3]=bytcsl[l];

bytData[4]=(byte)0;

bytData[5]=(byte)Convert.ToInt32(intCount.ToString(),16);

byte[]buffer1=this.CRC16(bytData);

lhis.SerPort.DiscardInBuffer();

3

实现C#与信捷PLC通讯

)

returnflag;

)

〃写入M寄存器

publicboolWritc_M(intintAddr,stringstrValuc)

{

TimeSpantimeSpan1=newTimeSpan();

boolflag;

try

(

if(this.SerPort.IsOpen)

(

byte[]bytData=newbyte[6]

(

(byte)1,

(byte)5,

(byte)0,

(byte)0,

(byte)0,

(byte)0

);,

bytc[]bytes1=this.stringToBytcs(intAddr.ToString("X2',).PadLcft(4,'0'));

bytData[2]=bytesl[0];

bytData(3]=byteslfl];

byte[]bytes2=this.stringToBytcs(strValue.PadLeft(4,'0'));

bytData[4]=bytes2[l];

bytData[5]=bytes2[0];

byte[]numArrayI=this.CRC16(bytData);

this.SerPorl.DiscardInBiiffer();

this.SerPort.Write(numArray1,0,numArray1.Length);

DateTimenow=DateTime.Now;

Thread.Sleep(50);

intbytesToRead=this.SerPort.BytesToRead;

if(bytesToRead>0)

(

TimeSpantimcSpan2=DateTime.Now-now;

if(timeSpan2.Milliseconds<=this.IntTimeOut)

(

bytc[]numArray2=newbytc[bytcsToRcad];

this.SerPort.Read(numArray2,0,numArray2.Length);

if(nurnArray2.Length>=6)

(

flag=this.byteToHexSlr(nuinArray2)==this.byteToHexStr(nuinArray1);

}

else

I

this.StrPError="写取寄存器:"+intAddr.ToStringO+"反馈数据长度不够:"+

nuniAiray2.Length.ToSlring();

flag=false;

)

)

else

(

ihis.SlrPError;”写取寄存器:"+intAddr.ToStringO+”数据超时广+

5

实现C#与信捷PLC通讯

timeSpan2.Milliseconds.ToString();

flag=false;

)

)

else

(

flag=false;

this.StrPError="PLC未反馈数据帧

}

)

else

flag=false;

)

catch(Exceptionex)

(

flag=false;

I

returnflag;

}

〃读取D寄存器

publicboolRead_D(

intintAddr,

stringstrRType,

intintCount,

refstringstrSendStr,

refstringstrRecStr,

refstringllstrValue)

(

sirValue=newstring[inlCount];

boolflag;

try

(

byte[]bytData=newbyte[6]

(

(byte)1,

(byte)3,

(byte)0,

(byte)0,

(byte)0,

(byte)0

};,

byte[]bytes1=this.stiingToBytes(intAddr.ToString(',X2").Pa(iLcft(4,'0'));

by(Data[2]=bytes1(0];

bytData[3]=bytesl[1];

bytData[4]=(byte)0;

bytData[5]=!(strRType=="0")?(byte)2:(byte)Convert.ToInt32(intCount.ToString(),16);

bytc[]numArrayI=this.CRC16(bytData);

lhis.SerPort.DiscardInBuffer();

this.SerPort.Write(numArray1,0,numArray1.Length);

strSendStr=this.bytcToHcxStr(numArray1);

DaleTimenow=DateTime.Now;

Thread.Sleep(IOO);

intbytesToRead=this.ScrPort.BytesToRead;

if(bytesToRead>0)

6

实现C#与信捷PLC通讯

TimeSpantirneSpan=DateTime.Now-now;

if(tirneSpan.Milliseconds<=this.IntTimeOut)

(

byteflnumArray2=newbytefbytcsToRcad];

intnum=this.SerPort.Read(numArray2,0,numArray2.Length);

if(num>=7)

(

byle[]bytes2=!(strRType=="0")?newbyte[4]:newbyle[2];

if(numArray2[I]==(byte)3&&(strRType=="0"&&(int)numArray2[2]==2*

intCount||strRType=="1"&&numArray2[2]==(byte)4))

(

for(intindex=0;index<intCount;++index)

(

if(strRType=="0")

Array.Copy((Array)numArray2,3+2*index,(Array)bytes2,0,2);

else

Array.Copy((Array)numArray2,3,(Array)bytes2,0,4);

strRecStr=this.byteToHexStr(numArray2);

stringstr=this.byteToHexStr(bytes2).Replace(n","n).Trim();

if(strRType==,,1")

(

floatsingle=BitConverter.ToSingle(bytes2,0);

strValuefO]=single.ToString(HF3");

1

else

strValuefindex]=Convert.ToInt32(str,16).ToString();

1

flag=true;

1

else

(

加56皿^^0「、*1/:反馈字符串不符合要求!”;

flag=false;

)

)

else

f

this.StrPError="读取寄存器:"+intAddr.ToStringO+"反馈数据长度不够:"十

num.ToStringO;

flag=false;

I

}

else

(

thi$.StrPError="读取寄存器:"+intAddr.ToStringO+”数据超时/+

tirneSpan.Milliseconds.ToStringO;

flag=false;

)

1

else

flag=false;

this.StrPError二"PLC未反馈数据帧

7

实现C#与信捷PLC通讯

)

1

catch(Exceptionex)

(

flag=false;

ihis.StrPError="读取寄存器:'+intAddr.ToStringO+"发生异常:"+ex.Message;

)

returnflag;

I

〃写D寄存器

publicboolWrite_D(intintAddr,stringstrDType,stringstrValue)

(

TimeSpantimeSpan1=newTimeSpanO;

boolflag;

try

(

if(this.SerPort.IsOpen)

(

bytc[]bytData=!(strDTypc=="0")?newbyte[11]:newbyte[6];

stringempty=string.Empty;

bytel]bytes1=this.stringToBytes(intAddr.ToString(',X2").PadLeft(4,'0'));

bytData[0]=(byte)I;

bytData[1]=!(strDType=="0")?(byte)16:(byte)6;

bytData[2]=bytesl[0]:

hytData[3]=bytesl[l];

if(strDType=="0")

(

if(intAddr==151)

strValue=int.Parse(slrValue).ToString("X2");

byte[]bytes2=this.stringToBytes(strValue.PadLeft(4,'0'));

this.byteToHexStr(bytes2);

bytData[4]=bytes2[0];

bytData[5]=bytes2[l];

(

else

(

bytData[4]=(byte)0;

bytData[5]=(byte)2;

bytData[6]=(byte)4;

byte[]bytes2=BitConverier.GetBytes(Convert.ToSingle(strValue));

bytData[7]=bytes2[0];

hytData[8]=bytes2[l];

bytData[9]=bytes2[2];

bytData[10]=bytes2[3];

I

bytelJnumArray1=this.CRCI6(bytData);

this.SerPort.DiscardInBuffer();

this.SerPort.Write(numArray1,0,numArray1.Length);

DateTimenow=DateTime.Now;

Thrcad.Slccp(50);

intbytesToRead=this.SerPort.BytesToRead;

if(bytesToRead>0)

TimeSpantimeSpan2=DateTime.Now-now;

8

实现C#与信捷PLC通讯

if(timeSpan2.Milliseconds<=this.IntTimeOut)

(

byte[]nuniArray2=newbyte[bytesToRead];

this.SerPort.Read(numArray2,0,numArray2.Length);

if(numArray2.Length>=8)

{

flag=this.byteToHexStr(numArray2)==this.byteToHexStr(numArrayl);

)

else

(

this.StrPError="写取寄存器:"+intAddr.ToStringO+"反馈数据长度不够:"+

numArray2.Length.ToSlring();

flag=false;

I

)

else

(

this.StrPError="写取寄存器:"+intAddr.ToStringO+"数据超时丁'+

timcSpan2.Milliseconds.ToString();

flag=false;

)

)

else

(

flag=false;

this.StrPError="PLC未反馈数据帧...”;

)

}

else

flag=false;

I

catch(Exceptionex)

(

flag=false;

)

returnflag;

)

publicstringGctHcxOrdcr(stringstrHcx,intintValuc)

{

siringempty=string.Empty;

return(Convert.ToInt32(strHex,16)+intVaIue).ToString("X4");

I

〃关闭

publicboolPLC_Close()

(

try

(

this.SerPort.DiscardInBuffer();

this.ScrPort.Closc();

lhis.SerPort.Dispose();

returntrue;

)

catch(Exceptionex)

9

实现C#与信捷PLC通讯

returnfalse;

附录Modbus通讯地址

可编程控制器内部软元件编号与对应的Modbus地址编号如下表示:

1)XDKXD2、XD3、XL1、XL3系^PLC的Modbus地址与内部软元件对照表:

注意:X、Y的Modbus地址计算详见表格最底部注意点。

元件个Modbus地址Modbus地址

类型元件编号

符号数(十六进制)(十进制)

MM0-M799980000-1F3F0-7999

X0-X77(本体)645OOO-5O3F20480-20543

X10000-X10077(#1模块)6451OO-513F20736^20799

X10100-X10177(#2模块)64514O-517F20800~20863

X10200-X10277(#3模块)645I80-51BF20864-20927

X10300-X10377(#4模块)6451co~5IFF20928~20991

XI0400X1()477(#5模块)6452OO-523F20992*21055

X10500-X10577(#6模块)645240-527F21056-21119

X

X10600-X10677(#7模块)645280-52BF21120-21183

线X10700-X10777(#8模块)6452C0-52FF21184~21247

圈XI1000-XI1077(#9模块)6453OO-533F21248-21311

、X11IOO-XI1177(#10模块)64534O-537F21312-21375

位X2OOOO-X2OO77(#1BD)6458D0-590F22736-22799

对X20100-X20177(#2BD)645910~594F22800~22863

象X3OOOO-X3OO77(#1ED)645BFO-5C2F23536-23599

Y0-77(本体)646000-603F24576-24039

YKXXJ0-Y10()77(#1模块)646IOO-613F24832-24895

Y10I00-Y10I77(#2模块)646140-617F24896-24959

Y10200-Y10277(#3模块)646180-61BF24960-25023

YY10300-Y10377(#4模块)6461C0-61FF25024-25087

Y10400-Y10477(#5模块)6462OO~623F25088-25151

Y10500-Y10577(#6模块)646240~627F25152-25215

Y10600-Y10677(#7模块)646280-62BF25216-25279

Y10700-Y10777(#8模块)6462C0-62FF25280〜25343

10

实现C#与信捷PLC通讯

元件个Modbus地址Modbus地址

类型元件编号

符号数(十六进制)(十进制)

Y11000-Yl1077(#9模块)6463OO-633F25344-25407

Y11100-Yl1177(#10模块)646340~637F25408-25471

Y2OOOO-Y2OO77(#1BD)6468DO〜690F26832〜26895

Y2O1OO-Y2O177(#2BD)646910~694F26896-26956

Y30000~Y30077(#1ED)646BF0-6C2F27632~27695

SS0-SI02310247(XX)~73FF28672-29695

SMSM0-SM204720489(XX)~97FF36864〜38911

TT0-T575576AOOO-A23F40960-41535

CC0-C575576B000-B23F45056-45631

ETET0-ET3132C000-C01F49152-49183

SEMSEMO〜SEM3132C080-C09F49280-49311

HM"1HM0-HN4959960C100-C4BF49408-50367

HS如HS0-HS127128D900-D97F55552-55679

HT知HT0-HT9596E100-E15F57600〜57695

HC%1HC0-HC9596E500-E55F58624-58719

HSC*iHSC0-HSC3132E900-E9IF59648〜59679

DD0-D79998000O~1F3F0-7999

ID0-ID99(本体)1005000〜506320480〜20579

ID10000-ID10099(#1模块)1005100~516320736-20835

ID10100-ID10199(#2模块)1005164-51C720836〜20935

寄ID1()2(X)~1D10299(#3模块)1(X)51C8-522B20936~21035

存ID10300~ID10399(#4模块)l(X)522C~528F21036-21135

器ID10400-ID10499(#5模块)1005290-52F321136-21235

、ID10500-ID10599(#6模块)10052F4-535721236-21335

ID

字ID106004DI0699(#7模块)1005358~53BB21336〜21435

对ID10700-ID10799(#8模块)10053BC-541F21436-21535

象ID10800-ID10899(#9模块)1005420〜548321536~21635

ID10900UD10999(#10模块)1005484-54E721636~21735

ID2OOOO-ID2OO99(#1BD)10058D0-593322736~22835

ID20100-ID20199(#2BD)1()05934~599722836〜22935

ID30000-ID30099(#1ED)1005BF0-5C5323536~23635

QD0-QD99(本体)1005000-606324576-24675

QD10000〜QD10099(#1模块)1006100-616324832-24931

QDI0I00-QDI0199(#2模块)1006164-6IC724932-25031

QD10200-QD10299(#3模块)10061C8-622B25032~25131

QD10300-QD10399(#4模块)100622C-628F25132~25231

寄QD10400-QD10499(#5模块)1(X)6290~62F325232~25331

存QD10500~QD10599(#6模块)1(K)62F4~635725332~25431

QD

器QD10600-QD10699(#7模块)1006358-63BB25432-25531

、QD10700-QD10799(#8模块)10063BC-64IF25532~25631

字QD108()()~QD10899(#9模块)1005420~648325632-25731

对QD10900-QD10999(#10模块)100W84-64E725732-25831

象QD2(XXX)~QD20099(#1BD)10068D0~693326832-26931

QD20100-QD20199(#2BD)1006934-699726932-27031

QD3OOOO-QD3OO99(#1ED)1006BF0-6C5327632-27731

SDSD0-SD204720487OOO-77FF28672-30719

TDTD0-TD5755768000~823F32768~33343

CDCD0~CD5755769000〜923F36864-37439

11

实现C#与信捷PLC通讯

元件个Modbus地址Modbus地址

类型元件编号

符号数(十六进制)(十进制)

ETDETD0-ETD3132A000-A01F40960-40991

HD""HD0-HD9991000A080-A46741088-42087

HSD刈HSD0-HSD499500B880-BA7347232〜47731

HTD即HTD0-HTD9596BC80-BCDF48256-48351

HCD孙HCD0〜HCD9596C080〜C0DF49280~49375

HSCD列HSCD0~HSCD3l32C480-C49F50304〜50335

FD%2FD0-FD5U95120C4C0-D8BF50368〜55487

SFD«2SFD0-SFDI9992000E4C0-EC8F58560-60559

FS*2FS0-FS4748F4co〜F4EF62656-62703

2XD5xXDM、XDC、XD5E、XDME、XL5、XL5E、XLME系列Modbus地址与内部软元件对照表:

元件Modbus地址Modbus地址

类型元件编号个数

符号(十六进制)(十进制)

MM0-M20479204800-4FFF0-20479

X0-X77(木体)645OOO-5O3F20480-20543

X10000-X10077(#1模块)6451OO-513F20736-20799

X10100-X10177(#2模块)645140~517F20800-20863

X10200-X10277(#3模块)64518O-51BF20864-20927

XI0300-X10377(#4模块)6451co~5IFF20928~20991

X10400-X10477(#5模块)645200-523F20992-21055

XI05(X)-X10577(#6模块)645240~527F21056-21119

X10600-X10677(#7模块)645280-52BF21120-21183

X10700-X10777(#8模块)6452C0-52FF21184-21247

XJ1OOO-X1IO77(#9模块)6453OO-533F21248-21311

XX11100-X1I177(#10模块)645340〜537F21312-21375

X11200-X11277(#11模块)64538O-53BF21376-21439

线XiI3()(>X11377(#12模块)6453C0-53FF21440-21503

演XI1400-X11477(#13模块)645400-543F21504-21567

、X11500-X11577(#14模块)645440-547F21568-21631

XII600-X11677(#15模块)645480〜54BF21632~21695

(模块)64

对X117OO-X11777#1654C0-54FF21696-21759

象X20000-X20077(#1BD)6458DO〜59OF22736〜22799

X20100-X20177(#2BD)645910~594F22800~22863

X30000-X30077(#1ED)645BF0-5C2F23536〜23599

Y0~77(本体)646000-603F24576-24639

Y10000-Y10077(#1模块)646100~613F24832〜24895

YI0I00-YI0I77(#2模块)646140-617F24896~24959

Y10200-Y10277(#3模块)646180-61BF24960-25023

Y10300-Y10377(科4模块)6461C0-61FF25024~25087

Y10400-Y10477(#5模块)646200-623F25088-25151

Y

Y10500-Y10577(#6模块)646240~627F25152-25215

Y10600-Y10677(#7模块)646280~62BF25216~25279

Y10700-Y10777(#8模块)6462C0-62FF25280-25343

Y11000-Y11077(#9模块)646300~633F25344~25407

Y11100-Y1U77(#10模块)646340-637F25408-25471

Y11200-Y11277(#11模块)646380-63BF25472-25535

12

实现C#与信捷PLC通讯

元件Modbus地址Modbus地址

类型元件编号个数

符号(十六进制)(十进制)

Y1I300-Y11377(#12模块)6463C0-63FF25536-25599

Y11400-Y11477(#13模块)646400-643F25600-25663

YI1500-Y11577(#14模块)646440-647F25664-25727

Y11600-Y11677(#15模块)646480-64BF25728-25791

Y11700-Y11777(#16模块)6464C0-64FF25792~25855

Y2OOOO~Y2OO77(#1BD)6468D0-690F26832~26895

Y20100-Y20177(#2BD)646910-694F26896~26956

Y30000-Y30077(#1ED)646BF0-6C2F27632-27695

SS0-S799980007OOO-8F3F28672-36671

SMSM0-SM409540969000-9FFF36864-40959

TT0-T40954096A000〜AFFF40960-45055

CC0-C40954096B000-BFFF45056-49151

ETET0-ET3940C000-C02749152-49191

SEMSEM0-SEM127128C080-C0FF49280-49407

HM"HM0-HM6I436144C100-D8FF49408~55551

HS孙HS0-HS9991000D900〜DCEF55552-56551

HT*"HT0~HT10231024EI00-E4FF57600-58623

HC如HC0-HCI0231024E500-E8FF58624〜59647

HSC*1HSC0-HSC3940E900-E92759648^59687

DD0-D20479204800-4FFF0-20479

ID0-1D99(本体)1(X)5000~506320480~20579

ID10000-1D10099(#1模块)KX)5100-516320736-20835

IDI0100-1DI0I99(#2模块)1005164~51C720836-20935

ID10200-1D10299(#3模块)10051C8-522B20936-21035

IDI0300-1D10399(#4模块)100522C~528F21036-21135

ID10400-1D10499(#5模块)1005290-52F321136-21235

ID10500-ID10599(#6

温馨提示

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

评论

0/150

提交评论