从Modbus服务器读取数据

数据可以读通过Modbus类型

函数从四种类型的目标可寻址区域执行读取操作:

  • 线圈

  • 输入

  • 输入寄存器

  • 保持寄存器

当您执行读取,你必须指定目标类型(目标),起始地址(地址),以及值的数量来读取()。您也可以选择指定服务器的地址(SERVERID)对于任何目标类型,并且数据格式(精确)为寄存器。

用于示出的读出上的PLC的保持寄存器中的整个工作流程的例子,请参见从远程温度传感器读取温度

通过MODBUS读取线圈

如果读取目标是线圈,该函数读取在远程服务器从1-2000个连续线圈的值,开始在指定的地址。的线圈是单输出位。的价值1表示线圈是开的,值为0是off的意思。

语法来读取线圈是:

读(obj,“线圈”,地址,数量)

obj参数是MODBUS对象的名称。示例假设您已经创建了一个MODBUS对象,。有关创建对象的信息,请参见创建一个MODBUS连接

地址参数是线圈的起始地址读取,它是一个双。的参数是线圈阅读的数量,这是一个双。如果读取成功,返回双打的载体,每个值1要么0,其中在载体中对应于在起始地址的线圈值的第一个值。

本实施例中读取8个线圈,起始地址为1。

read(m,'coil ',1,8) ans = 1 1 0 1 1 0 1 0 1 0

您还可以创建稍后阅读的变量。

data = read(m,'coil ',1,8) data = 1 1 0 1 0 1 0 1 0

读输入通过Modbus

如果读取目标是输入,该函数在远程服务器读取从1-2000连续离散的输入值,开始在指定的地址。离散输入是单个输入位。的价值1指示输入为on,值为0是off的意思。

语法中读取输入的是:

读(OBJ, '输入',地址计数)

obj参数是MODBUS对象的名称。示例假设您已经创建了一个MODBUS对象,。有关创建对象的信息,请参见创建一个MODBUS连接

地址参数是要读取的输入的起始地址,它是双精度的。的参数是输入到读出数字,它是双。如果读操作成功,则返回双打的向量,每个与1要么0,其中向量中的第一个值对应于起始地址处的输入值。

本实施例中显示的是10个离散输入,起始地址为2。

read(m,'input ',2,10) ans = 1 10 1 10 10 0 1

通过MODBUS读取输入寄存器

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

读取输入寄存器的语法是:

阅读(OBJ, 'inputregs',地址,计数)

obj参数是MODBUS对象的名称。示例假设您已经创建了一个MODBUS对象,。有关创建对象的信息,请参见创建一个MODBUS连接

地址参数是输入寄存器的起始地址来读取,并且它是一个双。的参数是读取输入寄存器的数量,并且它是一个双。如果读操作成功,则返回双打的载体。每个双代表一个16位的寄存器值,其中在所述矢量对应于在起始地址输入寄存器值的第一值。

这个例子从地址20开始读取4个输入寄存器。

读(m,'inputregs',20,4) ans = 27640 60013 51918 62881

读保持寄存器通过Modbus

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

语法中读取输入的是:

阅读(OBJ, 'holdingregs',地址,计数)

obj参数是MODBUS对象的名称。示例假设您已经创建了一个MODBUS对象,。有关创建对象的信息,请参见创建一个MODBUS连接

地址参数是要读取的保存寄存器的起始地址,它是双精度的。的参数是保持寄存器读取的数量,并且它是一个双。如果读操作成功,则返回双打的载体。每个双代表一个16位的寄存器值,其中在所述矢量对应于在起始地址保持寄存器值的第一值。

本实施例中读出4个保持寄存器,起始地址为20。

读(米, 'holdingregs',20,4)ANS = 27640 60013 51918 62881

用于示出的读出上的PLC的保持寄存器中的整个工作流程的例子,请参见从远程温度传感器读取温度

指定服务器ID和精密

您可以读取任何四种类型的目标,还可以指定服务器ID的可选参数,并能对寄存器指定的精度。

服务器ID选项

SERVERID参数指定要将read命令发送到的服务器地址。有效的值0 - 2470是广播地址。此参数是可选的,默认为1

请注意

哪些设备是指作为slaveID财产,可能工作作为SERVERID属性。对于一些制造商,从ID有时被称为服务器IDslaveID属性,则可以将其用作SERVERID属性与命令,如这里所述。

指定服务器ID的语法是:

读(obj,目标,地址,统计,serverId)

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

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

精密选项

“精度”参数指定寄存器的数据格式被从MODBUS服务器上读取。有效的值“uint16”,'INT16','UINT32',“int32”,“uint64”,'的Int64',“单一”'双'。此参数是可选的,默认为“uint16”

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

用来指定精度的语法是:

读(obj、目标、地址、计数、精度)

这个示例从地址1开始读取8个保持寄存器,其精度为'UINT32'

读(米, 'holdingregs',1,8, 'UINT32');

两个选项

可以同时设置SERVERID选项和“精度”选项一起时,目标是一个寄存器。当您同时使用这两个选项时,SERVERID应所需参数后先列出。

指定服务器ID和精度的语法是:

读(OBJ,目标地址,计数,SERVERID,精度)

这个示例从地址1开始读取8个保持寄存器,其精度为'UINT32'从服务器ID 3。

读(米, 'holdingregs',1,8,3 'UINT32');

读取混合数据类型

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

语法

的语法功能如下:

读(米, '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。寄存器是连续的,开始于地址500。在本例中,它的值为3UINT16值的地址500 - 502,2值的地址503 - 506,3值的地址507 - 518,2INT16值的地址519 - 520,都在一个读操作。

使用变量

不像上面那样在read命令中使用数组,您还可以在命令中使用数组作为变量。与上述示例的等效为:

计数= [3 2 3 2]精度= { 'UINT16', '单', '双', 'INT16'}读取(米, 'holdingregs',500中,计数,精确度);

当需要读取大量的值并且它们是混合数据类型时,使用变量是很方便的。