diff --git a/SysTunnelNuget.sln b/SysTunnelNuget.sln new file mode 100644 index 0000000..d183b5b --- /dev/null +++ b/SysTunnelNuget.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36623.8 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TunnelNuget", "TunnelNuget\TunnelNuget.csproj", "{7B9289E9-0AE5-40A8-B5F8-1DCD5FC9F4E3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UITunnel", "UITunnel\UITunnel.csproj", "{974DBE1D-C300-4BAA-8163-F7D7AA99CED4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7B9289E9-0AE5-40A8-B5F8-1DCD5FC9F4E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7B9289E9-0AE5-40A8-B5F8-1DCD5FC9F4E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7B9289E9-0AE5-40A8-B5F8-1DCD5FC9F4E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7B9289E9-0AE5-40A8-B5F8-1DCD5FC9F4E3}.Release|Any CPU.Build.0 = Release|Any CPU + {974DBE1D-C300-4BAA-8163-F7D7AA99CED4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {974DBE1D-C300-4BAA-8163-F7D7AA99CED4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {974DBE1D-C300-4BAA-8163-F7D7AA99CED4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {974DBE1D-C300-4BAA-8163-F7D7AA99CED4}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {57D3B418-10FA-47A0-9EAF-3CDC901A6EF1} + EndGlobalSection +EndGlobal diff --git a/TunnelNuget/IRfidTunnel.cs b/TunnelNuget/IRfidTunnel.cs new file mode 100644 index 0000000..fb27774 --- /dev/null +++ b/TunnelNuget/IRfidTunnel.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Rovinj.Tunnel; +using Rovinj.Reader.Silion; +using Rovinj.Device; +namespace TunnelNuget +{ + /// + /// 隧道机接口 + /// + public interface IRfidTunnel + { + /// + /// 连接通道机 + /// + bool ConnectTunnel(SilionReaderConfig readerConfig, ConnectionConfig plcConnectionConfig, TunnelConfig tunnelConfig); + + /// + /// 关闭通道机 + /// + /// + void CloseTunnel(); + + /// + /// 标签报告事件 + /// + /// + /// + void Tunnel_TagsReported(ITunnel tunnel, TunnelTagsReportedEventArgs e); + /// + /// 通道机读写器状态变化事件 + /// + /// + /// + void Tunnel_ReaderStateChanged(ITunnel tunnel, TunnelReaderStateChangedEventArgs e); + /// + /// 通道机PLC状态变化事件 + /// + /// + /// + void Tunnel_PlcStateChanged(ITunnel tunnel, TunnelPlcStateChangedEventArgs e); + + /// + /// 通道机错误事件 + /// + /// + /// + void Tunnel_ErrorReceived(ITunnel tunnel, TunnelErrorReceivedEventArgs e); + } +} diff --git a/TunnelNuget/InfoParams.cs b/TunnelNuget/InfoParams.cs new file mode 100644 index 0000000..9a4f690 --- /dev/null +++ b/TunnelNuget/InfoParams.cs @@ -0,0 +1,214 @@ +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; + } + } + + + + } +} diff --git a/TunnelNuget/Properties/AssemblyInfo.cs b/TunnelNuget/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..8bdb991 --- /dev/null +++ b/TunnelNuget/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("TunnelNuget")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TunnelNuget")] +[assembly: AssemblyCopyright("Copyright © 2025")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("7b9289e9-0ae5-40a8-b5f8-1dcd5fc9f4e3")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/TunnelNuget/RfidTunnel.cs b/TunnelNuget/RfidTunnel.cs new file mode 100644 index 0000000..d61d4f6 --- /dev/null +++ b/TunnelNuget/RfidTunnel.cs @@ -0,0 +1,245 @@ +using Rovinj.Device; +using Rovinj.Reader.Silion; +using Rovinj.Tunnel; +using Rovinj.Tunnel.Plc; +using Rovinj.Reader; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Media; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Rovinj.Log; + +namespace TunnelNuget +{ + /// + /// 隧道机实现类 + /// + public class RfidTunnel : IRfidTunnel + { + /// + /// 是否开始校验数量 + /// + private volatile bool isStartCheckTags; + /// + /// 扫描ID的标签 + /// + private string tagsScanId; + /// + /// 标签ID列表,可以是EPC或TID + /// + private List tagIdList = new List(); + /// + /// 当前PLC的状态 + /// + private PlcStatus currentPlcStatus; + /// + /// 隧道是否已连接 + /// + private bool isTunnelConnected; + /// + ///通道机接口 + /// + private ITunnel tunnel; + /// + /// 线程退出标识 + /// + private CancellationTokenSource cancellationTokenSource; + /// + /// 检查标签线程 + /// + private Thread checkTagsThread; + /// + /// Silion读写器,支持R2000/E310/E710芯片,支持1、2、3、4、8、16口天线 + /// + private SilionReader silionReader; + public RfidTunnel() { } + + /// + /// 通道机读写器状态变化事件 + /// + /// + /// + public void Tunnel_ReaderStateChanged(ITunnel tunnel, TunnelReaderStateChangedEventArgs e) + { + LogHelper.Error("e.RunningState:" + e.RunningState); + if (e.RunningState == 0) + { + //停止业务 + LogHelper.Info("停止业务"); + } + else if (e.RunningState == 1) + { + //启动业务 + tagsScanId = e.ScanId; + LogHelper.Info("启动业务"); + } + else + { + LogHelper.Info("其他状态"); + //其他状态 + } + } + + /// + /// 标签报告事件 + /// + /// + /// + public void Tunnel_TagsReported(ITunnel tunnel, TunnelTagsReportedEventArgs e) + { + LogHelper.Error("e.Tags.Count:" + e.Tags.Count); + for (int i = 0; i < e.Tags.Count; i++) + { + Tag tag = e.Tags[i]; + //过滤掉不符合扫描ID的标签 + if (tag.ScanId != tagsScanId) + continue; + + //如果配置为"TID"且TID不为空,则使用TID;否则使用EPC。检查标签ID是否已存在于 tagIdList 中,避免重复添加。 + if (tunnel.TunnelConfig.TagIdFieldName == "TID" && !string.IsNullOrEmpty(tag.TID)) + { + if (tagIdList.Contains(tag.TID)) + continue; + + tagIdList.Add(tag.TID); + LogHelper.Info("tag.TID:" + tag.TID); + } + else + { + if (tagIdList.Contains(tag.EPC)) + continue; + + tagIdList.Add(tag.EPC); + LogHelper.Info("tag.TID:" + tag.TID); + } + } + } + + + /// + /// 通道机PLC状态变化事件 + /// + /// + /// + public void Tunnel_PlcStateChanged(ITunnel tunnel, TunnelPlcStateChangedEventArgs e) + { + currentPlcStatus = e.PlcStatus;//记录当前PLC状态 + LogHelper.Info("通道机PLC状态变化事件:" + e.PlcStatus); + } + + /// + /// 通道机错误接收事件 + /// + /// + /// + /// + public void Tunnel_ErrorReceived(ITunnel tunnel, TunnelErrorReceivedEventArgs e) + { + // 在控制台输出错误信息,包括错误消息和异常详情 + Console.WriteLine($"错误信息:{e.ErrorMessage},异常:{e.Exception}"); + LogHelper.Error("通道机错误接收事件:" + $"错误信息:{e.ErrorMessage},异常:{e.Exception}"); + } + + /// + /// 关闭通道机连接 + /// + /// + /// + public void CloseTunnel() + { + if (tunnel == null) + return; + + if (tunnel.Reader.IsStarted) + { + tunnel.StopReader(); + } + + StopTunnel(); + tunnel.Close(); + tunnel = null; + isTunnelConnected = false; + } + + /// + /// 停止隧道 + /// + private void StopTunnel() + { + if (tunnel.IsStarted) + tunnel.Stop(); + + isStartCheckTags = false; + + if (cancellationTokenSource != null) + cancellationTokenSource.Cancel(); + + if (checkTagsThread != null) + checkTagsThread.Join(); + + } + + /// + /// 连接隧道 + /// + /// 配置RFID读写器参数 + /// 配置PLC连接方式 + /// 配置读写器连接方式 + public bool ConnectTunnel(SilionReaderConfig readerConfig, ConnectionConfig plcConnectionConfig, TunnelConfig tunnelConfig) + { + if (!isTunnelConnected) + { + //创建并打开隧道 + tunnel = TunnelFactory.CreateTunnel(TunnelType.SC201, tunnelConfig);//根据实际的设备选择对应的类型,这里假设是SC201 + tunnel.TagsReported += Tunnel_TagsReported; //读到标签时触发; + tunnel.ReaderStateChanged += Tunnel_ReaderStateChanged; //读写器状态变化 + tunnel.PlcStateChanged += Tunnel_PlcStateChanged; //PLC 状态变化 + tunnel.ErrorReceived += Tunnel_ErrorReceived; //收到错误时触发 + if (tunnel.Open()) + { + LogHelper.Info("连接成功"); + + isTunnelConnected = true; + + //获取读写器能力(支持的发射功率列表) + silionReader = tunnel.Reader as SilionReader; + if (silionReader.ReaderCapability != null) + { + //发射率列表 + List doubles = new List(); + for (int i = 0; i < silionReader.ReaderCapability.TxPowers.Count; i++) + { + doubles.Add(silionReader.ReaderCapability.TxPowers[i]); + LogHelper.Info("发射率列表:" + silionReader.ReaderCapability.TxPowers[i]); + } + } + + if (tunnel.Initialize())//复位 + { + LogHelper.Info("复位成功"); + //语音提示 + SoundPlayer player = new SoundPlayer(); + player.Play(); + } + return true; + } + else + { + LogHelper.Error("连接失败"); + tunnel.Close(); + isTunnelConnected = false; + return false; + } + } + else + { + CloseTunnel(); + return false; + } + } + + } +} diff --git a/TunnelNuget/Rovinj.Device.dll b/TunnelNuget/Rovinj.Device.dll new file mode 100644 index 0000000..0ceb592 Binary files /dev/null and b/TunnelNuget/Rovinj.Device.dll differ diff --git a/TunnelNuget/Rovinj.Reader.Silion.dll b/TunnelNuget/Rovinj.Reader.Silion.dll new file mode 100644 index 0000000..b5ac507 Binary files /dev/null and b/TunnelNuget/Rovinj.Reader.Silion.dll differ diff --git a/TunnelNuget/Rovinj.Reader.dll b/TunnelNuget/Rovinj.Reader.dll new file mode 100644 index 0000000..14b3ac7 Binary files /dev/null and b/TunnelNuget/Rovinj.Reader.dll differ diff --git a/TunnelNuget/Rovinj.Tunnel.dll b/TunnelNuget/Rovinj.Tunnel.dll new file mode 100644 index 0000000..035f601 Binary files /dev/null and b/TunnelNuget/Rovinj.Tunnel.dll differ diff --git a/TunnelNuget/TunnelNuget.csproj b/TunnelNuget/TunnelNuget.csproj new file mode 100644 index 0000000..680b7cd --- /dev/null +++ b/TunnelNuget/TunnelNuget.csproj @@ -0,0 +1,79 @@ + + + + + Debug + AnyCPU + {7B9289E9-0AE5-40A8-B5F8-1DCD5FC9F4E3} + Library + Properties + TunnelNuget + TunnelNuget + v4.6.1 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Rovinj.Reader.Silion.1.4.3.3\lib\net461\ModuleAPI.dll + + + ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll + + + ..\packages\Rovinj.Device.1.2.0\lib\net461\Rovinj.Device.dll + + + ..\packages\Rovinj.Log.1.1.0\lib\net461\Rovinj.Log.dll + + + ..\packages\Rovinj.Reader.1.4.3\lib\net461\Rovinj.Reader.dll + + + ..\packages\Rovinj.Reader.Silion.1.4.3.3\lib\net461\Rovinj.Reader.Silion.dll + + + ..\packages\Rovinj.Tunnel.1.9.0\lib\net461\Rovinj.Tunnel.dll + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + \ No newline at end of file diff --git a/TunnelNuget/packages.config b/TunnelNuget/packages.config new file mode 100644 index 0000000..feb9099 --- /dev/null +++ b/TunnelNuget/packages.config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/TunnelNuget/tunnelPlc.dll b/TunnelNuget/tunnelPlc.dll new file mode 100644 index 0000000..d38d4a4 Binary files /dev/null and b/TunnelNuget/tunnelPlc.dll differ diff --git a/UITunnel/App.config b/UITunnel/App.config new file mode 100644 index 0000000..731f6de --- /dev/null +++ b/UITunnel/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/UITunnel/Program.cs b/UITunnel/Program.cs new file mode 100644 index 0000000..7e0ea2a --- /dev/null +++ b/UITunnel/Program.cs @@ -0,0 +1,136 @@ +using Rovinj.Device; +using Rovinj.Log; +using Rovinj.Reader; +using Rovinj.Reader.Silion; +using Rovinj.Tunnel; +using Rovinj.Tunnel.Plc; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TunnelNuget; +using static TunnelNuget.InfoParams; + +namespace UITunnel +{ + internal class Program + { + /// + /// 模拟连接隧道机 + /// + static void Main(string[] args) + { + //创建日志目录 + if (!Directory.Exists("log")) + Directory.CreateDirectory("log"); + + //初始化日志组件(仅供测试使用) + Rovinj.Log.LogHelper.InitLogger(new Rovinj.Log.TextLog($"log\\{DateTime.Now:yyyy-MM-dd}.log")); + + //隧道机业务层 + RfidTunnel rfidTunnel = new RfidTunnel(); + + ////配置RFID读写器参数 + #region 自定义 配置RFID读写器参数 + //SilionReaderConfig readerConfig = new SilionReaderConfig() + //{ + // Qvalue = 5, + // Session = 1, + // ReadTID = false, + // Target = 0, + // RfMode = 1, + // IsFastRead = true, + // QuickModeType = 3, + // Antennas = new List(), + //}; + //double power = 30; //功率 + //int antCount = 4; //4个天线 + + ////根据用户输入的天线数量(默认 4 个),给每个天线端口配置功率和启用状态。 + //for (int i = 0; i < antCount; i++) + //{ + // readerConfig.Antennas.Add(new SilionAntennaConfig() + // { + // IsEnabled = true, + // PortNumber = (ushort)(i + 1), + // TxPowerInDbm = power + // }); + //} + #endregion + var readerParams = new SilionReaderParams + { + QValue = 5, + Session = 1, + ReadTID = false, + Target = 0, + RfMode = 1, + IsFastRead = true, + QuickModeType = 3, + AntCount = 4, + PowerDbm = 30 + }; + + SilionReaderConfig readerConfig = SilionReaderFactory.Create(readerParams); + + #region 配置PLC连接方式 + + //ConnectionConfig plcConnectionConfig = new ConnectionConfig(); + //plcConnectionConfig.ConnectionMode = ConnectionMode.Network; //网口连接模式 + //plcConnectionConfig.NetworkAddress = "192.168.1.250"; //PLC IP地址 + //plcConnectionConfig.NetworkPort = 502; //PLC 端口号 + #endregion + var PlcParameters = new PlcConnectionParams + { + Address = "192.168.1.250", + Mode = ConnectionMode.Network, + Port = 502 + }; + ConnectionConfig plcConnectionConfig = PlcConnectionFactory.Create(PlcParameters); + + #region 配置读写器连接方式 + + //ConnectionConfig readerConnectionConfig = new ConnectionConfig(); + //readerConnectionConfig.Args = new object[] { antCount }; //天线数量,默认是4个天线,支持1,2,4,8,16 + //readerConnectionConfig.ConnectionMode = ConnectionMode.Network; //网口连接模式 + //readerConnectionConfig.NetworkAddress = "192.168.1.100"; + #endregion + var ReaderParameters = new ReaderConnectionParams + { + Args = new object[] { 4 }, + Mode = ConnectionMode.Network, + Address = "192.168.1.100" + + }; + ConnectionConfig readerConnectionConfig = ReaderConnectionFactory.Create(ReaderParameters); + + + + //封装成隧道配置 根据用户选择,判断是三菱还是西门子 PLC。 + TunnelConfig tunnelConfig = new TunnelConfig() + { + PlcType = PlcType.Mitsubishi_FX5U, //PLC类型 + PlcConnectionConfig = plcConnectionConfig, //PLC连接配置 + ReaderConnectionConfig = readerConnectionConfig, //读写器连接配置 + ReaderConfig = readerConfig, //读写器配置 + ReaderType = Rovinj.Tunnel.Reader.ReaderType.Silion //读写器类型 + }; + + //西门子PLC暂时不支持使用串口的通讯方式 + if ((tunnelConfig.PlcType == PlcType.Mitsubishi_FX5U || tunnelConfig.PlcType == PlcType.Siemens) + && tunnelConfig.PlcConnectionConfig.ConnectionMode != ConnectionMode.Network) + { + LogHelper.Error("暂不支持的连接方式!"); + return; + } + + //是否连接成功 + bool result = rfidTunnel.ConnectTunnel(readerConfig, plcConnectionConfig, tunnelConfig); + if (result) + { + + } + } + } +} diff --git a/UITunnel/Properties/AssemblyInfo.cs b/UITunnel/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..639fa5d --- /dev/null +++ b/UITunnel/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("UITunnel")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("UITunnel")] +[assembly: AssemblyCopyright("Copyright © 2025")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("974dbe1d-c300-4baa-8163-f7d7aa99ced4")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/UITunnel/UITunnel.csproj b/UITunnel/UITunnel.csproj new file mode 100644 index 0000000..c57d2d0 --- /dev/null +++ b/UITunnel/UITunnel.csproj @@ -0,0 +1,103 @@ + + + + + Debug + AnyCPU + {974DBE1D-C300-4BAA-8163-F7D7AA99CED4} + Exe + UITunnel + UITunnel + v4.6.1 + 512 + true + true + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Rovinj.Reader.Silion.1.4.3.3\lib\net461\ModuleAPI.dll + + + ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll + + + ..\packages\Rovinj.Device.1.2.0\lib\net461\Rovinj.Device.dll + + + ..\packages\Rovinj.Log.1.1.0\lib\net461\Rovinj.Log.dll + + + ..\packages\Rovinj.Reader.1.4.3\lib\net461\Rovinj.Reader.dll + + + ..\packages\Rovinj.Reader.Silion.1.4.3.3\lib\net461\Rovinj.Reader.Silion.dll + + + ..\packages\Rovinj.Tunnel.1.9.0\lib\net461\Rovinj.Tunnel.dll + + + + + + + + + + + + + + + + + + + + + {7b9289e9-0ae5-40a8-b5f8-1dcd5fc9f4e3} + TunnelNuget + + + + + False + .NET Framework 3.5 SP1 + false + + + + \ No newline at end of file diff --git a/UITunnel/packages.config b/UITunnel/packages.config new file mode 100644 index 0000000..feb9099 --- /dev/null +++ b/UITunnel/packages.config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file