using System; using System.Collections.Generic; using System.Configuration; using System.Drawing; using System.Windows.Forms; using System.ComponentModel; using QMAPP.FJC.Entity; using QMAPP.FJC.Entity.Basic; using QMAPP.FJC.Entity.Operation; using QMAPP.FJC.Entity.SendPlan; using QMAPP.ServicesAgent; using QMAPP.WinForm.Common; using QMFrameWork.Common.Serialization; using QMFrameWork.Data; using QMAPP.Entity; using System.Linq; using System.Reflection; using System.ServiceModel; using System.Threading; using System.Net.Sockets; using System.IO; using QMAPP.FJC.Entity.QT; using QMAPP.FJC.TRACING.DAInterface; using QMAPP.WinForm.Forms.Andon; using DCS.Common; using QMAPP.WinForm.Forms.Mend; using System.Collections; using QMAPP.FJC.Entity.ProductionPlan; using gregn6Lib; using System.Data; using QMAPP.FJC.Entity.BZD; using QMAPP.FJC.Entity.MD; namespace QMAPP.WinForm.Forms.Operation { /// /// 描述:加工操作 /// 作者:王庆男 /// 时间:2015年7月1日 /// [CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)] public partial class OperationForm : Form, ServiceOpc.IOpcServiceCallback { #region 全局变量 public static SynchronizationContext SynchronizationContext; //与服务器传递参与以及窗口静态变量 OperationServiceParam _operationServiceParam = new OperationServiceParam(); //获取服务代理 QMAPP.ServicesAgent.ServiceAgent _agent = ClientContext.GetServiceAgent(); ServiceOpc.OpcServiceClient proy;//连接OPC服务 BarCodeHook BarCode = new BarCodeHook(); /// /// 附加信息 /// Dictionary AttachInfo = new Dictionary(); /// /// 采集点列表 /// private List daiList = new List(); /// /// 数据采集点视图 /// private BindingList daiviewSource = new BindingList(); /// /// 数据采集点视图 /// private List daicache = new List(); /// /// 模架列表 /// private List mouldList = new List(); /// /// 条码格式规则列表 /// private List _barcodeRules; /// /// 正确的声音文件路径 /// private string okSoundPath = null; /// /// 错误的声音文件路径 /// private string errorSoundPath = null; /// /// 用于隐藏计划tab页 /// Hashtable htPages = new Hashtable(); private string _showDetailError = "false"; //后修改内容,若果true. 发生异常时显示异常详细信息. false,显示内容和原来一样,不发生变化 private string _lowCfgAutoSwitchLoc = string.Empty; //自动填充配置的工位 private string _ipGJBarCodeRegex = string.Empty; private string[] _cfgAutoInputLocs = null;//DP 自动输入配置的工位 private string _cfgAutoInputSwitch = string.Empty; //DP 自动输入配置的开关 private string _bentiBarCodeRegex = string.Empty; //DP 自动输入配置的开关 //private string _cfgAutoProduct = string.Empty; //DP 自动输入配置的开关 private string _052printWorkloc = string.Empty; //052打印工位 private string _371BiaoPiBarCodeRegex = string.Empty; //表皮码 private string _316BiaoPiBarCodeRegex = string.Empty; //表皮码 private string _AutoMachineCode = string.Empty; //自动扫码的配置设备编号 private string _DeleteProductLoc = string.Empty; //撤销按钮删除产品信息触发工位 private string _DeleteProductDaiCode = string.Empty; //撤销按钮删除产品信息触发采集点 private string[] _scanGlueLocs = null;// 扫描混胶时间工位列表 --喷胶工位. private string _glueTime = null;// 混胶时间 --喷胶工位. /// /// /// public MachineInfo _SignMachineInfo = new MachineInfo(); #endregion #region 窗体构造函数 /// /// 窗体构造函数 /// public OperationForm() { InitializeComponent(); _showDetailError = System.Configuration.ConfigurationManager.AppSettings["是否显示异常详细信息"]?.ToLower(); _lowCfgAutoSwitchLoc = GetAppConfigValue("AutomationLocAdd"); //查找所有 需要自动填充的工位 _ipGJBarCodeRegex = GetAppConfigValue("AutomationBarCodeRegex"); //查找所有 需要自动填充的工位 _AutoMachineCode = GetAppConfigValue("MachineCode"); //查找所有 需要自动填充的工位 var str__cfgAutoInputLocs = GetAppConfigValue("AutoInputLocAdd"); //查找所有 需要自动填充的工位 if (str__cfgAutoInputLocs.Split(';').Length > 0) _cfgAutoInputLocs = str__cfgAutoInputLocs.Split(';'); _cfgAutoInputSwitch = GetAppConfigValue("AutoInputSwitch"); //查找所有 需要自动填充的工位 _bentiBarCodeRegex = GetAppConfigValue("AutoInput"); _052printWorkloc = System.Configuration.ConfigurationManager.AppSettings["052打印工位"]; _371BiaoPiBarCodeRegex = System.Configuration.ConfigurationManager.AppSettings["052打印条码规则371"]; _316BiaoPiBarCodeRegex = System.Configuration.ConfigurationManager.AppSettings["052打印条码规则316"]; _DeleteProductLoc = GetAppConfigValue("DeleteProductLoc"); _DeleteProductDaiCode = GetAppConfigValue("DeleteProductDaiCode"); string scanGlues = System.Configuration.ConfigurationManager.AppSettings["喷胶验证混胶时间工位"]?.Trim(); _scanGlueLocs = scanGlues?.Split(';') ?? new string[] { }; _glueTime = GetAppConfigValue("Gluetime"); this.WindowState = FormWindowState.Maximized; //this.CheckFile(); okSoundPath = System.Configuration.ConfigurationManager.AppSettings["SaveFilePath"] + "Sound\\" + PlaySoundConst.strSoundOk; errorSoundPath = System.Configuration.ConfigurationManager.AppSettings["SaveFilePath"] + "Sound\\" + PlaySoundConst.strSoundNg; SynchronizationContext = new SynchronizationContext(); BarCode.BarCodeEvent += new BarCodeHook.BarCodeDelegate(BarCode_BarCodeEvent); BarCode.Start(); } #endregion #region 键盘Hook void BarCode_BarCodeEvent(BarCodeHook.BarCodes barCode) { ShowInfo(barCode); } private void ShowInfo(BarCodeHook.BarCodes barCode) { if (!this.txtCode.Focused) { this.txtCode.Focus(); } } #endregion #region 窗体载入 private void Form_Load(object sender, EventArgs e) { LoadViewSetting(); //初始化控件属性 this.DGView.AutoGenerateColumns = false; this.DGViewProList.AutoGenerateColumns = false; //隐藏工单计划 //DeletePlanPage("tpPlan"); //加载所有设备下拉列表 LoadMachineList(); _barcodeRules = _agent.InvokeServiceFunction>(B9BasicService.BarcodeRulesBLL_GetAllList.ToString()); this.DGView.DataSource = daiviewSource; //页面初始化 Init(); _SignMachineInfo = _operationServiceParam.machineInfo; //tsbRe.Visible = false; DGViewProList.ClearSelection(); #region 打印模板拷贝 PrintTempleCopyClass printClass = new PrintTempleCopyClass(); printClass.CopyPrintTemple("IPASSYLABEL"); printClass.CopyPrintTemple("DPPLANLABEL"); #endregion btnRefresh.Visible = true; txtCode.Focus(); } #endregion #region 加载设备列表 /// /// 加载设备列表 /// private void LoadMachineList() { #region BasicData basicData = new BasicData(); var machinelist=basicData.GetMachineInfoAndModelList(new string[] { }, true); this.comMachine.DataSource = machinelist; this.comMachine.DisplayMember = "MACHINENAME"; this.comMachine.ValueMember = "MACHINECODDE"; //如果工位已设定 if (ClientContext.MachineInfo != null && !string.IsNullOrEmpty(ClientContext.MachineInfo.PID)) { this.comMachine.SelectedValue = ClientContext.MachineInfo.MACHINECODDE; //this.lblLock.Visible = false; this.LockType(false); } else { //this.lblLock.Visible = false; this.LockType(false); } #endregion } #endregion #region 加载列表显示设置 /// /// 加载列表显示设置 /// private void LoadViewSetting() { #region 加载列表显示设置 string filepath = ConfigurationManager.AppSettings["SaveFilePath"]; filepath = string.Format("{0}ViewSetting.cfg", filepath); var setting = new { ListRowcount = 20, RefreshRate = 5 }; if (System.IO.File.Exists(filepath)) { string settingstring = System.IO.File.ReadAllText(filepath); setting = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(settingstring, setting); } cbListRowcount.Text = setting.ListRowcount.ToString(); cbRefreshRate.Text = string.Format("{0}s", setting.RefreshRate); cbPlanFilter.SelectedIndex = 1; cbListRowcount.SelectedIndexChanged += new EventHandler(cbListRowcount_SelectedIndexChanged); cbRefreshRate.SelectedIndexChanged += new EventHandler(cbRefreshRate_SelectedIndexChanged); cbPlanFilter.TextChanged += new EventHandler(cbPlanFilter_SelectedIndexChanged); #endregion } #endregion #region 初始化界面 /// /// 初始化界面 /// 加载当前设备对应的工序信息 /// 加载当前工序的先决条件 /// private void Init() { ClientContext.OpcState = 0; var mouldno=0; this.tsbConnect.Visible = false; this.tsbReSignal.Visible = false; this.btnChange.Visible = false; this.cBoxVAN.Visible = false; this.lblError.Text = ""; this.lblError.ForeColor = Color.Black; this.lblError.BackColor = SystemColors.InactiveBorder; _operationServiceParam = new OperationServiceParam(); _operationServiceParam.produceShift = ClientContext.produceShift; _operationServiceParam.machineInfo = this.comMachine.SelectedItem as MachineInfo; if (string.IsNullOrEmpty(_operationServiceParam.machineInfo.PID)) { return; } if (!string.IsNullOrEmpty(_operationServiceParam.machineInfo.OPCGROUPNAME)) { btnChange.Visible = true; } //****************20210413 DQZhang BC316 VAN ************************************** if (_operationServiceParam.machineInfo.MACHINECODDE== "ASSEMBLE_BC316") { this.cBoxVAN.Visible = true; } //********************************************************************************* //else //{ // //隐藏工单计划 // if (_operationServiceParam.machineInfo.PLAN_SET == "1") // { // DeletePlanPage("tpPlan"); // } // else // { // AddPage("tpPlan"); // } //} if (LocalSetting.Settings["AbilityValid","1"] == "1") { var userabbility = _agent.InvokeServiceFunction>("UserWithMachineBLL_GetUserAbility", ClientContext.LoginInfo.UserID); if (!userabbility.Exists(p => p.MACHINEID == _operationServiceParam.machineInfo.PID) && !string.Equals("ADMIN", ClientContext.LoginInfo.LoginUserID)) { plDAI.Enabled = txtCode.Enabled = btnAdd.Enabled = panel4.Enabled = toolStrip1.Enabled = false; MessageBox.Show("当前登录用户不具备此工位的操作能力!\r\n请更换用户或联系管理员设置能力矩阵。", "操作者能力矩阵", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } if (string.IsNullOrEmpty(_operationServiceParam.machineInfo.MOLDNUMBER)) { _operationServiceParam.machineInfo.MOLDNUMBER = "1"; } _operationServiceParam.produceShift = ClientContext.produceShift; mouldno = ConnectOPCHost(mouldno); LoadDAI(mouldno); BindAll(); //var extendpages=tabView.TabPages. tabView.TabPages.Clear(); tabView.TabPages.Add(tpPlan); tabView.TabPages.Add(tpRecord); if (_operationServiceParam.machineInfo.OPERATETYPE == "EINSP")//终检工位,增加卡扣漏装检测设备接口 { DeviceInterface.LeakInspection frm = new DeviceInterface.LeakInspection(); var tabpage = new TabPage(frm.Text); tabView.TabPages.Add(tabpage); frm.TopLevel = false; frm.Parent = tabpage; //frm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; frm.Machine = _operationServiceParam.machineInfo; //frm.WindowState = FormWindowState.Maximized; //frm.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; frm.Dock = DockStyle.Fill; frm.Show(); tabpage.BackColor = Color.Black; //tabpage.Controls.Add(frm); } //****************20210413 DQZhang BC316 VAN ************************************** if (_operationServiceParam.machineInfo.MACHINECODDE == "LFRAME_WELD_MP2BC316") { SwitchMould(cbMould.SelectedValue + ""); } //********************************************************************************* } #endregion #region 加载采集点信息 /// /// 加载采集点信息 /// /// private void LoadDAI(int mouldno) { #region 获取采集点 daiList = _agent.InvokeServiceFunction>(B9IPCService.DAIBLL_GetList.ToString(), new DAI() { WORKLOC_CODE = _operationServiceParam.machineInfo.WORKLOC_CODE }); var cachelist = _agent.InvokeServiceFunction>(B9IPCService.DAICacheBLL_GetWorklocCache.ToString(), _operationServiceParam.machineInfo.WORKLOC_CODE); mouldList = _agent.InvokeServiceFunction>(B9BasicService.MachineInfoModelBLL_GetAllList.ToString(), new MachineInfoModels { MID = _operationServiceParam.machineInfo.PID }).OrderBy(p=>p.MODELCODE).ToList(); cbMould.DisplayMember = "MODELNAME"; cbMould.ValueMember = "MODELCODE"; cbMould.DataSource = mouldList.ToList(); mouldList.Insert(0, new MachineInfoModels { MODELCODE = "" }); daicache.Clear(); foreach (var mould in mouldList) { foreach (var dai in daiList.Where(p => string.Equals(p.DIVBY_MOULD, mould.MODELCODE != "" ? "1" : "0"))) { var daiview = new FJC.Entity.View.DAIFormView { DACode = dai.DA_CODE, DAName = dai.DA_NAME, DAResult = "", DAType = dai.DATA_TYPE, MaterialType = dai.MATERIAL_TYPE, MaterialTypeName = "",// dai.MATERIAL_TYPE_NAME, MaterialCode = "", MaterialName = "", StateCode = dai.STATE_CODE, StateName = dai.STATE_NAME, DAValue = "", MouldCode = string.IsNullOrWhiteSpace(mould.MODELCODE) ? dai.WORKCELL_CODE : mould.MODELCODE, MouldName = mould.MODELNAME, }; var cache = cachelist.FirstOrDefault(p => p.DA_CODE == daiview.DACode && (string.IsNullOrWhiteSpace(p.MOULD_CODE) || p.MOULD_CODE == daiview.MouldCode) && (!string.Equals(p.PREINPUT, "1"))); if (cache != null && !string.IsNullOrWhiteSpace(cache.DA_VALUE)) { daiview.DAValue = cache.DA_VALUE; daiview.MaterialCode = cache.MATERIAL_CODE; daiview.MaterialName = cache.MATERIAL_NAME; daiview.DAResult = "通过"; } daicache.Add(daiview); } } dgcMouldName.Visible = mouldList.Count > 1; if (daiList.Count(p => string.Equals(p.CANPREINPUT, "1")) > 0) { dgcMouldName.Visible = true; int i = 0; int m = mouldList.Count; if (string.Equals(_operationServiceParam.machineInfo.ISSTATION, 2)) { i = 1; } else { i = 0; m = 1; } for (; i < m; i++) { foreach (var dai in daiList.Where(p => string.Equals(p.CANPREINPUT, "1"))) { var mould = mouldList[i]; var daiview = new QMAPP.FJC.Entity.View.DAIFormView { DACode = dai.DA_CODE, DAName = dai.DA_NAME, DAResult = "", DAType = dai.DATA_TYPE, MaterialType = dai.MATERIAL_TYPE, MaterialCode = "",// dai.MATERIAL_TYPE_NAME, MaterialName = "", StateCode = dai.STATE_CODE, StateName = dai.STATE_NAME, DAValue = "", MouldCode = "PRE-" + (string.IsNullOrWhiteSpace(mould.MODELCODE) ? dai.WORKCELL_CODE : mould.MODELCODE), MouldName = "预备", PREINPUT = "1" }; var cache = cachelist.FirstOrDefault(p => p.DA_CODE == daiview.DACode && string.Equals(p.PREINPUT, "1")&&string.Equals(p.MOULD_CODE,(string.IsNullOrWhiteSpace(mould.MODELCODE) ? dai.WORKCELL_CODE : mould.MODELCODE))); if (cache != null && !string.IsNullOrWhiteSpace(cache.DA_VALUE)) { daiview.DAValue = cache.DA_VALUE; daiview.MaterialCode = cache.MATERIAL_CODE; daiview.MaterialName = cache.MATERIAL_NAME; daiview.DAResult = "通过"; } daicache.Add(daiview); } } } //dgcMouldName.Visible = mouldList.Count > 1; lblMouldTitle.Visible = cbMould.Visible = mouldList.Count > 1; if (mouldList.Count <= 2) { SwitchMould(""); } else { if (mouldno > 0) { var mould = mouldList.FirstOrDefault(p => string.Equals(p.MODELSTATION, mouldno.ToString())); if (mould != null) { SwitchMould(mould.MODELCODE); } } else { SwitchMould(""); } //cbMould_SelectedIndexChanged(this, EventArgs.Empty); } //= _agent.InvokeServiceFunction>(B9IPCService.DAIBLL_GetList.ToString(), new DAI() { WORKLOC_CODE = _operationServiceParam.machineInfo.WORKLOCCODE }); #endregion } #endregion #region 连接OPC服务 //TODO:优化连接失败时的长时间卡死状态 /// /// 连接OPC服务 /// /// /// private int ConnectOPCHost(int mouldno) { if (string.IsNullOrEmpty(_operationServiceParam.machineInfo.PID)) { ClientContext.OpcState = 0; proy = null; return 0; } if (!_operationServiceParam.machineInfo.ISCONTROL.Equals("0")) { System.ServiceModel.InstanceContext site = new System.ServiceModel.InstanceContext(this); proy = new ServiceOpc.OpcServiceClient(site); //设置与设备双工通信 if (_operationServiceParam.machineInfo.ISCONTROL.Equals("2") || _operationServiceParam.machineInfo.ISCONTROL.Equals("3")) { this.tsbConnect.Visible = true; this.tsbReSignal.Visible = true; if (proy.State == System.ServiceModel.CommunicationState.Created || proy.State == System.ServiceModel.CommunicationState.Opened) { try { ClientContext.OpcState = 4; this.lblError.Text = "正在连接中稍后..."; mouldno = proy.Register(_operationServiceParam.machineInfo.MACHINECODDE); ClientContext.OpcState = 1; this.lblError.Text = "服务器连接成功!"; this.lblError.ForeColor = Color.Green; } catch (Exception) { ClientContext.OpcState = 2; this.lblError.Text = "连接服务失败!"; this.lblError.ForeColor = Color.White; this.lblError.BackColor = Color.Red; } } else { ClientContext.OpcState = 2; this.lblError.Text = "服务已经断开,请重连!"; this.lblError.ForeColor = Color.White; this.lblError.BackColor = Color.Red; } } } else { ClientContext.OpcState = 0; proy = null; } return mouldno; } #endregion #region 行序号 /// /// 行序号 /// /// /// private void DG_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, this.DGView.RowHeadersWidth - 4, e.RowBounds.Height); TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), new Font("宋体", 12, FontStyle.Bold), rectangle, this.DGView.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Right); } #endregion #region 添加零件 /// /// 添加零件 /// /// /// private void btnAdd_Click(object sender, EventArgs e) { WriteLog.Write(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + txtCode.Text.Trim().ToUpper()); Operation(); } #endregion #region 采集点扫描校验 /// /// 采集点扫描校验 /// private void Operation() { try { this.lblError.Text = ""; this.lblError.ForeColor = Color.Black; this.lblError.BackColor = SystemColors.InactiveBorder; //使用登录码快速切换用户 if (System.Text.RegularExpressions.Regex.IsMatch(txtCode.Text, "^<\\w+::\\w+>$")) { var ret = ClientContext.CodeLogin(txtCode.Text); if (string.Equals(ret, "登录成功!")) { ClientContext.SetUserAuth(this); if (LocalSetting.Settings["AbilityValid", "1"] == "1") { var userabbility = _agent.InvokeServiceFunction>("UserWithMachineBLL_GetUserAbility", ClientContext.LoginInfo.UserID); if (!userabbility.Exists(p => p.MACHINEID == _operationServiceParam.machineInfo.PID) && !string.Equals("ADMIN", ClientContext.LoginInfo.LoginUserID)) { plDAI.Enabled = txtCode.Enabled = btnAdd.Enabled = panel4.Enabled = toolStrip1.Enabled = false; MessageBox.Show("当前登录用户不具备此工位的操作能力!\r\n请更换用户或联系管理员设置能力矩阵。", "操作者能力矩阵", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } } lblError.Text = ret; txtCode.Text = ""; txtCode.SelectAll(); txtCode.Focus(); return; } #region 输入条码校验 //判断设备列表 if (comMachine.Items.Count <= 0) { txtCode.Text = ""; //PlaySound.PlaySounds.Play(@errorSoundPath); if (File.Exists(errorSoundPath)) { System.Media.SoundPlayer media = new System.Media.SoundPlayer(errorSoundPath); media.Play(); } this.lblError.Text = "请先选择设备!"; this.lblError.ForeColor = Color.White; this.lblError.BackColor = Color.Red; txtCode.SelectAll(); txtCode.Focus(); return; } string productCode = this.txtCode.Text.Trim().ToUpper();//窗体零件条码 if (string.IsNullOrEmpty(productCode)) { txtCode.Text = ""; //PlaySound.PlaySounds.Play(@errorSoundPath); if (File.Exists(errorSoundPath)) { System.Media.SoundPlayer media = new System.Media.SoundPlayer(errorSoundPath); media.Play(); } this.lblError.Text = "请输入条码!"; this.lblError.ForeColor = Color.White; this.lblError.BackColor = Color.Red; txtCode.SelectAll(); txtCode.Focus(); return; } this.lblError.Text = ""; this.lblError.ForeColor = Color.Black; this.lblError.BackColor = SystemColors.InactiveBorder; #endregion #region DQZhang 喷胶工位验证混胶时间 20220309 //喷胶验证混胶时间工位 if (_scanGlueLocs.Length > 0 && _scanGlueLocs.Contains(_operationServiceParam.machineInfo.WORKLOC_CODE)) { //验证是否经过手动喷胶工位扫码. if (System.Text.RegularExpressions.Regex.IsMatch(productCode, "^>CMD:GLUETIME")) { if (MessageBox.Show($"确认胶水时间切换到{System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}时间?", "提示", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } //DateTime gluetime = System.DateTime.Now; //txtCfg.Text = "胶水时间:" + gluetime; txtGlue.Text = "胶水时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); UpdateAppConfigValue("Gluetime", System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); txtGlue.Visible = true; //txtGlue0.Visible = true; txtCode.Text = ""; txtCode.Focus(); return; } if (txtGlue.Text.Length < 1) { this.lblError.Text = "无混胶记录!"; this.lblError.ForeColor = Color.Red; txtCode.SelectAll(); txtCode.Focus(); return; } else { //验证混胶时间 DateTime PlacingDateTime = Convert.ToDateTime(txtGlue.Text.Replace("胶水时间:", "")); string PlacingTime = System.Configuration.ConfigurationManager.AppSettings["混胶时间"]; var timespan = (DateTime.Now - Convert.ToDateTime(PlacingDateTime)).TotalHours; if (!string.IsNullOrEmpty(PlacingTime) && timespan > int.Parse(PlacingTime)) { this.lblError.Text = "混胶使用时间大于 < " + PlacingTime + "> 小时"; this.lblError.ForeColor = Color.Red; txtCode.SelectAll(); txtCode.Focus(); return; } } //return; } #endregion #region 条码格式解析 var dai = LocateDAI(productCode); if (dai == null) { txtCode.Text = ""; //PlaySound.PlaySounds.Play(@errorSoundPath); if (File.Exists(errorSoundPath)) { System.Media.SoundPlayer media = new System.Media.SoundPlayer(errorSoundPath); media.Play(); } this.lblError.Text = "输入条码不是本工序可接受格式!"; this.lblError.ForeColor = Color.White; this.lblError.BackColor = Color.Red; txtCode.SelectAll(); txtCode.Focus(); return; } this.lblError.Text = ""; this.lblError.ForeColor = Color.Black; this.lblError.BackColor = SystemColors.InactiveBorder; #endregion object davalue = productCode; //if(string.IsNullOrEmpty(_cfgAutoProduct)) // _cfgAutoProduct = productCode; //if (_operationServiceParam.machineInfo.WORKCELL_CODE == "LFRAME_WELDING_BC316") // { // lblMould.Text = "LFRAME_M1"; //BC316下体骨架焊接 // } //else if (_operationServiceParam.machineInfo.WORKCELL_CODE == "AIRDUCT_WELD_BC316") //{ // lblMould.Text = "AD_WELD_M1";//BC316多媒体支架 //} //采集点输入 var result = _agent.InvokeServiceFunction(B9IPCService.DAI_Input.ToString() , new DAArgs { WorkCellCode = dai.WORKCELL_CODE, WorkLocCode = dai.WORKLOC_CODE, DACode = dai.DA_CODE, DAValue = davalue, MaterialCode = dai.MATERIAL_CODE, MachineCode = _operationServiceParam.machineInfo.MACHINECODDE, MachineName = _operationServiceParam.machineInfo.MACHINENAME, IsControl = _operationServiceParam.machineInfo.ISCONTROL, MouldCode = string.Equals(dai.DIVBY_MOULD, "0") ? _operationServiceParam.machineInfo.WORKCELL_CODE : (string.IsNullOrWhiteSpace(lblMould.Text) ? _operationServiceParam.machineInfo.WORKCELL_CODE : lblMould.Text), AttachData = AttachInfo }); var daiview = daicache.FirstOrDefault(p => p.DACode == dai.DA_CODE && (string.IsNullOrWhiteSpace(p.MouldCode) || p.MouldCode == (result.PreInput ? "PRE-" + result.MouldCode : result.MouldCode))); if (result.PreInput) { string mouldcode = result.MouldCode; if (_operationServiceParam.machineInfo.ISSTATION != 2) { mouldcode = _operationServiceParam.machineInfo.WORKCELL_CODE; } daiview = daicache.FirstOrDefault(p => p.DACode == dai.DA_CODE && (string.IsNullOrWhiteSpace(p.MouldCode) || p.MouldCode == "PRE-" + mouldcode)); } if (!string.IsNullOrEmpty(_052printWorkloc) && _052printWorkloc.Contains(_operationServiceParam.machineInfo.WORKLOC_CODE) && result.Success) { if (string.IsNullOrEmpty(processMainCode)) { processMainCode = productCode; if (!string.IsNullOrEmpty(result.MATERIAL_CODE)) { List list1 = this.dgvPlan.DataSource as List; var PbomItem = _agent.InvokeServiceFunction>(B9IPCService.PbomItemBLL_Get.ToString(), result.MATERIAL_CODE); var BomCodes = ""; if (PbomItem != null && PbomItem.Count > 0) { BomCodes = PbomItem[0].PBOM_CODE; var SSS = _agent.InvokeServiceFunction(B9IPCService.PbomItemBLL_GetBom.ToString(), BomCodes); if (SSS != null) planMATERIAL_CODE = SSS.MATERIAL_CODE; } //List pBomCodes1 = GetPBOMCODEValue(result.MATERIAL_CODE); //List filterList1 = // list1.Where(p => pBomCodes1.Contains(p.PBOM_CODE)).ToList(); //if (filterList1.Count > 0) //{ // planMATERIAL_CODE = filterList1[0].MATERIAL_CODE; //} } } else { if ((System.Text.RegularExpressions.Regex.IsMatch(productCode, _371BiaoPiBarCodeRegex) || System.Text.RegularExpressions.Regex.IsMatch(productCode, _316BiaoPiBarCodeRegex)) && processMainCode != productCode) { processMainCode = productCode; } } } if (!result.Success) //如果采集数据输入失败 { //PlaySound.PlaySounds.Play(@errorSoundPath); if (File.Exists(errorSoundPath)) { System.Media.SoundPlayer media = new System.Media.SoundPlayer(errorSoundPath); media.Play(); } this.lblError.Text = result.Message; this.lblError.ForeColor = Color.White; this.lblError.BackColor = Color.Red; if (daiview != null) { if (daiview.DAResult != "通过") { daiview.DAResult = "未通过"; daiview.DAValue = productCode; daiview.MaterialType = result.MATERIAL_CODE; } } dai.MATERIAL_CODE = string.IsNullOrEmpty(result.MATERIAL_CODE) ? "" : result.MATERIAL_CODE; dai.Result = EnumGeter.ORDERTYPE.NOK.GetHashCode().ToString(); } else { if (daiview != null) { daiview.DAResult = "通过"; daiview.DAValue = productCode; daiview.MaterialCode = result.MATERIAL_CODE; daiview.MaterialName = result.MATERIAL_NAME; } dai.MATERIAL_CODE = result.MATERIAL_CODE; dai.Result = dai.Result = EnumGeter.ORDERTYPE.OK.GetHashCode().ToString(); //执行返回结果中包含的动作 DoResultActions(result); this.txtCode.Text = ""; //PlaySound.PlaySounds.Play(@okSoundPath); if (!"770,018,278,304".Contains(productCode.Substring(0, 3))) { if(File.Exists(@okSoundPath)) { System.Media.SoundPlayer media = new System.Media.SoundPlayer(@okSoundPath); media.Play(); } } if (this.lblLock.Tag.ToString().Equals("0")) { LockType(false); } } try { #region 工位自动输入采集点信息 //工位与配置 且经过所有的验证 if (result.Success && !string.IsNullOrEmpty(_lowCfgAutoSwitchLoc) && _lowCfgAutoSwitchLoc.Contains(_operationServiceParam.machineInfo.WORKLOC_CODE)) { var ispass = false; foreach (var str in _ipGJBarCodeRegex.Split(';')) { if (System.Text.RegularExpressions.Regex.IsMatch(productCode, str))//扫描的是过程主码 { ispass = true; } } if (ispass)//扫描的是过程主码 { //ZHANGSN 20220925 佛山276PA没有计划ID,使用物料号查找配置 if (_operationServiceParam.machineInfo.WORKLOC_CODE.Contains("276")) { if (!string.IsNullOrEmpty(result.MATERIAL_CODE)) { var bomCodes = GetPBOMCODEValue(result.MATERIAL_CODE); foreach (var bom in bomCodes) { var ScanIPConfig_list = GetSendPlcConfig(new ScanIPConfig() { MaterialCode = bom, LocCode = _operationServiceParam.machineInfo.WORKLOC_CODE }); if (ScanIPConfig_list != null && ScanIPConfig_list.Count > 0) { foreach (var Config in ScanIPConfig_list) { if (!string.IsNullOrEmpty(Config.PlcAddr)) { var BarCode = Config.BarCode; var PlcAddr = Config.PlcAddr; GetNewCode(ref BarCode, ref PlcAddr); //查询产品条码是否存在 if (UpdateSendPlcConfig(new ScanIPConfig { PID = Config.PID, PlcAddr = PlcAddr })) { var ProductList = SelectProduct(Config.BarCode); if (ProductList != null) { var PID = Guid.NewGuid().ToString(); var ProductNew = new Product() { PRODUCTCODE = BarCode, PID = PID, MACHINECODDE = _operationServiceParam.machineInfo.MACHINECODDE, MACHINENAME = _operationServiceParam.machineInfo.MACHINENAME, PRODUCTSOURCE = "0", MATERIAL_CODE = ProductList.MATERIAL_CODE, STATUS = "0", OUTFLAG = "0", USINGSTATE = "0", CAPACITY = 1, USINGCOUNT = 0, WORKCELL_CODE = ProductList.WORKCELL_CODE, WORKLOC_CODE = ProductList.WORKLOC_CODE, WORKCENTER_CODE = ProductList.WORKCENTER_CODE }; //var ProcessRecords = new ProcessRecord() //{ // PID = Guid.NewGuid().ToString(), // PRODUCT_PID = ProductNew.PID, // WORKCELL_CODE = ProductList.WORKCELL_CODE, // WORKLOC_CODE = ProductList.WORKLOC_CODE, // IN_WORKCELL_TIME = DateTime.Now, // WORK_START_TIME = DateTime.Now, // WORK_END_TIME = DateTime.Now, // PROCESS_STATE = "1", // MANUAL_PASS = "", // MODULE_CODE = string.Equals(dai.DIVBY_MOULD, "0") ? _operationServiceParam.machineInfo.WORKCELL_CODE : (string.IsNullOrWhiteSpace(lblMould.Text) ? _operationServiceParam.machineInfo.WORKCELL_CODE : lblMould.Text) //}; //if (InsertProduct(ProductNew) && InsertProcessRecord(ProcessRecords)) if (InsertProduct(ProductNew)) { txtCode.Text = BarCode; Operation(); } } } } else { txtCode.Text = Config.BarCode; Operation(); } } } } } } else { if (!string.IsNullOrEmpty(result.WorkOrderID)) { List list = this.dgvPlan.DataSource as List; var pBomcode = GetWorkOrder_MATERIAL_CODE(result.WorkOrderID); if (!string.IsNullOrEmpty(pBomcode)) { //List filterList = list.Where(p => pBomCodes.Contains(p.MATERIAL_CODE)).ToList(); var ScanIPConfig_list = GetSendPlcConfig(new ScanIPConfig() { MaterialCode = pBomcode, LocCode = _operationServiceParam.machineInfo.WORKLOC_CODE }); if (ScanIPConfig_list != null && ScanIPConfig_list.Count > 0) { foreach (var Config in ScanIPConfig_list) { if (!string.IsNullOrEmpty(Config.PlcAddr)) { var BarCode = Config.BarCode; var PlcAddr = Config.PlcAddr; GetNewCode(ref BarCode, ref PlcAddr); //查询产品条码是否存在 if (UpdateSendPlcConfig(new ScanIPConfig { PID = Config.PID, PlcAddr = PlcAddr })) { var ProductList = SelectProduct(Config.BarCode); if (ProductList != null) { var PID = Guid.NewGuid().ToString(); var ProductNew = new Product() { PRODUCTCODE = BarCode, PID = PID, MACHINECODDE = _operationServiceParam.machineInfo.MACHINECODDE, MACHINENAME = _operationServiceParam.machineInfo.MACHINENAME, PRODUCTSOURCE = "0", MATERIAL_CODE = ProductList.MATERIAL_CODE, STATUS = "0", OUTFLAG = "0", USINGSTATE = "0", CAPACITY = 1, USINGCOUNT = 0, WORKCELL_CODE = ProductList.WORKCELL_CODE, WORKLOC_CODE = ProductList.WORKLOC_CODE, WORKCENTER_CODE = ProductList.WORKCENTER_CODE }; var ProcessRecords = new ProcessRecord() { PID = Guid.NewGuid().ToString(), PRODUCT_PID = ProductNew.PID, WORKCELL_CODE = ProductList.WORKCELL_CODE, WORKLOC_CODE = "", IN_WORKCELL_TIME = DateTime.Now, WORK_START_TIME = DateTime.Now, WORK_END_TIME = DateTime.Now, PROCESS_STATE = "1", MANUAL_PASS = "", MODULE_CODE = string.Equals(dai.DIVBY_MOULD, "0") ? _operationServiceParam.machineInfo.WORKCELL_CODE : (string.IsNullOrWhiteSpace(lblMould.Text) ? _operationServiceParam.machineInfo.WORKCELL_CODE : lblMould.Text) }; if (InsertProduct(ProductNew) && InsertProcessRecord(ProcessRecords)) { txtCode.Text = BarCode; Operation(); } } } } else { txtCode.Text = Config.BarCode; Operation(); } } } } //else //{ // this.lblError.Text = "通过result.WorkOrderID({result.WorkOrderID.ToString()})未查询到WorkOrder.PBOM_CODE"; // this.lblError.ForeColor = Color.Black; // MessageBox.Show($"通过result.WorkOrderID({result.WorkOrderID.ToString()})未查询到WorkOrder.PBOM_CODE"); //} } else { this.lblError.Text = "result.WorkOrderID为空,未进行后续填充!"; this.lblError.ForeColor = Color.Black; MessageBox.Show($"result.WorkOrderID为空,未进行后续填充!"); } } } } #endregion #region DP 超声焊1的工位,低配自动输入挡流板条码 //DP叫总成焊接工位 不是扫高低配,而是扫多个配置. 扫一个本体码,在配置中,找到多个配置码,自动填写. if (_cfgAutoInputSwitch == "true" && _cfgAutoInputLocs.Contains(_operationServiceParam.machineInfo.WORKLOC_CODE)) { var ispass = false; foreach (var str in _bentiBarCodeRegex.Split(';')) { if (System.Text.RegularExpressions.Regex.IsMatch(productCode, str))//扫描的是过程主码 { ispass = true; } } if (ispass)//扫描的是本体条码 { List list = this.dgvPlan.DataSource as List; if (!string.IsNullOrEmpty(result.MATERIAL_CODE)) { var bomCodes = GetPBOMCODEValue(result.MATERIAL_CODE); //List filterList = list.Where(p => bomCodes.Contains(p.PBOM_CODE)).ToList(); if (bomCodes.Count > 0) { string PBOM_CODE = bomCodes[0]; //List autoInputBarCodes = LocSwitchHelper.GetAutoInputBarCode(bomCode, _operationServiceParam.machineInfo.WORKLOC_CODE); List autoInputBarCodes = _agent.InvokeServiceFunction>(B9IPCService.MaterialBomConfigBLL_GetAutoInputBarCode.ToString(), PBOM_CODE, _operationServiceParam.machineInfo.WORKLOC_CODE); foreach (string autoInputBarCode in autoInputBarCodes) { //LoadPreState(dai, GetMouldCode(result.MouldCode), isAutoInput, true); //自动触发txtCode_KeyDown实现 txtCode.Text = autoInputBarCode; //txtCode_KeyDown(null,null); Operation(); } this.lblError.Text = ""; this.lblError.ForeColor = Color.Black; } else { string s = $"没有找到物料号{result.MATERIAL_CODE}对应的计划,请检查T_MD_PBOM_ITEM是否进行了配置."; this.lblError.Text = s; this.lblError.ForeColor = Color.Red; txtCode.SelectAll(); txtCode.Focus(); WriteLog.WriteError(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + s); } } } } #endregion } catch (Exception ex) { if (_showDetailError == "true") { WriteLog.WriteError(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + ex.Message); this.lblError.Text = ""; Reset(string.IsNullOrWhiteSpace(lblMould.Text) ? _operationServiceParam.machineInfo.WORKCELL_CODE : lblMould.Text); txtCode.SelectAll(); txtCode.Focus(); MessageBox.Show(ex.Message); return; } else { throw ex; } } //闫永刚2017-10-2发送操作命令 dai.MOULD_CODE = string.Equals(dai.DIVBY_MOULD, "1") ? result.MouldCode : "1"; if (!result.PreInput) { SendSignal(dai); } //刷新采集模式为自适应的采集数据 if (daiList.Count(p => p.DA_MODE == "3") > 0) { var cachelist = _agent.InvokeServiceFunction>(B9IPCService.DAICacheBLL_GetWorklocCache.ToString(), _operationServiceParam.machineInfo.WORKLOC_CODE); foreach (var item in daiList.Where(p => p.DA_MODE == "3")) { var viewitem = daicache.FirstOrDefault(p => p.DACode == item.DA_CODE && (string.IsNullOrWhiteSpace(p.MouldCode) || p.MouldCode == result.MouldCode)); var cache = cachelist.FirstOrDefault(p => p.DA_CODE == item.DA_CODE); if (viewitem != null) { if (cache != null && !string.IsNullOrWhiteSpace(cache.DA_VALUE)) { viewitem.DAValue = cache.DA_VALUE; viewitem.MaterialCode = cache.MATERIAL_CODE; viewitem.MaterialName = cache.MATERIAL_NAME; viewitem.DAResult = "通过"; } else { viewitem.DAValue = ""; viewitem.MaterialTypeName = ""; viewitem.MaterialCode = ""; viewitem.MaterialName = ""; viewitem.DAResult = ""; } } } } DGView.Refresh(); DGViewColorBind(); //设置焦点 this.ActiveControl = this.txtCode; txtCode.SelectAll(); txtCode.Focus(); GC.Collect(); } catch (Exception ex) { WriteLog.WriteError(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + ex.Message); this.lblError.Text = ""; this.lblError.ForeColor = Color.Black; this.lblError.BackColor = SystemColors.InactiveBorder; Reset(string.IsNullOrWhiteSpace(lblMould.Text) ? _operationServiceParam.machineInfo.WORKCELL_CODE : lblMould.Text); txtCode.SelectAll(); txtCode.Focus(); MessageBox.Show("系统异常,请重新扫描!"); } } #endregion #region 执行返回结果中包含的动作 /// /// 执行返回结果中包含的动作 /// /// private void DoResultActions(DAResult result) { lblError.Text = string.Format("当前工位状态:{0}", result.StateName); this.lblError.ForeColor = Color.Black; this.lblError.BackColor = SystemColors.InactiveBorder; lblWorkcellState.Text = result.StateName; foreach (var act in result.Actions) { switch (act) { case "SUBMIT": //状态变化动作为 提交数据 { //TODO:更细界面数据 BindView(); BindPlanView(); break; } case "SUBMIT_NOPLAN": //状态变化动作为 提交数据 { //TODO:更细界面数据 BindView(); //BindPlanView(); break; } case "SIGNAL_START": //状态变化动作为 发送启动信号 { //TODO:发送启动信号 break; } case "PUSHDATA": //推送提前输入数据 { //TODO:发送信号 var cachelist = _agent.InvokeServiceFunction>(B9IPCService.DAICacheBLL_GetWorklocCache.ToString(), _operationServiceParam.machineInfo.WORKLOC_CODE); string premouldcode = "PRE-" + result.MouldCode; if (_operationServiceParam.machineInfo.ISSTATION != 2) { premouldcode = "PRE-" + _operationServiceParam.machineInfo.WORKCELL_CODE; } foreach (var daiview in daicache.Where(p=>(p.MouldCode==result.MouldCode||string.IsNullOrEmpty(p.MouldCode)||p.MouldCode==premouldcode))) { var cache = cachelist.FirstOrDefault(p => p.DA_CODE == daiview.DACode && (string.Equals(daiview.PREINPUT, "1") ? (p.MOULD_CODE == result.MouldCode && p.PREINPUT == "1") : (p.MOULD_CODE == daiview.MouldCode && p.PREINPUT != "1"))); if (cache != null && !string.IsNullOrWhiteSpace(cache.DA_VALUE)) { daiview.DAValue = cache.DA_VALUE; daiview.MaterialCode = cache.MATERIAL_CODE; daiview.MaterialName = cache.MATERIAL_NAME; daiview.DAResult = "通过"; } else { daiview.DAValue = ""; daiview.MaterialTypeName = ""; daiview.MaterialCode = ""; daiview.MaterialName = ""; daiview.DAResult = ""; } } Action signalaction = new Action(() => { string sleep = result.Actions.FirstOrDefault(p => p.StartsWith("SLEEP")); if (sleep != null) { int st = 0; int.TryParse(sleep.Replace("SLEEP_", ""), out st); System.Threading.Thread.Sleep(st); } else { System.Threading.Thread.Sleep(10000); } //TODO:发送信号 foreach (var daiview in daiviewSource) { if (daiview.DAResult == "通过" && !string.Equals(daiview.PREINPUT, "1")) { DAI signalDai = new DAI() { WORKCELL_CODE = _operationServiceParam.machineInfo.WORKCELL_CODE, WORKLOC_CODE = _operationServiceParam.machineInfo.WORKLOC_CODE, DA_CODE = daiview.DACode, MOULD_CODE = string.Equals(_operationServiceParam.machineInfo.WORKCELL_CODE, result.MouldCode) ? "1" : result.MouldCode, Result = EnumGeter.ORDERTYPE.OK.GetHashCode().ToString(), MATERIAL_CODE = daiview.MaterialCode }; SendSignal(signalDai); } } }); signalaction.BeginInvoke(null, null); break; } case "PRINT_ASSY": //状态变化动作为 打印总成码 { //TODO:清空界面数据 复位启动信号 //PrintAssemblyLabel(result.ProcessCode); Print052QRCODE(true, result.ProcessCode); break; } case "PRINT_PROCESS": //状态变化动作为 打印过程码 { //TODO:清空界面数据 复位启动信号 PrintProcessLabel(result.ProcessCode); break; } case "PRINT_BFPROCESS": //状态变化动作为 打印过程码(包覆分总成打印) { //TODO:清空界面数据 复位启动信号 PrintBFProcessLabel(result.ProcessCode); break; } case "PRINT_PLAN": //状态变化动作为 打印计划标签 { //TODO:清空界面数据 复位启动信号 PrintPlanLabel(result); break; } case "RESET": //状态变化动作为 复位 { //TODO:清空界面数据 复位启动信号 //SendRecoveryOrder(result.MouldCode); Reset(result.MouldCode); break; } case "SHOWMLIST": //状态变化动作为 显示装配物料清单 { ShowMaterialList(result.WorkOrderID); break; } case "HIDEMLIST": //状态变化动作为 隐藏装配物料清单 { HideMaterialList(); break; } default: { if (act.StartsWith("SIGNAL_")) { string dacode = act.Replace("SIGNAL_", ""); var daiview = daiviewSource.FirstOrDefault(p => p.DACode == dacode && p.DAResult == "通过" && !string.Equals(p.PREINPUT, "1")); if (daiview != null) { DAI signalDai = new DAI() { WORKCELL_CODE = _operationServiceParam.machineInfo.WORKCELL_CODE, WORKLOC_CODE = _operationServiceParam.machineInfo.WORKLOC_CODE, DA_CODE = daiview.DACode, MOULD_CODE = string.Equals(_operationServiceParam.machineInfo.WORKCELL_CODE, result.MouldCode) ? "1" : result.MouldCode, Result = EnumGeter.ORDERTYPE.OK.GetHashCode().ToString(), MATERIAL_CODE = daiview.MaterialCode }; SendSignal(signalDai); } } break; } } } } private void HideMaterialList() { dgvMlist.AutoGenerateColumns = false; dgvMlist.DataSource = new List(); plInfo.Visible = false; } private void ShowMaterialList(string OrderNo) { var mlist = _agent.InvokeServiceFunction>("PbomBLL_GetWorkingBom", _operationServiceParam.machineInfo.WORKLOC_CODE, OrderNo); dgvMlist.AutoGenerateColumns = false; dgvMlist.DataSource = mlist; dgvMlist.ClearSelection(); if (mlist != null && mlist.Count > 0) { gbMlist.Visible = plInfo.Visible = true; try { foreach (DataGridViewRow row in DGView.Rows) { FJC.Entity.View.DAIFormView dv = row.DataBoundItem as FJC.Entity.View.DAIFormView; if (dv != null && dv.StateCode.ToUpper() == "ASSY") { if (!mlist.Exists(p => (p.MATERIAL_TYPE_CODE + "").StartsWith(dv.MaterialType))) { row.Visible = false; continue; } row.Visible = true; } } } catch { } } else { gbMlist.Visible = plInfo.Visible = false; } plInfo.AutoSize = !gbMlist.Visible; } #endregion #region 发送信号 /// /// 发送信号 /// /// private void SendSignal(DAI dai) { if (proy == null) return; string paraStr = JsonConvertHelper.GetSerializes(dai); if (proy.State == System.ServiceModel.CommunicationState.Faulted) { System.ServiceModel.InstanceContext site = new System.ServiceModel.InstanceContext(this); proy = new ServiceOpc.OpcServiceClient(site); } if (proy.State == System.ServiceModel.CommunicationState.Created || proy.State == System.ServiceModel.CommunicationState.Opened) { var task = new System.Threading.Tasks.Task(() => { //闫永刚2017-10-2发送操作命令 proy.SendOperateOrder(paraStr); }); task.Start(); } } #endregion #region 发送操作命令 /// /// 发送操作命令 /// private void SendRecoveryOrder(string mouldcode) { DAI dai = daiList[0]; DAI recoveryDai = new DAI() { WORKCELL_CODE = dai.WORKCELL_CODE, WORKLOC_CODE = dai.WORKLOC_CODE, DA_CODE = "RECOVERY", MOULD_CODE = string.IsNullOrWhiteSpace(mouldcode) ? "1" : mouldcode, Result = "0" }; if (proy == null) { return; } if (proy.State == System.ServiceModel.CommunicationState.Faulted) { System.ServiceModel.InstanceContext site = new System.ServiceModel.InstanceContext(this); proy = new ServiceOpc.OpcServiceClient(site); } if (proy.State == System.ServiceModel.CommunicationState.Created || proy.State == System.ServiceModel.CommunicationState.Opened) { //闫永刚2017-10-2发送操作命令 string paraStr = JsonConvertHelper.GetSerializes(recoveryDai); proy.SendOperateOrder(paraStr); } } #endregion #region 根据输入条码定位采集点 /// /// 根据输入条码定位采集点 /// /// private DAI LocateDAI(string productCode) { foreach (var rule in _barcodeRules) { if (System.Text.RegularExpressions.Regex.IsMatch(productCode, rule.REGEX)) { var dai = daiList.FirstOrDefault(p => (p.MATERIAL_TYPE == rule.MATERIAL_TYPE || p.MATERIAL_TYPE == rule.PARENT_TYPE) && p.DATA_TYPE == rule.DATA_TYPE); if (dai != null) { var ndai = (DAI)dai.Clone(); ndai.MATERIAL_CODE = rule.MATERIAL_CODE; ndai.MATERIAL_TYPE = rule.MATERIAL_TYPE; return ndai; } } } //条码未匹配到任何正则 Product product = _agent.InvokeServiceFunction(B9BasicService.ProductBLL_GetOrginProduct.ToString(), productCode); if (product != null) { var dai = daiList.FirstOrDefault(p => p.MATERIAL_TYPE == product.MATERIAL_TYPE); if (dai != null) { var ndai = (DAI)dai.Clone(); ndai.MATERIAL_CODE = product.MATERIAL_CODE; return ndai; } } return null; } #endregion #region 发送指令或者接受完成指令刷新列表 /// /// 发送指令或者接受完成指令刷新列表 /// public void BindView() { #region 刷新生产零件的列表 this.DGViewProList.DataSource = new List(); //加载当前工序,当前设备的最后几条加工记录 DataPage dataPage = new DataPage(); dataPage.PageSize = int.Parse(cbListRowcount.Text); dataPage.PageIndex = 1; dataPage.SortExpression = " ROWVALUE ASC"; MainOperation operationSearchModel = new MainOperation(); //operationSearchModel.CREATEUSER = ClientContext.LoginInfo.UserID; operationSearchModel.MACHINECODDE = _operationServiceParam.machineInfo.MACHINECODDE; //operationSearchModel.PROCESSTYPE = _operationServiceParam.processSet.PROCESSTYPE; operationSearchModel.CURRENTPROCESS = _operationServiceParam.machineInfo.WORKLOC_CODE; //if (_operationServiceParam.processSet.PROCESSTYPE != EnumGeter.ProcessType.maojie.GetHashCode().ToString() // && (this.comProductType.SelectedValue.ToString() != EnumGeter.ProductType.fengdao.GetHashCode().ToString() // || this.comProductType.SelectedValue.ToString() != EnumGeter.ProductType.HUDfengdao.GetHashCode().ToString() // ) // ) //{ // operationSearchModel.PRODUCTTYPE = this.comProductType.SelectedValue.ToString(); //} try { #region 服务查询 dataPage = _agent.InvokeServiceFunction(B9BasicService.MainOperationBLL_GetOperationListNew.ToString(), operationSearchModel, dataPage); List listOperetions = JsonConvertHelper.GetDeserialize>(dataPage.Result.ToString()); #endregion this.DGViewProList.DataSource = listOperetions; DGViewProList.ClearSelection(); } catch (Exception ex) { throw ex; } #endregion } #endregion #region 发送指令或者接受完成指令刷新列表 /// /// 发送指令或者接受完成指令刷新列表 /// public void BindPlanView() { #region 刷新生产计划 dgvPlan.AutoGenerateColumns = false; this.dgvPlan.DataSource = new List(); try { DataPage dataPage = new DataPage(); dataPage.PageSize = int.Parse(cbListRowcount.Text); dataPage.PageIndex = 1; dataPage.SortExpression = " ROWVALUE ASC"; string workcellcode = daiList.Select(p => p.WORKCELL_CODE).FirstOrDefault() + ""; #region 服务查询 var orderlist = _agent.InvokeServiceFunction>(B9IPCService.WorkOrderBLL_GetOrderInCell.ToString(), workcellcode,cbPlanFilter.SelectedIndex, dataPage); #endregion this.dgvPlan.DataSource = orderlist; //DGViewProList.ClearSelection(); //20220420 BC316总成装配 显示当前计划在画面上部 if(workcellcode== "ASSEMBLE_BC316") { var planfirst = this.dgvPlan.SelectedRows[0].Cells[2].Value.ToString(); this.tBMat.Text = planfirst; } var plancount = _agent.InvokeServiceFunction(B9IPCService.WorkOrderBLL_GetOrderCountInCell.ToString(), workcellcode, ""); lblPlanCount.Text = plancount.ToString(); var dayplancount = _agent.InvokeServiceFunction(B9IPCService.WorkOrderBLL_GetDayPlanCount.ToString(), _operationServiceParam.machineInfo.WORKCENTER_CODE); lblDayPlanCount.Text = dayplancount.ToString(); var shiftplancount = _agent.InvokeServiceFunction(B9IPCService.WorkOrderBLL_GetOrderCountInCell.ToString(), workcellcode, _operationServiceParam.produceShift.PRODUCESHIFTTCODE); lblShiftPlanCount.Text = shiftplancount.ToString(); if (!string.IsNullOrWhiteSpace(_operationServiceParam.produceShift.PID)) { var shift = _operationServiceParam.produceShift; var condition = new FJC.Entity.QT.ProcessRecord(); condition.WORKCELL_CODE = workcellcode; condition.WORK_START_TIME = DateTime.Now.Date.Add(shift.PSSTART - shift.PSSTART.Date); condition.WORK_END_TIME = DateTime.Now.Date.Add(shift.PSEND - shift.PSEND.Date); if (condition.WORK_END_TIME < condition.WORK_START_TIME) { condition.WORK_END_TIME = condition.WORK_END_TIME.AddDays(1); } var shiftcompletecount = _agent.InvokeServiceFunction(B9IPCService.ProcessRecordBLL_GetCount.ToString(), condition); lblShiftCompleteCount.Text = shiftcompletecount.ToString(); } else { lblShiftCompleteCount.Text = ""; } } catch (Exception ex) { WriteLog.WriteError(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + ex.Message); } finally { timecounter = 0; } #endregion } #endregion #region 绑定先决条件以及绑定加工记录 /// /// 绑定先决条件以及绑定加工记录 /// private void BindAll() { //设置当前的工序 //_operationServiceParam.processSet = this.comProductType.SelectedItem as ProcessSet; if (_operationServiceParam.machineInfo != null)//_operationServiceParam.processSet != null && { this.DGView.Refresh(); DGViewColorBind(); BindView(); BindPlanView(); } } #endregion #region 窗口数据重置 /// /// 窗口数据重置 /// private void Reset(string mouldcode) { foreach (var v in daicache.Where(p=>string.Equals(p.MouldCode,mouldcode))) { if (!string.IsNullOrWhiteSpace(v.StateCode)) { v.MaterialName = ""; v.MaterialCode = ""; v.DAValue = ""; v.DAResult = ""; } } _operationServiceParam = new OperationServiceParam(); _operationServiceParam.machineInfo = this.comMachine.SelectedItem as MachineInfo; _operationServiceParam.produceShift = ClientContext.produceShift; BindAll(); } #endregion #region 刷新数据采集列表 /// /// 刷新数据采集列表 /// private void DGViewColorBind() { int panelheight = 0; DGView.ClearSelection(); if (DGView.Rows.Count > 0) { string mould = ""; for (int i = 0; i < DGView.Rows.Count; i++) { DataGridViewRow dgr = DGView.Rows[i]; panelheight += dgr.Height; if (!string.Equals(dgr.Cells[dgcMouldCode.Name].Value, mould)) { if (i > 0) { DataGridViewRow dgru = DGView.Rows[i - 1]; dgru.DividerHeight = 4; dgru.Height = dgr.Height + 4; panelheight += 4; } mould = dgr.Cells[dgcMouldCode.Name].Value + ""; } if (dgr.Cells["daresult"].Value != null && dgr.Cells["daresult"].Value.ToString() == "通过") { dgr.DefaultCellStyle.BackColor = Color.Green; #region 中插护面颜色 //------------20220527 DQZHANG 中插护面颜色------------------ if (dgr.Cells["materialtypename"].Value.ToString() == "17G.867.X.3B 26S 27T")//浅灰 { dgr.DefaultCellStyle.BackColor = Color.Gainsboro; } if (dgr.Cells["materialtypename"].Value.ToString() == "17G.867.X.3B 3RB 30C")//红棕 { dgr.DefaultCellStyle.BackColor = Color.DarkOrange; } if (dgr.Cells["materialtypename"].Value.ToString() == "17G.867.X.030B RJ4 EW7")//深灰 { dgr.DefaultCellStyle.BackColor = Color.Gray; } //-----------------------end-------------------------- #endregion } else if (dgr.Cells["daresult"].Value != null && dgr.Cells["daresult"].Value.ToString() == "未通过") { dgr.DefaultCellStyle.BackColor = Color.Red; } else { dgr.DefaultCellStyle.BackColor = SystemColors.Window; } } plDAI.Height = 27 + panelheight; } } #endregion #region 标签打印 #region 新版总工标签打印 GridppReport Report = null; public string planMATERIAL_CODE = ""; public string processMainCode = ""; ///// ///// 总成标签打印 ///// ///// //private void PrintAssemblyLabe(string processcode) //{ // tsbPrint.Visible = true; // ///////////////////// // string selectKey = processcode; // Main main = _agent.InvokeServiceFunction
(B9IPCService.MainBLL_GetByCondition.ToString(), new Main() { EPIDERMISCODE = selectKey }); // if (main == null) // { // MessageBox.Show("获取总成条码异常!"); // return; // } // MaterialCodeInit mcinit = _agent.InvokeServiceFunction(B9IPCService.MainBLL_GetMaterialSetByCondition.ToString(), new MaterialCodeInit() { MATERIAL_CODE = main.MATERIAL_CODE, WORKCELL_CODE = "ASSEMBLY" }); // if (mcinit == null) // { // MessageBox.Show("获取总成条码异常!"); // return; // } // #region 总成装配打印 // rePrintBzd.barcode = main.MAINCODE; // rePrintBzd.MATERIAL_CODE = main.MATERIAL_CODE; // rePrintBzd.color = mcinit.COLOR; // try // { // Report = new GridppReport(); // string reportPath = System.Configuration.ConfigurationManager.AppSettings["AssemblyPrintingTemplatePath"].ToString(); // //数据填充 // Report.FetchRecord += new _IGridppReportEvents_FetchRecordEventHandler(ReadFetchRecordBox2); // Report.LoadFromFile(reportPath); // //rep.Printer.PrinterName = "默认打印机";//调取不同的打印机 // Report.Print(false); // } // catch (Exception) // { // throw; // } // finally // { // Report = new GridppReport(); // } //} //新增 private BZD rePrintBzd = new BZD(); //private void ReadFetchRecordBox2() //{ // try // { // string e052BarCode = rePrintBzd.barcode; // Report.DetailGrid.Recordset.Append(); // Report.FieldByName("BarCode").Value = string.Format("*{0}*", e052BarCode);//总装条码 // Report.FieldByName("FullBarCode").Value = e052BarCode;//总装条码 // Report.FieldByName("PartCode").Value = rePrintBzd.color;//颜色 // Report.FieldByName("PartDesc").Value = rePrintBzd.MATERIAL_CODE; //物料号 // Report.DetailGrid.Recordset.Post(); // } // catch (Exception err) // { // throw new Exception(err.Message); // } //} private void ReadFetchRecordBo3() { try { string e052BarCode = rePrintBzd.barcode; Report.DetailGrid.Recordset.Append(); Report.FieldByName("BarCode").Value = string.Format("*{0}*", e052BarCode);//总装条码 Report.FieldByName("FullBarCode").Value = e052BarCode;//总装条码 Report.FieldByName("PartCode").Value = rePrintBzd.color;//颜色 Report.FieldByName("PartDesc").Value = rePrintBzd.MATERIAL_CODE; //物料号 Report.DetailGrid.Recordset.Post(); } catch (Exception err) { throw new Exception(err.Message); } } /// /// 打印052标签 /// /// 物料号是否为固定值 /// 主码 public void Print052QRCODE(bool cBoxVANstr, string processcode) { try { if (!cBoxVANstr || "IP_ASSEMBLING,GWASSEMBLE_VW371PA".Contains(_operationServiceParam.machineInfo.WORKLOC_CODE)) cBoxVAN.Visible = false; Report = new GridppReport(); //数据填充 //Report.FetchRecord += new _IGridppReportEvents_FetchRecordEventHandler(ReadFetchRecordBox); processMainCode = processcode; string reportPath = System.Configuration.ConfigurationManager.AppSettings["AssemblyPrintingTemplatePath"].ToString(); //数据填充 Report.FetchRecord += new _IGridppReportEvents_FetchRecordEventHandler(ReadFetchRecordBox); Report.LoadFromFile(reportPath); //rep.Printer.PrinterName = "默认打印机";//调取不同的打印机 Report.Print(false); } catch (Exception) { throw; } finally { Report = new GridppReport(); } #endregion } public class BZD { public string barcode; public string color; public string MATERIAL_CODE; public string count; }; /// /// 获取BZD码 /// /// private BZD getBZDCode() { BZD bzd = new BZD(); List list = new List(); List paramList = new List(); //张松男 20210207 总成工位打印052 缺少物料号 重新查找填充 start if (string.IsNullOrEmpty(planMATERIAL_CODE)) { var MaterialCodes = ""; var dataSrouce = _agent.InvokeServiceFunction(B9IPCService.BZDConfigBLL_GetMaterialCode.ToString(), processMainCode); foreach (DataRow dataRow in dataSrouce.Rows) { MaterialCodes = dataRow["MATERIAL_CODE"].ToString(); } if (!string.IsNullOrEmpty(MaterialCodes)) planMATERIAL_CODE = MaterialCodes; else throw new Exception("创建BZD码失败!缺少planMATERIAL_CODE"); } //张松男 20210207 总成工位打印052 缺少物料号 重新查找填充 end paramList.Add(planMATERIAL_CODE); paramList.Add(processMainCode); try { //读取BZDCONFIG配置列表 list = _agent.InvokeServiceFunction>( B9IPCService.BZDRecorderBLL_CreateBZDCode.ToString(), paramList); if (list != null) { //将返回值赋值给bzd对象 bzd.barcode = list[0]; bzd.color = list[1]; bzd.MATERIAL_CODE = list[2]; bzd.count = list[3]; if (bzd.count == "0") { planMATERIAL_CODE = null; processMainCode = null; throw new Exception($"创建BZD码失败!缺少list[3];planMATERIAL_CODE={planMATERIAL_CODE};processMainCode={processMainCode}"); } planMATERIAL_CODE = null; processMainCode = null; } else { planMATERIAL_CODE = null; processMainCode = null; throw new Exception($"创建BZD码异常!list=null;planMATERIAL_CODE={planMATERIAL_CODE};processMainCode={processMainCode}"); } } catch (Exception e) { planMATERIAL_CODE = null; processMainCode = null; MessageBox.Show(e.Message); throw; } return bzd; } /// /// 填充数据 /// private void ReadFetchRecordBox() { try { BZD bzd = getBZDCode(); string e052BarCode = bzd.barcode; Report.DetailGrid.Recordset.Append(); //************20210712 DQZhang BC316 VAN --20220422 只有生产备件时有82V,主要生产VAN************************************* if (cBoxVAN.Checked && cBoxVAN.Visible == true) { Report.FieldByName("PartDesc").Value = "5CG.857.003.A 82V"; } else { Report.FieldByName("PartDesc").Value = bzd.MATERIAL_CODE; //物料号 //物料号 } Report.FieldByName("BarCode").Value = string.Format("*{0}*", e052BarCode);//总装条码 Report.FieldByName("FullBarCode").Value = e052BarCode;//总装条码 //只有BC316-MP4 的高配,需要增加4G配置的标识 if ("5CG.857.003 P AFI,5CG.857.003 P AGO,5CG.857.003 P AGI,5CG.857.003 R AFI".Contains(bzd.MATERIAL_CODE)) { Report.FieldByName("PartCode").Value = "* IP";//颜色 } else if ("5CG.857.003 Q AGX,5CG.857.003 Q AGZ,5CG.857.003 S AGI,5CG.857.003 S AHB,5CG.857.003 S AHD".Contains(bzd.MATERIAL_CODE)) { Report.FieldByName("PartCode").Value = "4G IP";//颜色 } else { Report.FieldByName("PartCode").Value = bzd.color;//颜色 } //Report.FieldByName("PartCode").Value = bzd.color;//颜色 Report.DetailGrid.Recordset.Post(); } catch (Exception err) { throw new Exception(err.Message); } } #endregion #region 总成标签打印 /// /// 总成标签打印 /// /// private void PrintAssemblyLabel(string processcode) { tsbPrint.Visible = true; ///////////////////// string selectKey = processcode; Main main = _agent.InvokeServiceFunction
(B9IPCService.MainBLL_GetByCondition.ToString(), new Main() { EPIDERMISCODE = selectKey }); if (main == null) { MessageBox.Show("获取总成条码异常!"); return; } MaterialCodeInit mcinit = _agent.InvokeServiceFunction(B9IPCService.MainBLL_GetMaterialSetByCondition.ToString(), new MaterialCodeInit() { MATERIAL_CODE = main.MATERIAL_CODE, WORKCELL_CODE = "LS_ASSEMBLE_VW371" }); if (mcinit == null) { MessageBox.Show("获取总成条码异常!"); return; } #region 总成装配打印 //string xmlPath = System.Configuration.ConfigurationSettings.AppSettings["XmlName"].ToString(); ; //BarcodeLib.BarCodeGenerate g = new BarcodeLib.BarCodeGenerate( xmlPath); //bool b = g.PrintBarCode(_operationServiceParam.main.MAINCODE); QM.Assist.LabelInfo ll = new QM.Assist.LabelInfo(); //ll.BarCode = main.MAINCODE + "," + main.MATERIAL_CODE + ","; //************20210413 DQZhang BC316 VAN************************************* if (cBoxVAN.Checked) { ll.BarCode = main.MAINCODE + "," + "5CG.857.003.A VAN" + ","; } else { ll.BarCode = main.MAINCODE + "," + main.MATERIAL_CODE + ","; } //*************************************************************************** ll.BarCode += mcinit.HB; //if (selectKey.ToUpper().Substring(12, 1) == "H") //{ // ll.BarCode += "高"; //} //else //{ // ll.BarCode += "低"; //} ll.BarCode += mcinit.COLOR; //if (selectKey.Substring(13, 1) == "1") //{ // ll.BarCode += "黑"; //} //else if (selectKey.Substring(13, 1) == "2") //{ // ll.BarCode += "灰"; //} //else //{ // ll.BarCode += "米"; //} ll.BarCode += " ";// +mcinit.PRODUCT_TYPES; //ll.BarCode += "\r\n" + ll.BarCode;//总成标签一式两份 QM.Assist.PrintUtil.LabelList2.Add(ll); QM.Assist.PrintUtil pu = new QM.Assist.PrintUtil(); pu.PrintLabel2(System.Configuration.ConfigurationManager.AppSettings["proPath"].ToString(), System.Configuration.ConfigurationManager.AppSettings["ZCtemPath"].ToString(), System.Configuration.ConfigurationManager.AppSettings["ZCdataPath"].ToString()); ///总成标签一式两份 //pu.PrintLabel2(System.Configuration.ConfigurationManager.AppSettings["proPath"].ToString // (), System.Configuration.ConfigurationManager.AppSettings["ZCtemPath"].ToString // (), System.Configuration.ConfigurationManager.AppSettings["ZCdataPath"].ToString // ()); #endregion } #endregion #region 过程标签打印 /// /// 过程标签打印 /// /// private void PrintProcessLabel(string processcode) { ///////////////////// string selectKey = processcode; Product product = _agent.InvokeServiceFunction(B9IPCService.ProductBLL_Get.ToString(), new Product() { PRODUCTCODE = selectKey }); if (product == null) { MessageBox.Show("获取产品信息异常!"); return; } #region 过程标签打印 QM.Assist.LabelInfo ll = new QM.Assist.LabelInfo(); ll.BarCode = product.PRODUCTCODE + "," + product.MATERIAL_CODE + ","; ll.BarCode += product.MATERIAL_CODE + "," + product.MATERIAL_CODE + "," + product.MATERIAL_TYPE; QM.Assist.PrintUtil.LabelList2.Add(ll); QM.Assist.PrintUtil pu = new QM.Assist.PrintUtil(); pu.PrintLabel2(System.Configuration.ConfigurationManager.AppSettings["proPath"].ToString (), System.Configuration.ConfigurationManager.AppSettings["ProcessCodeTMPPath"].ToString (), System.Configuration.ConfigurationManager.AppSettings["ProcessCodeDATPath"].ToString ()); #endregion } #endregion #region 包覆分总成打印 private void PrintBFProcessLabel(string processcode) { string selectKey = processcode; List list_product = _agent.InvokeServiceFunction>(B9IPCService.ProductBLL_GetListpro.ToString(), new Product() { PRODUCTCODE = selectKey }); if (list_product.Count == 0) { MessageBox.Show("获取产品信息异常!"); return; } var product = new Product(); foreach (var item in list_product) { if (item.MACHINECODDE == _operationServiceParam.machineInfo.MACHINECODDE) { product = item; } } Material materialInfo = new Material(); materialInfo.MATERIAL_CODE = product.MATERIAL_CODE; materialInfo.MATERIAL_NAME = product.MATERIAL_NAME; DataResult> resultList = _agent.InvokeServiceFunction>>("MainOperationBLL_GetPrintCodeForMP4D", materialInfo, processcode); try { Print(resultList.Result, true); } catch (Exception e) { var ss = e.Message; } } private void Print(List codeList, bool IsManual) { List labels = new List(); //打印条码 string typeTem = ""; string typeData = ""; foreach (FJC.Entity.Operation.PrintCode item in codeList) { //班次信息 string shiftCode = ClientContext.produceShift.PRODUCESHIFTTCODE; item.ShiftCode = shiftCode; typeTem = item.PRINT_TEMPALTE_TEM; typeData = item.PRINT_TEMPALTE_DATA; PrintTemplate.InjectLabel label = new PrintTemplate.InjectLabel { CreateDate = DateTime.Now, //MachineCode = comMachine.SelectedValue + "", MaterialCode = item.PRODUCTCODE, MaterialName = item.MATERIAL_NAME, ModelCode = cbMould.SelectedValue + "", SerialNumber = item.MAINCODE, ShiftCode = shiftCode, IsManualPrint = IsManual }; labels.Add(label); } string path = System.Configuration.ConfigurationManager.AppSettings["Template_Local_Path"]; if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } FastReport.Report fr = new FastReport.Report(); fr.RegisterData(labels, "Labels"); if (!System.IO.File.Exists(string.Format("{0}\\{1}.frx", path, typeTem))) { if (System.IO.File.Exists(string.Format("PrintTemplate\\{1}.frx", path, typeTem))) { System.IO.File.Copy(string.Format("PrintTemplate\\{1}.frx", path, typeTem) , string.Format("{0}\\{1}.frx", path, typeTem)); } else { fr.FileName = string.Format("{0}\\{1}.frx", path, typeTem); fr.Design(true); fr.Save(string.Format("{0}\\{1}.frx", path, typeTem)); } } fr.Load(string.Format("{0}\\{1}.frx", path, typeTem)); try { fr.PrintSettings.ShowDialog = false; fr.Print(); } catch (Exception e) { var ss = e.Message; } try { fr.Dispose(); } catch (Exception e) { var ss = e.Message; } } #endregion #region 计划标签打印 /// /// 计划标签打印 /// /// private void PrintPlanLabel(DAResult result) { var labeldata = _agent.InvokeServiceFunction(B9IPCService.WorkOrderBLL_GetPlanLabel.ToString(), result.WorkOrderID); labeldata.SN = result.ProcessCode; #region 计划标签打印 //string xmlPath = System.Configuration.ConfigurationSettings.AppSettings["XmlName"].ToString(); ; //BarcodeLib.BarCodeGenerate g = new BarcodeLib.BarCodeGenerate( xmlPath); //bool b = g.PrintBarCode(_operationServiceParam.main.MAINCODE); QM.Assist.LabelInfo ll = new QM.Assist.LabelInfo(); //planno,plantype,seq,bom,vin,kin,sn,pn,prodname,plandate,project,hbtype,color ll.BarCode = string.Format("'{0},'{1},'{2},'{3},'{4},'{5},'{6},'{7},'{8},'{9},'{10},'{11},'{12}", labeldata.PlanNo,//计划号 labeldata.PlanType,//计划类型(0:FIS,1:STOCK,2:INSERT) labeldata.SEQ,//顺序号 labeldata.BOM,//bom号 labeldata.VIN,//底盘号 labeldata.KIN,//车身号 labeldata.SN,//序号 labeldata.PN,//总成物料号 labeldata.ProdName,//总成物料名称 labeldata.PlanDate,//计划日期 labeldata.ProjectCode,//项目编号 labeldata.HBType,//车型配置 labeldata.Color//颜色 ); QM.Assist.PrintUtil.LabelList2.Add(ll); QM.Assist.PrintUtil pu = new QM.Assist.PrintUtil(); pu.PrintLabel2(System.Configuration.ConfigurationManager.AppSettings["proPath"].ToString (), System.Configuration.ConfigurationManager.AppSettings["PlanLabelTMPPath"].ToString (), System.Configuration.ConfigurationManager.AppSettings["PlanLabelDATPath"].ToString ()); #endregion } #endregion #region 设备下拉改变事件 /// /// 设备下拉改变事件 /// /// /// private void comMachine_SelectionChangeCommitted(object sender, EventArgs e) { Init(); } #endregion #region 重新发发送操作指令 /// /// 重新发发送操作指令 /// /// /// private void sendOrderButton_Click(object sender, EventArgs e) { if (this.DGViewProList.SelectedRows.Count == 0) { MessageBox.Show("请选择要重新发送操作指令的加工信息!"); return; } if (MessageBox.Show("确定重新发送操作指令?", "提示", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } //判断是否已加工完成 if (!this.DGViewProList.SelectedRows[0].Cells["OPERATESTATE"].Value.ToString().Equals(EnumGeter.OPERATESTATE.OPERATING.GetHashCode().ToString())) { MessageBox.Show("只有加工中的零件可以重新发送操作指令!"); return; } string molderNumber = this.DGViewProList.SelectedRows[0].Cells["MOLDNUMBER"].Value.ToString(); #region 发送指令 if (proy.State == System.ServiceModel.CommunicationState.Faulted) { System.ServiceModel.InstanceContext site = new System.ServiceModel.InstanceContext(this); proy = new ServiceOpc.OpcServiceClient(site); } if (proy.State == System.ServiceModel.CommunicationState.Created || proy.State == System.ServiceModel.CommunicationState.Opened) { string moldnumber = _operationServiceParam.machineInfo.MOLDNUMBER; try { _operationServiceParam.machineInfo.MOLDNUMBER = molderNumber; DataResult reMsg = _agent.InvokeServiceFunction>(B9BasicService.MainOperationBLL_GetSendOrder.ToString(), _operationServiceParam.machineInfo, true); if (!string.IsNullOrEmpty(reMsg.Result) && proy != null && (proy.State == System.ServiceModel.CommunicationState.Created || proy.State == System.ServiceModel.CommunicationState.Opened)) { proy.SendOperateOrder(reMsg.Result); this.lblError.Text = "发送指令成功!"; this.lblError.ForeColor = Color.Green; this.lblError.BackColor = SystemColors.InactiveBorder; _operationServiceParam.machineInfo.MOLDNUMBER = moldnumber; } } catch (Exception ex) { this.lblError.Text += "发送指令失败!"; this.lblError.ForeColor = Color.White; this.lblError.BackColor = Color.Red; _operationServiceParam.machineInfo.MOLDNUMBER = moldnumber; } } #endregion } #endregion #region 锁定解锁 /// /// 锁定解锁 /// /// /// private void lblLock_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { if (this.lblLock.Tag.ToString().Equals("0")) { LockType(false); } else { LockType(true); } } #endregion #region 设备和类别锁定 /// /// 设备和类别锁定 /// /// private void LockType(bool lockFlag) { this.comMachine.Enabled = lockFlag; //this.comProductType.Enabled = lockFlag; if (lockFlag) { this.lblLock.Text = "锁定工位"; this.lblLock.Tag = "0"; } else { string locationfile = System.Configuration.ConfigurationManager.AppSettings["loactionfile"]; System.IO.File.WriteAllText(locationfile, this.comMachine.SelectedValue.ToString()); this.lblLock.Text = "解锁工位"; this.lblLock.Tag = "1"; } } #endregion #region 回车事件 /// /// 回车事件 /// /// /// private void txtCode_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter)//如果输入的是回车键 { WriteLog.Write(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + txtCode.Text.Trim().ToUpper()); Operation(); ;//触发button事件 } } /// /// 回车事件 /// /// /// private void OperationForm_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter)//如果输入的是回车键 { this.btnAdd_Click(sender, e);//触发button事件 } } #endregion #region OPC推送消息 /// /// OPC推送消息 /// /// 消息类型 3:模架号变化, /// 消息内容 public void ReturnResult(string messageType, string message) { this.Invoke((EventHandler)(delegate { try { if (messageType == "3") //模架号 MOULDCARRIER { var mould = mouldList.FirstOrDefault(p => string.Equals(p.MODELSTATION, message)); if (mould != null) { SwitchMould(mould.MODELCODE); } } else if (messageType == "4") //模具号 MOULDNUMBER { var str_messages = message.Split(':'); if (!(string.Equals(str_messages[str_messages.Length - 1], "0") || string.Equals(str_messages[str_messages.Length - 1].ToUpper(), "FALSE"))) { DAInput(message, "MN"); } return; } else if (messageType == "5") //模具号OTHER { var str_messages = message.Split(':'); if (AttachInfo.ContainsKey(str_messages[0])) { AttachInfo[str_messages[0]] = str_messages[1]; } else { AttachInfo.Add(str_messages[0], str_messages[1]); } return; } else if (string.Equals(messageType, "HeartBeat")) { opcheartbeatwaithandel.Set(); } else if(messageType == "0") // PRODUCTCODE { if (_AutoMachineCode.Contains(_operationServiceParam.machineInfo.MACHINECODDE)) { List list = QMFrameWork.Common.Serialization.JsonConvertHelper.GetDeserialize>(message); if (list.Count <= 0) { this.lblError.Text = "没有条码,请检查服务!"; this.lblError.ForeColor = Color.Red; return; } foreach (var t in list) { if (_operationServiceParam.machineInfo.MACHINECODDE == t.MACHINECODDE && t.COLUMNTYPE == "8") { txtCode.Text = t.PARAVALUE.ToString().Trim(); Operation(); } } } } else { DAInput(message, "PARM"); return; } } catch (Exception ex) { WriteLog.WriteError(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + ex.Message); this.lblError.Text = ""; this.lblError.ForeColor = Color.Black; this.lblError.BackColor = SystemColors.InactiveBorder; Reset(string.IsNullOrWhiteSpace(lblMould.Text) ? _operationServiceParam.machineInfo.WORKCELL_CODE : lblMould.Text); txtCode.SelectAll(); txtCode.Focus(); MessageBox.Show("系统异常,请重新扫描!"); } })); } private void DAInput(string message,string datype) { var mould = mouldList.FirstOrDefault(p => string.Equals(p.MODELCODE, message.Split(':')[0])); var dai = daiList.FirstOrDefault(p => p.DATA_TYPE == datype); var daiview = daicache.FirstOrDefault(p => p.DACode == dai.DA_CODE && (mould == null || p.MouldCode == mould.MODELCODE)); //daiviews.FirstOrDefault(p => p.DACode == dai.DA_CODE); daiview.DAValue = message; var result = _agent.InvokeServiceFunction(B9IPCService.DAI_Input.ToString() , new DAArgs { WorkCellCode = dai.WORKCELL_CODE, WorkLocCode = dai.WORKLOC_CODE, DACode = dai.DA_CODE, DAValue = message, MaterialCode = dai.MATERIAL_CODE, MachineCode = _operationServiceParam.machineInfo.MACHINECODDE, MachineName = _operationServiceParam.machineInfo.MACHINENAME, IsControl = _operationServiceParam.machineInfo.ISCONTROL, MouldCode = mould == null ? _operationServiceParam.machineInfo.WORKCELL_CODE : mould.MODELCODE, AttachData=AttachInfo }); if (!result.Success) //如果采集数据输入失败 { daiview.DAResult = "未通过"; DGView.Refresh(); DGViewColorBind(); this.lblError.Text = result.Message; this.lblError.ForeColor = Color.White; this.lblError.BackColor = Color.Red; txtCode.SelectAll(); txtCode.Focus(); return; } else { daiview.DAValue = result.AnalyzedValue; daiview.DAResult = "通过"; daiview.MaterialCode = result.MATERIAL_CODE; daiview.MaterialName = result.MATERIAL_NAME; DGView.Refresh(); DGViewColorBind(); //TODO:更新界面数据 } DoResultActions(result); if (this.lblLock.Tag.ToString().Equals("0")) { LockType(false); } DGView.Refresh(); DGViewColorBind(); this.txtCode.Text = ""; //设置焦点 this.ActiveControl = this.txtCode; this.txtCode.Focus(); GC.Collect(); } #endregion #region 重新连接服务器 /// /// 重新连接服务器 /// private void ReContact() { //设置与设备双工通信 if (_operationServiceParam.machineInfo.ISCONTROL.Equals("2") || _operationServiceParam.machineInfo.ISCONTROL.Equals("3")) { System.ServiceModel.InstanceContext site = new System.ServiceModel.InstanceContext(this); proy = new ServiceOpc.OpcServiceClient(site); if (proy.State == System.ServiceModel.CommunicationState.Created || proy.State == System.ServiceModel.CommunicationState.Opened) { try { this.lblError.BackColor = SystemColors.InactiveBorder; this.lblError.ForeColor = Color.Black; this.lblError.Text = "正在连接中稍后!"; var mouldno = proy.Register(_operationServiceParam.machineInfo.MACHINECODDE); this.lblError.Text = "服务器连接成功!"; this.lblError.ForeColor = Color.Green; if (mouldList.Count <= 2) { SwitchMould(""); } else { if (mouldno > 0) { var mould = mouldList.FirstOrDefault(p => string.Equals(p.MODELSTATION, mouldno.ToString())); if (mould != null) { SwitchMould(mould.MODELCODE); } } else { SwitchMould(""); } //cbMould_SelectedIndexChanged(this, EventArgs.Empty); } //****************20210413 DQZhang BC316 VAN ************************************** if (_operationServiceParam.machineInfo.MACHINECODDE == "LFRAME_WELD_MP2BC316") { SwitchMould(cbMould.SelectedValue + ""); } //********************************************************************************* } catch (Exception) { this.lblError.Text = "连接服务失败!"; this.lblError.ForeColor = Color.White; this.lblError.BackColor = Color.Red; } } } } #endregion #region 工具栏Click #region 重接服务器 /// /// 重接服务器 /// /// /// private void tsbConnect_Click(object sender, EventArgs e) { ReContact(); } /// /// 重接服务器 /// /// /// private void tsbRecovery_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(lblMould.Text) && cbMould.Items.Count > 1) { tsbRecovery.DropDownItems.Clear(); foreach (MachineInfoModels mould in cbMould.Items) { var dditem = tsbRecovery.DropDownItems.Add(mould.MODELNAME); dditem.Tag = mould.MODELCODE; dditem.Padding = new Padding(0, 10, 0, 0); } tsbRecovery.ShowDropDown(); return; } string mouldcode = string.IsNullOrWhiteSpace(lblMould.Text) ? (cbMould.Items.Count < 2 ? _operationServiceParam.machineInfo.WORKCELL_CODE : cbMould.SelectedValue.ToString()) : lblMould.Text; Recovery(mouldcode); } #endregion #region 撤销 /// /// 撤销 /// /// private void Recovery(string mouldcode) { if (MessageBox.Show("确定对该零件进行撤销操作?", "提示", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } var product_dai = ""; if (!string.IsNullOrEmpty(_DeleteProductDaiCode)) { foreach (var d in daicache) { if (_DeleteProductDaiCode.Contains(d.DACode)) { product_dai = d.DAValue; } } } var result = _agent.InvokeServiceFunction(B9IPCService.DAI_Rollback.ToString() , new DAArgs { WorkCellCode = _operationServiceParam.machineInfo.WORKCELL_CODE, WorkLocCode = _operationServiceParam.machineInfo.WORKLOC_CODE, DACode = "", DAValue = "", MaterialCode = "", MachineCode = _operationServiceParam.machineInfo.MACHINECODDE, MachineName = _operationServiceParam.machineInfo.MACHINENAME, IsControl = _operationServiceParam.machineInfo.ISCONTROL, MouldCode = mouldcode, AttachData = AttachInfo }); if (!result.Success) //如果采集数据输入失败 { this.lblError.Text = result.Message; this.lblError.ForeColor = Color.White; this.lblError.BackColor = Color.Red; return; } SendRecoveryOrder(result.MouldCode); DoResultActions(result); //zhangsn 20220519 撤销删除产品信息 if (!string.IsNullOrEmpty(_DeleteProductLoc) && _DeleteProductLoc.Contains(_operationServiceParam.machineInfo.WORKLOC_CODE)) { //删除产品信息 //ProductHelper.DeleteProduct(product_dai, _operationServiceParam.machineInfo.MACHINECODDE); _agent.InvokeServiceFunction>(B9IPCService.ProductBLL_DeleteProductt.ToString(), product_dai, _operationServiceParam.machineInfo.MACHINECODDE); } DGView.Refresh(); DGViewColorBind(); //设置焦点 this.ActiveControl = this.txtCode; txtCode.SelectAll(); txtCode.Focus(); } /// /// 撤销 /// /// /// private void tsbRecovery_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) { string mouldcode = e.ClickedItem.Tag.ToString(); Recovery(mouldcode); } #endregion #region 重打总成码 /// /// /// public string PRODUCT_CODE { get; set; } /// /// 重打总成码 /// /// /// private void tsbPrint_Click(object sender, EventArgs e) { MessageBox.Show("重打功能已关闭!"); return; if (this.DGViewProList.SelectedRows.Count == 0) { MessageBox.Show("请选择打印的本体信息!"); return; } if (MessageBox.Show("确定打印该本体的总成条码?", "提示", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } ///////////////////// string selectKey = this.DGViewProList.SelectedRows[0].Cells["PRODUCTCODE"].Value.ToString(); PRODUCT_CODE = selectKey; Report = new GridppReport(); //数据填充 //Report.FetchRecord += new _IGridppReportEvents_FetchRecordEventHandler(ReadFetchRecordBox); string reportPath = System.Configuration.ConfigurationManager.AppSettings["AssemblyPrintingTemplatePath"].ToString(); //数据填充 Report.FetchRecord += new _IGridppReportEvents_FetchRecordEventHandler(ReadFetchRecordBox3); Report.LoadFromFile(reportPath); //rep.Printer.PrinterName = "默认打印机";//调取不同的打印机 Report.Print(false); PRODUCT_CODE = null; //PrintAssemblyLabe(selectKey); } /// /// 重打总成 /// private void ReadFetchRecordBox3() { try { var record = _agent.InvokeServiceFunction(B9IPCService.BZDRecorderBLL_GetRecord.ToString(), new BZDRecorder2() { PRODUCTCODE = PRODUCT_CODE }); if (record == null) { //record = _agent.InvokeServiceFunction(B9IPCService.BZDRecorderBLL_Get316Record.ToString(), new BZDRecorder2() { PRODUCTCODE = PRODUCT_CODE }); //var config = _agent.InvokeServiceFunction>(B9IPCService.BZDConfigBLL_GetMaterial.ToString(), new BZDConfig() { MATERIALCODDE = record.MPID }); var config = _agent.InvokeServiceFunction>(B9IPCService.BZDConfigBLL_Get.ToString(), new BZDConfig() { PID = record.MPID }); string e052BarCode = record.BZDCODE; var MATERIAL_CODE = config.Result.MATERIALCODDE; var color = config.Result.configDetail; //添加补打记录 _agent.InvokeServiceFunction(B9IPCService.BarCodeReplacementBLL_Insert.ToString(), new BarCodeReplacement() { ProductCode = PRODUCT_CODE, Type = "BZD条码重打" }); Report.DetailGrid.Recordset.Append(); Report.FieldByName("BarCode").Value = string.Format("*{0}*", e052BarCode);//总装条码 Report.FieldByName("FullBarCode").Value = e052BarCode;//总装条码 Report.FieldByName("PartCode").Value = color;//颜色 Report.FieldByName("PartDesc").Value = MATERIAL_CODE; //物料号 Report.DetailGrid.Recordset.Post(); } else { var config = _agent.InvokeServiceFunction>(B9IPCService.BZDConfigBLL_Get.ToString(), new BZDConfig() { PID = record.MPID }); string e052BarCode = record.BZDCODE; var MATERIAL_CODE = config.Result.MATERIALCODDE; var color = config.Result.ColorDetail; //添加补打记录 _agent.InvokeServiceFunction(B9IPCService.BarCodeReplacementBLL_Insert.ToString(), new BarCodeReplacement() { ProductCode = PRODUCT_CODE, Type = "BZD条码重打" }); Report.DetailGrid.Recordset.Append(); Report.FieldByName("BarCode").Value = string.Format("*{0}*", e052BarCode);//总装条码 Report.FieldByName("FullBarCode").Value = e052BarCode;//总装条码 Report.FieldByName("PartCode").Value = color;//颜色 Report.FieldByName("PartDesc").Value = MATERIAL_CODE; //物料号 Report.DetailGrid.Recordset.Post(); } } catch (Exception err) { throw new Exception(err.Message); } } #endregion #region 补打总成 /// /// 重打总成码 /// /// /// private void toolStripButton3_Click(object sender, EventArgs e) { BZDPasswordForm psd = new BZDPasswordForm(this); BZDRePrintForm frm = new BZDRePrintForm(this); var result = psd.ShowDialog(); if (result.ToString() == "OK") { frm.ShowDialog(); } } #endregion #region 刷新 /// /// 刷新 /// /// /// private void btnRefresh_Click(object sender, EventArgs e) { BindView(); BindPlanView(); } #endregion #region 产品返修操作 /// /// 产品返修操作 /// /// /// private void btnEditProduct_Click(object sender, EventArgs e) { if (this.DGViewProList.SelectedRows.Count == 0) { MessageBox.Show("请选择要进行返修的表皮信息!"); return; } if (MessageBox.Show("确定要进行返修的表皮信息?", "提示", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } //判断是否已加工完成 if (!this.DGViewProList.SelectedRows[0].Cells["OPERATESTATE"].Value.ToString().Equals(EnumGeter.OPERATESTATE.COMPLETED.GetHashCode().ToString())) { MessageBox.Show("只有加工完成的零件可以产品返修操作!"); return; } //获取产品条码 string selectKey = this.DGViewProList.SelectedRows[0].Cells["PRODUCTCODE"].Value.ToString(); string pid = this.DGViewProList.SelectedRows[0].Cells["PPID"].Value.ToString(); MainOperation mo = new MainOperation() { PID = pid }; DataResult result = _agent.InvokeServiceFunction(B9BasicService.MainOperationBLL_MendProudct.ToString(), mo); MessageBox.Show(result.Msg); if (result.IsSuccess) { this.BindView(); BindPlanView(); } } #endregion #region 取消加工 /// /// 取消加工 /// /// /// private void tsbCancel_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(lblMould.Text) && cbMould.Items.Count > 1) { tsbCancel.DropDownItems.Clear(); foreach (MachineInfoModels mould in cbMould.Items) { var dditem = tsbCancel.DropDownItems.Add(mould.MODELNAME); dditem.Tag = mould.MODELCODE; dditem.Padding = new Padding(0, 10, 0, 0); } tsbCancel.ShowDropDown(); return; } string mouldcode = string.IsNullOrWhiteSpace(lblMould.Text) ? (cbMould.Items.Count < 2 ? _operationServiceParam.machineInfo.WORKCELL_CODE : cbMould.SelectedValue.ToString()) : lblMould.Text; ResetClick(mouldcode); } #endregion #region 复位 /// /// 撤销 /// /// private void ResetClick(string mouldcode) { if (MessageBox.Show("确定对本工位进行复位操作?", "提示", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } var result = _agent.InvokeServiceFunction(B9IPCService.DAI_Reset.ToString() , new DAArgs { WorkCellCode = _operationServiceParam.machineInfo.WORKCELL_CODE, WorkLocCode = _operationServiceParam.machineInfo.WORKLOC_CODE, DACode = "", DAValue = "", MaterialCode = "", MachineCode = _operationServiceParam.machineInfo.MACHINECODDE, MachineName = _operationServiceParam.machineInfo.MACHINENAME, MouldCode = mouldcode, AttachData = AttachInfo }); if (!result.Success) //如果采集数据输入失败 { this.lblError.Text = result.Message; this.lblError.ForeColor = Color.White; this.lblError.BackColor = Color.Red; return; } SendRecoveryOrder(mouldcode); DoResultActions(result); DGView.Refresh(); DGViewColorBind(); } #endregion #region 重置 /// /// 重置 /// /// /// private void tsbCancel_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) { string mouldcode = e.ClickedItem.Tag.ToString(); ResetClick(mouldcode); } #endregion #region 打开查询界面 /// /// 打开查询界面 /// /// /// private void tsbSearch_Click(object sender, EventArgs e) { Form f = Application.OpenForms["MainOperationStaticForm"]; //查找是否打开过Form1窗体 if (f == null) //没打开过 { MainOperationStaticForm form = new MainOperationStaticForm(_operationServiceParam.machineInfo, _operationServiceParam.processSet); form.MdiParent = this.ParentForm; form.Show(); //重新new一个Show出来 } else { f.WindowState = FormWindowState.Normal; f.Focus(); //打开过就让其获得焦点 } } #endregion #region 放行 /// /// 放行 /// /// /// private void tsbPass_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(lblMould.Text)&&cbMould.Items.Count>1) { tsbPass.DropDownItems.Clear(); foreach (MachineInfoModels mould in cbMould.Items) { var dditem = tsbPass.DropDownItems.Add(mould.MODELNAME); dditem.Tag = mould.MODELCODE; dditem.Padding = new Padding(0, 10, 0, 0); } tsbPass.ShowDropDown(); return; } string mouldcode = string.IsNullOrWhiteSpace(lblMould.Text) ? (cbMould.Items.Count < 2 ? _operationServiceParam.machineInfo.WORKCELL_CODE : cbMould.SelectedValue.ToString()) : lblMould.Text; LetPass(mouldcode); } /// /// 放行 /// /// /// private void tsbPass_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) { string mould = e.ClickedItem.Tag.ToString(); LetPass(mould); } /// /// 放行 /// /// private void LetPass(string mould) { if (MessageBox.Show("确定对该零件进行放行操作?", "提示", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } var result = _agent.InvokeServiceFunction(B9IPCService.DAI_LetPass.ToString() , new DAArgs { WorkCellCode = _operationServiceParam.machineInfo.WORKCELL_CODE, WorkLocCode = _operationServiceParam.machineInfo.WORKLOC_CODE, DACode = "", DAValue = "", MaterialCode = "", MachineCode = _operationServiceParam.machineInfo.MACHINECODDE, MachineName = _operationServiceParam.machineInfo.MACHINENAME, IsControl = _operationServiceParam.machineInfo.ISCONTROL, MouldCode = mould,//string.IsNullOrWhiteSpace(lblMould.Text) ? (cbMould.Items.Count < 2 ? _operationServiceParam.machineInfo.WORKCELL_CODE : cbMould.SelectedValue.ToString()) : lblMould.Text AttachData = AttachInfo }); if (!result.Success) //如果采集数据输入失败 { this.lblError.Text = result.Message; this.lblError.ForeColor = Color.White; this.lblError.BackColor = Color.Red; return; } SendRecoveryOrder(mould); DoResultActions(result); DGView.Refresh(); DGViewColorBind(); //设置焦点 this.ActiveControl = this.txtCode; txtCode.SelectAll(); txtCode.Focus(); } #endregion #region 重发启动信号 /// /// 重新发送启动信号 /// /// /// private void tsbReSignal_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(lblMould.Text) && cbMould.Items.Count > 1) { tsbReSignal.DropDownItems.Clear(); foreach (MachineInfoModels mould in cbMould.Items) { var dditem = tsbReSignal.DropDownItems.Add(mould.MODELNAME); dditem.Tag = mould.MODELCODE; dditem.Padding = new Padding(0, 10, 0, 0); } tsbReSignal.ShowDropDown(); return; } string mouldcode = string.IsNullOrWhiteSpace(lblMould.Text) ? (cbMould.Items.Count < 2 ? _operationServiceParam.machineInfo.WORKCELL_CODE : cbMould.SelectedValue.ToString()) : lblMould.Text; ReSignal(mouldcode); } /// /// 重发启动信号 /// /// /// private void tsbReSignal_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) { string mould = e.ClickedItem.Tag.ToString(); ReSignal(mould); } int reSignalClickCounter = 0; /// /// 重发启动信号 /// /// private void ReSignal(string mouldcode) { var result = _agent.InvokeServiceFunction>(B9IPCService.DAIBLL_GetSignalDAI.ToString(), _operationServiceParam.machineInfo.WORKCELL_CODE, string.Equals(_operationServiceParam.machineInfo.WORKCELL_CODE, mouldcode) ? "" : mouldcode); var dcache = daicache.FirstOrDefault(p => p.DACode == result.Result && p.MouldCode == mouldcode); if (dcache == null) { return; } if (!string.Equals(dcache.DAResult, "通过")) { if (reSignalClickCounter < 5) { lblError.Text = "数据采集未通过,无法发送启动信号!"; this.lblError.ForeColor = Color.White; this.lblError.BackColor = Color.Red; reSignalClickCounter += 1; return; } else //连续点击重发信号5次 { var dresult = MessageBox.Show("数据采集未通过,是否需要强制发送启动信号?", "发送启动信号", MessageBoxButtons.YesNoCancel); if (dresult != System.Windows.Forms.DialogResult.Yes) { return; } } } DAI signalDai = new DAI() { WORKCELL_CODE = _operationServiceParam.machineInfo.WORKCELL_CODE, WORKLOC_CODE = _operationServiceParam.machineInfo.WORKLOC_CODE, DA_CODE = dcache.DACode, MOULD_CODE = string.Equals(_operationServiceParam.machineInfo.WORKCELL_CODE, mouldcode) ? "1" : mouldcode, Result = EnumGeter.ORDERTYPE.OK.GetHashCode().ToString(), MATERIAL_CODE = dcache.MaterialCode }; SendSignal(signalDai); reSignalClickCounter = 0; } #endregion #region 点击缺陷统计卡 /// /// 点击缺陷统计卡 /// /// /// private void toolStripButton1_Click(object sender, EventArgs e) { if (this.DGViewProList.SelectedRows.Count == 0) { MessageBox.Show("请选择加工记录!"); return; } if (this.DGViewProList.SelectedRows.Count > 1) { MessageBox.Show("只能选择一条加工记录!"); return; } var temp = DGViewProList.SelectedRows[0].Cells["PRODUCTCODE"].Value.ToString(); MendRecorderReasonForm form = new MendRecorderReasonForm(temp); form.ShowDialog(); } #endregion #region 安东呼叫 /// /// 安东呼叫 /// /// /// private void tsbAndon_Click(object sender, EventArgs e) { Form f = Application.OpenForms["CallManageForm"]; //查找是否打开过Form1窗体 if (f == null) //没打开过 { CallManageForm form = new CallManageForm(_operationServiceParam.machineInfo.WORKCENTER_CODE, _operationServiceParam.machineInfo.WORKLOC_CODE, _operationServiceParam.machineInfo.MACHINECODDE); form.MdiParent = this.MdiParent; form.WindowState = FormWindowState.Maximized; form.Show(); //重新new一个Show出来 } else { //先关闭 f.Close(); //重新打开 CallManageForm form = new CallManageForm(_operationServiceParam.machineInfo.WORKCENTER_CODE, _operationServiceParam.machineInfo.WORKLOC_CODE, _operationServiceParam.machineInfo.MACHINECODDE); form.MdiParent = this.MdiParent; form.WindowState = FormWindowState.Maximized; form.Show(); //重新new一个Show出来 } } #endregion #endregion #region 设置加工记录表列的颜色信息 /// /// 设置列的颜色信息 /// /// /// private void DGViewProList_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) { if (e.RowIndex > DGViewProList.Rows.Count - 1) return; DataGridViewRow dgr = DGViewProList.Rows[e.RowIndex]; try { if (dgr.Cells["OPERATESTATE"].Value.ToString() == EnumGeter.OPERATESTATE.OPERATING.GetHashCode().ToString()) { dgr.DefaultCellStyle.BackColor = Color.YellowGreen; DGViewProList.ClearSelection(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } #endregion #region 切换模具 /// /// 切换模具 /// /// private void SwitchMould(string mouldcode) { lblMould.Text = mouldcode; daiviewSource.Clear(); foreach (var row in daicache) { if (string.IsNullOrWhiteSpace(mouldcode) || string.IsNullOrWhiteSpace(row.MouldCode) || string.Equals(row.MouldCode, daiList.FirstOrDefault().WORKCELL_CODE) || string.Equals(row.MouldCode, mouldcode) || string.Equals(row.PREINPUT, "1")) { if (row.DAType == "PARM") { } else { daiviewSource.Add(row); } } } DGViewColorBind(); } #endregion #region 列表定时刷新 private void cbListRowcount_SelectedIndexChanged(object sender, EventArgs e) { SaveSetting(); BindView(); BindPlanView(); } private void cbRefreshRate_SelectedIndexChanged(object sender, EventArgs e) { SaveSetting(); } private void cbPlanFilter_SelectedIndexChanged(object sender, EventArgs e) { BindPlanView(); SaveSetting(); } private void SaveSetting() { string filepath = ConfigurationManager.AppSettings["SaveFilePath"]; filepath = string.Format("{0}ViewSetting.cfg", filepath); var setting = new { ListRowcount = int.Parse(cbListRowcount.Text), RefreshRate = int.Parse(cbRefreshRate.Text.Trim('s')), //PlanFilter = cbPlanFilter.SelectedIndex }; string settingstring = Newtonsoft.Json.JsonConvert.SerializeObject(setting); System.IO.File.WriteAllText(filepath, settingstring); } int timecounter = 0; int opcheartbeatcount = 0; System.Threading.AutoResetEvent opcheartbeatwaithandel = new AutoResetEvent(false); private void timer1_Tick(object sender, EventArgs e) { if (!tsbOrderOperation.DropDown.Visible) { timecounter += 1; if (timecounter > int.Parse(cbRefreshRate.Text.Trim('s')))//计时达到刷新时间 { BindPlanView(); } } if (proy != null) { opcheartbeatcount += 1; if (opcheartbeatcount > 10) { if (proy.State == System.ServiceModel.CommunicationState.Faulted) { System.ServiceModel.InstanceContext site = new System.ServiceModel.InstanceContext(this); proy = new ServiceOpc.OpcServiceClient(site); } if (proy.State == System.ServiceModel.CommunicationState.Created || proy.State == System.ServiceModel.CommunicationState.Opened) { var task = new System.Threading.Tasks.Task(() => { try { proy.SendOperateOrder(string.Format("HeartBeat:{0}", _operationServiceParam.machineInfo.MACHINECODDE)); //opcheartbeatwaithandel.Reset(); if (opcheartbeatwaithandel.WaitOne(5000)) { ClientContext.OpcState = 1; } else { ClientContext.OpcState = 3; } } catch { ClientContext.OpcState = 2; } }); task.Start(); } opcheartbeatcount = 0; } } } #endregion #region 切换选择计划和加工记录 /// /// 切换选择计划和加工记录 /// /// /// private void tabView_Selected(object sender, TabControlEventArgs e) { tsbOrderOperation.Visible = tabView.SelectedTab == tpPlan; //butDEFECT.Enabled = tabView.SelectedTab == tpRecord; } #endregion #region 工单操作 #region 取消挂起 /// /// 取消挂起 /// /// /// private void tsmiCancelSuspend_Click(object sender, EventArgs e) { if (dgvPlan.SelectedRows.Count <= 0) { MessageBox.Show("请选择一条工单进行取消挂起操作!"); return; } List ids = new List(); foreach (System.Windows.Forms.DataGridViewRow row in dgvPlan.SelectedRows) { var order = (QMAPP.FJC.Entity.ProductionPlan.WorkOrder)row.DataBoundItem; if (!int.Equals(order.STATE, 4)) { MessageBox.Show("只可取消状态为挂起的工单!"); return; } ids.Add(order.PID); } _agent.InvokeServiceFunction(B9IPCService.WorkOrderBLL_CancelSuspend.ToString(), ids); BindPlanView(); } #endregion #region 删除工单 /// /// 删除工单 /// /// /// private void tsmiDeleteOrder_Click(object sender, EventArgs e) { if (dgvPlan.SelectedRows.Count <= 0) { MessageBox.Show("请选择一条工单进行删除操作!"); return; } List ids = new List(); foreach (System.Windows.Forms.DataGridViewRow row in dgvPlan.SelectedRows) { var order = (QMAPP.FJC.Entity.ProductionPlan.WorkOrder)row.DataBoundItem; if (!int.Equals(order.STATE, 4)) { MessageBox.Show("只可删除状态为挂起的工单!"); return; } ids.Add(order.PID); } _agent.InvokeServiceFunction(B9IPCService.WorkOrderBLL_DeleteOrder.ToString(), ids); BindPlanView(); } #endregion #region 重置工单 /// /// 重置工单 /// /// /// private void tsmiResetOrder_Click(object sender, EventArgs e) { if (dgvPlan.SelectedRows.Count <= 0) { MessageBox.Show("请选择一条工单进行重置操作!"); return; } List ids = new List(); foreach (System.Windows.Forms.DataGridViewRow row in dgvPlan.SelectedRows) { var order = (QMAPP.FJC.Entity.ProductionPlan.WorkOrder)row.DataBoundItem; if (!int.Equals(order.STATE, 4)) { MessageBox.Show("只可重置状态为挂起的工单!"); return; } ids.Add(order.PID); } _agent.InvokeServiceFunction(B9IPCService.WorkOrderBLL_ResetOrder.ToString(), ids); BindPlanView(); } #endregion #region 挂起工单 /// /// 挂起工单 /// /// /// private void tsmiSuspendOrder_Click(object sender, EventArgs e) { if (dgvPlan.SelectedRows.Count <= 0) { MessageBox.Show("请选择一条工单进行挂起操作!"); return; } List ids=new List(); foreach (System.Windows.Forms.DataGridViewRow row in dgvPlan.SelectedRows) { var order = (QMAPP.FJC.Entity.ProductionPlan.WorkOrder)row.DataBoundItem; if (int.Equals(order.STATE, 2)) { MessageBox.Show("不能挂起正在执行的工单!"); return; } ids.Add(order.PID); } _agent.InvokeServiceFunction(B9IPCService.WorkOrderBLL_SuspendOrder.ToString(), ids); BindPlanView(); } #endregion #region 回收工单 /// /// 回收工单 /// /// /// private void tsmiTakebackOrder_Click(object sender, EventArgs e) { if (dgvPlan.SelectedRows.Count <= 0) { MessageBox.Show("请选择一条工单进行回收操作!"); return; } List ids = new List(); foreach (System.Windows.Forms.DataGridViewRow row in dgvPlan.SelectedRows) { var order = (QMAPP.FJC.Entity.ProductionPlan.WorkOrder)row.DataBoundItem; if (!int.Equals(order.STATE, 4)) { MessageBox.Show("只可回收状态为挂起的工单!"); return; } ids.Add(order.PID); } _agent.InvokeServiceFunction(B9IPCService.WorkOrderBLL_TakeBack.ToString(), ids); BindPlanView(); } #endregion #endregion #region 工单列表选择发送变化时延时自动刷新 /// /// 工单列表选择发送变化时延时自动刷新 /// /// /// private void dgvPlan_SelectionChanged(object sender, EventArgs e) { timecounter = -10; } #endregion #region 设置计划工单列状态、颜色 /// /// 设置计划工单列状态、颜色 /// /// /// private void dgvPlan_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) { var WORKORDER_STATE_TEXT = new string[] {"初始","确认","执行中","完成","挂起" }; var row = dgvPlan.Rows[e.RowIndex]; var order = (FJC.Entity.ProductionPlan.WorkOrder)row.DataBoundItem; if (order.STATE >= 0 && order.STATE < WORKORDER_STATE_TEXT.Length) { row.Cells[dgcState.Name].Value = WORKORDER_STATE_TEXT[order.STATE]; } if (order.STATE == FJC.Entity.EnumGeter.WorkOrderState.Suspended.GetHashCode()) { row.DefaultCellStyle.BackColor = Color.LightGray; row.DefaultCellStyle.ForeColor = Color.Gray; } if (order.STATE == FJC.Entity.EnumGeter.WorkOrderState.Executing.GetHashCode()) { row.DefaultCellStyle.BackColor = Color.YellowGreen; dgvPlan.ClearSelection(); } } #endregion #region 切换计划和加工记录触发动作 /// /// 切换计划和加工记录触发动作 /// /// /// private void tabView_SelectedIndexChanged(object sender, EventArgs e) { txtCode.SelectAll(); txtCode.Focus(); } #endregion #region 采集区扫描颜色显示 /// /// 采集区扫描颜色显示 /// /// /// private void OperationForm_Activated(object sender, EventArgs e) { DGViewColorBind(); } #endregion #region 切换模具 /// /// 切换模具 /// /// /// private void cbMould_SelectedIndexChanged(object sender, EventArgs e) { if (_operationServiceParam.machineInfo.ISSTATION.Equals(1)) { SwitchMould(cbMould.SelectedValue + ""); } } #endregion #region 切换设备 /// /// 切换设备配置文件 /// 20181119gzf /// /// /// private void CheckFile() { string locationfile2 = System.Configuration.ConfigurationManager.AppSettings["loactionfile2"]; if (File.Exists(@locationfile2)) { this.btnChange.Visible = true; } else { this.btnChange.Visible = false; } } /// /// 切换设备 /// 20181119gzf /// /// /// private void btnChange_Click(object sender, EventArgs e) { //string locationfile = System.Configuration.ConfigurationManager.AppSettings["loactionfile"]; //string locationfile2 = System.Configuration.ConfigurationManager.AppSettings["loactionfile2"]; //string str1 = File.ReadAllText(@locationfile); //string str2 = File.ReadAllText(locationfile2); //System.IO.File.WriteAllText(locationfile, str2); //System.IO.File.WriteAllText(locationfile2, str1); var machineInfo = this.comMachine.SelectedItem as MachineInfo; List machinelist = comMachine.DataSource as List; if (machinelist != null && machineInfo != null && !string.IsNullOrEmpty(machineInfo.OPCGROUPNAME)) { var grouplist = machinelist.Where(p => p.OPCGROUPNAME == machineInfo.OPCGROUPNAME).ToList(); var currentindex=grouplist.IndexOf(machineInfo); if (currentindex < grouplist.Count - 1) { currentindex += 1; } else { currentindex = 0; } this.comMachine.SelectedValue = grouplist[currentindex].MACHINECODDE; this.Init(); } } #endregion private void btnCollapse_Click(object sender, EventArgs e) { gbMlist.Visible = !gbMlist.Visible; plInfo.AutoSize = !gbMlist.Visible; } private void tsmiIgnoreFISBreak_Click(object sender, EventArgs e) { if (dgvPlan.SelectedRows.Count != 1) { MessageBox.Show("请选择一条(且只能选择一条)工单进行忽略断号操作!"); return; } List ids = new List(); foreach (System.Windows.Forms.DataGridViewRow row in dgvPlan.SelectedRows) { var order = (QMAPP.FJC.Entity.ProductionPlan.WorkOrder)row.DataBoundItem; if (!int.Equals(order.ORDER_TYPE, "0")) { MessageBox.Show("只可对FIS工单进行忽略断号操作!"); return; } ids.Add(order.PID); } _agent.InvokeServiceFunction("WorkOrderBLL_IgnoreFISBreak", ids); BindPlanView(); } #region 根据配置 自动填充采集点 /// /// 查找配置表 /// /// public string GetAppConfigValue(string pConfigCode) { var AppConfig = _agent.InvokeServiceFunction(B9IPCService.AppConfigBLL_Get.ToString(), pConfigCode); if (AppConfig != null) return AppConfig.Value; else return null; } /// /// 更新配置表 /// /// public int UpdateAppConfigValue(string pConfigCode, string pConfigValue) { var result = _agent.InvokeServiceFunction>(B9IPCService.AppConfigBLL_UpdateAppConfig.ToString(), pConfigCode, pConfigValue); return result.Result; } /// /// 查找PbomItem /// /// public List GetPBOMCODEValue(string MATERIAL_CODE) { var list = new List(); var PbomItem = _agent.InvokeServiceFunction>(B9IPCService.PbomItemBLL_Get.ToString(), MATERIAL_CODE); if (PbomItem != null) { foreach (var va in PbomItem) { list.Add(va.PBOM_CODE); } return list; } else return list; } /// /// 查找ScanIPConfig /// /// public List GetSendPlcConfig(ScanIPConfig ScanIPConfigs) { var list = new List(); var PbomItemList = _agent.InvokeServiceFunction>(B9IPCService.ScanIPConfigBLL_Get.ToString(), ScanIPConfigs); return PbomItemList.OrderBy(c=>c.CFG).ToList(); } /// /// 查找Product /// /// public Product SelectProduct(string Products) { var list = new List(); var ProductList = _agent.InvokeServiceFunction(B9IPCService.ProductBLL_Get.ToString(), new Product() { PRODUCTCODE = Products }); return ProductList; } /// /// 查找ScanIPConfig /// /// public bool UpdateSendPlcConfig(ScanIPConfig ScanIPConfigs) { var list = new List(); var PbomItemList = _agent.InvokeServiceFunction>(B9IPCService.ScanIPConfigBLL_Update.ToString(), ScanIPConfigs); if (PbomItemList.Result > 0) return true; else return false; } /// /// 插入产品信息 /// /// public bool InsertProduct(Product Products) { var list = new List(); var PbomItemList = _agent.InvokeServiceFunction>(B9IPCService.ProductBLL_Insert.ToString(), Products); if (PbomItemList.Result >0) return true; else return false; } /// /// 插入加工记录信息 /// /// public bool InsertProcessRecord(ProcessRecord ProcessRecords) { var list = new List(); var PbomItemList = _agent.InvokeServiceFunction>(B9IPCService.ProcessRecordBLL_Insert.ToString(), ProcessRecords); if (PbomItemList.Result >0) return true; else return false; } /// /// 查找WorkOrder /// /// public string GetWorkOrder_MATERIAL_CODE(string WorkOrderPID) { var WorkOrder = _agent.InvokeServiceFunction(B9IPCService.WorkOrderBLL_Get.ToString(), new WorkOrder() { PID = WorkOrderPID }); if (WorkOrder != null) return WorkOrder.PBOM_CODE; else return null; } /// /// 查找WorkOrder /// /// public void GetNewCode(ref string Code,ref string Number) { var code1 = Convert.ToInt32(Code.Substring(Code.Length - 9, 9)); Code = Code.Substring(0, Code.Length - 9) + (code1 + Convert.ToInt32(Number)).ToString().PadLeft(9, '0'); var ProductList = SelectProduct(Code); if (ProductList != null ) { var newnumber = (Convert.ToInt32(Number) + 1).ToString(); GetNewCode(ref Code,ref newnumber); Number = newnumber; } else Number = (Convert.ToInt32(Number) + 1).ToString(); } #endregion #region 标记信息 /// /// 标记信息 /// /// /// private void btnSignInfo_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(_operationServiceParam.machineInfo.WORKLOC_CODE)) { MessageBox.Show("请先选择工位!"); return; } SignInfoForm frm = new SignInfoForm(_operationServiceParam.machineInfo.WORKLOC_CODE); frm.ShowDialog(); } #endregion } }