添加项目文件。
This commit is contained in:
parent
9561817cc2
commit
6b83962ae1
5
LolaiService/.config/dotnet-tools.json
Normal file
5
LolaiService/.config/dotnet-tools.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"isRoot": true,
|
||||||
|
"tools": {}
|
||||||
|
}
|
||||||
71
LolaiService/Controllers/TunnelApiController.cs
Normal file
71
LolaiService/Controllers/TunnelApiController.cs
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
using LolaiService.Devices.Tunnel;
|
||||||
|
using LolaiService.Global;
|
||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace LolaiService.Controllers
|
||||||
|
{
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
[ApiController]
|
||||||
|
public class TunnelApiController : ControllerBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 隧道机关门
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost("TunnelClose")]
|
||||||
|
public string TunnelCloseApi()
|
||||||
|
{
|
||||||
|
string result = GlobalDeviceInfo.CloseDoorTunnel();
|
||||||
|
if (result.Equals("已关门"))
|
||||||
|
{
|
||||||
|
return "关门成功";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "关门失败";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 隧道机开门
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost("TunnelOpen")]
|
||||||
|
public string TunnelOpenDoorApi()
|
||||||
|
{
|
||||||
|
string result = GlobalDeviceInfo.OpenDoorTunnel();
|
||||||
|
if (result.Equals("已开门"))
|
||||||
|
{
|
||||||
|
return "开门成功";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "开门失败";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[HttpGet("today")]
|
||||||
|
public IActionResult GetTodayWeather()
|
||||||
|
{
|
||||||
|
var data = new { Temp = 22, Condition = "Sunny" };
|
||||||
|
return Ok(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET api/weather/week
|
||||||
|
[HttpGet("week")]
|
||||||
|
public IActionResult GetWeekForecast()
|
||||||
|
{
|
||||||
|
var data = new[]
|
||||||
|
{
|
||||||
|
new { Day = "Mon", Temp = 21, Condition = "Cloudy" },
|
||||||
|
new { Day = "Tue", Temp = 23, Condition = "Sunny" },
|
||||||
|
new { Day = "Wed", Temp = 19, Condition = "Rain" },
|
||||||
|
};
|
||||||
|
return Ok(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
63
LolaiService/Devices/Tunnel/IRfidTunnel.cs
Normal file
63
LolaiService/Devices/Tunnel/IRfidTunnel.cs
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
using Rovinj.Device;
|
||||||
|
using Rovinj.Reader.Silion;
|
||||||
|
using Rovinj.Tunnel;
|
||||||
|
|
||||||
|
namespace LolaiService.Devices.Tunnel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 隧道机接口
|
||||||
|
/// </summary>
|
||||||
|
public interface IRfidTunnel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 连接通道机
|
||||||
|
/// </summary>
|
||||||
|
bool ConnectTunnel(SilionReaderConfig readerConfig, ConnectionConfig plcConnectionConfig, TunnelConfig tunnelConfig);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 关闭通道机
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
void CloseTunnel();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 标签报告事件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tunnel"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
void Tunnel_TagsReported(ITunnel tunnel, TunnelTagsReportedEventArgs e);
|
||||||
|
/// <summary>
|
||||||
|
/// 通道机读写器状态变化事件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tunnel"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
void Tunnel_ReaderStateChanged(ITunnel tunnel, TunnelReaderStateChangedEventArgs e);
|
||||||
|
/// <summary>
|
||||||
|
/// 通道机PLC状态变化事件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tunnel"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
void Tunnel_PlcStateChanged(ITunnel tunnel, TunnelPlcStateChangedEventArgs e);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 通道机错误事件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tunnel"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
void Tunnel_ErrorReceived(ITunnel tunnel, TunnelErrorReceivedEventArgs e);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 隧道关门
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
string CloseDoor();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 隧道开门
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
string OpenDoor();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
285
LolaiService/Devices/Tunnel/RfidTunnel.cs
Normal file
285
LolaiService/Devices/Tunnel/RfidTunnel.cs
Normal file
@ -0,0 +1,285 @@
|
|||||||
|
using LolaiService.Global;
|
||||||
|
using Rovinj.Device;
|
||||||
|
using Rovinj.Log;
|
||||||
|
using Rovinj.Reader;
|
||||||
|
using Rovinj.Reader.Silion;
|
||||||
|
using Rovinj.Tunnel;
|
||||||
|
using Rovinj.Tunnel.Plc;
|
||||||
|
|
||||||
|
namespace LolaiService.Devices.Tunnel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 隧道机实现类
|
||||||
|
/// </summary>
|
||||||
|
public class RfidTunnel : IRfidTunnel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 是否开始校验数量
|
||||||
|
/// </summary>
|
||||||
|
private volatile bool isStartCheckTags;
|
||||||
|
/// <summary>
|
||||||
|
/// 扫描ID的标签
|
||||||
|
/// </summary>
|
||||||
|
private string tagsScanId;
|
||||||
|
/// <summary>
|
||||||
|
/// 标签ID列表,可以是EPC或TID
|
||||||
|
/// </summary>
|
||||||
|
private List<string> tagIdList = new List<string>();
|
||||||
|
/// <summary>
|
||||||
|
/// 当前PLC的状态
|
||||||
|
/// </summary>
|
||||||
|
private PlcStatus currentPlcStatus;
|
||||||
|
/// <summary>
|
||||||
|
/// 隧道是否已连接
|
||||||
|
/// </summary>
|
||||||
|
//private bool isTunnelConnected;
|
||||||
|
/// <summary>
|
||||||
|
///通道机接口
|
||||||
|
/// </summary>
|
||||||
|
//private ITunnel tunnel;
|
||||||
|
/// <summary>
|
||||||
|
/// 线程退出标识
|
||||||
|
/// </summary>
|
||||||
|
private CancellationTokenSource cancellationTokenSource;
|
||||||
|
/// <summary>
|
||||||
|
/// 检查标签线程
|
||||||
|
/// </summary>
|
||||||
|
private Thread checkTagsThread;
|
||||||
|
/// <summary>
|
||||||
|
/// Silion读写器,支持R2000/E310/E710芯片,支持1、2、3、4、8、16口天线
|
||||||
|
/// </summary>
|
||||||
|
private SilionReader silionReader;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 通道机读写器状态变化事件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tunnel"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
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("其他状态");
|
||||||
|
//其他状态
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 标签报告事件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tunnel"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 通道机PLC状态变化事件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tunnel"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
public void Tunnel_PlcStateChanged(ITunnel tunnel, TunnelPlcStateChangedEventArgs e)
|
||||||
|
{
|
||||||
|
currentPlcStatus = e.PlcStatus;//记录当前PLC状态
|
||||||
|
LogHelper.Info("通道机PLC状态变化事件:" + e.PlcStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 通道机错误接收事件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tunnel"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
/// <exception cref="NotImplementedException"></exception>
|
||||||
|
public void Tunnel_ErrorReceived(ITunnel tunnel, TunnelErrorReceivedEventArgs e)
|
||||||
|
{
|
||||||
|
// 在控制台输出错误信息,包括错误消息和异常详情
|
||||||
|
Console.WriteLine($"错误信息:{e.ErrorMessage},异常:{e.Exception}");
|
||||||
|
LogHelper.Error("通道机错误接收事件:" + $"错误信息:{e.ErrorMessage},异常:{e.Exception}");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 关闭通道机连接
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="NotImplementedException"></exception>
|
||||||
|
public void CloseTunnel()
|
||||||
|
{
|
||||||
|
if (GlobalData.tunnel == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (GlobalData.tunnel.Reader.IsStarted)
|
||||||
|
{
|
||||||
|
GlobalData.tunnel.StopReader();
|
||||||
|
}
|
||||||
|
|
||||||
|
StopTunnel();
|
||||||
|
GlobalData.tunnel.Close();
|
||||||
|
GlobalData.tunnel = null;
|
||||||
|
GlobalData.isTunnelConnected = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 停止隧道
|
||||||
|
/// </summary>
|
||||||
|
private void StopTunnel()
|
||||||
|
{
|
||||||
|
if (GlobalData.tunnel.IsStarted)
|
||||||
|
GlobalData.tunnel.Stop();
|
||||||
|
|
||||||
|
isStartCheckTags = false;
|
||||||
|
|
||||||
|
if (cancellationTokenSource != null)
|
||||||
|
cancellationTokenSource.Cancel();
|
||||||
|
|
||||||
|
if (checkTagsThread != null)
|
||||||
|
checkTagsThread.Join();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 连接隧道
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="readerConfig">配置RFID读写器参数</param>
|
||||||
|
/// <param name="plcConnectionConfig">配置PLC连接方式</param>
|
||||||
|
/// <param name="tunnelConfig">配置读写器连接方式</param>
|
||||||
|
public bool ConnectTunnel(SilionReaderConfig readerConfig, ConnectionConfig plcConnectionConfig, TunnelConfig tunnelConfig)
|
||||||
|
{
|
||||||
|
if (!GlobalData.isTunnelConnected)
|
||||||
|
{
|
||||||
|
//创建并打开隧道
|
||||||
|
GlobalData.tunnel = TunnelFactory.CreateTunnel(TunnelType.SC201, tunnelConfig);//根据实际的设备选择对应的类型,这里假设是SC201
|
||||||
|
GlobalData.tunnel.TagsReported += Tunnel_TagsReported; //读到标签时触发;
|
||||||
|
GlobalData.tunnel.ReaderStateChanged += Tunnel_ReaderStateChanged; //读写器状态变化
|
||||||
|
GlobalData.tunnel.PlcStateChanged += Tunnel_PlcStateChanged; //PLC 状态变化
|
||||||
|
GlobalData.tunnel.ErrorReceived += Tunnel_ErrorReceived; //收到错误时触发
|
||||||
|
if (GlobalData.tunnel.Open())
|
||||||
|
{
|
||||||
|
LogHelper.Info("连接成功");
|
||||||
|
|
||||||
|
GlobalData.isTunnelConnected = true;
|
||||||
|
|
||||||
|
//获取读写器能力(支持的发射功率列表)
|
||||||
|
silionReader = GlobalData.tunnel.Reader as SilionReader;
|
||||||
|
if (silionReader.ReaderCapability != null)
|
||||||
|
{
|
||||||
|
//发射率列表
|
||||||
|
List<double> doubles = new List<double>();
|
||||||
|
for (int i = 0; i < silionReader.ReaderCapability.TxPowers.Count; i++)
|
||||||
|
{
|
||||||
|
doubles.Add(silionReader.ReaderCapability.TxPowers[i]);
|
||||||
|
LogHelper.Info("发射率列表:" + silionReader.ReaderCapability.TxPowers[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GlobalData.tunnel.Initialize())//复位
|
||||||
|
{
|
||||||
|
LogHelper.Info("复位成功");
|
||||||
|
//语音提示
|
||||||
|
//SoundPlayer player = new SoundPlayer();
|
||||||
|
//player.Play();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LogHelper.Error("连接失败");
|
||||||
|
GlobalData.tunnel.Close();
|
||||||
|
GlobalData.isTunnelConnected = false;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CloseTunnel();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 隧道关门
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public string CloseDoor()
|
||||||
|
{
|
||||||
|
if (GlobalData.tunnel == null)
|
||||||
|
{
|
||||||
|
return "隧道机未连接";
|
||||||
|
}
|
||||||
|
if (GlobalData.tunnel.CloseDoor())
|
||||||
|
{
|
||||||
|
return "已关门";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "关门失败";
|
||||||
|
}
|
||||||
|
//MessageBox.Show(string.Format(crm.GetString("ExecuteCommandFailed"), btn_CloseDoor.Text));
|
||||||
|
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 隧道开门
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public string OpenDoor()
|
||||||
|
{
|
||||||
|
|
||||||
|
if (GlobalData.tunnel == null)
|
||||||
|
{
|
||||||
|
return "隧道机未连接";
|
||||||
|
}
|
||||||
|
if (GlobalData.tunnel.OpenDoor())
|
||||||
|
{
|
||||||
|
return "已开门";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "开门失败";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
16
LolaiService/Global/GlobalData.cs
Normal file
16
LolaiService/Global/GlobalData.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
using Rovinj.Tunnel;
|
||||||
|
|
||||||
|
namespace LolaiService.Global
|
||||||
|
{
|
||||||
|
public static class GlobalData
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 隧道机是否已连接
|
||||||
|
/// </summary>
|
||||||
|
public static bool isTunnelConnected = false;
|
||||||
|
/// <summary>
|
||||||
|
/// 隧道机接口
|
||||||
|
/// </summary>
|
||||||
|
public static ITunnel tunnel;
|
||||||
|
}
|
||||||
|
}
|
||||||
124
LolaiService/Global/GlobalDeviceInfo.cs
Normal file
124
LolaiService/Global/GlobalDeviceInfo.cs
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
using LolaiService.Devices.Tunnel;
|
||||||
|
using Rovinj.Device;
|
||||||
|
using Rovinj.Reader.Silion;
|
||||||
|
using Rovinj.Tunnel;
|
||||||
|
using Rovinj.Tunnel.Plc;
|
||||||
|
|
||||||
|
namespace LolaiService.Global
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 隧道机设备
|
||||||
|
/// </summary>
|
||||||
|
public class GlobalDeviceInfo
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 连接设备
|
||||||
|
/// </summary>
|
||||||
|
public static bool ConnectDevice()
|
||||||
|
{
|
||||||
|
//创建日志目录
|
||||||
|
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<SilionAntennaConfig>(),
|
||||||
|
};
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
#region 配置PLC连接方式
|
||||||
|
|
||||||
|
ConnectionConfig plcConnectionConfig = new ConnectionConfig();
|
||||||
|
plcConnectionConfig.ConnectionMode = ConnectionMode.Network; //网口连接模式
|
||||||
|
plcConnectionConfig.NetworkAddress = "192.168.1.250"; //PLC IP地址
|
||||||
|
plcConnectionConfig.NetworkPort = 502; //PLC 端口号
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
||||||
|
//封装成隧道配置 根据用户选择,判断是三菱还是西门子 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)
|
||||||
|
//{
|
||||||
|
// return false;
|
||||||
|
//}
|
||||||
|
|
||||||
|
//是否连接成功
|
||||||
|
bool result = rfidTunnel.ConnectTunnel(readerConfig, plcConnectionConfig, tunnelConfig);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 隧道关门
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string CloseDoorTunnel()
|
||||||
|
{
|
||||||
|
RfidTunnel rfidTunnel = new RfidTunnel();
|
||||||
|
|
||||||
|
return rfidTunnel.CloseDoor();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 隧道开门
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string OpenDoorTunnel()
|
||||||
|
{
|
||||||
|
RfidTunnel rfidTunnel = new RfidTunnel();
|
||||||
|
|
||||||
|
return rfidTunnel.OpenDoor();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
16
LolaiService/Global/GlobalVar.cs
Normal file
16
LolaiService/Global/GlobalVar.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
namespace LolaiService.Global
|
||||||
|
{
|
||||||
|
|
||||||
|
public class GlobalVar
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 初始化设备
|
||||||
|
/// </summary>
|
||||||
|
public static void InitData()
|
||||||
|
{
|
||||||
|
GlobalDeviceInfo.ConnectDevice();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
35
LolaiService/LolaiService.csproj
Normal file
35
LolaiService/LolaiService.csproj
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.IdentityModel.Logging" Version="8.14.0" />
|
||||||
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Rovinj.Device">
|
||||||
|
<HintPath>..\..\demo1.9\Rovinj.Device.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Rovinj.Log">
|
||||||
|
<HintPath>..\..\demo1.9\Rovinj.Log.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Rovinj.Reader">
|
||||||
|
<HintPath>..\..\demo1.9\Rovinj.Reader.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Rovinj.Reader.Silion">
|
||||||
|
<HintPath>..\..\demo1.9\Rovinj.Reader.Silion.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Rovinj.Tunnel">
|
||||||
|
<HintPath>..\..\demo1.9\Rovinj.Tunnel.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ProjectExtensions><VisualStudio><UserProperties properties_4launchsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
|
||||||
|
|
||||||
|
</Project>
|
||||||
6
LolaiService/LolaiService.http
Normal file
6
LolaiService/LolaiService.http
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
@LolaiService_HostAddress = http://localhost:5049
|
||||||
|
|
||||||
|
GET {{LolaiService_HostAddress}}/weatherforecast/
|
||||||
|
Accept: application/json
|
||||||
|
|
||||||
|
###
|
||||||
39
LolaiService/Program.cs
Normal file
39
LolaiService/Program.cs
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
|
||||||
|
namespace LolaiService
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
||||||
|
// Add services to the container.
|
||||||
|
|
||||||
|
builder.Services.AddControllers();
|
||||||
|
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||||
|
builder.Services.AddEndpointsApiExplorer();
|
||||||
|
builder.Services.AddSwaggerGen();
|
||||||
|
|
||||||
|
var app = builder.Build();
|
||||||
|
|
||||||
|
// Configure the HTTP request pipeline.
|
||||||
|
if (app.Environment.IsDevelopment())
|
||||||
|
{
|
||||||
|
app.UseSwagger();
|
||||||
|
app.UseSwaggerUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
app.UseHttpsRedirection();
|
||||||
|
|
||||||
|
app.UseAuthorization();
|
||||||
|
|
||||||
|
|
||||||
|
app.MapControllers();
|
||||||
|
|
||||||
|
|
||||||
|
Global.GlobalDeviceInfo.ConnectDevice();
|
||||||
|
|
||||||
|
app.Run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
41
LolaiService/Properties/launchSettings.json
Normal file
41
LolaiService/Properties/launchSettings.json
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||||
|
"iisSettings": {
|
||||||
|
"windowsAuthentication": false,
|
||||||
|
"anonymousAuthentication": true,
|
||||||
|
"iisExpress": {
|
||||||
|
"applicationUrl": "http://localhost:50686",
|
||||||
|
"sslPort": 44389
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"profiles": {
|
||||||
|
"http": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"dotnetRunMessages": true,
|
||||||
|
"launchBrowser": true,
|
||||||
|
"launchUrl": "swagger",
|
||||||
|
"applicationUrl": "http://localhost:5049",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"https": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"dotnetRunMessages": true,
|
||||||
|
"launchBrowser": true,
|
||||||
|
"launchUrl": "swagger",
|
||||||
|
"applicationUrl": "https://localhost:8999;http://localhost:5049",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"IIS Express": {
|
||||||
|
"commandName": "IISExpress",
|
||||||
|
"launchBrowser": true,
|
||||||
|
"launchUrl": "swagger",
|
||||||
|
"environmentVariables": {
|
||||||
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
13
LolaiService/WeatherForecast.cs
Normal file
13
LolaiService/WeatherForecast.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
namespace LolaiService
|
||||||
|
{
|
||||||
|
public class WeatherForecast
|
||||||
|
{
|
||||||
|
public DateOnly Date { get; set; }
|
||||||
|
|
||||||
|
public int TemperatureC { get; set; }
|
||||||
|
|
||||||
|
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
|
||||||
|
|
||||||
|
public string? Summary { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
8
LolaiService/appsettings.Development.json
Normal file
8
LolaiService/appsettings.Development.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Information",
|
||||||
|
"Microsoft.AspNetCore": "Warning"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
9
LolaiService/appsettings.json
Normal file
9
LolaiService/appsettings.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Information",
|
||||||
|
"Microsoft.AspNetCore": "Warning"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AllowedHosts": "*"
|
||||||
|
}
|
||||||
BIN
LolaiService/tunnelPlc.dll
Normal file
BIN
LolaiService/tunnelPlc.dll
Normal file
Binary file not shown.
25
LolaiSysService.sln
Normal file
25
LolaiSysService.sln
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
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}") = "LolaiService", "LolaiService\LolaiService.csproj", "{9EF3747E-AF77-46F0-9F5B-624765C748E1}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{9EF3747E-AF77-46F0-9F5B-624765C748E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{9EF3747E-AF77-46F0-9F5B-624765C748E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{9EF3747E-AF77-46F0-9F5B-624765C748E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{9EF3747E-AF77-46F0-9F5B-624765C748E1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {4273D124-83C5-4283-AD67-CDC24E9BE380}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
Loading…
x
Reference in New Issue
Block a user