1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,S7-200,的,modbus rtu,通讯,MODBUS RTU,协议简介,MODBUS RTU,库的使用,两台,PLC,之间的,MODBUS RTU,通讯,西门子,PLC,与台达变频器之间的,MODBUS RTU,通讯,1,MODBUS,协议简介,Modbus,通信协议分为串行链路的和基于,TCP/IP,的;,Modbus,串行链路协议只有一个主站,可以有,1-247,个从站。只能主站发起。,Modbus,串行电气规范:,RS485,(长距离传输),和,RS232,(短距离传输)。,Modbus,传输模
2、式:,传输的时候实际上是按这种格式发送信息,,CRC,叫循环冗余校验,,LRC,叫纵向冗余校验。,ASC,地址,功能代码,数据数量,数据,1,数据,N,LRC,高字节,LRC,低字节,回车,换行,RTU,地址,功能代码,数据数量,数据,1,数据,N,CRC,高字节,CRC,低字节,回车,换行,2,2025/4/14 周一,MODBUS,协议简介,Modbus,主站寻址,00001,到,09999,是离散输出(线圈),假设输出:,QX.Y,;,最高位:,Q=0,;,寻址计算:,X,*,8+Y+1,(低位顺排);,中间补零;,10001,至,19999,是离散输入(触点),:I=1,30001,至
3、39999,是输入寄存器(通常模拟量),假设模拟量:,AIWN,;,最高位:,AIW=3,;,寻址计算,:(,N+2,),/2,(,N,必为偶数);,中间补零;,40001,至,49999,是保持寄存器(,V,(,W,)存储区),:,同,3,注:模拟量和,V,区都只能写一个字,不能写双字。,3,2025/4/14 周一,MODBUS,协议库的使用,MBUS_CTRL,指令用于初始化主站通信,,MBUS_MSG,指令,(,或用于端口,1,的,MBUS_MSG_P1),用于 启动对,Modbus,从站的请求并处理应答。,MBUS_CTRL,指令用于,S7-200,端口,0,的,MBUS_CTRL
4、指令,(,或用于端口,1,的,MBUS_CTRL_P1,指令,),可初始化、监视或禁用,Modbus,通讯。在使用,MBUS_MSG,指令之前,必须正确执行,MBUS_CTRL,指令。指令完成后立即设定“完成”位,才能继续执行下一条指令。,MBUS_CTRL,指令在每次扫描且,EN,输入打开时执行。,MBUS_CTRL,指令必须在每次扫描时,(,包 括首次扫描,),被调用,以允许监视随,MBUS_MSG,指令启动的任何突出消息的进程。除非每次调用,MBUS_CTRL,,否则,Modbus,主设备协议将不能正确运行。,4,2025/4/14 周一,MODBUS,协议库的使用,EN,:指令使能位
5、Mode,:“模式”参数。“模式”输入数值选择通讯协议。输入值,1,将,CPU,端口分配给,Modbus,协议并启用该协议。输入值,0,将,CPU,端口分配给,PPI,系统协议,并禁用,Modbus,协议。,Baud,:“波特率”参数。,MBUS_CTRL,指令支持的波特率为,1200,、,2400,、,4800,、,9600,、,19200,、,38400,、,57600,或,115200bit/s,。,Parity,:“奇偶校验”参数。“奇偶校验”参数被设为与,Modbus,从站奇偶校验相匹配。所有 设置使用一个起始位和一个停止位。可接受的数值为:,0,无奇偶校验、,1,奇校验、,2,
6、偶校验。,Timeout,:“超时”参数。“超时”参数设为等待来自从站应答的毫秒时间数。“超时”数值可以设置的范围为,1,毫秒到,32767,毫秒。典型值是,1000,毫秒,(1,秒,),。“超时”参数应该设置的足 够大,以便从站有时间对所选的波率做出应答。,5,2025/4/14 周一,MODBUS,协议库的使用,Done,:,MBUS_CTRL,指令成功完成时,“完成”输出为,1,,否则为,0,。,Error,:“错误”输出代码。“错误”输出代码由反应执行该指令的结果的特定数字构成。“错 误”输出代码的含义如下:,6,2025/4/14 周一,MODBUS,协议库的使用,MBUS_MSG,
7、指令,(,或用于端口,1,的,MBUS_MSG_P1),用于启动对,Modbus,从站的请求并处理应 答,单条,MSG,指令只能完成对指定从站的读或写请求。,当,EN,输入和“首次”输入都为,1,时,,BUS_MSG,指令启动对,Modbus,从站的请求。发送请 求、等待应答、并处理应答通常需要多次扫描。,EN,输入必须打开以启用请求的发送,并应该保持 打开直到“完成”位被置位。,必须注意的是,一次只能激活一条,MBUS_MSG,指令。如果启用了多条,MBUS_MSG,指令,则将处理所执行的第一条,MBUS_MSG,指令,之后的所有,MBUS_MSG,指令将中止并产生错误代码,6,。,7,20
8、25/4/14 周一,MODBUS,协议库的使用,EN,:指令使能位。,First,:“首次”参数。“首次”参数应该在有新请求要发送时才打开以进行一次扫描。“首 次”输入应当通过一个边沿检测元素,(,例如上升沿,),打开,这将导致请求被传送一次。,Slave,:“从站”参数。“从站”参数是,Modbus,从站的地址。允许的范围是,0,到,247,。地址,0,是广播地址,只能用于写请求。不存在对地址,0,的广播请求的应答。并非所有的从站会支持广播地 址,,S7-200 Modbus,从站协议库不支持广播地址。,RW,:“读写”参数。“读写”参数指定是否要读取或写入该消息。“读写”参数允许使用下
9、列两个值:,0,读,,1,写。,Addr,:“地址”参数。“地址”参数是起始的,Modbus,地址。允许使用下列取值范围:,00001,至,09999,是离散输出,(,线圈,);10001,至,19999,是离散输入,(,触点,);30001,至,39999,是输入寄存器,;40001,至,49999,是保持寄存器,其中离散输出,(,线圈,),和保持寄存器支持读取和写入请求,而离散输入,(,触点,),和输入寄存器仅 支持读取请求。“地址”的具体值应与,Modbus,从站支持的地址一致,8,2025/4/14 周一,MODBUS,协议库的使用,Count,:“计数”参数。“计数”参数指定在该请求
10、中读取或写入的数据元素的数目。“计数”数值是位数,(,对于位数据类型,),和字数,(,对于字数据类型,),。,MBUS_MSG,指令将读取或写入最大,120,个字 或,1920,个位,(240,字节的数据,),。“计数”的实际限 值 还取决于,Modbus,从站中的限制。,9,2025/4/14 周一,MODBUS,协议库的使用,DataPtr,:“,DataPtr”,参数是指向,S7-200 CPU,的,V,存储器中与读取或写入请求相关的数 据的间接地址指针(例:,&VB100,)。对于读取请求,,DataPtr,应指向用于存储从,Modbus,从站读取 的数据的第一个,CPU,存储器位置。
11、对于写入请求,,DataPtr,应指向要发送到,Modbus,从站的数据的 第一个,CPU,存储器位置。,Done,:完成输出。完成输出在发送请求和接收应答时关闭。“完成”输出在应答完成或,MBUS_MSG,指令因错误而中止时打开。,Error,:“错误”输出仅当“完成”输出打开时有效。低位编号的错误代码,(1,到,8),是由,MBUS_MSG,指令检测到的错误。这些错误代码通常指示与,MBUS_MSG,指令的输入参数有关的问题,或接收来自 从站的应答时出现的问题。奇偶校验和,CRC,错误指示存在应答但是数据未正确接收。这通常是由电 气故障,(,例如连接有问题或者电噪声,),引起的。高位编号的
12、错误代码,(,从,101,开始,),是由,Modbus,从站返回的错误。这些错误指示从站不支持所 请求的功能,或者所请求的地址,(,或数据类型或地址范围,),不被,Modbus,从站支持。,10,2025/4/14 周一,MODBUS,协议库的使用,西门子,Modbus,从站协议库是包括两条指令:,MBUS_INIT,指令和,MBUS_SLAVE,指令。,MBUS_INIT,指令用于启用和初始化或禁止,Modbus,通讯。,MBUS_SLAVE,指令用于为,Modbus,主设备发出的请求服务。,MBUS_INIT,指令用于启用和初始化或禁止,Modbus,从站通讯。在使用,MBUS_SLAVE
13、指令之 前,必须正确执行,MBUS_INIT,指令。指令完成后立即设定“完成”位,才能继续执行下一条指令。,11,2025/4/14 周一,MODBUS,协议库的使用,EN,:指令使能位。,Mode,:模式选择,启动,/,停止,Modbus,从站通信。,Mode,参数允许使用以下两个数值:,1,启动,,0,停止。,Address,:从站地址,,MODBUS,从站地址,取值,1247,。,Baud,:波特率,可选,1200,,,2400,,,4800,,,9600,,,19200,,,38400,,,57600,,,115200,。,Parity,:奇偶校验,,0=,无校验;,1=,奇校验;,
14、2=,偶校验。,Delay,:延时,附加字符间延时,缺省值为,0,。,MaxIQ,:最大,I/Q,位,参与通信的最大,I/O,点数,,S7-200,的,I/O,映像区为,128/128,,缺省值 为,128,。,12,2025/4/14 周一,MODBUS,协议库的使用,MaxAI,:最大,AI,字数,参与通信的最大,AI,通道数,可为,16,或,32,。,0,用于,CPU 221,、,16,用 于,CPU 222,、,32,用于,CPU 224,、,224XP,、,226,。,MaxHold,:设定供,Modbus,地址,4xxxx,使用的,V,存储器中的字保持寄存器数目。,HoldStar
15、t,:保持寄存器区起始地址,以,&VBx,指定(间接寻址方式)。,Done,:初始化完成标志,成功初始化后置,1,。,Error,:初始化错误代码。,13,2025/4/14 周一,MODBUS,协议库的使用,MBUS_SLAVE,指令被用于为,Modbus,主设备发出的请求服务,并且必须在每次扫描时执行,以便允许该指令检查和回答,Modbus,请求。,MBUS_SLAVE,指令无输入参数,在每次扫描且,EN,输入开 启时执行。,EN,:指令使能位。,Done,:,Modbus,执行通信中时置,1,,无,MODBUS,通信活动时为,0,。,Error,:错误代码。,14,2025/4/14 周
16、一,MODBUS,协议库的使用,利用指令库编程前首先应为其分配存储区,否则软件编译时会报错。具体方法如下:,执行,Step7-Micro/Win,菜单命令“文件”,“,库存储区”,打开“库存储区分配”对话框。,在“库存储区分配”对话框中输入库存储区(,V,存储区)的起始地址,注意避免该地址和 程序中已经采用或准备采用的其它地址重合。,点击“建议地址”按钮,系统将自动计算存储区的截止地址。然后确定即可。,15,2025/4/14 周一,MODBUS,协议库的使用,设置,PLC,通讯端口:,在同一个通信网络中,主站的读取和写入都是对某个站进行操作,因此需要对每个不同的通信 站点一个站地址(同一通信
17、网络中的各站点站地址不能相同),用于区分对不同站点的操作(具体 的仪表有不同的设置方法)。,打开设置界面:点击系统块通讯端口;,选择通信端口:端口,0,和端口,1,对应实际硬件接口的,Prot0,和,Prot1,,同时与你所使用的,Modubus RTU,通信的库指令有关(,Modbus RTU,主站库包涵两个,分别对应,Prot0,和,Prot1,);,设置通讯参数:地址和波特率应同程序保持一致;,16,2025/4/14 周一,两台,PLC,之间的,MODBUS RTU,通讯,将两台,S7-200 224XP,设为,Modbus,主站和从站,主站的站地址为,2,、从站的站地址为,3,,通讯 波特率为,9600,,校验方式为无校验。主站的,IB0,控制从站的,QB0,;从站的,IB0,控制主站的,QB0,。,将主站从(,DataPtr,),IB0,开始的(,Count,),8,个位写入(,RW=1,),3,号从站(,Slave,)的(,Addr=00001,)从,Q0.0,到,Q0.7,的八个位,将,(Slave=3)3,号从站从(,Addr=10001,),I0.0,到,I0.7,的(,Count=8,)的八个位读入主站从,QB0,开始的八个位。,17,2025/4/14 周一,西门子,PLC,与台达变频器之间的,MODBUS RTU,通讯,18,2025/4/14 周一,
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818