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