2024年4月17日发(作者:)
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。
"首次"参数应该在有新请求要发送时才打开以进行一次扫描。"首次"输入应当通
过一个边沿检测元素(例如上升沿)打开,这将导致请求被传送一次。参见实例程
序。
"从站"参数是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从站中的限制。
"DataPtr"参数是指向S7-200 CPU的V存储器中与读取或写入请求相关的数据的间接地址指针。对于读取请求,DataPtr应
该指向用于存储从Modbus从站读取的数据的第一个CPU存储器位置。对于写入请求,DataPtr应该指向要发送到Modbus从
站的数据的第一个CPU存储器位置。
DataPtr值作为间接地址指针传递到MBUS_MSG。例如,如果要写入Modbus从站的数据从S7-200 CPU中的地址VW200开
始,则DataPtr的数值将会是&VB200 (VB200的地址)。指针必须始终是VB类型,即使它们指向字数据。
(4xxxx)(3xxxx)(216)S7-200 CPUModbus
保持寄存器(地址4xxxx)和输入寄存器(地址3xxxx)的值是字(2个字节或16位)。S7-200 CPU字的格式与Modbus寄存器相同。
低位编号的V存储器地址是寄存器的最高有效字节。高位编号的V存储器地址是寄存器的最低有效字节。下表显示了S7-200
字节和字寻址如何与Modbus寄存器格式相对应。
S7-200 CPU存储器
字节地址
地址
VB200
VB201
VB202
VB203
VB204
VB205
十六进制
数据
12
34
56
78
9A
BC
VW2049A BC40039A BC
VW20256 78400256 78
S7-200 CPU存储器
字地址
地址
VW200
十六进制
数据
12 34
Modbus
保持寄存器地址
地址
4001
十六进制数
据
12 34
位数据(地址0xxxx和1xxxx)区域作为压缩字节被读取和写入,也就是说,每个数据字节内压缩8位。第一个数据字节的最低
有效位是寻址的位号(参数"地址")。如果仅写入单个的位,则该位必须处于指向DataPtr的字节的最低有效位字节。
压缩字节的格式(显示离散输入地址)
对于未在偶数字节边界上开始的位数据地址,与起始地址相关的位必须处于字节的最低有效位。参见如下在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开始的地址。
实例程序数据传送
S7-200 CPU
存储器
Modbus从站
保持寄存器
如果从MBUS_MSG指令返回一个错误,则程序将打开输出Q0.1和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ٛ
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以显
示错误。
另请参阅:
Modbus主设备寻址
MBUS_CTRL指令
Modbus主设备MBUS_MSG执行错误
Modbus主设备高级用户信息


发布评论