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 { /// /// 参数列表 /// public class InfoParams { /// /// Plc连接工厂 /// public class PlcConnectionParams { /// /// Ip地址 /// public string Address { get; set; } /// /// 端口号 /// public ushort Port { get; set; } = 502; /// /// 波特率 /// public int BaudRate { get; set; } = 9600; /// /// 连接模式 /// public ConnectionMode Mode { get; set; } } /// /// 工厂/构建方法:根据参数创建配置对象 /// 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; } } /// /// 参数对象:读写器连接参数 /// public class ReaderConnectionParams { /// /// 天线数量 /// public object[] Args { get; set; } /// /// IP地址 /// public string Address { get; set; } /// /// 连接模式 /// public ConnectionMode Mode { get; set; } } /// /// 工厂/构建方法:根据参数创建读取/写入器的连接配置对象 /// 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; } } /// /// 参数对象:RFID 读写器参数 /// public class SilionReaderParams { /// /// Q值,-1=DynamicQ, 0~15时为StaticQ /// public int QValue { get; set; } = 5; /// /// Gen2会话,取值范围为0、1、2、3 /// public int Session { get; set; } = 1; /// /// 读取TID /// public bool ReadTID { get; set; } = false; /// /// 目标,0=A, 1=B, 2=AB, 3=BA /// public int Target { get; set; } = 0; /// /// 0=FM0, 1=M2, 2=M4, 3=M8 /// public int RfMode { get; set; } = 1; /// /// 快速模式 /// public bool IsFastRead { get; set; } = true; /// /// 0:快速模式;1:快速模式-读距离优先;2:快速模式-读次数优先;3:Ex10快速模式;4:按照给定的Gen2参数进行设置 /// public int QuickModeType { get; set; } = 3; /// /// 天线 /// public int AntCount { get; set; } = 4; // 天线数量,默认 4 /// /// 天线功率,单位 dBm /// public double PowerDbm { get; set; } = 30; } /// /// 工厂/构建方法:根据参数创建 SilionReaderConfig 对象 /// 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() }; // 确保天线数量至少为 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; } } } }