主要内容

从Modbus服务器读取数据

描述

读(m,目标地址读取一个数据值到Modbus对象从目标类型目标在起始地址地址.该函数默认读取一个值。如果希望读取多个值,请添加论点。

例子

读(m,目标地址读取数据到Modbus对象从目标类型目标在起始地址地址使用要读取的值的数量

例子

读(m,目标地址serverId精度另外指定serverId,这是要将read命令发送到的服务器的地址精度,这是正在读取的寄存器的数据格式。

例子

全部折叠

如果读目标是线圈,则该函数从远程服务器中的1-2000个连续线圈中读取值,从指定的地址开始。线圈是一个单输出位。的值1表示线圈处于开启状态,值为0意味着它是关闭的。

从地址1开始读取8个线圈。的地址参数是要读取的线圈的起始地址,而参数是要读取的线圈数。

读(m,“线圈”1 8)
Ans = 1 1 0 1 1 0 10 0

如果读目标是输入,则该函数从远程服务器中的1-2000个连续的离散输入中读取值,从指定的地址开始。离散输入是单个输入位。的值1指示输入为on,值为0意味着它是关闭的。

从地址2开始,读取10个离散输入。的地址参数是要读取的输入的起始地址,而参数是要读取的输入数。

读(m,“输入”、2、10)
Ans = 1 1 0 1 1 0 1 0 1 0 0 1

如果读目标是输入寄存器,则该函数从远程服务器中的1-125个连续输入寄存器中读取值,从指定的地址开始。输入寄存器是16位只读寄存器。

读取4个输入寄存器,从地址20开始。的地址参数是要读取的输入寄存器的起始地址,而参数是要读取的输入寄存器的数目。

读(m,“inputregs”, 20岁,4)
Ans = 27640 60013 51918 62881

如果读目标是持有寄存器,则该函数从远程服务器中的1-125个连续持有寄存器中读取值,从指定的地址开始。保持寄存器是一个16位读/写寄存器。

读取5个保持寄存器,从地址2开始。的地址参数是要读取的保存寄存器的起始地址,而参数是要读取的持有寄存器的数量。

读(m,“holdingregs”、2、5)
Ans = 27640 60013 51918 62881 34836

您可以读取这四种类型的目标中的任何一种,还可以为服务器ID指定可选参数,并且可以为这两种类型的寄存器指定精度。您可以单独设置其中一个选项,也可以设置两个选项serverId选择和精度选择在一起。两个选项都应该列在必需的参数之后。

使用精度从地址1开始读取8个保持寄存器“uint32”从服务器ID 3。

读(m,“holdingregs”1 8 3“uint32”);

通过为每个值指定数据类型,可以读取不同数据类型(精度)的连续值。的语法中可以做到这一点函数,或设置包含计数和精度数组的变量。这里显示了这两种方法。

读取相同数据类型的连续寄存器。

读(m,“holdingregs”500年10“uint32”);

在那个例子中,目标类型是保存寄存器,起始地址是500,计数为10,精度为uint32

如果你想让这10个值是混合数据类型,你可以使用以下语法:

读(m,“holdingregs”,500,[3 2 3 2],{“uint16”“单一”“双”“int16”});

您可以在命令中使用一个值数组来实现计数和精度。在本例中,计数为3、2、3和2。该命令将读取3个数据类型的值uint16, 2个数据类型的值, 3个数据类型的值和2个数据类型的值int16.寄存器是连续的,从address开始500

与上一步中所示的在read命令中使用数组不同,您还可以在命令中使用数组作为变量。相同示例的等价代码为:

Count = [3 2 3 2] precision = {“uint16”“单一”“双”“int16”}读取(m,“holdingregs”500、计数、精密);

当您有很多值要读取且它们是混合数据类型时,使用变量非常方便。

输入参数

全部折叠

要读取的目标区域,指定为字符向量或字符串。您可以在四种类型的目标上执行Modbus读操作:线圈、输入、输入寄存器和保持寄存器,对应于值“线圈”“输入”“inputregs”,“holdingregs”.Target必须是对象名称后的第一个参数。这个例子从地址1开始读取8个线圈。

例子:读(m,“线圈”,1,8)

数据类型:字符

要读取的起始地址,指定为双精度值。Address必须是对象名称后的第二个参数。这个例子从地址2开始读取10个线圈。

例子:读(m,“线圈”,2、10)

数据类型:

要读取的值的数量,指定为双精度。Count必须是对象名称之后的第三个参数。如果不指定计数,则默认为1使用。这个例子从地址2开始读取12个线圈。

例子:读(m,“线圈”,2、12)

数据类型:

要将读命令发送到的服务器地址,指定为double。必须在对象名称、目标、地址和计数之后指定服务器ID。如果不指定serverId,默认为1使用。有效的值0 - 247,0是广播地址。

请注意

如果您的设备使用slaveID属性,它可能会把它用作serverID财产的命令如下所示。

这个例子从服务器ID 3读取8个从地址1开始的线圈。

例子:读(m,“线圈”,1,8日,3);

数据类型:

从Modbus服务器上读取的寄存器的数据格式,指定为字符向量或字符串。精度必须在对象名称、目标、地址和计数之后指定。有效的值“uint16”“int16”“uint32”“int32”“uint64”“int64”“单一”,“双”.这个参数是可选的,默认为“uint16”

请注意,精度不引用返回类型,它总是“双”.它指定如何解释寄存器数据。

此示例读取从地址2开始的6个保存寄存器,其精度为“uint32”

例子:读(m, holdingregs 2 6日uint32);

数据类型:字符

扩展功能

C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。

版本历史

介绍了R2017a

Baidu
map