台达PLC通讯协议原文1、通讯协议ASCII模式,9600,7,e,12、通讯资料格式:STX头码‘:’(3AH)ADR1通讯地址:8-bit位址包含了2个ASCII码ADR0CMD1命令码:8-bit命令包含了2个ASCII码CMD0DATA(0)资料内容:n个8-bit资料包含了2n个ASCII码n〈=74个ASCII码DATA(1)………DATA(n-1)LRC CHK1校验码:8-bit校验码包含了2个ASCII码LRC CHK0END1尾码:END1=CR(0DH),END0=LF(0AH)END0ADR(通讯地址):PLC通讯地址出厂设定为0X01,因此(ADR1,ADR0)=‘0’,‘1’→=30H,31H校验码:校验码采用LRC方式,将ADR1至最后一个资料内容加总,将该值取2的补数,结果即为LRC校验码例:STX‘:’ADR1ADR0‘0’‘1’CMD1CMD0‘0’‘3’启始资料地址‘0’‘4’‘0’‘1’资料数‘0’‘0’‘0’‘1’LRC CHK1LRC CHK0‘F’‘6’END1END0CRLF01H+03H+04H+01H+00+01H=0AH 0AH的2的补数为F6H注1:2补数的求法:(1补数再加1)0A(H)=00001010(B)先取1补数(将b0-b7反相)得11110101(B),再加1为11110110(B)=F6(H)即为0A(H)的2补数。
注2:在收到一串完整的通讯命令,要检查这串通讯命令是否有误,只要将(ADR1,0)至(LRC1,0)加总等于0,则通讯无误,否则表示命令中资料有些是错误的通讯异常PLC的回应:PLC收到完整的通讯命令时,会判断命令是否有效,造成无效的原因有:原 因EXCEPTION CODELRC CHK ERROR07DEIVCE ADDRESS INVALID02要求的资料超过范围03COMMAND CODE INVALID01通讯命令格式INVALID07例:使用命令码01读取X000-X017的状态Field NameExample (Hex)Heading3ASlave Address01Function01Starting Address Hi04Starting Address Lo00Number of Points Hi00Number of Points Lo10Error Check (LRC)EAPLC回应:Field NameExample (Hex)Heading3ASlave Address01Function81Exception Code02Error Check (LRC)7C因为Address 0400 对Function 01是不合法的,所以回应Exception Code=0X02,且Function 01被设为81(b7被设为1),亦即由回应的Function code的MSB被设为1表示PLC回应ERROR MESSAGE,并且由Function code可得知是何种错误。
可用的命令码叙述如下:(每个device的address,请参考最后一页)CodeNameDescription01Read Coil StatusS,Y,M,T,C02Read Input StatusS,X,Y,M,T,C03Read Holding RegistersT,C,D05Force Single ColiS,Y,M,T,C06Preset Single RegisterT,C,D15Force Multiple ColiS,Y,M,T,C16Preset Multiple RegisterT,C,D17Report Slave IDNone资料字元的格式依命令码而定,依可用的命令码的资料内容分别叙述如下:Function Code :01,Read Coil StatusField NameExample (Hex)Heading3ASlave Address01Function01Starting Address Hi06Starting Address Lo14Number of Points Hi00Number of Points Lo25Error Check (LRC)BFNumber of Points(max)= 255 = 0x00FF例:从从动装置01读取线圈T20-T56PC→PLC “:01 01 06 14 00 25 BF CR LF”PLC→PC “:01 01 05 CD 6B B2 0E 1B E6 CR LF”Field NameContentsSlave Address01Function01Bytes Count05Data (Coils T27…T20)CDData (Coils T35…T38)6BData (Coils T43…T36)B2Data (Coils T51…T44)0EData (Coils T56…T52)1BError Check (LRC)E6Function Code :02,Read Input StatusField NameExample (Hex)Heading3ASlave Address01Function02Starting Address Hi05Starting Address Lo14Number of Points Hi00Number of Points Lo25Error Check (LRC)BF例:从从动装置01读取接点Y024-Y070PC→PLC “:01 02 05 14 00 25 BF CR LF”PLC→PC “:01 02 05 CD 6B B2 0E 1B E5 CR LF”Field NameContentsSlave Address01Function02Bytes Count05Data (Coils Y033…Y024)CDData (Coils Y043…Y034)6BData (Coils Y053…Y044)B2Data (Coils Y063…Y054)0EData (Coils Y070…Y064)1BError Check (LRC)E5Function Code :03,Read Holding RegistetField NameExample (Hex)Heading3ASlave Address01Function03Starting Address Hi06Starting Address Lo14Number of Points Hi00Number of Points Lo08Error Check (LRC)DANumber of Points(max)= 18(for 16 bit register)= 9(for 32 bit register)例:从从动装置01读取线圈T20-T27PC→PLC “:01 03 06 14 00 08 DA CR LF”PLC→PC “:01 03 10 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 B8 CR LF”Field NameContentsSlave Address01Function03Bytes Count10Data Hi(T20)00Data Lo(T20)01Data Hi(T21)00Data Lo(T21)02Data Hi(T22)00Data Lo(T22)03Data Hi(T23)00Data Lo(T23)04Data Hi(T24)00Data Lo(T24)05Data Hi(T25)00Data Lo(T25)06Data Hi(T26)00Data Lo(T26)07Data Hi(T27)00Data Lo(T27)08Error Check (LRC)B8Function Code :05,Force Single CoilField NameExample (Hex)Heading3ASlave Address01Function05Coil Address Hi05Coil Address Lo00Force Data HiFFForce Data Lo00Error Check (LRC)F6NMNN = 0xFF00…Coil ONNMNN = 0x0000…Coil OFF例:强制设定线圈 Y000 ONPC→PLC “:01 05 05 00 FF 00 F6 CR LF”PLC→PC “:01 05 05 00 FF 00 F6 CR LF”Field NameExample (Hex)Heading3ASlave Address01Function05Coil Address Hi05Coil Address Lo00Force Data HiFFForce Data Lo00Error Check (LRC)F6Function Code :06,Preset Single RegisterField NameExample (Hex)Heading3ASlave Address01Function06Register Address Hi06Register Address Lo00Preset Data Hi12Preset Data Lo34Error Check (LRC)AD例:设定暂存器 T0 to 00 03 PC→PLC “:01 06 06 00 12 34 AD CR LF”PLC→PC “:01 06 06 00 12 34 AD CR LF”Field NameExample (Hex)Heading3ASlave Address01Function06Register Address Hi06Register Address Lo00Preset Data Hi12Preset Data Lo34Error Check (LRC)ADSwitch(c) Case 0 :T0Q→ :01 06 06 。