215 lines
7.3 KiB
C#
215 lines
7.3 KiB
C#
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:快速模式-读次数优先;3:Ex10快速模式;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;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
}
|
||
}
|