您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 实验报告7-Modbus通信
SLCIST&OPSODSales100B12TaskReport学如逆水行舟不进则退1TaskReport1.Purpose实验目的1、学习Modbus通信协议的原理和使用方法2.Equipment实验设备Hardwareandfirmware硬件及固件设备名称数量订货号224XPCPUDC/DC/DCSIMATICS7-200,CPU26ES7214-1AD23-0XB0SIMATICS7-200,PC/PPICABLE26ES7901-3CB30-0XA0SITOPSMARTPOWERDC24V-5A16EP1333-2AA01-Q627FROFIBUSDP16XV1830-0EH10Softwareandversion软件及版本名称版本STEP7Micro/WINV4.0SP93.Processandemphases实验流程与重点难点3.1实验内容编程实现主站与从站之间的数据交换3.2实验过程1)电气连接如图1所示,将电源提供的24V电压分别于PLC的24V电源接入端口相连,并且将输入方向的M与1M端口短接。PPICABLE端口与PLC端口1(port1)相连,通过PPI电缆实现在线监控。PROFIBUS通讯电缆分别与两个PLC的port0相连(Modbus通讯使用的是port0)。用导线将输入端口IB0和IB1全部引出。InputOutputruntermstopport0port1ML+ML+1M1M1L+24V电源接入端口PLC可提供的24V电压数字输入端接口数字输出端接口通讯端口拨码按键,控制PLC工作在三种状态IB0QB0QB1IB1图1S7-200组成示意图2)端口定义主站程序中,I0.0用于触发读写命令。从站程序中,将IB0和IB1输入状态传送给主站,在主站程序中通过状态表读出。从站接收主站发送的数值并且赋值给QB0和QB1,观察指示灯的变化。3)程序设计数据寄存器的通讯实验(读写PLCV区数据的循环通讯)SLCIST&OPSODSales100B12TaskReport学如逆水行舟不进则退2数据寄存器的Modbus地址为40001~49999,要实现主站与从站之间的循环通讯,可以将V区的数据作为发送和接收的对象。主站给从站V区的某一范围内写入字节,由从站对接收的字节做处理(加、减变化)后再次由主站读取,实现循环通讯(在状态表中观察选中的V区数值是否能够递增或递减变化)。主站程序设计:ModbusRTU主站初始化与控制程序如图2所示,其中EN为使能信号,Mode为‘1’时,相当于选中自由口通讯模式(与自由口通讯实验中给SMB30赋值的原理一样)。波特率选择9600bps,校验方式选择无校验,Timeout为主站等待从站响应时间,一般经三次握手后从站还没有响应,则通讯超时。初始化完成后Done信号跳变为‘1’,一般可以用M0.0启动MBUS_MSG的读写操作。图2ModbusRTU主站初始化与控制程序图Modbus读写程序如图3、图4所示,因为Modbus通信的读和写不能同时进行,因此每一个读写功能(MBUS_MSG)都用上一个MBUS_MSG指令的Done完成位来激活,以保证所有读写指令循环进行。RW为1时,主站将VB1000为首地址的1个字(count代表字节数)发送到从站40001地址对应的V区中,写指令完成后,M2.0为‘1’,将M0.1和M2.1复位,断开写指令,同时触发读指令运行。RW为0时,主站将从站40001地址对应的V区数值写入VB1000为首地址的存储器中,读指令完成后,M2.1为‘1’,将M2.0复位,断开读指令,同时触发写指令运行。以上过程可以充分确保通讯在同一时刻只能有一个读写功能。图3主站写程序SLCIST&OPSODSales100B12TaskReport学如逆水行舟不进则退3图4主站读程序从站程序设计:从站主要负责对写入的V区数据执行INC_B指令。从站初始化指令如图5所示,MBUS_INIT指令被用于启用和初始化或禁止Modbus通讯。在使用MBUS_SLAVE指令之前,必须正确执行MBUS_INIT指令(该条指令只需触发接通一次,可用SM0.1)。Mode为‘1’,代表选择自由口通讯模式;Addr代表设置的从站地址,与主站指令MBUS_MSG中的slave要一致;Baud为波特率;Parity为设置的校验位;Delay与主站指令MBUS_CTRL中Timeout不同,Delay代表延迟时间;MaxIQ为参与通信的最大I/O点数,S7-200的I/O映像区为128/128;MaxAI为参与通信的最大AI通道数,可为16或32(有些时候选择的PLC版本过低,MaxAI写入的数据位32时会报错);MaxHold为最大保持寄存器区,即参与通信的V存储区字(VW);HoldStart为保持寄存器区起始地址,以&VBx指定,例如主站中写入的地址为40001,从站Holdstart为VB1000,则V区读写首地址为VB1000;如果主站写入地址为40010,从站Holdstart为VB1000,则V区读写首地址为VB1018。因为主站设置读写的保持寄存器区地址为40010,而从站设定保持寄存器区的起始地址为VB1000,根据T~T+2*(xxxx—1)计算到从站V区对应的地址。其中T为Holdstart的值,xxxx为保持寄存器区的地址偏移量(40001~4xxxx)。图5Modbus从站初始化指令从站完成初始化后,根据MBUS_SLAVE的完成信号,对接收到的字节加1,这样可以通过观察字节的变化判断通讯是否循环运行。4.WhatIhavelearned心得与体会1、本次实验除了数据寄存器区的实验,也对数字量输入输出的实验进行了验证,但之后发现程序写的不对,我在主站中地址仍然写的是V区的地址(40001),只是在从站中将I0、I1口的数据赋值给VB1000、VB1001,实际这种还是通过读取数据寄存器的方法。下周有时间重新做下实验,使用区间00001~09999和10001~19999做次实验。SLCIST&OPSODSales100B12TaskReport学如逆水行舟不进则退42、实验中我犯了个低级错误,在MBUS_MSG的Error指令输出口,我只用了中间寄存器MB0,但在其他位控制时,我仍然用M0.0和M0.1来控制,导致我程序执行不正常,后经检查才发现MB0混用。在以后编写程序中,要防止中间寄存器,VB的重复使用。3、一般在用到置位、复位指令时,可以与上升沿指令|P|一起使用。4、因为Modbus一般与第三方仪表进行通讯,所以40001区使用最多。Modbus只能有一个主站,当一个网络上有多个PLC时,只能有一个PLC为主站。5、多个PLC或PLC与多个仪表在一个网络时,除了硬件连接,站地址不能重复冲突,波特率、奇偶校验位等必须一致。6、自由口通讯没有主站,只有发送方和接收方,而Modbus有主从的说法。7、在做Modbus通信实验时,有个库存储区的概念,如果占用或没有分配库存储区,程序在编译时会报错。一般在编程软件的左侧一栏选中程序块,右键选中库存储区,观察分配的VB地址,则在编程中要避免使用这个区域的值。5.Applicationrange应用范围Modbus通讯应用范围非常广,一般可用于PLC与第三方(屏、仪表等)之间的通讯。6.LadderDiagram程序清单发送方程序接收方程序modbus_master_new.mwpmodbus_slave.mwp
本文标题:实验报告7-Modbus通信
链接地址:https://www.777doc.com/doc-5310268 .html