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