的读
函数从四种类型的目标可寻址区域执行读取操作:
线圈
输入
输入寄存器
保持寄存器
当您执行读取,你必须指定目标类型(目标
),起始地址(地址
),以及值的数量来读取(数
)。您也可以选择指定服务器的地址(SERVERID
)对于任何目标类型,并且数据格式(精确
)为寄存器。
用于示出的读出上的PLC的保持寄存器中的整个工作流程的例子,请参见从远程温度传感器读取温度。
如果读取目标是线圈,该函数读取在远程服务器从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
如果读取目标是输入,该函数在远程服务器读取从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
如果读目标是输入寄存器,则函数从指定的地址开始,从远程服务器中的1-125个连续输入寄存器中读取值。输入寄存器是16位只读寄存器。
读取输入寄存器的语法是:
阅读(OBJ, 'inputregs',地址,计数)
的obj
参数是MODBUS对象的名称。示例假设您已经创建了一个MODBUS对象,米
。有关创建对象的信息,请参见创建一个MODBUS连接。
的地址
参数是输入寄存器的起始地址来读取,并且它是一个双。的数
参数是读取输入寄存器的数量,并且它是一个双。如果读操作成功,则返回双打的载体。每个双代表一个16位的寄存器值,其中在所述矢量对应于在起始地址输入寄存器值的第一值。
这个例子从地址20开始读取4个输入寄存器。
读(m,'inputregs',20,4) ans = 27640 60013 51918 62881
如果读取目标被保持寄存器,在函数读取在远程服务器从1-125个连续的保持寄存器中的值,开始于指定的地址。的保持寄存器是16位读/写寄存器。
语法中读取输入的是:
阅读(OBJ, 'holdingregs',地址,计数)
的obj
参数是MODBUS对象的名称。示例假设您已经创建了一个MODBUS对象,米
。有关创建对象的信息,请参见创建一个MODBUS连接。
的地址
参数是要读取的保存寄存器的起始地址,它是双精度的。的数
参数是保持寄存器读取的数量,并且它是一个双。如果读操作成功,则返回双打的载体。每个双代表一个16位的寄存器值,其中在所述矢量对应于在起始地址保持寄存器值的第一值。
本实施例中读出4个保持寄存器,起始地址为20。
读(米, 'holdingregs',20,4)ANS = 27640 60013 51918 62881
用于示出的读出上的PLC的保持寄存器中的整个工作流程的例子,请参见从远程温度传感器读取温度。
您可以读取任何四种类型的目标,还可以指定服务器ID的可选参数,并能对寄存器指定的精度。
服务器ID选项
的SERVERID
参数指定要将read命令发送到的服务器地址。有效的值0 - 247
与0
是广播地址。此参数是可选的,默认为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中,计数,精确度);
当需要读取大量的值并且它们是混合数据类型时,使用变量是很方便的。