实现S7-200smart通过MODBUS TCP/IP与matlab通讯

目录

S7-200smart通过MODBUS TCP/IP与matlab通讯

两台PLC之间建立Modbus TPC/IP通讯

MODBUS TCP Client梯形图各个参数的功能:

MODBUS TCP Server梯形图各个参数的功能:

两台S7-200smart之间通过Modbus TCP连接:

MATLAB端建立Modbus TCP客户端:

通过函数建立Modbus TCP客户端

通过Matlab-Industment Control工具箱进行连接


S7-200smart通过MODBUS TCP/IP与matlab通讯

两台PLC之间建立Modbus TPC/IP通讯

STEP 7-MicroWIN SMART自V2.4版本后,用户可以在库中直接调用MODBUS模块

MODBUS TCP Client梯形图各个参数的功能:

EN: 使能;

Req: 发送通信请求,ON允许通信,OFF禁止通信;

Connect: 建立连接,ON连接,OFF断开:

IPAddr1-4:服务器的IP地址(如192.168.2.1);

IP_PORT指的是客户端尝试连接、且随后使用 Modbus TCP 进行通信的服务器的端口号:默认值502 将端口设置为设备的实际端口号

RW指示该操作是读还是写:0=读取;1=写入

Addr指的是要读或者是写的服务器的起始地址,这里填写的是40026,对应服务器一侧为&VB100;

COUNT: Modbus数据长度;此请求中要访问的位或保持寄存器的数量;

DataPtr指客户端的起始地址

MODBUS TCP Server梯形图各个参数的功能:

MaxIQ:MaxlQ:开放可访问IQ点数量;MaxAl:开放可访问Al数量;将可用于Modbus地址0xxxx到1xxxx的I和Q点数设置为0-256。0表示禁用对输入和输出所有读取和写入。建议将值设置为256

MaxAI:MaxlQ:开放可访问IQ点数量;MaxAl:开放可访问Al数量;将可用于Modbus地址3xxxx的字输入数设置为0-56.0表示禁用对模拟量输入的读取。要允许访问所有CPU模拟量输入,建议对于CPU CR40和CR60设置为0;对于其他型号设置为56

MaxHold:可用于Modbus地址4xxxx或4yyyyy的V存储器中的字保持寄存器数,不能与库存储区分配地址产生重叠。若允许Modbus客户端访问2000字节的V存储器,则将其值改为1000字。

HoldStart:指向V存储器中保持寄存器起始位置的指针。通常设置为&VB0,可更改

MODBUS地址40001对应的VWQ地址。&VBO则表示40001代表vwo,&VB100则表示40001代表VW100。

两台S7-200smart之间通过Modbus TCP连接:

现将客户端VW100开始的10个字写入服务器VW50开始的十个字中;服务器VW100开始的10个字读取到客户端VW50开始的10个字中。

客户端一侧程序

服务器一端程序:

一台服务器不能连接多台客户端,但是服务器又可以作为客户端与其它服务器通信。每台服务器只能定义一个端口,不同服务器的端口可以相同。

MATLAB端建立Modbus TCP客户端:

通过函数建立Modbus TCP客户端

MATLAB R2017a中引入了modbus函数:

modbus函数:创建连接对象,可创建ModBus TCP和RTU连接。

read函数:用于读取Server端寄存器的数据,读取顺序与寄存器的顺序一致,可通过定义数据类型和变量数量来快速获取所需的数据。

write函数:用于对连接到Modbus服务器执行写操作

writeRead函数:在单个Modbus中对一组保持寄存器执行写然后读操作

maskWrite函数:在保持寄存器上执行掩码写入操作

instrhwinfo函数:有关可用硬件的信息

clear函数:从MATLAB工作区中删除仪器对象

MATLAB是以十进制显示。MATLAB最终读取的数据为double类型,由于无法做底层操作,如果想得到二进制、十六进制值,可使用MATLAB提供的转化函数dec2bin、dec2hex等转为了char类型的数据。

Property类型描述
DeviceAddressTCP/IP如果传输是TCP/IP,则在创建对象时需要MODBUS服务器的IP地址或主机名,例如“192.168.2.1”。
PortTCP/IP如果传输是TCP/IP,则在创建对象期间是可选的,MODBUS服务器使用的远程端口。默认值为502。
TimeoutTCP/IP;RTU等待MODBUS服务器响应的最长时间(秒),指定为double类型的正值。默认值为10。可以在创建对象期间或创建对象后更改值
NumRetriesTCP/IP;RTU如果超时后服务器没有回复,则要执行的重试次数。如果使用串行RTU传输,则会重新发送该消息。如果使用TCP/IP传输,连接将关闭并重新打开。
ByteOrderTCP/IP;RTU写入16位寄存器或从16位寄存器读取的值的字节顺序。有效的选择是“big-endian”和“little-endian”。默认值为“big-endian”,由MODBUS标准指定。
WordOrderTCP/IP;RTU跨多个16位寄存器的寄存器读写的字顺序。有效的选择是“big-endian”和“little-endian”。默认值是“big-endian”,并且它依赖于设备。

使用Modbus Slave模拟

读取代码如下

% 创建客户端
m = modbus('tcpip','192.168.2.1',502) %类型TCP/IP  IP地址192.168.2.1 端口502

% 属性查看
m.ByteOrder
ans =
    'big-endian'  
%要更改 代码为m.ByteOrder = 'little-endian';

m.Port
ans =
   502

% 设置属性
m.Timeout = 3   %超时时间为3s
m = 
Modbus TCPIP with properties:
    DeviceAddress: '127.0.0.1'
             Port: 502
           Status: 'Connected'
       NumRetries: 1
          Timeout: 3 (seconds)
        ByteOrder: 'big-endian'
        WordOrder: 'big-endian'
  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% read(obj,'holdingregs',address,count)
% read(obj,target,address,count,serverId)  % 指定Server ID
% read(obj,target,address,count,precision) % 指定数据读取格式
% read(obj,target,address,count,serverId,precision) % 同时指定Server ID和数据读取格式

% 读取,以保持寄存器的方式读取,read列表为modbus对象、寄存器类型、开始地址(从1开始)、读取的个数、读取的类型
>> read(m,'holdingregs',3,1,'int16')
ans =
    23

% 单精度浮点型数据的读取
>> read(m,'holdingregs',5,1,'single')
ans =
   10.1100

% 断开并清除Modbus连接
clear m

发送代码如下

% 创建客户端
m = modbus('tcpip','192.168.2.1',502)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% write(m,target,address,values)
% write(m,target,address,values,serverId,'precision')  %同时指定Server ID和数据读取格式

write(mbConnector,'holdingregs',10,1235,'int16')
write(mbConnector,'holdingregs',1,[1 2 3],'int16')

% 断开并清除Modbus连接
clear m

通过Matlab-Industment Control工具箱进行连接

在Matlab 2022b中选中APP-Modbus Explorer 

选择配置Modbus TCP/IP

按照以下步骤通过TCP/IP与Modbus仪器进行通信。

1.在打开的配置选项卡中,在toolstrip中设置以下通信参数,以配置与设备的连接:

设备地址:Modbus服务器的IP地址,例如192.168.2.20。此参数是建立连接所必需的。
端口:Modbus服务器使用的远程端口。默认值为502。如果使用不同的端口号,请更改。
超时:等待Modbus服务器响应的最长时间(秒),指定为正值。默认值为3。您可以编辑该值以增加或减少超时时间。
字节顺序:写入16位寄存器或从16位寄存器读取值的字节顺序。默认值为Big Endian,由Modbus标准指定。如果您的设备需要Little Endian,请更改下拉列表中的值。
字序:跨越多个16位寄存器的寄存器读写的字序。默认值是Big Endian,并且它是特定于设备的。如果您的设备需要Little Endian,请更改下拉列表中的值。

2.在toolstrip中设置以下读取参数,以配置从设备读取数据:

服务器ID:将读取命令发送到的服务器的地址,指定为双精度。如果未指定服务器ID,则使用默认值1。有效值为1-247。
寄存器类型:要读取的目标区域。您可以对四种类型的目标执行Modbus读取操作:线圈、输入、输入寄存器和保持寄存器。使用下拉列表选择您的类型。
寄存器地址:从中读取的起始地址,指定为双精度。输入起始地址的号码。
精度:Modbus服务器上正在读取的寄存器的数据格式。对于线圈和输入,精度始终是位。对于保持寄存器和输入寄存器,可以指定精度,例如uint16。

3.要测试配置,请按“读取”按钮。如果您的配置参数正确,则读取成功,并且读取值将填充读取的值。如果出现错误,请调整参数,直到读取成功。
4.此值需要与设备手册中列出的值相匹配。请确保此值和其他配置参数与设备的规格相匹配。
获得正确的读取值后,按下Confirm Parameters(确认参数)按钮。选项卡的其余部分出现,您的设备列在应用程序左侧的设备列表中。
5.使用该表设置设备的读取。在配置选项卡中输入的寄存器详细信息显示在寄存器表的第一行。toolstrip中的按钮用于将行插入表中以及移动或删除行。然后将信息添加到行中。每一行表示从列出的目标类型和地址读取的数据。或者,可以使用“导入”按钮导入以前导出的信息表。

将Modbus Slave设置为如下

在matlab中读取到的数据如图所示

2023.9.25

参考文章:S7-200SMART 实现MODBUS TCP通信的具体方法示例(客户端读写+服务器响应)_AAA_自动化工程师的博客-CSDN博客

MATLAB - Modbus TCP客户端的使用_matlab使用modbus tcp write函数出现timeout_罗伯特祥的博客-CSDN博客

  • 26
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值