要实现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)