public void SoftReset() { if (!Connected) { RaiseEvent(Info, "Not Connected"); return; } Mode = OperatingMode.Manual; ToSend.Clear(); ToSendPriority.Clear(); Sent.Clear(); ToSendMacro.Clear(); ToSendPriority.Enqueue((char)0x18); BufferState = 0; FeedOverride = 100; RapidOverride = 100; SpindleOverride = 100; if (OverrideChanged != null) { OverrideChanged.Invoke(); } SendLine("$G"); SendLine("$#"); }
public void OverrideKey(bool isOverridden, Index index) { if (CanOverride) { OverrideChanging?.Invoke(this, EventArgs.Empty); SetKeyOverride(isOverridden ? OverrideType.New : OverrideType.Base, index); OverrideChanged?.Invoke(this, EventArgs.Empty); } }
public void OverrideContent(bool isOverridden) { if (CanOverride) { OverrideChanging?.Invoke(this, EventArgs.Empty); contentOverride = isOverridden ? OverrideType.New : OverrideType.Base; OverrideChanged?.Invoke(this, EventArgs.Empty); } }
public void OverrideDeletedItem(bool isOverridden, ItemId deletedId) { CollectionItemIdentifiers ids; if (CanOverride && TryGetCollectionItemIds(Content.Retrieve(), out ids)) { OverrideChanging?.Invoke(this, EventArgs.Empty); SetOverride(isOverridden ? OverrideType.New : OverrideType.Base, deletedId, itemOverrides); if (isOverridden) { ids.MarkAsDeleted(deletedId); } else { ids.UnmarkAsDeleted(deletedId); } OverrideChanged?.Invoke(this, EventArgs.Empty); } }
public void Disconnect() { if (Log != null) { Log.Close(); } Log = null; Connected = false; WorkerThread.Join(); try { Connection.Close(); } catch { } Connection.Dispose(); Connection = null; Mode = OperatingMode.Disconnected; MachinePosition = new Vector3(); WorkOffset = new Vector3(); FeedRateRealtime = 0; CurrentTLO = 0; if (PositionUpdateReceived != null) { PositionUpdateReceived.Invoke(); } Status = "Disconnected"; DistanceMode = ParseDistanceMode.Absolute; Unit = ParseUnit.Metric; Plane = ArcPlane.XY; BufferState = 0; FeedOverride = 100; RapidOverride = 100; SpindleOverride = 100; if (OverrideChanged != null) { OverrideChanged.Invoke(); } PinStateLimitX = false; PinStateLimitY = false; PinStateLimitZ = false; PinStateProbe = false; if (PinStateChanged != null) { PinStateChanged.Invoke(); } ToSend.Clear(); ToSendPriority.Clear(); Sent.Clear(); ToSendMacro.Clear(); }
/// <summary> /// Parses a recevied status report (answer to '?') /// </summary> private void ParseStatus(string line) { MatchCollection statusMatch = StatusEx.Matches(line); if (statusMatch.Count == 0) { NonFatalException.Invoke(string.Format("Received Bad Status: '{0}'", line)); return; } bool posUpdate = false; bool overrideUpdate = false; bool pinStateUpdate = false; bool resetPins = true; foreach (Match m in statusMatch) { if (m.Index == 1) { Status = m.Groups[1].Value; continue; } if (m.Groups[1].Value == "Ov") { try { string[] parts = m.Groups[2].Value.Split(','); FeedOverride = int.Parse(parts[0]); RapidOverride = int.Parse(parts[1]); SpindleOverride = int.Parse(parts[2]); overrideUpdate = true; } catch { NonFatalException.Invoke(string.Format("Received Bad Status: '{0}'", line)); } } else if (m.Groups[1].Value == "WCO") { try { string OffsetString = m.Groups[2].Value; if (Properties.Settings.Default.IgnoreAdditionalAxes) { string[] parts = OffsetString.Split(','); if (parts.Length > 3) { Array.Resize(ref parts, 3); OffsetString = string.Join(",", parts); } } WorkOffset = Vector3.Parse(OffsetString); posUpdate = true; } catch { NonFatalException.Invoke(string.Format("Received Bad Status: '{0}'", line)); } } else if (SyncBuffer && m.Groups[1].Value == "Bf") { try { int availableBytes = int.Parse(m.Groups[2].Value.Split(',')[1]); int used = Properties.Settings.Default.ControllerBufferSize - availableBytes; if (used < 0) { used = 0; } BufferState = used; RaiseEvent(Info, $"Buffer State Synced ({availableBytes} bytes free)"); } catch { NonFatalException.Invoke(string.Format("Received Bad Status: '{0}'", line)); } } else if (m.Groups[1].Value == "Pn") { resetPins = false; string states = m.Groups[2].Value; bool stateX = states.Contains("X"); if (stateX != PinStateLimitX) { pinStateUpdate = true; } PinStateLimitX = stateX; bool stateY = states.Contains("Y"); if (stateY != PinStateLimitY) { pinStateUpdate = true; } PinStateLimitY = stateY; bool stateZ = states.Contains("Z"); if (stateZ != PinStateLimitZ) { pinStateUpdate = true; } PinStateLimitZ = stateZ; bool stateP = states.Contains("P"); if (stateP != PinStateProbe) { pinStateUpdate = true; } PinStateProbe = stateP; } else if (m.Groups[1].Value == "F") { try { FeedRateRealtime = double.Parse(m.Groups[2].Value, Constants.DecimalParseFormat); posUpdate = true; } catch { NonFatalException.Invoke(string.Format("Received Bad Status: '{0}'", line)); } } else if (m.Groups[1].Value == "FS") { try { string[] parts = m.Groups[2].Value.Split(','); FeedRateRealtime = double.Parse(parts[0], Constants.DecimalParseFormat); SpindleSpeedRealtime = double.Parse(parts[1], Constants.DecimalParseFormat); posUpdate = true; } catch { NonFatalException.Invoke(string.Format("Received Bad Status: '{0}'", line)); } } } SyncBuffer = false; //only run this immediately after button press //run this later to catch work offset changes before parsing position Vector3 NewMachinePosition = MachinePosition; foreach (Match m in statusMatch) { if (m.Groups[1].Value == "MPos" || m.Groups[1].Value == "WPos") { try { string PositionString = m.Groups[2].Value; if (Properties.Settings.Default.IgnoreAdditionalAxes) { string[] parts = PositionString.Split(','); if (parts.Length > 3) { Array.Resize(ref parts, 3); PositionString = string.Join(",", parts); } } NewMachinePosition = Vector3.Parse(PositionString); if (m.Groups[1].Value == "WPos") { NewMachinePosition += WorkOffset; } if (NewMachinePosition != MachinePosition) { posUpdate = true; MachinePosition = NewMachinePosition; } } catch { NonFatalException.Invoke(string.Format("Received Bad Status: '{0}'", line)); } } } if (posUpdate && Connected && PositionUpdateReceived != null) { PositionUpdateReceived.Invoke(); } if (overrideUpdate && Connected && OverrideChanged != null) { OverrideChanged.Invoke(); } if (resetPins) //no pin state received in status -> all zero { pinStateUpdate = PinStateLimitX | PinStateLimitY | PinStateLimitZ | PinStateProbe; //was any pin set before PinStateLimitX = false; PinStateLimitY = false; PinStateLimitZ = false; PinStateProbe = false; } if (pinStateUpdate && Connected && PinStateChanged != null) { PinStateChanged.Invoke(); } if (Connected && StatusReceived != null) { StatusReceived.Invoke(line); } }
public void Disconnect() { if (Log != null) { Log.Close(); } Log = null; Connected = false; WorkerThread.Join(); switch (Properties.Settings.Default.ConnectionType) { case ConnectionType.Serial: try { Connection.Close(); } catch { } Connection.Dispose(); Connection = null; break; case ConnectionType.Ethernet: if (Connection != null) { Connection.Close(); ClientEthernet.Close(); } Connection = null; break; default: throw new Exception("Invalid Connection Type"); } Mode = OperatingMode.Disconnected; MachinePosition = new Vector3(); WorkOffset = new Vector3(); FeedRateRealtime = 0; CurrentTLO = 0; if (PositionUpdateReceived != null) { PositionUpdateReceived.Invoke(); } Status = "Disconnected"; DistanceMode = ParseDistanceMode.Absolute; Unit = ParseUnit.Metric; Plane = ArcPlane.XY; BufferState = 0; FeedOverride = 100; RapidOverride = 100; SpindleOverride = 100; if (OverrideChanged != null) { OverrideChanged.Invoke(); } PinStateLimitX = false; PinStateLimitY = false; PinStateLimitZ = false; PinStateProbe = false; if (PinStateChanged != null) { PinStateChanged.Invoke(); } ToSend.Clear(); ToSendPriority.Clear(); Sent.Clear(); ToSendMacro.Clear(); }
void IAssetObjectNodeInternal.NotifyOverrideChanged() => OverrideChanged?.Invoke(this, EventArgs.Empty);
private void OnOverrideChanged(CultureOverrideEventArgs e) { OverrideChanged?.Invoke(this, e); }
private void OnOverrideChanged(object sender, EventArgs e) { OverrideChanged?.Invoke(sender, e); }