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;
}
}
}
}