using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Comm; using WIDESEA_Core.EFDbContext; using WIDESEA_WCS.IRepositories; using WIDESEA_WCS.Repositories; using WIDESEA_WCS.WCSClient; using static System.Collections.Specialized.BitVector32; namespace WIDESEA_WCS { public class Gantry { static VOLContext Context = new VOLContext(); Idt_plcinfoheadRepository repository = new dt_plcinfoheadRepository(Context); Idt_plcinfodetailRepository plcRepository = new dt_plcinfodetailRepository(Context); Idt_geometry_dataRepository dataRepository = new dt_geometry_dataRepository(Context); Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context); #region 查询车轮数据 public void QueryWheeldata(PLCClient client) { try { var plc = repository.FindFirst(x => x.plcinfo_name == client.PLCName); List names = new List() { "1单元辊道下料查询车轮", "2单元辊道下料查询车轮", "3单元辊道下料查询车轮", "辊道上料查询车轮" }; foreach (string name in names) { var details = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep && x.plcdetail_number == name).ToList(); var on = DBExtension.Read(details.Where(x => x.plcdetail_name == "R_oi_on").First(), client); if ((byte)on == 1) { var wp_type = DBExtension.Read(details.Where(x => x.plcdetail_name == "R_o_wp_type").First(), client); var geometry = dataRepository.FindFirst(x => x.TypeId == (Int32)wp_type); if (geometry == null) { //DBExtension.Write(details.Where(x => x.plcdetail_name == "W_i_status").First(), client, (Int16)2); //1-找到数据,2-未找到工件类型数据 client.WriteByOrder("W_i_status", (byte)2, name); //屏蔽工艺(屏蔽视觉检测/屏蔽涂油); //client.WriteByOrder("W_i_skip_op", "1", name); client.WriteByOrder("R_oi_on", (byte)0, name); } else { //1-找到数据,2-未找到工件类型数据 client.WriteByOrder("W_i_status", (byte)1, name); client.WriteByOrder("W_i_parameter_a", (float)geometry.a, name); client.WriteByOrder("W_i_parameter_b", (float)geometry.b, name); client.WriteByOrder("W_i_parameter_c", (float)geometry.c, name); client.WriteByOrder("W_i_parameter_d", (float)geometry.d, name); client.WriteByOrder("W_i_parameter_e", (float)geometry.e, name); client.WriteByOrder("W_i_parameter_f", (float)geometry.f, name); client.WriteByOrder("W_i_parameter_g", (float)geometry.g, name); client.WriteByOrder("W_i_parameter_h", (float)geometry.h, name); //屏蔽工艺(屏蔽视觉检测/屏蔽涂油) if (name != "辊道上料查询车轮") { client.WriteByOrder("W_i_skip_op_SJ1", (byte)1, name);//屏蔽视觉检测设备1 client.WriteByOrder("W_i_skip_op_SJ2", (byte)1, name);//屏蔽视觉检测设备2 client.WriteByOrder("W_i_skip_op_LT", (byte)1, name);//屏蔽链条机 } client.WriteByOrder("R_oi_on", (byte)0, name); } } } } catch (Exception ex) { throw; } } #endregion #region 查询订单,是否需要加工 public void QueryOrder(PLCClient client) { try { var plc = repository.FindFirst(x => x.plcinfo_name == client.PLCName); List names = new List() { "1单元辊道下料查询订单", "2单元辊道下料查询订单", "3单元辊道下料查询订单", "辊道上料查询订单" }; foreach (string name in names) { var details = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep && x.plcdetail_number == name).ToList(); var on = DBExtension.Read(details.Where(x => x.plcdetail_name == "R_oi_on").First(), client); if ((byte)on == 1) { var wp_id = DBExtension.Read(details.Where(x => x.plcdetail_name == "R_o_wp_id").First(), client); //需添加查询车轮SN号订单逻辑 需添加入库模式判断,手动入库模式需人工添加入库库区,否则报警 var wp_type = DBExtension.Read(details.Where(x => x.plcdetail_name == "R_o_wp_type").First(), client); var geometry = dataRepository.FindFirst(x => x.TypeId == (Int32)wp_type); if (geometry == null) { //1-好,允许加工,2-不在列表中,3-不加工车轮类型,4-手动入库模式人工未选择库区 client.WriteByOrder("W_i_status", (Int16)2, name); client.WriteByOrder("R_oi_on", (Int16)0, name); } else { //1-好,允许加工,2-不在列表中,3-不加工车轮类型,4-手动入库模式人工未选择库区 client.WriteByOrder("W_i_status", (Int16)1, name); //client.WriteByOrder("W_i_job_id", "", name); //client.WriteByOrder("W_i_drawing_id", "", name); //client.WriteByOrder("W_i_heat_id", "", name); //client.WriteByOrder("W_i_sourceheat", "", name); //client.WriteByOrder("W_i_batch_id", "", name); client.WriteByOrder("R_oi_on", (Int16)0, name); } } } } catch (Exception ex) { throw; } } #endregion #region 下料位交互 public void Layofflevel(PLCClient client) { try { var plc = repository.FindFirst(x => x.plcinfo_name == client.PLCName); var Pipeline_client = PLCClient.Clients.FirstOrDefault(t => t.PLCName == "链条机"); if (Pipeline_client == null) throw new Exception("链条机调度服务未开启!"); if (!Pipeline_client.IsConnected) throw new Exception("与链条机连接超时!"); var Pipelineplc = repository.FindFirst(x => x.plcinfo_name == Pipeline_client.PLCName); List names = new List() { "1单元下料区", "2单元下料区", "3单元下料区" }; foreach (string name in names) { var details = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep && x.plcdetail_number == name).ToList(); var Request = (bool)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_Request_Load").First(), client); if (!Request) continue; List StationCodes = new List() { "X01001001", "X01001002", "X01001003" }; if (name == "2单元下料区") StationCodes = new List() { "X02001001", "X02001002", "X02001003" }; if (name == "3单元下料区") StationCodes = new List() { "X03001001", "X03001002" }; var Wheel_Type = (Int32)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_Wheel_Type").First(), client);//车轮类型 var Wheel_id = DBExtension.Read(details.Where(x => x.plcdetail_name == "R_Wheel_id").First(), client).ToString();//车轮SN号 for (int i = 0; i < StationCodes.Count - 1; i++) { var PartStatus = (Int32)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_PartStatus").First(), client);//1:ok;2:nok string NG = StationCodes[StationCodes.Count - 1];//NG货位 var station = stationinfoRepository.FindFirst(x => x.stationCode == StationCodes[i] && x.enable && x.location_state == LocationStateEnum.Stroge.ToString() && x.quantity < 5); if (station == null) continue; var Pipelinedetails = plcRepository.Find(x => x.plcdetail_iotype == Pipelineplc.plcinfo_iotyep && x.plcdetail_number == StationCodes[i]).ToList(); var PalletSignal = (Int16)DBExtension.Read(Pipelinedetails.Where(x => x.plcdetail_name == "R_PalletSignal").First(), client);//读取托盘信号:1:有,2无 if (PalletSignal == 1) { if (PartStatus == 1 && NG != station.stationCode) { client.WriteByOrder("W_AreaNr", (Int16)i + 1, name);//区域货位号 client.WriteByOrder("W_IndexNr", (Int16)station.quantity + 1, name);//托盘上的第几个车轮 } else if (PartStatus == 2 && NG == station.stationCode) { client.WriteByOrder("W_AreaNr", (Int16)i + 1, name);//区域货位号 client.WriteByOrder("W_IndexNr", (Int16)station.quantity + 1, name);//托盘上的第几个车轮 } client.WriteByOrder("W_Storage_Type", (Int16)1, name);//托盘类型1-横放;2-竖放(暂时只有横放托盘) client.WriteByOrder("W_Enabl_Load", true, name);//是否允许 } } var finished = (bool)DBExtension.Read(details.Where(x => x.plcdetail_name == "R_load_finished").First(), client);//放料完成 if (finished) { var AreaNr = (Int16)DBExtension.Read(details.Where(x => x.plcdetail_name == "W_AreaNr").First(), client); var station = stationinfoRepository.FindFirst(x => x.stationCode == StationCodes[AreaNr - 1]); station.quantity = station.quantity++; stationinfoRepository.Update(station); client.WriteByOrder("W_Storage_update", true, name);//货位状态更新 } } } catch (Exception ex) { throw; } } #endregion } }