
S7200的MODBUS详细应用示例参考模板.doc
41页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使用CPU上的端口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”(包括库),然后安装运行“STEP 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. 使用Modbus主设备协议的要求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·Modbus主设备协议指令影响与CPU通讯端口中自由端口通讯相关的所有SM位置·Modbus主设备协议指令使用3个子程序和1个中断例程·Modbus主设备协议指令要求两个Modbus主设备指令和支持例程有1620个字节的程序空间·Modbus主设备协议指令的变量要求284个字节的V存储器程序块该程序块的起始地址由用户指定,专门保留用于Modbus变量· S7-200 CPU必须是固化程序修订版2.00或最好支持Modbus主设备协议库(CPU MLFB 21x-2xx23-0XB0)·Modbus主设备协议库为某些功能使用用户中断用户中断不能被用户程序禁用提示:欲将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指定给Modbus从站协议或PPI·Modbus从站协议指令影响与端口0中自由端口通讯相关的所有SM位置·Modbus从站协议指令使用3个子程序和2个中断例程·Modbus从站协议指令要求两个Modbus主设备指令和支持例程有1857个字节的程序空间·Modbus从站协议指令的变量要求779个字节的V存储器程序块该程序块的起始地址由用户指定,专门保留用于Modbus变量一定要设置V存储区,不然编译时会出现错误信息,设置过程很简单: 点击“文件”→“库存储区”,出现如下画面(进行设置即可):提示:欲将端口0操作更换回PPI以便与STEP 7-Micro/WIN通讯,用另一条MBUS_INIT指令重新指定端口0您还可以将S7-200上的模式开关设为STOP模式这样会将参数复原为端口03. Modbus主设备协议的初始化和执行时间Modbus主设备协议每次扫描都需要少量的时间来执行MBUS_CTRL指令。
MBUS_CTRL初始化Modbus主设备(首次扫描)需要大约1.11毫秒的时间,以后扫描需要大约0.41毫秒当MBUS_MSG子程序执行请求时,将执行扫描时间大多数时间用于计算Modbus CRC的请求和应答CRC (循环冗余检验)确保通讯消息的完整性对于请求和应答中的每个字,扫描时间会延长约1.85毫秒最大请求/应答(读取或写入120个字)使扫描时间延长约222毫秒当在从站中接收应答并至少发出请求时,主要是读取请求在延长扫描时间当将数据发送到从站并至少收到应答时,主要是写入请求在延长扫描时间4. Modbus从站协议的初始化和执行时间Modbus通讯使用CRC (循环冗余检验)确保通讯消息的完整性Modbus从站协议使用预先计算数值的表格减少处理消息的时间该CRC表初始化约需240毫秒初始化在MBUS_INIT子程序中进行,通常在进入RUN模式后用户程序首次扫描时执行如果MBUS_INIT子程序和任何其它初始化程序要求的时间超过500微秒扫描监视时间,您需要复原监视定时器,并将输出保持在启用状态(如果扩展模块要求)输出模块监视定时器可用向模块输出写入的方法复原请参阅监视复原指令当MBUS_SLAVE子程序执行请求时,扫描时间会延长。
由于大多数时间用于计算Modbus CRC,对于请求中和应答中的每个字节,扫描时间会延长约420微秒最大请求/应答(读取或写入120个字)使扫描时间延长约100毫秒5. Modbus主设备寻址Modbus地址通常写作包含数据类型和偏移量的5个字符的数值第一个字符决定数据类型,最后四个字符在数据类型中选择适当的数值然后,Modbus主设备指令将地址映射至正确的功能,以便发送到从站Modbus主设备指令支持下列Modbus地址:00001至09999是离散输出(线圈)10001至19999是离散输入(触点)30001至39999是输入寄存器(通常是模拟量输入)40001至49999是保持寄存器所有Modbus地址均以1为基位,表示第一个数据值从地址1开始有效地址范围将取决于从站不同的从站将支持不同的数据类型和地址范围6. Modbus 从站寻址Modbus地址通常被写为包含数据类型和偏移量的5个字符的数值第一个字符决定数据类型,最后四个字符在数据类型中选择适当的数值然后,Modbus主设备将地址映射至正确的功能Modbus从站指令支持下列地址:00001至00128是映射至Q0.0 - Q15.7的离散输出10001至10128是映射至I0.0 - I15.7的离散输入30001至30032是映射至AIW0至AIW62的模拟输入寄存器40001至4xxxx是映射至V存储器的保持寄存器。
所有Modbus地址均以1为基位下表显示映射至S7-200地址的Modbus地址Modbus地址 S7-200地址00001 Q0.000002 Q0.100003 Q0.2... ...00127 Q15.600128 Q15.710001 I0.010002 I0.110003 I0.2... ...10127 I15.610128 I15.730001 AIW030002 AIW230003 AIW4... ...30032 AIW6240001 Hold Start40002 HoldStart+240003 HoldStart+4... ...4xxxx HoldStart+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从站设定存储器限制的进一步详情7. Modbus主设备MBUS_MSG执行错误代码MBUS_MSG错误代码。
