C#与信捷PLC通讯.docx

上传人:奥沙丽水 文档编号:429869 上传时间:2025-07-20 格式:DOCX 页数:15 大小:66.57KB
下载 相关 举报
C#与信捷PLC通讯.docx_第1页
第1页 / 共15页
C#与信捷PLC通讯.docx_第2页
第2页 / 共15页
C#与信捷PLC通讯.docx_第3页
第3页 / 共15页
C#与信捷PLC通讯.docx_第4页
第4页 / 共15页
C#与信捷PLC通讯.docx_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、实现C#与信捷P1.C通讯信捷P1.C在与PC通讯的时候,作为下位机,则上机必须按照MODBUSRTU的数据格式与其进行数据交换;下面为大家讲解相关使用:1、 什么是MOOBUSRT啾设?.MODBUSRTU的数据格式:请阅读Modbus协议中文版.pdf,通过这个介绍你会对MODBUS协议有所了解,其中还详细介绍了modbus通讯的另种模式一一MODBUSASCII模式,关于两者之间的区别,在此不再重复阐述,Modbus协议中文版.pdf上都有介绍,使用中清区分RTU和ASCII模式,不能笼统的认为使用的协议是MoDBUS协议。2、 MOOBUSRTIJ的数据格式:地址域功能码数据CRC或(

2、1.RC)I例如:0106000100179804O1.060001(X)179804从机地址功能码数据地址数据CRC校验这一串数据的意思是:把数据OXoOI7(十进制23)写入1号从机地址OXOOOI数据地址。2.1功能码I功能码描述功能码描述:0x01读线圈状态0x05写单个线圈0x02读离散输入状态0x06写单个保持寄存器0x03读保持寄存器Ox1.O写多个保持寄存器0x04读输入寄存等OxOF写多个线圈2.2读寄存器:(0x03功能码)读取格式:地址I功能码I寄存器起始地址I寄存器数量CRCI6校殴Adrr0x03高8位低8位高8位低8位低8位高8位返回格式:地址I功能码I字节数I寄存

3、器数据CRCI6校AdIT0x03NMX位低8位低8位高8位23写寄存器:(0x10功能码):写入格式:.地址I功能码I寄存叁起始地址I寄存叁数=I寄存叁数据CRCI6枚险AdrOxIO高8位低8位高8位低8位高8位低8位低8位高8位返回格式:地址I功能码I寄存器起始地址I寄存卷9ACRCI6校验AdrrOxIO高8位低8位裔8位低8位低8位高8位2.4示例发送:O1.0300010001D5CA从机地址功能号数据地址读取数据个数CRC校验那么P1.C接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据无误,则返回信息给主机:返回内容:O1.03020017F84A从机地址功能号

4、数据字节个数数据CRC校验MoDBUS主机就完成了一次对从机P1.C数据的读操作,实现了通讯,3、核心代码usingSystem;usingSystcm.IO.Ports;usingSyStCm.Threading:namespaceSy1.ow1.y.Base(pub1.icc1.assP1.CHe1.perJpub1.icScria1.PortScrPortget;set:pub1.icintIntTimeOutget;set:)pub1.icstringStrPErrorget;set;)pub1.icP1.CHc1.pcr(Scria1.PortmscrPort.iumTinwOut)

5、this.ScrPort=mscrPort;IhisJntTiineOut=mime0ut;)“CRC校验pub1.icbyte(JCRC1.6(bytebytData)(bytc11numArray=newbytcbytDgth+2;intmaxVa1.ue=(int)ushor.MaxVaIue;intnumI=40961;for(intindex1=0:index1,tData.1.eneth:+index1)(maxVa1.ue=(int)bytDataindcx1.;for(intindex2=0:index28:+index2)(intnum2=maxVa1.ue&1;maxVa1

6、ue=1;if(num2=I)maxVa1.ue=num1;J)Array.Copy(ay)bytData.0.(Array)nuni/Xrray.0.bytData.1.ength):numAr11ynumAray.1.ength-2=(byte)(maxVa1.ue&(int)bytc.MaxVa1.uc)numArraynunAay.1.ength-1=(byte)(maxVa1.ue8);returnnumArray;pub1.icbyte11stringToBytes(stringStrVa1.ue)StrVaIue=st,Va1.ue.Rep1.ace(,):bytc(numAr

7、ray=newbytcstrVgth/2;for(intstartindex=O;startIndexstrVgth;startindex+=2)IwinArrayIstari1.ndex12=Convert.ToByte(strVa1.ue.Substring(stariIndex,2),16);returnnumArray;初始化端口pub1.icboo1.P1.c-Ini(stringSuCOm)if(this.SerPort.IsOpen)this.SerPort.C1.ose();this.ScrPort.PortNamc=strCom;Ihis.SerPort.BaudRate=1

8、92001Ihis-ScrPort-DataBits=8;this.ScrPort.Parity=Parity1Evcn:Ihis-SerPort-StopBits=StopBi1.s.One;this.ScrPort.RcadTi11woi=2000;his.SerPort.Open():returntrue;)catch(Exceptionex)(IhisSirPError=初始化P1.C通讯端口错误:+cx.Mcssagc:returnfa1.se;)Ipub1.icstringbyteToHexStr(bytebytes)(stringstr=String.Empty:if(bytes

9、nu1.1.)(tbr(intindex=O;indexbytes.1.ength;+index)sir=str+bytcs(indcx.ToString(X2)+;Jreiurnstr;)读取M寄存器pub1.icboo1.ReaO)(TimeSpanIimcSpan=DatcTimc-Now-now;if(timeSpan.Mi1.1.iseconds=6)(byte(1.bytes2=newbyteiniCount;if(buffcr2(1.I=(bvtc)I&(int)buffcr22J=(int)(byte)intCount)(for(iniindex=O;indexintCou

10、nt;+index)(Array.Copy(Array)bufter2,3,(Array)bytes2,0,intCount);siringstr=this.bytcToHcxStr(bytcs2).Rcp1.acc(.).Trim();strVa1.ueindex=Convert.To1.nt32(str.16).ToString();f1.ag=true;)e1.se(IhisSirPEnW=-P1.C反馈字符出不符合要求!;f1.ag=fa1.se;e1.seIthis.StrPEror=读取寄存器:+intAen)(bytebytData=newbyte6(byte)1.(byte)5

11、byie)0,(byte)O.(byte)O,(byte)O;byebytesI=this.siringToBytes(intAddr.ToSiring(X2).Pad1.eft(4,O);bytData=bytes1.(O;b)Data3=bytes1.(1.;byteJbytcs2=this.stringToBytcs(strVa1.uc.Pad1.cfi(4,*0);bytData4)=bytcs2(I;bytData5=byes2(0;bytcJnumArray1.=this.CRC16(bytData);this.SerPort.Discard1.nBuffer():Ihis.S

12、erPort.Write(numArray1,0,numArray1.1.ength);DatcTimcnow=DatcTimc.Now;Thread.S1.eep(50);intbyicsToRcad=this.ScrPort.BytcsToRead;if(bytcsToRcadO)TinicSpantimcSpan2=DatcTimc-Now-now;if(timeSpan2.Mi1.1.iseconds=6)(f1.ag=this.byteTo1.IexStr(nunArray2)=this.byteTo1.1.exStr(numArrayI);)e1.se(this.StrPError

13、写取寄存器+intA1.dr.ToString()+反馈数据长度不够:“+11umrray2.1.ength.ToString();ag=fa1.se;J)e1.seIIhis-StrPError=写取寄存器:+intAddnToStringO+数据超时:“+TimcSpanIimcSpan=DateTimc-Now-now;if(timeSpan.Mi1.1.iseconds=7)Ibytc11bytcs2=!(StrRTypc=O)?newbytc4:newby(e(2);if(numArray211=(byte)3&(strRType=O&(int)numArray22)=2*intC

14、ountS1.rRType=I&nunArray22=(byte)4)(for(intindex=O:index(intintAddr.stringStrDType,stringStrVaIue)(TimeSpanIimeSpanI=newineSpan():boo1.f1.ag;try(if(his.ScrPort.IsOpcn)byteIbytDa(a=!(StrDType=O)?newbyte111:newbyte6;siringempty=SIring.Empty;byte()bytes1-this.stringToBytes(intddr.oString(X2).Pad1.eft(4

15、O);hytDaaO=(byte)I;bytDataI=!(StrDTypc=O)?(byte)16:(byte)6:bytData2J=bytes1(0bytData3=bytes1.1.;if(StrDType=O)(if(intAddr=151)StrVaIue=int.Parse(strVa1.ue).ToString(,X2);byte(bytes2=this.stringToBytes(sftData8=bytcs21:bytData91=bytes22);bytDataIO=bytcs23);bytenunArrayI=this.CRCI6(byiData);this.SerP

16、ort.Discard1.nBuffcr();this.SerPort.Write(numArray1.,O,numrray1.1.ength);DatcTimcnow=DatCTimC.Now;Thread,S1.eep(50);inibytesToRead=this.SerPort.BviesToRead;if(bytcsToReadO)(TinteSpantineSpan2=DateTime-Now-now;if(timcSpan2.Mi1.1.iseconds=8)(ag=this.bytcToHcxStr(numArrav2)=this.bytcToHcxStr(nunArayI);

17、)e1.se(Ihis-StrPError=写取寄存器:+intAk1.r.ToString()+反馈数据长度不够:+numAgth.ToString();f1.ag-fa1.se;J)e1.se(this.StrPError=写取寄存器:+intA1.dr.ToString()+数据超时十tineSpan2.MiI1.iseconds-ToString();f1.ag=fa1.se;e1.seag=fa1.se;this.StrPError=P1.C未反馈数据帧.”;e1.set1.ag=fa1.se;)catch(Exceptionex)(f1.ag=fa1.se:)rctumf1.ag;

18、pub1.icstringGctHexOrdcrtstringstrHcx.intintVa1.uc)(stringempty=string.Empty;rctum(Convert.ToInt32(strHex.16)+intVa1.uc).ToString(X4);J关闭pub1.icboo1.P1.C_C1.ose()(trythis.ScrPort.DiscanJInBuffcrO;this.ScrPort.C1.osc();his.SerPri.Dispose();rc1.umi11c;)catch(Exceptionex)rctumfa1.se:)附录Modbus通讯地址可编程控制器

19、内部软元件编号与对应的Modbus地址编号如下表示:OXDI、XD2、XD3X1.KX1.3系列PIC的MOdbUS地址与内部软元件对照表:注意:X、Y的MOdbUS地址计算详见表格最底部注意点,类型元件符号元件堵号个数Modbus地址(十六进制)Modbus地址(十进制)线圈-i象MM0M79998000(MF3F0-7999XXG-X71(本体)645000503F2048020543X100OO-X10077(#1模块)6451W-5I3F20756-20799XIO100-XIOI77(#2模块)645140517F2O820863X102()0X10277(#3模块)645180-5

20、IBF20864-20927XIO3(XK-XIO377(#4模块)645ICO-5IFF2092820991XI0400-XI0477(#5模块)6452-523F20992-21055XIO5OQ-XIO577(#6模块)645240-527F21()56-21119XIO6OO-XIO677(#7模块)M528O52BF21120-21183X1()7(MX!()777(#8模块)6452C(-52FF21184-21247XII(KX)-X11077(#9帙块)6453OO533F21248-21311X1.I1.OO-X1.1177(#10模块)645340-537F21312213

21、75X2(MXX)-X2(X)77(#1BD)6458D0-59OF22736-22799X2O100-X2OI77(#2BD)6459I0-594F228OO-22863X30000X30077(#1ED)645BE0-5C2F23556-23599YY077(本体)646000W03F2457624639Y100-Y177(#1模块)646I)13E24832-24895YIO100-YIOI77(#2模块)646I4O-)I7F24896-24959YIO2OO-YIO277(#3模块)M6180WIBF24960-25023Y103(XY10377(#4模块)6461C-6IFF250

22、24-25087Y10400-Y10477(#5模块)6462OOW23F25088-25151YIO5OOYIO577(#6模块)646240-627F25152-25215Y106(-Y10677(#7模块)6i6280Y2BF25216-25279Y10700-Y10777(#8模块)6462C062FF2528025343类型元件符号元件编号个效Modbus地址十六进制)Modbus地址(十进制)Y1.100O-Y1.1077(#9模块)646300F33F25344-25407Y1.II(X)-YI1177(#10模块)646340Y37F25408-25471Y2OOOOY2OO7

23、7(#1BD)6468D(690F26832-26895Y201(XY20177(#2BD)64691OFMF26896-26956Y3()0OO-Y377(#1ED)646BFO6C2F27632-27695SMS1O2310247000-73FF2X672-29695SMSMaSM204720489000-97FF56864-38911TT0T575576AOOoA23F40960-41535CCO-C575576B000-B23F45056-45631ETEToET3132cooo,oif49152-49183SEMSEMo-SEM3132COSo-C09F492X0-49311HMi1

24、HM0-HM959960CI(X)-C4BF49408-50367HSTHSO-HSI27128D900D97F55552-55679HTmHTo-HT9596E100-E15F5760()-57695HCHCoHC9596E5OOE55F58624-58719HSC*HSeo-HSC3132E900-E91F59648-59679寄存,&、字对貌DDO-D7999S(XX)0-1F3F0-7999IDID()-ID99(本体)I(X)5tKX50632O48O-2O579ID100OO-ID10099(#1模块)I(M)51()0-516320736-20835ID10100-ID1019

25、9(2模块)15164-51C72O8362O935ID1.U20()TDIO299(#3模块)I(K)51C8-522B209321035IDIoYx)-IDIO399(#4模块)I(X)522C528F2103621135IDIo40()TDIO499(#5铁块)I(X)5290-52F321136-21235IDI05(X)-IDI0599(#6模块)I(M)52F4-535721236-21335ID106IDI0699(#7模块)100535853BB21336-21435ID107!D10799(#8模块)I(X)53Bd54IF21436-21535ID1.OsOOTD10899

26、9模块)1005420-548321536-21635ID10900-ID10999(#10模块)100S48454E721636-21735ID2(XXX)-iD20()99#IBD)I(X)58D0-593322736-22835ID20I00-ID20I99-5C5323536-23635寄存器、字对象QDQD0-QD99本体1006000-60632457624675QD100ooQD10099(M1.模块)I(X)61(X-616324832-24931QDIO1.(X)-QDIO1.99(#2模块)I(X)6I646IC724932-25031QD1.0200-QD1.0299

27、3模块)10061C8622B25032-25131QDKB(X)-QD10399t#4模块)I(X)622C-628F25132-25231QDI(M(X)QDI(M99(#5模块)100629OW2F32523225331QD10500QD105991#6模块)I(X)62F4-635725332-25431QD1.()6(X)QD1()699(#7模块)I(X)6358-63BB25432-25531QDI0700-QDI0799(#8模块)10063BC-64IF2553225631QDIOS(X)-QD1.0X99(#9模块)I(X)6420-648325632-25731QDK

28、WOft-QD10999(#10铁块100648464E72573225831QD200QD299(#1BD)10068D0693326832-26931QD2OI(X)-QD2()I99(#2BD)I(X)6934-699726932-27031QD30000QD30099(1ED)1006BO6C5327632-2773!SDSDo-SD204720487(XX)-77FF2X672-30719TDTDoTD5755768OOO823F3276833343CDCDO-CD5755769OOO923FA6864-37439类型元件符号元件编号个效Modbus地址十六进制)Modbus地址(十

29、进制)ETDErDo-ErD3132A(XXkAUIF4096()-40991HD-1HDoHD9991000AoSo-A46741088-42087HSDHSD0-HSD499500B880BA7347232-47731IITDx1.HTX)-HTD9596BCso-BCDF48256-48351HCDHCDoHCD9596C080,0DF4928049375IISCDHSCDo-HSCD3132C480-C49E50304-50335FDi-FX)-FD5119512()C4C0-D8BF50368-55487SFDSSFDO-SFD199920E4C0EC8F5856060559FSo-

30、FS4748F4C(bF4EF62656-627032XD5、XDM4XDCXD5E、XDME,X1.5、X1.5E、X1.ME筋IJModbUS出止与内部软元件对照表:类型元件符号元件编号个数Modbus地址(十六进制)Modbus地址(十进制)线圈、MM0M204792(M8O07FFF0-20479XX0X77(本体)645(XM)-503F20480-20543X1.oOOOX10077(#1模块)6451005I3F2O72O799X10100-X10177(#2模块)645140-517F208(M-20863XIOZOO-X10277(#3模块)645I80-5IBF20864-

31、20927XKB(X)-X10377(#4模块)6451Q)-5II20928-20991XI(M(K)-X1.(477(然模块)6452OO523F2099221055X10500X10577(#6模块)645240-527F21056-21119XI%(X)-XI()677(#7模块)64S28052BF21120-21183X10700-X10777(#8模块)6452C052FF21184-21247X1.100O-X1.1077(相模块)6453OO-533F21248-21311X1.H(X)-XI1177GHO模块)64SM)537F2131221375XI12OO-XI!277

32、11模块)64538O-53BF21376-21439X1.BOO-XI1377(#12模块)6453CO-53FF2144(21503X1.H(N)-XI1477(#13模块)645400-543F21504-21567X11500-XI1577(#14模块)645440-547F21568-21631XII600-X11677(#15模块)645480-54BF21632-21695XII7(X)-XI1777(#16模块)64540)-54FF2I6-21759X2OO(XKX2OO77(#1BD)6458DO-59OF2273622799X201(X-X20177(#2BD)645

33、910-594F22X-22863X3-X3OO77(#1.ED)645BFO-5C2F2353623599YYO77(本体)646000603F2457624639YI0000-YI0077(#1模块)6461OOFI3F24832-24895YI0I00-YI0I77(#2模块)646140*17F24824959Y10200-Y10277(#3模块)646IX0-6IBF2496025023Y10300-YI0377(#4模块)6461CoWFF2502425087Y104Q0vY10477(#5模块)646200*23F2508825151Y105(X)Y10577(#6模块)646240)27F25152-25215YI0600-YI0677(#7模块)646280-62BF2521625279Y1O7(X)YIO777(#8模块)6462G)-62EF25280-25343Y1.I(XX)-YI1077(#9模块)64650()Y33F25344-25407Y1.I100-YI

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 通信/电子 > 运营商及厂商资料

宁ICP备18001539号-1