S的MODBUS详细应用示例_第1页
S的MODBUS详细应用示例_第2页
S的MODBUS详细应用示例_第3页
S的MODBUS详细应用示例_第4页
S的MODBUS详细应用示例_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、<PLC200 MODBUS协议配置使用方法> 修订历史记录日期版本说明(修改、补充、删除)作者审核<2009/4/3 >第一版(已完)研发部·孙宝东研发部·王振岳5.13库存储区补充说明(36页)注释:红色字体为注意点;蓝色为修改补充;紫色为问题总结;茶色为暂时删除;绿色为住宿。目 录前言4第一章 使用Modbus协议库6前言61.使用Modbus主设备协议的要求62.使用Modbus从站设备协议的要求73.Modbus主设备协议的初始化和执行时间74.Modbus从站协议的初始化和执行时间85.Modbus主设备寻址86.Modbus 从站寻址8

2、7.Modbus主设备MBUS_MSG执行错误代码108.Modbus从站协议执行错误代码119.Modbus主设备高级用户信息11第二章 使用Modbus主设备指令14前言141.MBUS_CTRL指令(初始化主设备)152.MBUS_MSG指令16第三章 使用Modbus从站指令22前言221.MBUS_INIT指令(初始化从站)232.MBUS_SLAVE指令263.常见问题26第四章 下载与通讯测试281.编译、下载282.通讯31附表 主从站指令配置表37S7200 Modbus 主从协议版本(09年初稿版)制作:研发部前言:Modbus从站协议指令可以配置S7-200,将其用作Mo

3、dbus RTU从站,与Modbus主设备通讯。Modbus主设备协议指令可以配置S7-200,将其用作Modbus RTU主设备,与一个或多个Modbus从站通讯。Modbus指令安装在STEP 7 Micro/WIN指令树的"协议库"文件夹中。有了这些新指令, 您可以将S7-200用作Modbus设备。当您在程序中加入Modbus指令时,会在项目中自动增加一个或多个相关子程序。Modbus主设备协议库有两个版本。一个版本使用CPU的端口0,另一个则使用CPU的端口1。端口1协议库的POU名中带有"_P1"(MBUS_CTRL_P1),表示POU使用C

4、PU上的端口1。在其它方面,这两个Modbus主设备协议库完全一致。Modbus从站协议库仅支持端口0通讯。在 STEP 7 Micro/WIN 中,Modbus RTU 协议和 USS 协议操作库位于操作树的“库”文件夹中。MODBUS 函数库要求 STEP 7 Micro/WIN 为 V3.2 或更高版本。图1: 添加函数库第一章 使用Modbus协议库前言:这些库是附加函数库,并非组态软件 STEP 7 Micro/WIN 的组成部分。您如果需要使用 Modbus RTU 协议,必须先安装“STEP 7 Micro/WIN 32 Toolbox V1.0”(包括库),然后安装运行“STE

5、P 7 Micro/WIN”。就会出现如图1的库。注意:这个函数库包含可以在 STEP 7 Micro/WIN V3.2 中使用的 Modbus RTU 协议库和 USS 协议库。如果您安装了 STEP 7 Micro/WIN V4.0 SP5 或者更高版本,那么操作库中就会包含下列函数:· Modbus RTU Master V1.2 对应端口 0 和端口 1 · Modbus RTU Slave V1.0 对应端口 0 · USS protocol V2.3 对应端口 0 和端口 1下面我对Modbus RTU各指令功能与使用方法分别加以讲解:1. 使用Mod

6、bus主设备协议的要求Modbus主设备协议指令使用下列S7-200资源:·初始化Modbus主设备协议可以为Modbus主设备协议通讯指定专用CPU端口。当CPU端口被用于Modbus主设备协议通讯时,就无法用于任何其它用途,包括与STEP 7-Micro/WIN通讯。MBUS_CTRL指令控制将端口0分配给Modbus协议或PPI,Mode为1时分配给Modbus协议,为0是分配给PPI。将S7-200上的模式开关设为“STOP”,端口零也会被复位为PPI协议模式。MBUS_CTRL_P1指令(来自端口1协议库)控制将端口1分配给Modbus主设备协议或PPI。·Mod

7、bus主设备协议指令影响与CPU通讯端口中自由端口通讯相关的所有SM位置。·Modbus主设备协议指令使用3个子程序和1个中断例程。·Modbus主设备协议指令要求两个Modbus主设备指令和支持例程有1620个字节的程序空间。·Modbus主设备协议指令的变量要求284个字节的V存储器程序块。该程序块的起始地址由用户指定,专门保留用于Modbus变量。· S7-200 CPU必须是固化程序修订版2.00或最好支持Modbus主设备协议库(CPU MLFB 21x-2xx23-0XB0)。·Modbus主设备协议库为某些功能使用用户中断。用户中

8、断不能被用户程序禁用。提示:欲将CPU通讯端口操作更换回PPI以便与STEP 7-Micro/WIN通讯,将MBUS_CTRL指令的模式参数设置为零(0)。您还可以将S7-200上的模式开关设置到STOP模式位置。这些方法中的任一个将设置CPU通讯端口与STEP 7-Micro/WIN通讯。2. 使用Modbus从站协议的要求Modbus从站协议指令使用下列S7-200资源:·初始化Modbus从站协议为Modbus从站协议通讯指定端口0。当端口0被用于Modbus从站协议通讯时,就无法用于任何其它用途,包括与STEP 7-Micro/WIN通讯。MBUS_INIT指令控制将端口0指

9、定给Modbus从站协议或PPI。·Modbus从站协议指令影响与端口0中自由端口通讯相关的所有SM位置。·Modbus从站协议指令使用3个子程序和2个中断例程。·Modbus从站协议指令要求两个Modbus主设备指令和支持例程有1857个字节的程序空间。·Modbus从站协议指令的变量要求779个字节的V存储器程序块。该程序块的起始地址由用户指定,专门保留用于Modbus变量。一定要设置V存储区,不然编译时会出现错误信息,设置过程很简单: 点击“文件”“库存储区”,出现如下画面(进行设置即可):提示:欲将端口0操作更换回PPI以便与STEP 7-Mic

10、ro/WIN通讯,用另一条MBUS_INIT指令重新指定端口0。您还可以将S7-200上的模式开关设为STOP模式。这样会将参数复原为端口0。3. Modbus主设备协议的初始化和执行时间Modbus主设备协议每次扫描都需要少量的时间来执行MBUS_CTRL指令。MBUS_CTRL初始化Modbus主设备(首次扫描)需要大约1.11毫秒的时间,以后扫描需要大约0.41毫秒。当MBUS_MSG子程序执行请求时,将执行扫描时间。大多数时间用于计算Modbus CRC的请求和应答。CRC (循环冗余检验)确保通讯消息的完整性。对于请求和应答中的每个字,扫描时间会延长约1.85毫秒。最大请求/应答(读

11、取或写入120个字)使扫描时间延长约222毫秒。当在从站中接收应答并至少发出请求时,主要是读取请求在延长扫描时间。当将数据发送到从站并至少收到应答时,主要是写入请求在延长扫描时间。4. Modbus从站协议的初始化和执行时间Modbus通讯使用CRC (循环冗余检验)确保通讯消息的完整性。Modbus从站协议使用预先计算数值的表格减少处理消息的时间。该CRC表初始化约需240毫秒。初始化在MBUS_INIT子程序中进行,通常在进入RUN模式后用户程序首次扫描时执行。如果MBUS_INIT子程序和任何其它初始化程序要求的时间超过500微秒扫描监视时间,您需要复原监视定时器,并将输出保持在启用状态

12、(如果扩展模块要求)。输出模块监视定时器可用向模块输出写入的方法复原。请参阅监视复原指令。当MBUS_SLAVE子程序执行请求时,扫描时间会延长。由于大多数时间用于计算Modbus CRC,对于请求中和应答中的每个字节,扫描时间会延长约420微秒。最大请求/应答(读取或写入120个字)使扫描时间延长约100毫秒。5. Modbus主设备寻址Modbus地址通常写作包含数据类型和偏移量的5个字符的数值。第一个字符决定数据类型,最后四个字符在数据类型中选择适当的数值。然后,Modbus主设备指令将地址映射至正确的功能,以便发送到从站。Modbus主设备指令支持下列Modbus地址:00001至09

13、999是离散输出(线圈)10001至19999是离散输入(触点)30001至39999是输入寄存器(通常是模拟量输入)40001至49999是保持寄存器所有Modbus地址均以1为基位,表示第一个数据值从地址1开始。有效地址范围将取决于从站。不同的从站将支持不同的数据类型和地址范围。6. Modbus 从站寻址Modbus地址通常被写为包含数据类型和偏移量的5个字符的数值。第一个字符决定数据类型,最后四个字符在数据类型中选择适当的数值。然后,Modbus主设备将地址映射至正确的功能。Modbus从站指令支持下列地址:00001至00128是映射至Q0.0 - Q15.7的离散输出10001至1

14、0128是映射至I0.0 - I15.7的离散输入30001至30032是映射至AIW0至AIW62的模拟输入寄存器40001至4xxxx是映射至V存储器的保持寄存器。所有Modbus地址均以1为基位。下表显示映射至S7-200地址的Modbus地址。Modbus地址S7-200地址00001Q0.000002Q0.100003Q0.2.00127Q15.600128Q15.710001I0.010002I0.110003I0.2.10127I15.610128I15.730001AIW030002AIW230003AIW4.30032AIW6240001Hold Start40002Hold

15、Start+240003HoldStart+4.4xxxxHoldStart+2 x (xxxx-1)Modbus从站协议允许您限制Modbus主设备可存取的输入、输出、模拟输入和保持寄存器(V存储器)数量。MBUS_INIT指令的MaxIQ参数指定Modbus主设备允许存取的离散输入或输出(I或Q)的最大数目。MBUS_INIT指令的MaxAI参数指定Modbus主设备允许存取的输入寄存器(AIW)的最大数目。MBUS_INIT指令的MaxHold参数指定Modbus主设备允许存取的保持寄存器(V存储器字)的最大数目。请参阅MBUS_INIT指令说明,了解有关为Modbus从站设定存储器限制

16、的进一步详情。7. Modbus主设备MBUS_MSG执行错误代码MBUS_MSG错误代码说明0无错误1应答时奇偶校验错误:仅当使用偶校验或奇校验时才会发生。传输被干扰,可能会收到不正确的数据。该错误通常是由电气故障(例如错误接线或者影响通讯的电噪声)引起的。2未使用3接收超时:在"超时"时间内,没有来自从站的应答。可能有以下一些原因:与从站的电气连接有问题、主设备和从站设置为不同的波特率/奇偶校验设置,以及错误的从站地址。4请求参数出错:一个或多个输入参数(从站、读写、地址或计数)被设置为非法值。检查文档中输入参数的允许值。5Modbus主设备未启用:在调用MBUS_MS

17、G前,每次扫描时都调用MBUS_CTRL。6Modbus忙于处理另一个请求:一次只能激活一条MBUS_MSG指令。7应答时出错: 收到的应答与请求不相关。这表示从站中出现了某些错误,或者错误的从站应答了请求。8应答时CRC错误: 传输被干扰,可能会收到不正确的数据。该错误通常是由电气故障(例如错误接线或者影响通讯的电噪声)引起的。101从站不支持在该地址处所请求的功能:请参阅"使用Modbus主设备指令"帮助主题中的所需Modbus从站功能支持表。102从站不支持数据地址:"地址"加上"计数"所要求的地址范围超出了从站所允许的地址范围

18、。103从站不支持数据类型:该"地址"类型不被从站支持。104从站故障105从站已接受消息但应答延迟:这是MBUS_MSG的错误,用户程序应在稍后重新发送请求。106从站忙,因此拒绝消息:可以再次尝试相同的请求,以获得应答。107从站因未知原因而拒绝消息108从站存储器奇偶校验错误:从站中有错误。8. Modbus从站协议执行错误代码错误代码说明0无错误1内存范围错误2非法波特率或奇偶校验3非法从属地址4非法Modbus参数值5保持寄存器与Modbus从属符号重叠6收到奇偶校验错误7收到CRC错误8非法功能请求/功能不受支持9请求中的非法内存地址10从属功能未启用9. Mo

19、dbus主设备高级用户信息·返回的功能与请求不匹配(错误代码7)。Modbus主设备将在设置"完成"和"错误"输出参数前,重新发送请求两个附加时间。通过查找Modbus主设备符号表中的符号mModbusRetries然后在执行MBUS_CTRL后改变该值,可以更改重试次数。mModbusRetries值是"字节"类型,重试范围是0至255。内部字符超时如果应答中字符之间的时间超出了指定的时间限制,Modbus主设备将中止来自从站的应答。缺省时间设置为100毫秒,可允许Modbus主设备协议用于大多数有线或电话调制解调器联网的

20、从站。如果检测到该错误,MBUS CTRL"错误"参数将设置为错误代码3。当字符之间需要较长的时间时,可能是因为传送介质(例如电话调制解调器)或者因为从站自身需要更多的时间。通过查找Modbus主设备符号表中的符号mModbusCharTimeout然后在执行MBUS_CTRL后改变该值,可以延长该超时时间。mModbusCharTimeout值是"整型"类型,范围是1至少30000毫秒。单个对多个位/字写入功能某些Modbus从站不支持Modbus功能写入单个离散输出位(Modbus功能5)或写入单个保持寄存器(Modbus功能6)。这些设备仅支持多个

21、位写入(Modbus功能15)或多个寄存器写入(Modbus功能16)。如果从站不支持单个位/字Modbus功能,则MBUS_MSG指令将返回错误代码101。Modbus主设备协议允许强制MBUS_MSG指令,以使用多个位/字Modbus功能来取代单个的位/字Modbus功能。通过查找Modbus主设备符号表中的符号mModbusForceMulti然后在执行MBUS_CTRL后改变该值,可以强制执行多个位/字指令。mModbusForceMulti值是"布尔"数据类型, 应该设置为"1"以在写入单个位/寄存器时强制使用多个位/字功能。累加器用途累加器(

22、AC0、AC1、AC2, AC3)由Modbus主设备指令使用,并在"交叉参考"列表中显示。累加器中的数值被Modbus主设备指令保存和恢复。当执行Modbus主设备指令时,保存累加器中的所有用户数据。保持寄存器地址大于9999Modbus保持地址通常在40001到49999的范围内。该范围对大多数应用程序来说足够了,但是某些数据映射到保持寄存器的Modbus从站所具有的地址超过9999。这些设备不适合常规的Modbus寻址方案。Modbus主设备指令支持通过可选的寻址方法对大于9999的保持寄存器进行寻址。MBUS_MSG指令允许参数"地址"具有附加范

23、围以支持保持寄存器地址的扩充范围。400001至465536用于保持寄存器例如:要访问保持寄存器16768,MBUS_MSG的"地址"参数应该设置为416768。扩充寻址允许访问Modbus协议支持的65536个可能地址的全部范围。该扩充寻址仅支持保持寄存器。第二章 使用Modbus主设备指令前言:欲在S7-200程序中使用Modbus主设备指令,请执行以下步骤:1.在程序中插入MBUS_CTRL指令,并在每次扫描时执行MBUS_CTRL。您可以使用MBUS_CTRL指令初始化或更改Modbus通讯参数。当您插入MBUS_CTRL指令时,会在程序中自动增加几个受保护的子程序

24、和中断例程。2.使用协议库存储器命令,为Modbus主设备协议指令需要的V存储器指定一个起始地址。3.将一条或多条MBUS_MSG指令放入程序中。可以根据需要将尽可能多的MBUS_MSG指令放入程序中,但每次只能激活这些指令中的一条。4.连接S7-200 CPU上的端口0 (或对端口1协议库是端口1)和Modbus从站之间的通讯电缆。当心:带有不同参考电位的互连装置会引起互连电缆中出现意外电流。这些意外电流会引起通讯错误或损坏装置。确保所有用通讯电缆连接的设备共享一个共用电路参考或单独隔离,以防不需要的电流通过。Modbus主设备指令使用如下显示的Modbus功能读取或写入特定的Modbus地

25、址。Modbus从站必须支持所需的Modbus功能才能读取或写入特定的Modbus地址。所需的Modbus从站功能支持Modbus地址读取或写入所需的Modbus从站功能00001 09999 离散输出读取写入功能1功能5用于单个输出点 功能15用于多个输出点10001 19999离散输出读取写入功能2不能30001 39999 输入寄存器读取写入功能4不能40001 49999 保持寄存器读取写入功能3功能6用于单个寄存器 功能16用于多个寄存器1.MBUS_CTRL指令(初始化主设备) 输入/输出操作数数据类型模式I, Q, M, S, SM, T, C, V, L布尔波特VD, ID,

26、QD, MD, SD, SMD, LD, AC, Constant, *VD, *AC, *LD双字奇偶校验VB, IB, QB, MB, SB, SMB, LB, AC, Constant, *VD, *AC, *LD字节超时VW, IW, QW, MW, SW, SMW, LW, AC, Constant, *VD, *AC, *LD字完成I, Q, M, S, SM, T, C, V, L布尔错误VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *L字节用于S7-200端口0的MBUS_CTRL指令(或用于端口1的MBUS_CTRL_P1指令)可初始化

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

28、ot;参数将波特率设为1200、2400、4800、9600、19200、38400、57600或115200波特。"奇偶校验"参数被设为与Modbus从站奇偶校验相匹配。所有设置使用一个起始位和一个停止位。可接受的数值为: 0 - 无奇偶校验1 - 奇校验2 - 偶校验"超时"参数设为等待来自从站应答的毫秒时间数。"超时"数值可以设置的范围为1毫秒到32767毫秒。典型值是1000毫秒(1秒)。"超时"参数应该设置的足够大,以便从站有时间对所选的波特率作出应答。"超时"参数用于确定Modbus

29、从站是否对请求做出应答。"超时"值确定Modbus主设备在发送了请求的最后一个字符后,将要等待多长时间才会有应答的第一个字符。如果在"超时"规定的时间内至少收到应答的一个字符,Modbus主设备将从Modbus从站接收到整个应答。MBUS_CTRL指令完成时,"完成"输出打开。"错误"输出包含执行该指令的结果。下表定义了在执行MBUS_CTRL指令时会产生的错误条件。 MBUS_CTRL错误代码说明0 无错误1 奇偶校验选择无效2 波特率选择无效3 超时选择无效4 模式选择无效2.MBUS_MSG指令输入/输出数据

30、类型操作数首次I, Q, M, S, SM, T, C, V, L (以上升沿检测元素为条件的功率流)布尔从站VB, IB, QB, MB, SB, SMB, LB, AC, Constant, *VD, *AC, *LD字节读写VB, IB, QB, MB, SB, SMB, LB, AC, Constant, *VD, *AC, *LD字节地址VD, ID, QD, MD, SD, SMD, LD, AC, Constant, *VD, *AC, *LD双字计数VW, IW, QW, MW, SW, SMW, LW, AC, Constant, *VD, *AC, *LD整型DataPtr

31、&VB双字完成I, Q, M, S, SM, T, C, V, L布尔错误 VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *LD字节MBUS_MSG指令(或用于端口1的MBUS_MSG_P1)用于启动对Modbus从站的请求并处理应答。当EN输入和"首次"输入打开时,BUS_MSG指令启动对Modbus从站的请求。发送请求、等待应答、并处理应答通常需要多次扫描。EN输入必须打开以启用请求的发送,并应该保持打开直到"完成"位被置位。注释:一次只能激活一条MBUS_MSG指令。如果启用了多条MBUS_MSG指令

32、,则将处理所执行的第一条MBUS_MSG指令,之后的所有MBUS_MSG指令将中止并产生错误代码6。"首次"参数应该在有新请求要发送时才打开以进行一次扫描。"首次"输入应当通过一个边沿检测元素(例如上升沿)打开,这将导致请求被传送一次。"从站"参数是Modbus从站的地址。允许的范围是0到247。地址0是广播地址,只能用于写请求。不存在对地址0的广播请求的应答。并非所有的从站会支持广播地址。S7-200 Modbus从站协议库不支持广播地址。"读写"参数指定是否要读取或写入该消息。"读写"参数允

33、许使用下列两个值:0 -读,1 -写。 离散输出(线圈)和保持寄存器支持读取和写入请求。离散输入(触点)和输入寄存器仅支持读取请求。"地址"参数是起始的Modbus地址。允许使用下列取值范围:00001至09999是离散输出(线圈);10001至19999是离散输入(触点);30001至39999是输入寄存器;40001至49999是保持寄存器 "地址"的指定取值范围基于Modbus从站支持的地址。"计数"参数指定在该请求中读取或写入的数据元素的数目。"计数"值是位数(对于位数据类型)和字数(对于字数据类型)。地址

34、0xxxx -"计数"是要读取或写入的位数。地址1xxxx -"计数"是要读取的位数。地址3xxxx -"计数"是要读取的输入寄存器的字数。地址4xxxx -"计数"是要读取或写入的保持寄存器的字数。MBUS_MSG指令将读取或写入最大120个字或1920个位(240字节的数据)。"计数"的实际限值将取决于Modbus从站中的限制。"DataPtr"参数是指向S7-200 CPU的V存储器中与读取或写入请求相关的数据的间接地址指针。对于读取请求,DataPtr应该指向用于存储

35、从Modbus从站读取的数据的第一个CPU存储器位置。对于写入请求,DataPtr应该指向要发送到Modbus从站的数据的第一个CPU存储器位置。 DataPtr值作为间接地址指针传递到MBUS_MSG。例如,如果要写入Modbus从站的数据从S7-200 CPU中的地址VW200开始,则DataPtr的数值将会是&VB200 (VB200的地址)。指针必须始终是VB类型,即使它们指向字数据。 保持寄存器(地址4xxxx)和输入寄存器(地址3xxxx)的值是字(2个字节或16位)。S7-200 CPU字的格式与Modbus寄存器相同。低位编号的V存储器地址是寄存器的最高有效字节。高位编

36、号的V存储器地址是寄存器的最低有效字节。下表显示了S7-200字节和字寻址如何与Modbus寄存器格式相对应。S7-200 CPU存储器字节地址S7-200 CPU存储器字地址Modbus保持寄存器地址地址十六进制数据地址十六进制数据地址十六进制数据VB20012VW20012 34400112 34VB20134VB20256VW20256 78400256 78VB20378VB2049AVW2049A BC40039A BCVB205BC位数据(地址0xxxx和1xxxx)区域作为压缩字节被读取和写入,也就是说,每个数据字节内压缩8位。第一个数据字节的最低有效位是寻址的位号(参数&quo

37、t;地址")。如果仅写入单个的位,则该位必须处于指向DataPtr的字节的最低有效位字节。压缩字节的格式(显示离散输入地址)1000810007100061000510004100031000210001对于未在偶数字节边界上开始的位数据地址,与起始地址相关的位必须处于字节的最低有效位。参见如下在Modbus地址10004处开始的3位压缩字节格式实例。压缩字节的格式(在地址10004处开始的离散输入)当写入到离散输出数据类型(线圈)时,用户必须在数据通过DataPtr传递到MBUS_MSG指令之前,将压缩字节内的位放置到正确的位位置中。"完成"输出在发送请求和接收

38、应答时关闭。"完成"输出在应答完成或MBUS_MSG指令因错误而中止时打开。"错误"输出仅当"完成"输出打开时有效。请参阅Modbus主设备MBUS_MSG执行错误通过MBUS_MSG指令返回。低位编号的错误代码(1到8)是由MBUS_MSG指令检测到的错误。这些错误代码通常指示与MBUS_MSG指令的输入参数有关的问题,或接收来自从站的应答时出现的问题。奇偶校验和CRC错误指示存在应答但是数据未正确接收。这通常是由电气故障(例如连接有问题或者电噪声)引起的。高位编号的错误代码(从101开始)是由Modbus从站返回的错误。这些错误指

39、示从站不支持所请求的功能,或者所请求的地址(或数据类型或地址范围)不被Modbus从站支持。程序举例该实例程序显示了在每次输入I0.0打开时,如何使用Modbus主设备指令将4个保持寄存器写入Modbus从站然后再从中读取。S7-200 CPU将把自VW100开始的4个字写入Modbus从站。数据将写入从站中自地址40001开始的4个保持寄存器。S7-200 CPU于是将从Modbus从站读取4个保持寄存器。数据将来自保持寄存器40010 40013,并放置到S7-200 CPU的V存储器中自VW200开始的地址。实例程序数据传送如果从MBUS_MSG指令返回一个错误,则程序将打开输出Q0.1

40、和Q0.2。通过每次扫描时调用MBUS_CTRL来初始化和监视Modbus主设备。Modbus主设备设置为9600波特,无奇偶校验。从站允许1000毫秒(1秒)的应答时间。在首次扫描时,重设用于两条MBUS_MSG指令的启用标记(M2.0和M2.1)。当I0.0从"关闭"切换到"打开"时,为第一条MBUS_MSG指令(M2.0)设置启用标记。当第一个启用标记(M2.0)打开时,调用MBUS_MSG指令。"首次"参数必须仅为启用指令时的首次扫描而设置。该指令将4个保持寄存器写入(RW = 1)从站2。要写入的数据取自CPU中的VB100

41、-VB107 (4个字)并写入Modbus从站中的地址40001 -40004。当第一条MBUS_MSG指令完成后("完成"从0变为1),清除对第一条MBUS_MSG指令的启用,并为第二条MBUS_MSG指令设定启用。如果错误(MB1)不为零,则设置Q0.1以显示错误。当第二个启用标记(M2.1)打开时,调用第二条MBUS_MSG指令。"首次"参数必须仅为启用指令时的首次扫描而设置。该指令从从站2读取(RW = 0) 4个保持寄存器。数据从Modbus从站的地址40010 ?40013读取并复制到CPU中的VB200 ?VB207 (4字)。当第二条MB

42、US_MSG指令完成("完成"从0变为1)后,清除对第二条MBUS_MSG指令的启用。如果错误(MB1)不为零,则设置Q0.2以显示错误。第三章 使用Modbus从站指令前言:编程时使用SM0.1调用子程序MBUS_INIT进行初始化,使用SM0.0调用MBUS_SLAVE,并指定相应参数。关于参数的详细说明,可在子程序的局部变量表中找到;欲在S7-200程序中使用Modbus从站指令,请执行以下步骤:1.在程序中插入MBUS_INIT指令,并仅限为一次扫描执行MBUS_INIT指令。您可以使用MBUS_INIT指令初始化或更改Modbus通讯参数。当您插入MBUS_INI

43、T指令时,会在程序中自动增加几个隐藏的子程序和中断例行程序。2.使用协议库存储器命令,为Modbus从站协议指令需要的V存储器指定一个起始地址。3.仅将一条MBUS_SLAVE指令放入程序中。每次扫描时均调用该指令,为所有收到的请求提供服务。4.连接S7-200上的端口0和Modbus主设备之间的通讯电缆。当心:带有不同参考电位的互连装置会使不需要的电流从互连电缆中通过。这些不需要的电流会引起通讯错误或损坏装置。确保所有用通讯电缆连接的设备共享一个共用电路参考或单独隔离,以防不需要的电流通过。累加器(AC0、AC1、AC2、AC3)被Modbus从站指令使用,在"交叉参考"

44、列表中显示。执行之前,Modbus从站指令累加器中的数值被保存,并在Modbus从站指令完成之前还原至累加器,以确保在执行Modbus从站指令时累加器中的所有用户数据被保留。Modbus从站协议指令支持Modbus RTU协议。这些指令使用S7-200的自由端口实用程序支持最常用的Modbus功能。详情见附表2从站功能码与说明。1.MBUS_INIT指令(初始化从站) 输入/输出操作数数据类型模式、地址、奇偶校验VB, IB, QB, MB, SB, SMB, LB, AC, Constant, *VD, *AC, *LD字节波特、HoldStartVD, ID, QD, MD, SD, SM

45、D, LD, AC, Constant, *VD, *AC, *LD双字延时、MaxIQ、MaxAI、MaxHoldVW, IW, QW, MW, SW, SMW, LW, AC, Constant, *VD, *AC, *LD字字完成I, Q, M, S, SM, T, C, V, L布尔错误VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *LD字节MBUS_INIT指令被用于启用和初始化或禁止Modbus通讯。在使用MBUS_SLAVE指令之前,必须正确执行MBUS_INIT指令。指令完成后立即设定"完成"位,才能继续执行下一条指令

46、。在每次扫描且EN输入打开时执行该指令。应当在每次通讯状态改变时执行MBUS_INIT指令。因此,EN输入应当通过一个边缘检测元素用脉冲打开,或者仅在首次扫描时执行。"模式"输入数值选择通讯协议:输入数值1将端口0指定给Modbus协议并启用协议;将输入数值0则将端口0指定给PPI,并禁用Modbus协议。"波特"参数将波特率设为1200、2400、4800、9600、19200、38400、57600或115200。"地址"参数将地址设为1和247之间(包括1和247)的数值。"奇偶校验"参数被设为与Modbus

47、主设备奇偶校验相匹配。可接受的数值为:0-无奇偶校验1-奇数校验2-偶数校验"延时"参数通过将指定的毫秒数增加至标准Modbus信息超时的方法延长标准Modbus信息结束超时条件。该参数的典型数值在有线网络上应为0。如果您在使用带有纠错功能的调制解调器,将延时设为50至100毫秒的数值。如果您在使用扩展频谱无线电,将延时设为10至100毫秒的数值。"延时"数值可以是0至32767毫秒。MaxIQ参数将供Modbus地址0xxxx和1xxxx使用的I和Q点数设为0至128之间的数值。数值0禁止所有向输入和输出的读取。建议使用的MaxIQ数值是128,该数值

48、可在S7-200中存取所有的I和Q点。MaxAI参数将供Modbus地址3xxxx使用的字输入(AI)寄存器数目设为0至32之间的数值。数值0禁止模拟输入的读数。建议使用的MaxAI数值如下,这些数值可允许存取所有的S7-200模拟输入:0用于CPU 22116用于CPU 22232用于CPU 224、224XP、226和226XMMaxHold参数设定供Modbus地址4xxxx使用的V存储器中的字保持寄存器数目。例如,为了允许主设备存取2000个字节的V存储器,将MaxHold设为1000个字的数值(保持寄存器)。HoldStart参数是V存储器中保持寄存器的起始地址。该数值一般被设为VB

49、0,因此HoldStart参数被设为&VB0 (VB0地址)。其它V存储器地址可指定为保持寄存器的起始地址,以便在项目的其它地方使用VB0。Modbus主设备可存取V内存MaxHold个字数,从HoldStart开始。注意:你选用的CPU的V存储区大小!CPU型号不同V数据存储区大小不同。应根据需要选择Modbus保持寄存器区域的大小。MBUS_INIT指令完成时,"完成"输出打开。"错误"输出字节包含执行指令的结果。请参阅Modbus从站协议执行错误代码中可能因执行指令而产生的错误条件。包含 Modbus RTU 从站指令库的项目编译、下载到C

50、PU中后,在编程计算机(PG/PC)上运行一些Modbus 测试软件可以检验S7-200的ModbusRTU通信是否正常,这对查找故障点很有用。测试软件通过计算机串口(RS-232)和PC/PPI电缆连接CPU。如果必要,须将PC/PPI电缆设置在自由口通信方式。可到一些软件下载网站寻找类似软件,如 ModScan32 等。NETWORK 1 / 首次扫描时初始化Modbus从站协议/ 将从站地址设为1,将端口0设为9600波特,将奇偶校验设为偶数,/ 允许存取所有的I、Q和AI数值,允许存取1000台保存寄存器(2000个字节)/ 从VB0开始。 LD SM0.1CALL MBUS_INIT

51、, 1, 1, 9600, 2, +0, +128, +32, +1000, &VB0, M0.1, MB1NETWORK 2 / 每次扫描时执行Modbus从站协议LD SM0.0CALL MBUS_SLAVE, M0.2, MB22.MBUS_SLAVE指令输入/输出操作数数据类型完成I, Q, M, S, SM, T, C, V, L布尔错误VB, IB, QB, MB, SB, SMB, LB, AC, *VD, *AC, *LD字节MBUS_SLAVE指令被用于为Modbus主设备发出的请求服务,并且必须在每次扫描时执行,以便允许该指令检查和回答Modbus请求。在每次扫描且

52、EN输入开启时执行该指令。MBUS_SLAVE指令无输入参数。当MBUS_SLAVE指令对Modbus请求作出应答时,"完成"输出打开。如果没有需要服务的请求时,"完成"输出关闭。"错误"输出包含执行该指令的结果。该输出只有在"完成"打开时才有效。如果"完成"关闭,错误参数不会改变。请参阅Modbus从站协议执行错误代码 中可能因执行该指令而导致的错误条件。3.常问问题Modbus 从站的网络地址与 S7-200 的 CPU网络地址有什么关系? 没有关系。支持网络通信的通信协议必须有其自己的网络

53、寻址规定。 Modbus 从站的地址只是它在 Modbus网络上的地址,而通常所说的 S7-200 CPU 地址是 CPU 在西门子的 PPI 网络上的站地址。S7-200 CPU的大部分通信功能都通过 PPI 网络完成,例如编程、网络读写通信等。如何理解 Modbus 地址与功能码的区别? Modbus 地址与 Modbus 的功能码是两个层次的概念。根据 Modbus 通信协议,Modbus 数据的地址使用 00xxx、10xxx、30xxx 和 40xxx的形式,分别表示数字量输出、数字量输入、模拟量输入等数据地址。在使用 S7-200 的指令库时,Modbus 数据地址与 S7-200

54、的 I/O 和数据存储区地址间有特定的对应关系。 有些设备表明它支持 Modbus RTU 通信协议,但也详细提供了读写数据的详细通信帧格式,其中包括如何指定 Modbus站的地址,需要读写数据类型、长度等等。数据帧有特定字节指出此指令读写的数据类型和地址,此字节的数据内容即所谓“功能码”,如功能 1指定读取单个/多个数字量输出点的值。 支持 Modbus 协议的设备或软件,使用时用户直接设置或看到的应当是 Modbus 数据地址。Modbus地址所访问的数据,是通过各种“功能”读写而来。功能码是 Modbus 地址的底层。如果 Modbus 通信的一方提供的所谓Modbus 协议只有功能码,

55、则需要注意了解此功能号与 Modbus 地址间的对应关系。Modbus 指令库启动后,如何通过同一个通信端口进行 CPU监控?Modbus 指令库使用的是 CPU 的自由口通信功能,工作在自由口模式下的通讯口不能使用 Micro/WIN 的 PPI编程通信监控。如果通信口都已经被占用,可以考虑:加一个通信模块(如 EM 277、CP 243-1、EM 241 等)扩展出一个编程通信口,中止自由口模式,可以将 CPU 上的模式开关从 RUN 拨到 STOP;或者保持处于 RUN 状态,用程序停止指令库的Modbus 模式(参见指令库应用)为何有些 HMI 软件使用 Modbus RTU读取S7-

56、200中的实数会出现错误?有些HMI软件使用ModbusRTU通信协议时,处理存储在数据保持寄存器中的实数(浮点数)的方式与西门子的实数保存格式不同。西门子的PLC遵循“高字节低地址、低字节高地址”的规律。 ModbusRTU的保持寄存器总是以“字(双字节)”为单位,而一个实数需要4个字节(双字)表示。HMI软件在处理时可能会把保持寄存器的两个“字”互换位置,造成不能识别以西门子格式表示的实数。如果HMI软件一方无法处理这种实数,则可在S7-200CPU中编程将存入数据缓冲区(保持寄存器区)的实数的高字和低字互换。为何有的HMI软件用ModbusRTU可以读取作为从站的S7-200的内容,但不能写入?可能此软件使用了Modbus功能15(写多个离散量)或类似功能(功能16)。S7-200从站协议遵守“以整字节地址边界(如Q0.0、Q2.0)开始、以8的整数倍为位个数”的规约。如果HMI软件未严格执行此规律就可能发生写入错误的情况。S7-200是否支持 Modbus ASCII 模式?S7-200可以支持上述模式,但是没有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论