Commit 5d31128f 张东亮

1

1 个父辈 11b0ca13
......@@ -38,12 +38,6 @@
<ApplicationIcon>icon.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="Agv">
<HintPath>dll\Agv.dll</HintPath>
</Reference>
<Reference Include="Agv.Server">
<HintPath>dll\Agv.Server.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=2.0.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.12\lib\net45\log4net.dll</HintPath>
</Reference>
......@@ -128,6 +122,14 @@
<Content Include="icon.ico" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\AGV-Com\Agv\Agv.csproj">
<Project>{a2ef9efc-51c5-4bf6-965f-3a06beadd632}</Project>
<Name>Agv</Name>
</ProjectReference>
<ProjectReference Include="..\..\AGV-Com\Server\Server.csproj">
<Project>{f539cef2-cbd5-4abf-afd2-56c848ded0c0}</Project>
<Name>Server</Name>
</ProjectReference>
<ProjectReference Include="..\AGV_UI\AGV_UI.csproj">
<Project>{c6d2fc09-46f7-4ec5-a877-15ea06342e4f}</Project>
<Name>AGV_UI</Name>
......
......@@ -471,6 +471,7 @@
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "AGV调度系统";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmMain_FormClosing);
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FrmMain_FormClosed);
this.Load += new System.EventHandler(this.FrmMain_Load);
this.tableLayoutPanel3.ResumeLayout(false);
this.tabControl1.ResumeLayout(false);
......
......@@ -5,6 +5,9 @@ using System.Windows.Forms;
using Common;
using DeviceLibrary;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.Threading;
namespace AGVControl
{
public partial class FrmMain : Form
......@@ -82,7 +85,7 @@ namespace AGVControl
if (agvManual[status.AGVName].IsDisposed)
{
Agv_Info agv = Context.agvInfo.Find(s => s.Name.Equals(status.AGVName));
if(agv !=null)
if (agv != null)
{
agvManual[status.AGVName] = new Manual(agv);
agvManual[status.AGVName].Show();
......@@ -158,16 +161,36 @@ namespace AGVControl
}
));
}
static object nodeChangeLock = new object();
ConcurrentQueue<Agv.Node> nodeUpdate = new System.Collections.Concurrent.ConcurrentQueue<Agv.Node>();
private void Server_NodeChanged(Agv.Node clientNode)
{
int idx = DeviceLibrary.Context.nodeInfo.FindIndex(s => s.Name.Equals(clientNode.Name));
if (idx > -1)
if (Monitor.TryEnter(nodeChangeLock, 300))
{
try
{
this.Invoke(new Action(() =>
{
int idx = DeviceLibrary.Context.nodeInfo.FindIndex(s => s.Name.Equals(clientNode.Name));
if (idx > -1)
{
DeviceLibrary.Context.nodeInfo[idx].Action = clientNode.Action;
DeviceLibrary.Context.nodeInfo[idx].Shelf = clientNode.Shelf;
DeviceLibrary.Context.nodeInfo[idx].RFID = clientNode.RFID;
DgvNode.Rows[idx].SetValues(DeviceLibrary.Context.nodeInfo[idx].LineName, DeviceLibrary.Context.nodeInfo[idx].Action, DeviceLibrary.Context.nodeInfo[idx].Shelf, DeviceLibrary.Context.nodeInfo[idx].RFID, DeviceLibrary.Context.nodeInfo[idx].Online, DeviceLibrary.Context.nodeInfo[idx].IsUse);
LogUtil.info("Event Updated:" + clientNode.ToText());
}
}));
}
finally
{
Monitor.Exit(nodeChangeLock);
}
}
else
{
DeviceLibrary.Context.nodeInfo[idx].Action = clientNode.Action;
DeviceLibrary.Context.nodeInfo[idx].Shelf = clientNode.Shelf;
DeviceLibrary.Context.nodeInfo[idx].RFID = clientNode.RFID;
DgvNode.Rows[idx].SetValues(DeviceLibrary.Context.nodeInfo[idx].LineName, DeviceLibrary.Context.nodeInfo[idx].Action, DeviceLibrary.Context.nodeInfo[idx].Shelf, DeviceLibrary.Context.nodeInfo[idx].RFID, DeviceLibrary.Context.nodeInfo[idx].Online, DeviceLibrary.Context.nodeInfo[idx].IsUse);
nodeUpdate.Enqueue(clientNode);
LogUtil.info("node Enqueue:" + clientNode.ToText());
}
}
......@@ -182,12 +205,6 @@ namespace AGVControl
{
DeviceLibrary.Context.WriteIni(item.Name, SettingString.RFID, item.RFID);
}
//showTimer.Enabled = false;
showTimer.Stop();
// CommonVar.control.AgvChanged -= Control_AgvChanged;
DeviceLibrary.Context.server.NodeChanged -= Server_NodeChanged;
DeviceLibrary.Context.server.NodeOnline -= Server_NodeOnline;
}
private void DgvNode_CellClick(object sender, DataGridViewCellEventArgs e)
......@@ -273,7 +290,27 @@ namespace AGVControl
}
}));
Application.DoEvents();
if (nodeUpdate.Count > 0)
{
if (nodeUpdate.TryDequeue(out Agv.Node clientNode))
{
this.Invoke(new Action(() =>
{
int idx = DeviceLibrary.Context.nodeInfo.FindIndex(s => s.Name.Equals(clientNode.Name));
LogUtil.info("UpdateNodeQueue trigger【" + idx + "】:" + clientNode.ToText());
if (idx > -1)
{
DeviceLibrary.Context.nodeInfo[idx].Action = clientNode.Action;
DeviceLibrary.Context.nodeInfo[idx].Shelf = clientNode.Shelf;
DeviceLibrary.Context.nodeInfo[idx].RFID = clientNode.RFID;
DgvNode.Rows[idx].SetValues(DeviceLibrary.Context.nodeInfo[idx].LineName, DeviceLibrary.Context.nodeInfo[idx].Action, DeviceLibrary.Context.nodeInfo[idx].Shelf, DeviceLibrary.Context.nodeInfo[idx].RFID, DeviceLibrary.Context.nodeInfo[idx].Online, DeviceLibrary.Context.nodeInfo[idx].IsUse);
LogUtil.info("UpdateNodeQueue Updated:" + clientNode.ToText());
}
}));
}
}
InShhow = false;
}
/// <summary>
......@@ -326,5 +363,14 @@ namespace AGVControl
if (tabControl1.SelectedIndex == 1)
LogUtil.logBox = richTextBox1;
}
private void FrmMain_FormClosed(object sender, FormClosedEventArgs e)
{
//showTimer.Enabled = false;
showTimer.Stop();
// CommonVar.control.AgvChanged -= Control_AgvChanged;
DeviceLibrary.Context.server.NodeChanged -= Server_NodeChanged;
DeviceLibrary.Context.server.NodeOnline -= Server_NodeOnline;
}
}
}
......@@ -50,6 +50,7 @@ namespace AGVControl
{
MiR_API.Del_Mission(Agv);
//添加Init任务
LogUtil.info(string.Format("{0} 运行模式改变:自动-》手动", Agv.Name));
Agv.AssignTask(SettingString.Init);
}
......@@ -64,8 +65,9 @@ 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))
{
LogUtil.info(string.Format("{0} 运行模式改变:手动-》自动【不继续上一次任务:{1}】", Agv.Name, Agv.Msg));
Agv.CurJob = null;
if (Agv.Place.Equals(SettingString.Standby) || Agv.Place.Equals(SettingString.AutoCharge))
Agv.Place = "";
......@@ -73,17 +75,17 @@ namespace AGVControl
{
MiR_API.Del_Mission(Agv);
}
Agv.RFID = "";
}
else
{
if (Agv.IsCon)
{
Agv.Resend();
}
//else
//{
// if (Agv.IsCon)
// {
// Agv.Resend();
// LogUtil.info(string.Format("{0} 运行模式改变:手动-》自动【继续上一次任务:{1}】", Agv.Name, Agv.Msg));
// }
}
//}
}
Agv.IsUse = chkBxAuto.Checked;
......
......@@ -51,7 +51,7 @@
</layout>
</appender>
<logger name="Agv">
<level value="Info"/>
<level value="info"/>
<appender-ref ref="Agv"/>
</logger>
<logger name="MiR_API">
......
文件属性发生变化
文件属性发生变化
文件属性发生变化
文件属性发生变化
文件属性发生变化
文件属性发生变化
文件属性发生变化
文件属性发生变化
......@@ -12,6 +12,16 @@
设备1出口,MoveD2,c3d71c15-8cca-11eb-952c-94c6911e764d
设备2入口,MoveD3,61c2ea2a-8cca-11eb-952c-94c6911e764d
设备2出口,MoveD4,3820bb99-8ccb-11eb-952c-94c6911e764d
备料区,MoveFeeder,a3250851-b3c6-11eb-86a7-94c6911e764d
产线1,MoveMP1,13e34f3b-8d3b-11eb-bd58-94c6911e764d
产线2,MoveMP2,13e34f3b-8d3b-11eb-bd58-94c6911e764d
Feeder,MoveFeeder,13e34f3b-8d3b-11eb-bd58-94c6911e764d
\ No newline at end of file
产线3,MoveMP3,13e34f3b-8d3b-11eb-bd58-94c6911e764d
产线4,MoveMP4,13e34f3b-8d3b-11eb-bd58-94c6911e764d
产线5,MoveMP5,13e34f3b-8d3b-11eb-bd58-94c6911e764d
产线6,MoveMP6,13e34f3b-8d3b-11eb-bd58-94c6911e764d
产线7,MoveMP7,13e34f3b-8d3b-11eb-bd58-94c6911e764d
产线8,MoveMP8,13e34f3b-8d3b-11eb-bd58-94c6911e764d
产线9,MoveMP9,13e34f3b-8d3b-11eb-bd58-94c6911e764d
产线10,MoveMP10,13e34f3b-8d3b-11eb-bd58-94c6911e764d
产线11,MoveMP11,13e34f3b-8d3b-11eb-bd58-94c6911e764d
产线12,MoveMP12,13e34f3b-8d3b-11eb-bd58-94c6911e764d
\ No newline at end of file
节点名,别名,线名
A1,A1,空料串线出口-A1
A2,A2,空料串线入口-A2
A3,A3,上料线入口-A3
A4,A4,上料线出口-A4
D1,D1,设备1入口-D1
D2,D2,设备1出口-D2
D3,D3,设备2入口-D3
D4,D4,设备3入口-D4
A1,A1,空料串线出口-A1
A4,A4,上料线入口-A4
A3,A3,上料线出口-A3
D1,D1,小料仓入口-D1
D2,D2,小料仓出口-D2
D3,D3,混合仓入口-D3
D4,D4,混合仓出口-D4
Feeder,Feeder,Feeder
MP1,MP1,产线1
MP2,MP2,产线2
......@@ -15,4 +15,8 @@ MP4,MP4,产线4
MP5,MP5,产线5
MP6,MP6,产线6
MP7,MP7,产线7
MP8,MP8,产线8
\ No newline at end of file
MP8,MP8,产线8
MP9,MP9,产线9
MP10,MP10,产线10
MP11,MP11,产线11
MP12,MP12,产线12
文件属性发生变化
......@@ -31,12 +31,6 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Agv">
<HintPath>..\AGVDispatch\dll\Agv.dll</HintPath>
</Reference>
<Reference Include="Agv.Server">
<HintPath>..\AGVDispatch\dll\Agv.Server.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=2.0.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.12\lib\net45\log4net.dll</HintPath>
</Reference>
......@@ -82,6 +76,14 @@
<Compile Include="Standby.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\AGV-Com\Agv\Agv.csproj">
<Project>{a2ef9efc-51c5-4bf6-965f-3a06beadd632}</Project>
<Name>Agv</Name>
</ProjectReference>
<ProjectReference Include="..\..\AGV-Com\Server\Server.csproj">
<Project>{f539cef2-cbd5-4abf-afd2-56c848ded0c0}</Project>
<Name>Server</Name>
</ProjectReference>
<ProjectReference Include="..\AGV_UI\AGV_UI.csproj">
<Project>{c6d2fc09-46f7-4ec5-a877-15ea06342e4f}</Project>
<Name>AGV_UI</Name>
......
文件属性发生变化
文件属性发生变化
......@@ -184,7 +184,7 @@ namespace DeviceLibrary
}
if (BoxOutJobType.CheckFullTask(RFID,out string tarname))
{
runInfo = RFID+"料架进入小车完成,去"+tarname;
runInfo = RFID+"料架进入小车完成";
msg += runInfo;
curJobStep.Msg = msg;
RequestManager.AgvRemoveRfid(RFID);
......
......@@ -288,7 +288,13 @@ namespace DeviceLibrary
RecycleStation = SettingString.D3;
return true;
}
res = JobType.FindNeedEnterMission(agv, SettingString.A2, true);
res = JobType.FindNeedEnterMission(agv, SettingString.A4, true);
if (res)
{
RecycleStation = SettingString.A4;
return true;
}
res = JobType.FindNeedEnterMission(agv, SettingString.A2, true);
if (res)
{
RecycleStation = SettingString.A2;
......
......@@ -71,17 +71,45 @@ namespace DeviceLibrary
CurTaskState = Context.GetTakJobState(agv);
if (curJobStep.IsStep(EXECUTE_STEP.P1_NONE))
{
curJobStep.ToNextStep(EXECUTE_STEP.P2_WAIT_REACH_LINE);
runInfo = "收到任务,向线体" + TargetPlace + "运行";
curJobStep.ToNextStep(EXECUTE_STEP.P2_WAIT_REACH_FEEDER);
runInfo = "收到送满料任务,向" + "Feeder" + "运行";
msg += runInfo;
curJobStep.Msg = msg;
Context.MoveToNode(agv, TargetPlace);
Context.MoveToNode(agv, "Feeder");
UpdateJobTaskInfo(agv);
}
else if (curJobStep.IsStep(EXECUTE_STEP.P2_WAIT_REACH_FEEDER))
{
CurTaskState = Context.GetTakJobState(agv);
if (Context.CheckTaskMoveFinished(agv, "Feeder", CurTaskState))
{
curJobStep.ToNextStep(EXECUTE_STEP.P2_WAIT_OPERATION_ON_FEEDER);
runInfo = "到达" + "Feeder" + ",等待挑拣首套料";
msg += runInfo;
curJobStep.Msg = msg;
}
}
else if (curJobStep.IsStep(EXECUTE_STEP.P2_WAIT_OPERATION_ON_FEEDER))
{
MiR_API.Get_IO_Status(agv, out bool[] input, out bool[] output);
System.Threading.Thread.Sleep(500);
if ((input != null && input[0]))
{
curJobStep.ToNextStep(EXECUTE_STEP.P2_WAIT_REACH_LINE);
runInfo = "料架上的首套料在" + TargetPlace + "挑拣完成";//,向线体"+TargetPlace+"运行
msg += runInfo;
curJobStep.Msg = msg;
//Context.MoveToNode(agv, TargetPlace);
//UpdateJobTaskInfo(agv);
RequestManager.AgvRemoveRfid(RFID);
return new RecycleEmptyShelf(TargetPlace, "", true);
}
}
else if (curJobStep.IsStep(EXECUTE_STEP.P2_WAIT_REACH_LINE))
{
CurTaskState = Context.GetTakJobState(agv);
if (Context.CheckTaskMoveFinished(agv, TargetPlace, CurTaskState))
{
curJobStep.ToNextStep(EXECUTE_STEP.P3_WAIT_MANNUAL_OPERATION);
......@@ -120,6 +148,14 @@ namespace DeviceLibrary
/// </summary>
P1_NONE,
/// <summary>
/// 先到Feeder
/// </summary>
P2_WAIT_REACH_FEEDER,
/// <summary>
/// 等待feeder人员操作
/// </summary>
P2_WAIT_OPERATION_ON_FEEDER,
/// <summary>
/// 等待到达线体
/// </summary>
P2_WAIT_REACH_LINE,
......
......@@ -94,6 +94,7 @@ namespace DeviceLibrary
}
else if (curJobStep.IsStep(EXECUTE_STEP.P2_WAIT_REACH_STATION))
{
CurTaskState = Context.GetTakJobState(agv);
if (Context.CheckTaskMoveFinished(agv, TargetPlace, CurTaskState))
{
curJobStep.ToNextStep(EXECUTE_STEP.P3_WAIT_STATION_RESPONSE);
......@@ -125,6 +126,7 @@ namespace DeviceLibrary
}
else if (curJobStep.IsStep(EXECUTE_STEP.P4_WAIT_SHELF_IN_STATION))
{
CurTaskState = Context.GetTakJobState(agv);
if (Context.CheckEnterOrLeaveFinished(agv, SettingString.Leave, CurTaskState))
{
//Context.server.CloseDoor(TargetPlace);
......

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30104.148
# Visual Studio Version 17
VisualStudioVersion = 17.2.32616.157
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AGVDispatch", "AGVDispatch\AGVDispatch.csproj", "{E1C3207D-C67D-4B46-A9DB-D182F2074CCB}"
EndProject
......@@ -11,6 +11,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "Common\Common.csp
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AGV_UI", "AGV_UI\AGV_UI.csproj", "{C6D2FC09-46F7-4EC5-A877-15EA06342E4F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Agv", "..\AGV-Com\Agv\Agv.csproj", "{A2EF9EFC-51C5-4BF6-965F-3A06BEADD632}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Server", "..\AGV-Com\Server\Server.csproj", "{F539CEF2-CBD5-4ABF-AFD2-56C848DED0C0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
......@@ -33,6 +37,14 @@ Global
{C6D2FC09-46F7-4EC5-A877-15EA06342E4F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C6D2FC09-46F7-4EC5-A877-15EA06342E4F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C6D2FC09-46F7-4EC5-A877-15EA06342E4F}.Release|Any CPU.Build.0 = Release|Any CPU
{A2EF9EFC-51C5-4BF6-965F-3A06BEADD632}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A2EF9EFC-51C5-4BF6-965F-3A06BEADD632}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A2EF9EFC-51C5-4BF6-965F-3A06BEADD632}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A2EF9EFC-51C5-4BF6-965F-3A06BEADD632}.Release|Any CPU.Build.0 = Release|Any CPU
{F539CEF2-CBD5-4ABF-AFD2-56C848DED0C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F539CEF2-CBD5-4ABF-AFD2-56C848DED0C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F539CEF2-CBD5-4ABF-AFD2-56C848DED0C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F539CEF2-CBD5-4ABF-AFD2-56C848DED0C0}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!