diff --git a/BPASmartClient.AGV/AGVHelper.cs b/BPASmartClient.AGV/AGVHelper.cs index b26f8923..cf6204c5 100644 --- a/BPASmartClient.AGV/AGVHelper.cs +++ b/BPASmartClient.AGV/AGVHelper.cs @@ -7,7 +7,7 @@ using System.Net; using System.Web; using Newtonsoft.Json; using System.Net.Http; - +using System.Configuration; namespace BPASmartClient.AGV { @@ -20,7 +20,24 @@ namespace BPASmartClient.AGV { } - + /// + /// 获取配置文件信息 + /// + /// + /// + public string GetAppSettingValue(string strKey) + { + string file = System.Environment.CurrentDirectory; + Configuration config = ConfigurationManager.OpenExeConfiguration(file); + foreach (string key in config.AppSettings.Settings.AllKeys) + { + if (key == strKey) + { + return config.AppSettings.Settings[strKey].Value.ToString(); + } + } + return null; + } public string HttpRequest(string url, string head, string body) { return PostData(url, head, body); @@ -57,89 +74,460 @@ namespace BPASmartClient.AGV /// AGV去1号线体装桶 /// /// - public string AgvToLineOneLoadRoller() + public string AgvToLineOneLoadRoller(string robotJobId) { - string url = ""; - string head = ""; - string body = ""; - return HttpRequest(url,head,body); + string url = AGVRequestUrl.GetInstance.TaskSendUrl; + //请求报文头 + HttpRequestHeaderModel.GetInstance.appKey = ""; + HttpRequestHeaderModel.GetInstance.appSecret = ""; + HttpRequestHeaderModel.GetInstance.requestId = ""; + HttpRequestHeaderModel.GetInstance.timestamp = ""; + HttpRequestHeaderModel.GetInstance.version = "2.8"; + string head = JsonConvert.SerializeObject(HttpRequestHeaderModel.GetInstance); + //请求报文体 + AGVModel.GetInstance.robotJobId =robotJobId ;//上游提供 + AGVModel.GetInstance.warehouseId = 123; //仓库编号 + AGVModel.GetInstance.jobPriority = 1;//任务执行的优先级 + AGVModel.GetInstance.jobPriorityType = 1;//0:根据优先级来执行,1:强制执行 + AGVModel.GetInstance.jobType = "POINT_ROLLER_MOVE"; //SLOT_ROLLER_MOVE / POINT_ROLLER_MOVE + //详细任务数据 + //点到点 + AGV_PointRollerJobData.GetInstance.startPoint = "";//起点点位 + AGV_PointRollerJobData.GetInstance.endPoint = "";//目的点位 + AGV_PointRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + AGV_PointRollerJobData.GetInstance.enableIOLoad = true;//上料交互方式 false:接口交互 true:光电交互 + AGV_PointRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + AGV_PointRollerJobData.GetInstance.enableIOUnload = true;//下料交互方式 false:接口交互 true:光电交互 + AGVModel.GetInstance.jobData = AGV_PointRollerJobData.GetInstance; + string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + // string newBody = String.Join(",\r\n", bodyData.Split(','));//格式处理,看需求 + //货位到货位 + //AGV_SlotRollerJobData.GetInstance.startSlotCode = "";//起点槽位编号 + //AGV_SlotRollerJobData.GetInstance.endSlotCode = "";//目的槽位编号 + //AGV_SlotRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + //AGV_SlotRollerJobData.GetInstance.enableIOLoad = true;//上料交互方式 false:接口交互 true:光电交互 + //AGV_SlotRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + //AGV_SlotRollerJobData.GetInstance.enableIOUnload = true;//下料交互方式 false:接口交互 true:光电交互 + //AGVModel.GetInstance.jobData = AGV_SlotRollerJobData.GetInstance; + //string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + string data = HttpRequest(url, head, body); + object objData = JsonConvert.DeserializeObject(data); + if (objData != null && objData is HttpResponseModel response) + { + return response.Body?.code; + } + return "Analysis Error"; } /// /// AGV去2号线体装桶 /// /// - public string AgvToLineTwoLoadRoller() + public string AgvToLineTwoLoadRoller(string robotJobId) { - string url = ""; - string head = ""; - string body = ""; - return HttpRequest(url, head, body); + string url = AGVRequestUrl.GetInstance.TaskSendUrl; + //请求报文头 + HttpRequestHeaderModel.GetInstance.appKey = ""; + HttpRequestHeaderModel.GetInstance.appSecret = ""; + HttpRequestHeaderModel.GetInstance.requestId = ""; + HttpRequestHeaderModel.GetInstance.timestamp = ""; + HttpRequestHeaderModel.GetInstance.version = "2.8"; + string head = JsonConvert.SerializeObject(HttpRequestHeaderModel.GetInstance); + //请求报文体 + AGVModel.GetInstance.robotJobId = robotJobId;//上游提供 + AGVModel.GetInstance.warehouseId = 123; //仓库编号 + AGVModel.GetInstance.jobPriority = 1;//任务执行的优先级 + AGVModel.GetInstance.jobPriorityType = 1;//0:根据优先级来执行,1:强制执行 + AGVModel.GetInstance.jobType = "POINT_ROLLER_MOVE"; //SLOT_ROLLER_MOVE / POINT_ROLLER_MOVE + //详细任务数据 + //点到点 + AGV_PointRollerJobData.GetInstance.startPoint = "";//起点点位 + AGV_PointRollerJobData.GetInstance.endPoint = "";//目的点位 + AGV_PointRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + AGV_PointRollerJobData.GetInstance.enableIOLoad = true;//上料交互方式 false:接口交互 true:光电交互 + AGV_PointRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + AGV_PointRollerJobData.GetInstance.enableIOUnload = true;//下料交互方式 false:接口交互 true:光电交互 + AGVModel.GetInstance.jobData = AGV_PointRollerJobData.GetInstance; + string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + //货位到货位 + //AGV_SlotRollerJobData.GetInstance.startSlotCode = "";//起点槽位编号 + //AGV_SlotRollerJobData.GetInstance.endSlotCode = "";//目的槽位编号 + //AGV_SlotRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + //AGV_SlotRollerJobData.GetInstance.enableIOLoad=true;//上料交互方式 false:接口交互 true:光电交互 + //AGV_SlotRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + //AGV_SlotRollerJobData.GetInstance.enableIOUnload=true;//下料交互方式 false:接口交互 true:光电交互 + //AGVModel.GetInstance.jobData = AGV_SlotRollerJobData.GetInstance; + //string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + string data= HttpRequest(url, head, body); + object objData= JsonConvert.DeserializeObject(data); + if (objData != null && objData is HttpResponseModel response) + { + return response.Body?.code; + } + return "Analysis Error"; } /// /// AGV去3号线体装桶 /// /// - public string AgvToLineThreeLoadRoller() + public string AgvToLineThreeLoadRoller(string robotJobId) { - string url = ""; - string head = ""; - string body = ""; - return HttpRequest(url, head, body); + string url = AGVRequestUrl.GetInstance.TaskSendUrl; + //请求报文头 + HttpRequestHeaderModel.GetInstance.appKey = ""; + HttpRequestHeaderModel.GetInstance.appSecret = ""; + HttpRequestHeaderModel.GetInstance.requestId = ""; + HttpRequestHeaderModel.GetInstance.timestamp = ""; + HttpRequestHeaderModel.GetInstance.version = "2.8"; + string head = JsonConvert.SerializeObject(HttpRequestHeaderModel.GetInstance); + //请求报文体 + AGVModel.GetInstance.robotJobId = robotJobId;//上游提供 + AGVModel.GetInstance.warehouseId = 123; //仓库编号 + AGVModel.GetInstance.jobPriority = 1;//任务执行的优先级 + AGVModel.GetInstance.jobPriorityType = 1;//0:根据优先级来执行,1:强制执行 + AGVModel.GetInstance.jobType = "POINT_ROLLER_MOVE"; //SLOT_ROLLER_MOVE / POINT_ROLLER_MOVE + //详细任务数据 + //点到点 + AGV_PointRollerJobData.GetInstance.startPoint = "";//起点点位 + AGV_PointRollerJobData.GetInstance.endPoint = "";//目的点位 + AGV_PointRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + AGV_PointRollerJobData.GetInstance.enableIOLoad = true;//上料交互方式 false:接口交互 true:光电交互 + AGV_PointRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + AGV_PointRollerJobData.GetInstance.enableIOUnload = true;//下料交互方式 false:接口交互 true:光电交互 + AGVModel.GetInstance.jobData = AGV_PointRollerJobData.GetInstance; + string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + //货位到货位 + //AGV_SlotRollerJobData.GetInstance.startSlotCode = "";//起点槽位编号 + //AGV_SlotRollerJobData.GetInstance.endSlotCode = "";//目的槽位编号 + //AGV_SlotRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + //AGV_SlotRollerJobData.GetInstance.enableIOLoad=true;//上料交互方式 false:接口交互 true:光电交互 + //AGV_SlotRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + //AGV_SlotRollerJobData.GetInstance.enableIOUnload=true;//下料交互方式 false:接口交互 true:光电交互 + //AGVModel.GetInstance.jobData = AGV_SlotRollerJobData.GetInstance; + //string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + string data = HttpRequest(url, head, body); + object objData = JsonConvert.DeserializeObject(data); + if (objData != null && objData is HttpResponseModel response) + { + return response.Body?.code; + } + return "Analysis Error"; } /// /// AGV离开炒锅1 /// /// - public string AgvLeaveFryPotOne() + public string AgvLeaveFryPotOne(string robotJobId) { - string url = ""; - string head = ""; - string body = ""; - return HttpRequest(url, head, body); + string url = AGVRequestUrl.GetInstance.TaskSendUrl; + //请求报文头 + HttpRequestHeaderModel.GetInstance.appKey = ""; + HttpRequestHeaderModel.GetInstance.appSecret = ""; + HttpRequestHeaderModel.GetInstance.requestId = ""; + HttpRequestHeaderModel.GetInstance.timestamp = ""; + HttpRequestHeaderModel.GetInstance.version = "2.8"; + string head = JsonConvert.SerializeObject(HttpRequestHeaderModel.GetInstance); + //请求报文体 + AGVModel.GetInstance.robotJobId = robotJobId;//上游提供 + AGVModel.GetInstance.warehouseId = 123; //仓库编号 + AGVModel.GetInstance.jobPriority = 1;//任务执行的优先级 + AGVModel.GetInstance.jobPriorityType = 1;//0:根据优先级来执行,1:强制执行 + AGVModel.GetInstance.jobType = "POINT_ROLLER_MOVE"; //SLOT_ROLLER_MOVE / POINT_ROLLER_MOVE + //详细任务数据 + //点到点 + AGV_PointRollerJobData.GetInstance.startPoint = "";//起点点位 + AGV_PointRollerJobData.GetInstance.endPoint = "";//目的点位 + AGV_PointRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + AGV_PointRollerJobData.GetInstance.enableIOLoad = true;//上料交互方式 false:接口交互 true:光电交互 + AGV_PointRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + AGV_PointRollerJobData.GetInstance.enableIOUnload = true;//下料交互方式 false:接口交互 true:光电交互 + AGVModel.GetInstance.jobData = AGV_PointRollerJobData.GetInstance; + string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + //货位到货位 + //AGV_SlotRollerJobData.GetInstance.startSlotCode = "";//起点槽位编号 + //AGV_SlotRollerJobData.GetInstance.endSlotCode = "";//目的槽位编号 + //AGV_SlotRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + //AGV_SlotRollerJobData.GetInstance.enableIOLoad=true;//上料交互方式 false:接口交互 true:光电交互 + //AGV_SlotRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + //AGV_SlotRollerJobData.GetInstance.enableIOUnload=true;//下料交互方式 false:接口交互 true:光电交互 + //AGVModel.GetInstance.jobData = AGV_SlotRollerJobData.GetInstance; + //string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + string data = HttpRequest(url, head, body); + object objData = JsonConvert.DeserializeObject(data); + if (objData != null && objData is HttpResponseModel response) + { + return response.Body?.code; + } + return "Analysis Error"; } /// /// AGV离开炒锅2 /// /// - public string AgvLeaveFryPotTwo() + public string AgvLeaveFryPotTwo(string robotJobId) { - string url = ""; - string head = ""; - string body = ""; - return HttpRequest(url, head, body); + string url = AGVRequestUrl.GetInstance.TaskSendUrl; + //请求报文头 + HttpRequestHeaderModel.GetInstance.appKey = ""; + HttpRequestHeaderModel.GetInstance.appSecret = ""; + HttpRequestHeaderModel.GetInstance.requestId = ""; + HttpRequestHeaderModel.GetInstance.timestamp = ""; + HttpRequestHeaderModel.GetInstance.version = "2.8"; + string head = JsonConvert.SerializeObject(HttpRequestHeaderModel.GetInstance); + //请求报文体 + AGVModel.GetInstance.robotJobId = robotJobId;//上游提供 + AGVModel.GetInstance.warehouseId = 123; //仓库编号 + AGVModel.GetInstance.jobPriority = 1;//任务执行的优先级 + AGVModel.GetInstance.jobPriorityType = 1;//0:根据优先级来执行,1:强制执行 + AGVModel.GetInstance.jobType = "POINT_ROLLER_MOVE"; //SLOT_ROLLER_MOVE / POINT_ROLLER_MOVE + //详细任务数据 + //点到点 + AGV_PointRollerJobData.GetInstance.startPoint = "";//起点点位 + AGV_PointRollerJobData.GetInstance.endPoint = "";//目的点位 + AGV_PointRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + AGV_PointRollerJobData.GetInstance.enableIOLoad = true;//上料交互方式 false:接口交互 true:光电交互 + AGV_PointRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + AGV_PointRollerJobData.GetInstance.enableIOUnload = true;//下料交互方式 false:接口交互 true:光电交互 + AGVModel.GetInstance.jobData = AGV_PointRollerJobData.GetInstance; + string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + //货位到货位 + //AGV_SlotRollerJobData.GetInstance.startSlotCode = "";//起点槽位编号 + //AGV_SlotRollerJobData.GetInstance.endSlotCode = "";//目的槽位编号 + //AGV_SlotRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + //AGV_SlotRollerJobData.GetInstance.enableIOLoad=true;//上料交互方式 false:接口交互 true:光电交互 + //AGV_SlotRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + //AGV_SlotRollerJobData.GetInstance.enableIOUnload=true;//下料交互方式 false:接口交互 true:光电交互 + //AGVModel.GetInstance.jobData = AGV_SlotRollerJobData.GetInstance; + //string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + string data = HttpRequest(url, head, body); + object objData = JsonConvert.DeserializeObject(data); + if (objData != null && objData is HttpResponseModel response) + { + return response.Body?.code; + } + return "Analysis Error"; } /// /// AGV离开炒锅3 /// /// - public string AgvLeaveFryPotThree() + public string AgvLeaveFryPotThree(string robotJobId) { - string url = ""; - string head = ""; - string body = ""; - return HttpRequest(url, head, body); + string url = AGVRequestUrl.GetInstance.TaskSendUrl; + //请求报文头 + HttpRequestHeaderModel.GetInstance.appKey = ""; + HttpRequestHeaderModel.GetInstance.appSecret = ""; + HttpRequestHeaderModel.GetInstance.requestId = ""; + HttpRequestHeaderModel.GetInstance.timestamp = ""; + HttpRequestHeaderModel.GetInstance.version = "2.8"; + string head = JsonConvert.SerializeObject(HttpRequestHeaderModel.GetInstance); + //请求报文体 + AGVModel.GetInstance.robotJobId = robotJobId;//上游提供 + AGVModel.GetInstance.warehouseId = 123; //仓库编号 + AGVModel.GetInstance.jobPriority = 1;//任务执行的优先级 + AGVModel.GetInstance.jobPriorityType = 1;//0:根据优先级来执行,1:强制执行 + AGVModel.GetInstance.jobType = "POINT_ROLLER_MOVE"; //SLOT_ROLLER_MOVE / POINT_ROLLER_MOVE + //详细任务数据 + //点到点 + AGV_PointRollerJobData.GetInstance.startPoint = "";//起点点位 + AGV_PointRollerJobData.GetInstance.endPoint = "";//目的点位 + AGV_PointRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + AGV_PointRollerJobData.GetInstance.enableIOLoad = true;//上料交互方式 false:接口交互 true:光电交互 + AGV_PointRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + AGV_PointRollerJobData.GetInstance.enableIOUnload = true;//下料交互方式 false:接口交互 true:光电交互 + AGVModel.GetInstance.jobData = AGV_PointRollerJobData.GetInstance; + string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + //货位到货位 + //AGV_SlotRollerJobData.GetInstance.startSlotCode = "";//起点槽位编号 + //AGV_SlotRollerJobData.GetInstance.endSlotCode = "";//目的槽位编号 + //AGV_SlotRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + //AGV_SlotRollerJobData.GetInstance.enableIOLoad=true;//上料交互方式 false:接口交互 true:光电交互 + //AGV_SlotRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + //AGV_SlotRollerJobData.GetInstance.enableIOUnload=true;//下料交互方式 false:接口交互 true:光电交互 + //AGVModel.GetInstance.jobData = AGV_SlotRollerJobData.GetInstance; + //string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + string data = HttpRequest(url, head, body); + object objData = JsonConvert.DeserializeObject(data); + if (objData != null && objData is HttpResponseModel response) + { + return response.Body?.code; + } + return "Analysis Error"; } /// /// AGV离开炒锅4 /// /// - public string AgvLeaveFryPotFour() + public string AgvLeaveFryPotFour(string robotJobId) { - string url = ""; - string head = ""; - string body = ""; - return HttpRequest(url, head, body); + string url = AGVRequestUrl.GetInstance.TaskSendUrl; + //请求报文头 + HttpRequestHeaderModel.GetInstance.appKey = ""; + HttpRequestHeaderModel.GetInstance.appSecret = ""; + HttpRequestHeaderModel.GetInstance.requestId = ""; + HttpRequestHeaderModel.GetInstance.timestamp = ""; + HttpRequestHeaderModel.GetInstance.version = "2.8"; + string head = JsonConvert.SerializeObject(HttpRequestHeaderModel.GetInstance); + //请求报文体 + AGVModel.GetInstance.robotJobId = robotJobId;//上游提供 + AGVModel.GetInstance.warehouseId = 123; //仓库编号 + AGVModel.GetInstance.jobPriority = 1;//任务执行的优先级 + AGVModel.GetInstance.jobPriorityType = 1;//0:根据优先级来执行,1:强制执行 + AGVModel.GetInstance.jobType = "POINT_ROLLER_MOVE"; //SLOT_ROLLER_MOVE / POINT_ROLLER_MOVE + //详细任务数据 + //点到点 + AGV_PointRollerJobData.GetInstance.startPoint = "";//起点点位 + AGV_PointRollerJobData.GetInstance.endPoint = "";//目的点位 + AGV_PointRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + AGV_PointRollerJobData.GetInstance.enableIOLoad = true;//上料交互方式 false:接口交互 true:光电交互 + AGV_PointRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + AGV_PointRollerJobData.GetInstance.enableIOUnload = true;//下料交互方式 false:接口交互 true:光电交互 + AGVModel.GetInstance.jobData = AGV_PointRollerJobData.GetInstance; + string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + //货位到货位 + //AGV_SlotRollerJobData.GetInstance.startSlotCode = "";//起点槽位编号 + //AGV_SlotRollerJobData.GetInstance.endSlotCode = "";//目的槽位编号 + //AGV_SlotRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + //AGV_SlotRollerJobData.GetInstance.enableIOLoad=true;//上料交互方式 false:接口交互 true:光电交互 + //AGV_SlotRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + //AGV_SlotRollerJobData.GetInstance.enableIOUnload=true;//下料交互方式 false:接口交互 true:光电交互 + //AGVModel.GetInstance.jobData = AGV_SlotRollerJobData.GetInstance; + //string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + string data = HttpRequest(url, head, body); + object objData = JsonConvert.DeserializeObject(data); + if (objData != null && objData is HttpResponseModel response) + { + return response.Body?.code; + } + return "Analysis Error"; } /// /// AGV离开炒锅5 /// /// - public string AgvLeaveFryPotFive() + public string AgvLeaveFryPotFive(string robotJobId) { - string url = ""; - string head = ""; - string body = ""; - return HttpRequest(url, head, body); + string url = AGVRequestUrl.GetInstance.TaskSendUrl; + //请求报文头 + HttpRequestHeaderModel.GetInstance.appKey = ""; + HttpRequestHeaderModel.GetInstance.appSecret = ""; + HttpRequestHeaderModel.GetInstance.requestId = ""; + HttpRequestHeaderModel.GetInstance.timestamp = ""; + HttpRequestHeaderModel.GetInstance.version = "2.8"; + string head = JsonConvert.SerializeObject(HttpRequestHeaderModel.GetInstance); + //请求报文体 + AGVModel.GetInstance.robotJobId = robotJobId;//上游提供 + AGVModel.GetInstance.warehouseId = 123; //仓库编号 + AGVModel.GetInstance.jobPriority = 1;//任务执行的优先级 + AGVModel.GetInstance.jobPriorityType = 1;//0:根据优先级来执行,1:强制执行 + AGVModel.GetInstance.jobType = "POINT_ROLLER_MOVE"; //SLOT_ROLLER_MOVE / POINT_ROLLER_MOVE + //详细任务数据 + //点到点 + AGV_PointRollerJobData.GetInstance.startPoint = "";//起点点位 + AGV_PointRollerJobData.GetInstance.endPoint = "";//目的点位 + AGV_PointRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + AGV_PointRollerJobData.GetInstance.enableIOLoad = true;//上料交互方式 false:接口交互 true:光电交互 + AGV_PointRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + AGV_PointRollerJobData.GetInstance.enableIOUnload = true;//下料交互方式 false:接口交互 true:光电交互 + AGVModel.GetInstance.jobData = AGV_PointRollerJobData.GetInstance; + string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + //货位到货位 + //AGV_SlotRollerJobData.GetInstance.startSlotCode = "";//起点槽位编号 + //AGV_SlotRollerJobData.GetInstance.endSlotCode = "";//目的槽位编号 + //AGV_SlotRollerJobData.GetInstance.autoLoad = true;//是否自动上料 true:自动上料 false:人工上料 + //AGV_SlotRollerJobData.GetInstance.enableIOLoad=true;//上料交互方式 false:接口交互 true:光电交互 + //AGV_SlotRollerJobData.GetInstance.autoUnload = true;//是否自动下料 true:自动下料 false:人工下料 + //AGV_SlotRollerJobData.GetInstance.enableIOUnload=true;//下料交互方式 false:接口交互 true:光电交互 + //AGVModel.GetInstance.jobData = AGV_SlotRollerJobData.GetInstance; + //string body = JsonConvert.SerializeObject(AGVModel.GetInstance); + string data = HttpRequest(url, head, body); + object objData = JsonConvert.DeserializeObject(data); + if (objData != null && objData is HttpResponseModel response) + { + return response.Body?.code; + } + return "Analysis Error"; + } + /// + /// 任务取消 + /// + /// 上游系统任务号,全局唯一 + public string CancelJobTask(string robotJobId) + { + string url = AGVRequestUrl.GetInstance.TaskCancelUrl; + //请求报文头 + HttpRequestHeaderModel.GetInstance.appKey = ""; + HttpRequestHeaderModel.GetInstance.appSecret = ""; + HttpRequestHeaderModel.GetInstance.requestId = ""; + HttpRequestHeaderModel.GetInstance.timestamp = ""; + HttpRequestHeaderModel.GetInstance.version = "2.8"; + string head = JsonConvert.SerializeObject(HttpRequestHeaderModel.GetInstance); + //请求报文体 + AGVTaskCancelModel.GetInstance.robotJobId = robotJobId; + AGVTaskCancelModel.GetInstance.warehouseId = 123;//仓库编号 + string body = JsonConvert.SerializeObject(AGVTaskCancelModel.GetInstance); + string data = HttpRequest(url, head, body); + object objData = JsonConvert.DeserializeObject(data); + if (objData != null && objData is HttpResponseModel response) + { + return response.Body?.code; + } + return "Analysis Error"; + } + /// + /// 实操任务完成通知 + /// + /// + public string TaskCompleteNotify(string robotJobId) + { + string url = AGVRequestUrl.GetInstance.TaskCompleteUrl; + //请求报文头 + HttpRequestHeaderModel.GetInstance.appKey = ""; + HttpRequestHeaderModel.GetInstance.appSecret = ""; + HttpRequestHeaderModel.GetInstance.requestId = ""; + HttpRequestHeaderModel.GetInstance.timestamp = ""; + HttpRequestHeaderModel.GetInstance.version = "2.8"; + string head = JsonConvert.SerializeObject(HttpRequestHeaderModel.GetInstance); + //请求报文体 + AGVTaskCompleteNotifyModel.GetInstance.robotJobId = robotJobId; + AGVTaskCompleteNotifyModel.GetInstance.warehouseId = 123;//仓库编号 + string body=JsonConvert.SerializeObject(AGVTaskCompleteNotifyModel.GetInstance); + string data = HttpRequest(url, head, body); + object objData = JsonConvert.DeserializeObject(data); + if (objData != null && objData is HttpResponseModel response) + { + return response.Body?.code; + } + return "Analysis Error"; + } + /// + /// AGV上下料交互反馈 + /// + /// AGV编号 + /// 任务编号 + /// 消息编号 + /// + public string UpDownFeedBack(string agvCode,string jobId,string msgId) + { + string url = AGVRequestUrl.GetInstance.TaskCompleteUrl; + //请求报文头 + HttpRequestHeaderModel.GetInstance.appKey = ""; + HttpRequestHeaderModel.GetInstance.appSecret = ""; + HttpRequestHeaderModel.GetInstance.requestId = ""; + HttpRequestHeaderModel.GetInstance.timestamp = ""; + HttpRequestHeaderModel.GetInstance.version = "2.8"; + string head = JsonConvert.SerializeObject(HttpRequestHeaderModel.GetInstance); + //请求报文体 + AGVLoadInteracteModel.GetInstance.agvCode = agvCode; + AGVLoadInteracteModel.GetInstance.jobId = jobId; + AGVLoadInteracteModel.GetInstance.msgId= msgId; + string body=JsonConvert.SerializeObject(AGVLoadInteracteModel.GetInstance); + string data = HttpRequest(url, head, body); + object objData = JsonConvert.DeserializeObject(data); + if (objData != null && objData is HttpResponseModel response) + { + return response.Body?.code; + } + return "Analysis Error"; } } } diff --git a/BPASmartClient.AGV/AGVLoadInteracteModel.cs b/BPASmartClient.AGV/AGVLoadInteracteModel.cs index db147e31..ec1c6a8c 100644 --- a/BPASmartClient.AGV/AGVLoadInteracteModel.cs +++ b/BPASmartClient.AGV/AGVLoadInteracteModel.cs @@ -11,6 +11,8 @@ namespace BPASmartClient.AGV /// internal class AGVLoadInteracteModel { + private static AGVLoadInteracteModel _instance; + public static AGVLoadInteracteModel GetInstance=>_instance ??= new AGVLoadInteracteModel(); public string agvCode { get; set;} public string jobId { get; set; } public string msgId { get; set; } diff --git a/BPASmartClient.AGV/AGVModel.cs b/BPASmartClient.AGV/AGVModel.cs index 1665c1f6..e58a17ff 100644 --- a/BPASmartClient.AGV/AGVModel.cs +++ b/BPASmartClient.AGV/AGVModel.cs @@ -11,6 +11,9 @@ namespace BPASmartClient.AGV /// internal class AGVModel { + private static AGVModel _instance; + public static AGVModel GetInstance => _instance ??= new AGVModel(); + /// /// 必填项 /// diff --git a/BPASmartClient.AGV/AGVRequestUrl.cs b/BPASmartClient.AGV/AGVRequestUrl.cs index 20817893..c1b758e2 100644 --- a/BPASmartClient.AGV/AGVRequestUrl.cs +++ b/BPASmartClient.AGV/AGVRequestUrl.cs @@ -2,10 +2,11 @@ { public class AGVRequestUrl { - //public string HttpHeader { get; set; } - //public string TaskSendBody { get; set; } - public AGVRequestUrl(string IpAddress) + private static AGVRequestUrl _instance; + public static AGVRequestUrl GetInstance => _instance ??= new AGVRequestUrl(); + public AGVRequestUrl() { + string IpAddress = ""; TaskSendUrl= $"http://{IpAddress}/api/quicktron/wcs/standardized.robot.job.submit"; TaskCancelUrl= $"http://{IpAddress}/api/quicktron/wcs/standardized.robot.job.cancel"; TaskCompleteUrl= $"http://{IpAddress}/api/quicktron/wcs/standardized.operation.notice"; diff --git a/BPASmartClient.AGV/AGVTaskCancelModel.cs b/BPASmartClient.AGV/AGVTaskCancelModel.cs index 3c6b01e6..b1a0edf1 100644 --- a/BPASmartClient.AGV/AGVTaskCancelModel.cs +++ b/BPASmartClient.AGV/AGVTaskCancelModel.cs @@ -11,6 +11,8 @@ namespace BPASmartClient.AGV /// internal class AGVTaskCancelModel { + private static AGVTaskCancelModel _instance; + public static AGVTaskCancelModel GetInstance => _instance ??= new AGVTaskCancelModel(); public string robotJobId { get; set; } public long warehouseId { get; set; } public string? executeMode { get; set; } diff --git a/BPASmartClient.AGV/AGVTaskCompleteNotifyModel.cs b/BPASmartClient.AGV/AGVTaskCompleteNotifyModel.cs index a6d5ff68..80f918f3 100644 --- a/BPASmartClient.AGV/AGVTaskCompleteNotifyModel.cs +++ b/BPASmartClient.AGV/AGVTaskCompleteNotifyModel.cs @@ -11,6 +11,8 @@ namespace BPASmartClient.AGV /// internal class AGVTaskCompleteNotifyModel { + private static AGVTaskCompleteNotifyModel _instance; + public static AGVTaskCompleteNotifyModel GetInstance=>_instance ??= new AGVTaskCompleteNotifyModel(); public string? robotJobId { get; set; } public string? bucketCode { get; set; } public string? bucketslotCode { get; set; } diff --git a/BPASmartClient.AGV/AGV_PointRollerJobData.cs b/BPASmartClient.AGV/AGV_PointRollerJobData.cs index d2f638cd..c54766ed 100644 --- a/BPASmartClient.AGV/AGV_PointRollerJobData.cs +++ b/BPASmartClient.AGV/AGV_PointRollerJobData.cs @@ -11,6 +11,8 @@ namespace BPASmartClient.AGV /// internal class AGV_PointRollerJobData:IJobData { + private static AGV_PointRollerJobData _instance; + public static AGV_PointRollerJobData GetInstance => _instance ??= new AGV_PointRollerJobData(); public string? containerCode { get; set; } public string startPoint { get; set; } public string endPoint { get; set; } diff --git a/BPASmartClient.AGV/AGV_SlotRollerJobData.cs b/BPASmartClient.AGV/AGV_SlotRollerJobData.cs index ffe47822..28aab53d 100644 --- a/BPASmartClient.AGV/AGV_SlotRollerJobData.cs +++ b/BPASmartClient.AGV/AGV_SlotRollerJobData.cs @@ -11,8 +11,10 @@ namespace BPASmartClient.AGV /// internal class AGV_SlotRollerJobData:IJobData { + private static AGV_SlotRollerJobData _instance; + public static AGV_SlotRollerJobData GetInstance => _instance ??= new AGV_SlotRollerJobData(); public string? containerCode { get; set; } - public string startIotCode { get; set; } + public string startSlotCode { get; set; } public string endSlotCode { get; set; } public bool autoLoad { get; set; } public bool enableIOLoad { get; set; } diff --git a/BPASmartClient.AGV/App.config b/BPASmartClient.AGV/App.config new file mode 100644 index 00000000..68751874 --- /dev/null +++ b/BPASmartClient.AGV/App.config @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/BPASmartClient.AGV/BPASmartClient.AGV.csproj b/BPASmartClient.AGV/BPASmartClient.AGV.csproj index 933c8b28..6d1c8e2b 100644 --- a/BPASmartClient.AGV/BPASmartClient.AGV.csproj +++ b/BPASmartClient.AGV/BPASmartClient.AGV.csproj @@ -8,6 +8,7 @@ + diff --git a/BPASmartClient.AGV/Feedback/AGVUpReportHeader.cs b/BPASmartClient.AGV/Feedback/AGVUpReportHeader.cs new file mode 100644 index 00000000..5c3864d8 --- /dev/null +++ b/BPASmartClient.AGV/Feedback/AGVUpReportHeader.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BPASmartClient.AGV.Feedback +{ + public class AGVUpReportHeader + { + public string? appKey { get; set; } + public string? appSecret { get; set; } + public string? requestId { get; set; } + public string? timestamp { get; set; } + public string? version { get; set; } + } +} diff --git a/BPASmartClient.AGV/Feedback/Upstreamrequest.cs b/BPASmartClient.AGV/Feedback/Upstreamrequest.cs index 6d11b3c2..411189a1 100644 --- a/BPASmartClient.AGV/Feedback/Upstreamrequest.cs +++ b/BPASmartClient.AGV/Feedback/Upstreamrequest.cs @@ -49,6 +49,5 @@ namespace BPASmartClient.AGV.Feedback /// 上游任务号 /// public string robotJobId { get; set; } - } } diff --git a/BPASmartClient.AGV/HttpRequestHeaderModel.cs b/BPASmartClient.AGV/HttpRequestHeaderModel.cs index ab24a75d..f512f103 100644 --- a/BPASmartClient.AGV/HttpRequestHeaderModel.cs +++ b/BPASmartClient.AGV/HttpRequestHeaderModel.cs @@ -8,10 +8,12 @@ namespace BPASmartClient.AGV { internal class HttpRequestHeaderModel { - public string appKey { get; set; } - public string appSecret { get; set; } - public string requestId { get; set; } - public string timestamp { get; set; } - public string version { get; set; } + private static HttpRequestHeaderModel _instance; + public static HttpRequestHeaderModel GetInstance => _instance ??= new HttpRequestHeaderModel(); + public string? appKey { get; set; } + public string? appSecret { get; set; } + public string? requestId { get; set; } + public string? timestamp { get; set; } + public string? version { get; set; } } } diff --git a/BPASmartClient.AGV/HttpResponseBodyModel.cs b/BPASmartClient.AGV/HttpResponseBodyModel.cs new file mode 100644 index 00000000..c0cafc58 --- /dev/null +++ b/BPASmartClient.AGV/HttpResponseBodyModel.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BPASmartClient.AGV +{ + internal class HttpResponseBodyModel + { + public string code { get; set; } + public string message { get; set; } + public bool success { get; set; } + public HttpResponseData data { get; set; } + } +} diff --git a/BPASmartClient.AGV/HttpResponseHeaderModel.cs b/BPASmartClient.AGV/HttpResponseHeaderModel.cs new file mode 100644 index 00000000..5ff914d8 --- /dev/null +++ b/BPASmartClient.AGV/HttpResponseHeaderModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BPASmartClient.AGV +{ + internal class HttpResponseHeaderModel + { + public string? requestId { get; set; } + public string? timestamp { get; set; } + public string? version { get; set; } + } +} diff --git a/BPASmartClient.AGV/HttpResponseModel.cs b/BPASmartClient.AGV/HttpResponseModel.cs index 5ac3cb22..40ed05ed 100644 --- a/BPASmartClient.AGV/HttpResponseModel.cs +++ b/BPASmartClient.AGV/HttpResponseModel.cs @@ -8,9 +8,7 @@ namespace BPASmartClient.AGV { internal class HttpResponseModel { - public string code { get; set; } - public string message { get; set; } - public bool success { get; set; } - public HttpResponseData data { get; set; } + public HttpResponseHeaderModel? Header { get; set; } + public HttpResponseBodyModel? Body { get; set; } } } diff --git a/BPASmartClient.CustomResource/BPASmartClient.CustomResource.csproj b/BPASmartClient.CustomResource/BPASmartClient.CustomResource.csproj index 65642570..becbdc01 100644 --- a/BPASmartClient.CustomResource/BPASmartClient.CustomResource.csproj +++ b/BPASmartClient.CustomResource/BPASmartClient.CustomResource.csproj @@ -19,8 +19,18 @@ + + + + + + + + + + @@ -190,7 +200,17 @@ - + + + + + + + Always + + + Always + @@ -200,8 +220,18 @@ + + + + + + + + + + diff --git a/BPASmartClient.CustomResource/Fonts/80号-萌趣小鱼体.ttf b/BPASmartClient.CustomResource/Fonts/80号-萌趣小鱼体.ttf new file mode 100644 index 00000000..c846b3b6 Binary files /dev/null and b/BPASmartClient.CustomResource/Fonts/80号-萌趣小鱼体.ttf differ diff --git a/BPASmartClient.CustomResource/Image/AGV/停车位.png b/BPASmartClient.CustomResource/Image/AGV/停车位.png new file mode 100644 index 00000000..12e0e689 Binary files /dev/null and b/BPASmartClient.CustomResource/Image/AGV/停车位.png differ diff --git a/BPASmartClient.CustomResource/Image/AGV/充电桩.png b/BPASmartClient.CustomResource/Image/AGV/充电桩.png new file mode 100644 index 00000000..9931a41b Binary files /dev/null and b/BPASmartClient.CustomResource/Image/AGV/充电桩.png differ diff --git a/BPASmartClient.CustomResource/Image/AGV/墙.png b/BPASmartClient.CustomResource/Image/AGV/墙.png new file mode 100644 index 00000000..cf81aade Binary files /dev/null and b/BPASmartClient.CustomResource/Image/AGV/墙.png differ diff --git a/BPASmartClient.CustomResource/Image/AGV/汤碗.png b/BPASmartClient.CustomResource/Image/AGV/汤碗.png new file mode 100644 index 00000000..99cb5e69 Binary files /dev/null and b/BPASmartClient.CustomResource/Image/AGV/汤碗.png differ diff --git a/BPASmartClient.CustomResource/Image/AGV/炒锅.png b/BPASmartClient.CustomResource/Image/AGV/炒锅.png new file mode 100644 index 00000000..cb917fd9 Binary files /dev/null and b/BPASmartClient.CustomResource/Image/AGV/炒锅.png differ diff --git a/BPASmartClient.CustomResource/Image/AGV/物流车.png b/BPASmartClient.CustomResource/Image/AGV/物流车.png new file mode 100644 index 00000000..5ce43fe9 Binary files /dev/null and b/BPASmartClient.CustomResource/Image/AGV/物流车.png differ diff --git a/BPASmartClient.CustomResource/Image/AGV/砖块.png b/BPASmartClient.CustomResource/Image/AGV/砖块.png new file mode 100644 index 00000000..1de8c586 Binary files /dev/null and b/BPASmartClient.CustomResource/Image/AGV/砖块.png differ diff --git a/BPASmartClient.CustomResource/Image/AGV/蔬菜.png b/BPASmartClient.CustomResource/Image/AGV/蔬菜.png new file mode 100644 index 00000000..4a4b57cd Binary files /dev/null and b/BPASmartClient.CustomResource/Image/AGV/蔬菜.png differ diff --git a/BPASmartClient.CustomResource/Image/AGV/语音箭头.png b/BPASmartClient.CustomResource/Image/AGV/语音箭头.png new file mode 100644 index 00000000..af6d5b03 Binary files /dev/null and b/BPASmartClient.CustomResource/Image/AGV/语音箭头.png differ diff --git a/BPASmartClient.CustomResource/Pages/View/LoginView.xaml b/BPASmartClient.CustomResource/Pages/View/LoginView.xaml index d4cf34ce..35c641d5 100644 --- a/BPASmartClient.CustomResource/Pages/View/LoginView.xaml +++ b/BPASmartClient.CustomResource/Pages/View/LoginView.xaml @@ -15,6 +15,7 @@ Topmost="False" WindowStartupLocation="CenterScreen" WindowStyle="None" + WindowState="Normal" mc:Ignorable="d"> @@ -232,28 +233,6 @@ VerticalAlignment="Center" LoadedBehavior="Manual" /> - - @@ -279,10 +258,10 @@ Text="{Binding ErrorInfo}" /> @@ -337,271 +316,6 @@ TabIndex="3" /> - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BPASmartClient.CustomResource/Pages/View/MainView.xaml b/BPASmartClient.CustomResource/Pages/View/MainView.xaml index 2da3e524..76baebcb 100644 --- a/BPASmartClient.CustomResource/Pages/View/MainView.xaml +++ b/BPASmartClient.CustomResource/Pages/View/MainView.xaml @@ -21,6 +21,7 @@ + @@ -280,7 +281,90 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -430,7 +514,19 @@ - + + + + + /// 设备初始化状态 + /// + public bool Status + { + get { return _status; } + set + { + if (value) + { + ActionManage.GetInstance.Send("StartPlcInite"); + } + else + { + ActionManage.GetInstance.Send("EndPlcInite"); + } + _status = value; + OnPropertyChanged(); + } + } + /// + /// 开机自启 + /// + public bool AutoStart { get { return SystemHelper.GetInstance.IsAutoStart(); } set { SystemHelper.GetInstance.AutoStart(value); OnPropertyChanged(); } } public RelayCommand NavChangedCommand { get; set; } public FrameworkElement MainContent { get { return _mMainContent; } set { _mMainContent = value; OnPropertyChanged(); } } diff --git a/BPASmartClient.CustomResource/Themes/MyStyle.xaml b/BPASmartClient.CustomResource/Themes/MyStyle.xaml index af345c01..4cf9e73a 100644 --- a/BPASmartClient.CustomResource/Themes/MyStyle.xaml +++ b/BPASmartClient.CustomResource/Themes/MyStyle.xaml @@ -173,6 +173,14 @@ + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BPASmartClient.CustomResource/Vioce/取餐通知.wav b/BPASmartClient.CustomResource/Vioce/取餐通知.wav new file mode 100644 index 00000000..1d5d35ca Binary files /dev/null and b/BPASmartClient.CustomResource/Vioce/取餐通知.wav differ diff --git a/BPASmartClient.CustomResource/Vioce/电子提示音.wav b/BPASmartClient.CustomResource/Vioce/电子提示音.wav new file mode 100644 index 00000000..e0d3fed3 Binary files /dev/null and b/BPASmartClient.CustomResource/Vioce/电子提示音.wav differ diff --git a/BPASmartClient.DRCoffee/CoffeeMachine.cs b/BPASmartClient.DRCoffee/CoffeeMachine.cs index 40464a54..2bd9da96 100644 --- a/BPASmartClient.DRCoffee/CoffeeMachine.cs +++ b/BPASmartClient.DRCoffee/CoffeeMachine.cs @@ -191,6 +191,7 @@ namespace BPASmartClient.DRCoffee commProxy.SendData(DrCoffee.Packe(drinksOrder)); Thread.Sleep(200); free = false; + MessageLog.GetInstance.Show($"咖啡机: 制作咖啡指令"); } catch (Exception ex) { @@ -210,6 +211,7 @@ namespace BPASmartClient.DRCoffee commProxy.SendData(DrCoffee.Packe(drinksOrder)); Thread.Sleep(200); free = false; + MessageLog.GetInstance.Show($"咖啡机: 咖啡取消指令"); } catch (Exception ex) { @@ -228,6 +230,7 @@ namespace BPASmartClient.DRCoffee commProxy.SendData(DrCoffee.Packe(drinksOrder)); Thread.Sleep(200); free = false; + MessageLog.GetInstance.Show($"咖啡机: 咖啡模式设置指令"); } catch (Exception ex) { diff --git a/BPASmartClient.DosingSystem/App.xaml b/BPASmartClient.DosingSystem/App.xaml deleted file mode 100644 index b4732c63..00000000 --- a/BPASmartClient.DosingSystem/App.xaml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BPASmartClient.DosingSystem/App.xaml.cs b/BPASmartClient.DosingSystem/App.xaml.cs deleted file mode 100644 index e590be97..00000000 --- a/BPASmartClient.DosingSystem/App.xaml.cs +++ /dev/null @@ -1,188 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Configuration; -using System.Data; -using System.Linq; -using System.Threading.Tasks; -using System.Windows; -using BPASmartClient.CustomResource.Pages.Enums; -using BPASmartClient.CustomResource.Pages.Model; -using BPASmartClient.CustomResource.Pages.View; -using BPASmartClient.DosingSystem.Model; -using BPASmartClient.DosingSystem.View; -using BPASmartClient.Helper; - -namespace BPASmartClient.DosingSystem -{ - /// - /// Interaction logic for App.xaml - /// - public partial class App : Application - { - protected override void OnStartup(StartupEventArgs e) - { - base.OnStartup(e); - MenuInit(); - DataInit(); - - MainView mv = new MainView(); - LoginView lv = new LoginView(); - var res = lv.ShowDialog(); - if (res != null && res == true) - mv.Show(); - else - mv.Close(); - - - - //MainWindow mw = new MainWindow(); - //LoginView lv = new LoginView(); - //var res = lv.ShowDialog(); - //if (res != null && res == true) - // mw.Show(); - //else - // mw.Close(); - } - - protected override void OnExit(ExitEventArgs e) - { - base.OnExit(e); - Json.Save(); - MessageLog.GetInstance.LogSave(); - } - - private void MenuInit() - { - - #region 配方管理菜单 - ObservableCollection RecipeManage = new ObservableCollection(); - RecipeManage.Add(new SubMenumodel() - { - SubMenuName = "配方管理", - SubMenuPermission = new Permission[] { Permission.管理员 }, - AssemblyName = "BPASmartClient.DosingSystem", - ToggleWindowPath = "View.RecipeSettingsView" - }); - - RecipeManage.Add(new SubMenumodel() - { - SubMenuName = "配方下发", - SubMenuPermission = new Permission[] { Permission.操作员 }, - AssemblyName = "BPASmartClient.DosingSystem", - ToggleWindowPath = "View.RecipeControlView" - }); - - MenuManage.GetInstance.menuModels.Add(new MenuModel() - { - MainMenuIcon = "", - MainMenuName = "配方管理", - Alias = "Recipe Management", - MainMenuPermission = new Permission[] { Permission.管理员, Permission.操作员 }, - subMenumodels = RecipeManage, - }); - #endregion - - #region 消息日志 - ObservableCollection InfoLog = new ObservableCollection(); - InfoLog.Add(new SubMenumodel() - { - SubMenuName = "操作日志", - SubMenuPermission = new Permission[] { Permission.操作员, Permission.管理员, Permission.技术员 }, - AssemblyName = "BPASmartClient.CustomResource", - ToggleWindowPath = "Pages.View.UserLogView" - }); - - InfoLog.Add(new SubMenumodel() - { - SubMenuName = "运行日志", - SubMenuPermission = new Permission[] { Permission.操作员, Permission.管理员, Permission.技术员 }, - AssemblyName = "BPASmartClient.CustomResource", - ToggleWindowPath = "Pages.View.RunLogView" - }); - - InfoLog.Add(new SubMenumodel() - { - SubMenuName = "报警记录", - SubMenuPermission = new Permission[] { Permission.操作员, Permission.管理员, Permission.技术员 }, - AssemblyName = "BPASmartClient.CustomResource", - ToggleWindowPath = "Pages.View.AlarmView" - }); - - MenuManage.GetInstance.menuModels.Add(new MenuModel() - { - MainMenuIcon = "", - MainMenuName = "消息日志", - Alias = "Message Log", - MainMenuPermission = new Permission[] { Permission.管理员, Permission.操作员, Permission.技术员 }, - subMenumodels = InfoLog, - }); - #endregion - - #region 硬件设备监控 - ObservableCollection DeviceMonitor = new ObservableCollection(); - DeviceMonitor.Add(new SubMenumodel() - { - SubMenuName = "原料设备列表", - SubMenuPermission = new Permission[] { Permission.管理员, Permission.操作员, Permission.技术员 }, - AssemblyName = "BPASmartClient.DosingSystem", - ToggleWindowPath = "View.DeviceListView" - }); - - DeviceMonitor.Add(new SubMenumodel() - { - SubMenuName = "设备状态", - SubMenuPermission = new Permission[] { Permission.管理员, Permission.操作员, Permission.技术员 }, - AssemblyName = "BPASmartClient.DosingSystem", - ToggleWindowPath = "View.HardwareStatusView" - }); - - - MenuManage.GetInstance.menuModels.Add(new MenuModel() - { - MainMenuIcon = "", - MainMenuName = "设备监控", - Alias = "Device Monitor", - MainMenuPermission = new Permission[] { Permission.管理员, Permission.操作员, Permission.技术员 }, - subMenumodels = DeviceMonitor, - }); - #endregion - - #region 用户管理 - ObservableCollection UserManager = new ObservableCollection(); - UserManager.Add(new SubMenumodel() - { - SubMenuName = "用户登录", - SubMenuPermission = new Permission[] { Permission.管理员, Permission.操作员, Permission.技术员 }, - AssemblyName = "BPASmartClient.CustomResource", - ToggleWindowPath = "Pages.View.LoginView" - }); - - UserManager.Add(new SubMenumodel() - { - SubMenuName = "密码修改", - SubMenuPermission = new Permission[] { Permission.管理员, Permission.操作员, Permission.技术员 }, - AssemblyName = "BPASmartClient.CustomResource", - ToggleWindowPath = "Pages.View.PasswordChangeView" - }); - - - MenuManage.GetInstance.menuModels.Add(new MenuModel() - { - MainMenuIcon = "", - MainMenuName = "用户管理", - Alias = "User Management", - MainMenuPermission = new Permission[] { Permission.管理员, Permission.操作员, Permission.技术员 }, - subMenumodels = UserManager, - }); - #endregion - } - - private void DataInit() - { - Config.GetInstance.Init(); - Json.Read(); - } - - } -} diff --git a/BPASmartClient.DosingSystem/AssemblyInfo.cs b/BPASmartClient.DosingSystem/AssemblyInfo.cs deleted file mode 100644 index 8b5504ec..00000000 --- a/BPASmartClient.DosingSystem/AssemblyInfo.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Windows; - -[assembly: ThemeInfo( - ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located - //(used if a resource is not found in the page, - // or application resource dictionaries) - ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located - //(used if a resource is not found in the page, - // app, or any theme specific resource dictionaries) -)] diff --git a/BPASmartClient.DosingSystem/BPASmartClient.DosingSystem.csproj b/BPASmartClient.DosingSystem/BPASmartClient.DosingSystem.csproj deleted file mode 100644 index 37d3b321..00000000 --- a/BPASmartClient.DosingSystem/BPASmartClient.DosingSystem.csproj +++ /dev/null @@ -1,28 +0,0 @@ - - - - WinExe - net6.0-windows - enable - true - app.manifest - hbl.ico - AnyCPU - - - - - - - - - - - - - - - - - - diff --git a/BPASmartClient.DosingSystem/Model/ActionMenu.cs b/BPASmartClient.DosingSystem/Model/ActionMenu.cs deleted file mode 100644 index 00113337..00000000 --- a/BPASmartClient.DosingSystem/Model/ActionMenu.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Microsoft.Toolkit.Mvvm.ComponentModel; -using Microsoft.Toolkit.Mvvm.Input; - -namespace BPASmartClient.DosingSystem.Model -{ - public class ActionMenu : ObservableObject - { - public string CommandParameter { get { return _mCommandParameter; } set { _mCommandParameter = value; OnPropertyChanged(); } } - private string _mCommandParameter; - - //public Permission[] permission { get { return _mpermission; } set { _mpermission = value; OnPropertyChanged(); } } - //private Permission[] _mpermission; - - public string MenuName { get { return _mMenuName; } set { _mMenuName = value; OnPropertyChanged(); } } - private string _mMenuName; - - - //public string NameSpace { get { return _mNameSpace; } set { _mNameSpace = value; OnPropertyChanged(); } } - //private string _mNameSpace; - - - } -} diff --git a/BPASmartClient.DosingSystem/Model/DeviceAddress.cs b/BPASmartClient.DosingSystem/Model/DeviceAddress.cs deleted file mode 100644 index 7c57aaa8..00000000 --- a/BPASmartClient.DosingSystem/Model/DeviceAddress.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace BPASmartClient.DosingSystem.Model -{ - public class DeviceAddress - { - /// - /// 设备名称起始地址 - /// - public static string DeviceName { get; set; } = "LW0"; - - /// - /// 料仓重量反馈起始地址 - /// - public static string WeightFeedback { get; set; } = "LW204"; - - /// - /// 重量设置地址 - /// - public static string WeightSet { get; set; } = "LW200"; - - /// - /// 启动信号地址 - /// - public static string Start { get; set; } = "LW210"; - - /// - /// 下料重量反馈地址 - /// - public static string CutWeightFeedback { get; set; } = "LW202"; - - /// - /// 设备运行状态地址 - /// - public static string RunStatus { get; set; } = "LW206"; - } - - - -} diff --git a/BPASmartClient.DosingSystem/Model/DeviceInquire.cs b/BPASmartClient.DosingSystem/Model/DeviceInquire.cs deleted file mode 100644 index 181abeda..00000000 --- a/BPASmartClient.DosingSystem/Model/DeviceInquire.cs +++ /dev/null @@ -1,221 +0,0 @@ -using BPASmartClient.Helper; -using BPASmartClient.Message; -using BPASmartClient.Modbus; -using BPASmartClient.DosingSystem.ViewModel; -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Net.NetworkInformation; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - -namespace BPASmartClient.DosingSystem.Model -{ - public class DeviceInquire - { - private volatile static DeviceInquire _Instance; - public static DeviceInquire GetInstance => _Instance ?? (_Instance = new DeviceInquire()); - private DeviceInquire() { } - - string IPSegment = "192.168.0."; - - ConcurrentDictionary DeviceLists = new ConcurrentDictionary(); - List InvalidIP = new List();//无效 IP 集合 - List IPLists = new List();//启动 Ping 任务IP集合 - ConcurrentQueue IPQueues = new ConcurrentQueue();//pincomplete 完成队列 - - public void Init() - { - IpAddressLines(); - ThreadManage.GetInstance().StartLong(new Action(() => - { - if (IPQueues.Count >= IPLists.Count) - IpAddressLines(); - Thread.Sleep(5000); - }), "配料机设备上线监听", true); - } - - public void Rescan() - { - InvalidIP.Clear(); - } - - public DeviceStatus GetDevice(string ip) - { - if (ip != null) - { - var res = DeviceLists.Values.FirstOrDefault(p => p.IpAddress == ip); - if (res != null) return res; - } - return new DeviceStatus(); - } - - private void IpAddressLines() - { - IPLists.Clear(); - IPQueues.Clear(); - for (int i = 1; i <= 255; i++) - { - if (!InvalidIP.Contains($"{IPSegment}{i}") && !DeviceLists.ContainsKey($"{IPSegment}{i}")) - { - IPLists.Add($"{IPSegment}{i}"); - } - } - - IPLists.ForEach((item) => - { - Ping myPing = new Ping(); - myPing.PingCompleted += new PingCompletedEventHandler(_myPing_PingCompleted); - myPing.SendAsync(item, 1000, null); - }); - } - - private void _myPing_PingCompleted(object sender, PingCompletedEventArgs e) - { - if (e.Reply.Status == IPStatus.Success) - { - string ip = e.Reply.Address.ToString(); - if (!DeviceLists.ContainsKey(ip)) - { - DeviceStatus DS = new DeviceStatus(); - DS.modbusTcp.IsReconnect = false; - - DS.modbusTcp.ConnectOk = new Action(() => - { - string DeviceName = DS.modbusTcp.GetString(DeviceAddress.DeviceName, 20); - if (DeviceName.Length > 0) - { - DeviceLists.TryAdd(ip, DS); - DeviceLists[ip].Init(DeviceName); - DeviceLists[ip].modbusTcp.IsReconnect = false; - App.Current.Dispatcher.Invoke(new Action(() => - { - DeviceListViewModel.devices.Add(new Devices() - { - DeviceName = DeviceName, - IpAddress = ip - }); - - for (int i = 0; i < Json.Data.Recipes.Count; i++) - { - for (int m = 0; m < Json.Data.Recipes.ElementAt(i).RawMaterials.Count; m++) - { - if (Json.Data.Recipes.ElementAt(i).RawMaterials.ElementAt(m).DeviceIp == ip) - { - Json.Data.Recipes.ElementAt(i).RawMaterials.ElementAt(m).RawMaterialName = DeviceName; - } - } - } - - if (!NewRecipeViewModel.RawMaterialNames.Contains(DeviceName)) - NewRecipeViewModel.RawMaterialNames.Add(DeviceName); - - })); - } - else - { - if (!InvalidIP.Contains(ip)) InvalidIP.Add(ip); - } - }); - - DS.modbusTcp.ConnectFail = new Action(() => - { - if (!InvalidIP.Contains(ip)) InvalidIP.Add(ip); - MessageLog.GetInstance.Show($"{ip}连接失败"); - }); - - DS.modbusTcp.Disconnect = new Action(() => - { - if (InvalidIP.Contains(ip)) InvalidIP.Remove(ip); - var res = DeviceListViewModel.devices.FirstOrDefault(P => P.IpAddress == ip); - if (res != null && DeviceListViewModel.devices.Contains(res)) - App.Current.Dispatcher.Invoke(new Action(() => - { - DeviceListViewModel.devices.Remove(res); - if (!NewRecipeViewModel.RawMaterialNames.Contains(res.DeviceName)) - NewRecipeViewModel.RawMaterialNames.Remove(res.DeviceName); - })); - if (DeviceLists.ContainsKey(ip)) DeviceLists[ip].Dispose(); - }); - - Task.Run(new Action(() => - { - DS.modbusTcp.ModbusTcpConnect(ip, 502); - IPQueues.Enqueue(e.Reply.Address.ToString()); - })); - } - else IPQueues.Enqueue(e.Reply.Address.ToString()); - } - else IPQueues.Enqueue(e.Reply.Address.ToString()); - } - } - - public class DeviceStatus - { - - #region 对象属性声明 - public string DeviceName = String.Empty; - public string IpAddress => modbusTcp.IPAdress; - - /// - /// 设备状态 - /// - public RawMaterialDeviceStatus deviceStatus { get; set; } = new RawMaterialDeviceStatus(); - - public ModbusTcp modbusTcp = new ModbusTcp(); - - public bool IsConnected => modbusTcp.Connected; - #endregion - - public void Init(string DeviceName) - { - this.DeviceName = DeviceName; - if (modbusTcp.Connected) - { - ThreadManage.GetInstance().StartLong(new Action(() => - { - //获取设备运行状态 - var res = this.modbusTcp.Read(DeviceAddress.RunStatus); - if (res != null && res is ushort[] ushortValue) - { - if (ushortValue.Length >= 1) deviceStatus.RunStatus = ushortValue[0]; - } - - //获取设备料仓剩余重量 - deviceStatus.WeightFeedback = this.modbusTcp.GetUint(DeviceAddress.WeightFeedback) * 10; - - Thread.Sleep(100); - }), $"{DeviceName} 开始监听", true); - } - } - - public void SetDeviceName(string name) - { - this.modbusTcp.Write(DeviceAddress.DeviceName, new ushort[20]); - this.modbusTcp.SetString(DeviceAddress.DeviceName, name); - } - - public void StatusReset() - { - this.modbusTcp.Write(DeviceAddress.RunStatus, (ushort)0); - } - - public void Dispose() - { - ThreadManage.GetInstance().StopTask($"{DeviceName} 开始监听"); - } - - public void Start(uint Value) - { - if (modbusTcp.Connected) - { - modbusTcp.SetUint(DeviceAddress.WeightSet, Value);//写入配方量 - modbusTcp.Write(DeviceAddress.Start, (ushort)1);//设备启动写入 - } - } - } - -} diff --git a/BPASmartClient.DosingSystem/Model/LocaPar.cs b/BPASmartClient.DosingSystem/Model/LocaPar.cs deleted file mode 100644 index 31815e0c..00000000 --- a/BPASmartClient.DosingSystem/Model/LocaPar.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Collections.ObjectModel; -using BPASmartClient.DosingSystem.ViewModel; - -namespace BPASmartClient.DosingSystem.Model -{ - public class LocaPar - { - public ObservableCollection Recipes { get; set; } = new ObservableCollection(); - } -} diff --git a/BPASmartClient.DosingSystem/Model/RawMaterialDeviceStatus.cs b/BPASmartClient.DosingSystem/Model/RawMaterialDeviceStatus.cs deleted file mode 100644 index 1febc8a9..00000000 --- a/BPASmartClient.DosingSystem/Model/RawMaterialDeviceStatus.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace BPASmartClient.DosingSystem.Model -{ - public class RawMaterialDeviceStatus - { - - /// - /// 原料类型 - /// 1:液体 - /// 2:膏体 - /// 3:粉体 - /// - public ushort RawMaterialType { get; set; } - - /// - /// 料仓重量反馈 - /// - public float WeightFeedback { get; set; } - - /// - /// 上限反馈 - /// - public bool UpLimitFeedback { get; set; } - - /// - /// 下限反馈 - /// - public bool DownLimitFeedback { get; set; } - - /// - /// 下料重量反馈 - /// - public float CutWeightFeedback { get; set; } - - /// - /// 设备运行状态 - /// - public ushort RunStatus { get; set; } - } -} diff --git a/BPASmartClient.DosingSystem/Model/RawMaterialModel.cs b/BPASmartClient.DosingSystem/Model/RawMaterialModel.cs deleted file mode 100644 index 7b5f3eb5..00000000 --- a/BPASmartClient.DosingSystem/Model/RawMaterialModel.cs +++ /dev/null @@ -1,88 +0,0 @@ -using Microsoft.Toolkit.Mvvm.ComponentModel; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace BPASmartClient.DosingSystem.Model -{ - /// - /// 原料模块 - /// - public class RawMaterialModel : ObservableObject - { - /// - /// 原料名称 - /// - public string RawMaterialName { get { return _mRawMaterialName; } set { _mRawMaterialName = value; OnPropertyChanged(); } } - private string _mRawMaterialName; - - /// - /// 原料设备IP - /// - public string DeviceIp { get; set; } - - /// - /// 原料重量设置 - /// - public uint RawMaterialWeight { get { return _mRawMaterialWeight; } set { _mRawMaterialWeight = value; OnPropertyChanged(); } } - private uint _mRawMaterialWeight; - - /// - /// 原料类型 MW18 - /// 1:液体 - /// 2:膏体 - /// 3:粉体 - /// - [Newtonsoft.Json.JsonIgnore] - public ushort RawMaterialType { get { return _mRawMaterialType; } set { _mRawMaterialType = value; OnPropertyChanged(); } } - private ushort _mRawMaterialType; - - /// - /// 料仓重量反馈 MD40 - /// - [Newtonsoft.Json.JsonIgnore] - public float WeightFeedback { get { return _mWeightFeedback; } set { _mWeightFeedback = value; OnPropertyChanged(); } } - private float _mWeightFeedback; - - /// - /// 上限反馈 - /// - [Newtonsoft.Json.JsonIgnore] - public bool UpLimtFeedback { get { return _mUpLimtFeedback; } set { _mUpLimtFeedback = value; OnPropertyChanged(); } } - private bool _mUpLimtFeedback; - - /// - /// 下限反馈 - /// - [Newtonsoft.Json.JsonIgnore] - public bool DownLimtFeedback { get { return _mDownLimtFeedback; } set { _mDownLimtFeedback = value; OnPropertyChanged(); } } - private bool _mDownLimtFeedback; - - /// - /// 下料重量反馈 MD52 - /// - [Newtonsoft.Json.JsonIgnore] - public float UpLimtWeightFeedback { get { return _mUpLimtWeightFeedback; } set { _mUpLimtWeightFeedback = value; OnPropertyChanged(); } } - private float _mUpLimtWeightFeedback; - - - /// - /// 原料ID - /// - public string RawMaterialId { get { return _mRawMaterialId; } set { _mRawMaterialId = value; OnPropertyChanged(); } } - private string _mRawMaterialId; - - /// - /// 原料设备执行状态 - /// 1:空闲状态 - /// 2:下料中 - /// 3:下料完成 - /// - [Newtonsoft.Json.JsonIgnore] - public ushort RecipeStatus { get { return _mRecipeStatus; } set { _mRecipeStatus = value; OnPropertyChanged(); } } - private ushort _mRecipeStatus = 1; - - } -} diff --git a/BPASmartClient.DosingSystem/Model/RecipeModel.cs b/BPASmartClient.DosingSystem/Model/RecipeModel.cs deleted file mode 100644 index 203d4658..00000000 --- a/BPASmartClient.DosingSystem/Model/RecipeModel.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using BPASmartClient.DosingSystem.ViewModel; -using Microsoft.Toolkit.Mvvm.ComponentModel; - -namespace BPASmartClient.DosingSystem.Model -{ - /// - /// 配方模块 - /// - public class RecipeModel : ObservableObject - { - [Newtonsoft.Json.JsonIgnore] - public bool IsEnable { get { return _mIsEnable; } set { _mIsEnable = value; OnPropertyChanged(); } } - private bool _mIsEnable = true; - - /// - /// 序号 - /// - public int SerialNum { get { return _mSerialNum; } set { _mSerialNum = value; OnPropertyChanged(); } } - private int _mSerialNum; - - /// - /// 配方名称 - /// - public string RecipeName { get { return _mRecipeName; } set { _mRecipeName = value; OnPropertyChanged(); } } - private string _mRecipeName; - - /// - /// 配方编码 - /// - public string RecipCode { get { return _mRecipCode; } set { _mRecipCode = value; OnPropertyChanged(); } } - private string _mRecipCode; - - [Newtonsoft.Json.JsonIgnore] - public AutoResetEvent Are { get; set; } = new AutoResetEvent(false); - - /// - /// 原料集合 - /// - public ObservableCollection RawMaterials { get; set; } = new ObservableCollection(); - - - - } -} diff --git a/BPASmartClient.DosingSystem/View/AlarmRecordView.xaml b/BPASmartClient.DosingSystem/View/AlarmRecordView.xaml deleted file mode 100644 index bfdfa310..00000000 --- a/BPASmartClient.DosingSystem/View/AlarmRecordView.xaml +++ /dev/null @@ -1,380 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BPASmartClient.DosingSystem/View/ChangeDeviceNameView.xaml b/BPASmartClient.DosingSystem/View/ChangeDeviceNameView.xaml deleted file mode 100644 index 5538aa49..00000000 --- a/BPASmartClient.DosingSystem/View/ChangeDeviceNameView.xaml +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -