using HH.WCS.JiaTong.api; using HH.WCS.JiaTong.device; using HH.WCS.JiaTong.dispatch; using HH.WCS.JiaTong.util; using HH.WCS.JiaTong.wms; using Newtonsoft.Json; using S7.Net; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using static HH.WCS.JiaTong.LISTA.process.HttpModel; using static System.Collections.Specialized.BitVector32; namespace HH.WCS.JiaTong.process { /// /// 设备信号处理,主要是tcp信号,我们做server被动接收信号来处理,根据项目定制的 /// internal class DeviceProcess { internal static void Analysis(string data, string ip) { if (data.Length >= 6) { //去掉消息头3F 00 data = data.Substring(4); //Console.WriteLine($"{ip}-{data}"); var plc = Settings.deviceInfos.Where(a => a.address == ip && a.enable == 1).FirstOrDefault(); if (plc != null) { if (plc.deviceType == 1) { if (data == "") { // Traystacker(plc); } } } else { Console.WriteLine($"TCP信号处理:未查询到IP为{ip}的数据,请检查deviceInfo配置中心是否存在该IP的数据!"); } } } /// /// 叠盘机空托返回 /// internal static void Traystacker(string loc, int qty, int type) { try { //上传数据 Traystacker result1 = new Traystacker() { station = loc, taskSource = 1, Qty = qty, dpType = type }; HttpHelper httpHelper = new HttpHelper(); Result result = new Result(); string date = JsonConvert.SerializeObject(result1); var url = Settings.tableUrls.Find(a => a.id == 3); if (url != null) { LogHelper.Info($"叠盘机空托返回:地址:{url.url},内容:{date}"); var r = httpHelper.WebPost(url.url, date); result = JsonConvert.DeserializeObject(r); if (result.code == "0") { LogHelper.Info($"叠盘机空托返回请求成功"); } else { LogHelper.Info($"叠盘机空托返回请求失败=>msg:{result.msg}"); } } else { LogHelper.Info($"叠盘机空托:根据id=3,未找到配置链接,请检查配置文件"); } } catch (Exception ex) { LogHelper.Error($"叠盘机空托返回 Error=>{ex.ToString()}", ex); } } /// /// 原材料库agv叠盘回库 /// internal static void Traffic() { var db = new SqlHelper().GetInstance(); List locs = new List() { "LCDP-001" }; var location = db.Queryable().Where(a => locs.Contains(a.S_CODE)).ToList(); if (location.Count > 0) { string cntrcode = ""; foreach (var item in location) { if (item.N_CURRENT_NUM >= 6) { var cntr = db.Queryable().Where(a => a.S_LOC_CODE.Trim() == item.S_CODE).ToList(); if (cntr.Count > 0) { var cntrcodes = cntr.Select(a => a.S_CNTR_CODE).ToArray(); cntrcode = string.Join(",", cntrcodes); } //创建过未完成的任务不发起请求 var mst = WCSHelper.GetTaskByStartloc(item.S_CODE); if (mst == null) { AgvEmptyBack(item.S_CODE, cntrcode); } } } } } /// /// 井松agv叠盘回库 /// internal static void KjTraffic() { var db = new SqlHelper().GetInstance(); List locs = new List() { "PMDDW-001" }; var location = db.Queryable().Where(a => locs.Contains(a.S_CODE)).ToList(); if (location.Count > 0) { // string cntrcode = ""; foreach (var item in location) { if (item.N_CURRENT_NUM >= 6) { //var cntr = db.Queryable().Where(a => a.S_LOC_CODE.Trim() == item.S_CODE).ToList(); //if (cntr.Count > 0) //{ // var cntrcodes = cntr.Select(a => a.S_CNTR_CODE).ToArray(); // cntrcode = string.Join(",", cntrcodes); //} //创建过未完成的任务不发起请求 var mst = WCSHelper.GetTaskByStartloc(item.S_CODE); if (mst == null) { Traystacker(item.S_CODE, item.N_CURRENT_NUM, 1); } } } } } /// /// 井松叠盘机叠盘回库 /// internal static void DpjTraffic() { var devices = Settings.deviceInfos.Where(a => a.deviceType == 1).ToList(); //var db = new SqlHelper().GetInstance(); //var list = db.Queryable().Where(a => a.N_CURRENT_NUM > 0 && a.N_LOCK_STATE == 0).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList(); try { if (devices.Count > 0) { foreach (var device in devices) { var IsDp = S7Helper.ReadDpj(device.address,2001, S7.Net.VarType.Byte); var value = S7Helper.ReadDpj(device.address,2014, S7.Net.VarType.Int); if (value >= 1 && IsDp == 1) { //var cntr = db.Queryable().Where(a => a.S_LOC_CODE.Trim() == item.S_CODE).ToList(); //if (cntr.Count > 0) //{ // var cntrcodes = cntr.Select(a => a.S_CNTR_CODE).ToArray(); // cntrcode = string.Join(",", cntrcodes); //} //创建过未完成的任务不发起请求 var mst = WCSHelper.GetTaskByStartloc(device.TN_Location); if (mst == null) { Traystacker(device.TN_Location, value, 2); } else { LogHelper.Info($"有执行中的叠盘回库任务{mst.S_CODE},不触发叠盘任务"); } } else { LogHelper.Info($"叠盘机数量:{value},叠盘信号:{IsDp},不触发叠盘任务"); } Thread.Sleep(8000); } } } catch (Exception ex) { LogHelper.Error($"ReadDpj DpjTraffic:{ex}", ex); } } /// /// 原材料库接口访问 /// internal static void AgvEmptyBack(string loc, string cntrcode) { try { string partNumber = ""; //上传数据 Resultmobox result1 = new Resultmobox() { Name = "EmptyCntrReturn", Source = "HostToAgv" }; Traystackermobox traystacker = new Traystackermobox() { LocationCode = loc, CntrCode = cntrcode, PartNumber = partNumber, Qty = 6 }; result1.data = traystacker; HttpHelper httpHelper = new HttpHelper(); //调用接口 Resultmobox result = new Resultmobox(); string date = JsonConvert.SerializeObject(result1); string url = Settings.tableUrls.Find(a => a.id == 11).url; LogHelper.Info($"空托返回:地址:{url},内容:{date}"); var r = httpHelper.WebPostycl(url, date); result = JsonConvert.DeserializeObject(r); if (result.err_code == "0") { LogHelper.Info($"空托返回请求成功"); } else { LogHelper.Info($"空托返回请求失败=>msg:{result.err_msg}"); } } catch (Exception ex) { LogHelper.Info($"空托返回 Error=>{ex.ToString()}"); } } } }