s71200-modbus-通讯指令解析.docx
S7-1200作为M<>dhusRTU主站S7-I2()()支持ModbusRTU通信模式的模块可作为ModbusRTU主站。以下以CPUI215CDCDCDe和CMI241RS485模块为例,介绍S7-I2()()ModbusRTU主站通信组态及编程步骤。硬件和软件需求及所完成的通信任务:硬件,CPU1215CDC/DaDC(订货号:6ES7215-1AG31-OXBO)CM1241RS485(订货号:6ES724I-ICH30-0XB0)PS307电源(订货号:6ES7307-1KA02-0AA0)PC(带以太网卡)TP以太网电缆软件STEP7ProfessionalV11SP2UPD4+HSPModSim(该软件是第三方软件,可以从Internet网络下载)所完成的通信任务:将ModbusRTU从站MOdSim中Modhus地址从40001起先的5个字中的数据,分别读取到ModbUSRTU主站CPU12I5C中地址从DB1.DBWO起先的5个字中。1.组态ModbusRTU通信模块在硬件书目里找到“通信模块”一“点到点”T“CM124I(RS485),双击或拖拽此模块至CPU左恻即可,如下图1所示:S7-1200ModbusRTU»P1.jlCPU1215CDODCZDCJ_XH史拒坦明&阚将视奥JW设备视图送件人:E国¾tl<w>"F1i图I组态通信模块接下来,在“设备视图”中用鼠标选中CM1241(RS485)模块,在“属性”T“端口组态”中配置此模块硬件接口参数。如下图2所示:以下以传输率=9.6Kbps,奇偶校验=无奇偶校验,数据位=8位字符,停止位=】,其它保持默认设置为例。11注口馅花相君传送泊息铝态所接收的清息清开始清电绪果耍件标识将城口组专,口FF字符图2RS485端口设置最终在“硬件标识符”里确认一下硬件标识符为271,如下图3所示:RX85接口义屋住常规茶口组近姐宣传送滴HIa无所接收的消息消息刑is消息绪果i健件标识符图3硬件标识符硬件标识符健件标识符在项目树下选择“CPU1215CDeDaDC”T“程序块”-“添加新块”,在弹出的窗口中选择PB组织块"T“Startup'',添加启动OBIo0,如下图4所示:图4添加启动OB3.调用MB_COMM_1.OAD指令为使端口一启动就被设置为ModbusRTU通信模式,可在OB100中调用“MB_COMM_1.OAD”指令。调用“MB_C0MM_1.0AD”指令时会自动弹出创建相应背景数据块的界面,如下图5所示:F1目画z叁日勤6S91,埃标Sfi"MainProgramSs.eep(Cycle)-市程序段1:Ellreo2PT8MJDP“ITTMB.DB.1BCOI1.1.QADEHOOOIICerrorSTATUS图5调用MB_COMM_1.OAD指令点击“确认''为该指令创建背景数据块后,为各输入/输出引脚安排地址。尤其需留意MB.DB输入引脚需指向"MB_MASTER”指令的背景数据块,如下图6所示:小留意:"MB_COMM1.OAD”指令输入位“REQ”需运用上升沿触发。由于OBloO只在S7-I200启动时执行一次,因此,此例中将“REQ”设为“TRUE”。XDBl11B.C0,IM.1.OQDB-.IBeCOI-Ih1.1.OADllTUE-PEO271*CM.I24IJPS485-f>0rT960BAUD?一PAfITYO-F1.OWeOl¢-PTSeeOHJQ-FTSeOFFe10OO-PespjoDOHEE”OFSTATUSM3MASTER33J(2311三-=_WeMBeCObIK1.1.OADeDB"KIB-COMM.1.OAPORTBAUD波特率选择:3600,6()()(),I2(XX),24(X),4800,9600,19200,38400,57600,76800,115200(留意:全部其它值均无效)PARITY奇偶检验选择:O-无;I-奇校验;2-偶校验F1.OW.CTR1.流限制选择:()_(默认值)无流限制RTS_ON_D1.YRTS延时选择:0-(默认值)RTS_OFF_D1.YRTS关断延时选择:0-(默认值)RESP-TO响应超时:默认值=I(XX)msoMB.MASTER允许用于从站响应的时间(以喳秒为单位)。MB_DB对MB_MASTER或MB_S1.AVE指令所运用的背景数据块。DONE完成位:指令执行完成且未出错置1ERROR错误位:未检测到错误:1-检测到错误。在参数STATUS中输出错误代码。STATUS端口组态错误代码表IMB_COMM_1.OAD指令参数意义4 .创建DATA_PTR数据发送、接收缓冲区通过“程序块“添加新块”,选择“数据块(DB)“创建DB块,选择“标准与S7-300/400兼容”,点击“确认”键。在DB中创建数据类型为5个字的数组,如下图7所示:从留意:DATA_PTR数据发送、接收缓冲区运用的DB访问类型必需是标准与S7-300/400兼容。图7创建DATA_PTR数据发送、接收缓冲区5 .调用MB_MASTER指令在OBl中调用“MBMASTER”指令,调用该指令时会自动弹出创建相送件端点白.国WC月W0<059*'+千埃接口收籁央块标题:eMamrrgr4rnSweep(C<kI.1B,STER-CII-FEQMB>DDPMODEDATAeAODtDATAJgIDATAPTFEHODOIIEBUSYCFFOFSTA恩本招生>nw»工艺I遁伯前一匚JS丁遇信»_J开放式用户>1.iE8Xm,i911t98».0.到点_JU5S_jMODBl调用选项.,电I二g三7i»MODBl,qIiUHR务应背景数据块的界面,如下图8所示:图8调用MB.MASTER指令点击“确认”为该指令创建背景数据块后,并为各输入/输出引脚安排地址,如下图9所示:尔留意:、'MB_MASTER”指令的输入位“REQ”必需运用上升沿触发。以下以S7-12(X)作为ModbUSRTU主站,用F03功能码读取MOdbUSRTU从站2,从ModbUS地址40001起先的五个字,接收的数据存放在缓冲区DB3.DBW0起先区域为例。设置如下所示:MB_ADDR=2,MODE=O,DATA_ADDR=4000l,DATA_1.EN=5。地址对应关系如下表2所示:ModbusRTU主站CPUI2I5C数据缓冲区地址ModbusRTU从站Modbus地址DB3.DBW04(XX)IDB3.DBW240002DB3.DBW440003DB3.DBW640004DB3.DBW840005表2Modbus地址对应关系%D82XM100-NBMSTeRJ>8”Ti<1.4"MB>U$TEP._JFl1FU11IIM102%lv110ODone,“Tag_6”“ag_4”XMIO3TPlPEQBUSY%h110.12-KIB>DDrXMIo4“g-5¢,-MODEER£<*1,Tag,8,4CC01-DATAeADDP惴VMI25-DATA.1.EKSTATUS'tT肛9"BOBMOBgoV.OPD5-DATPTP图9MB.MASTER指令MB_MASTER指令参数意义如下表3所示:引脚说明EN使能端REQ在上升沿执行该指令,恳求将数据发送或读取到Modbus从站MB_ADDRModbUSRTU从站地址。默认地址范围:0至247:扩展地址范围:0至65535。值0被保留用于将消息广播到全部M(ibus从站。MODE模式选择:指定恳求类型DATA.ADDR从站中的起始地址:指定Modbus从站中将供访问的数据的起始地址。DTA.1.EN数据长度:指定要在该恳求中访问的位数或字数。DATA_PTR数据指针:指向要写入或读取的数据的M或DB地址(DB访问类型必需是标准与S7-300/400兼容)。DONE完成位:上一恳求已完成且没有出错后,DONE位将保持为TRUE一个扫描周期时间。BUSYO-无正在进行的MB.MASTER操作:】-MB_MASTER操作正在进行EEROR错误位:上一恳求因错误而终止后,ERROR位将保持为TRUE一个扫描周期时间。STATUS参数中的错误代码值仅在ERROR=TRUE的一个扫描周期内有效。STATUS错误代码表3MB_MASTER指令参数意义关于MoDE,DATA_ADDR,DATA_1.EN可在下表4中查看:MB_MASTERModbus功能Modbus地址参数地址类型Modbus数据长度参数Modbus功能模式0读取OOOOl到09999输出位1到2000Ol100OI到19999输入位I到20000230001到39999输入寄存器1到125044(XX)I到4999940(XX)l到465535(扩展)保持寄存器1到12503模式1O(XX)I至J09999输出位】(单个位)05写入40001至U49999400001到465535(扩展)保持寄存器1(单个字)06O(XX)I到09999输出位2到19681540001到49999400001到465535(扩展)保持寄存器2到12316模式2有些Modhus从站不支持运用Modbus功能05H或06H写入单个位或字。在这样的状况下,可通过模式2强制运用Modbus功能I5H或16H写入单个位或字写入00001到09999输出位2到19681540001到49999400001到465535(扩展)保持寄存器1到12316模式Il读出从站的通信状态字和事务计数器:状态字指示指令的执行状态(0:未在执行:OxFFFF:正在执行)。每次胜利传送一条消息时,事务计数器值将递增。运用该功能时,忽视“MB_MASTER”指令的DATA_ADDR和DATA_1.EN参数。模式80通过读取错误代码(OXoooO)检查从站状态;每个恳求1个字模式81通过诊断代码OxOOOA复位从站的事务计数器:每个恳求1个字表4MB_MASTERModbus功能表6 .Modbus从站软件设置会留意:MOdbUSRTU从站采纳ModSim软件测试,该软件是第三方软件,可以从Intemet网络下载。在打开的MOdSim软件中建立连接,并设置RTU模式的参数:波特率Baud=9600,数据位Dala=8,停止位StoP=I,校验PariIy=NoNE,如下图IO所示:3o<1Sib32匚厄冈blFort1(IICOftaeelFortIFort3Port1PortJPorQ6FrtlFort$Pr1£tdbus11crSvr图10建立ModSim连接选择“File”-“New”打开ModSim通信界面,设置ModbUSRTU从站的地址DCViCCld=2,起先地址Address=(XX)1.数据长度1.ength=5.Mocibus数据类型功能码03。分别双击各Modbus地址后的数据区,山现“WriicRegister”对话框,在此写入数据值,如下图1】所示:会留意:DeViCekI设置必需与“MBMASTER”指令中输入引脚“MBADDR”设置的地址一样。图Il设置ModSim7 .ModbusRTU测试结果在STEP7ProfessionalVllUPD4软件中打开该项目CPU1215CDC/DC/DC的“监控表”,触发“MB_MASER”指令的输入位M10.0,ModbusRTU主站将ModSim从站地址4(XX)I中的数值I1.40002中的数值12,40003中的数值13,40004中的数值14,40005中的数值15,分别读取到了地址DB3.DBW0,DB3.DBW2,DB3.DBW4,DB3.DBW6,DB3.DBW8中,如下图12所示:Modbu*RIUP1.C_2CPU1215CDC7DC7DC曲性与毙制表*Jfil1名称FagZ-DagbIod="DATA_FTr。"Data_bloc»_2-DATA-FTFI)-QataJMoC_2-DATA_PTPI2"Data_blo<»_2-DATA_PTP(3)-Oeta_blocl_2-DATA-FTP(4地址%KI100DB5DBWO%DB3DBW2%DB3DBW4%DB3DBW6%DB3DBW8显示格式布尔Si无符号十进制无符号十进制无符号十进IM无符号十进制无符号十进IM校预值1TrUEU_I图12ModbusRTU测试结果S7-1200ModbusRTU通信模式的多地址或多站点轮询多个CM1241RS485通讯模块之间可以运用PROFIBUS电缆相互连接。可以将1个主站和最多31个MODBUS从站运用PROFIBUS电缆连接组网。S7-I2()()ModbusRTU轮询须要通过上一条“MBMASTER“指令输出位uDonew=I来触发下一条"MB_MASTER“M令。详细说明及编程思路请参考以下链接:如何运用STEP7(TIAPorial)VlI为SIMT1CS7-12(X)建立ModbusRTU通讯?MB_COMM_1.OAD和MB_MASTER指令STATUS错误代码STATUS(W#16#)说明OOoo端口无错误8180端口ID值无效8181波特率值无效8182奇偶校验值无效8183流限制值无效8184响应超时值无效8185MB_DB参数不是MB_MASTER或MB.S1.AVE的背景数据块表15MB_COMM_1.OAD指令STATUS错误代码STATUS(W#16#)说明(MXM)无错误I80C8从站超时。枪杳波特率,奇偶校验和从站的接线8OD1接收方发出了暂停主动传输的流限制恳求并在指定的等待时间内未重新激活该传输。假如接收方在等待时间内未检测到CTS.则在硬件流限制期间也会生成该错误。80D2由于没有从DCE接收到DSR信号,传送恳求终Jfc8OEO接收缓冲区已满,消息被终止8OE1奇偶校验错误,消息被终止8OE2组帧错误,消息被终止8OE3超时错误,消息被终止80E4指定长度超出总缓冲区大小,消息被终止8180无效端口ID值8186Modbus站地址无效8188对于广播调用,参数MODE的值无效。8189数据地址值无效8I8A数据长度值无效818B指向本地数据源/目标的指针无效818CDATA_PTR的指针无效:运用指向位存储区或访问类型为“标准-与S7-300/400兼容”的数据块的指针。8200端口正忙于处理传送恳求表6MB_MASTER指令STATUS错误代码(指令的通信和组态错误消息)STATUS(W#16#)从站的响应代码说明8380-CRC错误838101不支持此功能码838203数据长度错误838302数据地址错误或地址超出DATA_PTR的有效范围8384>03数据值错误838503不支持此数据诊断代码8386-响应中的功能代码与传送中的功能代码不匹配8387-响应的从站错误8388-从站对写恳求的响应不正确表7MB_MASTER指令STATUS错误代码(Modbus协议的错误消息)常问问题:西如何检查S7-1200通信模块CM1241是否已被胜利设置为ModbusRTU通信模式?可在程序或监控表中查看“MB_C0MM_1.0AD”指令的输出位“DONE”,“ERROR”以及“STATUS”状态来推断S7-1200通信模块CM1241是否已被胜利设置为ModbusRTU通信模式。假如该模块被胜利设置为ModbUSRTU通信模式:“MB_CoMM_1.OAD”指令输出位“DONE"=,“ERROR、'=。,输出状态字"STATUS”=。:假如该模块未被胜利设置为ModbusRTU通信模式:“MB_C0MM_1.0AD”指令输出位''DONE"=0,"ERROR"=,输出状态字"STATUS”输出错误代码。详细错误缘由可告看"MB_C0MM_1.0AD指令STATUS错误代码”表。所执行"MB_MASTER”指令,总是显示输出位“Busy”=l,为什么?因为端口正忙于处理传送恳求。出现该错误时请检查“MB_MASTER”指令输入位”REQ“是否为上升沿触发,或是否有其它的多个“MBMASTER”指令在执行。良通过执行MASTER”指令无法写入或读取ModbusRT1.丛站地址的数据,但程序中监视,MB_MASTEir指令错误位"Error”=。,错误代码"STATUS”=16#0,为什么?“MB一MASTER”指令上一恳求因错误而终止后,ERROR位将保持为TRUE一个扫描周期时间,并且STATUS参数中的错误代码值仅在ERROR=TRUE的一个扫描周期内有效,因此无法通过程序或监控表查看到。可采纳如下所示的编程方式将ERROR和STATUS参数读出。)S7-1200作为MOdbUSRTU主站,如何对VOdbUSRTU从站进行0-65535犷展寻址?通常,"MB_MASTER”指令的背原数据块“MB_MASTER_DB”中的“EXTENDEDADDRESSING”默认为0,可以对ModbusRTU从站地址0-247进行访问。将“MBMASTER”指令的背景数据块“MBMASTERDlr中的“EXTENDED_ADDRESSING”设置为1,才能对ModbusRTU从站进行()-65535扩展寻址。可根据如下步骤设置iEXTENDED-ADDRESSING,:首先找到“系统块"一、程序资源”,双击"MB_MASTER_DB”,在“MBMASTER”指令的背景数据块“MBMASTERDB”中查看*EXTENDED-ADDRESSING,.P1.jIlCPU1215CDaDaDCJ程序块系统块I设备QO适七R豆白千I.IB_I,IASTER_DBJS71200Modbu;PW9名称数据类型启动值添加新设备19<QPfjfequeiicyPed设备和碑格20B1.OaED_PTOC_miEO5Fedl.RJ1(CR1215CDQgDcJ21QCUPPEU1.mlj/1.UEUOInt0DY设备箱克QSAVEDeTlklEeVA1.UEUOlnt0%在线和论W23MVED-S-QDPWord0A程序快24SAVEDeMODEWOrd0,海加鼾块25Q$7EC1.KDX(WOrd0(081126QSAVEDeDATAe1.EHUlnt0Startup(0B100)一/QMBeSTATEUlnt0Dau.blo<1.IDB5J28QC0MM.5EI11.C0UI11Ulnt0系统快29<3BrTBeCOUIITUSInt0程序贤谢309-n.oBoolFA1.SEOhU1.1.ORDK<2"ACTEEBoolFA1.SE,KI8_C0>.H.I_1.0AD_De1bBPOADC*STF1.AGBRMA1.SE11MBiSTEF(FBIOSI)界IQaET三”DE0.2DPE$加GBool,MBJdASTEJDB(DB2)34<2"QAVED.ST-PT.AX>DPUlnt.*工甘泉35TxBufeFunctioneOffietUDlnt0知外部遗文件369TxBofeAddrejseOffietUOlnt0.Ptc麦37Q-TxBUfeQuantityeOffjetUOInt0在“监控表”内输入“MBMASTERDB王XTENDEDADDRESSlNG”,将该位置UModbusRIUPlC_2(CPU1215CDQOODCj»能控与餐制去*般样表叵良久/BIg再Ui名称地址显示格式监视值作及值E'TElIDED.ADDPES5IHGVj布尔型Y回TFuETPUE1