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))] 实现。
