2025-11-01 15:24:28 +08:00

215 lines
7.3 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Rovinj.Device;
using Rovinj.Reader.Silion;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TunnelNuget
{
/// <summary>
/// 参数列表
/// </summary>
public class InfoParams
{
/// <summary>
/// Plc连接工厂
/// </summary>
public class PlcConnectionParams
{
/// <summary>
/// Ip地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 端口号
/// </summary>
public ushort Port { get; set; } = 502;
/// <summary>
/// 波特率
/// </summary>
public int BaudRate { get; set; } = 9600;
/// <summary>
/// 连接模式
/// </summary>
public ConnectionMode Mode { get; set; }
}
/// <summary>
/// 工厂/构建方法:根据参数创建配置对象
/// </summary>
public static class PlcConnectionFactory
{
public static ConnectionConfig Create(PlcConnectionParams parameters)
{
if (parameters == null) throw new ArgumentNullException(nameof(parameters));
var config = new ConnectionConfig
{
ConnectionMode = parameters.Mode
};
// 设置网络相关字段
switch (parameters.Mode)
{
case ConnectionMode.Network:
config.ConnectionMode = parameters.Mode;
config.NetworkAddress = parameters.Address;
config.NetworkPort = parameters.Port;
break;
case ConnectionMode.Serial:
config.ConnectionMode = parameters.Mode;
config.SerialPortName = parameters.Address;
config.BaudRate = parameters.BaudRate;
break;
case ConnectionMode.USB:
config.ConnectionMode = parameters.Mode;
config.Address = parameters.Address;
break;
// 未来扩展…… 继续加
default:
throw new NotSupportedException($"不支持的连接模式: {parameters.Mode}");
}
return config;
}
}
/// <summary>
/// 参数对象:读写器连接参数
/// </summary>
public class ReaderConnectionParams
{
/// <summary>
/// 天线数量
/// </summary>
public object[] Args { get; set; }
/// <summary>
/// IP地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 连接模式
/// </summary>
public ConnectionMode Mode { get; set; }
}
/// <summary>
/// 工厂/构建方法:根据参数创建读取/写入器的连接配置对象
/// </summary>
public static class ReaderConnectionFactory
{
public static ConnectionConfig Create(ReaderConnectionParams parameters)
{
if (parameters == null) throw new ArgumentNullException(nameof(parameters));
var config = new ConnectionConfig
{
ConnectionMode = parameters.Mode
};
// 设置网络相关字段(当前示例为网络模式)
switch (parameters.Mode)
{
case ConnectionMode.Network:
config.Args = new object[] { parameters.Args };
config.ConnectionMode = parameters.Mode;
config.NetworkAddress = parameters.Address;
break;
// 未来扩展…… 继续加
default:
throw new NotSupportedException($"不支持的连接模式: {parameters.Mode}");
}
return config;
}
}
/// <summary>
/// 参数对象RFID 读写器参数
/// </summary>
public class SilionReaderParams
{
/// <summary>
/// Q值-1=DynamicQ, 0~15时为StaticQ
/// </summary>
public int QValue { get; set; } = 5;
/// <summary>
/// Gen2会话取值范围为0、1、2、3
/// </summary>
public int Session { get; set; } = 1;
/// <summary>
/// 读取TID
/// </summary>
public bool ReadTID { get; set; } = false;
/// <summary>
/// 目标0=A, 1=B, 2=AB, 3=BA
/// </summary>
public int Target { get; set; } = 0;
/// <summary>
/// 0=FM0, 1=M2, 2=M4, 3=M8
/// </summary>
public int RfMode { get; set; } = 1;
/// <summary>
/// 快速模式
/// </summary>
public bool IsFastRead { get; set; } = true;
/// <summary>
/// 0快速模式1快速模式-读距离优先2快速模式-读次数优先3Ex10快速模式4按照给定的Gen2参数进行设置
/// </summary>
public int QuickModeType { get; set; } = 3;
/// <summary>
/// 天线
/// </summary>
public int AntCount { get; set; } = 4; // 天线数量,默认 4
/// <summary>
/// 天线功率,单位 dBm
/// </summary>
public double PowerDbm { get; set; } = 30;
}
/// <summary>
/// 工厂/构建方法:根据参数创建 SilionReaderConfig 对象
/// </summary>
public static class SilionReaderFactory
{
public static SilionReaderConfig Create(SilionReaderParams parameters)
{
if (parameters == null) throw new ArgumentNullException(nameof(parameters));
// 基础配置
var readerConfig = new SilionReaderConfig
{
Qvalue = parameters.QValue,
Session = parameters.Session,
ReadTID = parameters.ReadTID,
Target = parameters.Target,
RfMode = parameters.RfMode,
IsFastRead = parameters.IsFastRead,
QuickModeType = parameters.QuickModeType,
Antennas = new List<SilionAntennaConfig>()
};
// 确保天线数量至少为 1避免出现无天线的情况。
int antCount = Math.Max(1, parameters.AntCount);
for (int i = 0; i < antCount; i++)
{
readerConfig.Antennas.Add(new SilionAntennaConfig
{
IsEnabled = true,
PortNumber = (ushort)(i + 1),
TxPowerInDbm = (int)parameters.PowerDbm
});
}
return readerConfig;
}
}
}
}