点击或拖拽改变大小

SecsValue 类

SECS数据的对象信息,可以用来表示层级及嵌套的数据内容,如果需要显示,只需要ToString 方法即可, 如果需要发送SECS设备,只需要 ToSourceBytes,并支持反序列化操作 ParseFromSource(Byte, Encoding),无论是XML元素还是byte[]类型。
继承层次
SystemObject
  HslCommunication.Secs.TypesSecsValue

命名空间:  HslCommunication.Secs.Types
程序集:  HslCommunication (在 HslCommunication.dll 中) 版本:12.0.0.0 (12.0.0.0)
语法
public class SecsValue

SecsValue 类型公开以下成员。

构造函数
  名称说明
公共方法SecsValue
实例化一个空的SECS对象
公共方法SecsValue(Boolean)
从一个类型为 Boolean 的对象初始化数据
公共方法SecsValue(Boolean)
从一个类型为 Boolean 的对象初始化数据
公共方法SecsValue(Byte)
从一个类型为 Byte 的对象初始化数据
公共方法SecsValue(Byte)
从一个类型为 Byte 数组的对象初始化数据,需要指定 SecsItemType 来表示二进制还是byte数组类型
公共方法SecsValue(IEnumerableObject)
从一个类型为 Object 数组的对象初始化数据,初始化后,本对象为 List 类型
公共方法SecsValue(Double)
从一个类型为 Double 的对象初始化数据
公共方法SecsValue(Double)
从一个类型为 Double 的对象初始化数据
公共方法SecsValue(Int16)
从一个类型为 Int16 的对象初始化数据
公共方法SecsValue(Int16)
从一个类型为 Int32 的对象初始化数据
公共方法SecsValue(Int32)
从一个类型为 Int32 的对象初始化数据
公共方法SecsValue(Int32)
从一个类型为 Int32 的对象初始化数据
公共方法SecsValue(Int64)
从一个类型为 Int64 的对象初始化数据
公共方法SecsValue(Int64)
从一个类型为 Int64 的对象初始化数据
公共方法SecsValue(SByte)
从一个类型为 SByte 的对象初始化数据
公共方法SecsValue(SByte)
从一个类型为 SByte 的对象初始化数据
公共方法SecsValue(Single)
从一个类型为 Single 的对象初始化数据
公共方法SecsValue(Single)
从一个类型为 Single 的对象初始化数据
公共方法SecsValue(String)
从一个字符串对象初始化数据信息
公共方法SecsValue(String)
从一个字符串数组对象初始化数据信息
公共方法SecsValue(UInt16)
从一个类型为 UInt16 的对象初始化数据
公共方法SecsValue(UInt16)
从一个类型为 UInt16 的对象初始化数据
公共方法SecsValue(UInt32)
从一个类型为 UInt32 的对象初始化数据
公共方法SecsValue(UInt32)
从一个类型为 UInt32 的对象初始化数据
公共方法SecsValue(UInt64)
从一个类型为 UInt64 的对象初始化数据
公共方法SecsValue(UInt64)
从一个类型为 UInt64 的对象初始化数据
公共方法SecsValue(XElement)
从完整的XML元素进行实例化一个对象
公共方法SecsValue(SecsItemType, Object)
通过指定的参数信息来实例化一个对象
Top
属性
  名称说明
公共属性ItemType
类型信息
公共属性Length
字节长度信息,如果是 List 类型的话,就是数组长度,如果如 ASCII 类型,就是字符串的字节长度,其他类型都是表示数据个数
Byte length information, if it is of type List, it is the length of the array, if it is of type ASCII, it is the byte length of the string, other types are the number of data
公共属性Value
数据值信息,也可以是 SecsValue 的列表信息,在设置列表之前,必须先设置类型
Top
方法
  名称说明
公共方法静态成员CreateListSecsValue
从一个对象数组里创建一个secsvalue对象
公共方法静态成员EmptyListValue
获取空的列表信息
公共方法静态成员EmptySecsValue
获取空的对象信息
公共方法Equals (继承自 Object。)
受保护的方法Finalize (继承自 Object。)
公共方法GetHashCode (继承自 Object。)
公共方法GetType (继承自 Object。)
公共方法静态成员GetValueLength
获取当前的 SecsValue 的数据长度信息
受保护的方法MemberwiseClone (继承自 Object。)
公共方法静态成员ParseFromSource
从原始的字节数据中解析出实际的 SecsValue 对象内容。
公共方法ToSourceBytes
当前的对象信息转换回实际的原始字节信息,方便写入操作
公共方法ToSourceBytes(Encoding)
使用指定的编码将当前的对象信息转换回实际的原始字节信息,方便写入操作
公共方法ToString (重写 ObjectToString.)
公共方法ToVaruableNames
将当前的对象转为 VariableName 数组对象信息,也就是标签名列表
公共方法ToXElement
获取当前数值的XML表示形式
Top
扩展方法
  名称说明
公共扩展器方法ToJsonString
获取当前对象的JSON格式表示的字符串。
Gets the string represented by the JSON format of the current object.
(由 HslExtension 定义。)
Top
备注
XML序列化,反序列化例子:
SecsValue value = new SecsValue( new object[]{ 1.23f, "ABC" } );
XElement xml = value.ToXElement( );
SecsValue value2 = new SecsValue(xml);
示例
关于SecsValue类型,可以非常灵活的实例化,参考下面的示例代码
SecsValue说明
public void Sample2( )
{
    // 按照事例逐级提供演示
    // 1. 最简单的 SVID "U4:1 810"
    SecsValue secsValue = new SecsValue( (uint)810 );
    // 2. 字符串信息  SPNAME  Example: "A:10 {BatchLocID}"
    secsValue = new SecsValue( "BatchLocID" );
    // 3. 如果是 SVID的列表  {L:n  SVID }
    secsValue = new SecsValue( new object[] { (uint)810 } );   // 多几个数据,就塞几个SVID
    // 4. 多个数据的  S1F13R
    // {L2
    //    MDLN
    //    SOFTREV
    // }
    secsValue = new SecsValue( new object[] { "gemsim", "1.0" } );
    // 5. 每种数据类型不一样,还支持嵌套行为,例如 S1F19R  Get Attribute
    // {L:3
    //      OBJTYPE
    //      {L:m
    //          OBJID
    //      }
    //      {L:n
    //          ATTRID
    //      }
    //}
    // 我们假设有两个ID及两个特性ID需要读取,假设这些ID都是以字符串的形式的
    secsValue = new SecsValue( 
        new object[] { 
            "A Carrier", 
            new object[] { 
                "Job0001", 
                "Job0002"
            }, 
            new object[] { 
                "SourceURL", 
                "SourceURL2" 
            } 
        } );
    // 我们看到层级关系是一致的,而且object[]即表示列表,所有的数据可以层级嵌套。

    // 下面简单的举例各种类型的实例化
    secsValue = new SecsValue( true );       // Bool型
    secsValue = new SecsValue( (sbyte)1 );   // I1 
    secsValue = new SecsValue( (byte)1 );    // U1
    secsValue = new SecsValue( (short)1 );   // I2
    secsValue = new SecsValue( (ushort)1 );  // U2
    secsValue = new SecsValue( 1 );          // I4
    secsValue = new SecsValue( (uint)1 );    // U4
    secsValue = new SecsValue( (long)1 );    // I8
    secsValue = new SecsValue( (ulong)1 );   // U8
    secsValue = new SecsValue( (float)1 );   // F4
    secsValue = new SecsValue( (double)1 );  // F8
    secsValue = new SecsValue( "ABCD" );     // ASCII
    secsValue = new SecsValue( new string[] { "ABCD", "DEEG" } );  // 一个list,多个string元素
    secsValue = new SecsValue( new byte[] { 0x01, 0x02, 0x03 } );  // Binary

    // 特别说明
    secsValue = new SecsValue( );  // 默认的构造方法为空的secsvalue,没有任何的数据

    // XML序列化和反序列化
    secsValue = new SecsValue( new object[] { "gemsim", "1.0" } );
    System.Xml.Linq.XElement element = secsValue.ToXElement( );   // 生成XML,可用于显示,存储,数据发送
    SecsValue secsValueAgain = new SecsValue( element );          // 从XML进行实例化,数据是一模一样的

    // 二进制的序列化和反序列化也是支持
    secsValue = new SecsValue( new object[] { "gemsim", "1.0" } );
    byte[] source = secsValue.ToSourceBytes( );                    // 二进制的容量更小,可以直接当为data,发送到设备
    secsValueAgain = SecsValue.ParseFromSource( source, Encoding.ASCII );          // 反序列化回来
}
参见