Commit ab3dd788 顾剑亮

new version

1 个父辈 1f67d6e9
正在显示 124 个修改的文件 包含 2955 行增加0 行删除
......@@ -7,6 +7,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AGVControl_Steel", "AGVCont
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test", "Test\Test.csproj", "{752A054D-58EC-460A-A936-F5483B1BC8B2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BLL", "BLL\BLL.csproj", "{C547FEDD-0B62-4AC3-96E7-C86DD38C670B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DAL", "DAL\DAL.csproj", "{82C814D9-4407-4B98-AACE-82CAF714BDAD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Model", "Model\Model.csproj", "{AC764294-C5E4-441F-ACC8-F912366CA1BC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UI", "UI\UI.csproj", "{6F08F614-2767-456A-80B8-A8FDB19F3988}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
......@@ -21,6 +29,22 @@ Global
{752A054D-58EC-460A-A936-F5483B1BC8B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{752A054D-58EC-460A-A936-F5483B1BC8B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{752A054D-58EC-460A-A936-F5483B1BC8B2}.Release|Any CPU.Build.0 = Release|Any CPU
{C547FEDD-0B62-4AC3-96E7-C86DD38C670B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C547FEDD-0B62-4AC3-96E7-C86DD38C670B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C547FEDD-0B62-4AC3-96E7-C86DD38C670B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C547FEDD-0B62-4AC3-96E7-C86DD38C670B}.Release|Any CPU.Build.0 = Release|Any CPU
{82C814D9-4407-4B98-AACE-82CAF714BDAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{82C814D9-4407-4B98-AACE-82CAF714BDAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{82C814D9-4407-4B98-AACE-82CAF714BDAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{82C814D9-4407-4B98-AACE-82CAF714BDAD}.Release|Any CPU.Build.0 = Release|Any CPU
{AC764294-C5E4-441F-ACC8-F912366CA1BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AC764294-C5E4-441F-ACC8-F912366CA1BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AC764294-C5E4-441F-ACC8-F912366CA1BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AC764294-C5E4-441F-ACC8-F912366CA1BC}.Release|Any CPU.Build.0 = Release|Any CPU
{6F08F614-2767-456A-80B8-A8FDB19F3988}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6F08F614-2767-456A-80B8-A8FDB19F3988}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6F08F614-2767-456A-80B8-A8FDB19F3988}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6F08F614-2767-456A-80B8-A8FDB19F3988}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
......
<?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>{C547FEDD-0B62-4AC3-96E7-C86DD38C670B}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>BLL</RootNamespace>
<AssemblyName>BLL</AssemblyName>
<TargetFrameworkVersion>v4.6</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>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.ServiceModel.Activation" />
<Reference Include="System.ServiceModel.Web" />
<Reference Include="System.Windows.Forms" />
<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="Job\ChargeJob.cs" />
<Compile Include="Control.cs" />
<Compile Include="Job\TakeOldJob.cs" />
<Compile Include="WebService\WebService.cs" />
<Compile Include="WebService\IWeb.cs" />
<Compile Include="JobStep.cs" />
<Compile Include="Job\MoveJob.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RunMode.cs" />
<Compile Include="Job\StandbyJob.cs" />
<Compile Include="SteelManage.cs" />
<Compile Include="Job\StorageJob.cs" />
<Compile Include="Job\SendNewJob.cs" />
<Compile Include="Job\WashPointJob.cs" />
<Compile Include="WebService\WebWork.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Model\Model.csproj">
<Project>{ac764294-c5e4-441f-acc8-f912366ca1bc}</Project>
<Name>Model</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
using System;
using System.Diagnostics;
using System.Threading;
using Model;
namespace BLL
{
public class Control
{
private Timer timerCall;
public delegate void AgvChangedEvent(int agvIndex);
public event AgvChangedEvent AgvChanged;
public event AgvChangedEvent AgvOnline;
public Control()
{
ThreadPool.SetMaxThreads(5, 5); //线程池最大数量
}
public void Start()
{
timerCall = new Timer(CallProcess, null, 0, 2000);
}
public void Stop()
{
if (timerCall != null)
timerCall.Dispose();
}
private void CallProcess(object obj)
{
for (int i = 0; i < Common.agvInfos.Count; i++)
{
AgvInfo info = Common.agvInfos[i];
if (info.IsCall) continue;
try
{
info.IsCall = true;
CheckAgvOnline(ref info);
if (!info.IsOnline) continue; //脱机
GetAgvState(ref info);
if (!info.IsAuto) continue; //手动
if (info.StateID == (int)StateID.Pause)
Common.mir.State_Ready(info.IP, info.Authorization);
if (info.CurrentJob == null)
info.CurrentJob = new StandbyJob();
else
info.CurrentJob = info.CurrentJob.Execute(info);
}
catch (Exception ex)
{
Common.log.Error("CallProcess " + info.Name, ex);
}
finally
{
info.IsCall = false;
}
}
}
private void GetAgvState(ref AgvInfo info)
{
if (!info.IsOnline) return;
bool rtn = Common.mir.Get_State(info.IP, info.Authorization, out int stateID, out string stateText, out int battery, out string missionText, out System.Drawing.PointF position);
//Common.log.Debug(string.Format("{1} GetAgvState[return={0}] stateID={2}, stateText={3}, battery={4}, missionText={5}, position={6}", rtn, info.FullName, stateID, stateText, battery, missionText, position));
if (rtn)
{
info.StateID = stateID;
info.StateText = stateText;
info.Battery = battery;
info.MissionText = missionText;
info.Position = position;
string ip = info.IP;
int idx = Common.agvInfos.FindIndex(s => s.IP == ip);
if (idx > -1) AgvChanged?.Invoke(idx);
}
}
private void CheckAgvOnline(ref AgvInfo info)
{
bool rtn = Common.mir.CheckIP(info.IP);
if (rtn)
{
if (!info.IsOnline)
{
info.IsOnline = true;
string ip = info.IP;
int idx = Common.agvInfos.FindIndex(s => s.IP == ip);
if (idx > -1) AgvOnline?.Invoke(idx);
//rtn = Common.mir.Get_IO_Modules(info.IP, info.Authorization, out string[] guid);
//if (rtn) info.IOGuid = guid[0];
}
}
else
{
if (info.IsOnline)
{
info.IsOnline = false;
string ip = info.IP;
int idx = Common.agvInfos.FindIndex(s => s.IP == ip);
if (idx > -1) AgvOnline?.Invoke(idx);
}
Common.log.Debug(string.Format("{0}[{1}] 脱机", info.Name, info.IP));
}
}
private enum StateID : int
{
None,
Starting,
ShuttingDown,
Ready,
Pause,
Executing,
Aborted,
Completed,
Docked,
Docking,
EmergencyStop,
ManualControl,
Error
}
}
}
\ No newline at end of file
using System;
using Model;
namespace BLL
{
public class ChargeJob : IJob
{
private AgvInfo _info;
private MoveJob move;
private string mission;
private JobStep<ChargeStep> chargeStep;
private int currBattery;
//private const int CHARGE_PLACE_PLC = 20;
public ChargeJob()
{
chargeStep = new JobStep<ChargeStep>(ChargeStep.None);
Common.log.Debug("加载ChargeJob");
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (chargeStep.Equals(ChargeStep.None))
{
currBattery = _info.Battery;
if (_info.IsWorkspace())
MoveCharge();
else
PassDoor();
}
else if (chargeStep.Equals(ChargeStep.PassDoor))
{
move.Execute(_info);
if(move.IsEnd)
MoveCharge();
}
else if (chargeStep.Equals(ChargeStep.MoveStation))
{
MoveStation();
}
else if (chargeStep.Equals(ChargeStep.Charging))
{
Common.log.Debug(_info.Name + "当前电量" + _info.Battery);
if (_info.Battery == _info.BatteryMax)
{
chargeStep.Msg = _info.Name + "电量达到" + _info.BatteryMax;
chargeStep.NextStep(ChargeStep.End);
}
else if (_info.Battery > _info.BatteryMin)
{
IJob job = SteelManage.GetSteelJob(_info);
if (job != null)
{
Common.mir.Del_Mission(_info.IP, _info.Authorization);
return job;
}
}
}
else if (chargeStep.Equals(ChargeStep.End))
{
Common.mir.Del_Mission(_info.IP, _info.Authorization);
chargeStep.Msg = _info.Name + "充电工作结束,回待机位";
return new StandbyJob();
}
return this;
}
private void MoveCharge()
{
mission = Common.MISSION_CHARGE + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
chargeStep.NextStep(ChargeStep.MoveStation);
chargeStep.Msg = _info.Name + "发送任务" + mission;
}
private void PassDoor()
{
mission = Common.MISSION_PASS_DOOR_INTO + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
chargeStep.NextStep(ChargeStep.PassDoor);
chargeStep.Msg = _info.Name + "发送任务" + mission;
}
private void MoveStation()
{
if (_info.Battery > currBattery)
{
chargeStep.Msg = _info.Name + "到达充电位,准备充电";
chargeStep.NextStep(ChargeStep.Charging);
}
}
private enum ChargeStep
{
None,
End,
PassDoor,
MoveStation,
Charging
}
}
}
using System;
using Model;
namespace BLL
{
public class MoveJob : IJob
{
private string _id;
private string _mission;
private AgvInfo _info;
private DateTime _getTime;
private JobStep<MoveStep> moveStep;
public MoveJob(string mission)
{
IsEnd = false;
this._mission = mission;
moveStep = new JobStep<MoveStep>(MoveStep.Send);
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (moveStep.Equals(MoveStep.Send))
Send();
else if (moveStep.Equals(MoveStep.Working))
Working();
else if (moveStep.Equals(MoveStep.Error))
Error();
else if (moveStep.Equals(MoveStep.End))
IsEnd = true;
return this;
}
private void Send()
{
bool rtn;
if (Common.FLEET_SEND)
rtn = Common.mir.Add_Mission_Fleet(_info.FleetID, _info.Authorization, _mission, out _id);
else
rtn = Common.mir.Add_Mission(_info.IP, _info.Authorization, _mission, out _id);
if (rtn)
{
Common.log.Debug("MoveJob To:" + _info.Name + ", " + _mission + " 发送成功");
moveStep.NextStep(MoveStep.Working);
_getTime = DateTime.Now;
}
else
{
Common.log.Warn("MoveJob To:" + _info.Name + ", " + _mission + " 发送失败");
}
}
private void Working()
{
TimeSpan span = DateTime.Now - _getTime;
if (span.TotalMilliseconds > 5000)
{
bool rtn;
string state;
if (Common.FLEET_SEND)
rtn = Common.mir.Get_MissionState_Fleet(_info.Authorization, _id, out state);
else
rtn = Common.mir.Get_MissionState(_info.IP, _info.Authorization, _id, out state);
if (rtn)
{
Common.log.Debug("MoveJob To:" + _info.Name + ", " + _mission + state.ToString());
if (state == MissionState.Done.ToString())
moveStep.NextStep(MoveStep.End);
else if (state == MissionState.Aborted.ToString())
moveStep.NextStep(MoveStep.Error);
else if (state == MissionState.Executing.ToString())
_getTime = DateTime.Now;
}
else
{
Common.log.Warn("MoveJob To:" + _info.Name + ", " + _mission + " 获取状态失败");
}
}
}
private void Error()
{
Common.log.Debug("MoveJob To:" + _info.Name + ", " + _mission + " 重新发送");
Common.mir.Clear_Error(_info.IP, _info.Authorization);
Common.mir.Del_Mission(_info.IP, _info.Authorization);
moveStep.NextStep(MoveStep.Send);
}
private enum MoveStep
{
Send,
Working,
Error,
End
}
private enum MissionState
{
Aborted,
Executing,
Done
}
}
}
using System;
using Model;
namespace BLL
{
public class SendNewJob : IJob
{
private AgvInfo _info;
private MoveJob move;
private string mission;
//private DateTime _getTime;
private JobStep<SendNewStep> sendNewStep;
public SendNewJob()
{
sendNewStep = new JobStep<SendNewStep>(SendNewStep.None);
Common.log.Debug("加载SendNewStep");
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (sendNewStep.Equals(SendNewStep.None))
{
if (_info.IsWorkspace())
sendNewStep.NextStep(SendNewStep.FindLine);
else
PassDoor();
}
else if (sendNewStep.Equals(SendNewStep.PassDoor))
{
move.Execute(_info);
if (move.IsEnd)
sendNewStep.NextStep(SendNewStep.FindLine);
}
else if (sendNewStep.Equals(SendNewStep.FindLine))
{
bool rtn = SteelManage.FindNewSteelWork(_info, out string place);
if (rtn)
{
if (place.ToLower() == "storage")
return new StorageJob();
else
FindLine(place);
}
else
{
sendNewStep.Msg = info.Name + "没有后续新钢板任务";
sendNewStep.NextStep(SendNewStep.End);
}
}
else if (sendNewStep.Equals(SendNewStep.MoveLine))
{
move.Execute(_info);
if (move.IsEnd)
sendNewStep.NextStep(SendNewStep.FindLine);
}
else if (sendNewStep.Equals(SendNewStep.End))
{
IJob job = SteelManage.GetSteelJob(info);
if (job == null)
return new StandbyJob();
else
return job;
}
return this;
}
private void FindLine(string place)
{
mission = Common.MISSION_MOVE_STEEL + place;
_info.Place = place;
move = new MoveJob(mission);
move.Execute(_info);
sendNewStep.NextStep(SendNewStep.MoveLine);
sendNewStep.Msg = _info.Name + "发送任务" + mission;
}
private void MoveLine()
{
}
private void PassDoor()
{
mission = Common.MISSION_PASS_DOOR_INTO + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
sendNewStep.NextStep(SendNewStep.PassDoor);
sendNewStep.Msg = _info.Name + "发送任务" + mission;
}
private enum SendNewStep
{
None,
End,
PassDoor,
FindLine,
MoveLine
}
}
}
using System;
using Model;
namespace BLL
{
public class StandbyJob : IJob
{
private AgvInfo _info;
private MoveJob move;
private string mission;
private DateTime _getTime;
private JobStep<StandbyStep> standbyStep;
public StandbyJob()
{
standbyStep = new JobStep<StandbyStep>(StandbyStep.None);
Common.log.Debug("加载StandbyJob");
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (standbyStep.Equals(StandbyStep.None))
{
if (_info.IsWorkspace())
MoveStandby();
else
PassDoor();
}
else if (standbyStep.Equals(StandbyStep.PassDoor))
{
move.Execute(_info);
if (move.IsEnd)
MoveStandby();
}
else if (standbyStep.Equals(StandbyStep.MoveStandby))
{
move.Execute(_info);
if (move.IsEnd)
{
standbyStep.NextStep(StandbyStep.End);
standbyStep.Msg = _info.Name + "到达待机位";
_getTime = DateTime.Now;
}
}
else if (standbyStep.Equals(StandbyStep.End))
{
if (_info.Battery <= _info.BatteryMin)
{
standbyStep.Msg = _info.Name + "电量小于" + _info.BatteryMin + ",执行充电任务";
return new ChargeJob();
}
else
{
TimeSpan span = DateTime.Now - _getTime;
if (span.TotalMinutes >= 2)
{
standbyStep.Msg = _info.Name + "在待机位停留超过2分钟,执行充电任务";
return new ChargeJob();
}
else
{
IJob job = SteelManage.GetSteelJob(info);
if (job != null) return job;
}
}
}
return this;
}
private void MoveStandby()
{
mission = Common.MISSION_STANDBY + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
standbyStep.NextStep(StandbyStep.MoveStandby);
standbyStep.Msg = _info.Name + "发送任务" + mission;
}
private void PassDoor()
{
mission = Common.MISSION_PASS_DOOR_INTO + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
standbyStep.NextStep(StandbyStep.PassDoor);
standbyStep.Msg = _info.Name + "发送任务" + mission;
}
private enum StandbyStep
{
None,
End,
PassDoor,
MoveStandby
}
}
}
using System;
using Model;
namespace BLL
{
public class StorageJob : IJob
{
private int delayGetSignal; //延迟获取信号
private int dockTime; //停靠次数
private AgvInfo _info;
private MoveJob move;
private string mission;
//private DateTime _getTime;
private JobStep<StorageStep> storageStep;
public StorageJob()
{
storageStep = new JobStep<StorageStep>(StorageStep.None);
Common.log.Debug("加载StorageStep");
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (storageStep.Equals(StorageStep.None))
{
if (_info.Is4DWorkshop())
MoveStorage();
else
PassDoor();
}
else if (storageStep.Equals(StorageStep.PassDoor))
{
move.Execute(_info);
if (move.IsEnd)
MoveStorage();
}
else if (storageStep.Equals(StorageStep.MoveStorage))
{
move.Execute(_info);
if (move.IsEnd)
{
storageStep.NextStep(StorageStep.GetSingle);
storageStep.Msg = info.Name + "已到位,等待离开信号";
delayGetSignal = 0;
dockTime = 0;
}
}
else if (storageStep.Equals(StorageStep.GetSingle))
{
if (Common.StorageDockFinish)
{
SteelManage.StorageWorkDel(info.Place);
storageStep.Msg = info.Name + "已到位,等待离开信号";
storageStep.NextStep(StorageStep.WaitStorageLeave);
}
else
{
if (delayGetSignal >= 3)
{
if (dockTime >= 3)
{
storageStep.Msg = info.Name + "对接仓库连续3次信号没有到位";
storageStep.NextStep(StorageStep.Error);
dockTime = 0;
//小车报警任务
}
else
{
dockTime++;
MoveStorage();
}
}
delayGetSignal++;
}
}
else if (storageStep.Equals(StorageStep.WaitStorageLeave))
{
if (SteelManage.FindStorageWorkLeave())
{
SteelManage.StorageWorkDelLeave();
storageStep.Msg = info.Name + "收到离开信号";
return new StandbyJob();
}
else if (SteelManage.FindNewSteelWork(info))
{
return new SendNewJob();
}
}
else if (storageStep.Equals(StorageStep.Error))
{
}
else if (storageStep.Equals(StorageStep.End))
{
}
return this;
}
private void MoveStorage()
{
mission = Common.MISSION_MOVE_STORAGE;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
storageStep.NextStep(StorageStep.MoveStorage);
storageStep.Msg = _info.Name + "发送任务" + mission;
}
private void PassDoor()
{
mission = Common.MISSION_PASS_DOOR_INTO + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
storageStep.NextStep(StorageStep.PassDoor);
storageStep.Msg = _info.Name + "发送任务" + mission;
}
private enum StorageStep
{
None,
End,
PassDoor,
MoveStorage,
WaitStorage,
GetSingle,
WaitStorageLeave,
Error
}
}
}
using System;
using Model;
namespace BLL
{
public class TakeOldJob : IJob
{
private AgvInfo _info;
private MoveJob move;
private string mission;
//private DateTime _getTime;
private JobStep<TakeOldStep> takeOldStep;
public TakeOldJob()
{
takeOldStep = new JobStep<TakeOldStep>(TakeOldStep.None);
Common.log.Debug("加载TakeOldJob");
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (takeOldStep.Equals(TakeOldStep.None))
{
info.OldSteel = 0;
takeOldStep.NextStep(TakeOldStep.FindLine);
}
else if (takeOldStep.Equals(TakeOldStep.FindLine))
{
if (info.OldSteel == 5)
{
takeOldStep.Msg = info.Name + "旧钢板已满";
takeOldStep.NextStep(TakeOldStep.GoWashPoint);
}
else
{
FindLine(info);
}
}
else if (takeOldStep.Equals(TakeOldStep.MoveLine))
{
move.Execute(_info);
if (move.IsEnd)
{
info.OldSteel++;
takeOldStep.NextStep(TakeOldStep.FindLine);
takeOldStep.Msg = _info.Name + "到达" + _info.Place;
}
}
else if (takeOldStep.Equals(TakeOldStep.GoWashPoint))
{
mission = Common.MISSION_MOVE_WASH + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
takeOldStep.NextStep(TakeOldStep.WaitWashPoint);
takeOldStep.Msg = _info.Name + "发送任务" + mission;
}
else if (takeOldStep.Equals(TakeOldStep.WaitWashPoint))
{
move.Execute(_info);
if (move.IsEnd)
{
takeOldStep.NextStep(TakeOldStep.End);
takeOldStep.Msg = _info.Name + "到达" + _info.Workshop + "清洗点";
}
}
else if (takeOldStep.Equals(TakeOldStep.End))
{
info.OldSteel = 0;
IJob job = SteelManage.GetSteelJob(info);
if (job == null)
return new StandbyJob();
else
return job;
}
return this;
}
private void FindLine(AgvInfo info)
{
bool rtn = SteelManage.FindOldSteelWork(info, out string place);
if (rtn)
{
info.Place = place;
mission = Common.MISSION_MOVE_STEEL + place;
move = new MoveJob(mission);
move.Execute(_info);
takeOldStep.NextStep(TakeOldStep.MoveLine);
takeOldStep.Msg = _info.Name + "发送任务" + mission;
}
else
{
takeOldStep.NextStep(TakeOldStep.GoWashPoint);
takeOldStep.Msg = info.Name + "没有后续旧钢板任务";
}
}
private enum TakeOldStep
{
None,
FindLine,
MoveLine,
GoWashPoint,
WaitWashPoint,
End
}
}
}
using System;
using Model;
namespace BLL
{
public class WashPointJob : IJob
{
private AgvInfo _info;
private MoveJob move;
private string mission;
private JobStep<WashPointStep> washPointStep;
public WashPointJob()
{
washPointStep = new JobStep<WashPointStep>(WashPointStep.None);
Common.log.Debug("加载WashPointJob");
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (washPointStep.Equals(WashPointStep.None))
{
if (_info.IsWorkspace())
MoveWash();
else
PassDoor();
}
else if (washPointStep.Equals(WashPointStep.PassDoor))
{
move.Execute(_info);
if (move.IsEnd)
MoveWash();
}
else if (washPointStep.Equals(WashPointStep.MoveWash))
{
move.Execute(_info);
if (move.IsEnd)
{
washPointStep.NextStep(WashPointStep.End);
washPointStep.Msg = _info.Name + "到达清洗点";
}
}
else if (washPointStep.Equals(WashPointStep.End))
{
IJob job = SteelManage.GetSteelJob(info);
if (job == null)
return new StandbyJob();
else
return job;
}
return this;
}
private void MoveWash()
{
mission = Common.MISSION_MOVE_WASH + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
washPointStep.NextStep(WashPointStep.MoveWash);
washPointStep.Msg = _info.Name + "发送任务" + mission;
}
private void PassDoor()
{
mission = Common.MISSION_PASS_DOOR_INTO + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
washPointStep.NextStep(WashPointStep.PassDoor);
washPointStep.Msg = _info.Name + "发送任务" + mission;
}
private enum WashPointStep
{
None,
End,
PassDoor,
MoveWash,
}
}
}
using System;
namespace BLL
{
public class JobStep<T>
{
private T _step;
private DateTime _time;
private string _msg;
public JobStep(T step)
{
_step = step;
_time = DateTime.Now;
_msg = "";
}
public bool Equals(T step)
{
return _step.Equals(step);
}
public bool TimeOut(int ms)
{
TimeSpan span = DateTime.Now - _time;
if (span.TotalMilliseconds > ms)
return true;
else
return false;
}
public void NextStep(T step)
{
_step = step;
_time = DateTime.Now;
_msg = "";
}
public string Msg
{
get
{
return _msg;
}
set
{
if (!string.IsNullOrEmpty(value) && !_msg.Equals(value))
{
_msg = value;
string s = string.Format("{0} (step={1})", _msg, _step.ToString());
Model.Common.log.Info(s);
Model.Common.log.UI_Display(s);
}
}
}
}
}
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("BLL")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("BLL")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("c547fedd-0b62-4ac3-96e7-c86dd38c670b")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Drawing;
using System.Diagnostics;
namespace BLL
{
public static class RunMode
{
[DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]
private static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
[DllImport("user32.dll ", SetLastError = true)]
private static extern void SwitchToThisWindow(IntPtr hWnd, bool fAltTab);
private const int SW_RESTORE = 9;
private static Form frm;
private static FormWindowState state;
private static bool exit = false;
private static ToolStripItem[] items;
private static NotifyIcon notify;
private static ContextMenuStrip notifyMenu;
private static void AddItem()
{
notifyMenu = new ContextMenuStrip();
items = new ToolStripItem[4];
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetEntryAssembly();
string text = assembly.GetName().Version.ToString();
text = frm.Text + (frm.Text.Contains(text) ? "" : " " + text);
items[0] = new ToolStripMenuItem(text) { Font = new Font("微软雅黑", 11f, FontStyle.Bold), Image = frm.Icon.ToBitmap() };
items[1] = new ToolStripSeparator();
items[2] = new ToolStripMenuItem("显示") { Font = new Font("微软雅黑", 11f) };
items[3] = new ToolStripMenuItem("退出") { Font = new Font("微软雅黑", 11f) };
notifyMenu.Items.AddRange(items);
items[2].Click += ItemShow_Click;
items[3].Click += ItemExit_Click;
notify = new NotifyIcon { Icon = frm.Icon, Visible = true, ContextMenuStrip = notifyMenu, Text = frm.Text };
notify.MouseDoubleClick += Notify_MouseDoubleClick;
}
private static void ItemShow_Click(object sender, EventArgs e)
{
frm.Show();
if (frm.WindowState == FormWindowState.Minimized)
frm.WindowState = state;
}
private static void ItemExit_Click(object sender, EventArgs e)
{
notify.Dispose();
exit = true;
frm.Close();
}
private static void Notify_MouseDoubleClick(object sender, MouseEventArgs e)
{
frm.Show();
if (frm.WindowState == FormWindowState.Minimized)
frm.WindowState = state;
}
public static void Init(Form frm)
{
RunMode.frm = frm;
state = frm.WindowState;
frm.StartPosition = FormStartPosition.CenterScreen;
AddItem();
}
public static void MenuLanguage(params string[] name)
{
if (items == null || name == null) return;
if (name.Length >= 1) items[2].Text = name[0];
if (name.Length >= 2) items[3].Text = name[1];
}
public static bool Closing(FormClosingEventArgs e)
{
if (!exit)
{
e.Cancel = true;
state = frm.WindowState;
frm.WindowState = FormWindowState.Minimized;
}
return exit;
}
public static bool IsRun()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(current.ProcessName);
foreach (Process process in processes)
{
if (process.Id == current.Id) continue; //自己
if (process.MainModule.FileName == current.MainModule.FileName)
{
//显示已打开的程序
ShowWindow(process.MainWindowHandle, SW_RESTORE);
SwitchToThisWindow(process.MainWindowHandle, true);
return true;
}
}
return false;
}
public static bool IsAdmin()
{
System.Security.Principal.WindowsIdentity current = System.Security.Principal.WindowsIdentity.GetCurrent();
System.Security.Principal.WindowsPrincipal windowsPrincipal = new System.Security.Principal.WindowsPrincipal(current);
return windowsPrincipal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
}
public static void AdminRun()
{
string path = Process.GetCurrentProcess().MainModule.FileName;
ProcessStartInfo startInfo = new ProcessStartInfo
{
UseShellExecute = true,
WorkingDirectory = Environment.CurrentDirectory,
FileName = path,
Verb = "runas"
};
Process.Start(startInfo);
}
/// <summary>
/// 复制文件
/// </summary>
/// <param name="srcPath">原路径</param>
/// <param name="dstPath">目标路径</param>
/// <param name="overwrite">是否覆盖</param>
/// <returns></returns>
//public static bool CopyFile(string srcPath, string dstPath, bool overwrite)
//{
// bool rtn = false;
// try
// {
// if (!srcPath.EndsWith("\\")) srcPath += "\\";
// if (!dstPath.EndsWith("\\")) dstPath += "\\";
// if (System.IO.Directory.Exists(srcPath))
// {
// //目录是否存在
// if (!System.IO.Directory.Exists(dstPath))
// System.IO.Directory.CreateDirectory(dstPath);
// //复制文件
// string[] files = System.IO.Directory.GetFiles(srcPath);
// foreach (string file in files)
// {
// System.IO.FileInfo fInfo = new System.IO.FileInfo(file);
// fInfo.CopyTo(dstPath + fInfo.Name, overwrite);
// }
// rtn = true;
// //复制文件夹
// string[] dirs = System.IO.Directory.GetDirectories(srcPath);
// foreach (string dir in dirs)
// {
// System.IO.DirectoryInfo dInfo = new System.IO.DirectoryInfo(dir);
// rtn = CopyFile(dir, dstPath + dInfo.Name, overwrite);
// if (!rtn) break;
// }
// }
// }
// catch (Exception ex)
// {
// rtn = false;
// }
// return rtn;
//}
}
}
\ No newline at end of file
此文件的差异被折叠, 点击展开。
using System.IO;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Runtime.Serialization;
namespace BLL
{
[ServiceContract(Name = "Services")]
internal interface IWeb
{
[OperationContract]
[WebGet(UriTemplate = "StealAgv/takeOld?Place={place}", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Result TakeOldGet(string place);
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "StealAgv/takeOld", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Result TakeOldPost(Stream info);
[OperationContract]
[WebGet(UriTemplate = "StealAgv/sendNew?From={from}&Place={place}", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Result SendNewGet(string from, string place);
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "StealAgv/sendNew", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Result SendNewPost(Stream info);
[OperationContract]
[WebGet(UriTemplate = "StealAgv/storage?Place={place}", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Result StorageGet(string place);
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "StealAgv/storage", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Result StoragePost(Stream info);
}
[DataContract]
internal class Result
{
[DataMember]
public int Code { get; set; }
[DataMember]
public string Msg { get; set; }
public Result()
{
Code = 0;
Msg = "OK";
}
}
}
\ No newline at end of file
using System;
using System.ServiceModel.Web;
namespace BLL
{
public static class WebService
{
private static WebServiceHost _serviceHost;
public static bool IsOpen { private set; get; }
public static void Open(string url)
{
try
{
WebWork service = new WebWork();
_serviceHost = new WebServiceHost(service, new Uri(url));
_serviceHost.Open();
Model.Common.log.Info("Web服务已开启");
IsOpen = true;
}
catch (Exception ex)
{
Model.Common.log.Error("WebService Open", ex);
IsOpen = false;
}
}
public static void Close()
{
if (_serviceHost != null)
_serviceHost.Close();
Model.Common.log.Info("Web服务已关闭");
}
}
}
\ No newline at end of file
using System;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.IO;
using Model;
namespace BLL
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single, IncludeExceptionDetailInFaults = true)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
internal class WebWork : IWeb
{
public WebWork()
{
}
public Result TakeOldGet(string place)
{
Common.log.Info("takeOld[GET] place=" + place);
return TakeOld(place);
}
public Result TakeOldPost(Stream info)
{
StreamReader sr = new StreamReader(info);
string s = sr.ReadToEnd();
Common.log.Info("takeOld[POST] " + s);
s = s.ToLower().Replace("place=", "");
return TakeOld(s);
}
public Result SendNewGet(string from, string place)
{
Common.log.Info("sendNew[GET] from=" + from + " place=" + place);
return SendNew(from, place);
}
public Result SendNewPost(Stream info)
{
StreamReader sr = new StreamReader(info);
string s = sr.ReadToEnd();
Common.log.Info("sendNew[POST] " + s);
s = s.ToLower();
string[] arr = s.Split('&');
arr[0] = arr[0].Replace("from=", "");
arr[1] = arr[1].Replace("place=", "");
return SendNew(arr[0], arr[1]);
}
public Result StorageGet(string place)
{
Common.log.Info("storage[GET] place=" + place);
return Storage(place);
}
public Result StoragePost(Stream info)
{
StreamReader sr = new StreamReader(info);
string s = sr.ReadToEnd();
Common.log.Info("storage[POST] " + s);
s = s.ToLower().Replace("place=", "");
return Storage(s);
}
private Result TakeOld(string place)
{
Result res = new Result();
try
{
place = place.ToUpper();
bool rtn = FindLine(place);
if (rtn)
{
SteelManage.OldSteelWorkAdd(place);
Common.log.Info("TakeOld(" + place + ") OK");
}
else
{
res = new Result { Code = -2, Msg = "Not Find" };
Common.log.Info("没有找到" + place);
}
}
catch (Exception ex)
{
res = new Result { Code = -100, Msg = ex.Message };
Common.log.Error("TakeOld", ex);
}
return res;
}
private Result SendNew(string from, string place)
{
Result res = new Result();
try
{
from = from.ToUpper();
place = place.ToUpper();
string[] arr = place.Split(',');
bool rtn = FindLine(from, arr);
if (rtn)
{
SteelManage.NewSteelWorkAdd(from, arr);
Common.log.Info("SendNew(" + place + ") OK");
}
else
{
res = new Result { Code = -2, Msg = "Not Find" };
Common.log.Info("没有找到" + place);
}
}
catch (Exception ex)
{
res = new Result { Code = -100, Msg = ex.Message };
Common.log.Error("SendNew", ex);
}
return res;
}
private Result Storage(string place)
{
Result res = new Result();
try
{
place = place.ToUpper();
if (place == Common.STORAGE_ENTER_4C.ToUpper())
{
res.Msg = "OK,4C";
SteelManage.StorageWorkAdd(place);
}
else if (place == Common.STORAGE_ENTER_4D.ToUpper())
{
res.Msg = "OK,4D";
SteelManage.StorageWorkAdd(place);
}
else if (place == Common.STORAGE_LEAVE.ToUpper())
{
SteelManage.StorageWorkAdd(place);
}
else if (place == Common.STORAGE_IO_ON.ToUpper())
{
Common.StorageDockFinish = true;
UpdateStorageIO();
res.Msg = "OK," + FindAgv();
}
else if (place == Common.STORAGE_IO_OFF.ToUpper())
{
Common.StorageDockFinish = false;
UpdateStorageIO();
res.Msg = "OK," + FindAgv();
}
else
{
res = new Result { Code = -2, Msg = "Not Find" };
Common.log.Info("没有找到" + place);
}
}
catch (Exception ex)
{
res = new Result { Code = -100, Msg = ex.Message };
Common.log.Error("Storage", ex);
}
return res;
}
private bool FindLine(string place)
{
bool rtn = false;
for (int i = 0; i < Common.agvLines.Count; i++)
{
rtn = Common.agvLines[i].FindLine(place);
if (rtn) return true;
}
return rtn;
}
private bool FindLine(string from, string[] place)
{
bool rtn = false;
for (int i = 0; i < Common.agvLines.Count; i++)
{
rtn = Common.agvLines[i].FindLine(from);
if (rtn)
{
for (int j = 0; j < place.Length; j++)
{
rtn = Common.agvLines[i].FindLine(place[j]);
if (!rtn) return rtn;
}
return true;
}
}
return false;
}
private string FindAgv()
{
string val = "";
for (int i = 0; i < Common.agvInfos.Count; i++)
{
bool rtn = Common.mir.Get_Register(Common.agvInfos[i].IP, Common.agvInfos[i].Authorization, 19, out int value);
if (rtn)
{
if (value == 1)
{
val = Common.agvInfos[i].Workshop;
break;
}
}
}
return val;
}
private void UpdateStorageIO()
{
if (Common.lblStorageIO == null) return;
int.TryParse(Common.lblStorageIO.Tag.ToString(), out int n);
if (Common.StorageDockAlway) Common.StorageDockFinish = true;
string s = Common.StorageDockFinish ? "ON" : "OFF";
Common.lblStorageIO.Text = string.Format("仓库IO信号 {0} ({1})", s, n);
Common.lblStorageIO.BackColor = Common.StorageDockFinish ? System.Drawing.Color.Lime : System.Drawing.Color.Red;
if (n == 9) //没有意义,仅仅是为了能看到信号在变化
n = 0;
else
n++;
Common.lblStorageIO.Tag = n.ToString();
}
}
}
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件的差异太大,无法显示。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<logger name="AGVControl_Steel">
<level value="Debug"/>
<appender-ref ref="AGVControl_Steel"/>
</logger>
<logger name="MiR_API">
<level value="Debug"/>
<appender-ref ref="api"/>
</logger>
<appender name="AGVControl_Steel" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\AGVControl_Steel.log" />
<param name="Encoding" value="UTF-8"/>
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[%d][%t][%c:%L]%-5p %m%n" />
</layout>
</appender>
<appender name="api" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\MiR_API.log" />
<param name="Encoding" value="UTF-8"/>
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[%d][%t][%c:%L]%-5p %m%n" />
</layout>
</appender>
</log4net>
</configuration>
\ No newline at end of file
此文件类型无法预览
此文件的差异太大,无法显示。
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")]
7064026118c881cf53f37963fb3a012bf156bc71
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\BLL.dll
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\BLL.pdb
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\Model.dll
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\log4net.dll
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\RestSharp.dll
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\Model.pdb
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\log4net.xml
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\RestSharp.xml
D:\Neotel_Beta\AGVControl_Steel\BLL\obj\Debug\BLL.csprojAssemblyReference.cache
D:\Neotel_Beta\AGVControl_Steel\BLL\obj\Debug\BLL.csproj.CoreCompileInputs.cache
D:\Neotel_Beta\AGVControl_Steel\BLL\obj\Debug\BLL.csproj.CopyComplete
D:\Neotel_Beta\AGVControl_Steel\BLL\obj\Debug\BLL.dll
D:\Neotel_Beta\AGVControl_Steel\BLL\obj\Debug\BLL.pdb
D:\Neotel_Beta\AGVControl_Steel\BLL\bin\Debug\log4net.config
此文件类型无法预览
此文件类型无法预览
//using System;
//using System.Text;
//namespace DAL
//{
// public class CSV
// {
// private readonly string PATH;
// private string[][] content;
// public CSV(string path)
// {
// try
// {
// PATH = path;
// if (!System.IO.File.Exists(path))
// System.IO.File.WriteAllText(path, "", Encoding.UTF8);
// string[] lines = System.IO.File.ReadAllLines(path, Encoding.UTF8);
// content = new string[lines.Length][];
// for (int i = 0; i < lines.Length; i++)
// content[i] = lines[i].Split(',');
// }
// catch (Exception ex)
// {
// content = new string[0][];
// Common.log.Error("CSV.Open", ex);
// }
// }
// public string[][] Read()
// {
// return content;
// }
// public string[] Read(int row)
// {
// if (row >= content.Length)
// return null;
// else
// return content[row];
// }
// public void Save()
// {
// try
// {
// string[] lines = new string[content.Length];
// for (int i = 0; i < content.Length; i++)
// lines[i] = string.Join(",", content[i]);
// System.IO.File.WriteAllLines(PATH, lines);
// Common.log.Debug("文件已保存," + PATH);
// }
// catch (Exception ex)
// {
// Common.log.Error("CSV.Save", ex);
// }
// }
// }
//}
<?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>{82C814D9-4407-4B98-AACE-82CAF714BDAD}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>DAL</RootNamespace>
<AssemblyName>DAL</AssemblyName>
<TargetFrameworkVersion>v4.6</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>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</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="CSV.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("DAL")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DAL")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("82c814d9-4407-4b98-aace-82caf714bdad")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
此文件类型无法预览
此文件类型无法预览
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")]
b7104e81191ba955eefc04653b5fc2db93ad05e7
D:\Neotel_Beta\AGVControl_Steel\DAL\bin\Debug\DAL.dll
D:\Neotel_Beta\AGVControl_Steel\DAL\bin\Debug\DAL.pdb
D:\Neotel_Beta\AGVControl_Steel\DAL\obj\Debug\DAL.csproj.CoreCompileInputs.cache
D:\Neotel_Beta\AGVControl_Steel\DAL\obj\Debug\DAL.dll
D:\Neotel_Beta\AGVControl_Steel\DAL\obj\Debug\DAL.pdb
此文件类型无法预览
此文件类型无法预览
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Model
{
public class AgvInfo
{
/// <summary>
/// 小车名称
/// </summary>
public string Name { set; get; } = "";
/// <summary>
/// 在Fleet中的ID
/// </summary>
public string FleetID { set; get; } = "";
/// <summary>
/// 小车IP地址
/// </summary>
public string IP { set; get; } = "";
/// <summary>
/// 授权码
/// </summary>
public string Authorization { set; get; } = "";
/// <summary>
/// 工作车间
/// </summary>
public string Workshop { set; get; } = "";
/// <summary>
/// 是否自动使用
/// </summary>
public bool IsAuto { set; get; } = false;
/// <summary>
/// 是否在线
/// </summary>
public bool IsOnline { set; get; } = false;
/// <summary>
/// 电量百分比
/// </summary>
public int Battery { set; get; } = 0;
/// <summary>
/// AGV最大充电电量
/// </summary>
public int BatteryMax { set; get; } = 0;
/// <summary>
/// AGV最低电量,小于此值必须充电
/// </summary>
public int BatteryMin { set; get; } = 0;
/// <summary>
/// 状态ID号
/// </summary>
public int StateID { set; get; } = -1;
/// <summary>
/// 状态文本
/// </summary>
public string StateText { set; get; } = "";
/// <summary>
/// 任务文本
/// </summary>
public string MissionText { set; get; } = "";
/// <summary>
/// 小车坐标位置
/// </summary>
public System.Drawing.PointF Position { set; get; }
/// <summary>
/// 是否正在被调用
/// </summary>
public bool IsCall { set; get; } = false;
/// <summary>
/// 当前的工作
/// </summary>
public IJob CurrentJob { set; get; } = null;
public string Place { set; get; } = "";
public int OldSteel { set; get; } = 0;
public int NewSteel { set; get; } = 0;
public AgvInfo(string fleetID, string name, string ip, string workshop, string authorization)
{
Name = name;
FleetID = fleetID;
IP = ip;
Workshop = workshop;
Authorization = authorization;
}
public string[] ToGridRow()
{
string[] arr = new string[] { Name, Place, StateText, Battery.ToString(), IsOnline.ToString(), IsAuto.ToString(), "清除" };
return arr;
}
public string ToMissionState()
{
string s = Name + " [" + IP + "]\r\n\r\n" + MissionText;
return s;
}
/// <summary>
/// 在自己的工作区域
/// </summary>
/// <returns></returns>
public bool IsWorkspace()
{
if (Position.Y < 55)
{
if (Workshop.IndexOf('D') > 0)
return true;
else if (Workshop.IndexOf('C') > 0)
return false;
}
else if (Position.Y > 62)
{
if (Workshop.IndexOf('D') > 0)
return false;
else if (Workshop.IndexOf('C') > 0)
return true;
}
return false;
}
public bool Is4DWorkshop()
{
if (Position.Y < 55)
return true;
else if (Position.Y > 62)
return false;
else
return false;
}
}
}
using System;
using System.Collections.Generic;
namespace Model
{
public static class Common
{
public static MiR_API mir;
public static Log log;
public static List<AgvInfo> agvInfos;
public static Dictionary<string, string> agvMissions;
public static List<WorkshopLine> agvLines;
public static System.Configuration.Configuration appConfig;
public static System.Windows.Forms.TextBox txtLog;
public static System.Windows.Forms.ListBox lstOldSteel;
public static System.Windows.Forms.ListBox lstNewSteel;
public static System.Windows.Forms.ListBox lstStorage;
public static System.Windows.Forms.Label lblStorageIO;
//public static string[] PLACE_NAME;
public static bool FLEET_SEND;
public static bool StorageDockFinish = false; //停靠完成
public static bool StorageDockAlway = false; //指定停靠状态,一直不改变
public const string STORAGE_ENTER_4C = "4C_enter";
public const string STORAGE_ENTER_4D = "4D_enter";
public const string STORAGE_LEAVE = "leave";
public const string STORAGE_IO_ON = "di_on";
public const string STORAGE_IO_OFF = "di_off";
public const string MISSION_TAKE_OFF_SHELF = "Placeqisdashelf";
public const string MISSION_TAKE_ON_SHELF = "Pickupqisdashelf";
public const string MISSION_PASS_DOOR_INTO = "PassDoorInto";
public const string MISSION_CHARGE = "AutoCharge";
public const string MISSION_STANDBY = "MoveStandby";
public const string MISSION_MOVE_WASH = "MoveWash";
public const string MISSION_MOVE_STORAGE = "MoveSteelstorage";
public const string MISSION_MOVE_STEEL = "MoveSteel";
public static readonly string PATH_AGV_NAME = Environment.CurrentDirectory + "\\Config\\AgvName.csv";
public static readonly string PATH_AGV_MISSION = Environment.CurrentDirectory + "\\Config\\AgvMission.csv";
public static readonly string PATH_AGV_LINE = Environment.CurrentDirectory + "\\Config\\AgvLine.txt";
public static readonly string PATH_NEW_STEEL_WORK = Environment.CurrentDirectory + "\\Config\\NewSteelWork.txt";
public static readonly string PATH_OLD_STEEL_WORK = Environment.CurrentDirectory + "\\Config\\OldSteelWork.txt";
public static readonly string PATH_STORAGE_WORK = Environment.CurrentDirectory + "\\Config\\StorageWork.txt";
}
}
using System;
namespace Model
{
public interface IJob
{
public bool IsEnd { get; }
public IJob Execute(AgvInfo info);
}
}
using System;
namespace Model
{
public class Log
{
private readonly log4net.ILog LOG;
public Log(string name)
{
LOG = log4net.LogManager.GetLogger(name);
}
public System.Windows.Forms.TextBox LogBox { set; get; }
public void Info(string s)
{
LOG.Info(s);
}
public void Debug(string s)
{
LOG.Debug(s);
}
public void Warn(string s)
{
LOG.Warn(s);
}
public void Error(string s, Exception ex)
{
LOG.Error(s, ex);
}
public void UI_Display(string s)
{
if (LogBox == null) return;
string time = string.Format("[{0:HH:mm:ss}] ", DateTime.Now);
LogBox.AppendText(time + s + "\r\n");
//LogBox.SelectionStart = LogBox.Text.Length;
LogBox.ScrollToCaret();
}
}
}
此文件的差异被折叠, 点击展开。
<?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>{AC764294-C5E4-441F-ACC8-F912366CA1BC}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Model</RootNamespace>
<AssemblyName>Model</AssemblyName>
<TargetFrameworkVersion>v4.6</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>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
<ItemGroup>
<Reference Include="log4net, Version=2.0.11.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.11\lib\net45\log4net.dll</HintPath>
</Reference>
<Reference Include="RestSharp, Version=106.11.7.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL">
<HintPath>..\packages\RestSharp.106.11.7\lib\net452\RestSharp.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Windows.Forms" />
<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="AgvInfo.cs" />
<Compile Include="Common.cs" />
<Compile Include="IJob.cs" />
<Compile Include="Log.cs" />
<Compile Include="MiR_API.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SteelWork.cs" />
<Compile Include="WorkshopLine.cs" />
</ItemGroup>
<ItemGroup>
<None Include="log4net.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("Common")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Common")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("ac764294-c5e4-441f-acc8-f912366ca1bc")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Model
{
public class SteelWork
{
public string From { set; get; }
public string Place { set; get; }
public DateTime DateTime { set; get; }
public SteelWork()
{
DateTime = DateTime.Now;
}
}
}
using System;
namespace Model
{
public class WorkshopLine
{
public string Workshop;
public string[] Lines;
public bool FindLine(string place)
{
int idx = Array.FindIndex(Lines, s => s.ToUpper() == place.ToUpper());
if (idx == -1)
return false;
else
return true;
}
}
}
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件的差异太大,无法显示。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<logger name="AGVControl_Steel">
<level value="Debug"/>
<appender-ref ref="AGVControl_Steel"/>
</logger>
<logger name="MiR_API">
<level value="Debug"/>
<appender-ref ref="api"/>
</logger>
<appender name="AGVControl_Steel" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\AGVControl_Steel.log" />
<param name="Encoding" value="UTF-8"/>
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[%d][%t][%c:%L]%-5p %m%n" />
</layout>
</appender>
<appender name="api" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\MiR_API.log" />
<param name="Encoding" value="UTF-8"/>
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[%d][%t][%c:%L]%-5p %m%n" />
</layout>
</appender>
</log4net>
</configuration>
\ No newline at end of file
此文件类型无法预览
此文件的差异太大,无法显示。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<logger name="AGVControl_Steel">
<level value="Debug"/>
<appender-ref ref="AGVControl_Steel"/>
</logger>
<logger name="MiR_API">
<level value="Debug"/>
<appender-ref ref="api"/>
</logger>
<appender name="AGVControl_Steel" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\AGVControl_Steel.log" />
<param name="Encoding" value="UTF-8"/>
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[%d][%t][%c:%L]%-5p %m%n" />
</layout>
</appender>
<appender name="api" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log\\MiR_API.log" />
<param name="Encoding" value="UTF-8"/>
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd" />
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="10240" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="[%d][%t][%c:%L]%-5p %m%n" />
</layout>
</appender>
</log4net>
</configuration>
\ No newline at end of file
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")]
e1d2cd34bcbfa49d1a1bef981de43c0fe5f2ed09
D:\Neotel_Beta\AGVControl_Steel\Common\bin\Debug\Common.dll
D:\Neotel_Beta\AGVControl_Steel\Common\bin\Debug\Common.pdb
D:\Neotel_Beta\AGVControl_Steel\Common\bin\Debug\log4net.dll
D:\Neotel_Beta\AGVControl_Steel\Common\bin\Debug\log4net.xml
D:\Neotel_Beta\AGVControl_Steel\Common\obj\Debug\Common.csprojAssemblyReference.cache
D:\Neotel_Beta\AGVControl_Steel\Common\obj\Debug\Common.csproj.CoreCompileInputs.cache
D:\Neotel_Beta\AGVControl_Steel\Common\obj\Debug\Common.csproj.CopyComplete
D:\Neotel_Beta\AGVControl_Steel\Common\obj\Debug\Common.dll
D:\Neotel_Beta\AGVControl_Steel\Common\obj\Debug\Common.pdb
d480f537fc8054565c9d1586e5e41d9a7a213025
D:\Neotel_Beta\AGVControl_Steel\Model\bin\Debug\Model.dll
D:\Neotel_Beta\AGVControl_Steel\Model\bin\Debug\Model.pdb
D:\Neotel_Beta\AGVControl_Steel\Model\bin\Debug\log4net.dll
D:\Neotel_Beta\AGVControl_Steel\Model\bin\Debug\RestSharp.dll
D:\Neotel_Beta\AGVControl_Steel\Model\bin\Debug\log4net.xml
D:\Neotel_Beta\AGVControl_Steel\Model\bin\Debug\RestSharp.xml
D:\Neotel_Beta\AGVControl_Steel\Model\obj\Debug\Model.csproj.CoreCompileInputs.cache
D:\Neotel_Beta\AGVControl_Steel\Model\obj\Debug\Model.csproj.CopyComplete
D:\Neotel_Beta\AGVControl_Steel\Model\obj\Debug\Model.dll
D:\Neotel_Beta\AGVControl_Steel\Model\obj\Debug\Model.pdb
D:\Neotel_Beta\AGVControl_Steel\Model\bin\Debug\log4net.config
D:\Neotel_Beta\AGVControl_Steel\Model\obj\Debug\Model.csprojAssemblyReference.cache
此文件类型无法预览
此文件类型无法预览
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="log4net" version="2.0.11" targetFramework="net46" />
<package id="RestSharp" version="106.11.7" targetFramework="net46" />
</packages>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<appSettings>
<add key="FLEET_IP" value="10.85.199.3"/>
<add key="FLEET_Send" value="true"/>
<add key="WebService" value="http://10.85.196.40:8089/"/>
<!--<add key="WebService" value="http://127.0.0.1:8089/"/>-->
<add key="AGV_BATTERY_MAX" value="100"/>
<add key="AGV_BATTERY_MIN" value="40"/>
<add key="11号_4C" value="false"/>
<add key="13号_4D" value="false"/>
</appSettings>
</configuration>
\ No newline at end of file
此文件的差异被折叠, 点击展开。
此文件的差异被折叠, 点击展开。
此文件的差异被折叠, 点击展开。
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Model;
namespace AGVControl_Steel
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += Application_ThreadException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (!RunMode()) return;
Common.log = new Log("AGVControl_Steel");
Common.log.Info("=====程序开始=====");
ReadConfig();
Application.Run(new FrmMain());
Common.log.Info("=====程序结束=====\r\n");
}
private static bool RunMode()
{
if (BLL.RunMode.IsRun()) return false;
bool rtn = BLL.RunMode.IsAdmin();
if (!rtn) BLL.RunMode.AdminRun();
return rtn;
}
private static void ReadConfig()
{
Common.appConfig = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None);
Common.FLEET_SEND = Convert.ToBoolean(Common.appConfig.AppSettings.Settings["FLEET_Send"].Value);
Common.mir = new MiR_API { FleetIP = Common.appConfig.AppSettings.Settings["FLEET_IP"].Value };
ReadAgvInfo();
ReadAgvMission();
ReadAgvLine();
}
private static void ReadAgvInfo()
{
Common.agvInfos = new List<AgvInfo>();
string[] lines = System.IO.File.ReadAllLines(Common.PATH_AGV_NAME, System.Text.Encoding.UTF8);
for (int i = 0; i < lines.Length; i++)
{
string[] str = lines[i].Split(',');
if (str.Length != 5) continue;
string isUse = "false";
if (Common.appConfig.AppSettings.Settings[str[1]] == null)
{
Common.appConfig.AppSettings.Settings.Add(str[1], "false");
Common.appConfig.Save();
System.Configuration.ConfigurationManager.RefreshSection("appSettings");
}
else
{
isUse = Common.appConfig.AppSettings.Settings[str[1]].Value;
}
AgvInfo info = new AgvInfo(str[0], str[1], str[2], str[3], str[4])
{
IsAuto = Convert.ToBoolean(isUse),
BatteryMax = Convert.ToInt32(Common.appConfig.AppSettings.Settings["AGV_BATTERY_MAX"].Value),
BatteryMin = Convert.ToInt32(Common.appConfig.AppSettings.Settings["AGV_BATTERY_MIN"].Value)
};
Common.agvInfos.Add(info);
}
Common.log.Info("读取配置文件 " + Common.PATH_AGV_NAME);
}
private static void ReadAgvMission()
{
Common.agvMissions = new Dictionary<string, string>();
string[] lines = System.IO.File.ReadAllLines(Common.PATH_AGV_MISSION, System.Text.Encoding.UTF8);
for (int i = 0; i < lines.Length; i++)
{
string[] str = lines[i].Split(',');
if (str.Length != 2) continue;
Common.agvMissions.Add(str[0], str[1]);
}
Common.mir.MissionList = Common.agvMissions;
Common.log.Info("读取配置文件 " + Common.PATH_AGV_MISSION);
}
private static void ReadAgvLine()
{
Common.agvLines = new List<WorkshopLine>();
string[] lines = System.IO.File.ReadAllLines(Common.PATH_AGV_LINE, System.Text.Encoding.UTF8);
for (int i = 0; i < lines.Length; i++)
{
string[] str = lines[i].Split(',');
string[] temp = new string[str.Length - 1];
Array.Copy(str, 1, temp, 0, temp.Length);
WorkshopLine wl = new WorkshopLine
{
Workshop = str[0],
Lines = temp
};
Common.agvLines.Add(wl);
}
Common.log.Info("读取配置文件 " + Common.PATH_AGV_LINE);
}
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Common.log.Error("CurrentDomain_UnhandledException", (Exception)e.ExceptionObject);
}
private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
Common.log.Error("Application_ThreadException", e.Exception);
}
}
}
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("AGVControl_Steel")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AGVControl_Steel")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("6f08f614-2767-456a-80b8-a8fdb19f3988")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本: 4.0.30319.42000
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace AGVControl_Steel.Properties
{
/// <summary>
/// 强类型资源类,用于查找本地化字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// 返回此类使用的缓存 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AGVControl_Steel.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 覆盖当前线程的 CurrentUICulture 属性
/// 使用此强类型的资源类的资源查找。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
\ No newline at end of file
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AGVControl_Steel.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
<?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>{6F08F614-2767-456A-80B8-A8FDB19F3988}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>AGVControl_Steel</RootNamespace>
<AssemblyName>AGVControl_Steel</AssemblyName>
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<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' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>图标.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.VisualBasic" />
<Reference Include="System" />
<Reference Include="System.Configuration" />
<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.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="FrmMain.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FrmMain.Designer.cs">
<DependentUpon>FrmMain.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="FrmMain.resx">
<DependentUpon>FrmMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="图标.ico" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\BLL\BLL.csproj">
<Project>{c547fedd-0b62-4ac3-96e7-c86dd38c670b}</Project>
<Name>BLL</Name>
</ProjectReference>
<ProjectReference Include="..\Model\Model.csproj">
<Project>{ac764294-c5e4-441f-acc8-f912366ca1bc}</Project>
<Name>Model</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
此文件类型无法预览
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<appSettings>
<add key="FLEET_IP" value="10.85.199.3"/>
<add key="FLEET_Send" value="true"/>
<add key="WebService" value="http://10.85.196.40:8089/"/>
<!--<add key="WebService" value="http://127.0.0.1:8089/"/>-->
<add key="AGV_BATTERY_MAX" value="100"/>
<add key="AGV_BATTERY_MIN" value="40"/>
<add key="11号_4C" value="false"/>
<add key="13号_4D" value="false"/>
</appSettings>
</configuration>
\ No newline at end of file
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
4D,D1,D2,D3,D4,D5,D6,D8,D9,D10,D11,D12,D14,D15,D16,4Dwash,storage
4C,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,4Cwash
\ No newline at end of file
MoveSteelC1,77a02463-f387-11ea-8452-94c691a7387d
MoveSteelC2,b2dc4ed9-f387-11ea-8452-94c691a7387d
MoveSteelC3,c7f598c1-f387-11ea-8452-94c691a7387d
MoveSteelC4,ddfd5992-f387-11ea-8452-94c691a7387d
MoveSteelC5,f0a4498e-f387-11ea-8452-94c691a7387d
MoveSteelC6,037a7f67-f388-11ea-8452-94c691a7387d
MoveSteelC7,1b361828-f388-11ea-8452-94c691a7387d
MoveSteelC8,2aec8e6c-f388-11ea-8452-94c691a7387d
MoveSteelC9,3cad8c7d-f388-11ea-8452-94c691a7387d
MoveSteelC10,4cc3d656-f388-11ea-8452-94c691a7387d
MoveSteelD1,e9ed94bf-f2ac-11ea-8452-94c691a7387d
MoveSteelD2,04e5690f-f2ad-11ea-8452-94c691a7387d
MoveSteelD3,1d3f9b5a-f2ad-11ea-8452-94c691a7387d
MoveSteelD4,55bf620d-f2ad-11ea-8452-94c691a7387d
MoveSteelD5,6c1fe859-f2ad-11ea-8452-94c691a7387d
MoveSteelD6,8498ea0b-f2ad-11ea-8452-94c691a7387d
MoveSteelD8,ba683168-f2ad-11ea-8452-94c691a7387d
MoveSteelD9,de7f8051-f2ad-11ea-8452-94c691a7387d
MoveSteelD10,f81944b7-f2ad-11ea-8452-94c691a7387d
MoveSteelD11,0a0b0df1-f2ae-11ea-8452-94c691a7387d
MoveSteelD12,201e368d-f2ae-11ea-8452-94c691a7387d
MoveSteelD14,445106a1-f2ae-11ea-8452-94c691a7387d
MoveSteelD15,002b3e45-f105-11ea-a03e-94c691a7387d
MoveSteelD16,15a766ac-f2a2-11ea-8452-94c691a7387d
MoveWash4C,691e75ab-f2b0-11ea-8452-94c691a7387d
MoveWash4D,e52ae766-f2ab-11ea-8452-94c691a7387d
MoveStandby4C,2dd387ce-f2b0-11ea-8452-94c691a7387d
MoveStandby4D,21ca7ffe-f29e-11ea-8452-94c691a7387d
AutoCharge4C,8ed7b459-f2b0-11ea-8452-94c691a7387d
AutoCharge4D,2f0a31b1-f2ab-11ea-8452-94c691a7387d
PassDoorInto4D,d67f31c8-ca7e-11ea-9a66-94c691a7387d
PassDoorInto4C,fd6e26ac-c1bf-11ea-9a66-94c691a7387d
MoveSteelstorage,418c9064-f2ac-11ea-8452-94c691a7387d
Pickupqisdashelf,f2acdcae-e524-11ea-b003-0001299a3f0e
Placeqisdashelf,4001120d-e525-11ea-b003-0001299a3f0e
\ No newline at end of file
32,11号_4C,10.85.199.82,4C,Basic ZGlzdHJpYnV0b3I6NjJmMmYwZjFlZmYxMGQzMTUyYzk1ZjZmMDU5NjU3NmU0ODJiYjhlNDQ4MDY0MzNmNGNmOTI5NzkyODM0YjAxNA==
25,13号_4D,10.85.199.84,4D,Basic ZGlzdHJpYnV0b3I6NjJmMmYwZjFlZmYxMGQzMTUyYzk1ZjZmMDU5NjU3NmU0ODJiYjhlNDQ4MDY0MzNmNGNmOTI5NzkyODM0YjAxNA==
\ No newline at end of file

\ No newline at end of file

\ No newline at end of file

\ No newline at end of file
[2020-10-21 10:04:07,085][1][AGVControl_Steel:18]INFO =====程序开始=====
[2020-10-21 10:04:07,149][1][AGVControl_Steel:18]INFO 读取配置文件 D:\Neotel\AGVControl_Steel\UI\bin\Debug\Config\AgvName.csv
[2020-10-21 10:04:07,151][1][AGVControl_Steel:18]INFO 读取配置文件 D:\Neotel\AGVControl_Steel\UI\bin\Debug\Config\AgvMission.csv
[2020-10-21 10:04:07,153][1][AGVControl_Steel:18]INFO 读取配置文件 D:\Neotel\AGVControl_Steel\UI\bin\Debug\Config\AgvLine.txt
[2020-10-21 10:04:07,266][1][AGVControl_Steel:18]INFO 加载回收钢板任务
[2020-10-21 10:04:07,281][1][AGVControl_Steel:18]INFO 加载送新钢板任务
[2020-10-21 10:04:07,282][1][AGVControl_Steel:18]INFO 加载仓库钢板任务
[2020-10-21 10:04:08,511][1][AGVControl_Steel:18]INFO Web服务已开启
[2020-10-21 10:04:10,134][8][AGVControl_Steel:23]DEBUG 11号_4C[10.85.199.82] 脱机
[2020-10-21 10:04:12,132][8][AGVControl_Steel:23]DEBUG 13号_4D[10.85.199.84] 脱机
[2020-10-21 10:04:12,132][9][AGVControl_Steel:23]DEBUG 11号_4C[10.85.199.82] 脱机
[2020-10-21 10:04:14,141][9][AGVControl_Steel:23]DEBUG 13号_4D[10.85.199.84] 脱机
[2020-10-21 10:04:14,142][8][AGVControl_Steel:23]DEBUG 11号_4C[10.85.199.82] 脱机
[2020-10-21 10:04:16,018][1][AGVControl_Steel:18]INFO Web服务已关闭
[2020-10-21 10:04:16,041][1][AGVControl_Steel:18]INFO =====程序结束=====
此文件的差异太大,无法显示。
此文件的差异太大,无法显示。
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件的差异太大,无法显示。
此文件类型无法预览
此文件的差异太大,无法显示。
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件的差异被折叠, 点击展开。
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!