1、电梯服务类新增获取电梯状态接口
2、自定义日志记录器代码调整 3、电梯流程新增测试代码
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System.Dynamic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Dynamic;
|
||||
using JNPF;
|
||||
using JNPF.Common.Extension;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
@@ -120,7 +121,7 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
TaskCompletionSource<object> tcs = new();
|
||||
dynamic reqParam = new ExpandoObject();
|
||||
reqParam.DevName = _elevatorCtlCfg.DevName;
|
||||
//reqParam.DevName = _elevatorCtlCfg.DevName;
|
||||
reqParam.TagName = tagName;
|
||||
reqParam.value = value;
|
||||
reqParam.token = _elevatorCtlCfg.token;
|
||||
@@ -133,7 +134,7 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
Dictionary<string, string> parameters = new()
|
||||
{
|
||||
["DevName"] = _elevatorCtlCfg.DevName,
|
||||
//["DevName"] = _elevatorCtlCfg.DevName,
|
||||
["token"] = _elevatorCtlCfg.token,
|
||||
};
|
||||
if (obj is IDictionary<string, object> dynamicDic)
|
||||
@@ -181,7 +182,7 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
Dictionary<string, string> dicCommand = new(StringComparer.OrdinalIgnoreCase)
|
||||
{
|
||||
["DevName"] = _elevatorCtlCfg.DevName,
|
||||
//["DevName"] = _elevatorCtlCfg.DevName,
|
||||
["TagName"] = "AGVControl",
|
||||
["Value"] = value.ToString(),
|
||||
["token"] = _elevatorCtlCfg.token
|
||||
@@ -228,39 +229,107 @@ namespace Tnb.WarehouseMgr
|
||||
return jo.Value<int>("V");
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取电梯状态
|
||||
/// </summary>
|
||||
/// <param name="devName"></param>
|
||||
/// <param name="token"></param>
|
||||
/// <returns></returns>
|
||||
|
||||
[HttpGet]
|
||||
public async Task<(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus)> GetElevatorStatus(string devName, CancellationToken token)
|
||||
{
|
||||
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) multi = (-1, -1, -1, -1, -1);
|
||||
Dictionary<string, string> pars = new()
|
||||
try
|
||||
{
|
||||
["DevName"] = devName,
|
||||
["Pos"] = "1",
|
||||
["Count"] = "11",
|
||||
["token"] = _elevatorCtlCfg.token
|
||||
};
|
||||
string url = _elevatorCtlCfg.GetTagListUrl;
|
||||
string systemInfo = await HttpClientHelper.GetAsync(url, pars: pars);
|
||||
JObject jo = JObject.Parse(systemInfo);
|
||||
List<JObject?> objs = jo["Items"].Values<JObject>().ToList();
|
||||
//if (objs?.Count == 4)
|
||||
{
|
||||
if (objs[0].Value<string>("Name").Equals("SysStatus")
|
||||
&& objs[1].Value<string>("Name").Equals("RunStatus")
|
||||
&& objs[3].Value<string>("Name").Equals("FloorNo"))
|
||||
Dictionary<string, string> pars = new()
|
||||
{
|
||||
multi = (objs[0].Value<int>("V"), objs[1].Value<int>("V"), objs[3].Value<int>("V"), objs[2].Value<int>("V"), objs[9].Value<int>("V"));
|
||||
["DevName"] = devName,
|
||||
["Pos"] = "1",
|
||||
["Count"] = "11",
|
||||
["token"] = _elevatorCtlCfg.token
|
||||
};
|
||||
string url = _elevatorCtlCfg.GetTagListUrl;
|
||||
string systemInfo = await HttpClientHelper.GetAsync(url, pars: pars);
|
||||
JObject jo = JObject.Parse(systemInfo);
|
||||
List<JObject?> objs = jo["Items"].Values<JObject>().ToList();
|
||||
//if (objs?.Count == 4)
|
||||
{
|
||||
if (objs[0].Value<string>("Name").Equals("SysStatus")
|
||||
&& objs[1].Value<string>("Name").Equals("RunStatus")
|
||||
&& objs[3].Value<string>("Name").Equals("FloorNo"))
|
||||
{
|
||||
multi = (objs[0].Value<int>("V"), objs[1].Value<int>("V"), objs[3].Value<int>("V"), objs[2].Value<int>("V"), objs[10].Value<int>("V"));
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Error("获取电梯状态错误", ex);
|
||||
throw;
|
||||
}
|
||||
return multi;
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取电梯状态
|
||||
/// </summary>
|
||||
/// <param name="devName"></param>
|
||||
/// <param name="tags"></param>
|
||||
/// <param name="token"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("GetElevatorStatus")]
|
||||
public async Task<(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus)> GetElevatorStatus([NotNull] string devName, [FromBody] IEnumerable<string> tags, CancellationToken token)
|
||||
{
|
||||
Task<string> GetTag(string tag)
|
||||
{
|
||||
var dicCommand = new Dictionary<string, string>
|
||||
{
|
||||
["DevName"] = devName,
|
||||
["token"] = _elevatorCtlCfg.token,
|
||||
["TagName"] = tag
|
||||
};
|
||||
|
||||
return HttpClientHelper.GetAsync(_elevatorCtlCfg.GetTagUrl, pars: dicCommand);
|
||||
}
|
||||
|
||||
var tasks = tags.Select(tag => GetTag(tag));
|
||||
var results = await Task.WhenAll(tasks.Select(task => task));
|
||||
var jos = results.Select(r => JObject.Parse(r)).ToArray();
|
||||
var (sysStatus, runStatus, floorNo, doorStatus, agvStatus) = (0, 0, 0, 0, 0);
|
||||
var propertyMap = new Dictionary<string, Action<int>>()
|
||||
{
|
||||
{ ElevatorConsts.SysStatus, v => sysStatus = v },
|
||||
{ ElevatorConsts.RunStatus, v => runStatus = v },
|
||||
{ ElevatorConsts.FloorNo, v => floorNo = v },
|
||||
{ ElevatorConsts.DoorStatus, v => doorStatus = v },
|
||||
{ ElevatorConsts.AGVStatus, v => agvStatus = v },
|
||||
};
|
||||
|
||||
if (jos?.Length > 0)
|
||||
{
|
||||
foreach (var jo in jos)
|
||||
{
|
||||
if (jo == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
string? tagName = jo!.Value<string>("Name");
|
||||
int value = jo!.Value<int>("V");
|
||||
|
||||
if (propertyMap.TryGetValue(tagName!, out var setProperty))
|
||||
{
|
||||
setProperty(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (sysStatus: sysStatus, runStatus: runStatus, floorNo: floorNo, doorStatus: doorStatus, agvStatus: agvStatus);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 检查Agv状态
|
||||
@@ -293,10 +362,12 @@ namespace Tnb.WarehouseMgr
|
||||
public async Task<bool> CallLift(string devName, int floor, CancellationToken cancellationToken)
|
||||
{
|
||||
bool isSuccefuly = false;
|
||||
(int sysStatus, int runStatus, _, int doorStatus, int agvStatus) = await GetElevatorStatus(devName, CancellationToken.None);
|
||||
var tags = new[] { "SysStatus", "RunStatus", "FloorNo", "DoorStatus", "AGVStatus" };
|
||||
(int sysStatus, int runStatus, _, int doorStatus, int agvStatus) = await GetElevatorStatus(devName, tags, CancellationToken.None);
|
||||
Logger.Information($"开始呼梯,当前{devName.Match(@"\d+")}#梯,sysStatus:{sysStatus.ToEnum<EnumSysStatus>().ToString()},runStatus:{runStatus.ToEnum<EnumRunStatus>().ToString()},doorStatus:{doorStatus.ToEnum<EnumDoorStatus>().ToString()},agvStatus:{agvStatus.ToEnum<EnumAgvStatus>().ToString()}");
|
||||
//判断当前楼层是否是放货楼层,如不是则呼叫电梯到当前楼层
|
||||
if (sysStatus.ToEnum<EnumSysStatus>() == EnumSysStatus.正常状态 && runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.停梯 &&
|
||||
agvStatus.ToEnum<EnumAgvStatus>() != EnumAgvStatus.AGV运行状态)
|
||||
agvStatus.ToEnum<EnumAgvStatus>() == EnumAgvStatus.AGV运行状态)
|
||||
{
|
||||
if (doorStatus.ToEnum<EnumDoorStatus>() != EnumDoorStatus.关门到位保持)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user