/// <summary> /// 订阅事件 /// 这里针对拧紧机的事件注册比较特殊 /// </summary> private void Subscribe() { try { if (TightenToolClient == null) { return; } if (TightenToolClient.SubcribeLastTightenData()) { Log.Information($"{tdConfig.NickName} ({tdConfig.Host})拧紧数据订阅成功。"); } else { Log.Information($"{tdConfig.NickName} ({tdConfig.Host})拧紧数据订阅失败。"); } if (TightenToolClient.SubscribeVehicleNumber()) { Log.Information($"{tdConfig.NickName} ({tdConfig.Host})拧紧条码订阅成功。"); } else { Log.Information($"{tdConfig.NickName} ({tdConfig.Host})拧紧条码订阅失败。"); } } catch (Exception ex) { Log.Error($"{tdConfig.NickName} [{tdConfig.Host}]拧紧机订阅消息异常", ex); } }
/// <summary> /// 建立通讯 /// 调用同步方法连接时,会报MianForm已经Disposed的异常 /// </summary> /// <returns></returns> public bool Connect() { try { if (TightenToolClient == null) { AE2DeviceFactory fac = new AE2DeviceFactory(); TightenToolClient = fac.CreateTightenDevice(tdConfig); TightenToolClient.NetChangedAction = TdNetChanged; TightenToolClient.OnLastTightenData = ReadLastTightenData; TightenToolClient.OnVehicleNumberAction = ReadVinNumber; } var start = DateTime.Now; if (TightenToolClient.Connect()) { NetStatus = true; //Subscribe(); } var cost = DateTime.Now - start; int connectCostTime = cost.Seconds + 2; Debug.WriteLine($"拧紧连接耗时{connectCostTime - 2}s"); Log.Information($"拧紧机{tdConfig.Host}通讯连接{(NetStatus ? "成功" : "失败")}。"); return(NetStatus); } catch (Exception ex) { Log.Error("拧紧通讯初始化失败", ex); NetChangedAction?.Invoke(tdConfig.ToolId, false); return(false); } }
public bool EnableTool(bool status) { if (status) { return(TightenToolClient.EnableTightenTool()); } else { return(TightenToolClient.DisableTightenTool()); } }
/// <summary> /// 发送发动机条码到拧紧机 /// </summary> /// <param name="code"></param> /// <returns></returns> public bool SetTighenCode(string code) { if (tdConfig.CodeRequest && !string.IsNullOrEmpty(code) && code.Length < 25) { try { if (TightenToolClient?.SetVehicleNumber(code) == true) { Log.Information($"发送发动机条码{code}到拧紧机{tdConfig.NickName} [{tdConfig.Host}]成功"); return(true); } else { Log.Information($"发送发动机条码{code}到拧紧机{tdConfig.NickName} [{tdConfig.Host}]失败"); } } catch (Exception ex) { Log.Error("拧紧程序处理发动机码出错", ex); } } return(false); }
/// <summary> /// 拧紧机TCP客户端向外发送的条码信息 /// </summary> /// <param name="code"></param> private void ReadVinNumber(string code) { try { Log.Information("接收到拧紧机条码:{code}", code); if (code.Length > 17) { code = code.Substring(0, 17); } if (code == CurrentEngineCode) { VinNumberChangedEvent?.Invoke(tdConfig.ToolId, code); //newTightenConfig中的信息 if (newTightenConfig != null && newTightenConfig.TightenPointNum > 0) { if (newTightenConfig.JobId.HasValue) { TightenToolClient.SelectJob(newTightenConfig.JobId.Value); } else if (newTightenConfig.BoltPset1.HasValue) { //设置Pset值,等待拧紧 GotoNextBolt(CurrentBoltIndex); } TightenToolClient.EnableTightenTool(); } else { OnWorkUnitFinishedAction?.Invoke(tdConfig.ToolId, true, null); } } } catch (Exception ex) { Log.Error(ex, "拧紧机条码接收处理报错"); } }
/// <summary> /// 切换下一颗螺丝的Pset /// </summary> /// <param name="boltIndex"></param> /// <returns></returns> private bool GotoNextBolt(int boltIndex) { Debug.WriteLine($"InitTightenInfo-> GotoNextBolt({boltIndex})"); if (newTightenConfig == null) { return(false); } var rst = false; switch (boltIndex) { case 1: if (newTightenConfig.BoltPset1 != null && CurrentPset != newTightenConfig.BoltPset1.Value) { TightenToolClient.SetPSet(newTightenConfig.BoltPset1.Value); CurrentPset = newTightenConfig.BoltPset1.Value; } break; case 2: if (newTightenConfig.BoltPset2 != null && CurrentPset != newTightenConfig.BoltPset2.Value) { TightenToolClient.SetPSet(newTightenConfig.BoltPset2.Value); CurrentPset = newTightenConfig.BoltPset2.Value; } break; case 3: if (newTightenConfig.BoltPset3 != null && CurrentPset != newTightenConfig.BoltPset3.Value) { TightenToolClient.SetPSet(newTightenConfig.BoltPset3.Value); CurrentPset = newTightenConfig.BoltPset3.Value; } break; case 4: if (newTightenConfig.BoltPset4 != null && CurrentPset != newTightenConfig.BoltPset4.Value) { TightenToolClient.SetPSet(newTightenConfig.BoltPset4.Value); CurrentPset = newTightenConfig.BoltPset4.Value; } break; case 5: if (newTightenConfig.BoltPset5 != null && CurrentPset != newTightenConfig.BoltPset5.Value) { TightenToolClient.SetPSet(newTightenConfig.BoltPset5.Value); CurrentPset = newTightenConfig.BoltPset5.Value; } break; case 6: if (newTightenConfig.BoltPset6 != null && CurrentPset != newTightenConfig.BoltPset6.Value) { TightenToolClient.SetPSet(newTightenConfig.BoltPset6.Value); CurrentPset = newTightenConfig.BoltPset6.Value; } break; case 7: if (newTightenConfig.BoltPset7 != null && CurrentPset != newTightenConfig.BoltPset7.Value) { TightenToolClient.SetPSet(newTightenConfig.BoltPset7.Value); CurrentPset = newTightenConfig.BoltPset7.Value; } break; case 8: if (newTightenConfig.BoltPset8 != null && CurrentPset != newTightenConfig.BoltPset8.Value) { TightenToolClient.SetPSet(newTightenConfig.BoltPset8.Value); CurrentPset = newTightenConfig.BoltPset8.Value; } break; case 9: if (newTightenConfig.BoltPset9 != null && CurrentPset != newTightenConfig.BoltPset9.Value) { TightenToolClient.SetPSet(newTightenConfig.BoltPset9.Value); CurrentPset = newTightenConfig.BoltPset9.Value; } break; case 10: if (newTightenConfig.BoltPset10 != null && CurrentPset != newTightenConfig.BoltPset10.Value) { TightenToolClient.SetPSet(newTightenConfig.BoltPset10.Value); CurrentPset = newTightenConfig.BoltPset10.Value; } break; default: break; } return(rst); }
/// <summary> /// 读取拧紧数据 /// 这应该是TightenClient的回调方法 /// </summary> /// <param name="msg"></param> private void ReadLastTightenData(TightenData result) { Debug.WriteLine($"MyController -> ReadLastTightenData -> {result.Torque}"); Debug.WriteLine($"MyController -> ReadLastTightenData -> {result.Pset}"); try { if (result == null || result.Torque == 0) { return; } if (string.IsNullOrEmpty(CurrentEngineCode) == false) { result.EngineCode = CurrentEngineCode; } TightenDatas.AddTightenData(result); result.JobResult = GetResult() ? 1 : 0; //手动给螺栓号赋值 result.BoltNo = CurrentBoltIndex; if (CurrentBoltIndex == 0) { OnLastTightenAction?.Invoke(tdConfig.ToolId, result); return; } if (result.Result == 0) //NG { TightenCount++; Debug.WriteLine($"MyController -> ReadLastTightenData -> CurrentBoltIndex = {CurrentBoltIndex}"); Debug.WriteLine($"MyController -> ReadLastTightenData -> TightenCount = {TightenCount}"); if (TightenCount >= TightenCountLimit && TightenCountLimit != 0) //NG { //锁枪 //TODO:测试时注释 TightenToolClient.DisableTightenTool(); //调用结束事件 OnWorkUnitFinishedAction?.Invoke(tdConfig.ToolId, false, result); } else { //调用拧紧结果事件 OnLastTightenAction?.Invoke(tdConfig.ToolId, result); } } else { Debug.WriteLine($"MyController -> ReadLastTightenData -> CurrentBoltIndex = {CurrentBoltIndex}"); Debug.WriteLine($"MyController -> ReadLastTightenData -> TightenCount = {TightenCount}"); Debug.WriteLine($"MyController -> ReadLastTightenData -> newTightenConfig ==null? {newTightenConfig == null}"); //当前螺丝处理完再加1 if (CurrentBoltIndex == newTightenConfig.TightenPointNum) { //调用结束事件 OnWorkUnitFinishedAction?.Invoke(tdConfig.ToolId, true, result); //锁枪 //TODO:测试时注释 TightenToolClient.DisableTightenTool(); } else { CurrentBoltIndex++; //调用拧紧结果事件 OnLastTightenAction?.Invoke(tdConfig.ToolId, result); GotoNextBolt(CurrentBoltIndex); } //到下一颗螺丝时,拧紧次数清0 TightenCount = 0; } } catch (Exception ex) { Log.Error("ReadLastTightenData", ex); } }
public void Close() { TightenToolClient.Close(); TightenToolClient = null; }