枚举参考 - Snet Docs

Snet Framework -- 枚举参考

最后更新: 2026-07-21 命名空间: Snet.Model.@enum 源代码: Snet.Model/enum/


概述

Snet Framework 定义了 8 个枚举,涵盖数据类型规范、质量状态、地址分类、编码方案、字节序、语言支持、MQ 响应格式和插件类别。所有枚举均使用 [JsonConverter(typeof(JsonStringEnumConverter))] 以字符串形式进行 JSON 序列化。


1. DataType -- 数据类型规范

文件: DataType.cs | 枚举值: 40 个 | 基类型: int(隐式)

定义地址读写操作的数据类型。包含标量类型和数组类型,并保留向后兼容的别名。

标量类型 (0-22)

数值 枚举成员 别名 大小 描述
0 None -- -- 未定义
1 Byte -- 1 字节 / 8 位 字节
2 Bool -- 1 字节 / 8 位 布尔值
3 Double -- 8 字节 / 64 位 双精度浮点数
4 Float -- 4 字节 / 32 位 单精度浮点数
5 Single -- 4 字节 / 32 位 Float 别名(前向兼容)
6 Short -- 2 字节 / 16 位 有符号 16 位整数
7 Int16 -- 2 字节 / 16 位 Short 别名(前向兼容)
8 Ushort -- 2 字节 / 16 位 无符号 16 位整数
9 UInt16 -- 2 字节 / 16 位 Ushort 别名(前向兼容)
10 Int -- 4 字节 / 32 位 有符号 32 位整数
11 Int32 -- 4 字节 / 32 位 Int 别名(前向兼容)
12 Uint -- 4 字节 / 32 位 无符号 32 位整数
13 UInt32 -- 4 字节 / 32 位 Uint 别名(前向兼容)
14 Long -- 8 字节 / 64 位 有符号 64 位整数
15 Int64 -- 8 字节 / 64 位 Long 别名(前向兼容)
16 Ulong -- 8 字节 / 64 位 无符号 64 位整数
17 UInt64 -- 8 字节 / 64 位 Ulong 别名(前向兼容)
18 DateTime -- 8 字节 / 64 位 日期和时间(不支持读取写入)
19 Date -- -- 日期(不支持读取写入)
20 Time -- -- 时间(不支持读取写入)
21 String -- 2 字节 / 16 位 字符串
22 Char -- 2 字节 / 16 位 Unicode 字符

数组类型 (23-39)

所有数组类型不支持虚拟地址。ByteArray 在 WebApi 写入时接受十六进制字符串表示法(0x00 0x01 ...)。

数值 枚举成员 别名 元素类型
23 ByteArray -- Byte
24 BoolArray -- Boolean
25 DoubleArray -- Double
26 FloatArray -- Float
27 SingleArray -- Float(别名)
28 ShortArray -- Int16
29 Int16Array -- Int16(别名)
30 UshortArray -- UInt16
31 UInt16Array -- UInt16(别名)
32 IntArray -- Int32
33 Int32Array -- Int32(别名)
34 UintArray -- UInt32
35 UInt32Array -- UInt32(别名)
36 LongArray -- Int64
37 Int64Array -- Int64(别名)
38 UlongArray -- UInt64
39 UInt64Array -- UInt64(别名)

使用示例

// 带数据类型的地址定义
var details = new AddressDetails("D100", DataType.Float);

// 有符号 16 位整数组地址
var details = new AddressDetails("D200", DataType.IntArray, length: 10);

// 命名别名用于前向兼容 -- 不同的枚举值
DataType.Single == DataType.Float;  // false (5 ≠ 4)
DataType.Int16  == DataType.Short;  // false (7 ≠ 6)
DataType.Int32  == DataType.Int;    // false (11 ≠ 10)

// 两种形式均可使用,读写操作行为相同
var d1 = new AddressDetails("D100", DataType.Float);  // value 4
var d2 = new AddressDetails("D100", DataType.Single); // value 5

2. QualityType -- 数据质量状态

文件: QualityType.cs | 枚举值: 6 个 | 基类型: int

表示采集数据的质量状态。

数值 枚举成员 中文描述 含义
-1 None 未经过处理 尚未处理
0 Exception 异常 采集过程中发生异常
1 Normal 正常 数据采集成功
2 DataTypeError 数据类型错误 数据类型不匹配
3 ParseUnknown 数据经过解析,并且解析成功,无法得知数据的正确性 解析成功但正确性未验证
4 ParseError 解析错误 解析失败

使用示例

var addressValue = new AddressValue
{
    Quality = QualityType.Normal,
    ResultValue = 42.5f,
    Message = "读取成功"
};

if (addressValue.Quality == QualityType.Normal)
{
    // 安全使用 ResultValue
}

3. AddressType -- 地址类型分类

文件: AddressType.cs | 枚举值: 6 个 | 基类型: int(隐式)

将地址分类为实际(物理)地址或虚拟(模拟)地址。虚拟类型使用后缀格式字符串进行配置。

数值 枚举成员 中文描述 格式模板
0 Reality 实际地址 --(物理 PLC 地址)
1 VirtualStatic 虚拟静态地址 静态值
2 VirtualDynamic_Random 虚拟动态随机变化地址 {更新间隔}
3 VirtualDynamic_RandomScope 虚拟动态随机范围变化地址 {更新间隔,最小值^最大值}
4 VirtualDynamic_Order 虚拟动态顺序变化地址 {更新间隔,增长步长}
5 VirtualDynamic_OrderScope 虚拟动态顺序范围变化地址 {更新间隔,增长步长,最小值^最大值}

格式示例

VirtualDynamic_Random:       {100}              -- 每 100ms 更新,随机值
VirtualDynamic_RandomScope:  {100,1^100}         -- 每 100ms,范围 [1,100] 内随机
                             {500,00:00:00^12:00:00}  -- 时间范围
                             {500,2000-01-01^2024-01-01}  -- 日期范围
VirtualDynamic_Order:        {100,1}             -- 每 100ms,递增 1
VirtualDynamic_OrderScope:   {100,0.1,1.1^9.9}   -- 每 100ms,步长 0.1,范围 [1.1,9.9]

使用示例

// 仅筛选实际地址
var realAddresses = address.RemoveVirtualAddress();

// 统计实际地址数量
int count = address.GetRealityAddressCount();

4. EncodingType -- 字符串编码代码页

文件: EncodingType.cs | 枚举值: 8 个 | 基类型: int

映射到 .NET 编码代码页,用于字符串数据解析。

数值 枚举成员 描述 代码页
0 ANSI 系统默认 ANSI 0
936 GB2312 简体中文 936
1200 Unicode UTF-16 小端序 1200
1201 BigEndianUnicode UTF-16 大端序 1201
20127 ASCII 7 位 ASCII 20127
12000 UTF32 UTF-32 小端序 12000
12001 BigEndianUTF32 UTF-32 大端序 12001
65001 UTF8 UTF-8 65001

使用示例

var details = new AddressDetails("D300", DataType.String,
    encodingType: EncodingType.UTF8);

var writeModel = new WriteModel("hello", DataType.String,
    encodingType: EncodingType.GB2312);

5. DataFormat -- 字节序

文件: DataFormat.cs | 枚举值: 4 个 | 基类型: int(隐式)

指定多字节数值解析的字节序。

数值 枚举成员 中文描述 模式 示例(32 位 0x12345678)
0 ABCD 按照顺序排序 顺序排列 12 34 56 78
1 BADC 按照单字反转 单字反转 34 12 78 56
2 CDAB 按照双字反转 双字反转 56 78 12 34
3 DCBA 按照倒序排序 完全反转 78 56 34 12

使用示例

var bytesModel = new BytesModel(
    address: "D100",
    describe: "温度读数",
    startBit: 0,
    length: 2,
    dataType: DataType.Short,
    dataFormat: DataFormat.DCBA  // 反转字节序
);

6. LanguageType -- 支持的语言

文件: LanguageType.cs | 枚举值: 2 个 | 基类型: int(隐式)

配合 ILanguage 接口和 MultilingualAttribute 特性实现多语言支持。

数值 枚举成员 描述
0 zh 中文
1 en 英文

使用示例

// 通知语言变更
var result = EventLanguageResult.CreateSuccessResult(
    "语言已切换", LanguageType.en);

// 检查当前语言
result.GetDetails(out string? message, out LanguageType? language);

7. ResponseType -- 消息中间件响应格式

文件: ResponseType.cs | 枚举值: 3 个 | 基类型: int(隐式)

定义从消息中间件接收的数据格式。

数值 枚举成员 中文描述 说明
0 Bytes 字节 原始字节数据
1 Content 内容 仅内容(无主题)
2 ContentWithTopic 内容与主题 主题 + 内容(使用 ResponseModel 反序列化)

使用示例

// 当 ResponseType 为 ContentWithTopic 时,使用 ResponseModel:
var response = JsonSerializer.Deserialize<ResponseModel>(rawJson);
string topic = response.Topic;
object content = response.Content;

8. PluginType -- 插件类别

文件: PluginType.cs | 枚举值: 2 个 | 基类型: int(隐式)

数值 枚举成员 中文描述 说明
0 Daq 数据采集插件 数据采集插件
1 Mq 消息队列传输插件 消息队列传输插件

使用示例

var plugin = new PluginModel(
    name: "SiemensS7",
    @namespace: "Snet.Plugin.Daq.Siemens",
    configFormat: "{...}",
    path: "./plugins/",
    version: "1.0.0",
    type: PluginType.Daq
);

枚举序列化说明

所有枚举均标记了 [JsonConverter(typeof(JsonStringEnumConverter))],在 JSON 中序列化为名称字符串而非整数值:

{
  "dataType": "Float",
  "quality": "Normal",
  "encodingType": "UTF8",
  "dataFormat": "DCBA"
}

BytesModel 额外支持 Newtonsoft.Json,通过 [Newtonsoft.Json.JsonConverter(typeof(StringEnumConverter))] 实现。