S7200的MODBUS详细应用示例 - 图文
更新时间:2024-01-29 18:52:01 阅读量: 教育文库 文档下载
1
MODBUS
修订历史记录
日期 <2009/4/3 > 版本 说明(修改、补充、删除) 作者 研发部·孙宝东 5.13库存储区补充说明(36页) 审核 研发部·王振岳 第一版(已完) 注释:红色字体为注意点;蓝色为修改补充;紫色为问题总结;茶色为暂时删除;绿色为住宿。
2
目 录
前言 ............................................................. 错误!未定义书签。 第一章 使用Modbus协议库 ................................. 错误!未定义书签。
前言 .............................................................................. 6 1.使用Modbus主设备协议的要求 ..................................................... 6 2.使用Modbus从站设备协议的要求 ................................................... 7 3.Modbus主设备协议的初始化和执行时间 ............................................. 7 4.Modbus从站协议的初始化和执行时间 ............................................... 8 5.Modbus主设备寻址 ............................................................... 8 6.Modbus 从站寻址 ................................................8 7.Modbus主设备MBUS_MSG执行错误代码 ............................................. 10 8.Modbus从站协议执行错误代码 ....................................... 11 9.Modbus主设备高级用户信息 ........................................ 11
第二章 使用Modbus主设备指令 ................................ 14
前言 ....................................................... 14 1.MBUS_CTRL指令(初始化主设备) ................................................... 15 2.MBUS_MSG指令 .................................................................. 16
第三章 使用Modbus从站指令 ............................... 错误!未定义书签。
前言 ......................................................... 22 1.MBUS_INIT指令(初始化从站) ..................................... 错误!未定义书签。 2.MBUS_SLAVE指令 ................................................ 错误!未定义书签。 3.常见问题 ....................................................................... 26
第四章 下载与通讯测试 ...................................... 错误!未定义书签。
1.编译、下载 ..................................................... 错误!未定义书签。 2.通讯 ........................................................................... 31
附表 主从站指令配置表 ..................................................... 37
3
S7200 Modbus 主从协议
版本(09年初稿版)
制作:研发部
前言:
Modbus从站协议指令可以配置S7-200,将其用作Modbus RTU从站,与Modbus主设备通讯。
Modbus主设备协议指令可以配置S7-200,将其用作Modbus RTU主设备,与一个或多个Modbus从站通讯。
Modbus指令安装在STEP 7 Micro/WIN指令树的\协议库\文件夹中。有了这些新指令, 您可以将S7-200用作Modbus设备。当您在程序中加入Modbus指令时,会在项目中自动增加一个或多个相关子程序。
Modbus主设备协议库有两个版本。一个版本使用CPU的端口0,另一个则使用CPU的端口1。端口1协议库的POU名中带有\,表示POU使用CPU上的端口1。在其它方面,这两个Modbus主设备协议库完全一致。
Modbus从站协议库仅支持端口0通讯。
在 STEP 7 Micro/WIN 中,Modbus RTU 协议和 USS 协议操作库位于操作树的“库”文件夹中。MODBUS 函数库要求 STEP 7 Micro/WIN 为 V3.2 或更高版本。
4
图1: 添加函数库
第一章
使用Modbus协议库5
前言:这些库是附加函数库,并非组态软件 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通讯。
6
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模式。这样会将参数复原为端口0。
3. Modbus主设备协议的初始化和执行时间
Modbus主设备协议每次扫描都需要少量的时间来执行MBUS_CTRL指令。
MBUS_CTRL初始化Modbus主设备(首次扫描)需要大约1.11毫秒的时间,以后扫描需要大约0.41毫秒。
当MBUS_MSG子程序执行请求时,将执行扫描时间。大多数时间用于计算Modbus CRC的请求和应答。CRC (循环冗余检验)
7
确保通讯消息的完整性。对于请求和应答中的每个字,扫描时间会延长约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地址。
8
Modbus地址 S7-200地址 00001 00002 00003 ...
...
Q15.6 Q15.7 I0.0 I0.1 I0.2 Q0.0 Q0.1 Q0.2
00127 00128 10001 10002 10003 ...
...
10127 10128 30001 30002 30003 ...
...
I15.6 I15.7 AIW0 AIW2 AIW4
30032 40001 40002 40003 ...
...
AIW62 Hold Start HoldStart+2 HoldStart+4
4xxxx HoldStart+2 x (xxxx-1)
Modbus从站协议允许您限制Modbus主设备可存取的输入、输出、模拟输入和保持寄存器(V存储器)数量。
MBUS_INIT指令的MaxIQ参数指定Modbus主设备允许存取的离散输入或输出(I或Q)的最大数目。
9
MBUS_INIT指令的MaxAI参数指定Modbus主设备允许存取的输入寄存器(AIW)的最大数目。
MBUS_INIT指令的MaxHold参数指定Modbus主设备允许存取的保持寄存器(V存储器字)的最大数目。
请参阅MBUS_INIT指令说明,了解有关为Modbus从站设定存储器限制的进一步详情。
7. Modbus主设备MBUS_MSG执行错误代码
MBUS_MSG 错误代码 说明 0
无错误
1 应答时奇偶校验错误:仅当使用偶校验或奇校验时才会发生。传输被干扰,可能会收到不正确的数据。该错误通常是由电气故障(例如错误接线或者影响通讯的电噪声)引起的。 2
未使用
3 接收超时:在\超时\时间内,没有来自从站的应答。可能有以下一些原因:与从站的电气连接有问题、主设备和从站设置为不同的波特率/奇偶校验设置,以及错误的从站地址。
4 请求参数出错:一个或多个输入参数(从站、读写、地址或计数)被设置为非法值。检查文档中输入参数的允许值。 5 6
Modbus主设备未启用:在调用MBUS_MSG前,每次扫描时都调用MBUS_CTRL。 Modbus忙于处理另一个请求:一次只能激活一条MBUS_MSG指令。
7 应答时出错: 收到的应答与请求不相关。这表示从站中出现了某些错误,或者错误的从站应答了请求。
8 应答时CRC错误: 传输被干扰,可能会收到不正确的数据。该错误通常是由电气故障(例如错误接线或者影响通讯的电噪声)引起的。
101 从站不支持在该地址处所请求的功能:请参阅\使用Modbus主设备指令\帮助主题中的所需Modbus从站功能支持表。
102 从站不支持数据地址:\地址\加上\计数\所要求的地址范围超出了从站所允许的地址范围。
103 从站不支持数据类型:该\地址\类型不被从站支持。 104 从站故障
105 从站已接受消息但应答延迟:这是MBUS_MSG的错误,用户程序应在稍后重新发送请求。
10
106 从站忙,因此拒绝消息:可以再次尝试相同的请求,以获得应答。 107 从站因未知原因而拒绝消息
108 从站存储器奇偶校验错误:从站中有错误。 8. Modbus从站协议执行错误代码 错误代码 说明 0 1 2 3 4 5 6 7 8 9 10
无错误 内存范围错误 非法波特率或奇偶校验 非法从属地址 非法Modbus参数值
保持寄存器与Modbus从属符号重叠 收到奇偶校验错误 收到CRC错误
非法功能请求/功能不受支持 请求中的非法内存地址 从属功能未启用
9. Modbus主设备高级用户信息
·返回的功能与请求不匹配(错误代码7)。
Modbus主设备将在设置\完成\和\错误\输出参数前,重新发送请求两个附加时间。 通过查找Modbus主设备符号表中的符号mModbusRetries然后在执行MBUS_CTRL后改变该值,可以更改重试次数。mModbusRetries值是\字节\类型,重试范围是0至255。 内部字符超时
如果应答中字符之间的时间超出了指定的时间限制,Modbus主设备将中止来自从站的应答。缺省时间设置为100毫秒,可允许Modbus主设备协议用于大多数有线或电话调制解调器联网的从站。如果检测到该错误,MBUS CTRL\错误\参数将设置为错误代码3。 当字符之间需要较长的时间时,可能是因为传送介质(例如电话调制解调器)或者因为从站自身需要更多的时间。通过查找Modbus主设备符号表中的符号mModbusCharTimeout然后在执行MBUS_CTRL
11
后改变该值,可以延长该超时时间。mModbusCharTimeout值是\整型\类型,范围是1至少30000毫秒。 单个对多个位/字写入功能
某些Modbus从站不支持Modbus功能写入单个离散输出位(Modbus功能5)或写入单个保持寄存器
(Modbus功能6)。这些设备仅支持多个位写入(Modbus功能15)或多个寄存器写入
(Modbus功能16)。如果从站不支持单个位/字Modbus功能,则MBUS_MSG指令将返回错误代码101。
Modbus主设备协议允许强制MBUS_MSG指令,以使用多个位/字Modbus功能来取代单个的位/字
Modbus功能。通过查找Modbus主设备符号表中的符号mModbusForceMulti然后在执行MBUS_CTRL
后改变该值,可以强制执行多个位/字指令。mModbusForceMulti值是\布尔\数据类型, 应该设置为\
以在写入单个位/寄存器时强制使用多个位/字功能。 累加器用途
累加器(AC0、AC1、AC2, AC3)由Modbus主设备指令使用,并在\交叉参考\列表中显示。累加器中的数值被Modbus主设备指令保存和恢复。当执行Modbus主设备指令时,保存累加器中的所有用户数据。 保持寄存器地址大于9999
Modbus保持地址通常在40001到49999的范围内。该范围对大多数应用程序来说足够了,但是某些数据映射到保持寄存器的Modbus从站所具有的地址超过9999。这些设备不适合常规的Modbus寻址方案。
Modbus主设备指令支持通过可选的寻址方法对大于9999的保持寄存器进行寻址。MBUS_MSG指令允许参数\地址\具有附加范围以支持保持寄存器地址的扩充范围。400001至465536用于保持寄存器
例如:要访问保持寄存器16768,MBUS_MSG的\地址\参数应该设置为416768。 扩充寻址允许访问Modbus协议支持的65536个可能地址的全部范围。该扩充寻址仅支持保持寄存器。
12
第二章 使用Modbus主设备指令
前言:欲在S7-200程序中使用Modbus主设备指令,请执行以下步骤:
1. 在程序中插入MBUS_CTRL指令,并在每次扫描时执行MBUS_CTRL。您可以使用MBUS_CTRL指令初始化或更改Modbus通讯参数。当您插入MBUS_CTRL指令时,会在程序中自动增加几个受保护的子程序和中断例程。
2. 使用协议库存储器命令,为Modbus主设备协议指令需要的V存储器指定一个起始地址。 3. 将一条或多条MBUS_MSG指令放入程序中。可以根据需要将尽可能多的MBUS_MSG指令放入程序中,但每次只能激活这些指令中的一条。
4. 连接S7-200 CPU上的端口0 (或对端口1协议库是端口1)和Modbus从站之间的通讯电缆。
13
当心:带有不同参考电位的互连装置会引起互连电缆中出现意外电流。这些意外电流会引起通讯错误或损坏装置。确保所有用通讯电缆连接的设备共享一个共用电路参考或单独隔离,以防不需要的电流通过。
Modbus主设备指令使用如下显示的Modbus功能读取或写入特定的Modbus地址。Modbus从站必须支持所需的Modbus功能才能读取或写入特定的Modbus地址。 所需的Modbus从站功能支持Modbus地址 00001 09999 离散输出 读取或写入 读取 写入 10001 19999离散输出 读取 写入 读取 写入 读取 写入 所需的Modbus从站功能 功能1 功能5用于单个输出点 功能15用于多个输出点 功能2 不能 功能4 不能 功能3 功能6用于单个寄存器 功能16用于多个寄存器 30001 39999 输入寄存器 40001 49999 保持寄存器
1.MBUS_CTRL指令(初始化主设备)
输入/输出 模式 波特 操作数
数据类型 布尔 双字 字节 字 I, Q, M, S, SM, T, C, V, L VD, ID, 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 奇偶校验 超时 14
完成 错误 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指令)可初始化、监视或禁用Modbus通讯。在使用MBUS_MSG指令之前,必须正确执行MBUS_CTRL指令。指令完成后立即设定\完成\位,才能继续执行下一条指令。在每次扫描且 EN输入打开时执行该指令。MBUS_CTRL指令必须在每次扫描时(包括首次扫描)被调用,以允许监视随MBUS_MSG指令启动的任何突出消息的进程。除非每次调用MBUS_CTRL,否则Modbus主设备协议将不能正确运行。
\模式\输入数值选择通讯协议。输入值1将CPU端口分配给Modbus协议并启用该协议。输入值0将CPU端口分配给PPI系统协议并禁用Modbus协议。
\波特\参数将波特率设为1200、2400、4800、9600、19200、38400、57600或115200波特。
\奇偶校验\参数被设为与Modbus从站奇偶校验相匹配。所有设置使用一个起始位和一个停止位。可接受的数值为: 0 - 无奇偶校验 1 - 奇校验 2 - 偶校验
\超时\参数设为等待来自从站应答的毫秒时间数。\超时\数值可以设置的范围为1毫秒到32767毫秒。典型值是1000毫秒(1秒)。\超时\参数应该设置的足够大,以便从站有时间对所选的波特率作出应答。\超时\参数用于确定Modbus从站是否对请求做出应答。\超时\值确定Modbus主设备在发送了请求的最后一个字符后,将要等待多长时间才会有应答的第一个字符。如果在\超时\规定的时间内至少收到应答的一个字符,Modbus主设备将从Modbus从站接收到整个应答。
MBUS_CTRL指令完成时,\完成\输出打开。
\错误\输出包含执行该指令的结果。下表定义了在执行MBUS_CTRL指令时会产生的错误条件。 MBUS_CTRL 错误代码 说明
0 1 2 3 4
无错误
奇偶校验选择无效 波特率选择无效 超时选择无效 模式选择无效
15
2.MBUS_MSG指令
输入/输出 首次 从站 读写 地址 计数 DataPtr 完成 数据类型
操作数 布尔 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 整型 &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指令,则将处理所执行的第一条MBUS_MSG指令,之后的所有MBUS_MSG指令将中止并产生错误代码6。
\首次\参数应该在有新请求要发送时才打开以进行一次扫描。\首次\输入应当通过一个边沿检测元素(例如上升沿)打开,这将导致请求被传送一次。
16
\从站\参数是Modbus从站的地址。允许的范围是0到247。地址0是广播地址,只能用于写请求。不存在对地址0的广播请求的应答。并非所有的从站会支持广播地址。S7-200 Modbus从站协议库不支持广播地址。
\读写\参数指定是否要读取或写入该消息。\读写\参数允许使用下列两个值:0 -读,1 -写。 离散输出(线圈)和保持寄存器支持读取和写入请求。离散输入(触点)和输入寄存器仅支持读取请求。 \地址\参数是起始的Modbus地址。允许使用下列取值范围:00001至09999是离散输出(线圈);10001至19999是离散输入(触点);30001至39999是输入寄存器;40001至49999是保持寄存器 \地址\的指定取值范围基于Modbus从站支持的地址。
\计数\参数指定在该请求中读取或写入的数据元素的数目。\计数\值是位数(对于位数据类型)和字数(对于字数据类型)。
地址0xxxx -\计数\是要读取或写入的位数。 地址1xxxx -\计数\是要读取的位数。
地址3xxxx -\计数\是要读取的输入寄存器的字数。 地址4xxxx -\计数\是要读取或写入的保持寄存器的字数。
MBUS_MSG指令将读取或写入最大120个字或1920个位(240字节的数据)。\计数\的实际限值将取决于Modbus从站中的限制。
\参数是指向S7-200 CPU的V存储器中与读取或写入请求相关的数据的间接地址指针。对于读取请求,DataPtr应该指向用于存储从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存储器地址是寄存器的最高有效字节。高位编号的V存储器地址是寄存器的最低有效字节。下表显示了S7-200字节和字寻址如何与Modbus寄存器格式相对应。 S7-200 CPU存储器字节地址 地址 十六进制数据 VB200 VB201 VB202 VB203 VB204 VB205
S7-200 CPU存储器字地址 地址 VW200 VW202 VW204 十六进制数据 12 34 56 78 9A BC Modbus保持寄存器地址 地址 4001 4002 4003 十六进制数据 12 34 56 78 9A BC 17
12 34 56 78 9A BC
位数据(地址0xxxx和1xxxx)区域作为压缩字节被读取和写入,也就是说,每个数据字节内压缩8位。第一个数据字节的最低有效位是寻址的位号(参数\地址\。如果仅写入单个的位,则该位必须处于指向DataPtr的字节的最低有效位字节。压缩字节的格式(显示离散输入地址)
Vx.7-Vx.0
10008 10007 10006 10005 10004 10003 10002 10001 对于未在偶数字节边界上开始的位数据地址,与起始地址相关的位必须处于字节的最低有效位。参见如下在Modbus地址10004处开始的3位压缩字节格式实例。压缩字节的格式(在地址10004处开始的离散输入)
当写入到离散输出数据类型(线圈)时,用户必须在数据通过DataPtr传递到MBUS_MSG指令之前,将压缩字节内的位放置到正确的位位置中。
\完成\输出在发送请求和接收应答时关闭。\完成\输出在应答完成或MBUS_MSG指令因错误而中止时打开。
\错误\输出仅当\完成\输出打开时有效。请参阅Modbus主设备MBUS_MSG执行错误通过MBUS_MSG指令返回。低位编号的错误代码(1到8)是由MBUS_MSG指令检测到的错误。这些错误代码通常指示与MBUS_MSG指令的输入参数有关的问题,或接收来自从站的应答时出现的问题。奇偶校验和CRC错误指示存在应答但是数据未正确接收。这通常是由电气故障(例如连接有问题或者电噪声)引起的。高位编号的错误代码(从101开始)是由Modbus从站返回的错误。这些错误指示从站不支持所请求的功能,或者所请求的地址(或数据类型或地址范围)不被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开始的地址。实例程序数据传送
18
如果从MBUS_MSG指令返回一个错误,则程序将打开输出Q0.1和Q0.2。
19
通过每次扫描时调用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-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字)。
当第二条MBUS_MSG指令完成(\完成\从0变为1)后,清除对第二条MBUS_MSG指令的启用。
如果错误(MB1)不为零,则设置Q0.2以显示错误。
20
第三章 使用Modbus从站指令
前言:编程时使用SM0.1调用子程序MBUS_INIT进行初始化,使用SM0.0调用
MBUS_SLAVE,并指定相应参数。关于参数的详细说明,可在子程序的局部变量表中找到;欲在S7-200程序中使用Modbus从站指令,请执行以下步骤: 1. 在程序中插入MBUS_INIT指令,并仅限为一次扫描执行MBUS_INIT指令。您可以使用MBUS_INIT指令初始化或更改Modbus通讯参数。
当您插入MBUS_INIT指令时,会在程序中自动增加几个隐藏的子程序和中断例行程序。
2. 使用协议库存储器命令,为Modbus从站协议指令需要的V存储器指定一个起始地址。
3. 仅将一条MBUS_SLAVE指令放入程序中。每次扫描时均调用该指令,为所有收到的请求提供服务。 4.
连接S7-200上的端口0和Modbus主设备之间的通讯电缆。
当心:带有不同参考电位的互连装置会使不需要的电流从互连电缆中通过。这些不需要的电流会引起通讯错误或损坏装置。确保所有用通讯电缆连接的设备共享一个共用电路参考或单独隔离,以防不需要的电流通过。 累加器(AC0、AC1、AC2、AC3)被Modbus从站指令使用,在\交叉参考\列表中显示。执行之前,Modbus从站指令累加器中的数值被保存,并在Modbus从站指令完成之前还原至累加器,以确保在执行Modbus从站指令时累加器中的所有用户数据被保留。
Modbus从站协议指令支持Modbus RTU协议。这些指令使用S7-200的自由端口实用程序支持最常用的Modbus功能。详情见附表2从站功能码与说明。
21
1.MBUS_INIT指令(初始化从站)输入/输出 模式、地址、奇偶校验 波特、HoldStart 延时、MaxIQ、MaxAI、MaxHold 完成 错误
数据类型 字节 双字 字 布尔 字节 操作数 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 字 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指令。指令完成后立即设定\完成\位,才能继续执行下一条指令。在每次扫描且EN输入打开时执行该指令。应当在每次通讯状态改变时执行MBUS_INIT指令。因此,EN输入应当通过一个边缘检测元素用脉冲打开,或者仅在首次扫描时执行。
\模式\输入数值选择通讯协议:输入数值1将端口0指定给Modbus协议并启用协议;将输入数值0则将端口0指定给PPI,并禁用Modbus协议。
\波特\参数将波特率设为1200、2400、4800、9600、19200、38400、57600或115200。 \地址\参数将地址设为1和247之间(包括1和247)的数值。
\奇偶校验\参数被设为与Modbus主设备奇偶校验相匹配。可接受的数值为: 0-无奇偶校验 1-奇数校验
22
2-偶数校验
\延时\参数通过将指定的毫秒数增加至标准Modbus信息超时的方法延长标准Modbus信息结束超时条件。该参数的典型数值在有线网络上应为0。如果您在使用带有纠错功能的调制解调器,将延时设为50至100毫秒的数值。如果您在使用扩展频谱无线电,将延时设为10至100毫秒的数值。\延时\数值可以是0至32767毫秒。
MaxIQ参数将供Modbus地址0xxxx和1xxxx使用的I和Q点数设为0至128之间的数值。数值0禁止所有向输入和输出的读取。建议使用的MaxIQ数值是128,该数值可在S7-200中存取所有的I和Q点。
MaxAI参数将供Modbus地址3xxxx使用的字输入(AI)寄存器数目设为0至32之间的数值。数值0禁止模拟输入的读数。建议使用的MaxAI数值如下,这些数值可允许存取所有的S7-200模拟输入: 0用于CPU 221 16用于CPU 222
32用于CPU 224、224XP、226和226XM
MaxHold参数设定供Modbus地址4xxxx使用的V存储器中的字保持寄存器数目。例如,为了允许主设备存取2000个字节的V存储器,将MaxHold设为1000个字的数值(保持寄存器)。
HoldStart参数是V存储器中保持寄存器的起始地址。该数值一般被设为VB0,因此HoldStart参数被设为&VB0 (VB0地址)。其它V存储器地址可指定为保持寄存器的起始地址,以便在项目的其它地方使用VB0。Modbus主设备可存取V内存MaxHold个字数,从HoldStart开始。
注意:你选用的CPU的V存储区大小!CPU型号不同V数据存储区大小不同。应根据需要选择Modbus保持寄存器区域的大小。
MBUS_INIT指令完成时,\完成\输出打开。\错误\输出字节包含执行指令的结果。请参阅Modbus从站协议执行错误代码中可能因执行指令而产生的错误条件。
包含 Modbus RTU 从站指令库的项目编译、下载到CPU中后,在编程计算机(PG/PC)上运行一些Modbus 测试软件可以检验S7-200的ModbusRTU通信是否正常,这对查找故障点很有用。测试软件通过计算机串口(RS-232)和PC/PPI电缆连接CPU。如果必要,须将PC/PPI电缆设置在自由口通信方式。可到一些软件下载网站寻找类似软件,如 ModScan32 等。
23
NETWORK 1 // 首次扫描时初始化Modbus从站协议
// 将从站地址设为1,将端口0设为9600波特,将奇偶校验设为偶数,
// 允许存取所有的I、Q和AI数值,允许存取1000台保存寄存器(2000个字节)
// 从VB0开始。 LD SM0.1
CALL MBUS_INIT, 1, 1, 9600, 2, +0, +128, +32, +1000, &VB0, M0.1, MB1 NETWORK 2
// 每次扫描时执行Modbus从站协议 LD SM0.0
CALL MBUS_SLAVE, M0.2, MB2
24
2.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请求。在每次扫描且EN输入开启时执行该指令。MBUS_SLAVE指令无输入参数。
当MBUS_SLAVE指令对Modbus请求作出应答时,\完成\输出打开。如果没有需要服务的请求时,\完成\输出关闭。
\错误\输出包含执行该指令的结果。该输出只有在\完成\打开时才有效。如果\完成\关闭,错误参数不会改变。请参阅Modbus从站协议执行错误代码 中可能因执行该指令而导致的错误条件。
3.常问问题
①Modbus 从站的网络地址与 S7-200 的 CPU网络地址有什么关系? 没有关系。支持网络通信的通信协议必须有其自己的网络寻址规定。 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的 I/O 和数据存储区地址间有特定的对应关系。 有些设备表明它支持 Modbus RTU 通信协议,但也详细提供了读写数据的详细通信帧格式,其中包括如何指定 Modbus站的地址,需要读写数据类型、长度等等。数据帧有特定字节指出此指令读写的数据类型和地址,此字节的数据内容即所谓“功能码”,如功能 1指定读取单个/多个数字量输出点的值。 支持 Modbus 协议的设备或软件,使用时用户直接设置或看到的应当是 Modbus 数据地址。Modbus地址所访问的数据,是通过各种“功能”读写而来。功能码是 Modbus 地址的底层。如果 Modbus 通信的一方提供的所谓Modbus 协议只有功能码,则需要注意了解此功能号与 Modbus 地址间的对应关系。
③Modbus 指令库启动后,如何通过同一个通信端口进行 CPU监控?
25
Modbus 指令库使用的是 CPU 的自由口通信功能,工作在自由口模式下的通讯口不能使用 Micro/WIN 的 PPI编程通信监控。如果通信口都已经被占用,可以考虑:加一个通信模块(如 EM 277、CP 243-1、EM 241 等)扩展出一个编程通信口,中止自由口模式,可以将 CPU 上的模式开关从 RUN 拨到 STOP;或者保持处于 RUN 状态,用程序停止指令库的Modbus 模式(参见指令库应用)
④为何有些 HMI 软件使用 Modbus RTU读取S7-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可以支持上述模式,但是没有现成的指令库,需要用户自己编程。
⑦项目编译后为何出现很多错误?
使用指令库时,若编译后出现很多错误,一般是因为未指定库指令数据存储区。
⑧S7-200 CPU的Port1是否可以支持ModbusRTU协议? 可以。用户可以自己编程实现。
在S7-200的“Tips and Tricks”帮助文档中,Tip041是ModbusRTU从站程序,用户可以参考。
⑨S7-200是否可以组成Modbus RTU通信网络?如何组网?
S7-200可以组成RS-485基础上的Modbus RTU网络。如果通信对象是不同标准的通信口,可能还需要转换。
26
第四章 下载与通讯
因为200多作为从站,故本文只对其作为从站时进行分析。STEP 7 Micro/WIN 为
V3.2 或更高版本编程软件(已经安装了MODBUS协议库)、Modbus 测试软件(如 ModScan32 等)、PC、S7-200CPU、PC/PPI电缆、电源(线)、螺丝刀等必备工具。 1. 编译、下载
⑴编译:点击主菜单“PLC(P)”项下的“编译”或“全部编译”项(或点击“编译”图标又或点击“全部编译”
图标),对程序进行编译。如下图:
编译无误,准备下载程序只PLC。
⑵下载MODBUS协议到200CPU:点击“文件”项下面的“下载”(或点击“下载”标)将程序下载到PLC的CPU里面。会出现如下画面:
图
您可以在“选项”下面选择您需要下载的内容。设置好以后点击“下载”按钮。
27
看下载是否成功:
OK,没问题,下载成功了。接下来我没使用MODBUS测试软件测试一下通讯情况。
提示:重要错误信息主要是以下原因所致:
①PLC是否位于\停止\模式,检查PLC上的模式指示灯。如果PLC未设为\停止\模式,将模式开关拨到“停止”,或点击工具条中的\停止\
按钮,或选择PLC > 停止。
②如果STEP 7-Micro/WIN中用于您的PLC类型的数值与您实际使用的PLC不匹配,会显示以下警告信息:
28
欲纠正PLC类型选项,选择\否\,终止下载程序。从菜单条选择PLC > 类型,调出\类型\对话框。您可以从下拉列表方框选择纠正类型,或单击\读取PLC\按钮,由STEP 7-Micro/WIN自动读取正确的数值。 点击\确定\,确认PLC类型,并清除对话框。
③操作上的问题:查看编程电缆是否插紧、是否插对端口。
④如果没有技术上和操作上的问题,我们换硬件试一下,可能是编程电缆损坏。
当MODE=1(即端口0被MODBUS协议占用时)、PLC处于RUN模式时,我们是无法建立PLC与STEP 7 Micro/WIN的通讯的,如图:
将PLC打到STOP模式,就可以通讯上了,如图:
29
当MODE=0时,PLC处于RUN/STOP模式都可以正常通讯,这是为什么呢?
我们前面提到过:。当CPU端口被用于Modbus主设备协议通讯时,就无法用于任何其它用途,包括与STEP 7-Micro/WIN通讯。MBUS_CTRL指令控制将端口0分配给Modbus协议或PPI,Mode为1时分配给Modbus协议,为0是分配给PPI。将S7-200上的模式开关设为“STOP”,端口零也会被复位为PPI协议模式。
2. 通讯
通讯测试: ⑴以下为一例程:
网络1: 在第一个循环周期内初始化Modbus从站协议
Mode: 模式选择,启动/停止MODBUS,1=启动;0=停止 Address: 从站地址,MODBUS从站地址,取值1~247
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 MaxHold: 最大保持寄存器区,参与通信的V存储区字(VW)
HoldStart: 保持寄存器区起始地址,以&VBx指定(间接寻址方式) Done: 初始化完成标志,成功初始化后置1 Error: 初始化错误代码 在本例子中,设置从站地址为12 Port0 通讯波特率为9600 无校验
可以使用的S7-200最大数字量输入输出点数为128
30
可以使用的S7-200最大模拟量输入寄存器字数为32
可以使用的V区寄存器地址字数为1000, 起始地址为VB0
注意:本例子中,Modbus RTU 从站指令使用的库存储为VB2000---VB2779,这段寄存器地址不能再被程序中的任何指令使用,包括MBUS_INIT 和 MBUS_SLAVE 指令在内。
符号 First_Scan_On 地址 SM0.1 注释 仅第一个扫描周期中接通为 ON 网络2:在每个循环周期内执行Modbus 从站协议
Done: MODBUS执行,通信中时置1,无 MODBUS 通信活动时为 0 Error: 错误代码:0=无错误
符号 Always_On 地址 SM0.0 注释 始终接通为 ON ⑵编辑好程序,下载至PLC,准备好串口线,链接PLC与PC,PC侧位232,PLC侧接485九针的3和8。打开串口测试工具,对通讯参数进行设置(与PLC程序中设置相符):
31
PLC参数为:地址12,波特率9600,8位数据位,一个停止位,无校验。 发送一组数据为:0C 03 01 16 00 10 A5 23,收到数据如下图:
32
⑶读输入位状态:读输入位状态的功能码为02,上例程的地址为12(0C),起始地址为0 发送数据0C 02 00 00 00 10 78 DB,点输入0.0——1.4,收到数据如下表: 输入点 无输入点 I0.0 I0.1 I0.0与I0.1 I0.2 I0.3 I0.4 I0.5 I0.6 I0.7 I1.0 I1.1 I1.2 I1.3 I0.4 回收报文分析: 0C 02 02 00 00 94 79 0C 02 02 01 00 95 E9 0C 02 02 02 00 95 19 0C 02 02 03 00 94 89 0C 02 02 04 00 96 B9 0C 02 02 08 00 93 B9 回收数据 0C 02 02 00 00 94 79 0C 02 02 01 00 95 E9 0C 02 02 02 00 95 19 0C 02 02 03 00 94 89 0C 02 02 04 00 96 B9 0C 02 02 08 00 93 B9 0C 02 02 10 00 99 B9 0C 02 02 20 00 8D B9 0C 02 02 40 00 A5 B9 0C 02 02 80 00 F5 B9 0C 02 02 00 01 55 B9 0C 02 02 00 02 15 B8 0C 02 02 00 04 95 BA 0C 02 02 00 08 95 BF 0C 02 02 00 10 95 B5 33
0C为从站地址(对应程序里的12);02为功能码(读输入);第二个02为Byte Count(本例中为02,后面的数据就是00 00或01 00又或04 00,如果为03后面的数据就应该是00 00 00或01 00 00又或04 00 00);数据位00 00表示无输入,01 00表示I0.0输入接通,02 00表示I0.1输入接通,03 00表示I0.0I与0.1都处于接通状态,以此类推,每个(组)输入都有唯一的回复数据;后面两位为CRC校验位。
⑷读输出位状态:读输出位状态的功能码为01,上例程的地址为12(0C),起始地址为0 发送数据0c 01 00 00 00 10 3C DB。这里我添加了一下三个简单的程序段I0.0、I0.1、I0.2分别对应三个输出Q0.0、Q0.1、Q0.2。下载程序,点击输入I0.0、I0.1、I0.2,分别查询对应的Q0.0、Q0.1、Q0.2状态:
输入点 无输入点 I0.0 I0.1 I0.0与I0.1 I0.2 I0.0与I0.2 I0.1与I0.2 输出点 无输出点状态 Q0.0 Q0.1 Q0.0与Q0.1 Q0.2 回收数据 0C 01 02 00 00 94 3D 0C 01 02 01 00 95 AD 0C 01 02 02 00 95 5D 0C 01 02 03 00 94 CD 0C 01 02 04 00 96 FD 0C 01 02 05 00 97 6D 0C 01 02 06 00 97 9D 对输出信息的回复分析与输入相同,原理也一样,这里不做详述,请读者自行分析。
Modbus RTU 从站指令使用的库存储为VBxxxx--VBxxxxx,这段寄存器地址不能再被程序中的任何指令使用,包括MBUS_INIT 和 MBUS_SLAVE 指令在内。若通讯测试时出现通讯不上的现象,请调整此范围。如果不改不行,说明该区域是被占用的,必须进行修改。(CPU226数据存储区共10240Bytes)
注意:由子程序参数HoldStart和MaxHold指定的保持寄存器区,是在S7-200 CPU的V数据存储区中分配,此数据区不能和库指令数据区有任何重叠,否则在
34
运行时会产生错误,不能正常通信。注意Modbus 中的保持寄存器区按“字”寻址,即MaxHold规定的是VW而不是VB的个数。
在例子中,规定了 Modbus 保持寄存器区从 VB0 开始(HoldStart = VB0),并且保持寄存器为1000个字(MaxHold=1000),因保持寄存器以字(两个字节)为单位,实际上这个通信缓冲区占用了VB0~VB1999共2000个字节。因此分配库指令保留数据区时至少要从VB2000开始。当然保持区不一定要从VB0开始。
注意:你选用的CPU的V存储区大小!CPU型号不同V数据存储区大小不同。应根据需要选择Modbus保持寄存器区域的大小。
一言概括就是“库存储区必须是独立的一段区域”
附表:
表1:主从站指令配置表
35
正在阅读:
Unit 2 What time do you go to school(Section A 1a-3c)05-24
国土资源部关于严格规范城乡建设用地增减挂钩试点工作的通知 国05-28
九年级科学期中模拟卷(1)06-18
跨线桥专项施工方案 - 图文06-30
经济学基础2005及答案200502-02
建筑物消防员职业技能鉴定考试指导手册带答案版(基础知识、初级技能)01-19
防爆等级说明05-05
语文S版六年级上册导学案10-26
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 示例
- 图文
- 应用
- MODBUS
- 详细
- S7200
- 新标准大学英语视听说教程2(听力材料文本1-10单元)1
- 人教课标版小学一年级语文下册 第二单元 教学设计
- 预防未成年人溺水法定监护人责任承诺书
- 在学雷锋系列活动启动仪式上的讲话
- 12项一般健康问卷(GHQ-12)
- 《旅游景区服务与业务管理》试题3
- 广西施组
- 10kV配电变压器引线设备线夹温度异常现象分析及解决措施
- LD32t-22.5m(欧式)计算书
- 2006年4月物流数学试题参考答案 - 图文
- 网考写作题目整理(201310)
- 第2章 - 核酸化学
- 民法综合测试题
- 0330401《数字影音制作》课程标准201509
- 低烟无卤力缆企业标准7月5日完成
- 网贷基金的操作模式及法律风险分析
- 供电公司企业文化示范点各类资料
- 高产早熟水稻品种的选育
- 煤矿安全生产标准化知识竞赛用题
- 《高数(上)》单元训练题(2016版)