private void bTestMessageBoxQuestion_Click(object sender, RoutedEventArgs e) { WPFMessageBoxResult result = WPFMessageBox.ShowQuestion((sender as Button).Content.ToString(), "测试"); WPFMessageBox.ShowInfo((result == WPFMessageBoxResult.Yes ? "Yes" : result == WPFMessageBoxResult.No ? "NO" : "Cancel"), "结果"); }
//UI6下降沿 private void BtnPauseStart_Click(object sender, RoutedEventArgs e) { try { FmsAssetTagSetting tag = DeviceMonitor.GetTagSettings("TAG_CODE = 'UI6'").FirstOrDefault(); if (tag == null) { return; } Cursor = Cursors.Wait; int ret = 0; string error = ""; int iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "1", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } if (ret != 0) { Cursor = Cursors.Arrow; return; } Thread.Sleep(500); iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } Cursor = Cursors.Arrow; if (ret == 0) { WPFMessageBox.ShowInfo("机器人的暂停后启动信息已经成功给出!", "启动机器人"); } } catch (Exception ex) { Cursor = Cursors.Arrow; } }
//测试 private void BtnTest_Click(object sender, RoutedEventArgs e) { TbTestResult.Text = ""; RefreshCalculationText(); Type dynamicCode = null; //获取编译后代码,调用该类用 Dictionary <string, Dictionary <string, string> > FuncAndParamTagPKNO = new Dictionary <string, Dictionary <string, string> >(); //函数和对应参数的Tag的PKNO string className = "C" + Guid.NewGuid().ToString("N"); try { Cursor = Cursors.Wait; #region 形成执行的代码 string execCode = "using System; \r\n" + "using System.Text; \r\n" + "using System.Collections.Generic; \r\n" + "using BFM.Common.Base; \r\n\r\n"; execCode += "public class " + className + "\r\n" + "{ \r\n"; string basicFuc = "AutoCalculation"; int index = 1; FuncAndParamTagPKNO.Clear(); string exp = CalculationText; //表达式 string funcname = basicFuc + index.ToString(); //函数名称 Dictionary <string, string> paramTas = new Dictionary <string, string>(); //参数对应的标签的PKNO, param名称 List <string> funcParam = new List <string>(); //带类型的参数 string code = ""; foreach (var line in exp.Split(new string[] { "\r\n" }, StringSplitOptions.None)) { string ret = line; #region 替换标签值,将标签替换成参数名 string[] expTags = line.Split('{'); for (int i = 0; i < expTags.Length; i++) { string str = expTags[i]; int length = str.IndexOf('}'); if (length < 0) //没有找到 } { continue; } string tagPKNO = str.Substring(0, length); //{ } 内为PKNO string param = "{" + tagPKNO + "}"; if (paramTas.ContainsKey(tagPKNO)) //已经添加了该参数 { param = paramTas[tagPKNO]; } else { FmsAssetTagSetting tag = DeviceTags.FirstOrDefault(s => s.PKNO == tagPKNO); if (tag == null) { continue; } param = "param" + paramTas.Count; paramTas.Add(tagPKNO, param); string paramType = "string"; //string paramType = ((CalculationType == 2) || (tag.VALUE_TYPE > 0 && tag.VALUE_TYPE < 20)) // ? "double" // : "string"; funcParam.Add(paramType + " " + param); } ret = ret.Replace("{" + tagPKNO + "}", param); } #endregion if (string.IsNullOrEmpty(code)) { code = " " + ret; } else { code += Environment.NewLine + " " + ret; } } //C#脚本 //支持C#语法,最后返回值(Double/String) string resultType = "string"; //确定返回结果类型,将code语句转换成C#的语句 if (CalculationType == 1) //逻辑运算 { //(结果为1,0):({标签1}==1)&&({标签2}==1)&&({标签3}==0||{标签4}==0)&&({标签5}==1) code = code.Replace("AND", "&&").Replace("and", "&&").Replace("OR", "||").Replace("or", "||"); resultType = "bool"; } else if (CalculationType == 2) //数值运算 { //{标签1}+3+{标签2}+4 resultType = "double"; } else if (CalculationType == 3) //字符运算 { //{标签1}+"123" } else if (CalculationType == 12) //条件数值运算 { //{标签1}==3:{标签2}+1;{标签1}==4:{标签2}+2;{标签1}==5:{标签2}+3 resultType = "double"; List <string> exps = code.Split(';').ToList(); string temp = ""; foreach (var exp1 in exps) { if (exp1.Split(':').Length < 2) { continue; } temp += " if (" + exp1.Split(':')[0] + ") { return (" + exp1.Split(':')[1] + "); } \r\n"; } temp += " return 0; \r\n"; code = temp; } else if (CalculationType == 13) //条件字符运算 { //{标签1}==3:{标签1}+"123";{标签1}==4:{标签1}+"123" List <string> exps = code.Split(';').ToList(); string temp = ""; foreach (var exp1 in exps) { if (exp1.Split(':').Length < 2) { continue; } temp += " if (" + exp1.Split(':')[0] + ") { return (" + exp1.Split(':')[1] + ").ToString(); } \r\n"; } temp += " return \"\"; \r\n"; code = temp; } else if (CalculationType == 21) { resultType = "string";//{标签1};3 List <string> exps = code.Split(';').ToList(); string temp = ""; if (exps.Count >= 2) { int arrayIndex = SafeConverter.SafeToInt(exps[1].Trim(), 0); temp += " if ( " + exps[0].Trim() + ".Split('|').Length > " + arrayIndex + ") { return " + exps[0].Trim() + ".Split('|')[" + arrayIndex + "]; } \r\n"; } temp += " return \"\"; \r\n"; code = temp; } else if (CalculationType == 100) //C#脚本 { //支持C#语法,最后返回值(Double/String) resultType = "string"; } else //不支持的类型 { code = $" return \"计算类型[{CalculationType}],不支持的类型。\"; \r\n"; } execCode += DynamicCode.BuildExecFunc(funcname, resultType, code, funcParam); FuncAndParamTagPKNO.Add(funcname, paramTas); //添加 execCode += "}\r\n"; #endregion #region 编译代码 CodeDomProvider compiler = new CSharpCodeProvider(); CompilerParameters cp = new CompilerParameters() { GenerateExecutable = false, GenerateInMemory = true, }; cp.ReferencedAssemblies.Add("BFM.Common.Base.dll"); CompilerResults cr = compiler.CompileAssemblyFromSource(cp, execCode); if (cr.Errors.HasErrors) { WPFMessageBox.ShowError("测试失败,语法错误.\r\n" + execCode, "测试"); return; } dynamicCode = cr.CompiledAssembly.GetType(className); //获取 #endregion #region 获取值 index = 0; string funcName = FuncAndParamTagPKNO.Keys.ToList()[index]; var tagParms = FuncAndParamTagPKNO.Values.ToList()[index]; List <object> paramValues = new List <object>(); //参数值 foreach (var tagpkno in tagParms) //参数 { object value; FmsAssetTagSetting tagParam = DeviceTags.FirstOrDefault(s => s.PKNO == tagpkno.Key); if (tagParam != null) { value = SafeConverter.SafeToStr(tagParam.CUR_VALUE); //if ((CalculationType == 2) || (tagParam.VALUE_TYPE > 0 && tagParam.VALUE_TYPE < 20)) //{ // value = SafeConverter.SafeToDouble(tagParam.CUR_VALUE); //} //else //{ // value = SafeConverter.SafeToStr(tagParam.CUR_VALUE); //} } else { value = ""; } paramValues.Add(value); } object obj = dynamicCode.InvokeMember(funcName, BindingFlags.Public | BindingFlags.Static | BindingFlags.InvokeMethod, System.Type.DefaultBinder, null, paramValues.ToArray()); string newValue = ""; //新的计算结果 if (CalculationType == 1) //逻辑运算 { newValue = SafeConverter.SafeToBool(obj) ? "1" : "0"; } else { newValue = SafeConverter.SafeToStr(obj); } Console.WriteLine("测试结果:" + newValue); TbTestResult.Text = newValue; #endregion WPFMessageBox.ShowInfo("测试成功. \r\n测试结果为:" + newValue, "测试"); } catch (Exception ex) { Console.WriteLine(ex); WPFMessageBox.ShowError("测试失败,错误为:" + ex.Message, "测试"); } finally { Cursor = Cursors.Arrow; } }
private void Btn_Start2Click(object sender, RoutedEventArgs e) { WcfClient <IPLMService> ws2 = new WcfClient <IPLMService>(); string LineCode = CBaseData.CurLinePKNO;//加工单元 List <MesJobOrder> mesJobOrders = ws2.UseService(s => s.GetMesJobOrders( $"USE_FLAG = 1 AND RUN_STATE < 100 AND LINE_PKNO = '{LineCode}'")) .OrderBy(c => c.CREATION_DATE).ToList(); if (mesJobOrders.Count > 20) { WaitLoading.SetDefault(this); WPFMessageBox.ShowError("当前订单过多,请等待加工完成", "加工工单"); return; } if (WPFMessageBox.ShowConfirm("确定下达加工工单么吗?\r\n" + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n", "加工工单") != WPFMessageBoxResult.OK) { return; } //后台执行添加 new Thread(delegate() { WaitLoading.SetWait(this); Thread.Sleep(1000); DateTime jobOrderTime = DateTime.Now.AddSeconds(-10); int iJobOrderIndex = 0; List <MesJobOrder> jobOrders = new List <MesJobOrder>(); //所有订单 List <MesProcessCtrol> processCtrols = new List <MesProcessCtrol>(); //控制流程 List <WmsAllocationInfo> allocationInfos = new List <WmsAllocationInfo>(); //需要修改的货位 Dictionary <string, string> ParamValues = new Dictionary <string, string>(); MesJobOrder job = null; string sFormulaCode = ""; List <FmsActionFormulaDetail> formulaDetails; List <RsItemMaster> items = wsRsm.UseService(s => s.GetRsItemMasters("USE_FLAG = 1")); RsItemMaster gyroscope = items.FirstOrDefault(c => c.ITEM_NAME == "指尖陀螺"); //产品信息 #region 2.车床上料 job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单-- jobOrders.Add(job); #region --设定参数-- ParamValues.Clear(); ParamValues.Add("{图片名称}", LaserPicName); //定制图片 //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); #endregion sFormulaCode = "车床上料"; #region 形成过程控制 formulaDetails = wsFms.UseService(s => s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1")) .OrderBy(c => c.PROCESS_INDEX) .ToList(); foreach (var detail in formulaDetails) //配方 { MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues); processCtrols.Add(process); } #endregion #endregion #region 3.加工中心上料 job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单-- jobOrders.Add(job); #region --设定参数-- ParamValues.Clear(); ParamValues.Add("{图片名称}", LaserPicName); //定制图片 //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); #endregion sFormulaCode = "加工中心上料"; #region 形成过程控制 formulaDetails = wsFms.UseService(s => s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1")) .OrderBy(c => c.PROCESS_INDEX) .ToList(); foreach (var detail in formulaDetails) //配方 { MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues); processCtrols.Add(process); } #endregion #endregion #region 4.1.AGV充电 job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单-- jobOrders.Add(job); #region --设定参数-- ParamValues.Clear(); ParamValues.Add("{图片名称}", LaserPicName); //定制图片 //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); #endregion sFormulaCode = "AGV充电"; #region 形成过程控制 formulaDetails = wsFms.UseService(s => s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1")) .OrderBy(c => c.PROCESS_INDEX) .ToList(); foreach (var detail in formulaDetails) //配方 { MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues); processCtrols.Add(process); } #endregion #endregion #region 4.2 加工中心先下料再上料 job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单-- jobOrders.Add(job); #region --设定参数-- ParamValues.Clear(); ParamValues.Add("{图片名称}", LaserPicName); //定制图片 //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); //生产设备 #endregion sFormulaCode = "加工中心先下料再上料"; #region 形成过程控制 formulaDetails = wsFms.UseService(s => s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1")) .OrderBy(c => c.PROCESS_INDEX) .ToList(); foreach (var detail in formulaDetails) //配方 { MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues); processCtrols.Add(process); } #endregion #endregion #region 4.3.AGV充电 job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单-- jobOrders.Add(job); #region --设定参数-- ParamValues.Clear(); ParamValues.Add("{图片名称}", LaserPicName); //定制图片 //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); //生产设备 #endregion sFormulaCode = "AGV充电"; #region 形成过程控制 formulaDetails = wsFms.UseService(s => s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1")) .OrderBy(c => c.PROCESS_INDEX) .ToList(); foreach (var detail in formulaDetails) //配方 { MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues); processCtrols.Add(process); } #endregion #endregion #region 4.4 加工中心先下料再上料 job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单-- jobOrders.Add(job); #region --设定参数-- ParamValues.Clear(); ParamValues.Add("{图片名称}", LaserPicName); //定制图片 //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); //生产设备 #endregion sFormulaCode = "加工中心先下料再上料"; #region 形成过程控制 formulaDetails = wsFms.UseService(s => s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1")) .OrderBy(c => c.PROCESS_INDEX) .ToList(); foreach (var detail in formulaDetails) //配方 { MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues); processCtrols.Add(process); } #endregion #endregion #region 4.3.AGV充电 job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单-- jobOrders.Add(job); #region --设定参数-- ParamValues.Clear(); ParamValues.Add("{图片名称}", LaserPicName); //定制图片 //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); //生产设备 #endregion sFormulaCode = "AGV充电"; #region 形成过程控制 formulaDetails = wsFms.UseService(s => s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1")) .OrderBy(c => c.PROCESS_INDEX) .ToList(); foreach (var detail in formulaDetails) //配方 { MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues); processCtrols.Add(process); } #endregion #endregion #region 4.4 加工中心先下料再上料 job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单-- jobOrders.Add(job); #region --设定参数-- ParamValues.Clear(); ParamValues.Add("{图片名称}", LaserPicName); //定制图片 //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); //生产设备 #endregion sFormulaCode = "加工中心先下料再上料"; #region 形成过程控制 formulaDetails = wsFms.UseService(s => s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1")) .OrderBy(c => c.PROCESS_INDEX) .ToList(); foreach (var detail in formulaDetails) //配方 { MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues); processCtrols.Add(process); } #endregion #endregion #region 4.3.AGV充电 job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单-- jobOrders.Add(job); #region --设定参数-- ParamValues.Clear(); ParamValues.Add("{图片名称}", LaserPicName); //定制图片 //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); //生产设备 #endregion sFormulaCode = "AGV充电"; #region 形成过程控制 formulaDetails = wsFms.UseService(s => s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1")) .OrderBy(c => c.PROCESS_INDEX) .ToList(); foreach (var detail in formulaDetails) //配方 { MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues); processCtrols.Add(process); } #endregion #endregion #region 5.加工中心下料 job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单-- jobOrders.Add(job); #region --设定参数-- ParamValues.Clear(); ParamValues.Add("{图片名称}", LaserPicName); //定制图片 //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); #endregion sFormulaCode = "加工中心下料"; #region 形成过程控制 formulaDetails = wsFms.UseService(s => s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1")) .OrderBy(c => c.PROCESS_INDEX) .ToList(); foreach (var detail in formulaDetails) //配方 { MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues); processCtrols.Add(process); } #endregion #endregion #region 6.车床下料 job = BuildNewJobOrder(gyroscope.PKNO, 2, "陀螺生产", jobOrderTime.AddSeconds(iJobOrderIndex++)); //--形成订单-- jobOrders.Add(job); #region --设定参数-- ParamValues.Clear(); ParamValues.Add("{图片名称}", LaserPicName); //定制图片 //ParamValues.Add("{加工数量}", this.txt_Qty2.Text); #endregion sFormulaCode = "车床下料"; #region 形成过程控制 formulaDetails = wsFms.UseService(s => s.GetFmsActionFormulaDetails($"FORMULA_CODE = '{sFormulaCode}' AND USE_FLAG= 1")) .OrderBy(c => c.PROCESS_INDEX) .ToList(); foreach (var detail in formulaDetails) //配方 { MesProcessCtrol process = BuildNewProcess(job, detail, ParamValues); processCtrols.Add(process); } #endregion #endregion DeviceProcessControl.PauseByLine(CBaseData.CurLinePKNO); //暂停,防止任务直接执行 #region 保存数据 foreach (var allocationInfo in allocationInfos) { ws.UseService(s => s.UpdateWmsAllocationInfo(allocationInfo)); Thread.Sleep(100); } foreach (var ctrol in processCtrols) { wsPlm.UseService(s => s.AddMesProcessCtrol(ctrol)); Thread.Sleep(100); } foreach (var jobOrder in jobOrders) //订单 { wsPlm.UseService(s => s.AddMesJobOrder(jobOrder)); Thread.Sleep(100); } #endregion DeviceProcessControl.RunByLine(CBaseData.CurLinePKNO); //启动动作流程 WaitLoading.SetDefault(this); WPFMessageBox.ShowInfo("FCS订单已下达", "指尖陀螺加工"); }).Start(); }
private void bTestMessageBoxConfirm_Click(object sender, RoutedEventArgs e) { WPFMessageBoxResult result = WPFMessageBox.ShowConfirm((sender as Button).Content.ToString(), "测试"); WPFMessageBox.ShowInfo((result == WPFMessageBoxResult.OK ? "OK" : "Cancel"), "结果"); }
private void bTestMessageBoxInfo_Click(object sender, RoutedEventArgs e) { WPFMessageBox.ShowInfo((sender as Button).Content.ToString(), "测试"); }
private void btnRestDevice1_Click(object sender, RoutedEventArgs e) { //创胜特尔 try { Cursor = Cursors.Wait; string assetCode = "SH00003"; int ret = 0; string error = ""; int iWrite = 0; string tagAddress = ""; FmsAssetTagSetting tag = null; tagAddress = "#120"; #region 清空换刀刀号 tag = DeviceMonitor.GetTagSettings($"ASSET_CODE = '{assetCode}' AND TAG_ADDRESS = '{tagAddress}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagAddress = "#121"; #region 清空下次换刀刀号 tag = DeviceMonitor.GetTagSettings($"ASSET_CODE = '{assetCode}' AND TAG_ADDRESS = '{tagAddress}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagAddress = "E520.0"; #region 清空启动程序 tag = DeviceMonitor.GetTagSettings($"ASSET_CODE = '{assetCode}' AND TAG_ADDRESS = '{tagAddress}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagAddress = "E521.0"; #region 清空 机床加工下发/完成 tag = DeviceMonitor.GetTagSettings($"ASSET_CODE = '{assetCode}' AND TAG_ADDRESS = '{tagAddress}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagAddress = "E521.1"; #region 清空 机床换刀中 tag = DeviceMonitor.GetTagSettings($"ASSET_CODE = '{assetCode}' AND TAG_ADDRESS = '{tagAddress}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagAddress = "E530"; #region 清空 机床加工程序号 tag = DeviceMonitor.GetTagSettings($"ASSET_CODE = '{assetCode}' AND TAG_ADDRESS = '{tagAddress}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagAddress = "E531.0"; #region 清空 机床松开刀 tag = DeviceMonitor.GetTagSettings($"ASSET_CODE = '{assetCode}' AND TAG_ADDRESS = '{tagAddress}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagAddress = "E532.0"; #region 清空 机床拉紧刀 tag = DeviceMonitor.GetTagSettings($"ASSET_CODE = '{assetCode}' AND TAG_ADDRESS = '{tagAddress}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagAddress = "E533.0"; #region 清空 机器人离开机床 tag = DeviceMonitor.GetTagSettings($"ASSET_CODE = '{assetCode}' AND TAG_ADDRESS = '{tagAddress}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion Cursor = Cursors.Arrow; if (ret == 0) { WPFMessageBox.ShowInfo("1#机床(创胜特尔)的FCS状态已复位.", "复位机床状态"); } } catch (Exception ex) { Cursor = Cursors.Arrow; } }
//UI18下降沿 private void BtnStart_Click(object sender, RoutedEventArgs e) { try { Cursor = Cursors.Wait; int ret = 0; string error = ""; int iWrite = 0; string tagCode = ""; FmsAssetTagSetting tag = null; #region 清空相关DI #region 清空DI271 tagCode = "DI271"; tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion #region 清空DI272 tagCode = "DI272"; tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion #region 清空DI275 tagCode = "DI275"; tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion #region 清空DI276 tagCode = "DI276"; tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion #region 清空DI277 tagCode = "DI277"; tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion #region AGV寄存器清空 tagCode = "1005"; tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "1", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion #endregion tagCode = "清空机器人GI"; #region 清空GI tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagCode = "UI5"; #region 给出UI5 tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "1", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagCode = "UI17"; #region 给出UI17 tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "1", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion Thread.Sleep(300); tagCode = "UI18"; #region UI18 下降沿 tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "1", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } if (ret != 0) { Cursor = Cursors.Arrow; return; } Thread.Sleep(300); iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion Thread.Sleep(1000); tagCode = "UI17"; #region 清空 UI17 tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagCode = "UI5"; #region 清空 UI5 tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "0", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion Cursor = Cursors.Arrow; if (ret == 0) { WPFMessageBox.ShowInfo("机器人启动信号已经成功给出.", "启动机器人"); } } catch (Exception ex) { Cursor = Cursors.Arrow; } }
//机器人使能 private void Button_Click(object sender, RoutedEventArgs e) { //机器人使能UI1=1 UI2=1 UI3=1 UI8=1 UI9=1 FmsAssetTagSetting tag = null; int ret = 0; string error = ""; int iWrite = 0; string tagCode = "UI1"; tagCode = "UI1"; #region 给出使能 tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "1", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagCode = "UI2"; #region 给出使能 tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "1", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagCode = "UI3"; #region 给出使能 tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "1", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagCode = "UI8"; #region 给出使能 tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "1", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagCode = "UI9"; #region 给出使能 tag = DeviceMonitor.GetTagSettings($"TAG_CODE = '{tagCode}'").FirstOrDefault(); if (tag == null) { return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "1", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion if (ret == 0) { WPFMessageBox.ShowInfo("机器人使能已经给出.", "启动机器人"); } }
private void btnRestDevice2_Click(object sender, RoutedEventArgs e) { //英伟达 try { Cursor = Cursors.Wait; string assetCode = "SH00002"; int ret = 0; string error = ""; int iWrite = 0; string tagAddress = ""; FmsAssetTagSetting tag = null; tagAddress = "E530"; #region 初始化101程序 tag = DeviceMonitor.GetTagSettings($"ASSET_CODE = '{assetCode}' AND TAG_ADDRESS = '{tagAddress}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "101", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion tagAddress = "E520.0"; #region 初始化开始状态 tag = DeviceMonitor.GetTagSettings($"ASSET_CODE = '{assetCode}' AND TAG_ADDRESS = '{tagAddress}'").FirstOrDefault(); if (tag == null) { Cursor = Cursors.Arrow; return; } iWrite = 0; while (iWrite < ReWriteCount) { ret = DeviceMonitor.WriteTagToDevice(tag.PKNO, "1", out error); if (ret == 0) { break; } iWrite++; Thread.Sleep(100); } #endregion Cursor = Cursors.Arrow; if (ret == 0) { WPFMessageBox.ShowInfo("2#机床(英伟达)的FCS状态已复位.", "复位机床状态"); } } catch (Exception ex) { Cursor = Cursors.Arrow; } }