200 Smart Modbus TCP通信详解.docx

上传人:b****5 文档编号:5665271 上传时间:2022-12-31 格式:DOCX 页数:33 大小:1.29MB
下载 相关 举报
200 Smart Modbus TCP通信详解.docx_第1页
第1页 / 共33页
200 Smart Modbus TCP通信详解.docx_第2页
第2页 / 共33页
200 Smart Modbus TCP通信详解.docx_第3页
第3页 / 共33页
200 Smart Modbus TCP通信详解.docx_第4页
第4页 / 共33页
200 Smart Modbus TCP通信详解.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

200 Smart Modbus TCP通信详解.docx

《200 Smart Modbus TCP通信详解.docx》由会员分享,可在线阅读,更多相关《200 Smart Modbus TCP通信详解.docx(33页珍藏版)》请在冰豆网上搜索。

200 Smart Modbus TCP通信详解.docx

200SmartModbusTCP通信详解

200SmartModbusTCP通信详解

 

文章内容概述:

ØModbusTCP通信概述

ØModbusTCP客户端配置

ØModbusTCP服务器配置

ØModbusTCP轮询例程

ØS7-200SMARTCPU与调试助手进行ModbusTCP通信例程

Ø常见问题

1.ModbusTCP通信概述

ModbusTCP通信是通过工业以太网TCP/IP网络传输的Modbus通信。

S7-200SMART采用客户端-服务器方法,Modbus客户端设备通过该方法发起与Modbus服务器设备的TCP/IP连接。

建立连接后,客户端向服务器发出请求,服务器将响应客户端的请求。

客户端可请求从服务器设备读取部分存储器,或将一定数量的数据写入服务器设备的存储器。

如果请求有效,则服务器将响应该请求;如果请求无效,则会回复错误消息。

S7-200SMART支持做ModbusTCP的客户端或者服务器,可以实现PLC之间通信,也可以实现与支持此通信协议的第三方设备通信。

通信伙伴数量比较多的时候,可以使用交换机,扩展以太网接口,如图1.通信功能

图1.通信功能

STEP7-Micro/WINSMART从V2.4版本开始,软件中直接集成ModbusTCP库指令。

安装软件后,ModbusTCP指令位于STEP7-Micro/WIN SMART项目树中“指令”文件夹的“库”文件夹中。

如图2.ModbusTCP库指令所示。

指令分为客户端和服务器两种,目前指令版本为V1.0。

图2.ModbusTCP库指令

ModbusTCP客户端:

✓Modbus客户端指令MBUS_CLIENT使用CPU的以下资源:

✓占用主动连接资源。

最多有8个主动连接资源

✓连接多个服务器伙伴时,自动生成连接ID。

ModbusTCP客户端使用以下程序实体:

✓1个子程序

✓2849个字节的程序空间

✓V存储器的638字节模块,用于指令符号

ModbusTCP服务器:

✓Modbus服务器指令MBUS_SERVER使用CPU的以下资源

✓占用被动连接资源。

最多有8个被动连接资源

✓连接多个客户端伙伴时,自动生成连接ID。

ModbusTCP服务器使用下列程序实体:

✓1个子程序

✓2969个字节的程序空间

✓V存储器的445字节模块,用于指令符号

指令库编程后,必须从STEP7-Micro/WINSMART的为使用的指令分配库存储区地址。

2.ModbusTCP客户端配置

(1)S7-200SMARTModbusTCP客户端指令

STEP7-Micro/WINSMART从V2.4版本开始,软件中直接集成ModbusTCP库指令,无需单独安装或者购买。

安装软件后,ModbusTCP指令位于STEP7-Micro/WIN SMART项目树中“指令”文件夹的“库”文件夹中。

如图1.ModbusTCP库指令所示。

指令分为客户端和服务器两种,目前指令版本为V1.0。

客户端指令会占用开放式用户通信资源主动连接,最多8个;服务器指令会占用开放式用户通信资源的被动连接资源,最多也是8个。

图1.ModbusTCP库指令

(2)实验环境及通信任务

下面以两台S7-200SMART之间进行ModbusTCP通信为例,详细阐述客户端与服务器侧如何编程及通信的过程。

具体的实验环境见表1.;通信任务见表2:

表1.实验环境

操作系统

WIN7SP1专业版64位

编程软件

STEP7-Micro/WINSMARTV2.4版本

硬件

SR60:

6ES7288-1SR60-0AA0固件:

V2.4版本

ST20:

6ES7288-1ST20-0AA0固件:

V2.4版本

交换机:

CSM1276GK7277-1AA10-0AA0

表2.通信任务

硬件

通信角色

IP地址

端口号

读/写

数据区域

SR60

客户端

192.168.0.60

0

VB20-VB31

ST20

服务器

192.168.0.20

502

响应

VB0-VB11

(3)客户端侧指令编程

a.系统块中设置客户端的IP地址,以确保IP地址设置无误。

此步骤为可选,如果确定IP地址设置无误,可忽略此步骤。

设置方法如图2.所示。

图2.系统块设置IP地址

b.鼠标点击MAIN主程序的程序段1的编程区域,从库文件夹下找到ModbusTCP客户端指令MBUS_CLIENT,鼠标双击,指令出现在程序段1中,操作如图3.所示。

图3.添加客户端指令

c.填写客户端指令参数,如图4.所示。

图4.填写客户端参数

程序块具体参数详细解释介绍见表3.

参数及类型

数据类型

说明

Req

IN

BOOL

=1:

表示向服务器发送Modbus请求

Connect

IN

BOOL

=1:

尝试与分配的IP地址及端口号建立连接;

=0:

尝试断开已经建立的连接,忽略Req的任何请求

IPAddr1-4

IN

BYTE

填写ModbusTCP服务器的IP地址IPAddr1-4为高到低字节

IP_Port

IN

BYTE

填写ModbusTCP服务器的端口号

RW

IN

BYTE

指定操作模式=0:

读;=1写

Addr

IN

DWORD

要进行读写的参数的Modbus起始地址

Count

IN

INT

要进行读写的参数数据长度;

数字量输入/输出Count=1表示1bit,最大1920位

对于模拟量输入和保持寄存器,最大Count值为120字。

DataPtr

IN_OUT

DWORD

数据寄存器地址指针,指向本地用于读/写操作的数据地址区域的首地址

Done

OUT

BOOL

TRUE:

以下任一条件时为真:

客户端已与服务器建立连接;客户端已与服务器断开连接;客户端已接收Modbus响应;发生错误

FALSE:

客户端正忙于建立连接或等待来自服务器的Modbus响应。

Error

OUT

BOOL

出现错误,仅一个周期有效

d.鼠标选中程序块文件夹,单击右键,下拉菜单中选择库存储器,如图5.所示。

图5.点击库存储器

e.在库存储区分配对话框中手动输入存储区的起始地址。

此实例为VB5000开始,以使指令库可以正常工作。

确保库存储区与程序中其他已使用的地址不冲突。

使用建议地址无法确定是否有地址重叠,所以推荐手动输入正确的库存储区首地址。

如图6.所示。

图6.库存储区地址分配

f.编译项目,下载程序。

(4)通信测试结果

将M0.0置位为1,然后在状态图表中创建变量,VW20-VW30共6个字,监视值如图7.所示。

图7.读取服务器数据

(5)关于Modbus地址与CPU中数据区域地址对应关系说明

S7-200SMART做ModbusTCP通信,可以支持的功能码及功能描述及所占用的地址区,如表4.所示。

客户端会主动的发送请求,服务器响应。

在通信指令填写参数中没有直接填写功能码,而是通过多个参数填写共同确定功能码的。

表4.功能码概况说明

功能码(十进制)

功能描述

RW

Addr

Count

CPU地址

01

读数字量输出位

0

00001-09999

1-1920位

Q0.0-1151.7

02

读数字量输入位

0

10001-19999

1-1920位

I0.0-1151.7

03

读寄存器字

0

40001-49999

400001-465535

1-120字

V区

04

读模拟量输入字

0

30001-39999

1-120字

AIW0-AIW110

05

写数字量输出单个位

1

00001-09999

1位

Q0.0-Q1151.7

06

写寄存器单个字

1

40001-49999

400001-465535

1个字

V区

15

写数字量输出多个位

1

00001-09999

1-1920位

Q0.0-1151.7

16

写寄存器多个字

1

40001-49999

400001-465535

1-120字

V区

举例:

和ModbusTCP服务器交换数据参数支持功能码:

03,在客户端指令中设置两个参数确定03功能码:

RW=0:

确定读取数据,(筛选出可能会使用的功能码:

01,02,03,04),

Addr:

40001-49999/400001-465535,表示交换数据为寄存器类型的数据。

3.ModbusTCP服务器配置

(1)S7-200SMARTModbusTCP服务器指令

STEP7-Micro/WINSMART从V2.4版本开始,软件中直接集成ModbusTCP库指令,无需单独安装或者购买。

安装软件后,ModbusTCP指令位于STEP7-Micro/WIN SMART项目树中“指令”文件夹的“库”文件夹中。

如图1.ModbusTCP库指令所示。

指令分为客户端和服务器两种,目前指令版本为V1.0。

客户端指令会占用开放式用户通信资源主动连接,最多8个;服务器指令会占用开放式用户通信资源的被动连接资源,最多也是8个。

图1.ModbusTCP库指令

(2)实验环境及通信任务

下面以两台S7-200SMART之间进行ModbusTCP通信为例,详细阐述客户端与服务器侧如何编程及通信的过程。

具体的实验环境见表1.;通信任务见表2:

表1.实验环境

操作系统

WIN7SP1专业版64位

编程软件

STEP7-Micro/WINSMARTV2.4版本

硬件

SR60:

6ES7288-1SR60-0AA0固件:

V2.4版本

ST20:

6ES7288-1ST20-0AA0固件:

V2.4版本

交换机:

CSM1276GK7277-1AA10-0AA0

表2.通信任务

硬件

通信角色

IP地址

端口号

读/写

数据区域

SR60

客户端

192.168.0.60

0

VB20-VB31

ST20

服务器

192.168.0.20

502

响应

VB0-VB11

(3)服务器侧指令编程

a.系统块中设置服务器的IP地址,以确保IP地址设置无误。

此步骤为可选,如果确定IP地址设置无误,可忽略此步骤。

设置方法如图2.所示。

图2.系统块设置IP地址

b.鼠标点击MAIN主程序的程序段1的编程区域,从库文件夹下找到ModbusTCP服务器指令MBUS_SERVER,鼠标双击,指令出现在程序段1中,操作如图3.所示。

图3.添加服务器指令

c.填写服务器指令参数,如图4.所示。

图4.填写服务器参数

参数及类型

数据类型

说明

Connect

IN

BOOL

=1:

服务器接受来自客户端的请求;=0:

服务器可以断开已经建立的连接

IP_Port

IN

WORD

服务器本地端口号

MaxIQ

IN

WORD

对应数字量输入/输出点(对应Modbus地址参数0xxxx或者1xxxx)

可设置范围:

0-256,

=0表示禁用对输入和输出的所有读取和写入。

建议将MaxIQ值设置为256。

MaxAI

IN

WORD

对应模拟量输入参数(对应Modbus地址参数3xxxx)

可设置范围:

0-56。

=0表示禁用对模拟量输入的读取。

要允许访问所有CPU模拟量输入,MaxAI的建议值如下:

对于CPUCR40和CR60,为0

对于所有其它CPU型号,为56

MaxHold

IN

WORD

用于Modbus地址4xxxx或4yyyyy的V存储器中的字保持寄存器数。

HoldStart

IN

Dword

指向V存储器中保持寄存器起始位置的指针

Done

OUT

BOOL

TRUE:

以下任一条件时为真:

客户端已与服务器建立连接;客户端已与服务器断开连接;客户端已接收Modbus响应;发生错误

FALSE:

客户端正忙于建立连接或等待来自服务器的Modbus响应。

Error

OUT

BOOL

出现错误,仅一个周期有效

 

d.鼠标选中程序块文件夹,单击右键,下拉菜单中选择库存储器,如图5.所示。

图5.点击库存储器

e.在库存储区分配对话框中手动输入存储区的起始地址。

此实例为VB5000开始,以使指令库可以正常工作。

确保库存储区与程序中其他已使用的地址不冲突。

使用建议地址无法确定是否有地址重叠,所以推荐手动输入正确的库存储区首地址。

如图6.所示。

图6.库存储区地址分配

f.编译项目,下载程序。

✓通信测试结果

由于客户端要读取服务器的数据,在状态图表中修改当前值,如图7.所示

图7.状态图表赋值

4. ModbusTCP轮询例程

(1)S7-200SMART多请求处理

S7-200SMARTModbusTCP可支持多个连接,最多可达PLC允许的开放式用户通信连接的最大数(八个主动(客户端)连接和八个被动(服务器)连接)。

不可避免的会出现以下情况:

a.S7-200SMART作为服务器由多个客户端访问

b.S7-200SMART作为客户端访问多个服务器

下面就这种多请求处理的情况作相关的介绍。

S7-200SMART作为服务器由多个客户端访问:

S7-200SMARTCPU作为服务器由多个客户端访问时,需要S7-200SMARTCPU多次调用ModbusTCP服务器库指令,并且每个服务器需要配置不同的Port口,如图1所示。

图1.S7-200SMART多服务器例程

注意:

✓对应的库存储器地址需要使用建议地址不能重复使用。

✓S7-200SMART的开放式以太网通讯资源是8个主动资源8个被动资源。

✓端口号必须在1到49151的范围内。

建议端口号在2000到5000。

✓该例程使用STEP7-Micro/WINSMARTV2.4编写,使用硬件是ST60:

6ES7288-1ST60-0AA0固件:

V2.4版本

✓该例程ModbusTCP服务器,响应2个客户端请求,访问不同的V存储区

(2)S7-200SMART作为客户端访问多个服务器

S7-200SMARTCPU作为客户端访问多个服务器,服务器连接参数必须具有不同的IPAddr或IP_Port输入参数。

情景1:

S7-200SMART作为客户端访问多个服务器:

解决方法:

确保连接富余,可以建立多个不同的连接发送请求,调用"MBUS_CLIENT",S7-200SMARTCPU内通过设置的不同的远程IP地址、端口号尝试建立连接。

该情景的相关步骤用户根据以上原则,自行编程即可。

情景2:

S7-200SMART作为客户端,访问同一个服务器,需要进行多次读写操作:

解决方法:

借助于同一个连接,考虑客户端做轮询,远程IP地址、端口号一致,分时调用“MBUS_CLIENT”指令,具体参考下方的轮询通信例程。

轮询原则:

在任意时间,只能有一个客户机请求处于激活状态,在一个请求完成执行后,下一个请求再开始执行,循环处理。

(3)ModbusTCP客户端轮询例程

本例程中使用done位做轮询,相比于用定时器做轮询,不会因为定时触发时间设置的过小导致两个指令冲突,或者定时触发时间设置过大增加通信时间的问题。

注意:

a.该例程使用STEP7-Micro/WINSMARTV2.4编写,使用硬件是ST60:

6ES7288-1ST60-0AA0固件:

V2.4版本,IP地址:

192.168.0.121

b.该例程仅访问一个服务器,两个MBUS_CLIENT指令轮询执行写和读,写入和读取服务器寄存器类型地址:

40001-40002共2个字,将需要写入服务器的数据放在VB700-VB703区域中,从服务器中读取的数据存储在本地的VB704-VB707区域中。

ModbusTCP客户端轮询例程:

为配合上方的客户端轮询程序,服务器的程序可参考下面的例程。

注意:

a.该例程使用STEP7-Micro/WINSMARTV2.4编写,使用硬件是SR60:

6ES7288-1SR60-0AA0固件:

V2.4版本,IP地址:

192.168.0.113

b.该例程ModbusTCP服务器,响应客户端请求,将数据存储在VB0-VB3的区域中,等待客户端写入和读取。

ModbusTCP服务器轮询例程:

5.S7-200SMART与调试助手之间ModbusTCP通信

STEP7-Micro/WINSMART从V2.4版本开始,软件中直接集成ModbusTCP库指令,无需单独安装。

安装软件后,ModbusTCP指令位于STEP7-Micro/WIN SMART项目树中“指令”文件夹的“库”文件夹中。

如图1.ModbusTCP库指令所示。

指令分为客户端和服务器两种,目前指令版本为V1.0。

客户端指令会占用开放式用户通信资源主动连接,最多8个;服务器指令会占用开放式用户通信资源的被动连接资源,最多也是8个。

图1.ModbusTCP库指令

(1)硬件和软件需求及所完成的通信任务

硬件:

1PC(带以太网卡)(IP地址192.168.0.1;子网掩码255.255.255.0)

2S7-200SMARTCPU(固件版本V2.5)(IP地址192.168.0.20;子网掩码255.255.255.0)

3TP以太网电缆

软件:

1STEP7Micro/WINSMART(软件版本V2.5)

2ModScan32

3ModbusSlave

所完成的通信任务:

1ModScan32接收6个字节数据:

<--(S7-200SMART侧做服务器响应)VW0~VW10

2ModbusSlave接收6个字节数据:

<--(S7-200SMART侧做客户端写) VW20~VW30

(2)ModScan32 (S7200SMART做服务器)

a.打开ModScan32软件

b.点击“Setup”---“DisplayDefinition”---设定“PointType”(本例程以保持型寄存器为例)---“Length”为6

如图1所示,设置完成后点击OK

图1.DisplayDefinition

c.点击“Connection”----“Connect”

图2. 建立连接

1Connect选择RemoteTCP/IPServer;

2设置IPAddress和端口号与cpu中设置的保持一致。

(3)S7-200SMART侧编程

a.打开STEP7Micro/WINSMART>项目树>指令树>库>ModbusTCPServer(v1.0),调用MBUS_SERVER,如图5、图6所示。

图5.ModbusTCPServer指令库

图6.MBUS_SERVER

b.鼠标选中程序块文件夹,单击右键,下拉菜单中选择库存储器,如图7所示。

图7.点击库存储器

c.在库存储区分配对话框中手动输入存储区的起始地址。

此实例为VB5000开始,以使指令库可以正常工作。

确保库存储区与程序中其他已使用的地址不冲突。

使用建议地址无法确定是否有地址重叠,所以推荐手动输入正确的库存储区首地址。

如图8所示。

图8.库存储区地址分配

d.编译项目,下载程序。

通信结果如下:

图9.测试结果

(3)ModbusSlave (S7200SMART做客户端)

a.打开ModbusSlave软件

b.点击"Setup"---"Slave Definition"---设定Function”(本例程以保持型寄存器为例)---"Quantity"为6---"Display"为Signed

如图10所示,设置完成后点击OK

图10.SlaveDefinition

c.点击"Connection"----"Connect"

图11. 建立连接

①Connect选择TCP/IP;

②设置TCP/IPPort为502与cpu中设置的保持一致,勾选IgnoreUnitID。

(4)S7-200SMART侧编程

a.打开STEP7Micro/WINSMART>项目树>指令树>库>ModbusTCPClient(v1.4),调用MBUS_CLIENT,如图12所示。

图12.MBUS_CLIENT

b.鼠标选中程序块文件夹,单击右键,下拉菜单中选择库存储器,如图13所示。

图13.点击库存储器

c.在库存储区分配对话框中手动输入存储区的起始地址。

此实例为VB5000开始,以使指令库可以正常工作。

确保库存储区与程序中其他已使用的地址不冲突。

使用建议地址无法确定是否有地址重叠,所以推荐手动输入正确的库存储区首地址。

如图14所示。

图14.库存储区地址分配

d.编译项目,下载程序。

通信测试结果:

在状态图表中创建变量,VW20-VW30共6个字,赋值后,将M0.0置位为1,监视值如图15所示。

图15.读取服务器数据

6.常见问题

(1)如何判断ModbusTCP连接是否建立?

答:

进行ModbusTCP通信,需要建立连接,

S7-200SMARTCPU作为ModbusTCP客户端时:

通过ModbusTCPClient指令MBUS_CLIENT的符号表中的mConnected参数来判断,如图1.所示

mConnected=1表示已经建立连接,mConnected=0表示尚未建立连接

图1.mConnected判断连接状态

S7-200SMARTCPU作为ModbusTCP服务器时:

通过ModbusTCPServer指令MBUS_SERVER的符号表中的mConnected参数来判断,如图2.所示

mConnected=1表示已经建立连接,mConnected=0表示尚未建立连接.

图2.mConnected判断连接状态

注意:

当PLC内存在多个客户端或者多个服务器时,不建议参考该状态点。

(2)如何查看错误代码?

答:

出现错误时,MBUS_CLIENT指令输出参数Done会为1,但是,Done在连接建立完成,连接断开,响应完成时都会出现置位为1的情况。

出现错误时,还有Error字节会显现出错误代码,仅保留一个周期时间。

综上所述,查看错误代码,可以按照图3.所示的方法进行。

图3.查看错误代码

(3)进行ModbusTCP通信寄存器类型数据,数据量大超过120个字如何处理?

答:

如果

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1