主要内容

从主机读取数据网络通讯协议服务器

可通过Modbus读取的数据类型

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

  • 线圈

  • 输入

  • 输入寄存器

  • 持有注册

执行读取时,必须指定目标类型(目标),开始地址(地址)和要读取的值的数量().你也可以指定服务器的地址(serverId),而数据格式(精度)。

有关显示在PLC上读取持有寄存器的整个工作流程的示例,请参见从远程温度传感器读取温度

阅读线圈网络通讯协议

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

读取线圈的语法是:

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

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

地址参数是要读取的线圈的起始地址,指定为双精度。的参数是要读取的线圈数,指定为double。如果读取成功,则返回一个具有的双值的向量10,其中矢量中的第一个值对应于开始地址处的线圈值。

这个示例读取8个线圈,从地址1开始。

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

您还可以将值读入变量以供以后访问。

数据= read(m,“线圈”1 8)
数据= 1 1 0 1 1 0 1 0

读取输入网络通讯协议

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

读取输入的语法是:

读(obj,“输入”,地址,数量)

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

地址参数是要读取的输入的起始地址,指定为双精度。的参数是要读取的输入数,指定为双精度。如果读取操作成功,则返回的双值向量10,其中向量的第一个值对应于起始地址处的输入值。

这个示例从地址2开始读取10个离散输入。

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

读取输入寄存器网络通讯协议

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

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

读(obj, inputregs、地址、数量)

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

地址参数是要读取的输入寄存器的起始地址,用双精度值指定。的参数是要读取的输入寄存器数目,指定为双精度。如果读取操作成功,则返回一个double类型的向量。每个double表示一个16位寄存器值,其中vector中的第一个值对应于起始地址处的输入寄存器值。

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

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

读取保持寄存器网络通讯协议

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

读取输入的语法是:

读(obj, holdingregs、地址、数量)

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

地址参数是要读取的保存寄存器的起始地址,指定为double类型。的参数是要读取的保存寄存器的数量,指定为double。如果读取操作成功,则返回一个double类型的向量。每个double表示一个16位寄存器值,其中vector中的第一个值对应于起始地址处的保存寄存器值。

这个示例读取4个保持寄存器,从地址20开始。

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

有关显示在PLC上读取持有寄存器的整个工作流程的示例,请参见从远程温度传感器读取温度

指定服务器ID和精度

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

服务器ID选项

serverId参数指定要将读命令发送到的服务器地址。有效值为0 - 247,0是广播地址。这个参数是可选的,默认为1

请注意

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

指定服务器ID的语法是:

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

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

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

精确的选择

“精度”参数指定在Modbus上读取的寄存器的数据格式®服务器。有效值为“uint16”“int16”“uint32”“int32”“uint64”“int64”“单一”,“双”.这个参数是可选的,默认为“uint16”

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

指定精度的语法是:

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

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

读(m,“holdingregs”1 8“uint32”

两个选项

你可以设置两个serverId选项和“精度”选项放在一起,当目标是一个寄存器时。当您同时使用两个选项时,serverId列在必需的参数之后。

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

读(obj、目标、地址、计数、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.下面的示例读取为3uint16来自地址的值500 - 502, 2来自地址的值503 - 5063来自地址的值507 - 518,和2int16来自地址的值519 - 520,都在一个操作。

使用变量

而不是使用文字数组在如上面所示,可以用数组值指定变量作为函数参数。上面例子的等价值是:

Count = [3 2 3 2] precision = {“uint16”“单一”“双”“int16”}读取(m,“holdingregs”, 500年统计,精确)

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

Baidu
map