当前位置:文档之家› Modbus RTU通讯协议

Modbus RTU通讯协议

要实现Modbus RTU通信,

一、需要STEP 7-Micro/WIN32 V3.2以上版本的编程软件,而且须安装STEP 7-Micro/WIN32 V3.2 Instruction Library(指令库)。Modbus RTU功能是通过指令库中预先编好的程序功能块实现的。 Modbus RTU从站指令库只支持CPU上的通信0口(Port0)

基本步骤:

1. 检查Micro/WIN的软件版本,应当是STEP 7-Micro/WIN V3.2以上版本。

2. 检查Micro/WIN的指令树中是否存在Modbus RTU从站指令库(图1),库中应当

包括MBUS_INIT和MBUS_SLAVE两个子程序。

如果没有,须安装Micro/WIN32 V3.2的Instruction Library(指令库)软件包;

1. 西门子编程时使用SM0.1调用子程序MBUS_INIT进行初始化,使用SM0.0调用

MBUS_SLAVE,并指定相应参数。

关于参数的详细说明,可在子程序的局部变量表中找到;

调用Modbus RTU通信指令库图中参数意义如下:

a. 模式选择:启动/停止Modbus,1=启动;0=停止

b. 从站地址:Modbus从站地址,取值1~247

c. 波特率:可选1200,2400,4800,9600,19200,38400,57600,115200

d. 奇偶校验:0=无校验;1=奇校验;2=偶校验

e. 延时:附加字符间延时,缺省值为0

f. 最大I/Q位:参与通信的最大I/O点数,S7-200的I/O映像区为128/128,

缺省值为128

g. 最大AI字数:参与通信的最大AI通道数,可为16或32

h. 最大保持寄存器区:参与通信的V存储区字(VW)

i. 保持寄存器区起始地址:以&VBx指定(间接寻址方式)

j. 初始化完成标志:成功初始化后置1

k. 初始化错误代码

l. Modbus执行:通信中时置1,无Modbus 通信活动时为0。

m. 错误代码:0=无错误

2. 在CPU的V数据区中分配库指令数据区(Library Memory);

3. 如有必要,使用主站软件测试。

注意:由子程序参数HoldStart和MaxHold指定的保持寄存器区,是在S7-200 CPU的V 数据存储区中分配,

此数据区不能和库指令数据区有任何重叠,否则在运行时会产生错误,不能正常通信。

注意Modbus 中的保持寄存器区按“字”寻址,即MaxHold规定的是VW而不是VB的个数。

在图2的例子中,规定了Modbus 保持寄存器区从VB0 开始(HoldStart =VB0),并且保持寄存器为1000个字(MaxHold=1000),

因保持寄存器以字(两个字节)为单位,实际上这个通信缓冲区占用了VB0~VB1999共2000个字节。

因此分配库指令保留数据区时至少要从VB2000开始。当然保持区不一定要从VB0开始。

注意:你选用的CPU的V存储区大小!CPU型号不同V数据存储区大小不同。应根据需要选择Modbus保持寄存器区域的大小。

包含Modbus RTU 从站指令库的西门子plc项目编译、下载到CPU中后,在编程计算机(PG/PC)上运行一些Modbus

测试软件可以检验S7-200的Modbus RTU通信是否正常,这对查找故障点很有用。

测试软件通过计算机串口(RS-232)和PC/PPI电缆连接CPU。如果必要,须将PC/PPI 电缆设置在自由口通信方式。

可到一些软件下载网站寻找类似软件,如ModScan32 等。

二、PC机上MScomm控件的串行通信

要完成VB与PLC等设备的串行通信要用到MScomm控件,在此有必要对该控件作较详细的说明。Mscomm是一个非标准控件,需要要手动添加许多项目,其步骤如下。

1)选择菜单的【工程】

2)选择【部件】#p#分页标题#e#

3)在弹出的对话框中做如图7的选择。

图7 对话框界面

4)如图8所示,在部件选项卡就会出现MScomm控件。

图8 MScomm控件

5)基本属性

三、MODBUS ASCII (16进制码都要转换成ASCII才能发送)

Modbus 分为ASCII和RTU两种,ASCII采用的格式和校验相对简单,本文采用ASCII 格式,并仅对使用的功能码进行说明,更多的信息,请参看协议的详细说明。

1)通信格式

LRC算法:ADR H+CMD H+DATA H,然后取2的补码。

4.2 VB与PLC通信的实现

以下举例说明现场设备与PLC通信的实现。

1)控制要求:控制PLC的起动、停止,并显示运行状态(绿色为运行,红色为停止);能够用交替型按钮控制Y0,Y1,并用指示灯显示Y0,Y1状态(绿色为运行,红色为停止);能够对D256,D512两个寄存器进行数值写入的操作。

2)实现思路:PLC起动停止的标志位为M1072,查DVP协议,知道地址为H0C30,按功能码01操作;同样Y0,Y1的地址分别为H0500,H0501。写入FF00为ON,0000为OFF,按功能码05操作;D256,D512地址分别为H1100,H1200,按功能码06操作即可。

3)VB接口的设计如图10所示。

图10 监控程序界面

用按钮控制PLC的起动停止,Y0、Y1的ON/OFF及D256、D512写完数据的发送;用Shape组件做指示灯,表示PLC的运行状态和Y的状态;用timer 组件不停的读取M1072的状态,以判断PLC的运行情况;用MScomm控件实现PC与PLC的通信。

4)编程实现的代码构成

(1) LRC算法校验的实现

Public Function LRC(str As String) As String

c = 0

l = Len(str)

For c = c + 1 To l

c_data = Mid$(str, c, 2)

相关主题