Commit dd30264f 张东亮

0825

1 个父辈 2dfec1d7
正在显示 58 个修改的文件 包含 1668 行增加389 行删除
......@@ -72,23 +72,29 @@
<Compile Include="bean\Agv_Info.cs" />
<Compile Include="bean\Job.cs" />
<Compile Include="bean\JobStep.cs" />
<Compile Include="bean\job\SendFullShelfJob.cs" />
<Compile Include="bean\job\TakeEmptyShelfJob.cs" />
<Compile Include="bean\job\ChargeJob.cs" />
<Compile Include="bean\job\EnterLeaveShelfJob.cs" />
<Compile Include="bean\job\SendFullShelfToLineJob.cs" />
<Compile Include="bean\job\GoFullShelfStationJob.cs" />
<Compile Include="bean\job\EmptyShelfBackJob.cs" />
<Compile Include="bean\job\EmptyAGVBackJob.cs" />
<Compile Include="bean\job\GoEmptyShelfLineJob.cs" />
<Compile Include="bean\Node.cs" />
<Compile Include="bean\node\ClientNode.cs" />
<Compile Include="bean\node\InDoubleLineNode.cs" />
<Compile Include="bean\node\OutDoubleLineNode.cs" />
<Compile Include="bean\node\DoubleLineNodeFor4D.cs" />
<Compile Include="bean\node\DoubleLineNodeFor4C.cs" />
<Compile Include="BLL\AGVManager.cs" />
<Compile Include="BLL\AgvServer.cs" />
<Compile Include="BLL\Common.cs" />
<Compile Include="BLL\ConfigAppSettings.cs" />
<Compile Include="BLL\Control.cs" />
<Compile Include="BLL\HttpHelper.cs" />
<Compile Include="BLL\IniHelper.cs" />
<Compile Include="BLL\JsonHelper.cs" />
<Compile Include="BLL\MyWebClient.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="BLL\WebService.cs" />
<Compile Include="BLL\LineWebService.cs" />
<Compile Include="FrmMain.cs">
<SubType>Form</SubType>
</Compile>
......
......@@ -14,7 +14,7 @@
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date][%t]%-5p %m%n"/>
<conversionPattern value="[%date][%t][%c:%L]%-5p %m%n"/>
</layout>
</appender>
<appender name="LineWebService" type="log4net.Appender.RollingFileAppender">
......@@ -24,7 +24,7 @@
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date][%t]%-5p %m%n"/>
<conversionPattern value="[%date][%t][%c:%L]%-5p %m%n"/>
</layout>
</appender>
<logger>
......@@ -44,54 +44,13 @@
<add key="AutoCharge" value="True" />
<add key="ChargeWait" value="1" />
<add key="ChargeThreshold" value="20,70" />
<add key="MiR_R1763" value="True," />
<add key="MiR_R1764" value="False," />
<add key="MiR_R1767" value="False," />
<add key="MiR_R1768" value="False," />
<add key="A5" value="True" />
<add key="A6" value="True" />
<add key="E1" value="True" />
<add key="E2" value="True" />
<add key="E3" value="True" />
<add key="E4" value="True" />
<add key="E5" value="True" />
<add key="E6" value="True" />
<add key="E7" value="false" />
<add key="E8" value="True" />
<add key="E9" value="True" />
<add key="E10" value="True" />
<add key="E11" value="True" />
<add key="E12" value="True" />
<add key="E13" value="false" />
<add key="E14" value="True" />
<add key="E15" value="True" />
<add key="E16" value="True" />
<add key="E21" value="True" />
<add key="E22" value="True" />
<add key="G1" value="false" />
<add key="G2" value="false" />
<add key="G3" value="false" />
<add key="G4" value="false" />
<add key="G5" value="false" />
<add key="G6" value="false" />
<add key="G7" value="false" />
<add key="G8" value="false" />
<add key="G9" value="false" />
<add key="G10" value="false" />
<add key="G11" value="false" />
<add key="G12" value="false" />
<add key="G13" value="false" />
<add key="G14" value="false" />
<add key="G15" value="false" />
<add key="G16" value="false" />
<add key="G21" value="false" />
<add key="G22" value="false" />
</appSettings>
<system.serviceModel>
<services>
<!--添加服务-->
<service name="LineWebService.ClsWebService" behaviorConfiguration="CalculatorServiceBehavior">
<service name="BLL.ClsWebService" behaviorConfiguration="CalculatorServiceBehavior">
<!--name 必须与代码中的host实例初始化的服务一样
behaviorConfiguration 行为配置 -->
<host>
......@@ -102,7 +61,7 @@
</host>
<!--添加契约接口 contract="WcfDemo.IService1" WcfDemo.IService1为契约接口 binding="wsHttpBinding" wsHttpBinding为通过Http调用-->
<endpoint address="" binding="wsHttpBinding" contract="LineWebService.IWebService"></endpoint>
<endpoint address="" binding="wsHttpBinding" contract="BLL.IWebService"></endpoint>
</service>
</services>
......
此文件的差异太大,无法显示。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace AGVControl
{
class IniHelper
{
[DllImport("kernel32")]
//section:要读取的段落名
//key: 要读取的键点击打开链接点击打开链接
//defVal: 读取异常的情况下的缺省值
//retVal: key所对应的值,如果该key不存在则返回空值
//size: 值允许的大小
//filePath: INI文件的完整路径和文件名
private static extern int GetPrivateProfileString(string section, string key, string defVal, StringBuilder retVal, int size, string filePath);
[DllImport("kernel32")]
//section: 要写入的段落名
//key: 要写入的键,如果该key存在则覆盖写入
//val: key所对应的值
//filePath: INI文件的完整路径和文件名
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
/// <summary>
/// 读取INI文件
/// </summary>
/// <param name="section">项目名称(如 [section] )</param>
/// <param name="skey">键</param>
/// <param name="path">路径</param>
public static string ReadValue(string section, string skey, string path)
{
StringBuilder temp = new StringBuilder(500);
GetPrivateProfileString(section, skey, "", temp, 500, path);
return temp.ToString();
}
/// <summary>
/// 写入ini文件
/// </summary>
/// <param name="section">项目名称</param>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <param name="path">路径</param>
public static void WriteValue(string section, string key, string value, string path)
{
WritePrivateProfileString(section, key, value, path);
}
}
}
using Newtonsoft.Json;
using AGVControl;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
namespace BLL
{
/// <summary>
/// Json帮助类
/// </summary>
public class JsonHelper
{
/// <summary>
/// Json帮助类
/// 将对象序列化为JSON格式
/// </summary>
public class JsonHelper
/// <param name="o">对象</param>
/// <returns>json字符串</returns>
public static string SerializeObject(object o)
{
/// <summary>
/// 将对象序列化为JSON格式
/// </summary>
/// <param name="o">对象</param>
/// <returns>json字符串</returns>
public static string SerializeObject(object o)
string json = JsonConvert.SerializeObject(o);
return json;
}
/// <summary>
/// 解析JSON字符串生成对象实体
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param>
/// <returns>对象实体</returns>
public static T DeserializeJsonToObject<T>(string json) where T : class
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(json);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
T t = o as T;
return t;
}
/// <summary>
/// 解析JSON数组生成对象实体集合
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="json">json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])</param>
/// <returns>对象实体集合</returns>
public static List<T> DeserializeJsonToList<T>(string json) where T : class
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(json);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));
List<T> list = o as List<T>;
return list;
}
/// <summary>
/// 反序列化JSON到给定的匿名对象.
/// </summary>
/// <typeparam name="T">匿名对象类型</typeparam>
/// <param name="json">json字符串</param>
/// <param name="anonymousTypeObject">匿名对象</param>
/// <returns>匿名对象</returns>
public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject)
{
T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
return t;
}
/// <summary>
///写入JSON文件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="ts"></param>
/// <param name="fileName"></param>
public static void WriteJson<T>(List<T> ts, string fileName) where T : class
{
try
{
string json = JsonConvert.SerializeObject(o);
return json;
}
string path = Common.CONFIG_PATH + fileName + ".json";
string output = JsonConvert.SerializeObject(ts,Formatting.Indented);
File.WriteAllText(path, output);
/// <summary>
/// 解析JSON字符串生成对象实体
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param>
/// <returns>对象实体</returns>
public static T DeserializeJsonToObject<T>(string json) where T : class
}
catch (Exception e)
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(json);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
T t = o as T;
return t;
Common.log.Error(e.Message + "/r/n" + e.StackTrace);
}
/// <summary>
/// 解析JSON数组生成对象实体集合
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="json">json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])</param>
/// <returns>对象实体集合</returns>
public static List<T> DeserializeJsonToList<T>(string json) where T : class
}
/// <summary>
/// 读取JSON文件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="ts"></param>
/// <param name="fileName"></param>
public static List<T> ReadJson<T>(string fileName) where T : class
{
try
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(json);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));
List<T> list = o as List<T>;
return list;
string path = Common.CONFIG_PATH + fileName + ".json";
StreamReader streamReader = new StreamReader(path);
string jsonStr = streamReader.ReadToEnd();
List<T> jsonObj = DeserializeJsonToList<T>(jsonStr);
streamReader.Close();
return jsonObj;
}
/// <summary>
/// 反序列化JSON到给定的匿名对象.
/// </summary>
/// <typeparam name="T">匿名对象类型</typeparam>
/// <param name="json">json字符串</param>
/// <param name="anonymousTypeObject">匿名对象</param>
/// <returns>匿名对象</returns>
public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject)
catch (Exception e)
{
T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
return t;
Common.log.Error(e.Message + "/r/n" + e.StackTrace);
return null;
}
}
///// <summary>
///// 与服务器通信用对象
///// </summary>
//public class Operation
//{
// private string _cid = "";
// public string cid
// {
// get { return _cid; }
// set { _cid = value; }
// }
}
///// <summary>
///// 与服务器通信用对象
///// </summary>
//public class Operation
//{
// private string _cid = "";
// public string cid
// {
// get { return _cid; }
// set { _cid = value; }
// }
// public int seq { get; set; }
// public int op { get; set; }
// public int status { get; set; }
// private string _error = "";
// public string error
// {
// get { return _error; }
// set { _error = value; }
// }
// public int seq { get; set; }
// public int op { get; set; }
// public int status { get; set; }
// private Dictionary<string, string> _data = new Dictionary<string,string>();
// public Dictionary<string, string> data {
// get { return _data; }
// set { _data = value; }
// }
// private string _error = "";
// public string error
// {
// get { return _error; }
// set { _error = value; }
// }
// private Dictionary<string, string> _data = new Dictionary<string,string>();
// public Dictionary<string, string> data {
// get { return _data; }
// set { _data = value; }
// }
//}
//}
}
......@@ -60,9 +60,13 @@ namespace BLL
{
emptyStation = "FeederOut";
}
else if (emptyStation.Equals("4CFeeder"))
{
emptyStation = "4CFeederOut";
}
AGVControl.Common.LogInfo("WebService Request emptyStation=" + emptyStation,false);
}
if (AGVControl.Common.agvProductionLine.TryGetValue(emptyStation, out string value))
if (Common.GetNodeNameByLineName(emptyStation, out string value))
{
res = new Result() { Succeed = true, ResultData = null, ErrorMessage = "" };
AGVControl.Common.log.Debug("WebService Response OK");
......@@ -73,7 +77,7 @@ namespace BLL
// AGVControl.Common.linePlace.Add(value);
//else
// AGVControl.Common.log.Error("CreateEmptyRecycleTask " + value + "不存在");
if (!Common.AddLinePlace(value))
if (!Common.AddEmptyShelfTask(value))
Common.log.Error("CreateEmptyRecycleTask 节点【" + value + "】不存在");
else
{
......@@ -108,7 +112,7 @@ namespace BLL
AGVControl.Common.LogInfo("WebService Request emptyStation=" + line,false);
//if (line == null)
// res = new Result() { Succeed = "false", ResultData = null, ErrorMessage = "line =null " };
if (AGVControl.Common.agvProductionLine.TryGetValue(line, out string value))
if (Common.GetNodeNameByLineName(line, out string value))
{
res = new Result() { Succeed = true, ResultData = null, ErrorMessage = "" };
AGVControl.Common.LogInfo("WebService Response OK");
......@@ -119,7 +123,7 @@ namespace BLL
// AGVControl.Common.linePlace.Add(value);
//else
// AGVControl.Common.log.Error("CreateEmptyRecycleTask " + value + "不存在");
if (!Common.AddLinePlace(value))
if (!Common.AddEmptyShelfTask(value))
Common.log.Error("CreateEmptyRecycleTask 节点【" + value + "】不存在");
else
{
......
......@@ -367,9 +367,9 @@ namespace BLL
/// <param name="battery"></param>
/// <param name="mission_text"></param>
/// <returns></returns>
public bool Get_State(Agv_Info info, out int stateID, out string stateText, out int battery, out string mission_text, out Agv_Info.clsPosition position)
public bool Get_State(Agv_Info info, out eAGVState stateID, out string stateText, out int battery, out string mission_text, out Agv_Info.clsPosition position)
{
stateID = -1;
stateID = eAGVState.NULL;
stateText = "";
battery = 0;
mission_text = "";
......@@ -384,7 +384,7 @@ namespace BLL
Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);
if (dic == null) return false;
stateID = Convert.ToInt32(dic["state_id"].ToString());
stateID = (eAGVState)Convert.ToInt32(dic["state_id"].ToString());
stateText = dic["state_text"].ToString();
mission_text = dic["mission_text"].ToString();
string s = dic["battery_percentage"].ToString();
......
......@@ -51,7 +51,7 @@ namespace AGVControl
Common.mir = new MiR_API();
Common.control = new BLL.Control();
//软件开启时检查小车当前的任务状态,并获取各节点的坐标位置
Common.CheckAGVMissionState();
//Common.CheckAGVMissionState();
//获取节点位置
Common.GetNodesPosition();
Common.control.Start();
......@@ -77,22 +77,23 @@ namespace AGVControl
string rfid = "";
Common.appConfig = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None);
Common.agvInfo = new List<Agv_Info>();
path = Common.CONFIG_PATH + "AgvName.csv";
line = System.IO.File.ReadAllLines(path,Encoding.UTF8);
path = Common.CONFIG_PATH + SettingString.FileName_AGV;
line = System.IO.File.ReadAllLines(path, Encoding.UTF8);
for (int i = 1; i < line.Length; i++)
{
temp = line[i].Split(',');
if (temp.Length != 5) continue;
string val = Common.appConfig.AppSettings.Settings[temp[1]].Value;
isuse = Convert.ToBoolean(val.Split(',')[0]);
rfid = val.Split(',')[1];
Common.agvInfo.Add(new Agv_Info(temp[0], temp[1], temp[2], temp[3], temp[4], isuse,rfid));
//string val = Common.appConfig.AppSettings.Settings[temp[1]].Value;
Boolean.TryParse(Common.ReadIni(temp[1],SettingString.IsUse),out isuse);//Convert.ToBoolean(val.Split(',')[0]);
rfid = Common.ReadIni(temp[1],SettingString.RFID); //val.Split(',')[1];
Common.agvInfo.Add(new Agv_Info(temp[0], temp[1], temp[2], temp[3], temp[4], isuse, rfid));
}
Common.agvMission = new Dictionary<string, string>();
Common.showNameMissionName = new Dictionary<string, string>();
path = Common.CONFIG_PATH + "AgvMission.csv";
path = Common.CONFIG_PATH + SettingString.FileName_AgvMission;
line = System.IO.File.ReadAllLines(path, Encoding.UTF8);
for (int i = 1; i < line.Length; i++)
{
......@@ -102,23 +103,22 @@ namespace AGVControl
Common.showNameMissionName.Add(temp[0], temp[1]);
}
Common.nodeInfo = new List<ClientNode>();
Common.chargeStatus = new ChargeStatus();
Common.agvProductionLine = new Dictionary<string, string>();
path = Common.CONFIG_PATH + "AgvProductionLine.csv";
path = Common.CONFIG_PATH + SettingString.FileName_AgvProductionLine;
line = System.IO.File.ReadAllLines(path, Encoding.GetEncoding("gb2312"));
for (int i = 1; i < line.Length; i++)
{
temp = line[i].Split(',');
if (temp.Length != 6) continue;
Common.agvProductionLine.Add(temp[0], temp[1]);
bool isUse = Convert.ToBoolean(Common.appConfig.AppSettings.Settings[temp[1]].Value);
Common.nodeInfo.Add(new ClientNode(temp[1], temp[2],temp[3],temp[4],temp[5], isUse));
Boolean.TryParse(Common.ReadIni(temp[1], SettingString.IsUse),out bool isUse);
Int32.TryParse(Common.ReadIni(temp[1], SettingString.EmptyShelfCnt), out int emptyShelfCnt);
Common.nodeInfo.Add(new ClientNode(temp[1], temp[2], temp[3], temp[0], temp[4], temp[5], isUse,emptyShelfCnt));
}
Common.chargeStatus = new ChargeStatus();
Common.itsHttp = Common.appConfig.AppSettings.Settings["ITS"].Value;
}
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
......
......@@ -40,7 +40,19 @@ namespace AGVControl
/// <summary>
/// 是否可用
/// </summary>
public bool IsUse { set; get; }
private bool _IsUse = true;
public bool IsUse
{
set
{
if (!value.Equals(_IsUse))
{
_IsUse = value;
Common.WriteIni(Name, SettingString.IsUse, _IsUse.ToString());
}
}
get { return _IsUse; }
}
/// <summary>
/// 地点
/// </summary>
......@@ -58,7 +70,7 @@ namespace AGVControl
/// <summary>
/// 小车的状态ID,(从小车获取)
/// </summary>
public int StateID { private set; get; }
public eAGVState StateID { private set; get; }
/// <summary>
/// 负载
......@@ -101,16 +113,7 @@ namespace AGVControl
/// 临时待机位,用于执行一次
/// </summary>
//public bool StandbyTemp { set; get; }
public struct DockingStru
{
public DateTime startTime;
public bool IsDocking;
}
/// <summary>
/// 停靠信息
/// </summary>
public DockingStru DockingInfo;
public DateTime DockingStartTime { get; set; } = DateTime.Now;
public class clsPosition
{
public double orientation { get; set; }
......@@ -126,6 +129,8 @@ namespace AGVControl
/// 任务内容
/// </summary>
public string Msg { get; set; }
public Job CurJob { get; set; }
public Agv_Info(string id, string name, string ip, string authorization, string ioID, bool isUse, string rfid)
{
ID = id;
......@@ -135,19 +140,17 @@ namespace AGVControl
IOID = ioID;
RFID = rfid;
IsCon = false;
IsUse = isUse;
_IsUse = isUse;
Place = "";
TaskSend = "";
NextPlace = "";
Msg = "";
DockingInfo.IsDocking = false;
DockingInfo.startTime = DateTime.Now;
Position = new Agv_Info.clsPosition();
}
DateTime IoStartTime = DateTime.MaxValue;
int IoLastTime = 5000;
public bool SetState(int stateID, string stateText, int battery, string missionText, clsPosition position)
public bool SetState(eAGVState stateID, string stateText, int battery, string missionText, clsPosition position)
{
bool isChange = false;
bool preShelfState = IsExistShelf;
......@@ -265,4 +268,25 @@ namespace AGVControl
}
}
/// <summary>
/// MIR 状态,与状态ID对应
/// </summary>
public enum eAGVState
{
None=0,
Starting,
ShuttingDown,
Ready,
Pause,
Executing,
Aborted,
Completed,
Docked,
Docking,
EmergencyStop,
ManualControl,
Error,
NULL
}
}
......@@ -11,22 +11,20 @@ namespace AGVControl
/// </summary>
public bool IsProcess { get; set; }
/// <summary>
/// 任务优先级
/// 任务是否结束
/// </summary>
/// <returns></returns>
public abstract ePriority GetPriority();
public abstract bool IsEnd { get; }
/// <summary>
/// 任务是否已经结束
/// 运行信息
/// </summary>
/// <returns></returns>
public abstract bool IsEnd();
public string RunInfo { get; set; }
/// <summary>
/// 根据任务状态继续执行任务
/// </summary>
public abstract void Execute(Agv_Info agv);
public abstract Job Execute(Agv_Info agv);
}
}
......
......@@ -21,7 +21,7 @@ namespace AGVControl
//不为空,且与上一个消息不一样才打印
if (!value.Equals(msg))
{
Common.LogInfo(value);
Common.LogInfo(step.ToString()+":"+value);
}
}
msg = value;
......
......@@ -63,7 +63,7 @@ namespace AGVControl
nodeStatus = status;
}
public virtual Job GetNewJob(Agv_Info currentAgvBean, Dictionary<string, Node> nodeMap, Dictionary<string, Agv_Info> agvBeanMap)
public virtual Job GetNewJob(Agv_Info currentAgvBean)
{
return null;
}
......

using AGVControl;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel.PeerResolvers;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AGVControl
{
/// <summary>
/// 充电任务
/// </summary>
public class ChargeJob : Job
{
/// <summary>
/// 出完满料后-空车返回任务
/// </summary>
/// <param name="agvPlae">小车当前位置,空表示在待机位</param>
public ChargeJob(string agvPlae)
{
this.agvPlace = agvPlae;
}
/// <summary>
/// 接收任务时,agv的位置
/// </summary>
private string agvPlace { get; set; }
/// <summary>
/// 运行信息
/// </summary>
public string RunInfo { get; set; }
public override bool IsEnd { get { return ChargeStep.IsStep(CHARGE_STEP.END); } }
private JobStep<CHARGE_STEP> ChargeStep = new JobStep<CHARGE_STEP>(CHARGE_STEP.NONE);
/// <summary>
/// 空车返回执行
/// </summary>
/// <param name="agv"></param>
public override Job Execute(Agv_Info agv)
{
string msg = "";
bool rtn = false;
if (ChargeStep.IsStep(CHARGE_STEP.NONE))
{
if (agvPlace.StartsWith("G"))
{
ChargeStep.ToNextStep(CHARGE_STEP.WAIT_AGV_REACH_4D_DOOR);
msg = "从当前位置" + agvPlace + "回到充电位,先到4D门";
ChargeStep.Msg = msg;
Common.DoorMission(agv, SettingString.MoveDoorCToD);
}
else
{
ChargeStep.ToNextStep(CHARGE_STEP.WAIT_REACH_CHARGE_STATION);
msg = "从当前位置" + agvPlace + "回到充电位";
ChargeStep.Msg = msg;
Common.StatusCharge(agv);
}
}
else if (ChargeStep.IsStep(CHARGE_STEP.WAIT_AGV_REACH_4D_DOOR))
{
if(agv.Place.Equals(SettingString.D4_DOOR_Name)&& agv.PlaceState.Equals(ePlaceState.MoveFinish))
{
ChargeStep.ToNextStep(CHARGE_STEP.WAIT_AGV_REACH_4D_DOOR);
msg = "从当前位置" + agvPlace + "到4D门";
ChargeStep.Msg = msg;
Common.StatusCharge(agv);
}
}
else if (ChargeStep.IsStep(CHARGE_STEP.WAIT_REACH_CHARGE_STATION))
{
if (agv.Place.StartsWith(SettingString.Charge_Name_Prefix) && agv.PlaceState.Equals(ePlaceState.MoveFinish))
{
ChargeStep.ToNextStep(CHARGE_STEP.WAIT_REACH_CHARGE_OK);
msg = "到达充电位";
ChargeStep.Msg = msg;
}
}
else if(ChargeStep.IsStep(CHARGE_STEP.WAIT_REACH_CHARGE_OK))
{
if(CheckRandomCharge(agv))
{
if (agv.Battery >= Common.chargeStatus.chargeMax)
{
ChargeStep.ToNextStep(CHARGE_STEP.WAIT_REACH_STANDBY);
msg = "充电完成,回待机位";
ChargeStep.Msg = msg;
Common.MoveToNode(agv, SettingString.MoveStandby);
}
}
else
{
if (agv.Battery >= Common.chargeStatus.chargeMax)
{
ChargeStep.ToNextStep(CHARGE_STEP.END);
msg = "充电完成";
ChargeStep.Msg = msg;
}
}
}
else if (ChargeStep.IsStep(CHARGE_STEP.WAIT_REACH_STANDBY))
{
if (agv.Place.StartsWith(SettingString.Standby_Name_Prefix) && agv.PlaceState.Equals(ePlaceState.MoveFinish))
{
ChargeStep.ToNextStep(CHARGE_STEP.END);
msg = "充电完成,回到达待机位";
ChargeStep.Msg = msg;
}
}
else if (ChargeStep.IsStep(CHARGE_STEP.END))
{
}
RunInfo = ChargeStep.Msg;
return this;
}
/// <summary>
/// 检查当前小车是否是共用充电桩的小车
/// </summary>
/// <returns></returns>
private bool CheckRandomCharge(Agv_Info agv)
{
if(agv.IP.Equals(SettingString.RandomCharge_IP1) || agv.IP.Equals(SettingString.RandomCharge_IP2))
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// AGV充电流程
/// </summary>
private enum CHARGE_STEP
{
/// <summary>
///
/// </summary>
NONE,
/// <summary>
/// 等待到达4D门
/// </summary>
WAIT_AGV_REACH_4D_DOOR,
/// <summary>
/// 等待AGV到达充电位
/// </summary>
WAIT_REACH_CHARGE_STATION,
/// <summary>
/// 等待充电完成
/// </summary>
WAIT_REACH_CHARGE_OK,
/// <summary>
/// 充电完成去待机位
/// </summary>
WAIT_REACH_STANDBY,
/// <summary>
///
/// </summary>
END
}
}
}

using AGVControl;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel.PeerResolvers;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AGVControl
{
/// <summary>
/// 空车返回待机位任务
/// </summary>
public class EmptyAGVBackJob : Job
{
/// <summary>
/// 出完满料后-空车返回任务
/// </summary>
/// <param name="agvPlae">小车当前位置,空表示在待机位</param>
/// <param name="palce">空料架位置点</param>
public EmptyAGVBackJob(string agvPlae)
{
this.agvPlace = agvPlae;
}
/// <summary>
/// 接收任务时,agv的位置
/// </summary>
private string agvPlace { get; set; }
/// <summary>
/// 运行信息
/// </summary>
public string RunInfo { get; set; }
/// <summary>
/// 到达待机位
/// </summary>
public override bool IsEnd { get { return EmptyAGVBackStep.IsStep(EMPTY_AGV_BACK_STEP.END); } }
private JobStep<EMPTY_AGV_BACK_STEP> EmptyAGVBackStep = new JobStep<EMPTY_AGV_BACK_STEP>(EMPTY_AGV_BACK_STEP.NONE);
/// <summary>
/// 空车返回执行
/// </summary>
/// <param name="agv"></param>
public override Job Execute(Agv_Info agv)
{
string msg = "";
bool rtn = false;
if (EmptyAGVBackStep.IsStep(EMPTY_AGV_BACK_STEP.NONE))
{
if(Common.FindEmptyShelfNode(agv,out string nodeName))
{
//EmptyAGVBackStep.ToNextStep(EMPTY_AGV_BACK_STEP.END);
msg = "小车在产线"+agvPlace+"准备返回时检测到"+nodeName+"有空料架";
EmptyAGVBackStep.Msg = msg;
return new GoEmptyShelfLineJob(agvPlace,nodeName);
}
else
{
if(agvPlace.StartsWith("G"))
{
EmptyAGVBackStep.ToNextStep(EMPTY_AGV_BACK_STEP.WAIT_AGV_REACH_4D_DOOR);
msg = "从产线" + agvPlace + "回到待机位,先到4D门";
EmptyAGVBackStep.Msg = msg;
Common.DoorMission(agv, SettingString.MoveDoorCToD);
}
else
{
EmptyAGVBackStep.ToNextStep(EMPTY_AGV_BACK_STEP.WAIT_REACH_STANDBY);
msg = "从产线" + agvPlace + "回到待机位";
EmptyAGVBackStep.Msg = msg;
Common.MoveToNode(agv, SettingString.MoveStandby);
}
}
}
else if (EmptyAGVBackStep.IsStep(EMPTY_AGV_BACK_STEP.WAIT_AGV_REACH_4D_DOOR))
{
if(agv.Place.Equals(SettingString.D4_DOOR_Name)&& agv.PlaceState.Equals(ePlaceState.MoveFinish))
{
if(Common.FindFullShelfTask(agv))
{
msg = "从产线" + agvPlace + "到达4D门,检测到A6出满料,去A6";
EmptyAGVBackStep.Msg = msg;
return new GoFullShelfStationJob(SettingString.D4_DOOR_Name);
}
else
{
msg = "从产线" + agvPlace + "到达4D门,暂无任务,去充电位";
EmptyAGVBackStep.Msg = msg;
return new ChargeJob(SettingString.D4_DOOR_Name);
}
}
}
RunInfo = EmptyAGVBackStep.Msg;
return this;
}
/// <summary>
/// AGV回收空料架流程
/// </summary>
private enum EMPTY_AGV_BACK_STEP
{
/// <summary>
/// 查询任务
/// </summary>
NONE,
/// <summary>
/// 等待到达4D门
/// </summary>
WAIT_AGV_REACH_4D_DOOR,
/// <summary>
/// 等待AGV到达待机位
/// </summary>
WAIT_REACH_STANDBY,
/// <summary>
///
/// </summary>
END
}
}
}

using AGVControl;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.ModelBinding;
using System.Windows.Forms;
namespace AGVControl
{
public enum eShelfType
{
BigShelf,
SmallShelf
}
/// <summary>
/// 载空料架返回任务,A5,A6需要则直接去,否则在待机位等待
/// </summary>
public class EmptyShelfBackJob : Job
{
/// <summary>
/// 载空料架返回任务
/// </summary>
/// <param name="lineName">产线的节点名称</param>
public EmptyShelfBackJob(string lineName,eShelfType shelfType)
{
EmptyShelfPlace = lineName;
this.shelfType = shelfType;
}
/// <summary>
/// 空料架的产线位置
/// </summary>
private string EmptyShelfPlace { get; set; }
/// <summary>
/// 空料架目的地
/// </summary>
private string EmptyShelfTargetPlace { get; set; }
/// <summary>
/// 运行信息
/// </summary>
public string RunInfo { get; set; }
private eShelfType shelfType;
public override bool IsEnd { get {return EmptyBackStep.IsStep(EMPTY_SHELF_BACK_STEP.END); } }
private JobStep<EMPTY_SHELF_BACK_STEP> EmptyBackStep = new JobStep<EMPTY_SHELF_BACK_STEP>(EMPTY_SHELF_BACK_STEP.NONE);
/// <summary>
/// 空架任务执行
/// </summary>
/// <param name="agv"></param>
public override Job Execute(Agv_Info agv)
{
string msg = "";
bool rtn = false;
if (EmptyBackStep.IsStep(EMPTY_SHELF_BACK_STEP.NONE))
{
Common.DelEmptyShelfTask(EmptyShelfPlace);
if (EmptyShelfPlace.StartsWith("G"))//4车间
{
EmptyBackStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_DOOR);
msg = "空料架从产线"+ EmptyShelfPlace + "前往4D门";
EmptyBackStep.Msg = msg;
Common.DoorMission(agv, SettingString.MoveDoorCToD);
}
else
{
if (Common.CheckA5A6State(agv,shelfType, out string nodeName))
{
EmptyShelfTargetPlace = nodeName;
EmptyBackStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_A5A6);
msg = "空料架从产线 [" + EmptyShelfTargetPlace + "] 送往双层线";
EmptyBackStep.Msg = msg;
}
else
{
EmptyBackStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_STANDBY);
msg = "双层线暂不需要空料架,从产线[" + EmptyShelfTargetPlace + "]到待机位";
EmptyBackStep.Msg = msg;
Common.MoveToNode(agv, SettingString.MoveStandby);
}
}
}
else if(EmptyBackStep.IsStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_DOOR))
{
if(agv.Place.Equals(SettingString.D4_DOOR_Name) && agv.PlaceState.Equals(ePlaceState.MoveFinish))
{
if (Common.CheckA5A6State(agv, shelfType, out string nodeName))
{
EmptyShelfTargetPlace = nodeName;
EmptyBackStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_A5A6);
msg = "空料架从产线 [" + EmptyShelfTargetPlace + "] 送往双层线";
EmptyBackStep.Msg = msg;
}
else
{
EmptyBackStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_STANDBY);
msg = "双层线暂不需要空料架,从产线[" + EmptyShelfTargetPlace + "]到待机位";
EmptyBackStep.Msg = msg;
Common.MoveToNode(agv, SettingString.MoveStandby);
}
}
}
else if (EmptyBackStep.IsStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_STANDBY))
{
if (Common.CheckA5A6State(agv, shelfType, out string nodeName))
{
EmptyShelfTargetPlace = nodeName;
EmptyBackStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_A5A6);
msg = "待机位检测到双层线需要料架,送往双层线 "+EmptyShelfTargetPlace;
EmptyBackStep.Msg = msg;
}
}
else if (EmptyBackStep.IsStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_A5A6))
{
if(agv.Place.Equals(EmptyShelfTargetPlace) && agv.PlaceState.Equals(ePlaceState.MoveFinish))
{
msg = "AGV到达 " + EmptyShelfTargetPlace;
EmptyBackStep.Msg = msg;
return new EnterLeaveShelfJob(EmptyShelfTargetPlace,eEnterLeaveType.Leave,shelfType);
//EmptyBackStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_DOUBLE_LINE_RESPONSE);
//msg = "AGV到达 " + EmptyShelfTargetPlace + ",并发送入料架请求[ReadyEnter]";
//EmptyBackStep.Msg = msg;
//Common.server.ReadyEnter(EmptyShelfTargetPlace);
}
}
//else if (EmptyBackStep.IsStep(EMPTY_SHELF_BACK_STEP.WAIT_DOUBLE_LINE_RESPONSE))
//{
// int id = Common.FindNode(EmptyShelfTargetPlace);
// ClientNode node = Common.nodeInfo[id];
// if (node.StateEquals(eNodeStatus.MayEnter))
// {
// EmptyBackStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT__EMPTY_SHELF_IN_DOUBLE_LINE);
// msg = "收到双层线入料架请求[ReadyEnter]的响应 " + EmptyShelfTargetPlace + "入料架,小车链条运行";
// EmptyBackStep.Msg = msg;
// rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Leave"]);
// agv.TaskSend = rtn ? "Leave" : "";
// }
// else if (EmptyBackStep.IsTimeOut(15000, out double timeOutValue))
// {
// EmptyBackStep.ToNextStep(EMPTY_SHELF_BACK_STEP.WAIT_AGV_REACH_A5A6);
// msg = "AGV到达 " + EmptyShelfTargetPlace + ",15秒后重新向双层线发送入料架请求[ReadyEnter]";
// EmptyBackStep.Msg = msg;
// }
//}
//else if (EmptyBackStep.IsStep(EMPTY_SHELF_BACK_STEP.WAIT__EMPTY_SHELF_IN_DOUBLE_LINE))
//{
// if (agv.Place.Equals(EmptyShelfTargetPlace) && agv.PlaceState.Equals(ePlaceState.LeaveFinish))
// {
// EmptyBackStep.ToNextStep(EMPTY_SHELF_BACK_STEP.END);
// msg = "空料架进入" + EmptyShelfTargetPlace + "完成";
// EmptyBackStep.Msg = msg;
// }
// else if (EmptyBackStep.IsTimeOut(60000, out double timeOutValue))
// {
// //链条停止
// msg = "空料架在[" + EmptyShelfTargetPlace + "]离开小车超时[" + timeOutValue.ToString("f1") + "秒],请检查料架离开小车的情况";
// EmptyBackStep.Msg = msg;
// }
//}
//else if (EmptyBackStep.IsStep(EMPTY_SHELF_BACK_STEP.END))
//{
//}
RunInfo = EmptyBackStep.Msg;
return this;
}
/// <summary>
/// AGV载空料架回收流程
/// </summary>
private enum EMPTY_SHELF_BACK_STEP
{
/// <summary>
/// 料架已进入小车,寻找目的地
/// </summary>
NONE,
/// <summary>
/// 等待AGV到达门
/// </summary>
WAIT_AGV_REACH_DOOR,
/// <summary>
/// 等待小车到达A5,A6
/// </summary>
WAIT_AGV_REACH_A5A6,
/// <summary>
/// 等待双层线回应
/// </summary>
WAIT_DOUBLE_LINE_RESPONSE,
/// <summary>
/// 等待料架进入双层线
/// </summary>
WAIT__EMPTY_SHELF_IN_DOUBLE_LINE,
/// <summary>
/// A5,A6暂时不需要,等待AGV到达待机位
/// </summary>
WAIT_AGV_REACH_STANDBY,
/// <summary>
/// 送上双层线
/// </summary>
END
}
}
}

using AGVControl;
using BLL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
namespace AGVControl
{
/// <summary>
/// 小车进出料类型
/// </summary>
public enum eEnterLeaveType
{
/// <summary>
/// 小车进料
/// </summary>
Enter,
/// <summary>
/// 小车出料
/// </summary>
Leave,
}
/// <summary>
/// 进出料任务
/// </summary>
public class EnterLeaveShelfJob : Job
{
/// <summary>
/// 进出料任务
/// </summary>
/// <param name="palce">位置点名称</param>
/// <param name="rfid">RFID</param>
public EnterLeaveShelfJob(string palce, eEnterLeaveType type,eShelfType shelfType= eShelfType.SmallShelf,string rfid="")
{
LineName = palce;
RFID = rfid;
ActionType = type;
this.shelfType = shelfType;
}
/// <summary>
/// 位置名
/// </summary>
public string LineName { get; set; }
public string RFID { get; set; }
/// <summary>
/// 运行信息
/// </summary>
public string RunInfo { get; set; }
public eEnterLeaveType ActionType { get; set; }
private eShelfType shelfType;
public override bool IsEnd { get { return EnterLeaveShelfStep.IsStep(ENTER_LEAVE_SHELF_STEP.END); } }
private JobStep<ENTER_LEAVE_SHELF_STEP> EnterLeaveShelfStep = new JobStep<ENTER_LEAVE_SHELF_STEP>(ENTER_LEAVE_SHELF_STEP.NONE);
public override Job Execute(Agv_Info agv)
{
string msg = "";
bool rtn = false;
if (EnterLeaveShelfStep.IsStep(ENTER_LEAVE_SHELF_STEP.NONE))
{
if (ActionType.Equals(eEnterLeaveType.Leave))
{
EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.WAIT_LINE_ReadyEnter_RESPONSE);
msg = "AGV到达 " + LineName + ",并发送入料架请求[ReadyEnter]";
EnterLeaveShelfStep.Msg = msg;
Common.server.ReadyEnter(LineName);
}
else if(ActionType.Equals(eEnterLeaveType.Enter))
{
EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.WAIT_LINE_ReadyLeave_RESPONSE);
msg = "AGV到达 " + LineName + ",并发送出料架请求[ReadyLeave]";
EnterLeaveShelfStep.Msg = msg;
Common.server.ReadyLeave(LineName);
}
}
else if (EnterLeaveShelfStep.IsStep(ENTER_LEAVE_SHELF_STEP.WAIT_LINE_ReadyEnter_RESPONSE))
{
int id = Common.FindNode(LineName);
ClientNode node = Common.nodeInfo[id];
if (node.StateEquals(eNodeStatus.MayEnter))
{
EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_IN_LINE);
msg = "收到产线入料架请求[ReadyEnter]的响应, " + LineName + "入料架,小车链条运行";
EnterLeaveShelfStep.Msg = msg;
rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Leave"]);
agv.TaskSend = rtn ? "Leave" : "";
}
else if (EnterLeaveShelfStep.IsTimeOut(15000, out double timeOutValue))
{
EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.NONE);
msg = "AGV到达 " + LineName + ",15秒后重新向产线发送入料架请求[ReadyEnter]";
EnterLeaveShelfStep.Msg = msg;
}
}
else if (EnterLeaveShelfStep.IsStep(ENTER_LEAVE_SHELF_STEP.WAIT_LINE_ReadyLeave_RESPONSE))
{
int id = Common.FindNode(LineName);
ClientNode node = Common.nodeInfo[id];
if (node.StateEquals(eNodeStatus.MayLeave))
{
EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_OUT_LINE);
msg = "收到产线出料架请求[ReadyLeave]的响应, " + LineName + "出料架,小车链条运行";
EnterLeaveShelfStep.Msg = msg;
rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Enter"]);
agv.TaskSend = rtn ? "Enter" : "";
}
else if (EnterLeaveShelfStep.IsTimeOut(15000, out double timeOutValue))
{
EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.NONE);
msg = "AGV到达 " + LineName + ",15秒后重新向产线发送入料架请求[ReadyLeave]";
EnterLeaveShelfStep.Msg = msg;
}
}
else if (EnterLeaveShelfStep.IsStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_IN_LINE))
{
if (agv.Place.Equals(LineName) && agv.PlaceState.Equals(ePlaceState.LeaveFinish))
{
//EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.END);
msg = "料架进入" + LineName + "完成 ["+RFID+"]";
EnterLeaveShelfStep.Msg = msg;
return new EmptyAGVBackJob(LineName);
}
else if (EnterLeaveShelfStep.IsTimeOut(60000, out double timeOutValue))
{
//链条停止
msg = "料架在[" + LineName + "]离开小车超时[" + timeOutValue.ToString("f1") + "秒],请检查料架离开小车的情况";
EnterLeaveShelfStep.Msg = msg;
}
}
else if (EnterLeaveShelfStep.IsStep(ENTER_LEAVE_SHELF_STEP.WAIT__SHELF_OUT_LINE))
{
if (agv.Place.Equals(LineName) && agv.PlaceState.Equals(ePlaceState.EnterFinish))
{
//EnterLeaveShelfStep.ToNextStep(ENTER_LEAVE_SHELF_STEP.END);
msg = "料架在" + LineName + "出去完成 [" + RFID + "]";
EnterLeaveShelfStep.Msg = msg;
return new EmptyShelfBackJob(LineName,shelfType);
}
else if (EnterLeaveShelfStep.IsTimeOut(60000, out double timeOutValue))
{
//链条停止
msg = "料架在[" + LineName + "]进入小车超时[" + timeOutValue.ToString("f1") + "秒],请检查料架进入小车的情况";
EnterLeaveShelfStep.Msg = msg;
}
}
else if (EnterLeaveShelfStep.IsStep(ENTER_LEAVE_SHELF_STEP.END))
{
}
RunInfo = EnterLeaveShelfStep.Msg;
return this;
}
}
/// <summary>
/// AGV进出料
/// </summary>
public enum ENTER_LEAVE_SHELF_STEP
{
/// <summary>
///
/// </summary>
NONE,
/// <summary>
/// 等待产线ReadyEnter回应
/// </summary>
WAIT_LINE_ReadyEnter_RESPONSE,
/// <summary>
/// 等待产线ReadyLeave回应
/// </summary>
WAIT_LINE_ReadyLeave_RESPONSE,
/// <summary>
/// 等待料架离开产线
/// </summary>
WAIT__SHELF_OUT_LINE,
/// <summary>
/// 等待料架进入产线
/// </summary>
WAIT__SHELF_IN_LINE,
/// <summary>
/// 进入/离开完成
/// </summary>
END
}
}

using AGVControl;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AGVControl
{
/// <summary>
/// 回收空料架任务
/// </summary>
public class SendFullShelfJob : Job
{
public SendFullShelfJob(string palce, ePriority priority)
{
EmptyShelfPlace = palce;
_priority = priority;
}
/// <summary>
/// 空料架位置点
/// </summary>
private string EmptyShelfPlace{ get; set; }
/// <summary>
/// 优先级
/// </summary>
private ePriority _priority;
private JobStep<TAKE_EMPTY_STEP> TakeEmptyStep = new JobStep<TAKE_EMPTY_STEP>(TAKE_EMPTY_STEP.NONE);
public override void Execute(Agv_Info agv)
{
if (TakeEmptyStep.IsStep(TAKE_EMPTY_STEP.NONE))
{
Common.LogInfo("开始执行回收空料架任务,发送到AGV");
TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_AGV_START_TAKE_TASK);
ClientNode node = Common.nodeInfo.Find(s => s.Name == EmptyShelfPlace);
}
else if (TakeEmptyStep.IsStep(TAKE_EMPTY_STEP.WAIT_AGV_START_TAKE_TASK))
{
//判断小车是否开始执行任务
bool isTaskStart = false;
if (isTaskStart)
{
Common.LogInfo("AGV已接收并开始执行回收空料架任务,等待到达取架点");
TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_REACH_TAKE_PLACE);
}
}else if (TakeEmptyStep.IsStep(TAKE_EMPTY_STEP.WAIT_REACH_TAKE_PLACE))
{
}
}
public override ePriority GetPriority()
{
return _priority;
}
public override bool IsEnd()
{
return TakeEmptyStep.IsStep(TAKE_EMPTY_STEP.END);
}
}
/// <summary>
/// AGV离开A4
/// </summary>
public enum TAKE_EMPTY_STEP
{
NONE,
/// <summary>
/// 等待AGV开始执行去取架点任务
/// </summary>
WAIT_AGV_START_TAKE_TASK,
/// <summary>
/// 等待AGV到达取架点
/// </summary>
WAIT_REACH_TAKE_PLACE,
/// <summary>
/// AGV到达取架点
/// </summary>
REACH_TAKE_PLACE,
/// <summary>
/// 送上双层线
/// </summary>
END
}
}

using AGVControl;
using BLL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
namespace AGVControl
{
/// <summary>
/// 从A6向产线运行任务(出满料)
/// </summary>
public class SendFullShelfToLineJob : Job
{
/// <summary>
/// 从A6向产线运行任务(出满料)
/// </summary>
/// <param name="palce">产线名</param>
/// <param name="rfid">料架RFID</param>
/// <param name="isIgNoreBigShelf">是否忽略大料架</param>
public SendFullShelfToLineJob(AGVManager.BoxDestInfo boxDestInfo,bool isIgNoreBigShelf=false)
{
FullShelfPlace = boxDestInfo.location;
RFID = boxDestInfo.id;
BoxDestInfo = boxDestInfo;
IsIgnoreBigShelf = isIgNoreBigShelf;
}
/// <summary>
/// 满料架目标位置点
/// </summary>
public string FullShelfPlace { get; set; }
public string RFID { get; set; }
/// <summary>
/// 运行信息
/// </summary>
public string RunInfo { get; set; }
public AGVManager.BoxDestInfo BoxDestInfo { get; private set; }
/// <summary>
/// 是否忽略大料架移库解绑
/// </summary>
public bool IsIgnoreBigShelf { get; private set; }
public override bool IsEnd { get { return SendFullShelfStep.IsStep(SEND_FULL_SHELF_STEP.END); } }
private JobStep<SEND_FULL_SHELF_STEP> SendFullShelfStep = new JobStep<SEND_FULL_SHELF_STEP>(SEND_FULL_SHELF_STEP.NONE);
public override Job Execute(Agv_Info agv)
{
string msg = "";
bool rtn = false;
if (SendFullShelfStep.IsStep(SEND_FULL_SHELF_STEP.NONE))
{
if(FullShelfPlace.StartsWith("G"))
{
SendFullShelfStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_AGV_REACH_DOOR);
msg = "满料架前往4C门,从双层线A6送往[" + FullShelfPlace + "][" + RFID + "]"+ BoxDestInfo.ShowInfo();
SendFullShelfStep.Msg = msg;
Common.DoorMission(agv, SettingString.MoveDoorDToC);
}
else
{
SendFullShelfStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_AGV_REACH_LINE);
msg = "满料架从双层线A6送往[" + FullShelfPlace + "][" + RFID + "]" + BoxDestInfo.ShowInfo();
SendFullShelfStep.Msg = msg;
Common.MoveToNode(agv, FullShelfPlace);
}
}
else if (SendFullShelfStep.IsStep(SEND_FULL_SHELF_STEP.WAIT_AGV_REACH_DOOR))
{
if (agv.Place.Equals(SettingString.C4_DOOR_Name) && agv.PlaceState.Equals(ePlaceState.MoveFinish))
{
SendFullShelfStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_AGV_REACH_LINE);
msg = "满料架从双层线A6送往[" + FullShelfPlace + "][" + RFID + "]" + BoxDestInfo.ShowInfo();
SendFullShelfStep.Msg = msg;
Common.MoveToNode(agv, FullShelfPlace);
}
}
else if (SendFullShelfStep.IsStep(SEND_FULL_SHELF_STEP.WAIT_AGV_REACH_LINE))
{
if (agv.Place.Equals(FullShelfPlace) && agv.PlaceState.Equals(ePlaceState.MoveFinish))
{
// msg = "AGV到达 " + FullShelfPlace + ",并发送入料架请求[ReadyEnter]" + BoxDestInfo.ShowInfo();
//SendFullShelfStep.Msg = msg;
if (IsIgnoreBigShelf)
{
SendFullShelfStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_LINE_RESPONSE);
msg = "AGV到达 " + FullShelfPlace + ",并发送入料架请求[ReadyEnter]" + BoxDestInfo.ShowInfo();
SendFullShelfStep.Msg = msg;
Common.server.ReadyEnter(FullShelfPlace);
}
else
{
if (RFID.StartsWith("C"))
{
SendFullShelfStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_BIG_SHELF_UNLOCK);
msg = "AGV到达 " + FullShelfPlace + ",并等待大料架[" + RFID + "]解绑" + BoxDestInfo.ShowInfo();
SendFullShelfStep.Msg = msg;
}
else
{
SendFullShelfStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_LINE_RESPONSE);
msg = "AGV到达 " + FullShelfPlace + ",并发送入料架请求[ReadyEnter]" + BoxDestInfo.ShowInfo();
SendFullShelfStep.Msg = msg;
Common.server.ReadyEnter(FullShelfPlace);
}
}
}
}
else if (SendFullShelfStep.IsStep(SEND_FULL_SHELF_STEP.WAIT_BIG_SHELF_UNLOCK))
{
Common.mir.Get_IO_Status(agv, out bool[] input, out bool[] output);
if (AGVManager.GetRackBy(RFID, out string lineName) || input[0])
{
msg = "大料架在" + FullShelfPlace + "解绑完成 [" + RFID + "]" + BoxDestInfo.ShowInfo();
SendFullShelfStep.Msg = msg;
return new EmptyShelfBackJob(FullShelfPlace,eShelfType.BigShelf);
}
}
else if (SendFullShelfStep.IsStep(SEND_FULL_SHELF_STEP.WAIT_LINE_RESPONSE))
{
int id = Common.FindNode(FullShelfPlace);
ClientNode node = Common.nodeInfo[id];
if (node.StateEquals(eNodeStatus.MayEnter))
{
SendFullShelfStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT__SHELF_IN_LINE);
msg = "收到产线入料架请求[ReadyEnter]的响应 " + FullShelfPlace + "入料架,小车链条运行" + BoxDestInfo.ShowInfo();
SendFullShelfStep.Msg = msg;
rtn = Common.mir.Add_Mission_Fleet(agv, Common.agvMission["Leave"]);
agv.TaskSend = rtn ? "Leave" : "";
}
else if (SendFullShelfStep.IsTimeOut(15000, out double timeOutValue))
{
SendFullShelfStep.ToNextStep(SEND_FULL_SHELF_STEP.WAIT_AGV_REACH_LINE);
msg = "AGV到达 " + FullShelfPlace + ",15秒后重新向产线发送入料架请求[ReadyEnter]" + BoxDestInfo.ShowInfo();
SendFullShelfStep.Msg = msg;
}
}
else if (SendFullShelfStep.IsStep(SEND_FULL_SHELF_STEP.WAIT__SHELF_IN_LINE))
{
if (agv.Place.Equals(FullShelfPlace) && agv.PlaceState.Equals(ePlaceState.LeaveFinish))
{
msg = "满料架进入" + FullShelfPlace + "完成 [" + RFID + "]" + BoxDestInfo.ShowInfo();
SendFullShelfStep.Msg = msg;
AGVManager.UpdateStatus(RFID, FullShelfPlace);
return new EmptyAGVBackJob(FullShelfPlace);
}
else if (SendFullShelfStep.IsTimeOut(60000, out double timeOutValue))
{
//链条停止
msg = "满料架在[" + FullShelfPlace + "]离开小车超时[" + timeOutValue.ToString("f1") + "秒],请检查料架离开小车的情况";
SendFullShelfStep.Msg = msg;
}
}
else if (SendFullShelfStep.IsStep(SEND_FULL_SHELF_STEP.END))
{
}
RunInfo = SendFullShelfStep.Msg;
return this;
}
}
/// <summary>
/// AGV送满料架到产线
/// </summary>
public enum SEND_FULL_SHELF_STEP
{
/// <summary>
/// 料架已进入小车,去目的地
/// </summary>
NONE,
/// <summary>
/// 等待AGV到达门
/// </summary>
WAIT_AGV_REACH_DOOR,
/// <summary>
/// 等待小车到达目的地
/// </summary>
WAIT_AGV_REACH_LINE,
/// <summary>
/// 等待大料架解绑
/// </summary>
WAIT_BIG_SHELF_UNLOCK,
/// <summary>
/// 等待AGV载大料架返回双层线
/// </summary>
WAIT_BIG_SHELF_BACK_DOUBLE_LINE,
/// <summary>
/// 等待AGV到达停车位
/// </summary>
WAIT_BIG_SHELF_BACK_STANDYBY,
/// <summary>
/// 等待产线回应
/// </summary>
WAIT_LINE_RESPONSE,
/// <summary>
/// 等待料架进入产线
/// </summary>
WAIT__SHELF_IN_LINE,
/// <summary>
/// 进入产线完成
/// </summary>
END
}
}
......@@ -9,7 +9,7 @@ namespace AGVControl
/// <summary>
/// 客户端的节点
/// </summary>
public class ClientNode:Node
public class ClientNode : Node
{
private string rfid = "00";
......@@ -37,6 +37,10 @@ namespace AGVControl
public string AgvName { set; get; }
/// <summary>
/// 线体名(佳世达)
/// </summary>
public string LineName { set; get; }
/// <summary>
/// 节点位置的guid
/// </summary>
public string Pos_guid { set; get; }
......@@ -49,6 +53,23 @@ namespace AGVControl
/// </summary>
public PositionStru position;
/// <summary>
/// 空料架数量
/// </summary>
public int EmptyShelfCnt
{
get { return _EmptyShelfCnt; }
set
{
EmptyShelfCnt = _EmptyShelfCnt;
}
}
/// <summary>
/// 空架子的RFID
/// </summary>
public List<string> EmptyShelfRFIDs;
private int _EmptyShelfCnt = 0;
public string AliceName { get; set; }
/// <summary>
/// 客户端节点
......@@ -56,7 +77,7 @@ namespace AGVControl
/// <param name="name"></param>
/// <param name="ip"></param>
/// <param name="isUse"></param>
public ClientNode(string name, string ip, string aliceName, string pos_name, string pos_guid, bool isUse):base(name,ip,isUse)
public ClientNode(string name, string ip, string aliceName,string lineName, string pos_name, string pos_guid, bool isUse,int emptyCnt) : base(name, ip, isUse)
{
AliceName = aliceName;
......@@ -64,8 +85,11 @@ namespace AGVControl
AgvName = "";
Online = false;
IsUse = isUse;
_EmptyShelfCnt = emptyCnt;
this.Pos_name = pos_name;
this.Pos_guid = pos_guid;
LineName = lineName;
EmptyShelfRFIDs = new List<string>();
}
/// <summary>
......@@ -75,21 +99,53 @@ namespace AGVControl
/// <param name="rfid"></param>
/// <param name="action"></param>
/// <param name="level"></param>
public ClientNode(string name, string rfid = "", eNodeStatus status = eNodeStatus.None):base(name)
public ClientNode(string name, string rfid = "", eNodeStatus status = eNodeStatus.None) : base(name)
{
RFID = rfid;
nodeStatus = status;
AgvName = "";
}
/// <summary>
///空料架数量增加,如果RFID相同,不增加数量
/// </summary>
public void IncreEmptyShelfCnt(string rfid="")
{
if(!rfid.Equals("") && !EmptyShelfRFIDs.Contains(rfid))
{
System.Threading.Interlocked.Increment(ref _EmptyShelfCnt);
EmptyShelfRFIDs.Add(rfid);
Common.WriteIni(Name, SettingString.EmptyShelfCnt,_EmptyShelfCnt.ToString());
}
else if(rfid.Equals(""))
{
System.Threading.Interlocked.Increment(ref _EmptyShelfCnt);
Common.WriteIni(Name, SettingString.EmptyShelfCnt, _EmptyShelfCnt.ToString());
}
}
/// <summary>
/// 空料架数量减少1
/// </summary>
public void DecreEmptyShelfCnt()
{
if (_EmptyShelfCnt > 0)
{
System.Threading.Interlocked.Decrement(ref _EmptyShelfCnt);
Common.WriteIni(Name, SettingString.EmptyShelfCnt, _EmptyShelfCnt.ToString());
}
if(_EmptyShelfCnt.Equals(0) && EmptyShelfRFIDs.Count>0)
{
EmptyShelfRFIDs.Clear();
}
}
/// <summary>
/// 节点状态的文本形式
/// </summary>
/// <returns></returns>
public string StatetText()
{
string s = string.Format("[Name={0}, NodeStatus={1}, RFID={2}, AGVName={3}]", Name, nodeStatus.ToString(), RFID,AgvName);
string s = string.Format("[Name={0}, NodeStatus={1}, RFID={2}, AGVName={3}]", Name, nodeStatus.ToString(), RFID, AgvName);
return s;
}
......@@ -101,7 +157,7 @@ namespace AGVControl
s[1] = IP;
// if (Online)
// {
s[2] = string.Format("({0},{1})", position.X.ToString("f2"), position.Y.ToString("f2"));
s[2] = EmptyShelfCnt.ToString();//string.Format("({0},{1})", position.X.ToString("f2"), position.Y.ToString("f2"));
s[3] = nodeStatus.ToString();
s[4] = RFID;
s[5] = AgvName;
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AGVControl
{
/// <summary>
/// 双层线有料料架出口
/// </summary>
public class DoubleLineNodeFor4C : ClientNode
{
public DoubleLineNodeFor4C(string name, string ip, string aliceName,string lineName, string pos_name, string pos_guid, bool isUse,int emptyCnt): base(name,ip, aliceName,lineName,pos_name,pos_guid, isUse, emptyCnt)
{
}
/// <summary>
/// 双层线任务
/// </summary>
/// <param name="currentAgv"></param>
/// <returns></returns>
public override Job GetNewJob(Agv_Info currentAgv)
{
if (!Common.CheckCanExecuteMission(currentAgv))
return null;
if (!Common.CheckAGVStatusNone(currentAgv))
return null;
//执行空料架任务的小车数量
int emptyJobCnt = 0;
foreach (Agv_Info agv in Common.agvInfo)
{
if (!SettingString.C4_AGV_IPs.Contains(agv.IP))
continue;
if (agv.CurJob is GoEmptyShelfLineJob || agv.CurJob is EmptyShelfBackJob)
{
emptyJobCnt++;
}
}
if ((SettingString.AGVCNT - emptyJobCnt).Equals(1))//保留一辆小车出满料架
{
return null;
}
//出工单料的目的地是否有空料架
if (Common.FindEmptyShelfBeforeSendFullShelf(out string nodeName))
{
if (nodeName.StartsWith("G") && SettingString.C4_AGV_IPs.Contains(currentAgv.IP))
{
ClientNode clientNode = Common.nodeInfo.Find(s => s.Name.Equals(nodeName));
int cnt = 0;
foreach (Agv_Info agv in Common.agvInfo)
{
if (agv.CurJob is GoEmptyShelfLineJob)
{
if (((GoEmptyShelfLineJob)agv.CurJob).EmptyShelfPlace.Equals(nodeName))
cnt++;
}
}
if (cnt < clientNode.EmptyShelfCnt)
{
return new GoEmptyShelfLineJob(currentAgv.Place, nodeName);
}
}
}
//出满料
if (Common.FindFullShelfTask(currentAgv))
{
return new GoFullShelfStationJob(currentAgv.Place);
}
//回收空料架
if (Common.FindEmptyShelfNode(currentAgv, out string emptyNodeName))
{
return new GoEmptyShelfLineJob(currentAgv.Place, emptyNodeName);
}
return null;
}
}
}
using log4net.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AGVControl
{
/// <summary>
///
/// </summary>
public class DoubleLineNodeFor4D : ClientNode
{
public DoubleLineNodeFor4D(string name, string ip, string aliceName, string lineName, string pos_name, string pos_guid, bool isUse, int emptyCnt) : base(name, ip, aliceName, lineName, pos_name, pos_guid, isUse, emptyCnt)
{
}
/// <summary>
/// 双层线任务
/// </summary>
/// <param name="currentAgv"></param>
/// <returns></returns>
public override Job GetNewJob(Agv_Info currentAgv)
{
if (!Common.CheckCanExecuteMission(currentAgv))
return null;
if (!Common.CheckAGVStatusNone(currentAgv))
return null;
//执行空料架任务的小车数量
int emptyJobCnt = 0;
foreach (Agv_Info agv in Common.agvInfo)
{
if (SettingString.C4_AGV_IPs.Contains(agv.IP))
continue;
if (agv.CurJob is GoEmptyShelfLineJob || agv.CurJob is EmptyShelfBackJob)
{
emptyJobCnt++;
}
}
if ((SettingString.AGVCNT / 2 - emptyJobCnt).Equals(1))//保留一辆小车出满料架
{
return null;
}
//出工单料的目的地是否有空料架
if (Common.FindEmptyShelfBeforeSendFullShelf(out string nodeName))
{
if (nodeName.StartsWith("E") && !SettingString.C4_AGV_IPs.Contains(currentAgv.IP))
{
ClientNode clientNode = Common.nodeInfo.Find(s => s.Name.Equals(nodeName));
int cnt = 0;
foreach (Agv_Info agv in Common.agvInfo)
{
if (SettingString.C4_AGV_IPs.Contains(agv.IP))
continue;
if (agv.CurJob is GoEmptyShelfLineJob)
{
if (((GoEmptyShelfLineJob)agv.CurJob).EmptyShelfPlace.Equals(nodeName))
cnt++;
}
}
if (cnt < clientNode.EmptyShelfCnt)
{
return new GoEmptyShelfLineJob(currentAgv.Place, nodeName);
}
}
}
//出满料
if (Common.FindFullShelfTask(currentAgv))
{
return new GoFullShelfStationJob(currentAgv.Place);
}
//回收空料架
if (Common.FindEmptyShelfNode(currentAgv, out string emptyNodeName))
{
return new GoEmptyShelfLineJob(currentAgv.Place, emptyNodeName);
}
return null;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AGVControl
{
/// <summary>
///
/// </summary>
public class InDoubleLineNode : ClientNode
{
public InDoubleLineNode(string name, string ip, string aliceName, string pos_name, string pos_guid, bool isUse): base(name,ip, aliceName,pos_name,pos_guid, isUse)
{
}
public override Job GetNewJob(Agv_Info agv)
{
//
return null;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AGVControl
{
/// <summary>
/// 双层线有料料架出口
/// </summary>
public class OutDoubleLineNode : ClientNode
{
public OutDoubleLineNode(string name, string ip, string aliceName, string pos_name, string pos_guid, bool isUse): base(name,ip, aliceName,pos_name,pos_guid, isUse)
{
}
public override Job GetNewJob(Agv_Info agv)
{
//如果有要出的料架,判断目的地线体是否空料架,如果有,暂时不出,返回
return null;
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<log4net>
<appender name="AgvServer" type="log4net.Appender.RollingFileAppender">
<file value="logs/AgvServer.log"/>
<param name="Encoding" value="UTF-8"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date][%t][%c:%L]%-5p %m%n"/>
</layout>
</appender>
<appender name="LineWebService" type="log4net.Appender.RollingFileAppender">
<file value="logs/LineWebService.log"/>
<param name="Encoding" value="UTF-8"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date][%t][%c:%L]%-5p %m%n"/>
</layout>
</appender>
<logger>
<level value="Debug"/>
<appender-ref ref="LineWebService"/>
</logger>
<root>
<level value="Debug"/>
<appender-ref ref="AgvServer"/>
</root>
</log4net>
<appSettings>
<add key="ITS" value="http://10.85.17.233/ESMTCommonInterface/CommonService.asmx/VMIGetBoxDestInfo?boxRFID=" />
<add key="WebService" value="http://127.0.0.1/BenQMIR/Webservice/AGVService.asmx/" />
<add key="http.server" value="http://10.85.199.25/myproject/" />
<add key="FLEET" value="10.85.199.3" />
<add key="AutoCharge" value="True" />
<add key="ChargeWait" value="1" />
<add key="ChargeThreshold" value="20,70" />
</appSettings>
<system.serviceModel>
<services>
<!--添加服务-->
<service name="BLL.ClsWebService" behaviorConfiguration="CalculatorServiceBehavior">
<!--name 必须与代码中的host实例初始化的服务一样
behaviorConfiguration 行为配置 -->
<host>
<baseAddresses>
<!--添加调用服务地址-->
<add baseAddress="http://10.85.199.1/BenQMIR/Webservice/AGVService.asmx/"/>
</baseAddresses>
</host>
<!--添加契约接口 contract="WcfDemo.IService1" WcfDemo.IService1为契约接口 binding="wsHttpBinding" wsHttpBinding为通过Http调用-->
<endpoint address="" binding="wsHttpBinding" contract="BLL.IWebService"></endpoint>
</service>
</services>
<!--定义CalculatorServiceBehavior的行为-->
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
\ No newline at end of file
......@@ -31,12 +31,20 @@
4C-10线,MoveG10,c0b75c41-ca7d-11ea-9a66-94c691a7387d
4C-FeedeerIn,MoveG21,0a657afd-ca9d-11ea-9a66-94c691a7387d
4C-FeedeerOut,MoveG22,83b9ba6d-cdb2-11ea-a3e4-94c691a7387d
4C-14线,MoveG14,2baac336-d0d4-11ea-a3e4-94c691a7387d
4C-15线,MoveG15,41cc7a90-d0d4-11ea-a3e4-94c691a7387d
4C-AirIn,MoveDoorAirIn,2dc71db5-d0cb-11ea-a3e4-94c691a7387d
4C-AirOut,MoveDoorAirOut,9bc63eaa-d0d3-11ea-a3e4-94c691a7387d
小车进料,Enter,51233d8c-c044-11ea-9a66-94c691a7387d
小车出料,Leave,2e433130-c045-11ea-9a66-94c691a7387d
1764充电桩,AutoCharge3,b7371c5f-c045-11ea-9a66-94c691a7387d
1763充电桩,AutoCharge4,1296084c-c046-11ea-9a66-94c691a7387d
1763充电桩,AutoCharge3,b7371c5f-c045-11ea-9a66-94c691a7387d
1764充电桩,AutoCharge4,1296084c-c046-11ea-9a66-94c691a7387d
1767充电桩,AutoCharge5,40c8f44e-c046-11ea-9a66-94c691a7387d
1768充电桩,AutoCharge6,56cca0a3-c046-11ea-9a66-94c691a7387d
小车初始化,Init,adcb7a04-b525-11ea-b6ad-00012998f5a0
小车进料-需要人员操作,EnterWaitUser,7fe98805-d245-11ea-a3e4-94c691a7387d
小车出料-需要人员操作,LeaveWaitUser,217f8bad-d246-11ea-a3e4-94c691a7387d
待机位,MoveStandby,ae6e4f12-c050-11ea-9a66-94c691a7387d
临时停车位,MoveStandbyTemp,d6c32ad3-d64e-11ea-a3e4-94c691a7387d
\ No newline at end of file
BenQ充电桩,AutoCharge7,8811a589-8793-11ea-87e1-000129922cf6
临时停车位,MoveStandbyTemp,d6c32ad3-d64e-11ea-a3e4-94c691a7387d
检查料架情况,CheckShelf,f3e46a3e-d734-11ea-a3e4-94c691a7387d
\ No newline at end of file
......@@ -3,3 +3,5 @@ Fleet ID,agv,IP,Ȩ,IOID
8,MiR_R1764,10.85.199.72,Basic ZGlzdHJpYnV0b3I6NjJmMmYwZjFlZmYxMGQzMTUyYzk1ZjZmMDU5NjU3NmU0ODJiYjhlNDQ4MDY0MzNmNGNmOTI5NzkyODM0YjAxNA==,007615a5-2220-11ea-99f2-94c691a73b53
9,MiR_R1767,10.85.199.73,Basic ZGlzdHJpYnV0b3I6NjJmMmYwZjFlZmYxMGQzMTUyYzk1ZjZmMDU5NjU3NmU0ODJiYjhlNDQ4MDY0MzNmNGNmOTI5NzkyODM0YjAxNA==,007615a5-2220-11ea-99f2-94c691a73b53
10,MiR_R1768,10.85.199.74,Basic ZGlzdHJpYnV0b3I6NjJmMmYwZjFlZmYxMGQzMTUyYzk1ZjZmMDU5NjU3NmU0ODJiYjhlNDQ4MDY0MzNmNGNmOTI5NzkyODM0YjAxNA==,007615a5-2220-11ea-99f2-94c691a73b53
2,MiR_R1579,10.85.199.80,Basic ZGlzdHJpYnV0b3I6NjJmMmYwZjFlZmYxMGQzMTUyYzk1ZjZmMDU5NjU3NmU0ODJiYjhlNDQ4MDY0MzNmNGNmOTI5NzkyODM0YjAxNA==,007615a5-2220-11ea-99f2-94c691a73b53
1,MiR_R1580,10.85.199.81,Basic ZGlzdHJpYnV0b3I6NjJmMmYwZjFlZmYxMGQzMTUyYzk1ZjZmMDU5NjU3NmU0ODJiYjhlNDQ4MDY0MzNmNGNmOTI5NzkyODM0YjAxNA==,007615a5-2220-11ea-99f2-94c691a73b53
²úÏßÃû,½ÚµãÃû,IP,λÖÃÃû³Æ,λÖÃguid
A5,A5,10.85.199.20,PA5,7ed952c3-b520-11ea-b6ad-00012998f5a0
A6,A6,10.85.199.20,PA6,929eb1c2-b520-11ea-b6ad-00012998f5a0
D1,E1,10.85.199.42,DL1,3b823fe4-b368-11ea-a1a5-00012999830e
D2,E2,10.85.199.90,DL2,ede15fcb-b367-11ea-a1a5-00012999830e
D3,E3,10.85.199.91,DL3,43855a9b-b365-11ea-a1a5-00012999830e
D4,E4,10.85.199.92,DL4,73c8b98c-b368-11ea-a1a5-00012999830e
D5,E5,10.85.199.93,DL5,5436efd7-b432-11ea-a1a5-00012999830e
D6,E6,10.85.199.94,DL6,6b7710c1-b432-11ea-a1a5-00012999830e
D8,E8,10.85.199.95,DL8,8f039d2e-b432-11ea-a1a5-00012999830e
D9,E9,10.85.199.180,DL9,9e0b64ab-b432-11ea-a1a5-00012999830e
D10,E10,10.85.199.181,DL10,aec7da80-b432-11ea-a1a5-00012999830e
D11,E11,10.85.199.182,DL11,c10984c9-b432-11ea-a1a5-00012999830e
D12,E12,10.85.199.183,DL12,d6e0b92a-b432-11ea-a1a5-00012999830e
D14,E14,10.85.199.184,DL14,efb04c55-b432-11ea-a1a5-00012999830e
D15,E15,10.85.199.185,DL15,fd6b1f95-b432-11ea-a1a5-00012999830e
D16,E16,10.85.199.96,line_16,ac6c413e-895e-11ea-9374-000129922ca6
Feeder,E21,,PA21,
FeederOut,E22,,PA22,
C1,G1,,PA23,
C2,G2,,PA24,
C3,G3,,PA25,
C4,G4,,PA26,
C5,G5,,PA27,
C6,G6,,PA28,
C7,G7,,PA29,
C8,G8,,PA30,
C9,G9,,PA31,
C10,G10,,PA32,
C11,G11,,PA33,
C12,G12,,PA34,
C13,G13,,PA35,
C14,G14,,PA36,
C15,G15,,PA37,
C16,G16,,PA38,
产线名,节点名,IP,产线别名,位置名称,位置guid
A5,A5,10.85.199.20,下料区(A5),PA5,7ed952c3-b520-11ea-b6ad-00012998f5a0
A6,A6,10.85.199.20,上料区(A6),PA6,929eb1c2-b520-11ea-b6ad-00012998f5a0
D1,E1,10.85.199.1,4D-1线,DL1,3b823fe4-b368-11ea-a1a5-00012999830e
D2,E2,10.85.199.1,4D-2线,DL2,ede15fcb-b367-11ea-a1a5-00012999830e
D3,E3,10.85.199.1,4D-3线,DL3,43855a9b-b365-11ea-a1a5-00012999830e
D4,E4,10.85.199.1,4D-4线,DL4,73c8b98c-b368-11ea-a1a5-00012999830e
D5,E5,10.85.199.1,4D-5线,DL5,5436efd7-b432-11ea-a1a5-00012999830e
D6,E6,10.85.199.1,4D-6线,DL6,6b7710c1-b432-11ea-a1a5-00012999830e
D8,E8,10.85.199.1,4D-8线,DL8,8f039d2e-b432-11ea-a1a5-00012999830e
D9,E9,10.85.199.1,4D-9线,DL9,9e0b64ab-b432-11ea-a1a5-00012999830e
D10,E10,10.85.199.1,4D-10线,DL10,aec7da80-b432-11ea-a1a5-00012999830e
D11,E11,10.85.199.1,4D-11线,DL11,c10984c9-b432-11ea-a1a5-00012999830e
D12,E12,10.85.199.1,4D-12线,DL12,d6e0b92a-b432-11ea-a1a5-00012999830e
D14,E14,10.85.199.1,4D-14线,DL14,efb04c55-b432-11ea-a1a5-00012999830e
D15,E15,10.85.199.1,4D-15线,DL15,fd6b1f95-b432-11ea-a1a5-00012999830e
D16,E16,10.85.199.1,4D-16线,line_16,ac6c413e-895e-11ea-9374-000129922ca6
D1,E1,10.85.199.42,4D-1线,DL1,3b823fe4-b368-11ea-a1a5-00012999830e
D2,E2,10.85.199.90,4D-2线,DL2,ede15fcb-b367-11ea-a1a5-00012999830e
D3,E3,10.85.199.91,4D-3线,DL3,43855a9b-b365-11ea-a1a5-00012999830e
D4,E4,10.85.199.92,4D-4线,DL4,73c8b98c-b368-11ea-a1a5-00012999830e
D5,E5,10.85.199.93,4D-5线,DL5,5436efd7-b432-11ea-a1a5-00012999830e
D6,E6,10.85.199.94,4D-6线,DL6,6b7710c1-b432-11ea-a1a5-00012999830e
D8,E8,10.85.199.95,4D-8线,DL8,8f039d2e-b432-11ea-a1a5-00012999830e
D9,E9,10.85.199.180,4D-9线,DL9,9e0b64ab-b432-11ea-a1a5-00012999830e
D10,E10,10.85.199.181,4D-10线,DL10,aec7da80-b432-11ea-a1a5-00012999830e
D11,E11,10.85.199.182,4D-11线,DL11,c10984c9-b432-11ea-a1a5-00012999830e
D12,E12,10.85.199.183,4D-12线,DL12,d6e0b92a-b432-11ea-a1a5-00012999830e
D14,E14,10.85.199.184,4D-14线,DL14,efb04c55-b432-11ea-a1a5-00012999830e
D15,E15,10.85.199.185,4D-15线,DL15,fd6b1f95-b432-11ea-a1a5-00012999830e
FeederIn,E21,10.85.199.1,4D-FeedeerIn,FI,1e546c3a-8abe-11ea-ab63-000129922ca6
FeederOut,E22,10.85.199.1,4D-FeederOut,FO,431649a4-8abe-11ea-ab63-000129922ca6
C1,G1,10.85.199.1,4C-1线,G1,d402fbc2-cdac-11ea-a3e4-94c691a7387d
C2,G2,10.85.199.1,4C-2线,G2,ce0d60e9-cdac-11ea-a3e4-94c691a7387d
C3,G3,10.85.199.1,4C-3线,G3,c768170a-cdac-11ea-a3e4-94c691a7387d
C4,G4,10.85.199.1,4C-4线,G4,c2de9745-cdac-11ea-a3e4-94c691a7387d
C5,G5,10.85.199.1,4C-5线,G5,be468ef4-cdac-11ea-a3e4-94c691a7387d
C6,G6,10.85.199.1,4C-6线,G6,b9117881-cdac-11ea-a3e4-94c691a7387d
C7,G7,10.85.199.1,4C-7线,G7,b3cda9db-cdac-11ea-a3e4-94c691a7387d
C8,G8,10.85.199.1,4C-8线,G8,ae09fc56-cdac-11ea-a3e4-94c691a7387d
C9,G9,10.85.199.1,4C-9线,G9,a64bdbbb-cdac-11ea-a3e4-94c691a7387d
C10,G10,10.85.199.1,4C-10线,G10,604b1c3c-ca4e-11ea-810b-00012999830e
C1,G1,10.85.199.50,4C-1线,G1,d402fbc2-cdac-11ea-a3e4-94c691a7387d
C2,G2,10.85.199.51,4C-2线,G2,ce0d60e9-cdac-11ea-a3e4-94c691a7387d
C3,G3,10.85.199.52,4C-3线,G3,c768170a-cdac-11ea-a3e4-94c691a7387d
C4,G4,10.85.199.53,4C-4线,G4,c2de9745-cdac-11ea-a3e4-94c691a7387d
C5,G5,10.85.199.54,4C-5线,G5,be468ef4-cdac-11ea-a3e4-94c691a7387d
C6,G6,10.85.199.55,4C-6线,G6,b9117881-cdac-11ea-a3e4-94c691a7387d
C7,G7,10.85.199.56,4C-7线,G7,b3cda9db-cdac-11ea-a3e4-94c691a7387d
C8,G8,10.85.199.57,4C-8线,G8,ae09fc56-cdac-11ea-a3e4-94c691a7387d
C9,G9,10.85.199.58,4C-9线,G9,a64bdbbb-cdac-11ea-a3e4-94c691a7387d
C10,G10,10.85.199.59,4C-10线,G10,604b1c3c-ca4e-11ea-810b-00012999830e
C14,G14,10.85.199.60,4C-14线,G14,07841fc6-d0d4-11ea-a3e4-94c691a7387d
C15,G15,10.85.199.61,4C-15线,G15,0efca2c6-d0d4-11ea-a3e4-94c691a7387d
4CFeederIn,G21,10.85.199.1,4C-FeederIn,tyty,cb7f117b-ca88-11ea-9b28-0001299981d4
4CFeederOut,G22,10.85.199.1,4C-FeederOut,tyty,cb7f117b-ca88-11ea-9b28-0001299981d4
D16,E16,10.85.199.96,4D-16线,line_16,ac6c413e-895e-11ea-9374-000129922ca6
C11,G11,10.85.199.1,4C-11线,PA33,
C12,G12,10.85.199.1,4C-12线,PA34,
C13,G13,10.85.199.1,4C-13线,PA35,
C14,G14,10.85.199.1,4C-14线,PA36,
C15,G15,10.85.199.1,4C-15线,PA37,
C16,G16,10.85.199.1,4C-16线,PA38,
[A5]
EmptyShelfCnt=0
IsUse=True
[E14]
EmptyShelfCnt=0
[MiR_R1763]
IsUse=True
RFID=
[MiR_R1764]
IsUse=True
RFID=
[MiR_R1767]
IsUse=False
RFID=
[E10]
EmptyShelfCnt=0
[MiR_R1768]
RFID=
[MiR_R1579]
RFID=
[MiR_R1580]
RFID=
[E4]
EmptyShelfCnt=0
[E3]
EmptyShelfCnt=0
此文件的差异太大,无法显示。
[2020-08-21 16:46:49,389][1]INFO =====程序开始=====
[2020-08-21 16:46:54,923][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/registers/20?whitelist=value Return:
[2020-08-21 16:46:54,923][1]DEBUG CheckAGVMissionState 获取PLC20失败
[2020-08-21 16:46:59,995][1]DEBUG HttpGet URL: http://10.85.199.72/api/v2.0.0/registers/20?whitelist=value Return:
[2020-08-21 16:46:59,995][1]DEBUG CheckAGVMissionState 获取PLC20失败
[2020-08-21 16:47:05,068][1]DEBUG HttpGet URL: http://10.85.199.73/api/v2.0.0/registers/20?whitelist=value Return:
[2020-08-21 16:47:05,068][1]DEBUG CheckAGVMissionState 获取PLC20失败
[2020-08-21 16:47:10,140][1]DEBUG HttpGet URL: http://10.85.199.74/api/v2.0.0/registers/20?whitelist=value Return:
[2020-08-21 16:47:10,141][1]DEBUG CheckAGVMissionState 获取PLC20失败
[2020-08-21 16:47:15,214][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/7ed952c3-b520-11ea-b6ad-00012998f5a0 Return:
[2020-08-21 16:47:15,214][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:47:20,289][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/929eb1c2-b520-11ea-b6ad-00012998f5a0 Return:
[2020-08-21 16:47:20,290][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:47:25,361][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/3b823fe4-b368-11ea-a1a5-00012999830e Return:
[2020-08-21 16:47:25,362][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:47:30,432][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/ede15fcb-b367-11ea-a1a5-00012999830e Return:
[2020-08-21 16:47:30,432][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:47:35,504][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/43855a9b-b365-11ea-a1a5-00012999830e Return:
[2020-08-21 16:47:35,504][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:47:40,574][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/73c8b98c-b368-11ea-a1a5-00012999830e Return:
[2020-08-21 16:47:40,574][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:47:45,646][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/5436efd7-b432-11ea-a1a5-00012999830e Return:
[2020-08-21 16:47:45,646][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:47:50,713][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/6b7710c1-b432-11ea-a1a5-00012999830e Return:
[2020-08-21 16:47:50,713][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:47:55,788][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/8f039d2e-b432-11ea-a1a5-00012999830e Return:
[2020-08-21 16:47:55,788][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:48:00,842][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/9e0b64ab-b432-11ea-a1a5-00012999830e Return:
[2020-08-21 16:48:00,842][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:48:05,914][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/aec7da80-b432-11ea-a1a5-00012999830e Return:
[2020-08-21 16:48:05,914][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:48:10,986][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/c10984c9-b432-11ea-a1a5-00012999830e Return:
[2020-08-21 16:48:10,986][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:48:16,054][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/d6e0b92a-b432-11ea-a1a5-00012999830e Return:
[2020-08-21 16:48:16,054][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:48:21,130][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/efb04c55-b432-11ea-a1a5-00012999830e Return:
[2020-08-21 16:48:21,130][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:48:26,199][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/fd6b1f95-b432-11ea-a1a5-00012999830e Return:
[2020-08-21 16:48:26,199][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:48:31,271][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/ac6c413e-895e-11ea-9374-000129922ca6 Return:
[2020-08-21 16:48:31,271][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:48:36,339][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/1e546c3a-8abe-11ea-ab63-000129922ca6 Return:
[2020-08-21 16:48:36,339][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:48:41,410][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/431649a4-8abe-11ea-ab63-000129922ca6 Return:
[2020-08-21 16:48:41,410][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:48:46,479][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/d402fbc2-cdac-11ea-a3e4-94c691a7387d Return:
[2020-08-21 16:48:46,480][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:48:51,551][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/ce0d60e9-cdac-11ea-a3e4-94c691a7387d Return:
[2020-08-21 16:48:51,551][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:48:56,621][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/c768170a-cdac-11ea-a3e4-94c691a7387d Return:
[2020-08-21 16:48:56,621][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:01,690][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/c2de9745-cdac-11ea-a3e4-94c691a7387d Return:
[2020-08-21 16:49:01,690][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:06,761][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/be468ef4-cdac-11ea-a3e4-94c691a7387d Return:
[2020-08-21 16:49:06,761][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:11,830][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/b9117881-cdac-11ea-a3e4-94c691a7387d Return:
[2020-08-21 16:49:11,830][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:16,901][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/b3cda9db-cdac-11ea-a3e4-94c691a7387d Return:
[2020-08-21 16:49:16,901][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:21,974][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/ae09fc56-cdac-11ea-a3e4-94c691a7387d Return:
[2020-08-21 16:49:21,975][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:27,045][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/a64bdbbb-cdac-11ea-a3e4-94c691a7387d Return:
[2020-08-21 16:49:27,045][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:32,117][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/604b1c3c-ca4e-11ea-810b-00012999830e Return:
[2020-08-21 16:49:32,118][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:37,190][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/cb7f117b-ca88-11ea-9b28-0001299981d4 Return:
[2020-08-21 16:49:37,190][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:42,262][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/positions/cb7f117b-ca88-11ea-9b28-0001299981d4 Return:
[2020-08-21 16:49:42,262][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:42,313][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:42,364][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:42,415][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:42,466][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:42,517][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:42,568][1]DEBUG GetNodesPosition 获取节点位置失败
[2020-08-21 16:49:42,571][1]INFO Server Start
[2020-08-21 16:50:14,632][1]INFO Web服务已开启
[2020-08-21 16:50:20,305][1]DEBUG HttpGet URL: http://10.85.199.71/api/v2.0.0/io_modules/007615a5-2220-11ea-99f2-94c691a73b53/status Return:
[2020-08-21 16:50:20,305][1]DEBUG URL: http://10.85.199.71/api/v2.0.0/io_modules/007615a5-2220-11ea-99f2-94c691a73b53/status
Return:
[2020-08-21 16:50:25,399][1]DEBUG HttpGet URL: http://10.85.199.72/api/v2.0.0/io_modules/007615a5-2220-11ea-99f2-94c691a73b53/status Return:
[2020-08-21 16:50:25,399][1]DEBUG URL: http://10.85.199.72/api/v2.0.0/io_modules/007615a5-2220-11ea-99f2-94c691a73b53/status
Return:
[2020-08-21 16:50:30,419][1]DEBUG HttpGet URL: http://10.85.199.73/api/v2.0.0/io_modules/007615a5-2220-11ea-99f2-94c691a73b53/status Return:
[2020-08-21 16:50:30,419][1]DEBUG URL: http://10.85.199.73/api/v2.0.0/io_modules/007615a5-2220-11ea-99f2-94c691a73b53/status
Return:
[2020-08-21 16:50:35,445][1]DEBUG HttpGet URL: http://10.85.199.74/api/v2.0.0/io_modules/007615a5-2220-11ea-99f2-94c691a73b53/status Return:
[2020-08-21 16:50:35,445][1]DEBUG URL: http://10.85.199.74/api/v2.0.0/io_modules/007615a5-2220-11ea-99f2-94c691a73b53/status
Return:
[2020-08-21 16:50:45,589][10]DEBUG KeepLive 没有找到A5
[2020-08-21 16:50:48,591][10]DEBUG KeepLive 没有找到A6
[2020-08-21 16:50:51,592][10]DEBUG KeepLive 没有找到E1
[2020-08-21 16:50:54,593][10]DEBUG KeepLive 没有找到E2
[2020-08-21 16:50:57,594][10]DEBUG KeepLive 没有找到E3
[2020-08-21 16:50:58,595][7]INFO 服务端关闭连接,退出阻塞Accept
[2020-08-21 16:50:58,632][1]INFO Server Stop
[2020-08-21 16:50:58,812][1]INFO Web服务已关闭
[2020-08-21 16:50:58,813][1]INFO =====程序结束=====
1f9cc62a5cafecaff6c9aebe222cba49e942feb7
c80efb32df29ae6d02401af2394727ab4c7b5793
......@@ -51,4 +51,3 @@ C:\myproject\Gitee\AGVControl-Qisda-ProductionLine\AGVControl-ProductionLine\bin
C:\myproject\Gitee\AGVControl-Qisda-ProductionLine\AGVControl-ProductionLine\obj\Debug\AGVControl-ProductionLine.csproj.CopyComplete
C:\myproject\Gitee\AGVControl-Qisda-ProductionLine\AGVControl-ProductionLine\obj\Debug\AGVControl-ProductionLine.exe
C:\myproject\Gitee\AGVControl-Qisda-ProductionLine\AGVControl-ProductionLine\obj\Debug\AGVControl-ProductionLine.pdb
C:\myproject\Gitee\AGVControl-Qisda-ProductionLine\AGVControl-ProductionLine\obj\Debug\AGVControl-ProductionLine.csprojAssemblyReference.cache
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!