LiftContext.cs
4.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DeviceLibrary.lift
{
public class LiftContext
{
/// <summary>
/// 所有电梯
/// </summary>
static Dictionary<string, LiftStatus> lifts = new Dictionary<string, LiftStatus>();
public static void Init()
{
string[] names = Common.AppConfigHelper.GetValue(Common.SettingString.Lift_Names).Split(',');
foreach (var item in names)
{
lifts.Add(item, new LiftStatus());
}
Common.LogUtil.info($"加载电梯信息完成:{string.Join(",",names)}");
}
/// <summary>
/// 电梯是否开门
/// </summary>
/// <param name="liftId"></param>
/// <returns></returns>
public static bool IsDoorOpen(string liftId,int floor)
{
LiftStatus liftStatus = GetLiftStatus(liftId);
if (liftStatus.door.Equals("opened") && liftStatus.floor.Equals(floor))
return true;
return false;
}
/// <summary>
/// 电梯关门
/// </summary>
/// <param name="liftId"></param>
public static void CloseDoor(string liftId,AgvInfo agvInfo)
{
bool rtn= HttpManager.CloseDoor(new service.model.DoorInfo() { liftId=liftId,sourceClient=agvInfo.Client,sourceFloor=agvInfo.Scope.Floor});
Common.LogUtil.info($"{agvInfo.Name} 关门 {rtn}");
}
/// <summary>
/// 请求使用电梯
/// </summary>
/// <param name="liftId"></param>
/// <param name="missionInfo"></param>
/// <param name="isback">是否是返回</param>
public static void Request(string liftId,service.model.MissionInfo missionInfo,bool isback=false)
{
service.model.SendInInfo info;
if(isback)
{
info = new service.model.SendInInfo() { };
}
else
{
info = new service.model.SendInInfo() { };
}
HttpManager.RequestSendIn(info);
}
public static void SwitchControl(string liftId, service.model.MissionInfo missionInfo)
{
}
/// <summary>
/// 电梯开门
/// </summary>
/// <param name="liftId"></param>
public static void OpenDoor(string liftId,AgvInfo agvInfo)
{
bool rtn = HttpManager.OpenDoor(new service.model.DoorInfo() { liftId = liftId, sourceClient = agvInfo.Client, sourceFloor = agvInfo.Scope.Floor });
Common.LogUtil.info($"{agvInfo.Name} 开门 {rtn}");
}
/// <summary>
/// 运行到指定楼层
/// </summary>
/// <param name="liftId"></param>
/// <param name="floor"></param>
public static void RunTo(string liftId,int floor)
{
}
/// <summary>
/// 有架子需要离开电梯
/// </summary>
/// <param name="liftId"></param>
/// <returns></returns>
public static bool HasShelfNeedLeave(string liftId,string client,out LiftStatus liftStatus)
{
liftStatus = GetLiftStatus(liftId);
if (liftStatus.destinationClient.Equals(client))
return true;
return false;
}
/// <summary>
/// 检查该任务agv是否获得电梯控制权
/// </summary>
/// <param name="liftId"></param>
/// <param name="missionId"></param>
/// <returns></returns>
public static bool CheckIfRequestOk(string liftId,service.model.MissionInfo mission)
{
LiftStatus liftStatus = GetLiftStatus(liftId);
if (liftStatus.missionId.Equals(mission.missionId))
return true;
return false;
}
/// <summary>
/// 获取电梯状态
/// </summary>
/// <param name="liftId"></param>
/// <returns></returns>
static LiftStatus GetLiftStatus(string liftId)
{
if (lifts.ContainsKey(liftId))
{
return lifts[liftId];
}
else
return new LiftStatus();
}
public static string[] GetLiftNames()
{
return lifts.Keys.ToArray();
}
static void UpdateStatus(ClientStatus status)
{
try
{
LiftStatus lift = HttpManager.UpdateStatusToLift(status);
if(lift!=null)
{
lifts[status.liftId] = lift;
}
}
catch(Exception e)
{
Common.LogUtil.error($"上报状态给电梯失败:{status.ToString()}",e);
}
}
}
}