1.初版差异提交
This commit is contained in:
@@ -185,6 +185,7 @@ namespace AGVSystem
|
|||||||
temp.Read_dt = DateTime.Now;
|
temp.Read_dt = DateTime.Now;
|
||||||
UPDateDBList.upDbList.Add(new Location_Log(DateTime.Now, temp.Agv_ID, temp.Location_Display, location_value, 0, 0, 0));
|
UPDateDBList.upDbList.Add(new Location_Log(DateTime.Now, temp.Agv_ID, temp.Location_Display, location_value, 0, 0, 0));
|
||||||
}
|
}
|
||||||
|
WriteTxt.SaveLog1("=========》(11):" + location_temp, temp.Agv_ID + "#Agv", "调试日志");
|
||||||
#region 路口放行判断
|
#region 路口放行判断
|
||||||
if (temp.Cross_Location_Go != location_temp && location_value > 0 && location_value < 2000)
|
if (temp.Cross_Location_Go != location_temp && location_value > 0 && location_value < 2000)
|
||||||
{
|
{
|
||||||
@@ -361,10 +362,12 @@ namespace AGVSystem
|
|||||||
#region 海康交管
|
#region 海康交管
|
||||||
else if (Frm_A17168.businessCtrl.apiModel.waitRfidList.Split(',').Contains(location_temp.ToString()))
|
else if (Frm_A17168.businessCtrl.apiModel.waitRfidList.Split(',').Contains(location_temp.ToString()))
|
||||||
{
|
{
|
||||||
|
WriteTxt.SaveLog1("=========》(12):" + location_temp, temp.Agv_ID + "#Agv", "调试日志");
|
||||||
if (Frm_A17168.businessCtrl == null) Frm_A17168.businessCtrl = new BusinessManage();
|
if (Frm_A17168.businessCtrl == null) Frm_A17168.businessCtrl = new BusinessManage();
|
||||||
if (Frm_A17168.leavedDic == null) Frm_A17168.leavedDic = new Dictionary<int, int>();
|
if (Frm_A17168.leavedDic == null) Frm_A17168.leavedDic = new Dictionary<int, int>();
|
||||||
if (!Frm_A17168.leavedDic.ContainsKey(temp.Agv_ID)) Frm_A17168.leavedDic.Add(temp.Agv_ID, 0);
|
if (!Frm_A17168.leavedDic.ContainsKey(temp.Agv_ID)) Frm_A17168.leavedDic.Add(temp.Agv_ID, 0);
|
||||||
bool flg = false;
|
bool flg = false;
|
||||||
|
WriteTxt.SaveLog1(location_temp.ToString() + "开始请求放行", "放行日志" + (temp.Agv_ID), "插件日志");
|
||||||
//2秒请求一次
|
//2秒请求一次
|
||||||
if (Frm_A17168.leavedDic[temp.Agv_ID] % Frm_A17168.businessCtrl.apiModel.requestSecond == 0)
|
if (Frm_A17168.leavedDic[temp.Agv_ID] % Frm_A17168.businessCtrl.apiModel.requestSecond == 0)
|
||||||
{
|
{
|
||||||
@@ -375,16 +378,15 @@ namespace AGVSystem
|
|||||||
//放行
|
//放行
|
||||||
if (flg)
|
if (flg)
|
||||||
{
|
{
|
||||||
// if (Link_To_PLC.WriteGo(temp.Agv_ID) == 0)
|
WriteTxt.SaveLog1("=========》(13):" + location_temp, temp.Agv_ID + "#Agv", "调试日志");
|
||||||
// {
|
//登记第三方交管路口占用
|
||||||
// Frm_A17168.leavedDic[temp.Agv_ID] = 0;
|
TrafficModel trafficModel = Frm_A17168.autoLeavedDic.Find(_ => _.areaCode.Equals(location_temp.ToString()));
|
||||||
// WriteTxt.SaveLog1(location_temp.ToString() + "路口已放行", "放行日志" + (temp.Agv_ID), "插件日志");
|
if (trafficModel != null)
|
||||||
// t_temp = 0;
|
{
|
||||||
// temp.Cross_Location_Go = location_temp;
|
trafficModel.agvId = temp.Agv_ID;
|
||||||
// }
|
trafficModel.InArea = DateTime.Now;
|
||||||
|
}
|
||||||
|
WriteTxt.SaveLog1(location_temp.ToString() + "路口添加" + trafficModel?.areaCode + "(" + trafficModel.agvId + ")", "放行日志" + (temp.Agv_ID), "插件日志");
|
||||||
|
|
||||||
if (Link_To_PC.WriteInfo(1, 0, 0) == 0)
|
if (Link_To_PC.WriteInfo(1, 0, 0) == 0)
|
||||||
{
|
{
|
||||||
Frm_A17168.leavedDic[temp.Agv_ID] = 0;
|
Frm_A17168.leavedDic[temp.Agv_ID] = 0;
|
||||||
@@ -402,23 +404,31 @@ namespace AGVSystem
|
|||||||
//{
|
//{
|
||||||
else if (Frm_A17168.businessCtrl.apiModel.leavedRfidList.Split(',').Contains(location_temp.ToString()))
|
else if (Frm_A17168.businessCtrl.apiModel.leavedRfidList.Split(',').Contains(location_temp.ToString()))
|
||||||
{
|
{
|
||||||
|
WriteTxt.SaveLog1("=========》(14):" + location_temp, temp.Agv_ID + "#Agv", "调试日志");
|
||||||
if (Frm_A17168.businessCtrl == null) Frm_A17168.businessCtrl = new BusinessManage();
|
if (Frm_A17168.businessCtrl == null) Frm_A17168.businessCtrl = new BusinessManage();
|
||||||
if (Frm_A17168.leavedDic == null) Frm_A17168.leavedDic = new Dictionary<int, int>();
|
if (Frm_A17168.leavedDic == null) Frm_A17168.leavedDic = new Dictionary<int, int>();
|
||||||
if (!Frm_A17168.leavedDic.ContainsKey(temp.Agv_ID)) Frm_A17168.leavedDic.Add(temp.Agv_ID, 0);
|
if (!Frm_A17168.leavedDic.ContainsKey(temp.Agv_ID)) Frm_A17168.leavedDic.Add(temp.Agv_ID, 0);
|
||||||
bool flg = false;
|
bool flg = false;
|
||||||
|
WriteTxt.SaveLog1(location_temp.ToString() + "开始请求释放", "放行日志" + (temp.Agv_ID), "插件日志");
|
||||||
|
|
||||||
if (Frm_A17168.leavedDic[temp.Agv_ID] % Frm_A17168.businessCtrl.apiModel.requestSecond == 0)
|
if (Frm_A17168.leavedDic[temp.Agv_ID] % Frm_A17168.businessCtrl.apiModel.requestSecond == 0)
|
||||||
{
|
{
|
||||||
flg = Frm_A17168.businessCtrl.ByLeaved(temp.Agv_ID.ToString(), location_temp.ToString(), lockCode.ToString());
|
flg = Frm_A17168.businessCtrl.ByLeaved(temp.Agv_ID.ToString(), location_temp.ToString(), (location_temp - 1).ToString());
|
||||||
WriteTxt.SaveLog1(location_temp.ToString() + "离开释放返回的值" + flg, "放行日志" + (temp.Agv_ID), "插件日志");
|
WriteTxt.SaveLog1(location_temp.ToString() + "离开释放返回的值" + flg, "放行日志" + (temp.Agv_ID), "插件日志");
|
||||||
}
|
}
|
||||||
//归还
|
//归还
|
||||||
if (flg)
|
if (flg)
|
||||||
{
|
{
|
||||||
|
WriteTxt.SaveLog1("=========》(15):" + location_temp, temp.Agv_ID + "#Agv", "调试日志");
|
||||||
Frm_A17168.leavedDic[temp.Agv_ID] = 0;
|
Frm_A17168.leavedDic[temp.Agv_ID] = 0;
|
||||||
temp.Cross_Location_Go = location_temp;
|
temp.Cross_Location_Go = location_temp;
|
||||||
lockCode = location_temp;
|
lockCode = location_temp;
|
||||||
|
//清除第三方交管路口占用
|
||||||
|
TrafficModel trafficModel2 = Frm_A17168.autoLeavedDic.Find(_ => _.areaCode.Equals(location_temp.ToString()));
|
||||||
|
if (trafficModel2 != null)
|
||||||
|
{
|
||||||
|
trafficModel2.agvId = 0;
|
||||||
|
}
|
||||||
WriteTxt.SaveLog1(location_temp.ToString() + "路口已归还", "放行日志" + (temp.Agv_ID), "插件日志");
|
WriteTxt.SaveLog1(location_temp.ToString() + "路口已归还", "放行日志" + (temp.Agv_ID), "插件日志");
|
||||||
}
|
}
|
||||||
Frm_A17168.leavedDic[temp.Agv_ID]++;
|
Frm_A17168.leavedDic[temp.Agv_ID]++;
|
||||||
@@ -467,8 +477,11 @@ namespace AGVSystem
|
|||||||
Convert.ToString(param_info[6], 2).PadLeft(8, '0') +
|
Convert.ToString(param_info[6], 2).PadLeft(8, '0') +
|
||||||
Convert.ToString(param_info[5], 2).PadLeft(8, '0') +
|
Convert.ToString(param_info[5], 2).PadLeft(8, '0') +
|
||||||
Convert.ToString(param_info[4], 2).PadLeft(8, '0');
|
Convert.ToString(param_info[4], 2).PadLeft(8, '0');
|
||||||
Thread.Sleep(100);
|
ThreadPool.QueueUserWorkItem(delegate
|
||||||
Warn_Deal(temp, sWarn);
|
{
|
||||||
|
Thread.Sleep(100);
|
||||||
|
Warn_Deal(temp, sWarn);
|
||||||
|
});
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -608,8 +621,6 @@ namespace AGVSystem
|
|||||||
WriteTxt.SaveLog1("AGV经过地标:" + location_temp, temp.Agv_ID + "#Agv", "地标日志");
|
WriteTxt.SaveLog1("AGV经过地标:" + location_temp, temp.Agv_ID + "#Agv", "地标日志");
|
||||||
//地标信息
|
//地标信息
|
||||||
temp.Location_Display = location_temp;
|
temp.Location_Display = location_temp;
|
||||||
//记录充电
|
|
||||||
Func.Change_Rec(temp.Agv_ID, location_temp, temp.Location_Display, temp.Read_dt);
|
|
||||||
|
|
||||||
temp.Read_dt = DateTime.Now;
|
temp.Read_dt = DateTime.Now;
|
||||||
//Func.db_conn.Command("INSERT INTO [Location_Log] ([Dt] ,[Agv_ID] ,[Loc_ID] ,[Value] ,[Loc_ID2] ,[Value2],[Value3]) VALUES ('" +
|
//Func.db_conn.Command("INSERT INTO [Location_Log] ([Dt] ,[Agv_ID] ,[Loc_ID] ,[Value] ,[Loc_ID2] ,[Value2],[Value3]) VALUES ('" +
|
||||||
@@ -617,13 +628,13 @@ namespace AGVSystem
|
|||||||
string strsql = "INSERT INTO [Location_Log] ([Dt] ,[Agv_ID] ,[Loc_ID] ,[Value] ,[Loc_ID2] ,[Value2],[Value3]) VALUES ('" +
|
string strsql = "INSERT INTO [Location_Log] ([Dt] ,[Agv_ID] ,[Loc_ID] ,[Value] ,[Loc_ID2] ,[Value2],[Value3]) VALUES ('" +
|
||||||
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'," + temp.Agv_ID + "," + location_temp + "," + location_value + "," + 0 + "," + 0 + "," + 0 + ")";
|
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'," + temp.Agv_ID + "," + location_temp + "," + location_value + "," + 0 + "," + 0 + "," + 0 + ")";
|
||||||
|
|
||||||
bBllBase.ExecuteNonQuery(strsql);
|
UPDateDBList.sqlList.Add(strsql);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Math.Abs(errorcount) > 0) errorcount = 0;
|
if (Math.Abs(errorcount) > 0) errorcount = 0;
|
||||||
|
|
||||||
|
WriteTxt.SaveLog1("=========》(21):" + location_temp, temp.Agv_ID + "#Agv", "调试日志");
|
||||||
|
|
||||||
#region 路口放行判断
|
#region 路口放行判断
|
||||||
if (temp.Cross_Location_Go != location_temp && location_value > 0 && location_value < 2000)
|
if (temp.Cross_Location_Go != location_temp && location_value > 0 && location_value < 2000)
|
||||||
@@ -799,10 +810,12 @@ namespace AGVSystem
|
|||||||
#region 海康交管
|
#region 海康交管
|
||||||
else if (Frm_A17168.businessCtrl.apiModel.waitRfidList.Split(',').Contains(location_temp.ToString()))
|
else if (Frm_A17168.businessCtrl.apiModel.waitRfidList.Split(',').Contains(location_temp.ToString()))
|
||||||
{
|
{
|
||||||
|
WriteTxt.SaveLog1("=========》(22):" + location_temp, temp.Agv_ID + "#Agv", "调试日志");
|
||||||
if (Frm_A17168.businessCtrl == null) Frm_A17168.businessCtrl = new BusinessManage();
|
if (Frm_A17168.businessCtrl == null) Frm_A17168.businessCtrl = new BusinessManage();
|
||||||
if (Frm_A17168.leavedDic == null) Frm_A17168.leavedDic = new Dictionary<int, int>();
|
if (Frm_A17168.leavedDic == null) Frm_A17168.leavedDic = new Dictionary<int, int>();
|
||||||
if (!Frm_A17168.leavedDic.ContainsKey(temp.Agv_ID)) Frm_A17168.leavedDic.Add(temp.Agv_ID, 0);
|
if (!Frm_A17168.leavedDic.ContainsKey(temp.Agv_ID)) Frm_A17168.leavedDic.Add(temp.Agv_ID, 0);
|
||||||
bool flg = false;
|
bool flg = false;
|
||||||
|
WriteTxt.SaveLog1(location_temp.ToString() + "开始请求放行", "放行日志" + (temp.Agv_ID), "插件日志");
|
||||||
//2秒请求一次
|
//2秒请求一次
|
||||||
if (Frm_A17168.leavedDic[temp.Agv_ID] % Frm_A17168.businessCtrl.apiModel.requestSecond == 0)
|
if (Frm_A17168.leavedDic[temp.Agv_ID] % Frm_A17168.businessCtrl.apiModel.requestSecond == 0)
|
||||||
{
|
{
|
||||||
@@ -821,8 +834,15 @@ namespace AGVSystem
|
|||||||
// temp.Cross_Location_Go = location_temp;
|
// temp.Cross_Location_Go = location_temp;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
WriteTxt.SaveLog1("=========》(23):" + location_temp, temp.Agv_ID + "#Agv", "调试日志");
|
||||||
|
//登记第三方交管路口占用
|
||||||
|
TrafficModel trafficModel = Frm_A17168.autoLeavedDic.Find(_ => _.areaCode.Equals(location_temp.ToString()));
|
||||||
|
if (trafficModel != null)
|
||||||
|
{
|
||||||
|
trafficModel.agvId = temp.Agv_ID;
|
||||||
|
trafficModel.InArea = DateTime.Now;
|
||||||
|
}
|
||||||
|
WriteTxt.SaveLog1(location_temp.ToString() + "路口添加" + trafficModel?.areaCode + "(" + trafficModel.agvId + ")", "放行日志" + (temp.Agv_ID), "插件日志");
|
||||||
if (Link_To_PLC.WriteVW(2, 116, temp.Location_Display) == 0)
|
if (Link_To_PLC.WriteVW(2, 116, temp.Location_Display) == 0)
|
||||||
{
|
{
|
||||||
Frm_A17168.leavedDic[temp.Agv_ID] = 0;
|
Frm_A17168.leavedDic[temp.Agv_ID] = 0;
|
||||||
@@ -840,23 +860,31 @@ namespace AGVSystem
|
|||||||
//{
|
//{
|
||||||
else if (Frm_A17168.businessCtrl.apiModel.leavedRfidList.Split(',').Contains(location_temp.ToString()))
|
else if (Frm_A17168.businessCtrl.apiModel.leavedRfidList.Split(',').Contains(location_temp.ToString()))
|
||||||
{
|
{
|
||||||
|
WriteTxt.SaveLog1("=========》(24):" + location_temp, temp.Agv_ID + "#Agv", "调试日志");
|
||||||
if (Frm_A17168.businessCtrl == null) Frm_A17168.businessCtrl = new BusinessManage();
|
if (Frm_A17168.businessCtrl == null) Frm_A17168.businessCtrl = new BusinessManage();
|
||||||
if (Frm_A17168.leavedDic == null) Frm_A17168.leavedDic = new Dictionary<int, int>();
|
if (Frm_A17168.leavedDic == null) Frm_A17168.leavedDic = new Dictionary<int, int>();
|
||||||
if (!Frm_A17168.leavedDic.ContainsKey(temp.Agv_ID)) Frm_A17168.leavedDic.Add(temp.Agv_ID, 0);
|
if (!Frm_A17168.leavedDic.ContainsKey(temp.Agv_ID)) Frm_A17168.leavedDic.Add(temp.Agv_ID, 0);
|
||||||
bool flg = false;
|
bool flg = false;
|
||||||
|
WriteTxt.SaveLog1(location_temp.ToString() + "开始请求释放", "放行日志" + (temp.Agv_ID), "插件日志");
|
||||||
|
|
||||||
if (Frm_A17168.leavedDic[temp.Agv_ID] % Frm_A17168.businessCtrl.apiModel.requestSecond == 0)
|
if (Frm_A17168.leavedDic[temp.Agv_ID] % Frm_A17168.businessCtrl.apiModel.requestSecond == 0)
|
||||||
{
|
{
|
||||||
flg = Frm_A17168.businessCtrl.ByLeaved(temp.Agv_ID.ToString(), location_temp.ToString(), lockCode.ToString());
|
flg = Frm_A17168.businessCtrl.ByLeaved(temp.Agv_ID.ToString(), location_temp.ToString(), (location_temp - 1).ToString());
|
||||||
WriteTxt.SaveLog1(location_temp.ToString() + "离开释放返回的值" + flg, "放行日志" + (temp.Agv_ID), "插件日志");
|
WriteTxt.SaveLog1(location_temp.ToString() + "离开释放返回的值" + flg, "放行日志" + (temp.Agv_ID), "插件日志");
|
||||||
}
|
}
|
||||||
//归还
|
//归还
|
||||||
if (flg)
|
if (flg)
|
||||||
{
|
{
|
||||||
|
WriteTxt.SaveLog1("=========》(25):" + location_temp, temp.Agv_ID + "#Agv", "调试日志");
|
||||||
Frm_A17168.leavedDic[temp.Agv_ID] = 0;
|
Frm_A17168.leavedDic[temp.Agv_ID] = 0;
|
||||||
temp.Cross_Location_Go = location_temp;
|
temp.Cross_Location_Go = location_temp;
|
||||||
lockCode = location_temp;
|
lockCode = location_temp;
|
||||||
|
//清除第三方交管路口占用
|
||||||
|
TrafficModel trafficModel2 = Frm_A17168.autoLeavedDic.Find(_ => _.areaCode.Equals(location_temp.ToString()));
|
||||||
|
if (trafficModel2 != null)
|
||||||
|
{
|
||||||
|
trafficModel2.agvId = 0;
|
||||||
|
}
|
||||||
WriteTxt.SaveLog1(location_temp.ToString() + "路口已归还", "放行日志" + (temp.Agv_ID), "插件日志");
|
WriteTxt.SaveLog1(location_temp.ToString() + "路口已归还", "放行日志" + (temp.Agv_ID), "插件日志");
|
||||||
}
|
}
|
||||||
Frm_A17168.leavedDic[temp.Agv_ID]++;
|
Frm_A17168.leavedDic[temp.Agv_ID]++;
|
||||||
@@ -902,8 +930,11 @@ namespace AGVSystem
|
|||||||
|
|
||||||
string sWarn = (Convert.ToString(WarnRead[0], 2).PadLeft(8, '0') + Convert.ToString(WarnRead[1], 2).PadLeft(8, '0')).PadLeft(64, '0');
|
string sWarn = (Convert.ToString(WarnRead[0], 2).PadLeft(8, '0') + Convert.ToString(WarnRead[1], 2).PadLeft(8, '0')).PadLeft(64, '0');
|
||||||
|
|
||||||
Thread.Sleep(100);
|
ThreadPool.QueueUserWorkItem(delegate
|
||||||
Warn_Deal_Plc(temp, sWarn);
|
{
|
||||||
|
Thread.Sleep(100);
|
||||||
|
Warn_Deal_Plc(temp, sWarn);
|
||||||
|
});
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,14 @@ namespace AGVSystem
|
|||||||
public static ClsDBConn_sql db_station = new ClsDBConn_sql();
|
public static ClsDBConn_sql db_station = new ClsDBConn_sql();
|
||||||
public static ClsDBConn_sql db_Agv_Info = new ClsDBConn_sql();
|
public static ClsDBConn_sql db_Agv_Info = new ClsDBConn_sql();
|
||||||
public static BusinessManage businessCtrl;
|
public static BusinessManage businessCtrl;
|
||||||
|
/// <summary>
|
||||||
|
/// 第三方交管自动归还秒数
|
||||||
|
/// </summary>
|
||||||
|
public static int TraffAutoTimet = 0;
|
||||||
|
/// <summary>
|
||||||
|
/// 第三方交管路口占用列表
|
||||||
|
/// </summary>
|
||||||
|
public static List<TrafficModel> autoLeavedDic = new List<TrafficModel>();
|
||||||
public static Dictionary<int, int> leavedDic = new Dictionary<int, int>();
|
public static Dictionary<int, int> leavedDic = new Dictionary<int, int>();
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Array_Station_Info [17,12]
|
/// Array_Station_Info [17,12]
|
||||||
@@ -111,6 +119,22 @@ namespace AGVSystem
|
|||||||
mainfrm.Map2 = panel2;
|
mainfrm.Map2 = panel2;
|
||||||
mainfrm.Map3 = panel1;
|
mainfrm.Map3 = panel1;
|
||||||
businessCtrl = new BusinessManage();
|
businessCtrl = new BusinessManage();
|
||||||
|
//初始化第三方交管路口占用列表
|
||||||
|
if (businessCtrl != null && businessCtrl.apiModel != null)
|
||||||
|
{
|
||||||
|
TraffAutoTimet = businessCtrl.apiModel.AutoTime;
|
||||||
|
if (!string.IsNullOrEmpty(businessCtrl.apiModel.waitRfidList))
|
||||||
|
{
|
||||||
|
autoLeavedDic = new List<TrafficModel>();
|
||||||
|
foreach (string areaCode in businessCtrl.apiModel.waitRfidList.Split(','))
|
||||||
|
{
|
||||||
|
autoLeavedDic.Add(new TrafficModel
|
||||||
|
{
|
||||||
|
areaCode = areaCode
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
this.ControlBox = false;
|
this.ControlBox = false;
|
||||||
this.Width = mainfrm.newmainfrm.ClientSize.Width - 5;
|
this.Width = mainfrm.newmainfrm.ClientSize.Width - 5;
|
||||||
this.Height = mainfrm.newmainfrm.ClientSize.Height - 29 - 74 - 22 - 5;
|
this.Height = mainfrm.newmainfrm.ClientSize.Height - 29 - 74 - 22 - 5;
|
||||||
@@ -304,6 +328,10 @@ namespace AGVSystem
|
|||||||
Thread dbThread = new Thread(UPDateDBList.UpDateDb);
|
Thread dbThread = new Thread(UPDateDBList.UpDateDb);
|
||||||
dbThread.IsBackground = true;
|
dbThread.IsBackground = true;
|
||||||
dbThread.Start();
|
dbThread.Start();
|
||||||
|
//第三方交管自动归还监听线程
|
||||||
|
Thread trafficThread = new Thread(TrafficCtrl.Listen);
|
||||||
|
trafficThread.IsBackground = true;
|
||||||
|
trafficThread.Start();
|
||||||
//初始化小车控制线程
|
//初始化小车控制线程
|
||||||
Cls.Param.th_GetData = new Thread[Cls.Param.AGV_Qty];
|
Cls.Param.th_GetData = new Thread[Cls.Param.AGV_Qty];
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
using System;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
|
namespace AGVSystem.A17168
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 第三方交管自动归还路权监听
|
||||||
|
/// </summary>
|
||||||
|
public class TrafficCtrl
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 获取AGV当前地标
|
||||||
|
/// </summary>
|
||||||
|
private static int Agv_Land(int agvid)
|
||||||
|
{
|
||||||
|
for (byte b = 0; b < Func.AgvInfo.Length; b++)
|
||||||
|
{
|
||||||
|
if (Func.AgvInfo[b].Agv_ID == agvid)
|
||||||
|
{
|
||||||
|
return Func.AgvInfo[b].Location_Display;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 监听线程:占用超过AutoTime秒的路口自动归还路权
|
||||||
|
/// </summary>
|
||||||
|
public static void Listen()
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (Frm_A17168.businessCtrl?.apiModel == null)
|
||||||
|
continue;
|
||||||
|
int autoTime = Frm_A17168.businessCtrl.apiModel.AutoTime;
|
||||||
|
if (autoTime == 0 || string.IsNullOrEmpty(Frm_A17168.businessCtrl.apiModel.waitRfidList) || Frm_A17168.autoLeavedDic == null || Frm_A17168.autoLeavedDic.Count <= 0)
|
||||||
|
continue;
|
||||||
|
foreach (TrafficModel item in Frm_A17168.autoLeavedDic)
|
||||||
|
{
|
||||||
|
if (item.agvId == 0)
|
||||||
|
continue;
|
||||||
|
if ((DateTime.Now - item.InArea).TotalSeconds > autoTime)
|
||||||
|
{
|
||||||
|
bool flag = Frm_A17168.businessCtrl.ByLeaved(item.agvId.ToString(), Agv_Land(item.agvId).ToString(), item.areaCode.ToString());
|
||||||
|
WriteTxt.SaveLog1(item.areaCode.ToString() + "自动释放,返回的值" + flag, "放行日志" + item.agvId, "插件日志");
|
||||||
|
if (flag)
|
||||||
|
{
|
||||||
|
Frm_A17168.leavedDic[item.agvId] = 0;
|
||||||
|
item.agvId = 0;
|
||||||
|
WriteTxt.SaveLog1(item.areaCode.ToString() + "路口已自动归还", "放行日志" + item.agvId, "插件日志");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
WriteTxt.SaveLog1("第三方交管监听线程异常!" + ex.ToString(), "异常日志", "插件日志");
|
||||||
|
}
|
||||||
|
Thread.Sleep(1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace AGVSystem.A17168
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 第三方交管路口占用模型
|
||||||
|
/// </summary>
|
||||||
|
public class TrafficModel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 路口(交汇区)地标编号
|
||||||
|
/// </summary>
|
||||||
|
public string areaCode { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 当前占用该路口的AGV编号,0=空闲
|
||||||
|
/// </summary>
|
||||||
|
public int agvId { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 进入路口时间
|
||||||
|
/// </summary>
|
||||||
|
public DateTime InArea { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -184,6 +184,8 @@
|
|||||||
<Compile Include="A17168\Frm_A17168.Designer.cs">
|
<Compile Include="A17168\Frm_A17168.Designer.cs">
|
||||||
<DependentUpon>Frm_A17168.cs</DependentUpon>
|
<DependentUpon>Frm_A17168.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="A17168\TrafficCtrl.cs" />
|
||||||
|
<Compile Include="A17168\TrafficModel.cs" />
|
||||||
<Compile Include="A17168\UPDateDBList.cs" />
|
<Compile Include="A17168\UPDateDBList.cs" />
|
||||||
<Compile Include="AboutBox1.cs">
|
<Compile Include="AboutBox1.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
|
|||||||
@@ -67,6 +67,9 @@ namespace AGVSystem
|
|||||||
lab.Tag = Assembly_ID + "-" + id;
|
lab.Tag = Assembly_ID + "-" + id;
|
||||||
lab.DoubleClick += new System.EventHandler(Cls.Path_Reset.label12_DoubleClick);
|
lab.DoubleClick += new System.EventHandler(Cls.Path_Reset.label12_DoubleClick);
|
||||||
lab.MouseClick += new MouseEventHandler(label_MouseClick);
|
lab.MouseClick += new MouseEventHandler(label_MouseClick);
|
||||||
|
lab.MouseUp += new MouseEventHandler(label_UpClick);
|
||||||
|
lab.MouseDown += new MouseEventHandler(label_DownClick);
|
||||||
|
lab.MouseMove += new MouseEventHandler(label_MoveClick);
|
||||||
}
|
}
|
||||||
else if (Cls.Param.Display_CrossID == false)
|
else if (Cls.Param.Display_CrossID == false)
|
||||||
{
|
{
|
||||||
@@ -117,6 +120,85 @@ namespace AGVSystem
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool moveFlag = false;
|
||||||
|
private static int xPos;
|
||||||
|
private static int yPos;
|
||||||
|
/// <summary>
|
||||||
|
/// 松开鼠标:按住Ctrl且已登录管理员时,确认后更新地标坐标
|
||||||
|
/// </summary>
|
||||||
|
private static void label_UpClick(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
moveFlag = false;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if ((Control.ModifierKeys & Keys.Control) != Keys.Control)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Cls.Param.UserName_temp == "")
|
||||||
|
{
|
||||||
|
MessageBox.Show("请登录管理员权限!", "AGV调度管理系统", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Label label = (Label)sender;
|
||||||
|
int num = Convert.ToInt16(label.Text);
|
||||||
|
if (MessageBox.Show($"是否移动该{num}地标?", "消息", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) != DialogResult.No && label.Parent.GetType() == typeof(Panel))
|
||||||
|
{
|
||||||
|
Panel panel = label.Parent as Panel;
|
||||||
|
int y = panel.Top + Cls.Param.Icon_Size / 2;
|
||||||
|
int left = panel.Left;
|
||||||
|
Console.WriteLine(num + "up === X:" + left + "Y:" + y);
|
||||||
|
UpLocation(num, left, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void label_DownClick(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
moveFlag = true;
|
||||||
|
xPos = e.X;
|
||||||
|
yPos = e.Y;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 拖动地标所在Panel
|
||||||
|
/// </summary>
|
||||||
|
private static void label_MoveClick(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
if (moveFlag)
|
||||||
|
{
|
||||||
|
Label label = (Label)sender;
|
||||||
|
int num = Convert.ToInt16(label.Text);
|
||||||
|
if (label.Parent.GetType() == typeof(Panel))
|
||||||
|
{
|
||||||
|
Panel panel = label.Parent as Panel;
|
||||||
|
panel.Top += e.Y - yPos;
|
||||||
|
panel.Left += e.X - xPos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新地标坐标到数据库
|
||||||
|
/// </summary>
|
||||||
|
private static void UpLocation(int rfid, int x, int y)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string text = db_conn.Command($"UPDATE [LandMarkInfo] SET [Loc_X] = {x},[Loc_Y] = {y} WHERE [Loc_ID] = {rfid}");
|
||||||
|
if (text == "1")
|
||||||
|
{
|
||||||
|
Console.WriteLine($"{rfid} 更新成功!x:{x},y:{y} ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static object obj_dgvupdate = new object();
|
private static object obj_dgvupdate = new object();
|
||||||
public static void DgvUpdate(DataGridView dgv, int row, string columnname, bool value)
|
public static void DgvUpdate(DataGridView dgv, int row, string columnname, bool value)
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using AGVSystem.A17168;
|
||||||
|
|
||||||
namespace AGVSystem.Cls
|
namespace AGVSystem.Cls
|
||||||
{
|
{
|
||||||
@@ -16,6 +17,7 @@ namespace AGVSystem.Cls
|
|||||||
int[] num = new int[2];
|
int[] num = new int[2];
|
||||||
num[0] = Convert.ToInt16(((System.Windows.Forms.Label)sender).Tag.ToString().Split('-')[0]);
|
num[0] = Convert.ToInt16(((System.Windows.Forms.Label)sender).Tag.ToString().Split('-')[0]);
|
||||||
num[1] = Convert.ToInt16(((System.Windows.Forms.Label)sender).Tag.ToString().Split('-')[1]);
|
num[1] = Convert.ToInt16(((System.Windows.Forms.Label)sender).Tag.ToString().Split('-')[1]);
|
||||||
|
ClearOtherLand(num[1]);
|
||||||
for (int i = 0; i < mainfrm.ds_CrossInfo.Tables[0].Rows.Count; i++)
|
for (int i = 0; i < mainfrm.ds_CrossInfo.Tables[0].Rows.Count; i++)
|
||||||
{
|
{
|
||||||
string s = mainfrm.ds_CrossInfo.Tables[0].Rows[i]["当前地标编号"].ToString();
|
string s = mainfrm.ds_CrossInfo.Tables[0].Rows[i]["当前地标编号"].ToString();
|
||||||
@@ -29,5 +31,37 @@ namespace AGVSystem.Cls
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 复位路口时向第三方交管手动归还路权
|
||||||
|
/// </summary>
|
||||||
|
private static void ClearOtherLand(int land)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
foreach (TrafficModel item in Frm_A17168.autoLeavedDic)
|
||||||
|
{
|
||||||
|
if (item.agvId == 0)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (item.areaCode != land.ToString())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
bool flag = Frm_A17168.businessCtrl.ByLeaved(item.agvId.ToString(), land.ToString(), item.areaCode.ToString());
|
||||||
|
WriteTxt.SaveLog1(item.areaCode.ToString() + "手动释放,返回的值" + flag, "放行日志" + item.agvId, "插件日志");
|
||||||
|
if (flag)
|
||||||
|
{
|
||||||
|
Frm_A17168.leavedDic[item.agvId] = 0;
|
||||||
|
item.agvId = 0;
|
||||||
|
WriteTxt.SaveLog1(item.areaCode.ToString() + "路口已手动归还", "放行日志" + item.agvId, "插件日志");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace AGVSystem.Properties {
|
|||||||
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
|
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
|
||||||
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
|
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
|
||||||
// (以 /str 作为命令选项),或重新生成 VS 项目。
|
// (以 /str 作为命令选项),或重新生成 VS 项目。
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
internal class Resources {
|
internal class Resources {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ namespace AGVSystem.Properties {
|
|||||||
|
|
||||||
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.6.0.0")]
|
||||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||||
|
|
||||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
+42
@@ -632,3 +632,45 @@ D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\AGVSystem Ver2.0
|
|||||||
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.mainfrm.resources
|
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.mainfrm.resources
|
||||||
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.csproj.CoreCompileInputs.cache
|
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.csproj.CoreCompileInputs.cache
|
||||||
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.csproj.Up2Date
|
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.csproj.Up2Date
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\bin\Debug\华晓AGV管理系统.exe.config
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\bin\Debug\华晓AGV管理系统.exe
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\bin\Debug\华晓AGV管理系统.pdb
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\bin\Debug\BllSql.dll
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\bin\Debug\HxBusiness.dll
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\bin\Debug\Nancy.dll
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\bin\Debug\Newtonsoft.Json.dll
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\bin\Debug\BllSql.pdb
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\bin\Debug\HxBusiness.pdb
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\bin\Debug\Nancy.xml
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\bin\Debug\Newtonsoft.Json.xml
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.csproj.AssemblyReference.cache
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.Frm_A17168.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.AboutBox1.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.AGVManage.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.Agv_Status.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.APInfo.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.APTest.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.Control_Point.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.DatabaseSet.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.frmfind.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.frm_card.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.Frm_Path_Status.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.InputSet.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.Linemanage.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.Location_Set.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.logon.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.mainfrm.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.OutputSet.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.Point_loc_Set.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.Properties.Resources.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.SetControl.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.SysSet.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.warnlist.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.frmwarnfind.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.frmchangefind.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.frmnetfind.resources
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.csproj.GenerateResource.cache
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.csproj.CoreCompileInputs.cache
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\AGVSystem.csproj.Up2Date
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\华晓AGV管理系统.exe
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\AGVSystem Ver2.0\obj\x86\Debug\华晓AGV管理系统.pdb
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -89,3 +89,9 @@ D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\BllSql\obj\Debug
|
|||||||
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\BllSql\obj\Debug\BllSql.csproj.CoreCompileInputs.cache
|
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\BllSql\obj\Debug\BllSql.csproj.CoreCompileInputs.cache
|
||||||
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\BllSql\obj\Debug\BllSql.dll
|
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\BllSql\obj\Debug\BllSql.dll
|
||||||
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\BllSql\obj\Debug\BllSql.pdb
|
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\BllSql\obj\Debug\BllSql.pdb
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\BllSql\bin\Debug\BllSql.dll
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\BllSql\bin\Debug\BllSql.pdb
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\BllSql\obj\Debug\BllSql.csproj.AssemblyReference.cache
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\BllSql\obj\Debug\BllSql.csproj.CoreCompileInputs.cache
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\BllSql\obj\Debug\BllSql.dll
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\BllSql\obj\Debug\BllSql.pdb
|
||||||
|
|||||||
Binary file not shown.
@@ -155,7 +155,7 @@ namespace HxBusiness
|
|||||||
WriteTxt.SaveLog1("离开时请求时配置为空!", "异常日志");
|
WriteTxt.SaveLog1("离开时请求时配置为空!", "异常日志");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(agvid) || string.IsNullOrEmpty(rfid))
|
if (string.IsNullOrEmpty(agvid))
|
||||||
{
|
{
|
||||||
WriteTxt.SaveLog1("离开时请求时请求参数为空!", "异常日志");
|
WriteTxt.SaveLog1("离开时请求时请求参数为空!", "异常日志");
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -31,5 +31,9 @@ namespace HxBusiness
|
|||||||
/// 离开归还地标列表
|
/// 离开归还地标列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string leavedRfidList { get; set; }
|
public string leavedRfidList { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 自动归还路权秒数,0=手动归还
|
||||||
|
/// </summary>
|
||||||
|
public int AutoTime { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
@@ -128,3 +128,16 @@ D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\HxBusiness\obj\D
|
|||||||
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\HxBusiness\obj\Debug\HxBusiness.csproj.Up2Date
|
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\HxBusiness\obj\Debug\HxBusiness.csproj.Up2Date
|
||||||
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\HxBusiness\obj\Debug\HxBusiness.dll
|
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\HxBusiness\obj\Debug\HxBusiness.dll
|
||||||
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\HxBusiness\obj\Debug\HxBusiness.pdb
|
D:\Item\项目资料\05FG2608061\hx备份\CODE\20230901\SA17168\HxBusiness\obj\Debug\HxBusiness.pdb
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\HxBusiness\bin\Debug\HxBusiness.dll
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\HxBusiness\bin\Debug\HxBusiness.pdb
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\HxBusiness\bin\Debug\Nancy.dll
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\HxBusiness\bin\Debug\Nancy.Hosting.Self.dll
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\HxBusiness\bin\Debug\Newtonsoft.Json.dll
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\HxBusiness\bin\Debug\Nancy.xml
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\HxBusiness\bin\Debug\Nancy.Hosting.Self.xml
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\HxBusiness\bin\Debug\Newtonsoft.Json.xml
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\HxBusiness\obj\Debug\HxBusiness.csproj.AssemblyReference.cache
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\HxBusiness\obj\Debug\HxBusiness.csproj.CoreCompileInputs.cache
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\HxBusiness\obj\Debug\HxBusiness.csproj.Up2Date
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\HxBusiness\obj\Debug\HxBusiness.dll
|
||||||
|
D:\Item\项目资料\05FG2608061\FG2608061\CODE\20230901\SA17168\HxBusiness\obj\Debug\HxBusiness.pdb
|
||||||
|
|||||||
Binary file not shown.
@@ -0,0 +1,150 @@
|
|||||||
|
# 华晓AGV管理系统 源码与现场应用差异报告
|
||||||
|
|
||||||
|
> 生成日期:2026-08-19
|
||||||
|
> 比对方法:将「现场运行的二进制」与「CODE 源码重编译产物」用同一版本 ILSpy(ilspycmd 11.0.0.9375)、同一参数分别反编译为 C#,再逐类逐行 diff。两侧均带 PDB,局部变量名可还原,diff 结果即真实源码差异。
|
||||||
|
> 结论先行:**差异全部集中在主程序 exe 和 HxBusiness.dll,BllSql.dll 零差异**。所有差异均属于同一主题——「第三方交管(路权申请/归还)功能的完善」+「地标拖动调整坐标的小工具」+「日志增强」。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 比对对象与基线
|
||||||
|
|
||||||
|
| 项 | 现场(基准) | CODE 源码 |
|
||||||
|
|---|---|---|
|
||||||
|
| 华晓AGV管理系统.exe | 2023-09-18 编译,2,212,352 字节 | 快照 20230901,重编译 2,201,088 字节 |
|
||||||
|
| BllSql.dll | 2023-09-02 编译 | 同期 |
|
||||||
|
| HxBusiness.dll | 2023-09-15 编译 | 快照 20230901 |
|
||||||
|
| 其余 20 个第三方 DLL | 2015–2019 | **MD5 全部一致,无需处理** |
|
||||||
|
|
||||||
|
- 现场目录自带的 `华晓AGV管理系统.zip` 内是 2023-09-02 的旧 exe 备份,用它与源码重编译产物做了方法校准:仅 2 个文件 10 行差异(源码略新于 9/2 备份),证明比对方法可靠。
|
||||||
|
- 现场 exe 为 **Debug|x86 / .NET Framework 4.5.2** 构建,与 CODE 工程配置一致。
|
||||||
|
- 现场是用 **VS2022 (17.x)** 工具链构建的(Designer 生成代码版本号为 17.x,资源序列化格式与新工具链一致)。
|
||||||
|
|
||||||
|
## 2. 程序集级差异总览
|
||||||
|
|
||||||
|
| 程序集 | 差异 | 说明 |
|
||||||
|
|---|---|---|
|
||||||
|
| BllSql.dll | **无** | 反编译逐行一致,源码无需任何改动 |
|
||||||
|
| HxBusiness.dll | 2 处 | `ApiModel` 新增属性;`ByLeaved` 参数校验放宽 |
|
||||||
|
| 华晓AGV管理系统.exe | 新增 2 类 + 修改 4 文件 + 2 处生成器版本号 | 详见下文 |
|
||||||
|
|
||||||
|
## 3. HxBusiness.dll 差异明细
|
||||||
|
|
||||||
|
### 3.1 `Model\ApiModel.cs` — 新增属性
|
||||||
|
```csharp
|
||||||
|
public int AutoTime { get; set; } // 自动归还路权秒数,0=手动归还
|
||||||
|
```
|
||||||
|
与现场 `Config\ApiModel.json` 中新增的 `"AutoTime": 30` 对应。
|
||||||
|
|
||||||
|
### 3.2 `BusinessManage.cs` — `ByLeaved` 校验放宽
|
||||||
|
```csharp
|
||||||
|
// 旧(源码):
|
||||||
|
if (string.IsNullOrEmpty(agvid) || string.IsNullOrEmpty(rfid))
|
||||||
|
// 新(现场):
|
||||||
|
if (string.IsNullOrEmpty(agvid))
|
||||||
|
```
|
||||||
|
原因:交管自动/手动归还场景下 rfid 可能为空(TrafficCtrl 中 Agv_Land 可能返回 0),不应拒绝请求。
|
||||||
|
|
||||||
|
## 4. 华晓AGV管理系统.exe 差异明细
|
||||||
|
|
||||||
|
### 4.1 新增类 `A17168\TrafficModel.cs`
|
||||||
|
```csharp
|
||||||
|
public class TrafficModel
|
||||||
|
{
|
||||||
|
public string areaCode { get; set; } // 路口(交汇区)地标编号
|
||||||
|
public int agvId { get; set; } // 当前占用该路口的AGV,0=空闲
|
||||||
|
public DateTime InArea { get; set; } // 进入路口时间
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.2 新增类 `A17168\TrafficCtrl.cs` — 第三方交管自动归还监听线程
|
||||||
|
- `Listen()`:死循环(1s 周期)。当 `apiModel.AutoTime > 0` 且 `waitRfidList` 非空时,遍历 `Frm_A17168.autoLeavedDic`,对占用超过 `AutoTime` 秒的路口调用 `businessCtrl.ByLeaved(agvId, 当前地标, areaCode)` 自动归还路权,成功后清零 `leavedDic[agvId]` 与 `trafficModel.agvId`,写"放行日志X"(插件日志目录)。
|
||||||
|
- `Agv_Land(agvid)`:私有辅助,从 `Func.AgvInfo` 取该 AGV 当前地标。
|
||||||
|
- 异常写"异常日志"(插件日志),日志文案:`第三方交管监听线程异常!`。
|
||||||
|
|
||||||
|
### 4.3 `A17168\Frm_A17168.cs` — 3 处
|
||||||
|
1. 新增静态字段:
|
||||||
|
```csharp
|
||||||
|
public static int TraffAutoTimet = 0;
|
||||||
|
public static List<TrafficModel> autoLeavedDic = new List<TrafficModel>();
|
||||||
|
```
|
||||||
|
2. 构造函数中 `businessCtrl = new BusinessManage();` 之后新增初始化:按 `apiModel.waitRfidList` 逗号拆分,为每个路口建一个 `TrafficModel` 放入 `autoLeavedDic`,并读取 `TraffAutoTimet = apiModel.AutoTime`。
|
||||||
|
3. `Frm_A17168_Load` 中启动 `UPDateDBList.UpDateDb` 线程之后,新增启动交管监听线程:
|
||||||
|
```csharp
|
||||||
|
Thread thread2 = new Thread(TrafficCtrl.Listen);
|
||||||
|
thread2.IsBackground = true;
|
||||||
|
thread2.Start();
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.4 `A17168\Cls_A17168.cs` — 两个数据线程方法(AGV_Data 网口型 / AGV_Data2 S7-200型)同步修改
|
||||||
|
> 注:diff 中大量 `agvInfo→temp`、`num→location_temp` 为现场源码的**变量改名**(PDB 还原的真实命名),无语义影响,但为达成"反编译零差异"验收,回灌时同步改名。
|
||||||
|
|
||||||
|
真实语义差异(两个方法对称出现,编号 1x 为 AGV_Data,2x 为 AGV_Data2):
|
||||||
|
1. **调试日志埋点**:读到地标后写 `"=========》(11/21):" + 地标` 到"调试日志";进入 waitRfid 分支写(12/22);请求放行成功写(13/23);进入 leavedRfid 分支写(14/24);释放成功写(15/25)。
|
||||||
|
2. **放行前日志**:`地标 + "开始请求放行"` / `"开始请求释放"` 写入"放行日志{AgvID}"(插件日志)。
|
||||||
|
3. **放行成功后登记交管占用**(原来 `if (flag && WriteInfo(...)==0)` 拆为嵌套):
|
||||||
|
```csharp
|
||||||
|
if (flag)
|
||||||
|
{
|
||||||
|
TrafficModel m = Frm_A17168.autoLeavedDic.Find(_ => _.areaCode.Equals(location_temp.ToString()));
|
||||||
|
if (m != null) { m.agvId = temp.Agv_ID; m.InArea = DateTime.Now; }
|
||||||
|
WriteTxt.SaveLog1(location_temp + "路口添加" + m?.areaCode + "(" + m.agvId + ")", "放行日志" + temp.Agv_ID, "插件日志");
|
||||||
|
if (WriteInfo/WriteVW(...) == 0) { /* 原放行逻辑 */ }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
4. **归还接口第 3 参改变**:`ByLeaved(agvid, 当前地标, num3(上次放行地标))` → `ByLeaved(agvid, 当前地标, (当前地标-1))`(离开地标 = 进入地标+1 的约定)。
|
||||||
|
5. **归还成功后清除交管占用**:`autoLeavedDic` 中对应 `TrafficModel.agvId = 0`。
|
||||||
|
6. **报警处理异步化**:`Thread.Sleep(100); Warn_Deal(_Plc)(...)` 改为 `ThreadPool.QueueUserWorkItem(delegate { Thread.Sleep(100); Warn_Deal(_Plc)(temp, sWarn); });`,避免阻塞采集循环。
|
||||||
|
7. **仅 AGV_Data2**:地标变化时删除了 `Func.Change_Rec(...)` 调用;`Location_Log` 插入由同步 `bBllBase.ExecuteNonQuery(sql)` 改为 `UPDateDBList.sqlList.Add(item)` 异步批量入库。
|
||||||
|
8. 变量声明顺序/命名调整(`temp`、`location_temp`,`num2~num5` 重排)——纯改名,随语义项一并同步。
|
||||||
|
|
||||||
|
### 4.5 `Cls\Func.cs` — 新增"Ctrl+拖动地标改坐标"小工具
|
||||||
|
1. 新增静态字段:`moveFlag`、`xPos`、`yPos`。
|
||||||
|
2. `CreateLandMark`(路口地标创建分支)为 label 增挂 3 个事件:`MouseUp += label_UpClick; MouseDown += label_DownClick; MouseMove += label_MoveClick;`。
|
||||||
|
3. 新增 4 个私有静态方法:
|
||||||
|
- `label_DownClick`:按下记录起点,`moveFlag=true`;
|
||||||
|
- `label_MoveClick`:拖动时移动地标所在 Panel;
|
||||||
|
- `label_UpClick`:松开时若按住 Ctrl 且已登录管理员,弹窗确认后调用 `UpLocation`;
|
||||||
|
- `UpLocation(rfid,x,y)`:`UPDATE [LandMarkInfo] SET [Loc_X]=x,[Loc_Y]=y WHERE [Loc_ID]=rfid`。
|
||||||
|
|
||||||
|
### 4.6 `Cls\Path_Reset.cs` — 双击复位路口时手动归还路权
|
||||||
|
1. `label12_DoubleClick` 开头新增 `ClearOtherLand(array[1]);`。
|
||||||
|
2. 新增 `ClearOtherLand(int land)`:在 `autoLeavedDic` 中找到该路口且被占用(agvId≠0)的记录,调用 `businessCtrl.ByLeaved(agvId, land, areaCode)` 手动归还,成功后清零,写"手动释放/路口已手动归还"日志(插件日志)。
|
||||||
|
3. 文件头新增 `using AGVSystem.A17168;`。
|
||||||
|
|
||||||
|
### 4.7 生成器版本号(纯装饰,为达成零差异同步)
|
||||||
|
- `Properties\Resources.Designer.cs`:`StronglyTypedResourceBuilder` 版本 `16.0.0.0` → `17.0.0.0`
|
||||||
|
- `Properties\Settings.Designer.cs`:`SettingsSingleFileGenerator` 版本 `16.10.0.0` → `17.6.0.0`
|
||||||
|
|
||||||
|
## 5. 配置文件差异(不随 bin 替换,仅记录)
|
||||||
|
|
||||||
|
| 文件 | 差异 | 处理 |
|
||||||
|
|---|---|---|
|
||||||
|
| `Config\ApiModel.json` | 现场版(2024-03-04)`waitRfidList`/`leavedRfidList` 由 9 个路口扩到 25 个,新增 `"AutoTime": 30`(行尾带 `//` 注释,Json.NET 可解析) | **现场为准,替换 bin 时严禁覆盖**;建议将 CODE bin 内该文件同步为现场版便于本机调试 |
|
||||||
|
| `华晓AGV管理系统.exe.config`、`info.ini`、`agvinfo.ini`、`item.ini` | 无差异 | 不动 |
|
||||||
|
| `Nancy.Hosting.Self.dll` | 现场没有此文件;现场代码已不使用 NancyHost 自宿主(`BusinessManage` 中相关代码已注释) | 替换包中**不要**包含此 DLL |
|
||||||
|
|
||||||
|
## 6. 与整合无关的说明(查漏补缺结论)
|
||||||
|
|
||||||
|
1. 用户提供的 dnSpy 反编译 CODE(`反编译CODE\` 目录)与本报告的 ILSpy 反编译结果核对一致,未发现 dnSpy 导出遗漏的类型;其中 `SqlHelperParameterCache`、`E_State`、`RequestLeavedModel`、`SendModel`、`Channel`、`Location_Log` 等"多出来的文件"只是 dnSpy 按类拆分所致,源码中都存在。
|
||||||
|
2. CODE 中的 `Creat_Task.cs`、`Cls\Func - 副本 (2).cs` 未被 csproj 编译,现场 exe 中也无对应类型,保持现状即可。
|
||||||
|
3. 源码快照(20230901)略新于现场 zip 备份中 9/2 的 exe:多了"AGV经过地标"地标日志、`order by id`、部分路口数组扩容——即源码基线本身没有丢内容,缺的只是 9/2–9/18 的增量。
|
||||||
|
|
||||||
|
## 7. 回灌与验收
|
||||||
|
|
||||||
|
- 回灌范围:4.1–4.7 全部 + 3.1–3.2,共 10 个源文件(新增 2 个、修改 8 个,含 csproj 注册与 2 个 Designer 版本号)。
|
||||||
|
- 验收标准:重编译后,用同一 ilspycmd 反编译新 exe / HxBusiness.dll / BllSql.dll,与现场反编译结果 **逐行零差异**(反编译器自动生成的 csproj 除外,其差异仅为本机路径)。
|
||||||
|
- 替换清单(复制到现场目录):`华晓AGV管理系统.exe`、`华晓AGV管理系统.pdb`、`HxBusiness.dll`、`HxBusiness.pdb`(BllSql 无差异可不换)。
|
||||||
|
- 回滚:替换前备份现场原文件;现场目录自带 9/2 的 zip 备份可作最后手段。
|
||||||
|
|
||||||
|
### 验收结果(2026-08-19 已完成)
|
||||||
|
|
||||||
|
| 程序集 | 反编译比对结果 |
|
||||||
|
|---|---|
|
||||||
|
| 华晓AGV管理系统.exe | **53 个类型全部逐行一致**(`TrafficCtrl.Listen` 连 IL 字节长度都已对齐) |
|
||||||
|
| HxBusiness.dll | **全部逐行一致** |
|
||||||
|
| BllSql.dll | **全部逐行一致**(源码未改动,重编译即一致) |
|
||||||
|
|
||||||
|
细节备注:
|
||||||
|
1. 现场源码风格已在回灌中还原——`continue` 不带大括号(带括号会多一个 `nop` 字节改变 IL 标签号)、`TrafficCtrl` 的 foreach 采用两个独立守卫 `if`、`Frm_A17168` 初始化直接对 `Split(',')` 结果 foreach(不引入中间变量)。
|
||||||
|
2. `Func.label_UpClick` 现场 IL 采用"正向 if 包裹 + return"结构(297 字节),回灌版为等价的"取反守卫 return"结构(293 字节),两者反编译 C# 完全一致、行为完全一致,仅方法内部 IL 编排不同,不影响验收。
|
||||||
|
3. 之前 diff 中大量 `agvInfo→temp`、`num→location_temp` 的"改名"是反编译命名假象:现场代码因 lambda 闭包捕获把真实变量名保留进了元数据,回灌 lambda 后两侧命名自动对齐,非真实源码差异。
|
||||||
Reference in New Issue
Block a user