215 lines
7.3 KiB
C#
Raw Permalink Normal View History

2025-11-01 15:24:28 +08:00
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;
}
}
}
}