首页 > 编程知识 正文

s7200modbus视频(modbustcp通讯协议实例)

时间:2023-05-04 00:24:51 阅读:98502 作者:3943

目的:

本文对Modbus协议有一个基本的了解,使用S7-200 SMART和S7-1200进行Modbus TCP通信。1.概观

1979年Modicon公司(后被施耐德收购)提出Modbus协议,1997年引入基于TCP/IP的Modbus TCP,2004年成为我国工业网络通信的国家标准。Modbus是一种广泛、简单、经济、透明的工业通信协议。它是一种应用层消息传输协议,包括ASCII、串行链路上的RTU和TCP/IP上的TCP。客户端/服务器通信可以在通过不同类型的总线或网络连接的设备之间提供。

4.目标

智能客户端,s7-1200服务器;读取smart s7-1200的40001和40002中的数据,放入smart的VB20-VB21(40001)和VB22-VB23 (40002)中。

在这个例子中,只传输了2个字和4个字节的数据。

5.编程;编排

5.1智能客户端编程

第一步:在MAIN程序中调用指令库 Modbus TCP客户端 mbus _ client。

输入参数:

EN:启用输入。

请求:真:请求与Modbus TCP服务器通信;真:没有Modbus通信请求。

IPaddr1— IPaddr4:服务器的IP地址,其中IPaddr1是IP地址的高位字节,IPaddr4是IP地址的低位字节。这个例子是s7-1200的IP地址192.168.2.4。

IP_Port:使用Modbus TCP进行通信的服务器的端口号,与服务器的IP_Port一致。默认值:502。

Rw: 0=读取,1=写入

Addr:用于访问服务器数据的Modbus起始地址。

计数:10001-19999和30001-39999是只读地址。0001-09999、40001-49999和400001-465535是读写地址。对于输入(1XXXX)和输出(0XXXX)位,最大计数值为1920位。对于输入(3XXXX)和保持(4XXXX)寄存器,最大计数值为120个字。

读取或写入的V存储指针。对于读取请求,该位置是存储从Modbus服务器读取的数据的第一个存储位置。对于写请求,该位置是要写入Modbus服务器的数据的第一个存储位置。

输出参数:

完成:

真:

1.客户端已与服务器建立连接;

2.客户端已与服务器断开连接;

3.客户端已收到Modbus响应;

4.出现错误。

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

错误:指令执行的结果,仅在错误发生后的一个周期内有效。详见故障表。

重试次数:

如果存在与连接相关的错误,Modbus客户端将自动重新启动连接,并将请求重新发送到服务器设备:在设置完成和错误输出参数之前,Modbus客户端将重新发送请求两次。

您可以通过在Modbus客户端符号表中查找符号m retries并在程序执行MBUS_CLIENT之前更改该值来更改重试次数。mRetries的值是BYTE,重试次数。

数范围为0到255。

单个位与多个位/字写入功能:

一些 Modbus 服务器设备不支持Modbus功能写入单个离散输出位(Modbus功能 5)或写入单个保持寄存器(Modbus功能6)。只支持多位写入(Modbus功能15)或多寄存器写入(Modbus功能16)。如果服务器设备不支持单个位/字 Modbus功能,则MBUS_CLIENT指令将返回错误代码1。

Modbus客户端协议允许强制MBUS_CLIENT指令使用多个位/字 Modbus功能,可通过在Modbus 客户端符号表中查找符号mModbusForceMulti,并在程序执行MBUS_CLIENT之前更改此值,来强制多个位/字指令。将mModbusForceMulti设置为TRUE,可在写入单个位或寄存器时强制使用多个位/字功能。

打开“符号表”→“库”→“Modbus TCP Client”,找到对应的mRetries和mModbusForceMulti对应的存储器地址。

注意:

1:Modbus客户端指令 (MBUS_CLIENT)每次连接至Modbus服务器,均有一个主动连接资源。MBUS_CLIENT自动生成连接ID。

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

1个子程序2849个字节的程序空间V存储器的662字节。

输入参数:

EN:使能输入。

DISCONNECT:TRUE:断开与Modbus TCP客户端的被动通信连接;

FALSE:建立与Modbus TCP客户端的被动通信连接。

MB_HOLD_REG:指向“MB_SERVER”指令中Modbus保持性寄存器的指针,引用的存储区必须大于两个字节,可以将全局数据块(优化访问或不优化)或者位存储器映射成Modbus保持寄存器。Modbus客户端通过Modbus功能码3(读取)、6(写入单个寄存器)、16(写入单个或多个寄存器)和 23(在一个作业中读写)可访问的值。

“MB_SERVER”背景数据块的“HR_Start_Offset”+40001地址的值为指针指向的第一个数据。例如“HR_Start_Offset”=10,40011的值为DB3.DBW0的值。

CONNECT:指向连接描述结构的指针,s7-1200的类型为TCON_IP_v4。本例中创建的数据块名称为“CONNECT”,打开数据块,在数据块中创建TCON_IP_v4类型的数据。如下图:

InterfaceId:本地接口的硬件标识符,本例为s7-1200的以太网端口,值为64。

ID:连接编号,“MB_SERVER”的每个连接必须使用唯一的 ID。该ID还不得被不同通信类型的其他指令同时使用。

ConnectionType:连接类型,对于 TCP,选择0B(十六进制)。

ActiveEstablished:1=主动连接,0=被动连接。

RemoteAddress:对方的IP地址,对于服务器端,可不写。0.0.0.0接受来自任何连接伙伴的连接请求。

RemotePort:对方的通信端口,对于服务器端,不写。

LocalPort:本地连接的端口号(取值范围:1 - 49151)。此IP端口号定义 Modbus客户端连接请求中要监视的IP端口,默认值为502。

输出参数:

NDR:0表示无新数据,1表示从Modbus客户端写入了新数据。

DR:0表示没有数据被读取,1表示Modbus客户端读取了数据。

ERROR:错误。保持一个扫描周期。有关详细信息,参见下面的“STATUS”。

STATUS:指令的详细状态信息。

第二步:编译后下载,运行CPU。

第三步:测试通信

在s7-1200的“监控表”中,把“MB_HOLD_REG”输入参数对应的DB3第一个和第二个数据分别写入1、2。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。