Commit 3af05d87 张东亮

0129

1 个父辈 de58ddd2
......@@ -98,15 +98,6 @@
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="Config\AgvMission.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Config\AgvName.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Config\AgvProductionLine.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
......
......@@ -53,10 +53,10 @@
</root>
</log4net>
<appSettings>
<add key="http_server" value="http://10.85.199.25/myproject/"/>
<add key="http_server" value="http://10.85.162.124/myproject/"/>
<add key="FLEET" value="10.85.199.3"/>
<add key="LocalIP" value="10.85.199.20"/>
<add key="AutoCharge" value="True"/>
<add key="LocalIP" value="10.85.162.40"/>
<add key="Use_Fleet" value="False"/>
<add key="ChargeThreshold" value="20,90"/>
<add key="LimitPoints" value="0,0;0,0;0,0;0,0"/>
</appSettings>
......
任务别称,任务名称,任务GUID
移动到VMI出口,MoveA1,eec1eed4-2a04-11ea-9c84-94c691a734f1
移动到VMI入口,MoveA2,f68f18db-2f89-11ea-9ee4-94c691a734f1
移动到包装线入口,MoveA3,979d10eb-2f9d-11ea-9ee4-94c691a734f1
移动到包装线出口,MoveA4,df6d991a-2f9d-11ea-9ee4-94c691a734f1
移动到分盘线出口,MoveA7,71e01c6d-de10-11ea-a3e4-94c691a7387d
移动到分盘线入口,MoveA8,cd0544f8-de10-11ea-a3e4-94c691a7387d
移动到包装仓10-1,MoveB1,86a6ab06-261e-11ea-a30e-94c691a73861
移动到包装仓10-2,MoveB2,55fcfdc5-2623-11ea-a30e-94c691a73861
移动到包装仓11-1,MoveB3,905399c8-2623-11ea-a30e-94c691a73861
移动到包装仓11-2,MoveB4,aa33e13a-2623-11ea-a30e-94c691a73861
移动到包装仓12-2,MoveB5,2cd36cde-2624-11ea-a30e-94c691a73861
移动到包装仓12-1,MoveB6,3e713e8b-2624-11ea-a30e-94c691a73861
停靠到包装仓10-1,DockB1,339d1830-261f-11ea-a30e-94c691a73861
停靠到包装仓10-2,DockB2,a6d6f52a-2624-11ea-a30e-94c691a73861
停靠到包装仓11-1,DockB3,b66f0714-2624-11ea-a30e-94c691a73861
停靠到包装仓11-2,DockB4,d01443f2-2624-11ea-a30e-94c691a73861
停靠到包装仓12-2,DockB5,f50dd02b-2624-11ea-a30e-94c691a73861
停靠到包装仓12-1,DockB6,0e5503f2-2625-11ea-a30e-94c691a73861
移动到料串入口C1,MoveC1,a6e36b4c-2fa0-11ea-9ee4-94c691a734f1
移动到料串出口C2,MoveC2,6c6829de-2624-11ea-a30e-94c691a73861
移动到料串入口C3,MoveC3,3ffe309f-2ae6-11ea-a6cf-94c691a734f1
移动到料串出口C4,MoveC4,2ef71347-2ae7-11ea-a6cf-94c691a734f1
移动到料串入口C5,MoveC5,34ec2f1f-2ae8-11ea-a6cf-94c691a734f1
移动到料串出口C6,MoveC6,52f37677-2f96-11ea-9ee4-94c691a734f1
移动到紧急入料口,MoveC7,bcd0e389-2ab7-11ea-a6cf-94c691a734f1
移动到紧急出料口,MoveC8,8a48301d-2624-11ea-a30e-94c691a73861
移动到点料机D1口,MoveD1,931f7c6c-a97d-11ea-b91f-94c691a7387d
移动到点料机D2口,MoveD2,ae09ca1e-a97f-11ea-b91f-94c691a7387d
移动到点料机D3口,MoveD3,97b77df3-edfb-11ea-a03e-94c691a7387d
移动到点料机D4口,MoveD4,37961cd0-edfd-11ea-a03e-94c691a7387d
移动到退料线入口,MoveG23,5dc60886-ee00-11ea-a03e-94c691a7387d
移动到退料线出口,MoveG24,9a965176-ee00-11ea-a03e-94c691a7387d
移动到待机位,MoveStandby,4eb9641a-3439-11ea-984a-94c691a734f1
移动到充电位1,AutoCharge1,9e1b33c0-2886-11ea-a0d6-94c691a734f1
移动到充电位2,AutoCharge2,d756f63d-2886-11ea-a0d6-94c691a734f1
小车进料,Enter,2eadcb87-239a-11ea-8343-94c691a73861
小车出料,Leave,80943220-239a-11ea-8343-94c691a73861
小车初始化,Init,cd51e039-34eb-11ea-b4fe-94c691a734f1
Fleet ID,agv名称,IP,授权码,IOID
1,1号车,10.85.199.67,Basic ZGlzdHJpYnV0b3I6NjJmMmYwZjFlZmYxMGQzMTUyYzk1ZjZmMDU5NjU3NmU0ODJiYjhlNDQ4MDY0MzNmNGNmOTI5NzkyODM0YjAxNA==,007615a5-2220-11ea-99f2-94c691a73b53
2,2号车,10.85.199.68,Basic ZGlzdHJpYnV0b3I6NjJmMmYwZjFlZmYxMGQzMTUyYzk1ZjZmMDU5NjU3NmU0ODJiYjhlNDQ4MDY0MzNmNGNmOTI5NzkyODM0YjAxNA==,007615a5-2220-11ea-99f2-94c691a73b53
3,3号车,10.85.199.69,Basic ZGlzdHJpYnV0b3I6NjJmMmYwZjFlZmYxMGQzMTUyYzk1ZjZmMDU5NjU3NmU0ODJiYjhlNDQ4MDY0MzNmNGNmOTI5NzkyODM0YjAxNA==,007615a5-2220-11ea-99f2-94c691a73b53
4,4号车,10.85.199.70,Basic ZGlzdHJpYnV0b3I6NjJmMmYwZjFlZmYxMGQzMTUyYzk1ZjZmMDU5NjU3NmU0ODJiYjhlNDQ4MDY0MzNmNGNmOTI5NzkyODM0YjAxNA==,007615a5-2220-11ea-99f2-94c691a73b53
\ No newline at end of file
......@@ -177,7 +177,7 @@ namespace AGVControl
Invoke(new Action(() =>
{
lblCharge1.Text = "充电桩1:" + CommonVar.Charge.Station[Charge.AutoCharge1];
lblCharge2.Text = "充电桩2:" + CommonVar.Charge.Station[Charge.AutoCharge2];
//lblCharge2.Text = "充电桩2:" + CommonVar.Charge.Station[Charge.AutoCharge2];
lblStandy1.Text = "待机位1:" + CommonVar.Standby.Station[0];
lblStandy2.Text = "待机位2:" + CommonVar.Standby.Station[1];
lblStandy3.Text = "待机位3:" + CommonVar.Standby.Station[2];
......
......@@ -51,8 +51,7 @@ namespace AGVControl
CommonVar.Standby.DelOccupyInfo(Agv.Name);
CommonVar.Charge.DelOccupyInfo(Agv.Name);
//添加Init任务
MiR_API.Add_Mission_Fleet(Agv, CommonVar.agvMission[SettingString.Init]);
MiR_API.State_Ready(Agv);
Agv.AssignTask(SettingString.Init);
}
else
{
......@@ -61,7 +60,7 @@ namespace AGVControl
LogUtil.error(string.Format("{0} 车上有负载,无法开启自动模式,请先清空小车负载!", Agv.Name));
return;
}
if (MessageBox.Show(this,"是否继续上一次的任务?\r\n" + Agv.Msg, "提示", MessageBoxButtons.YesNo).Equals(DialogResult.No))
if (MessageBox.Show(this, "是否继续上一次的任务?\r\n" + Agv.Msg, "提示", MessageBoxButtons.YesNo).Equals(DialogResult.No))
{
Agv.CurJob = null;
if (Agv.Place.Equals(SettingString.Standby) || Agv.Place.Equals(SettingString.AutoCharge))
......@@ -87,8 +86,14 @@ namespace AGVControl
{
if (MessageBox.Show("确定对小车重发任务?", Agv.Name, MessageBoxButtons.YesNo) == DialogResult.No)
return;
Agv.Resend();
LogUtil.info(string.Format("{0} 手动重发任务", Agv.Name));
Task.Factory.StartNew(new Action(()=> {
MiR_API.Clear_Error(Agv);
System.Threading.Thread.Sleep(1000);
MiR_API.State_Ready(Agv);
Agv.Resend();
LogUtil.info(string.Format("{0} 手动重发任务", Agv.Name));
}));
}
}
......@@ -125,6 +130,9 @@ namespace AGVControl
{
if (Agv.IsCon)
{
if (cmbBxMission.SelectedItem.ToString().Equals(SettingString.Enter) || cmbBxMission.SelectedItem.ToString().Equals(SettingString.Leave))
if (MessageBox.Show("确定对小车发送进/出任务?", Agv.Name, MessageBoxButtons.YesNo) == DialogResult.No)
return;
Agv.AssignTask(CommonVar.showNameMissionName[cmbBxMission.SelectedItem.ToString()]);
LogUtil.info(string.Format("{0} 手动发任务 {1}", Agv.Name, cmbBxMission.SelectedItem.ToString()));
}
......
......@@ -96,7 +96,7 @@ namespace AGVControl
temp = line[i].Split(',');
if (temp.Length != 3) continue;
CommonVar.agvMission.Add(temp[1], temp[2]);
CommonVar.showNameMissionName.Add(temp[0], temp[1]);
CommonVar.showNameMissionName.Add(temp[1], temp[0]);
}
CommonVar.nodeInfo = new List<ClientNode>();
......
......@@ -22,7 +22,9 @@ namespace AGV_UI
static string Ready = "Ready";
static string Pause = "Pause";
static string Executing = "Executing";
static string Done = "Done";
static string Aborted = "Aborted";
static string Invalid = "Invalid";
static string EmergencyStop = "EmergencyStop";
static string ManualControl = "ManualControl";
static string Error = "Error";
......@@ -50,12 +52,14 @@ namespace AGV_UI
stateImageList.ImageSize = new System.Drawing.Size(48, 48);
stateImageList.Images.Add(UNKNOWN, Properties.Resources.Unknown);
stateImageList.Images.Add(Ready, Properties.Resources.ready);
stateImageList.Images.Add(Done, Properties.Resources.ready);
stateImageList.Images.Add(Pause, Properties.Resources.pause);
stateImageList.Images.Add(ManualControl, Properties.Resources.manual);
stateImageList.Images.Add(Executing, Properties.Resources.Executing);
stateImageList.Images.Add(Error, Properties.Resources.Error);
stateImageList.Images.Add(EmergencyStop, Properties.Resources.emergency);
stateImageList.Images.Add(Aborted, Properties.Resources.Aborted);
stateImageList.Images.Add(Invalid, Properties.Resources.Aborted);
}
/// <summary>
/// 设置连接状态
......
......@@ -112,7 +112,7 @@
this.lblAGVState.Size = new System.Drawing.Size(127, 50);
this.lblAGVState.TabIndex = 1;
this.lblAGVState.Text = "None";
this.lblAGVState.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lblAGVState.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// lblTask
//
......
......@@ -49,8 +49,8 @@ namespace Common
/// <summary>
/// 退料线
/// </summary>
public const string G23_In = "G23";
public const string G24_Out = "G24";
public const string D23_In = "D23";
public const string D24_Out = "D24";
/// <summary>
/// 上料区
/// </summary>
......@@ -62,46 +62,76 @@ namespace Common
public const string D4_Name_Prefix = "D";
public const string C4_Name_Prefix = "G";
public const string http_server = "http_server";
/// <summary>
/// 包装仓出空料架位置
/// 分盘出空料串位
/// </summary>
public const string A7 = "A7";
/// <summary>
/// 分盘入料串
/// </summary>
public const string A8 = "A8";
/// <summary>
/// 分盘出满料串
/// </summary>
public const string A9 = "A9";
/// <summary>
/// 包装仓出空料架位置
/// </summary>
public const string A4 = "A4";
public const string A3 = "A3";
public const string Enter = "Enter";
public const string Leave = "Leave";
/// <summary>
/// 空料串接收位置
/// </summary>
public const string C7 = "C7";
public const string A2 = "A2";
public const string A8 = "A8";
/// <summary>
/// 出满料
/// </summary>
public const string C8 = "C8";
public const string A1 = "A1";
public const string InStore_Mark = "InStore";
/// <summary>
/// 入料口1
/// 入料口1入口
/// </summary>
public const string C5 = "C5";
public const string C6 = "C6";
public const string T1_1 = "T1_1";
/// <summary>
/// 入料口1出口
/// </summary>
public const string T1_2 = "T1_2";
/// <summary>
/// 入料口2入口
/// </summary>
public const string T2_1 = "T2_1";
/// <summary>
/// 入料口2出口
/// </summary>
public const string T2_2 = "T2_2";
/// <summary>
/// 入料口3入口
/// </summary>
public const string T3_1 = "T3_1";
/// <summary>
/// 入料口3出口
/// </summary>
public const string T3_2 = "T3_2";
/// <summary>
/// 入料口5入口
/// </summary>
public const string T5_1 = "T5_1";
/// <summary>
/// 入料口5出口
/// </summary>
public const string T5_2 = "T5_2";
/// <summary>
/// 入料口2
/// 紧急料口T4(出满料)
/// </summary>
public const string C3 = "C3";
public const string C4 = "C4";
public const string T4_2 = "T4_2";
/// <summary>
/// 入料口3
/// 紧急料口T4(入空料串)
/// </summary>
public const string C1 = "C1";
public const string C2 = "C2";
public const string T4_1 = "T4_1";
/// <summary>
/// 点料机
/// </summary>
......@@ -112,5 +142,6 @@ namespace Common
public const string LimitPoints = "LimitPoints";
public const string LocalIP = "LocalIP";
public const string Use_Fleet = "Use_Fleet";
}
}
......@@ -24,33 +24,11 @@ namespace DeviceLibrary
/// </summary>
public int BatteryMin { get; set; } = 20;
/// <summary>
/// 自动充电
/// </summary>
private bool _autoCharge = true;
/// <summary>
/// 自动充电
/// </summary>
public bool AutoCharge
{
set
{
_autoCharge = value;
AppConfigHelper.SaveValue(SettingString.AutoCharge, value);
}
get
{
return _autoCharge;
}
}
public Charge()
{
Station = new Dictionary<string, string>();
Station.Add(AutoCharge1, "");
Station.Add(AutoCharge2, "");
_autoCharge = AppConfigHelper.GetBoolValue(SettingString.AutoCharge);
//Station.Add(AutoCharge2, "");
string s = AppConfigHelper.GetValue(SettingString.ChargeThreshold);
string[] arr = s.Split(',');
BatteryMin = Convert.ToInt32(arr[0]);
......@@ -135,26 +113,27 @@ namespace DeviceLibrary
public bool HasEmptyChargeStation(Agv_Info agv)
{
lock(loc)
{
if (SettingString.SingleMission_IP1.Equals(agv.IP))
return true;
else
{
if (Station[AutoCharge2].Equals(""))
{
return true;
}
}
//foreach (string item in Station.Keys)
//{
// if (Station[item].Equals(""))
// {
// return true;
// }
//}
}
return false;
//lock(loc)
//{
// if (SettingString.SingleMission_IP1.Equals(agv.IP))
// return true;
// else
// {
// if (Station[AutoCharge2].Equals(""))
// {
// return true;
// }
// }
// //foreach (string item in Station.Keys)
// //{
// // if (Station[item].Equals(""))
// // {
// // return true;
// // }
// //}
//}
//return false;
return true;
}
/// <summary>
/// 开始充电任务
......@@ -172,7 +151,7 @@ namespace DeviceLibrary
{
if (Station[chargeStation].Equals(""))
{
rtn = MiR_API.Add_Mission_Fleet(agv, CommonVar.agvMission[chargeStation]);
rtn = agv.AssignTask(chargeStation);
if (rtn)
{
Station[chargeStation] = agv.Name;
......
......@@ -97,7 +97,7 @@ namespace DeviceLibrary
agv.Place = "";
//执行下一个任务
int i = FindNode(nodeName);
bool rtn = MiR_API.Add_Mission_Fleet(agv, agvMission[SettingString.Move + nodeName]);
bool rtn = agv.AssignTask(SettingString.Move + nodeName);
if (rtn)
{
agv.Place = nodeName;
......@@ -129,8 +129,7 @@ namespace DeviceLibrary
//清除目的地
agv.Place = "";
//执行下一个任务
bool rtn = MiR_API.Add_Mission_Fleet(agv, agvMission[SettingString.Dock + nodeName]);
bool rtn = agv.AssignTask(SettingString.Dock + nodeName);
if (rtn)
{
agv.Place = nodeName;
......@@ -151,7 +150,7 @@ namespace DeviceLibrary
public static bool DoorMission(Agv_Info agv, string doorName)
{
agv.Place = doorName;
return MiR_API.Add_Mission_Fleet(agv, agvMission[SettingString.Move + doorName]);
return agv.AssignTask(SettingString.Move + doorName);
}
/// <summary>
......@@ -227,9 +226,9 @@ namespace DeviceLibrary
/// </summary>
/// <param name="CurTaskID"></param>
/// <returns></returns>
public static string GetTakJobState(int CurTaskID)
public static string GetTakJobState(Agv_Info agv)
{
if (!CurTaskID.Equals(-1) && MiR_API.Get_Task_State(CurTaskID, out string st))
if (!agv.CurTaskID.Equals(-1) && MiR_API.Get_Task_State(agv, out string st))
return st;
return SettingString.Wait;
}
......
任务别称,任务名称,任务GUID
小车初始化,Init,219cd91a-61da-11eb-96a9-0001297a1dca
VMI出口,MoveA1,a6416bc3-61f7-11eb-96a9-0001297a1dca
VMI入口,MoveA2,8c0a0fc6-61f7-11eb-96a9-0001297a1dca
分盘线入口,MoveA8,cd0544f8-de10-11ea-a3e4-94c691a7387d
分盘线空料串出口,MoveA7,71e01c6d-de10-11ea-a3e4-94c691a7387d
分盘线满料串出口,MoveA9,71e01c6d-de10-11ea-a3e4-94c691a7387d
云仓T1入口,MoveT1_1,632f434e-61f1-11eb-96a9-0001297a1dca
云仓T1出口,MoveT1_2,bff9d729-61f1-11eb-96a9-0001297a1dca
云仓T2入口,MoveT2_1,e6b1129f-61f1-11eb-96a9-0001297a1dca
云仓T2出口,MoveT2_2,0a721ff0-61f2-11eb-96a9-0001297a1dca
云仓T3入口,MoveT3_1,2f3ddde9-61f2-11eb-96a9-0001297a1dca
云仓T3出口,MoveT3_2,78996774-61f2-11eb-96a9-0001297a1dca
云仓T5入口,MoveT5_1,bdabf3f6-61f2-11eb-96a9-0001297a1dca
云仓T5出口,MoveT5_2,19f39838-61f4-11eb-96a9-0001297a1dca
紧急料T4入口,MoveT4_1,90aa9c04-61f2-11eb-96a9-0001297a1dca
紧急料T4出口,MoveT4_2,a8f9be71-61f2-11eb-96a9-0001297a1dca
点料机空料串入口[D1],MoveD1,219cd91a-61da-11eb-96a9-0001297a1dca
点料机满料串出口[D2],MoveD2,219cd91a-61da-11eb-96a9-0001297a1dca
点料机退料口[D3],MoveD3,219cd91a-61da-11eb-96a9-0001297a1dca
点料机退料口[D4],MoveD4,219cd91a-61da-11eb-96a9-0001297a1dca
退料线入口,MoveD23,5dc60886-ee00-11ea-a03e-94c691a7387d
退料线出口,MoveD24,9a965176-ee00-11ea-a03e-94c691a7387d
待机位,MoveStandby,615cef05-61f4-11eb-96a9-0001297a1dca
充电位1,AutoCharge1,d90853ec-5f06-11eb-9d80-0001297a1dca
小车进料,Enter,ce64c188-61da-11eb-96a9-0001297a1dca
小车出料,Leave,65c1203c-61e1-11eb-96a9-0001297a1dca
Fleet ID,agv名称,IP,授权码,IOID
1,14号车,10.85.199.18,Basic ZGlzdHJpYnV0b3I6NjJmMmYwZjFlZmYxMGQzMTUyYzk1ZjZmMDU5NjU3NmU0ODJiYjhlNDQ4MDY0MzNmNGNmOTI5NzkyODM0YjAxNA==,007615a5-2220-11ea-99f2-94c691a73b53
节点名,别名,佳世达线名
A1,A1,VMI-A1出口
A2,A2,VMI-A2入口
A7,A7,分盘线-A7出口
A8,A8,分盘线-A8入口
A7,A7,分盘线-A7空料串出口
A9,A9,分盘线-A9满料串出口
T1_1,T1_1,入料T1入口
T1_2,T1_2,入料T1出口
T2_1,T2_1,入料T2入口
......@@ -13,7 +14,9 @@ T5_1,T5_1,入料T5入口
T5_2,T5_2,入料T5出口
T4_1,T4_1,紧急料T4入口
T4_2,T4_2,紧急料T4出口
D1,D1,点料机-D1入口
D2,D2,点料机-D2出口
D3,D3,点料机-D3口
D4,D4,点料机-D4口
\ No newline at end of file
D23,D23,退料线入口
D24,D24,退料线出口
D1,D1,点料机D1-空料串入口
D2,D2,点料机D2-满料串出口
D3,D3,点料机D3-退料口1
D4,D4,点料机D4-退料口2
\ No newline at end of file
......@@ -85,13 +85,13 @@ namespace DeviceLibrary
{
if (!CheckOnline(i)) continue;
bool change = false;
MiR_API.Get_Task_State(CommonVar.agvInfo[i].CurTaskID, out string stateStr);
MiR_API.Get_Task_State(CommonVar.agvInfo[i], out string stateStr);
Thread.Sleep(50);
//获取AGV状态
rtn = MiR_API.Get_State(CommonVar.agvInfo[i], out eAGVState stateID, out string stateText, out int battery, out string mission_text, out Agv_Info.AgvPosition position);
Thread.Sleep(50);
rtn = MiR_API.Get_IO_Status(CommonVar.agvInfo[i], out bool[] input, out bool[] output);
Thread.Sleep(50);
//rtn = MiR_API.Get_IO_Status(CommonVar.agvInfo[i], out bool[] input, out bool[] output);
//Thread.Sleep(50);
change = CommonVar.agvInfo[i].SetState(stateID, stateStr, battery, mission_text, position);
//更新状态stateID.Equals(eAGVState.Executing)
......@@ -161,7 +161,7 @@ namespace DeviceLibrary
//Ready,Pause,Executing,Error
if (!CommonVar.agvInfo[i].StateID.Equals(eAGVState.Ready) && !CommonVar.agvInfo[i].StateID.Equals(eAGVState.Pause)
&& !CommonVar.agvInfo[i].StateID.Equals(eAGVState.Executing) && !CommonVar.agvInfo[i].StateID.Equals(eAGVState.Error))
&& !CommonVar.agvInfo[i].StateID.Equals(eAGVState.Executing) && !CommonVar.agvInfo[i].StateID.Equals(eAGVState.None))
{
LogUtil.debug(CommonVar.agvInfo[i].Name + " 不可调用 StateID=" + CommonVar.agvInfo[i].StateID.ToString());
continue;
......
......@@ -90,5 +90,16 @@
<Name>Common</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="Config\AgvMission.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Config\AgvName.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Config\AgvProductionLine.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
......@@ -84,10 +84,6 @@ namespace DeviceLibrary
public eAGVState StateID { private set; get; }
/// <summary>
/// 是否使用Fleet发任务
/// </summary>
public bool Use_Fleet { get; set; } = false;
/// <summary>
/// 负载
/// </summary>
public bool IsExistShelf { set; get; } = false;
......@@ -174,6 +170,7 @@ namespace DeviceLibrary
private bool offlineTimeOut = false;
public AGV_UI.Status StateKanban;
public bool Use_Fleet = AppConfigHelper.GetBoolValue(SettingString.Use_Fleet);
public Agv_Info(string id, string name, string ip, string authorization, string ioID, bool isUse, string rfid)
{
Fleet_IP = id;
......@@ -305,7 +302,7 @@ namespace DeviceLibrary
bool isAlarm = false;
try
{
int nodeIdx = CommonVar.FindNode(SettingString.G24_Out);
int nodeIdx = CommonVar.FindNode(SettingString.D24_Out);
if (nodeIdx > -1)
displayBoard.Add("退料线出口状态", "doubleLine.ReturnLine", CommonVar.nodeInfo[nodeIdx].GetState().ToString(), 1);
if (offlineTimeOut)
......@@ -366,7 +363,7 @@ namespace DeviceLibrary
{
offlineTimeOut = false;
if ((DateTime.Now - offlineStartTime).TotalSeconds > OfflineLastTimeSeconds)
LogUtil.error(string.Format("{0} 在{1}离线{2}秒", Name, PlaceAliceName, (DateTime.Now - offlineStartTime).TotalSeconds.ToString("f2")));
//LogUtil.error(string.Format("{0} 在{1}离线{2}秒", Name, PlaceAliceName, (DateTime.Now - offlineStartTime).TotalSeconds.ToString("f2")));
offlineStartTime = DateTime.Now;
}
}
......@@ -442,9 +439,9 @@ namespace DeviceLibrary
/// <summary>
/// 给小车分配任务
/// </summary>
public void AssignTask(string taskName)
public bool AssignTask(string taskName)
{
bool rtn;
bool rtn=false;
if (Use_Fleet)
{
rtn = MiR_API.Add_Mission_Fleet(this, CommonVar.agvMission[taskName]);
......@@ -461,6 +458,9 @@ namespace DeviceLibrary
{
LogUtil.info(string.Format("{0} 分配{1}任务失败", Name, taskName));
}
StateKanban.SetCurTask(CommonVar.showNameMissionName[taskName]);
MiR_API.State_Ready(this);
return rtn;
}
/// <summary>
/// 删除当前小车所有任务/Fleet任务里的尽快任务
......
......@@ -33,12 +33,12 @@ namespace DeviceLibrary
/// </summary>
/// <param name="curTaskName"></param>
/// <param name="curTaskId"></param>
protected void UpdateJobTaskInfo(string curTaskName, int curTaskId)
protected void UpdateJobTaskInfo(Agv_Info agv)
{
CurTaskID = curTaskId;
CurTaskName = curTaskName;
CurTaskID = agv.CurTaskID;
CurTaskName = agv.CurTaskName;
//CurTaskState = SettingString.Wait;
CurTaskState = CommonVar.GetTakJobState(CurTaskID);
CurTaskState = CommonVar.GetTakJobState(agv);
}
/// <summary>
/// 任务重发
......@@ -47,14 +47,14 @@ namespace DeviceLibrary
public bool ResendTask(Agv_Info agv)
{
bool rtn = false;
if (!CurTaskID.Equals(-1) && MiR_API.Get_Task_State(CurTaskID, out string stateStr))
if (!CurTaskID.Equals(-1) && MiR_API.Get_Task_State(agv, out string stateStr))
{
if (stateStr.Equals(SettingString.Aborted) || stateStr.Equals(SettingString.Invalid))
{
rtn = MiR_API.Add_Mission_Fleet(agv, CommonVar.agvMission[CurTaskName]);
rtn = agv.AssignTask(CurTaskName);
if (rtn)
{
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
return true;
}
......@@ -62,19 +62,19 @@ namespace DeviceLibrary
}
else if (!CurTaskName.Equals("") && !CommonVar.agvMission[CurTaskName].Equals(agv.CurTaskGUID))//Job的当前任务与agv最新任务不一致
{
rtn = MiR_API.Add_Mission_Fleet(agv, CommonVar.agvMission[CurTaskName]);
rtn = agv.AssignTask(CurTaskName);
if (rtn)
{
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
return true;
}
}
else if (CurTaskID.Equals(-1))//任务发送失败,重新发送
{
rtn = MiR_API.Add_Mission_Fleet(agv, CommonVar.agvMission[CurTaskName]);
rtn = agv.AssignTask(CurTaskName);
if (rtn)
{
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
return true;
}
}
......
......@@ -187,8 +187,11 @@ namespace DeviceLibrary
{
try
{
log.Debug(string.Format("{0} Add_Mission [{1}]", info.Name, mission_id));
info.CurTaskID = -1;
info.CurTaskGUID = "";
info.CurTaskState = SettingString.Wait;
var key = CommonVar.agvMission.Where(qq => qq.Value == mission_id).Select(qq => qq.Key);
info.CurTaskName = key.ToList()[0];
//删除上一任务
Del_Mission(info);
......@@ -213,14 +216,12 @@ namespace DeviceLibrary
{
info.CurTaskID = Convert.ToInt32(id);
info.CurTaskGUID = mission_id;
var key = CommonVar.agvMission.Where(qq => qq.Value == mission_id).Select(qq => qq.Key);
info.CurTaskName = key.ToList()[0];
log.Debug(string.Format("{0} Add_Mission [{1}]", info.Name, key.ToList()[0]));
log.Info(string.Format("{0} Add_Mission [{1}]", info.Name, key.ToList()[0]));
}
catch
{
log.Error(string.Format("{0} Add_Mission [{1}]", info.Name, mission_id));
info.CurTaskName = "";
}
return true;
......@@ -236,7 +237,7 @@ namespace DeviceLibrary
}
/// <summary>
/// 添加任务到任务队列
/// 添加任务到FLEET任务队列
/// </summary>
/// <param name="info"></param>
/// <param name="mission_id"></param>
......@@ -249,6 +250,8 @@ namespace DeviceLibrary
info.CurTaskID = -1;
info.CurTaskGUID = "";
info.CurTaskState = SettingString.Wait;
var key = CommonVar.agvMission.Where(qq => qq.Value == mission_id).Select(qq => qq.Key);
info.CurTaskName = key.ToList()[0];
//防止上一个任务已执行但返回失败时,删除任务
Del_Mission(info);
......@@ -274,8 +277,6 @@ namespace DeviceLibrary
{
info.CurTaskID = Convert.ToInt32(id);
info.CurTaskGUID = mission_id;
var key = CommonVar.agvMission.Where(qq => qq.Value == mission_id).Select(qq => qq.Key);
info.CurTaskName = key.ToList()[0];
log.Info(string.Format("{0} Add_Mission_Fleet [{1}]", info.Name, key.ToList()[0]));
}
catch
......@@ -499,32 +500,56 @@ namespace DeviceLibrary
}
}
public static bool Get_Task_State(int CurTaskID, out string stateStr)
public static bool Get_Task_State(Agv_Info agv, out string stateStr)
{
stateStr = SettingString.Wait;
try
{
if (CurTaskID == -1)
if (agv.CurTaskID == -1)
return true;
string ip = AppConfigHelper.GetValue(SettingString.FLEET);
//http://10.85.199.3/api/v2.0.0/mission_scheduler
string url = "http://" + ip + "/api/v2.0.0/mission_scheduler/" + CurTaskID;
string json = HttpGet(url, ip, CommonVar.agvInfo[0].Authorization);
log.Debug("URL: " + url + "\n" + "Return: " + json);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null) return false;
// "mission_id": "2e433130-c045-11ea-9a66-94c691a7387d",
// "id": 7178,
// "state": "Done"
string s = dic["id"].ToString();
if (s.Equals(CurTaskID.ToString()))
if(agv.Use_Fleet)
{
stateStr = dic["state"].ToString();
return true;
string ip = AppConfigHelper.GetValue(SettingString.FLEET);
string url = "http://" + ip + "/api/v2.0.0/mission_scheduler/" + agv.CurTaskID;
string json = HttpGet(url, ip, CommonVar.agvInfo[0].Authorization);
log.Debug("URL: " + url + "\n" + "Return: " + json);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null) return false;
// "mission_id": "2e433130-c045-11ea-9a66-94c691a7387d",
// "id": 7178,
// "state": "Done"
string s = dic["id"].ToString();
if (s.Equals(agv.CurTaskID.ToString()))
{
stateStr = dic["state"].ToString();
return true;
}
}
else
{
string url = "http://"+agv.IP+"/api/v2.0.0/mission_queue/" + agv.CurTaskID;
string json = HttpGet(url, agv.IP, agv.Authorization);
log.Debug("URL: " + url + "\n" + "Return: " + json);
if (string.IsNullOrWhiteSpace(json)) return false;
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null) return false;
// "mission_id": "2e433130-c045-11ea-9a66-94c691a7387d",
// "id": 7178,
// "state": "Done"
string s = dic["id"].ToString();
if (s.Equals(agv.CurTaskID.ToString()))
{
stateStr = dic["state"].ToString();
return true;
}
}
return false;
}
......
......@@ -43,18 +43,18 @@ namespace DeviceLibrary
bool rtn = false;
agv.Msg = "";
CurTaskState = CommonVar.GetTakJobState(CurTaskID);
CurTaskState = CommonVar.GetTakJobState(agv);
if (ChargeStep.IsStep(CHARGE_STEP.NONE))
{
if (agvPlace.StartsWith(SettingString.C4_Name_Prefix))
{
ChargeStep.ToNextStep(CHARGE_STEP.WAIT_AGV_REACH_4D_DOOR);
runInfo = "电量[" + agv.Battery + "%]小于最大电量[" + CommonVar.Charge.BatteryMax + "%],从当前位置" + agvPlace + "回到充电位,先到4D门";
ChargeStep.ToNextStep(CHARGE_STEP.WAIT_AGV_REACH_3D_DOOR);
runInfo = "电量[" + agv.Battery + "%]小于最大电量[" + CommonVar.Charge.BatteryMax + "%],从当前位置" + agvPlace + "回到充电位,先到3D门";
msg += runInfo;
ChargeStep.Msg = msg;
CommonVar.DoorMission(agv, SettingString.DoorCToD);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
else
{
......@@ -72,12 +72,12 @@ namespace DeviceLibrary
runInfo = "电量[" + agv.Battery + "%]小于最大电量[" + CommonVar.Charge.BatteryMax + "%],从当前位置" + agvPlace + "去到充电位";
msg += runInfo;
ChargeStep.Msg = msg;
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
}
else if (ChargeStep.IsStep(CHARGE_STEP.WAIT_AGV_REACH_4D_DOOR))
else if (ChargeStep.IsStep(CHARGE_STEP.WAIT_AGV_REACH_3D_DOOR))
{
if (CommonVar.CheckTaskMoveFinished(agv, SettingString.DoorCToD, CurTaskState))
{
......@@ -104,7 +104,7 @@ namespace DeviceLibrary
runInfo = "电量[" + agv.Battery + "%]小于最大电量[" + CommonVar.Charge.BatteryMax + "%],从当前位置" + agvPlace + "去到充电位";
msg += runInfo;
ChargeStep.Msg = msg;
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
......@@ -163,7 +163,7 @@ namespace DeviceLibrary
/// <summary>
/// 等待到达4D门
/// </summary>
WAIT_AGV_REACH_4D_DOOR,
WAIT_AGV_REACH_3D_DOOR,
/// <summary>
/// 等待AGV到达充电位
/// </summary>
......
......@@ -71,8 +71,8 @@ namespace DeviceLibrary
runInfo += "小车链条运行";
msg += runInfo;
EnterLeaveShelfStep.Msg = msg;
rtn = MiR_API.Add_Mission_Fleet(agv, CommonVar.agvMission["Leave"]);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
rtn = agv.AssignTask(Common.SettingString.Leave);
UpdateJobTaskInfo(agv);
}
else if(ActionType.Equals(eEnterLeaveType.Enter))
{
......@@ -80,13 +80,13 @@ namespace DeviceLibrary
runInfo +="小车链条运行";
msg += runInfo;
EnterLeaveShelfStep.Msg = msg;
rtn = MiR_API.Add_Mission_Fleet(agv, CommonVar.agvMission["Enter"]);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
rtn = agv.AssignTask(Common.SettingString.Enter);
UpdateJobTaskInfo(agv);
}
}
else if (EnterLeaveShelfStep.IsStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_IN_LINE))
{
CurTaskState = CommonVar.GetTakJobState(CurTaskID);
CurTaskState = CommonVar.GetTakJobState(agv);
if (CommonVar.CheckEnterOrLeaveFinished(agv, "Leave", CurTaskState))
{
......@@ -108,7 +108,7 @@ namespace DeviceLibrary
}
else if (EnterLeaveShelfStep.IsStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_OUT_LINE))
{
CurTaskState = CommonVar.GetTakJobState(CurTaskID);
CurTaskState = CommonVar.GetTakJobState(agv);
if (CommonVar.CheckEnterOrLeaveFinished(agv, "Enter", CurTaskState))
{
......
......@@ -81,7 +81,7 @@ namespace DeviceLibrary
bool rtn = false;
agv.Msg = runInfo;
CurTaskState = CommonVar.GetTakJobState(CurTaskID);
CurTaskState = CommonVar.GetTakJobState(agv);
if (curJobStep.IsStep(EXECUTE_STEP.P1_NONE))
{
......@@ -92,7 +92,7 @@ namespace DeviceLibrary
msg += runInfo;
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
else if (agvPlace.StartsWith(SettingString.C4_Name_Prefix))
{
......@@ -101,7 +101,7 @@ namespace DeviceLibrary
msg += runInfo;
curJobStep.Msg = msg;
CommonVar.DoorMission(agv, SettingString.DoorCToD);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
else
{
......@@ -111,7 +111,7 @@ namespace DeviceLibrary
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
else if (curJobStep.IsStep(EXECUTE_STEP.P1_1_WAIT_REACH_4D_DOOR))
......@@ -124,7 +124,7 @@ namespace DeviceLibrary
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
else if (curJobStep.IsStep(EXECUTE_STEP.P2_WAIT_REACH_PACKING_SHELF_PLACE))
......@@ -196,8 +196,8 @@ namespace DeviceLibrary
msg += runInfo;
curJobStep.Msg = msg;
RFID = CommonVar.nodeInfo[i].RFID;
rtn = MiR_API.Add_Mission_Fleet(agv, CommonVar.agvMission[SettingString.Enter]);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
rtn = agv.AssignTask(SettingString.Enter);
UpdateJobTaskInfo(agv);
}
}
......
......@@ -81,7 +81,7 @@ namespace DeviceLibrary
bool rtn = false;
agv.Msg = runInfo;
CurTaskState = CommonVar.GetTakJobState(CurTaskID);
CurTaskState = CommonVar.GetTakJobState(agv);
if (curJobStep.IsStep(EXECUTE_STEP.P1_NONE))
{
......@@ -90,7 +90,7 @@ namespace DeviceLibrary
msg += runInfo;
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
else if (curJobStep.IsStep(EXECUTE_STEP.P2_WAIT_REACH_PACKING_STATION))
......@@ -155,7 +155,7 @@ namespace DeviceLibrary
curJobStep.Msg = msg;
CommonVar.DockToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
else if (curJobStep.IsTimeOut(6000, out double timeOutTime))
{
......@@ -174,9 +174,8 @@ namespace DeviceLibrary
runInfo = "停靠包装仓完成,链条运行";
msg += runInfo;
curJobStep.Msg = msg;
rtn = MiR_API.Add_Mission_Fleet(agv, CommonVar.agvMission[SettingString.Leave]);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
rtn = agv.AssignTask(SettingString.Leave);
UpdateJobTaskInfo(agv);
}
}
else if (curJobStep.IsStep(EXECUTE_STEP.P6_WAIT_SHELF_IN_STATION))
......
......@@ -74,7 +74,7 @@ namespace DeviceLibrary
bool rtn = false;
agv.Msg = runInfo;
CurTaskState = CommonVar.GetTakJobState(CurTaskID);
CurTaskState = CommonVar.GetTakJobState(agv);
if (curJobStep.IsStep(EXECUTE_STEP.P1_NONE))
{
agv.RFID = RFID;
......@@ -83,7 +83,7 @@ namespace DeviceLibrary
msg += runInfo;
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
else if (curJobStep.IsStep(EXECUTE_STEP.P2_WAIT_REACH_PACKING_STATION))
......@@ -136,7 +136,7 @@ namespace DeviceLibrary
curJobStep.Msg = msg;
CommonVar.DockToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
//else if (curJobStep.IsTimeOut(6000, out double timeOutTime))
//{
......@@ -154,9 +154,8 @@ namespace DeviceLibrary
runInfo = "停靠包装仓完成,链条运行";
msg += runInfo;
curJobStep.Msg = msg;
rtn = MiR_API.Add_Mission_Fleet(agv, CommonVar.agvMission[SettingString.Enter]);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
rtn = agv.AssignTask(SettingString.Enter);
UpdateJobTaskInfo(agv);
}
}
else if (curJobStep.IsStep(EXECUTE_STEP.P6_WAIT_SHELF_IN_AGV))
......@@ -189,7 +188,7 @@ namespace DeviceLibrary
agvPlace = agv.Place;
TargetPlace = SettingString.Standby;
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
else//有锁定节点
{
......@@ -200,7 +199,7 @@ namespace DeviceLibrary
agvPlace = agv.Place;
TargetPlace = nodeName;
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
else//无锁定节点,去A2
......@@ -213,7 +212,7 @@ namespace DeviceLibrary
curJobStep.Msg = msg;
PackingJobType.DelMark(mark);
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
else
......@@ -229,7 +228,7 @@ namespace DeviceLibrary
agvPlace = agv.Place;
TargetPlace = CommonVar.nodeInfo[nodeIdx].Name;
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
else //pack任务还有剩余,但目前包装仓还未生成任务,去待机位
{
......@@ -240,7 +239,7 @@ namespace DeviceLibrary
agvPlace = agv.Place;
TargetPlace = SettingString.Standby;
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
else//出库任务完成
......@@ -262,7 +261,7 @@ namespace DeviceLibrary
curJobStep.Msg = msg;
PackingJobType.DelMark(mark);
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
......@@ -290,7 +289,7 @@ namespace DeviceLibrary
curJobStep.Msg = msg;
CommonVar.DockToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
else if (curJobStep.IsTimeOut(6000, out double timeOutTime))
{
......@@ -308,9 +307,8 @@ namespace DeviceLibrary
runInfo = "停靠包装仓完成,链条运行";
msg += runInfo;
curJobStep.Msg = msg;
rtn = MiR_API.Add_Mission_Fleet(agv, CommonVar.agvMission[SettingString.Leave]);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
rtn = agv.AssignTask(SettingString.Leave);
UpdateJobTaskInfo(agv);
}
}
else if (curJobStep.IsStep(EXECUTE_STEP.P11_WAIT_SHELF_IN_LINE))
......@@ -351,8 +349,8 @@ namespace DeviceLibrary
msg += runInfo;
curJobStep.Msg = msg;
rtn = MiR_API.Add_Mission_Fleet(agv, CommonVar.agvMission[SettingString.Leave]);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
rtn = agv.AssignTask(SettingString.Leave);
UpdateJobTaskInfo(agv);
}
//else if (curJobStep.IsTimeOut(6000, out double timeOutTime))
//{
......@@ -377,7 +375,7 @@ namespace DeviceLibrary
TargetPlace = CommonVar.nodeInfo[nodeIdx].Name;
agvPlace = agv.Place;
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
}
......
......@@ -89,7 +89,7 @@ namespace DeviceLibrary
bool rtn = false;
agv.Msg = runInfo;
CurTaskState = CommonVar.GetTakJobState(CurTaskID);
CurTaskState = CommonVar.GetTakJobState(agv);
if (curJobStep.IsStep(EXECUTE_STEP.R1_NONE))
{
if(hasLoad)
......@@ -101,7 +101,7 @@ namespace DeviceLibrary
msg += runInfo;
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, RecycleStation);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
else
{
......@@ -111,7 +111,7 @@ namespace DeviceLibrary
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, SettingString.Standby);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
else//车上无料
......@@ -123,7 +123,7 @@ namespace DeviceLibrary
msg += runInfo;
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
else
{
......@@ -133,7 +133,7 @@ namespace DeviceLibrary
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
}
......@@ -157,9 +157,8 @@ namespace DeviceLibrary
runInfo = "线体"+TargetPlace+"允许出料,链条运行";
msg += runInfo;
curJobStep.Msg = msg;
rtn = MiR_API.Add_Mission_Fleet(agv, CommonVar.agvMission[SettingString.Enter]);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
rtn = agv.AssignTask(SettingString.Enter);
UpdateJobTaskInfo(agv);
}
//else if(curJobStep.IsTimeOut(6000,out double timeOutTime))
//{
......@@ -180,7 +179,7 @@ namespace DeviceLibrary
msg += runInfo;
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, RecycleStation);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
else
{
......@@ -190,7 +189,7 @@ namespace DeviceLibrary
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, SettingString.Standby);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
}
......@@ -214,9 +213,8 @@ namespace DeviceLibrary
runInfo = "收到线体入料请求,链条运行";
msg += runInfo;
curJobStep.Msg = msg;
rtn = MiR_API.Add_Mission_Fleet(agv, CommonVar.agvMission[SettingString.Leave]);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
rtn = agv.AssignTask(SettingString.Leave);
UpdateJobTaskInfo(agv);
}
//else if (curJobStep.IsTimeOut(6000, out double timeOutTime))
//{
......@@ -251,7 +249,7 @@ namespace DeviceLibrary
msg += runInfo;
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, RecycleStation);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
}
......@@ -278,7 +276,7 @@ namespace DeviceLibrary
{
if(shelfType.Equals(ShelfType.ReelString))
{
int i = CommonVar.nodeInfo.FindIndex(s => s.Name.Equals(SettingString.C7) && s.StateEquals(eNodeStatus.NeedEnter));
int i = CommonVar.nodeInfo.FindIndex(s => s.Name.Equals(SettingString.T4_1) && s.StateEquals(eNodeStatus.NeedEnter));
if(i==-1) i = CommonVar.nodeInfo.FindIndex(s => s.Name.Equals(SettingString.D1) && s.StateEquals(eNodeStatus.NeedEnter));
if (i == -1) i = CommonVar.nodeInfo.FindIndex(s => s.Name.Equals(SettingString.A2) && s.StateEquals(eNodeStatus.NeedEnter));
if(i>-1)
......
......@@ -82,26 +82,26 @@ namespace DeviceLibrary
bool rtn = false;
agv.Msg = GetShowInfo();
CurTaskState = CommonVar.GetTakJobState(CurTaskID);
CurTaskState = CommonVar.GetTakJobState(agv);
if (curJobStep.IsStep(EXECUTE_STEP.P1_NONE))
{
if (!agvPlace.StartsWith(SettingString.C4_Name_Prefix) && TargetPlace.StartsWith(SettingString.C4_Name_Prefix))//D C
{
curJobStep.ToNextStep(EXECUTE_STEP.P3_WAIT_REACH_4C_DOOR);
runInfo = "收到任务,在4D车间,向" + TargetPlace + "运行,先过门";
runInfo = "收到任务,在3D车间,向" + TargetPlace + "运行,先过门";
msg += runInfo;
curJobStep.Msg = msg;
CommonVar.DoorMission(agv, SettingString.DoorDToC);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
else if (agvPlace.StartsWith(SettingString.C4_Name_Prefix) && !TargetPlace.StartsWith(SettingString.C4_Name_Prefix))//C D
{
curJobStep.ToNextStep(EXECUTE_STEP.P3_WAIT_REACH_4D_DOOR);
runInfo = "收到任务,在4C车间,向" + TargetPlace + "运行,先过门";
runInfo = "收到任务,在3C车间,向" + TargetPlace + "运行,先过门";
msg += runInfo;
curJobStep.Msg = msg;
CommonVar.DoorMission(agv, SettingString.DoorCToD);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
else//DD CC
{
......@@ -110,7 +110,7 @@ namespace DeviceLibrary
msg += runInfo;
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
......@@ -130,12 +130,12 @@ namespace DeviceLibrary
if (CommonVar.CheckTaskMoveFinished(agv, SettingString.DoorCToD, CurTaskState))
{
curJobStep.ToNextStep(EXECUTE_STEP.P2_WAIT_REACH_STATION);
runInfo = "到达4D门,去料架处" + TargetPlace;
runInfo = "到达3D门,去料架处" + TargetPlace;
msg += runInfo;
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
else if (curJobStep.IsStep(EXECUTE_STEP.P3_WAIT_REACH_4C_DOOR))
......@@ -143,28 +143,27 @@ namespace DeviceLibrary
if (CommonVar.CheckTaskMoveFinished(agv, SettingString.DoorDToC, CurTaskState))
{
curJobStep.ToNextStep(EXECUTE_STEP.P2_WAIT_REACH_STATION);
runInfo = "到达4C门,去料架处" + TargetPlace;
runInfo = "到达3C门,去料架处" + TargetPlace;
msg += runInfo;
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, TargetPlace);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
else if (curJobStep.IsStep(EXECUTE_STEP.P4_WAIT_STATION_RESPONSE))
{
int i = CommonVar.nodeInfo.FindIndex(s => s.Name.Equals(TargetPlace) && s.StateEquals(eNodeStatus.MayEnter));
if (i > -1)
// int i = CommonVar.nodeInfo.FindIndex(s => s.Name.Equals(TargetPlace) && s.StateEquals(eNodeStatus.MayEnter));
// if (i > -1)
{
curJobStep.ToNextStep(EXECUTE_STEP.P5_WAIT_SHELF_IN_STATION);
runInfo = "收到线体允许进料信号,链条运行";
msg += runInfo;
curJobStep.Msg = msg;
rtn = MiR_API.Add_Mission_Fleet(agv, CommonVar.agvMission[SettingString.Leave]);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
rtn = agv.AssignTask(SettingString.Leave);
UpdateJobTaskInfo(agv);
}
else if (curJobStep.IsTimeOut(15000, out double timeOutTime))
if (curJobStep.IsTimeOut(15000, out double timeOutTime))
{
curJobStep.ToNextStep(EXECUTE_STEP.P2_WAIT_REACH_STATION);
runInfo = string.Format("线体[{0}]允许进料信号[{1}]超时{2}秒,重发进料请求", TargetPlace, eNodeStatus.MayEnter, timeOutTime.ToString("f2"));
......@@ -177,12 +176,12 @@ namespace DeviceLibrary
if (CommonVar.CheckEnterOrLeaveFinished(agv, SettingString.Leave, CurTaskState))
{
CommonVar.server.CloseDoor(TargetPlace);
if (IsPlace(SettingString.G23_In) && FindReturnShelf(agv))
if (IsPlace(SettingString.D23_In) && FindReturnShelf(agv))
{
runInfo = "料架进入" + TargetPlace + "完成,去退料线出口取一个料串回点料机";
msg += runInfo;
curJobStep.Msg = msg;
return new GetShelfJob(TargetPlace, SettingString.G24_Out, "B#", true);
return new GetShelfJob(TargetPlace, SettingString.D24_Out, "B#", true);
}
else
{
......@@ -233,19 +232,19 @@ namespace DeviceLibrary
private bool FindReturnShelf(Agv_Info currentAgv)
{
string rfid = "";
if (ReelStringJobType.FindNeedLeaveMission(currentAgv, SettingString.G24_Out, out rfid))
if (ReelStringJobType.FindNeedLeaveMission(currentAgv, SettingString.D24_Out, out rfid))
{
if (ReelStringJobType.FindNeedEnterMission(currentAgv, SettingString.D3))
{
LogUtil.info(string.Format("{0} 在退料线生成任务(D3需要满料串,G24出满料串):Place={1},rfid={2}", currentAgv.Name, SettingString.D3, rfid));
LogUtil.info(string.Format("{0} 在退料线生成任务(D3需要满料串,D24出满料串):Place={1},rfid={2}", currentAgv.Name, SettingString.D3, rfid));
return true;
}
}
if (ReelStringJobType.FindNeedLeaveMission(currentAgv, SettingString.D4, out rfid))
{
if (ReelStringJobType.FindNeedEnterMission(currentAgv, SettingString.G23_In))
if (ReelStringJobType.FindNeedEnterMission(currentAgv, SettingString.D23_In))
{
LogUtil.info(string.Format("{0} 在退料线生成任务(D4需要满料串,G24出满料串):Place={1},rfid={2}", currentAgv.Name, SettingString.D4, rfid));
LogUtil.info(string.Format("{0} 在退料线生成任务(D4需要满料串,D24出满料串):Place={1},rfid={2}", currentAgv.Name, SettingString.D4, rfid));
return true;
}
}
......
......@@ -43,7 +43,7 @@ namespace DeviceLibrary
bool rtn = false;
agv.Msg = "";
CurTaskState = CommonVar.GetTakJobState(CurTaskID);
CurTaskState = CommonVar.GetTakJobState(agv);
if (curJobStep.IsStep(EXECUTE_STEP.NONE))
{
if (agvPlace.Equals(SettingString.Standby))//在待机位不操作
......@@ -61,7 +61,7 @@ namespace DeviceLibrary
msg += runInfo;
curJobStep.Msg = msg;
CommonVar.DoorMission(agv, SettingString.DoorCToD);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
else
{
......@@ -71,7 +71,7 @@ namespace DeviceLibrary
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, SettingString.Standby);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
......@@ -86,7 +86,7 @@ namespace DeviceLibrary
curJobStep.Msg = msg;
CommonVar.MoveToNode(agv, SettingString.Standby);
UpdateJobTaskInfo(agv.CurTaskName, agv.CurTaskID);
UpdateJobTaskInfo(agv);
}
}
else if (curJobStep.IsStep(EXECUTE_STEP.WAIT_REACH_STANDBY))
......
......@@ -23,31 +23,31 @@ namespace DeviceLibrary
return null;
string rfid="";
//查找退料线出满料架且点料机需要架子
if (ReelStringJobType.FindNeedLeave(currentAgv, SettingString.G24_Out,out rfid))
if (ReelStringJobType.FindNeedLeave(currentAgv, SettingString.D24_Out,out rfid))
{
if (ReelStringJobType.FindNeedEnter(currentAgv, SettingString.D3) )
{
int idx = CommonVar.agvInfo.FindIndex(s => !s.IP.Equals(currentAgv.IP) && s.CurJob != null && s.CurJob is SendShelfJob && (((SendShelfJob)s.CurJob).TargetPlace.Equals(SettingString.G23_In)));
int idx = CommonVar.agvInfo.FindIndex(s => !s.IP.Equals(currentAgv.IP) && s.CurJob != null && s.CurJob is SendShelfJob && (((SendShelfJob)s.CurJob).TargetPlace.Equals(SettingString.D23_In)));
if (idx == -1) idx = CommonVar.agvInfo.FindIndex(s => !s.IP.Equals(currentAgv.IP) && s.CurJob != null && s.CurJob is SendShelfJob && (((SendShelfJob)s.CurJob).TargetPlace.Equals(SettingString.D3)));
if (idx == -1) idx = CommonVar.agvInfo.FindIndex(s => !s.IP.Equals(currentAgv.IP) && s.CurJob != null && s.CurJob is GetShelfJob && (((GetShelfJob)s.CurJob).TargetPlace.Equals(SettingString.D3)));
if (idx==-1) idx = CommonVar.agvInfo.FindIndex(s => !s.IP.Equals(currentAgv.IP) && s.CurJob != null && s.CurJob is GetShelfJob && (((GetShelfJob)s.CurJob).TargetPlace.Equals(SettingString.G24_Out)));
if (idx==-1) idx = CommonVar.agvInfo.FindIndex(s => !s.IP.Equals(currentAgv.IP) && s.CurJob != null && s.CurJob is GetShelfJob && (((GetShelfJob)s.CurJob).TargetPlace.Equals(SettingString.D24_Out)));
if (idx == -1)
{
LogUtil.info(string.Format("{0} 退料任务生成(D3需要满料串,G24出满料串):Place={1},rfid={2}", currentAgv.Name, SettingString.D3, rfid));
return new GetShelfJob(currentAgv.Place, SettingString.G24_Out, "B#",true);
LogUtil.info(string.Format("{0} 退料任务生成(D3需要满料串,D24出满料串):Place={1},rfid={2}", currentAgv.Name, SettingString.D3, rfid));
return new GetShelfJob(currentAgv.Place, SettingString.D24_Out, "B#",true);
}
}
if (ReelStringJobType.FindNeedEnter(currentAgv, SettingString.D4))
{
int idx = CommonVar.agvInfo.FindIndex(s => !s.IP.Equals(currentAgv.IP) && s.CurJob != null && s.CurJob is SendShelfJob && (((SendShelfJob)s.CurJob).TargetPlace.Equals(SettingString.G23_In)));
int idx = CommonVar.agvInfo.FindIndex(s => !s.IP.Equals(currentAgv.IP) && s.CurJob != null && s.CurJob is SendShelfJob && (((SendShelfJob)s.CurJob).TargetPlace.Equals(SettingString.D23_In)));
if (idx == -1) idx = CommonVar.agvInfo.FindIndex(s => !s.IP.Equals(currentAgv.IP) && s.CurJob != null && s.CurJob is SendShelfJob && (((SendShelfJob)s.CurJob).TargetPlace.Equals(SettingString.D4)));
if (idx == -1) idx = CommonVar.agvInfo.FindIndex(s => !s.IP.Equals(currentAgv.IP) && s.CurJob != null && s.CurJob is GetShelfJob && (((GetShelfJob)s.CurJob).TargetPlace.Equals(SettingString.D4)));
if (idx == -1) idx = CommonVar.agvInfo.FindIndex(s => !s.IP.Equals(currentAgv.IP) && s.CurJob != null && s.CurJob is GetShelfJob && (((GetShelfJob)s.CurJob).TargetPlace.Equals(SettingString.G24_Out)));
if (idx == -1) idx = CommonVar.agvInfo.FindIndex(s => !s.IP.Equals(currentAgv.IP) && s.CurJob != null && s.CurJob is GetShelfJob && (((GetShelfJob)s.CurJob).TargetPlace.Equals(SettingString.D24_Out)));
if (idx == -1)
{
LogUtil.info(string.Format("{0} 退料任务生成(D4需要满料串,G24出满料串):Place={1},rfid={2}", currentAgv.Name, SettingString.D3, rfid));
return new GetShelfJob(currentAgv.Place, SettingString.G24_Out, "B#",true);
LogUtil.info(string.Format("{0} 退料任务生成(D4需要满料串,D24出满料串):Place={1},rfid={2}", currentAgv.Name, SettingString.D3, rfid));
return new GetShelfJob(currentAgv.Place, SettingString.D24_Out, "B#",true);
}
}
......@@ -56,17 +56,17 @@ namespace DeviceLibrary
////点料机出空架子
if (ReelStringJobType.FindNeedLeaveMission(currentAgv, SettingString.D3, out rfid))
{
if (ReelStringJobType.FindNeedEnterMission(currentAgv, SettingString.G23_In))
if (ReelStringJobType.FindNeedEnterMission(currentAgv, SettingString.D23_In))
{
LogUtil.info(string.Format("{0} 退料任务生成(D3出空料串,G23需要空料串):Place={1},rfid={2}", currentAgv.Name, SettingString.D3, rfid));
LogUtil.info(string.Format("{0} 退料任务生成(D3出空料串,D23需要空料串):Place={1},rfid={2}", currentAgv.Name, SettingString.D3, rfid));
return new GetShelfJob(currentAgv.Place, SettingString.D3, "B#");
}
}
if (ReelStringJobType.FindNeedLeaveMission(currentAgv, SettingString.D4, out rfid))
{
if (ReelStringJobType.FindNeedEnterMission(currentAgv, SettingString.G23_In))
if (ReelStringJobType.FindNeedEnterMission(currentAgv, SettingString.D23_In))
{
LogUtil.info(string.Format("{0} 退料任务生成(D4出空料串,G23需要空料串):Place={1},rfid={2}", currentAgv.Name, SettingString.D4, rfid));
LogUtil.info(string.Format("{0} 退料任务生成(D4出空料串,D23需要空料串):Place={1},rfid={2}", currentAgv.Name, SettingString.D4, rfid));
return new GetShelfJob(currentAgv.Place, SettingString.D4, "B#");
}
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!