点击或拖拽改变大小

NetworkDeviceBaseReadStructAsyncT 方法

读取结构体类型的数据,根据结构体自身的定义,读取原始字节数组,然后解析出实际的结构体数据,结构体需要实现HslStructAttribute特性

命名空间:  HslCommunication.Core.Net
程序集:  HslCommunication (在 HslCommunication.dll 中) 版本:11.0.5.0 (11.0.5.0)
语法
public virtual Task<OperateResult<T>> ReadStructAsync<T>(
	string address,
	ushort length
)
where T : class, new()

参数

address
类型:SystemString
PLC的地址信息
length
类型:SystemUInt16
读取的地址长度信息

类型参数

T
类型对象信息

返回值

类型:TaskOperateResultT
如果成功,返回成功的结构体对象

实现

IReadWriteNetReadStructAsyncT(String, UInt16)
示例
此处演示西门子的读取示例,先定义一个类,重点是将需要读取的数据,写入到属性的特性中去。
特性实现示例
// 假设你要读取连续地址数据的情况,我们把需要读取的数据解析成一个个不同的数据类型,则可以使用本方法。
// 我们假设,我们要读取的PLC是西门子PLC,地址数据的假设如下
// 我们假设 设备是否启动是 M0.0
// 产量是 M10 开始的2个地址数据
// 温度信息是 M12开始的4个地址数据
// 报警的IO信息是 M20 开始,5个字节,共计40个IO点信息
// 那么我们可以做如下的定义

public class StructExample
{
    /// <summary>
    /// 设备是否启动
    /// </summary>
    [HslStruct( 0 )]
    public bool Enable { get; set; }

    /// <summary>
    /// 产量信息
    /// </summary>
    [HslStruct( 10 )]
    public short Production { get; set; }

    /// <summary>
    /// 温度信息
    /// </summary>
    [HslStruct( 12 )]
    public float Temperature { get; set; }

    /// <summary>
    /// 连续的位报警信息
    /// </summary>
    [HslStruct( 20 * 8, 40 )]
    public bool[] AlarmStatus { get; set; }
}
接下来就可以实现数据的读取了
ReadStruct示例
SiemensS7Net plc = new SiemensS7Net( SiemensPLCS.S1200, "192.168.0.100" );

// 此处需要注意的是,凡是带有 HslStruct 特性的属性都会被读取出来
OperateResult<StructExample> read = plc.ReadStruct<StructExample>( "M0", 30 );
if (read.IsSuccess)
{
    // success
    StructExample data = read.Content;
}
else
{
    // failed
    Console.WriteLine( "读取失败:" + read.Message );
}
参见