using FreeSql; using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEA_Comm.ItemDB; using WIDESEA_Comm.LogInfo; using WIDESEA_Core.EFDbContext; using WIDESEA_Entity.DomainModels; using WIDESEA_WCS.IRepositories; using WIDESEA_WCS.IServices; using WIDESEA_WCS.Repositories; using WIDESEA_WCS.Services; using WIDESEA_WCS.WCSClient; using static System.Collections.Specialized.BitVector32; namespace WIDESEA_WCS { /// /// 一二单元调度 /// [DisallowConcurrentExecution] public class One_two_unitJob : IJob { public Task Execute(IJobExecutionContext context) { try { var client = context.JobDetail.JobDataMap.Get("JobParams") as PLCClient; if (client == null) { return Task.CompletedTask; } //自动重连 if (!client.IsConnected) { client.Connect(); return Task.CompletedTask; } DoAction(client); } catch { } return Task.CompletedTask; } static List gDXDBs = new List(); private void DoAction(PLCClient client) { try { #region 读写方法、日志、执行时间 //client.Write("DB400.DBX0", "123456"); //client.WriteByOrder("R_wheel_SN", "123456", "4.1"); //client.WriteByOrder("R_wheel_SN", "666666", "4.2"); //var res = client.Read("DB400.DBX0", 20); //var res1 = client.ReadByOrder("R_wheel_SN", "4.1"); //var res2 = client.ReadByOrder("R_wheel_SN", "4.2"); //日志写入 //WriteDBLog.Info("一二单元调度", "4.1:" + res1 + ";4.2:" + res2, "PCS"); //执行完成时间 //Console.WriteLine(DateTime.Now); #endregion #region 添加PLC地址信息 //VOLContext Context = new VOLContext(); //Idt_plcinfodetailRepository dt_PlcinfodetailService = new dt_plcinfodetailRepository(Context); //List plcinfodetails = new List(); //for (int i = 106; i <= 110; i++) //{ // dt_plcinfodetail dt_Plcinfodetail = new dt_plcinfodetail() // { // plcdetail_id = Guid.NewGuid(), // plcdetail_iotype = "One_two_unit", // plcdetail_db = "DB400", // plcdetail_value = "DBX" + ((i - 1) * 30), // plcdetail_valtype = "string", // plcdetail_len = 20, // plcdetail_name = "R_wheel_SN", // plcdetail_number = "7." + (i - 80), // plcdetail_remark = "读取车轮SN号" // }; // plcinfodetails.Add(dt_Plcinfodetail); // dt_plcinfodetail dt_Plcinfodetail1 = new dt_plcinfodetail() // { // plcdetail_id = Guid.NewGuid(), // plcdetail_iotype = "One_two_unit", // plcdetail_db = "DB400", // plcdetail_value = "DBX" + ((i - 1) * 30 + 20), // plcdetail_valtype = "int", // plcdetail_name = "R_wheel_type", // plcdetail_number = "7." + (i - 80), // plcdetail_remark = "读取车轮类型" // }; // plcinfodetails.Add(dt_Plcinfodetail1); // dt_plcinfodetail dt_Plcinfodetail2 = new dt_plcinfodetail() // { // plcdetail_id = Guid.NewGuid(), // plcdetail_iotype = "One_two_unit", // plcdetail_db = "DB400", // plcdetail_value = "DBX" + ((i - 1) * 30 + 22), // plcdetail_valtype = "byte", // plcdetail_name = "R_part_status", // plcdetail_number = "7." + (i - 80), // plcdetail_remark = "读取车轮零件状态" // }; // plcinfodetails.Add(dt_Plcinfodetail2); // dt_plcinfodetail dt_Plcinfodetail3 = new dt_plcinfodetail() // { // plcdetail_id = Guid.NewGuid(), // plcdetail_iotype = "One_two_unit", // plcdetail_db = "DB400", // plcdetail_value = "DBX" + ((i - 1) * 30 + 23), // plcdetail_valtype = "byte", // plcdetail_name = "R_part_process", // plcdetail_number = "7." + (i - 80), // plcdetail_remark = "读取车轮零件工艺" // }; // plcinfodetails.Add(dt_Plcinfodetail3); // dt_plcinfodetail dt_Plcinfodetail4 = new dt_plcinfodetail() // { // plcdetail_id = Guid.NewGuid(), // plcdetail_iotype = "One_two_unit", // plcdetail_db = "DB400", // plcdetail_value = "DBX" + ((i - 1) * 30 + 24), // plcdetail_valtype = "byte", // plcdetail_name = "R_machine_nr", // plcdetail_number = "7." + (i - 80), // plcdetail_remark = "读取辊道machine_nr" // }; // plcinfodetails.Add(dt_Plcinfodetail4); // dt_plcinfodetail dt_Plcinfodetail5 = new dt_plcinfodetail() // { // plcdetail_id = Guid.NewGuid(), // plcdetail_iotype = "One_two_unit", // plcdetail_db = "DB400", // plcdetail_value = "DBX" + ((i - 1) * 30 + 25), // plcdetail_valtype = "byte", // plcdetail_name = "R_direction", // plcdetail_number = "7." + (i - 80), // plcdetail_remark = "读取辊道direction" // }; // plcinfodetails.Add(dt_Plcinfodetail5); //} //dt_PlcinfodetailService.AddRange(plcinfodetails, true); #endregion VOLContext Context = new VOLContext(); Idt_plcinfoheadRepository repository = new dt_plcinfoheadRepository(Context); Idt_plcinfodetailRepository plcRepository = new dt_plcinfodetailRepository(Context); PropertyInfo[] propertyInfos = typeof(GDXDB).GetProperties();//获取所有属性 var plc = repository.FindFirst(x => x.plcinfo_name == client.PLCName); var numbers = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep).GroupBy(x => x.plcdetail_number).ToList(); foreach (var number in numbers) { GDXDB dBItem = gDXDBs.Where(x => x.R_Name == number.Key).FirstOrDefault(); if (dBItem == null) { dBItem = new(); dBItem.OnReadSignal += HandleReadSignal; gDXDBs.Add(dBItem); //object obj = dBItem.R_part_status; //dBItem.R_part_status = client.Read(number.Key); } List details = plcRepository.Find(x => x.plcdetail_iotype == plc.plcinfo_iotyep && x.plcdetail_number == number.Key).ToList(); for (int i = 0; i < propertyInfos.Length; i++) { if (i == 0) { dBItem.R_Name = number.Key; } else { object readData = DBExtension.Read(details.Where(x => x.plcdetail_name == propertyInfos[i].Name).FirstOrDefault(), client); if (readData != null) { } object obj = propertyInfos[i].GetValue(dBItem); if (obj != readData) propertyInfos[i].SetValue(dBItem, readData); } } } } catch (Exception ex) { Console.WriteLine(ex.Message); } } public void HandleReadSignal(GDXDB DBItem) { VOLContext Context = new VOLContext(); Idt_ActualProductionRepository repository = new dt_ActualProductionRepository(Context); var info = repository.FindFirst(x => x.SN == DBItem.R_wheel_SN);//查询车轮的详细信息 if (info != null) { //告诉桁架 } } } }