Modbus协议在S7-200 PLC与PC机通信中的应用.doc

上传人:数据九部 文档编号:11073984 上传时间:2021-06-26 格式:DOC 页数:14 大小:231.50KB
返回 下载 相关 举报
Modbus协议在S7-200 PLC与PC机通信中的应用.doc_第1页
第1页 / 共14页
Modbus协议在S7-200 PLC与PC机通信中的应用.doc_第2页
第2页 / 共14页
Modbus协议在S7-200 PLC与PC机通信中的应用.doc_第3页
第3页 / 共14页
Modbus协议在S7-200 PLC与PC机通信中的应用.doc_第4页
第4页 / 共14页
Modbus协议在S7-200 PLC与PC机通信中的应用.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《Modbus协议在S7-200 PLC与PC机通信中的应用.doc》由会员分享,可在线阅读,更多相关《Modbus协议在S7-200 PLC与PC机通信中的应用.doc(14页珍藏版)》请在三一文库上搜索。

1、Modbus协议在S7-200 PLC与PC机通信中的应用定义使用Modbus通信协议是Modicon公司提出的一种报文传输协议,它广泛应用于工业控制领域,并已经成为一种通用的行业标准。不同厂商提供的控制设置可通过Modbus协议连接成通信网络,从而实现集中控制。根据传输网络类型的区别,Modbus通信协议又分为串行链路上的Modbus和基于TCP/IP协议的Modbus。Modbus串行链路协议只有一个主站,可以有1247个从站。Modbus通信只能从主站发起,从站在未收到主站的请求时,不能发送数据或互相通信。Modbus串行链路协议的通信接口可采用RS-485接口,也可使用RS-232C接

2、口。其中RS-485接口可用于远距离通信,RS-232C接口只能用于短距离通信。Modbus报文传输格式:Modbus寻址Modbus地址通常是包含数据类型和偏移量的5个或6个字符值。第一个或前两个字符决定数据类型,最后的四个字符时符合数据类型的一个适当的值。Modbus主设备指令能将地址映射至正确的功能,以便发送到从站。1 Modbus主站寻址。Modbus主设备指令支持下列Modbus地址:(1)00001至09999是离散输出(线圈)。(2)10001至19999是离散输入(触点)。(3)30001至39999是输入寄存器(通常是模拟量输入)。(4)40001至49999是保持寄存器。所

3、有Modbus地址均以1为单位,表示第一个数据值从地址1开始。有效地址范围将取决于从站。不同的从站将支持不同的数据类型和地址范围。2 Modbus从站寻址Modbus从站指令支持以下地址:(1)000001至000128是实际输出,对应于Q0.0Q15.7。(2)010001至010128是实际输入,对应于I0.0I15.7。(3)030001至030032是模拟输入寄存器,对应于AIW0至AIW2。(4)040001至04xxxx是保持寄存器,对应于V区。Modbus从站协议允许你对Modbus主站可访问的输入、输出、模拟输入和保持寄存器(V去)的数量进行限定。MBUS_INIT指令的参数M

4、axIQ指定Modbus主站允许访问的实际输入或输出(I或Q)的最大数量。MBUS_INIT指令的MaxAI参数指定Modbus主站允许访问的输入寄存器(AIW)的最大数量。MBUS_INIT指令的MaxHold参数指定Modbus主站允许访问的保持寄存器(V存储区字)的最大数量。Modbus地址与S7-200地址对应关系如下表所示。000001Q0.0000002Q0.1000003Q0.2000127Q15.6000128Q15.7010001I0.0 010002I0.1 010003I0.2010127I15.6010128I15.7030001AIW0030002AIW2030003

5、AIW4030032AIW62040001HoldStart040002HoldStart+2040003HoldStart+404xxxxHoldStart+2x(xxxx-1)Modbus寻址:ASCII模式和RTU模式Modbus通信协议有ASCII和RTU(远程传输单元)两种报文传输模式。Modbus网络中所有的站必须采用相同的传输模式和串口参数。ASCII模式采用LRC(纵向冗余校验)方式进行校验,其报文格式如下表所示:地址功能码数量字节数数据1数据nLRC高字节LRC低字节回车换行ASCII模式中,报文帧中的每个8位字节都转换为两个ASCII码发送。报文中的每个ASCII码都由16

6、进制字符组成,传输的每个字符都包括1个起始位、7个数据位、1个奇偶校验位、1个停止位;如果没有校验位,则有两个停止位。LRC计算时不包括开始的冒号符、LRC本身和回车换行符。RTU模式的报文格式如下表所示:地址功能码数据1数据nCRC高字节CRC低字节地址:Modbus地址,1个字节。功能码:Modbus功能代码,1个字符。Modbus协议支持的功能码16条(116),其中西门子Modbus RTU协议库支持最常用的8条。信息数据:N个字节,格式与功能码有关。CRC:循环冗余校验,两个字节。西门子Modbus RTU协议库支持最常用的8条功能码如下表所示:功能码描述1读取单个/多个线圈的实际输

7、出状态。功能1返回任意数量输出点的接通/断开状态(Q)。2读取单个/多个线圈的实际输入状态。动能2返回任意数量的输入点的接通/断开(I)。3多个保持寄存器,功能3返回V存储器的内容。保持寄存器在Modbus下是字类型,在一个请求中最多可读120个字。4读单个/多个输入寄存器,返回模拟输入值。5写单个线圈(实际输出)。功能5将实际输出点设置为指定值。改输出点不是被强制,用户程序可以重写由Modbus的请求而写入的值。6写单个保持寄存器。功能6写一个单个保持寄存器的值到S7-200的V存储区。15写多个线圈(实际输出)。动能15写多个实际输出值到S7-200的Q映像区。起始输出点必须是一个字节的开

8、始(如,Q0.0或Q2.0),并且要写的输出的数量是8的倍数。这是Modbus从站协议指令的限定。这些点不是被强制,用户程序可以重写由Modbus的请求而写入的值。16写多个保持寄存器。功能16写多个保持寄存器到S7-200的V区。在一个请求中最多可以写120字。Modbus报文传输格式RTU模式下,报文中的每8位字节被转化为两个16进制字符,然后以字节为单位进行传输,并采用CRC(循环冗余校验)方式进行校验。RTU模式的有点在于同波特率下有着比ASCII模式更高的传输效率。目前支持Modbus通信的DCS系统和过程仪表大都采用基于串行接口的Modbus RTU模式,西门子提供了针对西门子PL

9、C Modbus RTU通信的协议库。如果要在西门子PLC上实现Modbus ASCII模式通信,用户可根据相关协议规定利用自由口模式自主编程实现。西门子专门为Modbus RTU通信开发了指令库,极大地简化了Modbus RTU通信的开发,以便于快速实现相关应用。通过Modbus RTU从站指令库,是的S7-200可作为Modbus RTU中的从站设备集成到Modbus网络中,以实现与Modbus主站设备的通信。而在最近推出的STEP7-Micro/Win SP5升级包中,西门子又增加了Modbus RTU Master指令库,使得S7-200 CPU可作为Modbus主站,实现与Modbu

10、s RTU从站的通信任务。要使用Modbus指令库必须注意以下四点:(1)使用Modbus指令库前,需要将其安装到Step7-Micro/Win中,Step7-Micro/Win必须为V3.2或以上版本。(2)S7-200 CPU必须是固化程序修订版2.00或最好支持Modbus主设备协议库(CPU MLFB 21x-2xx23-0XB0)。(3)由于目前已经推出了针对端口0和端口1的Modbus RTU主站指令库Modbus Master Port0和Modbus Master Port1、以及针对端口0的Modbus RTU从站指令库,故可利用指令库实现端口0的Modbus RTU主/从站

11、通信。(4)一旦CPU端口被利用于Modbus RTU主/从站协议通信时,该端口就无法用于任何其它用途,包括与Step7-Micro/Win通讯。Modbus主站协议指令:西门子Modbus主站协议库包括两条指令:MBUS_CTRL指令和MBUS_MSG指令。MBUS_CTRL指令用于初始化主站通信,MBUS_MSG指令(或用于端口1的MBUS_MSG_P1)用于启动对Modbus从站的请求并处理应答。MBUS_CTRL指令用于S7-200端口0的MBUS_CTRL指令(或用于端口1的MBUS_CTRL_P1指令)可初始化、监视或禁用Modbus通讯。在使用MBUS_MSG指令之前,必须正确执

12、行MBUS_CTRL指令。指令完成后立即设定“完成”位,才能继续执行下一条指令。MBUS_CTRL指令在每次扫描且EN输入打开时执行。MBUS_CTRL指令必须在每次扫描时(包括首次扫描)被调用,以允许监视随MBUS_MSG指令启动的任何突出消息的进程。除非每次调用MBUS_CTRL,否则Modbus主设备协议将不能正确运行。西门子EN:指令使能位。Mode:“模式”参数。“模式”输入数值选择通讯协议输入值1将CPU端口分配给Modbus协议并启用改协议。输入值0将CPU端口分配给PPI系统协议,并禁用Modbus协议。Baud:“波特率”参数。MBUS_CTRL指令支持的波特率为1200,2

13、400,4800,9600,19200,38400,57600或115200bit/s。Parity:“奇偶校验”参数。“奇偶校验”参数被设为与Modbus从站奇偶校验相匹配。所有设置使用一个起始位和一个停止位。可接受的数值为:0 无奇偶校验1 奇校验2 偶校验Timeout:“超时”参数。“超时”参数设为等待来自从站应答的毫秒时间数。“超时”数值可以设置的范围为1毫秒到32767毫秒。典型值是1000毫秒(1秒)。“超时”参数应该设置的足够大,以便从站有时间对所选的波特率作出应答。Done:MBUS_CTRL指令成功完成时,“完成”输出为1,否则为0。 Error:“错误”输出代码。“错误”

14、输出代码由反应执行该指令的结果的特定数字构成。“错误”输出代码的含义如下:0 无错误1 奇偶校验选择无效2 波特率选择无效3 超时选择无效4 模式选择无效上述参数支持的操作数和数据类型如下表所示。输入/输出操作数数据类型ModeI,Q,M,S,SM,T,C,V,L布尔BaudVD,ID,QD,MD,SMD,LD,AC,Constant,*VD,*AC,*LD双字ParityVB,IB,QB,MB,SMB,LB,AC,Constant,*VD,*AC,*LD字节TimeoutVW,IW,QW,MW,SMW,LW,AC,Constant,*VD,*AC,*LD字DoneI,Q,M,S,SM,T,C

15、,V,L布尔ErrorVB,IB,QB,MB,SMB,LB,AC,*VD,*AC,*LD字节MBUS_MSG指令MBUS_MSG指令(或用于端口1的MBUS_MSG_P1)用于启动对Modbus从站的请求并处理应答。当EN输入和“首次”输入都为1时,MBUS_MSG指令启动对Modbus从站的请求。发送请求、等待应答、并处理应答通常需要多次扫描。EN输入必须打开以启用请求的发送,并应该保持打开直到“完成”位被置位。必须注意的是,一次只能激活一条MBUS_MSG指令。如果启用了多条MBUS_MSG指令,则将处理所执行的第一条MBUS_MSG指令,之后的所有MBUS_MSG指令将中止并产生错误代码

16、6。EN:指令使能位。First:“首次”参数。“首次”参数应该在有新请求要发才打开以进行一次扫描。“首次”输入应当通过一个边沿检测元素(例如上升沿)打开,这将导致请求被传送一次。Slave:“从站”参数。“从站”参数是Modbus从站的地址,允许的范围是0到247。地址0是广播地址,只能用于写请求。不存在对地址0的广播请求的应答。并非所有的从站会支持广播地址,S7-200 Modbus从站协议库不支持广播地址。RW:“读写”参数。“读写”参数指定是否要读取或写入该消息。“读取”参数允许使用下列两个值:0读,1写。Addr:“地址”参数。“地址”参数是起始的Modbus地址。允许使用下列取值范

17、围:00001至09999是离散输出(线圈)10001至19999是离散输入(触点)30001至39999是输入寄存器40001至49999是保持寄存器其中离散输出(线圈)和保持寄存器支持读取和写入请求,而离散输入(触点)和输入寄存器支持读取请求。“地址”的具体值应与Modbus从站支持的地址一致。Count:“计数”参数。“计数”参数指定在该请求中读或写入的数据元素的数目。“计数”数值是位数(对于位数据类型)和字数(对于字数据类型)。根据Modbus协议,“计数”参数与Modbus地址存在以下对应关系:地址计数0xxxx“计数”是要读取或写入的位数。1xxxx“计数”是要读取的位数。3xxx

18、x“计数”是要读取的输入寄存器的字数。4xxxx“计数”是要读取或写入的保持寄存器的字数。MBUS_MSG指令将读取或写入最大120个字或1920个位(240字节的数据)。“计数”的实际值还取决于Modbus从站中的限制。DataPtr:“DataPtr”参数。“DataPtr”参数是指向S7-200CPU的V存储器中与读取或写入请求相关的数据的间接地址指针。对于读取请求,DataPtr应指向用于存储从Modbus从站读取的数据的第一个CPU存储器位置。对于写入请求,DataPtr应指向要发送到Modbus从站的数据的第一个CPU存储器位置。Done:完成输出。完成输出在发送请求和接收应答时关

19、闭。“完成”输出在应答完成或MBUS_MSG指令因错误而中止时打开。Error:“错误”输出仅当“完成”输出打开时有效。低位编号的错误代码(1到8)是由MBUS_MSG指令检测到的错误。这些错误代码通常指示与MBUS_MSG指令的输入参数有关的问题,或接收来自从站的应答时出现的问题。奇偶校验和CRC错误指示存在应答但是数据未正确接收。这通常是由电气故障(例如连接有问题或者电噪声)引起的。高位编号的错误代码(从101开始)是由Modbus从站返回的错误。这些错误指示从站不支持所请求的功能,或者所请求的地址(或数据类型或地址范围)不被Modbus从站支持。MBUS_MSG指令错误代码含义如下所示:

20、MBUS_MSG错误代码说明0无错误1应答时奇偶校验错误:权当使用偶校验或奇校验时才会发生。传输被干扰,可能会收到不正确的数据。该错误通常是由电气故障(例如错误接线或者影响通讯的电噪声)引起的。2保留位,暂未启用。3接收超时:在“超时”时间内,没有来自从站的应答,可能有以下一些原因:与从站的电气连接有问题、主设备和从站设置为不同的波特率/奇偶校验设置,以及错误的从站地址。4请求参数出错:一个或多个输入参数(从站、读写、地址或计数)被设置为非法值。检查文档中输入参数的允许值。5Modbus主设备未启用:在调用MBUS_MSG前,每次扫描时都调用MBUS_CTRL。6Modbus忙于处理另一个请求

21、: 只能激活一条MBUS_MSG指令。7应答时出错:收到的应答与请求不相关。这表示从站中出现了某些错误,或者错误的从站应答了请求。8应答时CRC错误:传输被干扰,可能会收到不正确的数据。该错误通常是由电气故障(例如错误链接或者影响通讯的电噪声)引起的。101从站不支持在该地址处所请求的功能,请参阅表1-4.102从站不支持数据地址:“地址”加上“计数”所要求的地址范围超出了从站所允许的地址范围。103从站不支持数据类型:该“地址”类型不被从站支持。104从站故障。105从站已接受消息但应答延迟:这是MBUS_MSG的错误,用户程序应在稍后重新发送请求。106从站忙,因此拒绝消息:可以再次尝试相

22、同的请求,以获得应答。107从站因未知原因而拒绝消息。108从站存储器奇偶校验错误:从站中有错胡。上述参数支持的操作数和数据类型如下表所示:输入/输出数据类型操作数FirstI,Q,M,S,SM,T,C,V,L(以上升沿检测元素为条件的功率流)布尔SlaveVB,IB,QB,MB,SMB,LB,AC,Constant,*VD,*AC,*LD字节RWVB,IB,QB,MB,SMB,LB,AC,Constant,*VD,*AC,*LD字节AddrVD,ID,QD,MD,SMD,LD,AC,Constant,*VD,*AC,*LD双字CountVW,IW,QW,MW,SMW,LW,AC,Consta

23、nt,*VD,*AC,*LD整型DataPtr&VB双字DoneI,Q,M,S,SM,T,C,V,L布尔ErrorVB,IB,QB,MB,SMB,LB,AC,*VD,*AC,*LD字节MBUS_INIT指令:西门子Modbus从站协议库包括两条指令:MBUS_INIT指令和MBUS_SLAVE指令。MBUS_INIT指令用于启用和初始化或禁止Modbus通讯。MBUS_SLAVE指令用于为Modbus主设备发出的请求服务。MBUS_INIT指令用于启用和初始化或禁止Modbus从站通讯。在使用MBUS_SLAVE指令之前,必须正确执行MBUS_INIT指令。指令完成后立即设定“完成”位,才能继

24、续执行下一条指令。EN:指令使能位。Mode:模式选择,启动/停止Modbus从站通信。Mode参数允许使用一下两个数值:1启动,0停止。Address:从站地址,Modbus从站地址,取值1247.Baud:波特率,可选1200,2400,4800,9600,19200,38400,57600,115200。Parity:奇偶校验,0=无校验;1=奇校验;2=偶校验。Delay:延时,附加字符间延时,缺省值为0。MaxIQ:最大I/Q位,参与通信的最大I/O点数,S7-200的I/O映像区128/128,缺省值为128。MaxAI:最大AI字数,参与通信的最大AI通道数,可为16或32。Ma

25、xHold:设定供Modbus地址4xxxx使用的V存储器中的字保持寄存器数目。HoldStart:保持寄存器区起始地址,以&VBx指定(间接寻址方式)。Done:初始化完成标志,成功初始化后置1。Error:初始化错误代码。MBUS_INIT指令错误代码的含义如下表所示:错误代码说明0无错误1内存范围错误2非法波特率或奇偶校验3非法从属地址4非法Modbus参数值5保持寄存器与Modbus从属符号重叠6收到奇偶校验错误7收到CRC错误8非法功能请求/功能不受支持9请求中的非法内存地址10从属功能未启用上述参数支持的操作数和数据类型如下表所示:输入/输出操作数数据类型模式、地址、奇偶校验VB,

26、IB,QB,MB,SMB,LB,AC,Constant,*VD,*AC,*LD字节波特、HoldStartVD,ID,QD,MD,SMD,LD,AC,Constant,*VD,*AC,*LD双字延时、MaxIQ,MaxAI,MaxHoldVW,IW,QW,MW,SMW,LW,AC,Constant,*VD,*AC,*LD字完成I,Q,M,S,SM,T,C,V,L布尔错误VB,IB,QB,MB,SMB,LB,AC,*VD,*AC,*LD字节MBUS_SLAVE指令被用于为Modbus主设备发出的请求服务,并且必须在每次扫描时执行,以便允许该指令检查和回答Modbus请求。MBUS_SLAVE指令

27、无输入参数,在每次扫描且EN输入开启时执行。EN:指令使能位。Done:Modbus执行通信中时置1,无Modbus通信活动时为0。Error:错误代码。MBUS_SLAVE指令错误代码的含义如下表所示:错误代码说明0无错误1内存范围错误2非法波特率或奇偶校验3非法从属地址4非法Modbus参数值5保持寄存器与Modbus从属符号重叠6收到奇偶校验错误7收到CRC错误8非法功能请求/功能不受支持9请求中的非法内存地址10从属功能未启用附例。1、 硬件设置例程中的Modbus通讯是在两个S7-200CPU的0号通讯口间进行的(最好每个CPU都有两个通讯口)。在主站侧也可以选择相应库文件”MBUS

28、_CTRL_P1”和”MBUS_MSG_P1”通过1号通讯口通信。通讯口1与Micro/WIN建立PG或PC连接,两个CPU的通讯口0通过PPI电缆进行连接(电缆的针脚 连接2,3,7,8)2、 参数匹配对于Modbus通讯,主站侧需要程序库”MBUS_CTRL”和”MBUS_MSG”,从站侧需要程序库”MBUS_INIT”和”MBUS_SLAVE”。在Micro/WIN中你需要为主站和从站新建一个项目,程序与参数设置。必须要保证主站与从站的“Baud”和“Parity”的参数设置要一致,并且程序块”MBUS_MSG”中的”Slave”地址要与程序块”MBUS_INIT”中的”Addr”所设置

29、的一致。Micro/WIN“系统块”中设置的0通讯口的波特率与Modbus协议无关(”Mode”=”1”)。3、库的存储地址项目完成后必须要在Micro/WIN中定义库的存储地址,当定义完存储区后,要保证在任何情况下不能再被其他程序所使用(主站侧:“DataPtr”+“Count”从站侧:“HoldStart”+“MaxHold”)。4、保持寄存器的传输将程序下载到相应的CPU后,可以在状态表中给出主站侧的V存储区赋值,然后监视从站的变化。当主站的I0.0使能后,VW2中的内容就被发送到从站并写入从站的VW2。保持寄存器值的传输见图。指针“DataPtr”代表了V区被读的起始地址。参数“Cou

30、nt”表明了地址“Addr”=“4xxxx”(保持寄存器)以字为单位被读的个数。主站中被读取的V存储区被写入地址为“Addr”=“40002”(“RW”=“1”)的保持寄存器中。保持寄存器是以字为单位工作的,它与从站的V区地址对应。指针“HoldStart”明确了与保持寄存器起始地址40001相对应的V存储区的初始地址。这样可以计算从站的V区目标指针:2*(Addr-40001)+HoldStart=2*(40002-40001)+&VB0=&VB2另外,要保证“MaxHold”定义的数据区能够包含主站侧所要写入的数据区:MaxHold=Addr-40001+Count=40002-40001+1=2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1