Commit 773dbccc jskang

AGV架构重构

1 个父辈 81316f3e
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AgvManager
{
public class AgvManager{
public static Dictionary<string,Node> nodeMap = new Dictionary<string, Node>();
public static Dictionary<string,AgvBean> agvBeanMap = new Dictionary<string, AgvBean>();
public static void UpdateNodeStatus(string nodeName, NodeStatus nodeStatus)
{
}
public static void UpdateAgvStatus(string agvName, AgvStatus agvStatus)
{
}
public void onTimer()
{
foreach (var agvName in agvBeanMap)
{
AgvBean agvBean = agvBeanMap[agvName];
if (agvBean.isIdle() || agvBean.isInCharge())
{
//空闲,判断电量,是否要进行充电
if (agvBean.needCharge())
{
if (!agvBean.isInCharge())
{
//充电
}
}
else
{
//执行优先级最高的新任务
Job jobToExecute = null;
foreach (var nodeName in agvBeanMap)
{
Node node = nodeMap[nodeName];
Job job = node.GetNewJob(agvBean, nodeMap, agvBeanMap);
if (job != null)
{
if (jobToExecute == null || job.priority > jobToExecute.priority)
{
jobToExecute = job;
}
}
}
if (jobToExecute != null)
{
if (agvBean.isInCharge())
{
//充电取消
}
agvBean.executeNewJob(jobToExecute);
}
}
}
else
{
//有任务,继续监控任务状态
agvBean.JobContinue(agvBean, nodeMap, agvBeanMap);
}
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>42a5cbfa-785a-41f8-8e6c-3988db9eb07c</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AgvManager</RootNamespace>
<AssemblyName>AgvManager</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System"/>
<Reference Include="System.Core"/>
<Reference Include="System.Xml.Linq"/>
<Reference Include="System.Data.DataSetExtensions"/>
<Reference Include="Microsoft.CSharp"/>
<Reference Include="System.Data"/>
<Reference Include="System.Net.Http"/>
<Reference Include="System.Xml"/>
</ItemGroup>
<ItemGroup>
<Compile Include="Class1.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("AgvManager")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AgvManager")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("42a5cbfa-785a-41f8-8e6c-3988db9eb07c")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
using System;
public interface AgvApi
{
}
using System;
public class AgvBean
{
public AgvStatus agvStatus;
public AgvApi AgvApi;
public Job job;
public bool isIdle()
{
return false;
}
public bool needCharge()
{
return false;
}
public void ExecuteNewJob(Job newJob)
{
job = newJob;
}
public void JobContinue(AgvBean currentAgvBean, Dictionary<string, Node> nodeMap, Dictionary<string, AgvBean> agvBeanMap)
{
if(job != null)
{
job.execute(agvBean, nodeMap, agvBeanMap);
if (job.IsEnd())
{
//添加任务已经完成日志
job = null;
}
}
}
}
using System;
public class AgvStatus
{
public AgvStatus()
{
}
}
using System;
public interface Job
{
/// <summary>
/// 任务优先级
/// </summary>
/// <returns></returns>
public virtual int GetPriority();
/// <summary>
/// 任务是否已经结束
/// </summary>
/// <returns></returns>
public virtual bool IsEnd();
/// <summary>
/// 根据任务状态继续执行任务
/// </summary>
public virtual void execute(AgvBean agvBean, Dictionary<string, Node> nodeMap, Dictionary<string, AgvBean> agvBeanMap);
}
using System;
public interface Node{
public string nodeName;
public virtual Job GetNewJob(AgvBean currentAgvBean, Dictionary<string, Node> nodeMap, Dictionary<string, AgvBean> agvBeanMap);
}
using System;
/// <summary>
/// 节点状态
/// </summary>
public class NodeStatus
{
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!