From 9db51f9cdf8a3f3445dc4658e324d15b843f8141 Mon Sep 17 00:00:00 2001 From: Christopher Koch Date: Tue, 6 Aug 2019 15:58:04 -0700 Subject: [PATCH 1/3] Correcting TigerStopAPI references --- .../TigerStopSDKTest/Program.cs | 7 ++++--- ...gnTimeResolveAssemblyReferencesInput.cache | Bin 7011 -> 7003 bytes 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/TigerStopSDKExample/TigerStopSDKTest/Program.cs b/TigerStopSDKExample/TigerStopSDKTest/Program.cs index a9a4819..30da4f9 100644 --- a/TigerStopSDKExample/TigerStopSDKTest/Program.cs +++ b/TigerStopSDKExample/TigerStopSDKTest/Program.cs @@ -1,12 +1,13 @@ using System; using System.Collections.Generic; using System.Threading; +using TigerStopAPI; namespace TigerStopSDKExample { class Program { - static TigerStop_IO io; + static TigerStopAPI.TigerStop_IO io; static void Main(string[] args) { @@ -33,7 +34,7 @@ static void Main(string[] args) Console.WriteLine("Connecting to " + comport + "...."); - io = new TigerStop_IO(baud, comport); + io = new TigerStopAPI.TigerStop_IO(comport, baud); if (io.IsOpen) { @@ -50,7 +51,7 @@ static void Main(string[] args) Console.WriteLine("Searching...."); List> con = new List>(); - con = TigerStop_IO.Connections(); + con = TigerStopAPI.TigerStop_IO.Connections(); if (con.Count > 0) { diff --git a/TigerStopSDKExample/TigerStopSDKTest/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/TigerStopSDKExample/TigerStopSDKTest/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache index d75c9be97526ffc6d7668cf29c63e0363162942c..64c3e6cc1af596650c7b8860f0378a0a632e6d20 100644 GIT binary patch delta 236 zcmaECcH3-%6Qk+mKo-r7ITqa7os7;_F`>n&Ma416+4;#CF~#|%Maii#MX3e(#W5k7 z>8VA*CHV!xF5bG64JAY-`w2=;{>OboD}iKfoAr6`Giw!)q;IpI;9@q??NZ(xBEioL E04C&BR{#J2 delta 254 zcmca@_SkHK)8vnwS{rjLxJ|klovmU*i&Kk=W3q}f@=FV1T=J7kb5rw5ievl>QuBiI zON)|I72Gp{{9qSv*9stOvW$e< Date: Wed, 7 Aug 2019 10:50:41 -0700 Subject: [PATCH 2/3] Adding min-max/FEL command. Removed local TigerStopAPI files and linked project to it instead --- .../TigerStopSDKTest/Program.cs | 15 + .../TigerStopSDKExample.csproj | 4 +- .../TigerStopSDKTest/TigerStop_Com.cs | 1184 ------------- .../TigerStopSDKTest/TigerStop_IO.cs | 1518 ----------------- ...gnTimeResolveAssemblyReferencesInput.cache | Bin 7003 -> 6986 bytes 5 files changed, 16 insertions(+), 2705 deletions(-) delete mode 100644 TigerStopSDKExample/TigerStopSDKTest/TigerStop_Com.cs delete mode 100644 TigerStopSDKExample/TigerStopSDKTest/TigerStop_IO.cs diff --git a/TigerStopSDKExample/TigerStopSDKTest/Program.cs b/TigerStopSDKExample/TigerStopSDKTest/Program.cs index 30da4f9..299c87d 100644 --- a/TigerStopSDKExample/TigerStopSDKTest/Program.cs +++ b/TigerStopSDKExample/TigerStopSDKTest/Program.cs @@ -334,6 +334,21 @@ public static bool InputHandler() exit = false; + break; + case "FEL": + case "fel": + case "minmax": + case "min-max": + case "MINMAX": + case "MIN-MAX": + case "mm": + case "MM": + io.FindEndLimits(); + + Console.WriteLine("Min-max complete"); + + exit = false; + break; case "Sleep": case "SLEEP": diff --git a/TigerStopSDKExample/TigerStopSDKTest/TigerStopSDKExample.csproj b/TigerStopSDKExample/TigerStopSDKTest/TigerStopSDKExample.csproj index c1234b0..8ae92e2 100644 --- a/TigerStopSDKExample/TigerStopSDKTest/TigerStopSDKExample.csproj +++ b/TigerStopSDKExample/TigerStopSDKTest/TigerStopSDKExample.csproj @@ -45,15 +45,13 @@ False - ..\..\..\..\TigerStopAPI\TigerStopAPI\bin\Release\TigerStopAPI.dll + ..\..\..\TigerStopSDK\TigerStopAPI\TigerStopAPI\bin\Release\TigerStopAPI.dll - - diff --git a/TigerStopSDKExample/TigerStopSDKTest/TigerStop_Com.cs b/TigerStopSDKExample/TigerStopSDKTest/TigerStop_Com.cs deleted file mode 100644 index f5c292b..0000000 --- a/TigerStopSDKExample/TigerStopSDKTest/TigerStop_Com.cs +++ /dev/null @@ -1,1184 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.IO.Ports; -using System.Linq; -using System.Threading; - -namespace TigerStopSDKExample -{ - public class TigerStop_Com - { - // = = = AUTORESET EVENTS = = = - AutoResetEvent serialAck = new AutoResetEvent(false); - AutoResetEvent updateAck = new AutoResetEvent(false); - - // = = = BACKGROUND WORKERS = = = - BackgroundWorker bkgndCycle = new BackgroundWorker(); - - // = = = BUFFERS = = = - private List readBuffer = new List(); - private List writeBuffer = new List(); - - // = = = CONSTANTS = = = - const double HALTED = 0; - const double ACCEL = 1; - const double CONST_VEL = 2; - const double DECEL = 3; - const double DRIVE_DISABLED = 4; - const double LASH = 5; - const double WAIT_TO_MOVE = 6; - const double EMERGENCY_STOP = 7; - const double SLEEP = 8; - const double MANUAL = 9; - - // = = = EVENT HANDLERS = = = - public event EventHandler SendData; - private event EventHandler AddSetting; - public event PropertyChangedEventHandler PropertyChanged; - private event EventHandler UpdateSetting; - public event EventHandler StopOperation; - - // = = = FIELDS = = = - private int settingIndex; - public string serialNumber; - public bool isRS232 = true; - public bool isLastConnected = false; - - // = = = FLAGS = = = - // - // - SETUP - private bool isConnected = false; - private bool isSetup = true; - private bool isGettingSettings; - private bool isDetectingTS = false; - private bool isUpdatingSetting = false; - // - MOVING - private bool isMoving = false; - private bool isMoveStart = false; - private bool isHoming = false; - // - CYCLING - private bool isCyclingTool = false; - private bool isCycleStart = false; - private bool isDmOff = false; - private bool isDmOn = false; - // - SCAN - private bool isScanning = false; - - // = = = LISTS = = = - private List ackTimes = new List(); - private List mtAckTimes = new List(); - private List settings = new List(); - private List scanMarks = new List(); - - // = = = READONLY COMMANDS = = = - private static readonly byte[] moveToolCommand = { 0x6d, 0x74, 0x0d, 0x0a }; - private static readonly byte[] moveHomeCommand = { 0x6d, 0x68, 0x0d, 0x0a }; - private static readonly byte[] moveStopCommand = { 0x6d, 0x73, 0x0d, 0x0a }; - private static readonly byte[] moveEStopCommand = { 0x6d, 0x65, 0x0d, 0x0a }; - private static readonly byte[] positionQueryCommand = { 0x70, 0x0d, 0x0a }; - private static readonly byte[] scanCommand = { 0x02, 0x52, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x0d, 0x0a }; - private static readonly byte[] statusQueryCommand = { 0x73, 0x0d, 0x0a }; - private static readonly byte[] serialQueryCommand = { 0x04, 0x31, 0x0d, 0x0a }; - - // - SERIAL - private SerialPort port = new SerialPort(); - public string comPortName; - public int baudrate; - - // = = = STATIC COMMANDS = = = - private static byte[] loadSignalOn = { 0x77, 0x77, 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x0a, 0x0d }; - private static byte[] loadSignalOff = { 0x77, 0x77, 0x20, 0x30, 0x20, 0x30, 0x78, 0x38, 0x30, 0x30, 0x0a, 0x0d }; - - // = = = STRUCTS = = = - - private struct LastCommand - { - private byte[] command; - private DateTime timesent; - - public LastCommand(byte[] comm, DateTime time) - { - command = comm; - timesent = time; - } - - public byte[] Command - { - get - { - return command; - } - set - { - command = value; - } - } - - public DateTime TimeSent - { - get - { - return timesent; - } - set - { - timesent = value; - } - } - } - - private struct LastAck - { - private string acknowledgement; - private DateTime timerecieved; - - public LastAck(string ack, DateTime time) - { - acknowledgement = ack; - timerecieved = time; - } - - public string Acknowledgement - { - get - { - return acknowledgement; - } - set - { - acknowledgement = value; - } - } - - public DateTime TimeRecieved - { - get - { - return timerecieved; - } - set - { - timerecieved = value; - } - } - } - - // = = = TRACKING VARIABLES = = = - private static LastCommand lastCommand = new LastCommand(null, DateTime.Now); - private static LastAck lastAck = new LastAck(null, DateTime.Now); - private static double position; - private static double targetPosition; - - // = = = TIMEOUTS = = = - private TimeSpan timeout; - private TimeSpan mtTimeout = TimeSpan.FromSeconds(10); //We'll change it on initialization, but start with 10 seconds. - private TimeSpan scanTimeout = TimeSpan.FromSeconds(15); //We'll change it on initialization, but start with 15 seconds. - private TimeSpan homeTimeout = TimeSpan.FromSeconds(60); //We'll change it on initialization, but start with 60 seconds. - - // = = = GETTERS/SETTERS = = = - - public bool IsOpen - { - get - { - return port.IsOpen; - } - } - - - public bool IsConnected - { - get - { - return isConnected; - } - } - - - public DateTime LastAckTime - { - get - { - return lastAck.TimeRecieved; - } - } - - public SerialPort Port - { - get - { - return port; - } - private set - { - this.port = value; - } - } - - public double Position - { - get - { - return position; - } - private set - { - position = value; - NotifyPropertyChanged("Position"); - } - } - - - public List Settings - { - get - { - return settings; - } - } - - - public TimeSpan TimeOut - { - get - { - return this.timeout; - } - private set - { - this.timeout = value; - } - } - - // = = = CONSTRUCTORS = = = - - // - SERIAL CONSTRUCTOR - public TigerStop_Com(int baud, string comPort) - { - this.baudrate = baud; - this.comPortName = comPort; - - port.DataReceived += SerialPort_DataReceived; - AddSetting += SerialPort_AddSetting; - UpdateSetting += SerialPort_UpdateSetting; - - bkgndCycle.WorkerReportsProgress = false; - bkgndCycle.WorkerSupportsCancellation = true; - bkgndCycle.DoWork += new DoWorkEventHandler(bkgndCycle_DoWork); - bkgndCycle.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bkgndCycle_Completed); - } - - // = = = BACKGROUND WORKERS = = = - // - // --- private void bkgndCycle_DoWork(object sender, DoWorkEventArgs e) --- - /// - /// This background worker is only fired once we've seen a 'MTS' from the machine, informing us that we've starting a move tool cycle. - /// While we trust that the machine is actually cycling, its best to double check that its actually doing that by looking first for the 'DMS' ack, - /// signaling that the dead man switch is off. Then looking for the 'DMF' ack, signaling that the dead man switch is back on. - /// - /// - /// - private void bkgndCycle_DoWork(object sender, DoWorkEventArgs e) - { - if (lastAck.Acknowledgement.Contains("DMS")) - { - isDmOff = true; - } - - if (lastAck.Acknowledgement.Contains("DMF") && isDmOff) - { - isDmOn = true; - } - } - - // --- private void bkgndCycle_Completed(object sender, RunWorkerCompletedEventArgs e) --- - /// - /// This RunWorkerCompleted event handler just checks to see if the machine has signaled to us that the dead man switch has gone off and come back on, - /// signaling the completion of an entire tool cycle. If we have not seen both signals, then we have to assume that we're still in the middle of a cycle. - /// - /// - /// - private void bkgndCycle_Completed(object sender, RunWorkerCompletedEventArgs e) - { - if (!(isDmOff && isDmOn)) - { - bkgndCycle.RunWorkerAsync(); - } - } - - // = = = EVENT HANDLERS = = = - // - // --- private void SerialPort_AddSetting(object sender, EventArgs e) --- - /// - /// This event handler is used specifically with the SerialPort_DataRecieved() event handler when the system is still in setup and obtaining all of the settings. - /// - /// - /// - private void SerialPort_AddSetting(object sender, EventArgs e) - { - var setting = e as MessageEvent; - double value; - - // If we see 'BAD' or 'INDEX' at all, we're beyond the index range and have found all of the settings. - if (setting.Message.Contains("BAD") || setting.Message.Contains("INDEX")) - { - isGettingSettings = false; - - ClearPort(); - } - else - { - if (double.TryParse(setting.Message, out value)) - { - settings.Add(value); - } - } - } - - // --- private void SerialPort_UpdateSetting(object sender, EventArgs e) --- - /// - /// This event handler is used specifically with the SerialPort_DataReceived() event handler when the system is updating a specific setting. - /// Upon retrieving the specific setting at 'settingIndex', if the returned value can be deciphered, its the new setting value, otherwise just keep the old value. - /// - /// - /// - private void SerialPort_UpdateSetting(object sender, EventArgs e) - { - var setting = e as MessageEvent; - double value; - - // If 'settings' is keeping track of a setting at the current 'settingIndex', then try to change it. - if (settings.Count >= settingIndex - 1 && settings.Count > 0) - { - settings[settingIndex - 1] = double.TryParse(setting.Message, out value) ? value : settings[settingIndex - 1]; - } - - updateAck.Set(); - } - - // --- private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) --- - /// - /// This is the main event handler, everything from the machine will be funneled through this event handler. Anytime the serial port buffer receives data, this - /// the SerialPort.DataReceived event will fire and this event handler will be called to take in the data. This event handler is given its own thread to handle the - /// data. - /// - /// - /// - private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) - { - SerialPort sp = (SerialPort)sender; - - try - { - string data = sp.ReadLine(); - - //If we've taken care of all of the preliminary tasks, handle the data as necessary. - if (!isSetup) - { - HandleData(data); - } - //Otherwise, we're still in setup. - else - { - if (isDetectingTS) - { - int serialNum = 0; - - try - { - if (int.TryParse(new string(data.Where(char.IsDigit).ToArray()), out serialNum)) - { - isDetectingTS = false; - - serialNumber = serialNum.ToString(); - - serialAck.Set(); - } - } - catch - { - // We're just going to let the program sit out the timeout since we couldn't nail down a serial number. - } - } - else if (isGettingSettings) - { - AddSetting(this, new MessageEvent(data)); - } - else if (isUpdatingSetting) - { - UpdateSetting(this, new MessageEvent(data)); - } - } - } - catch - { - - } - } - - // --- private void NotifyPropertyChanged(string property) --- - /// - /// Basic property changed event handler. - /// - /// The 'string' name of the property that was changed, to be sent out for others to identify and decide what to do with it. - private void NotifyPropertyChanged(string property) - { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property)); - } - - // = = = METHODS = = = - // - - // --- private void HandleData(string data) --- - /// - /// Takes in a string of data from SerialPort_DataReceived() and parses it with any data in 'readBuffer' to determine if the machine has sent back an - /// ack for us to decipher at any point. - /// - /// A 'string' containing data from the serial port to send off to HandleAck() depending the systems current status. - private void HandleData(string data) - { - readBuffer.Add(data); - - if (!isScanning) - { - HandleAck(); - } - else - { - long value = 0; - - // If we found the end of scan sequence, this is our ack for scan and need to stop. - if (long.TryParse(string.Join("", readBuffer.ToArray()).Substring(4, string.Join("", readBuffer.ToArray()).Length - 5), out value)) - { - scanMarks.Add(Convert.ToDouble(value) / 1000); - - readBuffer.Clear(); - } - // The scan command is a altered move command, which means an 'MGS' will be seen and need to be cleared before the marks come in. - else if (string.Join("", readBuffer.ToArray()).Contains("MGS")) - { - readBuffer.Clear(); - } - // Otherwise, we found a mark and need to add it to our marks list. - else - { - // If we found the end of the scan, Then we can handle the ack. - if (string.Join("", readBuffer.ToArray()).Contains("\0\0\0")) - { - HandleAck(); - } - - if (data.Contains("Err") || data.Contains("Scan")) - { - scanMarks.Clear(); - readBuffer.Clear(); - SendData(this, new MessageEvent("There was an error during the scan.")); - } - } - } - } - - // --- private void HandleAck() --- - /// - /// Once HandleData() collates the data taken in from SerialPort_DataReceived() and checks it for appropriate acks based on what the system is doing - /// at the moment. - /// - private void HandleAck() - { - // If there isn't any kind of 'NACK' in the message, we have to treat it as a legitimate message. - if (!string.Join("", readBuffer.ToArray()).Contains("NACK")) - { - if (!isScanning) - { - // Started a move or too cycle. - if ((isMoveStart && string.Join("", readBuffer.ToArray()).Contains("MGS")) ^ (isCycleStart && string.Join("", readBuffer.ToArray()).Contains("MTS"))) - { - if (isMoveStart) - { - isMoveStart = false; - isMoving = true; - - double.TryParse(string.Join("", readBuffer.ToArray()).TrimStart(new char[] { 'M', 'G', 'S', ' ' }).TrimEnd(new char[] { '\r', '\n' }), out targetPosition); - } - else - { - isCycleStart = false; - isCyclingTool = true; - } - - lastAck.Acknowledgement = string.Join("", readBuffer.ToArray()); - lastAck.TimeRecieved = DateTime.Now; - - readBuffer.Clear(); - } - // Finished a move or tool cycle. - else if (isMoving ^ isCyclingTool) - { - if (string.Join("", readBuffer.ToArray()).Contains("MGF")) - { - double finalPosition; - - lastAck.Acknowledgement = "MGF"; - lastAck.TimeRecieved = DateTime.Now; - - if (double.TryParse(string.Join("", readBuffer.ToArray()).TrimStart(new char[] { '\n', 'M', 'G', 'F', ' ' }).TrimEnd(new char[] { '\r', '\n' }), out finalPosition)) - { - Position = finalPosition; - } - - SendData(this, new MessageEvent("MGF")); - - isMoving = false; - } - else if (string.Join("", readBuffer.ToArray()).Contains("MTF")) - { - isDmOff = false; - isDmOn = false; - - lastAck.Acknowledgement = "MTF"; - lastAck.TimeRecieved = DateTime.Now; - - SendData(this, new MessageEvent("MTF")); - - isCyclingTool = false; - } - // If neither 'MGF' or 'MTF' is seen, a move or tool cycle is in progress. - else - { - lastAck.Acknowledgement = string.Join("", readBuffer.ToArray()); - lastAck.TimeRecieved = DateTime.Now; - - CheckSamePosition(); - } - - readBuffer.Clear(); - - ClearCommand(false); - - SendCommand(); - } - // Is homing the device. - else if (isHoming) - { - if (string.Join("", readBuffer.ToArray()).Trim() == "0") - { - lastAck.Acknowledgement = "MHF"; - lastAck.TimeRecieved = DateTime.Now; - - SendData(this, new MessageEvent("MHF")); - - isHoming = false; - - ClearCommand(false); - - SendCommand(); - } - - readBuffer.Clear(); - } - else if (!isMoving && !isCyclingTool) - { - lastAck.Acknowledgement = string.Join("", readBuffer.ToArray()); - lastAck.TimeRecieved = DateTime.Now; - - if (!lastCommand.Command.SequenceEqual(scanCommand)) - { - SendData(this, new MessageEvent(string.Join("", readBuffer.ToArray()))); - - if (lastCommand.Command.SequenceEqual(positionQueryCommand)) - { - CheckSamePosition(); - } - - ClearCommand(false); - } - else - { - CheckSamePosition(); - - ClearCommand(false); - } - - readBuffer.Clear(); - - SendCommand(); - } - } - else - { - lastAck.Acknowledgement = string.Join("", readBuffer.ToArray()); - lastAck.TimeRecieved = DateTime.Now; - - SendData(this, new MessageEvent(string.Join(",", scanMarks.ToArray()))); - - scanMarks.Clear(); - - isScanning = false; - - readBuffer.Clear(); - - ClearCommand(false); - - SendCommand(); - } - } - else - { - // Clear the NACK from the buffer. - readBuffer.Clear(); - - RetryCommand(); - } - } - - // --- protected void QueueCommand(string command) --- - /// - /// This function is the main interface between the rest of the system and the machine. Any commands that need to be sent to the machine runs through this command. - /// It takes a 'string' command to send to the machine. If the system already has commands queued up, it will add the command to the queue, otherwise it will call - /// SendCommand() to get the command processed immediately. - /// - /// A 'string' that will be converted to a 'byte[]' command that will be sent to the machine. - protected void QueueCommand(string command) - { - byte[] cmd = CommandConverter(command); - - if (cmd.SequenceEqual(moveStopCommand)) - { - WriteToSerial(moveStopCommand); - ClearCommand(true); - - ChangeFlags(false); - - ClearPort(); - } - else if (cmd.SequenceEqual(moveEStopCommand)) - { - WriteToSerial(moveEStopCommand); - ClearCommand(true); - - ChangeFlags(false); - - ClearPort(); - } - else if (writeBuffer.Count != 0) - { - writeBuffer.Add(cmd); - } - else - { - writeBuffer.Add(cmd); - SendCommand(); - } - } - - // --- private byte[] CommandConverter --- - /// - /// Used specifically to convert 'string's into hex byte commands to send to the machine. - /// - /// A 'string' that will be translated. - /// Returns a 'byte[]' to be used as a hex byte command by the machine. - private byte[] CommandConverter(string input) - { - List command = new List(); - - foreach (char c in input) - { - command.Add(Convert.ToByte(c)); - } - - // Add the \r\n delimiter for the amp. - command.Add(0x0d); - command.Add(0x0a); - - return command.ToArray(); - } - - // --- private void SendCommand() --- - /// - /// This function takes the first command from 'writeBuffer' and, depending on the command, sends it to the machine through the proper functions. - /// - private void SendCommand() - { - if (writeBuffer.Count != 0) - { - byte[] send = writeBuffer[0]; - - if (send[0] == 0x06d) - { - MoveCommand(send); - } - else if (send.SequenceEqual(scanCommand)) - { - TimeOut = Timeout.InfiniteTimeSpan; - isScanning = true; - - WriteToSerial(scanCommand); - } - else - { - WriteToSerial(send); - } - } - } - - // --- private void MoveCommand(byte[] command) --- - /// - /// Called if the first command seen by SendCommand() is a move command, determine what kind of move command is being sent and set the appropriate flags - /// and timeouts before sending the command to the machine. - /// - /// A 'byte[]' command that will be used to determine which move command is being sent. - private void MoveCommand(byte[] moveCommand) - { - switch (moveCommand[1]) - { - //Move go - case 0x67: - TimeOut = Timeout.InfiniteTimeSpan; - isMoveStart = true; - WriteToSerial(moveCommand); - break; - //Move home - case 0x68: - TimeOut = homeTimeout; - isHoming = true; - WriteToSerial(moveHomeCommand); - break; - //Move tool - case 0x74: - TimeOut = mtTimeout; - isCycleStart = true; - WriteToSerial(moveToolCommand); - break; - } - } - - // --- private void ClearCommand(bool allCommands) --- - /// - /// This function is used to clear out commands from the 'writeBuffer'. If 'allCommands' is 'true', it will clear all commands from the 'writeBuffer'. - /// Otherwise, it will only clear the first command from 'writeBuffer'. - /// - /// A 'bool' that determines whether to clear the first command in the list or to clear all of the commands from the list. - private void ClearCommand(bool allCommands) - { - if (allCommands) - { - SendData(this, new MessageEvent("There was an error.")); - writeBuffer.Clear(); - } - else - { - if (writeBuffer.Count != 0) - { - writeBuffer.Remove(writeBuffer[0]); - } - } - } - - // --- private void WriteSerial(byte[] command) --- - /// - /// This function writes the byte[] command to the machine over the serial port. Also tracks the last command that was sent, in case we need send it again. - /// - /// - private void WriteToSerial(byte[] command) - { - port.Write(command, 0, command.Length); - - lastCommand.Command = command; - lastCommand.TimeSent = DateTime.Now; - } - - // --- private void WriteToSerialClean(byte[] command) --- - /// - /// This function writes the byte[] command to the machine over the serial port. It does not track the last command. - /// - /// - private void WriteToSerialClean(byte[] command) - { - port.Write(command, 0, command.Length); - } - - // --- private void RetryCommand() --- - /// - /// This function sends the last command to the machine in the case the machine did not register or complete the last command. Caution is required - /// when using this function as ‘lastCommand.Command’ may cause the machine to act unexpectedly, such as cycling the tool or moving when the user is unprepared. - /// - private void RetryCommand() - { - Thread.Sleep(100); - - ClearPort(); - - // Make sure the proper flags are set. - if (lastCommand.Command[0].Equals(0x6d) && lastCommand.Command[1].Equals(0x67)) - { - isMoving = true; - } - else if (lastCommand.Command[0].Equals(0x6d) && lastCommand.Command[1].Equals(0x74)) - { - isCyclingTool = true; - } - - WriteToSerial(lastCommand.Command); - } - - // --- private void GetSettings() --- - /// - /// This function is used to ask the machine for all of its settings and puts them into a list for future use. - /// - protected void GetSettings() - { - settings.Clear(); - - isSetup = true; - isGettingSettings = true; - - for (int i = 1; isGettingSettings; i++) - { - WriteToSerialClean(CommandConverter("d" + i)); - - Thread.Sleep(50); - } - - isSetup = false; - - ClearPort(); - } - - // --- private bool SamePosition() --- - /// - /// This function is used to determine if the position that the machine is at is the same as the last position that was queried. If the position - /// is the same, the function returns 'true' if the position in the last acknowledgment is the same as the current position we know of. Otherwise, - /// the function returns false. - /// - /// Returns a bool denoting whether the machine is in the same place as the last time position was queried. - private bool CheckSamePosition() - { - double newPosition = 0; - bool samePosition = false; - - if (double.TryParse(lastAck.Acknowledgement.TrimStart(new char[] { 'M', 'G', 'F', 'S' }).TrimEnd(new char[] { '\r', '\n' }), out newPosition)) - { - if (Position == newPosition) - { - samePosition = false; ; - } - else - { - samePosition = true; - } - - Position = newPosition; - } - else - { - samePosition = true; - } - - return samePosition; - } - - // --- private void CheckMovement() --- - /// - /// This function is used while the machine is moving to double check that the machine is, in fact, moving like it was told to. - /// - private void CheckMovement() - { - if (isMoving) - { - double status = 2; - - WriteToSerial(statusQueryCommand); - - Thread.Sleep(100); - - if (!double.TryParse(lastAck.Acknowledgement.TrimEnd(new char[] { '\r', '\n' }), out status)) - { - status = 2; - } - - // If we're stopped, check if the machine is near the target position. - if (status == DRIVE_DISABLED || status == HALTED) - { - if (targetPosition - 0.004 <= Position && Position <= targetPosition + 0.004) - { - Position = targetPosition; - SendData(this, new MessageEvent("MGF")); - } - else - { - SendData(this, new MessageEvent("The system did not detect a proper move completion")); - } - } - } - else - { - ClearPort(); - } - } - - // --- private void ClearPort() --- - /// - /// This function is used to clear out the serial port, reading anything currently in the serial port. - /// - protected void ClearPort() - { - port.ReadExisting(); - } - - // --- public void ClosePort() --- - /// - /// Used to close the port when it is no longer in use. - /// - protected void ClosePort() - { - port.Close(); - } - - // --- private void OpenPort() --- - /// - /// This function takes the stored com port name and baud rate and attempts to open a serial connection to the desired com port. - /// - protected void OpenPort() - { - try - { - port.PortName = comPortName; - port.BaudRate = baudrate; - port.StopBits = StopBits.One; - port.DataBits = 8; - port.Handshake = Handshake.None; - port.DtrEnable = true; - port.RtsEnable = true; - - port.Open(); - } - catch - { - - } - } - - // --- public bool DetectTigerStop() --- - /// - /// This function sends the serial command query to the machine to get a hold of its serial number. If the serial number is - /// valid, then SerialPort_DataReceived() will signal the 'serialAck' to allow the function through and to return true. - /// - /// Returns a 'bool' that signals whether or not the system detected a TigerStop machine on the other end of the connection. - protected bool DetectTigerStop() - { - bool detected = false; - - isDetectingTS = true; - - WriteToSerialClean(serialQueryCommand); - - if (serialAck.WaitOne(1000)) - { - detected = true; - } - else - { - detected = false; - } - - return detected; - } - - // --- public bool CheckConnection() --- - /// - /// This function goes through all of the necessary checks that ensures the system is connected to a machine. If all of the checks pass - /// a 'bool' is returned 'true' denoting that the system has successfully connected to the machine. - /// - /// Returns a bool denoting whether we were able to connect to a machine with a valid enable code. - protected bool CheckConnection() - { - bool isConnected = false; - - try - { - if (IsOpen) - { - if (DetectTigerStop()) - { - this.isLastConnected = true; - isConnected = true; - isSetup = false; - } - else - { - ClosePort(); - this.isLastConnected = false; - isConnected = false; - } - } - } - catch - { - isConnected = false; - } - - return isConnected; - } - - // --- public void ChangeSetting(string command, int index) --- - /// - /// Takes a setting command and setting index to update the desired setting in 'settings' at 'index'. - /// - /// A 'string' that will be sent to the machine to change the setting in the command to the desired value. - /// An 'int' that denotes where in 'settings' the new setting value will be saved. - protected void ChangeSetting(string command, int index) - { - isSetup = true; - isUpdatingSetting = true; - - settingIndex = index; - - WriteToSerialClean(CommandConverter(command)); - - updateAck.Reset(); - - updateAck.WaitOne(1000); - - isSetup = false; - isUpdatingSetting = false; - } - - // --- public void ChangeSetting(string command) --- - /// - /// Sends a setting change command to the machine. - /// - /// A 'string' that will be sent to the machine to change the setting in the command to the desired value. - protected void ChangeSetting(string command) - { - isSetup = true; - isUpdatingSetting = true; - - WriteToSerial(CommandConverter(command)); - - updateAck.Reset(); - - if (updateAck.WaitOne(2000)) - { - SendData(this, new MessageEvent("SetUp")); - } - - isSetup = false; - isUpdatingSetting = false; - } - - // --- public void InitializeTimeouts() --- - /// - /// Takes the currently saved timeout settings and initializes the timeouts to more expected timeouts. - /// - protected void InitializeTimeouts() - { - // Use the DmOff, TaON, TaOff, and DnOn settings to get an idea of how long the machine will wait for a cycle. - mtTimeout = TimeSpan.FromSeconds(settings[55] + settings[56] + settings[57] + settings[58]); - - // Use the max length of the machine divided by home speed of five inches per second multiplied by two, for acceleration and deceleration times, to wait for home. - homeTimeout = TimeSpan.FromSeconds((settings[9] / 5) * 2); - } - - // --- public LoadLight(bool on) --- - /// - /// This function is used to write to the serial port to have the machine turn on the load signal light according to the 'bool' input. - /// - /// A 'bool' that denotes whether to turn on or turn off the load signal light on the machine. - protected void LoadLight(bool on) - { - switch (on) - { - case true: - WriteToSerialClean(loadSignalOn); - break; - case false: - WriteToSerialClean(loadSignalOff); - break; - } - } - - // --- public void ClearWriteBuffer(bool all) --- - /// - /// Some acks from the machine don't always make it back to the system, so 'writeBuffer' needs to be cleared so that other commands can be sent down. - /// - /// A 'bool' that denotes whether to clear out all of the commands in 'writeBuffer', or just the first. - protected void ClearWriteBuffer(bool all) - { - ClearCommand(all); - } - - // --- protected static List> FindConnections() --- - /// - /// Opens each of the available comports at a number of baudrates and checks each for a potential connection to a TigerStop amp. - /// - /// A 'List' of 'KeyValuePair's with comport names as 'string' keys and baudrate 'int' values of potential connections. - protected static List> FindConnections() - { - List> connections = new List>(); - int serial = 0; - int[] baudrates = new int[5] { 9600, 19200, 38400, 57600, 115200 }; - SerialPort searchPort = new SerialPort(); - - searchPort.StopBits = StopBits.One; - searchPort.DataBits = 8; - searchPort.Handshake = Handshake.None; - searchPort.DtrEnable = true; - searchPort.RtsEnable = true; - searchPort.ReadTimeout = 1000; - - foreach (string p in SerialPort.GetPortNames()) - { - searchPort.PortName = p; - - for (int i = 0; i < baudrates.Length; i++) - { - searchPort.BaudRate = baudrates[i]; - - try - { - searchPort.Open(); - - searchPort.Write(serialQueryCommand, 0, serialQueryCommand.Length); - - Thread.Sleep(100); - - // A response as a readable integer is enough to believe a TigerStop amp is on the other end of the connection. - if (int.TryParse(new string(searchPort.ReadLine().Where(char.IsDigit).ToArray()), out serial)) - { - connections.Add(new KeyValuePair(p, baudrates[i])); - searchPort.Close(); - } - else - { - searchPort.Close(); - } - } - // Expect to catch a lot of timeout exceptions. - catch - { - searchPort.Close(); - } - } - } - - return connections; - } - - // --- private void ChangeFlags(bool change) --- - /// - /// Changes all of the 'bool' flags to the value of 'change'. - /// - /// A 'bool' representing the value to change all of the flags to. - private void ChangeFlags(bool change) - { - isMoving = change; - isCyclingTool = change; - isScanning = change; - isMoveStart = change; - isCycleStart = change; - isDmOff = change; - isDmOn = change; - } - } -} \ No newline at end of file diff --git a/TigerStopSDKExample/TigerStopSDKTest/TigerStop_IO.cs b/TigerStopSDKExample/TigerStopSDKTest/TigerStop_IO.cs deleted file mode 100644 index 1a137f3..0000000 --- a/TigerStopSDKExample/TigerStopSDKTest/TigerStop_IO.cs +++ /dev/null @@ -1,1518 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Threading; - -namespace TigerStopSDKExample -{ - public class TigerStop_IO : TigerStop_Com - { - // = = = AUTORESET EVENTS = = = - private AutoResetEvent ackEvent = new AutoResetEvent(false); - private AutoResetEvent movingEvent = new AutoResetEvent(false); - private AutoResetEvent cyclingEvent = new AutoResetEvent(false); - private AutoResetEvent deadmanOffEvent = new AutoResetEvent(false); - private AutoResetEvent deadmanOnEvent = new AutoResetEvent(false); - private AutoResetEvent homingEvent = new AutoResetEvent(false); - - // = = = EVENTS = = = - public EventHandler IO_Error; - - // = = = FIELDS = = = - private string ackMessage; - private List settingNames = new List - { - "P Gain", "I Gain", "D Gain", "Vel In", "Vel Out", "Acc In", "Acc Out", "Dec In", "Dec Out", "Lim Max", // 1 - 10 - "Lim Min", "IOP Baud", "Scale", "Dither", "Debug", "Clamp 1", "Clamp 2", "Position", "PrtType", "PrtBaud", // 11 - 20 - "CommBaud", "JetOffset", "Kerf", "Head Cut", "Tail Cut", "Outfeed", "Backoff", "Retract", "Ret Offset", "Feed Haz", // 21 - 30 - "Load Off", "Max SPL", "Opti Score", "Opti Time", "Opti Pen", "Move Delay", "Lash", "SM Table", "UnLoad", "Motor Type", // 31 - 40 - "ME Zero", "Language", "Con Sleep", "MMEnable", "Contrast", "Prt Names", "Prt Cuts", "Ret Type", "IOReadMask", "IOWritMask", // 41 - 50 - "PresetType", "Waste First", "ConPW", "ClampOn_D", "SawOn_D", "DMOff_TO", "TAOn_TO", "TAOff_TO", "DMOn_TO", "ClampOff_D", // 51 - 60 - "SawCyc_D", "RSD_Rdy_TO", "Timer10", "ComPanel", "CrossCal", "CrossAlarm", "HandyOpt", "Waste", "DropBox", "Defect", // 61 - 70 - "L Range", "L Count", "Laser ME", "L Limit", "L Ref", "Cld Sty", "S cpi", "L cpi", "Pnt Dly", "TH LV M", // 71 - 80 - "TH LV B", "Can Dly", "Inf", "Pet Clear", "Pet Dim", "Banana1", "Banana2", "SC Rel", "TH HV M", "TH HV B", // 81 - 90 - "StallMEP", "StallMES", "Run MEP", "Run MES", "RateGain", "RateThes", "SetPntSys", "Timer", "FindVel", "FindErr", // 91 - 100 - "DrillMode", "MMRatio", "IR Type", "SI_RES3", "Mtr CPR", "Mtr Poles", "TTenable", "DrvAccLmt", "TM Offset", "TM Enable", // 101 - 110 - "Fast Cal", "Fast Unit", "QFilter", "DFilter", "EFilter", "Brk TYPE", "PF_Up_Pos", "Rev Jog", "VJ Font", "Crayon", // 111 - 120 - "UV_IR_Off", "PF_Offset", "D Margin" // 121 - 123 - }; - - // = = = GETTERS/SETTERS = = = - public string AckMessage - { - get - { - return ackMessage; - } - private set - { - this.ackMessage = value; - } - } - - public List SettingNames - { - get - { - return settingNames; - } - private set - { - this.settingNames = value; - } - } - - // = = = CONSTRUCTORS = = = - public TigerStop_IO(int baud, string comPort) : base(baud, comPort) - { - OpenPort(); - - if (CheckConnection()) - { - SendData += Com_MessageReceived; - } - } - - // = = = EVENTS = = = - - // --- private void Com_MessageReceived(object sender, EventArgs e) --- - /// - /// This event listens for messages from TigerStop_Com that can be used by TigerStop_IO. - /// - /// - /// - private void Com_MessageReceived(object sender, EventArgs e) - { - var ack = e as MessageEvent; - - // Copy the message for the waiting event to look at. - AckMessage = ack.Message; - - // The system needs to look out for various kinds of acks; a moving ack, "MGF", a cycling ack, "MTF", two dead man acks "DMS" and "DMF", or a general ack. - if (ack.Message.Contains("MGF")) - { - movingEvent.Set(); - } - else if (ack.Message.Contains("MTF")) - { - cyclingEvent.Set(); - } - else if (ack.Message.Contains("DMS")) - { - deadmanOffEvent.Set(); - } - else if (ack.Message.Contains("DMF")) - { - deadmanOnEvent.Set(); - } - else if (ack.Message.Contains("MHF")) - { - homingEvent.Set(); - } - // Otherwise, it was a general ack and release the waiting event. - else - { - ackEvent.Set(); - } - } - - // = = = METHODS = = = - - // --- public bool MoveTo(double position) --- - /// - /// Sends a move command to the machine to move to the desired position waiting for the move to finish. - /// - /// A 'double' denoting the desired position to move to. - /// A 'bool' that signals whether the move command was successfully completed. - public bool MoveTo(double position) - { - bool isDone = false; - - base.QueueCommand("mg" + position); - - movingEvent.Reset(); - movingEvent.WaitOne(); - - isDone = true; - - return isDone; - } - - // --- public bool MoveTo(double position, int timeout) --- - /// - /// Sends a move command to the machine to move to the desired position, waiting for the move to finish or for the given timeout duration before returning. - /// - /// A 'double' denoting the desired position to move to. - /// An 'int' denotes the number of milliseconds to timeout on. - /// A 'bool' that signals whether the move command was successfully completed. - public bool MoveTo(double position, int timeout) - { - bool isDone = false; - - base.QueueCommand("mg" + position); - - movingEvent.Reset(); - if (!movingEvent.WaitOne(timeout)) - { - isDone = false; - } - else - { - isDone = true; - } - - return isDone; - } - - // --- public bool MoveTo(double position, ref BackgroundWorker b) --- - /// - /// Sends a move command to the machine to move to the desired position waiting for the move to finish. - /// - /// A 'double' denoting the desired position to move to. - /// A 'BackgroundWorker' that is running MoveTo() that may signal an impending cancellation. - /// A 'bool' that signals whether the move command was successfully completed. - public bool MoveTo(double position, ref BackgroundWorker b) - { - bool isDone = false; - - base.QueueCommand("mg" + position); - - if (b.CancellationPending) - { - return false; - } - - movingEvent.Reset(); - movingEvent.WaitOne(); - - if (b.CancellationPending) - { - return false; - } - - isDone = true; - - return isDone; - } - - // --- public bool MoveTo(double position, int timeout, ref BackgroundWorker b) --- - /// - /// Sends a move command to the machine to move to the desired position, waiting for the move to finish or for the given timeout duration before returning. - /// - /// A 'double' denoting the desired position to move to. - /// An 'int' denotes the number of milliseconds to timeout on. - /// A 'BackgroundWorker' that is running MoveTo() that may signal an impending cancellation. - /// A 'bool' that signals whether the move command was successfully completed. - public bool MoveTo(double position, int timeout, ref BackgroundWorker b) - { - bool isDone = false; - - base.QueueCommand("mg" + position); - - if (b.CancellationPending) - { - return false; - } - - movingEvent.Reset(); - if (!movingEvent.WaitOne(timeout)) - { - isDone = false; - } - else - { - isDone = true; - } - - if (b.CancellationPending) - { - return false; - } - - return isDone; - } - - // --- public bool MoveTo(double position) --- - /// - /// Sends a move command to the machine to move to the desired position waiting for the move to finish. - /// - /// A 'string' denoting the desired position to move to. - /// A 'bool' that signals whether the move command was successfully completed. - public bool MoveTo(string position) - { - bool isDone = false; - - base.QueueCommand("mg" + position); - - movingEvent.Reset(); - movingEvent.WaitOne(); - - isDone = true; - - return isDone; - } - - // --- public bool MoveTo(double position, int timeout) --- - /// - /// Sends a move command to the machine to move to the desired position, waiting for the move to finish or for the given timeout duration before returning. - /// - /// A 'string' denoting the desired position to move to. - /// An 'int' that denotes the number of milliseconds to timeout on. - /// A 'bool' that signals whether the move command was successfully completed. - public bool MoveTo(string position, int timeout) - { - bool isDone = false; - - base.QueueCommand("mg" + position); - - movingEvent.Reset(); - if (!movingEvent.WaitOne(timeout)) - { - isDone = false; - } - else - { - isDone = true; - } - - return isDone; - } - - // --- public bool MoveTo(string position, ref BackgroundWorker b) --- - /// - /// Sends a move command to the machine to move to the desired position waiting for the move to finish. - /// - /// A 'string' denoting the desired position to move to. - /// A 'BackgroundWorker' that is running MoveTo() that may signal an impending cancellation. - /// A 'bool' that signals whether the move command was successfully completed. - public bool MoveTo(string position, ref BackgroundWorker b) - { - bool isDone = false; - - base.QueueCommand("mg" + position); - - if (b.CancellationPending) - { - return false; - } - - movingEvent.Reset(); - movingEvent.WaitOne(); - - if (b.CancellationPending) - { - return false; - } - - isDone = true; - - return isDone; - } - - // --- public bool MoveTo(string position, int timeout, ref BackgroundWorker b) --- - /// - /// Sends a move command to the machine to move to the desired position, waiting for the move to finish or for the given timeout duration before returning. - /// - /// A 'string' denoting the desired position to move to. - /// An 'int' denotes the number of milliseconds to timeout on. - /// A 'BackgroundWorker' that is running MoveTo() that may signal an impending cancellation. - /// A 'bool' that signals whether the move command was successfully completed. - public bool MoveTo(string position, int timeout, ref BackgroundWorker b) - { - bool isDone = false; - - base.QueueCommand("mg" + position); - - if (b.CancellationPending) - { - return false; - } - - movingEvent.Reset(); - if (!movingEvent.WaitOne(timeout)) - { - isDone = false; - } - else - { - isDone = true; - } - - if (b.CancellationPending) - { - return false; - } - - return isDone; - } - - // --- public void HomeDevice() --- - /// - /// Runs the home routine to return the machine to the home position. - /// - public void HomeDevice() - { - homingEvent.Reset(); - - base.QueueCommand("mh"); - - homingEvent.WaitOne(base.TimeOut); - } - - // --- public void CycleTool() --- - /// - /// Sends a cycle tool command to the machine waiting until the tool cycle is finished. - /// - /// A 'bool' that signals whether the cycle command was successfully completed. - public bool CycleTool() - { - bool isDone = false; - - base.QueueCommand("mt"); - - cyclingEvent.Reset(); - cyclingEvent.WaitOne(); - - isDone = true; - - return isDone; - } - - // --- public void CycleTool() --- - /// - /// Sends a cycle tool command to the machine, waiting for the tool cycle to finish or for the given timeout duration before finishing. - /// - /// An 'int' that denotes the number of milliseconds to timeout on. - /// A 'bool' that signals whether the cycle command was successfully completed. - public bool CycleTool(int timeout) - { - bool isDone = false; - - base.QueueCommand("mt"); - - cyclingEvent.Reset(); - if (!cyclingEvent.WaitOne((int)timeout)) - { - isDone = false; - } - else - { - isDone = true; - } - - - return isDone; - } - - // --- public bool CycleTool(ref BackgroundWorker b) --- - /// - /// Sends a cycle tool command to the machine waiting until the tool cycle is finished. - /// - /// A 'BackgroundWorker' that is running CycleTool() that may signal an impending cancellation. - /// A 'bool' that signals whether the cycle command was successfully completed. - public bool CycleTool(ref BackgroundWorker b) - { - bool isDone = false; - - base.QueueCommand("mt"); - - if (b.CancellationPending) - { - return false; - } - - cyclingEvent.Reset(); - cyclingEvent.WaitOne(); - - if (b.CancellationPending) - { - return false; - } - - isDone = true; - - return isDone; - } - - // --- public bool CycleTool(ref BackgroundWorker b) --- - /// - /// Sends a cycle tool command to the machine waiting until the tool cycle is finished. - /// - /// An 'int' that denotes the number of milliseconds to timeout on. - /// A 'BackgroundWorker' that is running CycleTool() that may signal an impending cancellation. - /// A 'bool' that signals whether the cycle command was successfully completed. - public bool CycleTool(int timeout, ref BackgroundWorker b) - { - bool isDone = false; - - base.QueueCommand("mt"); - - if (b.CancellationPending) - { - return false; - } - - cyclingEvent.Reset(); - if (!cyclingEvent.WaitOne((int)timeout)) - { - isDone = false; - } - else - { - isDone = true; - } - - if (b.CancellationPending) - { - return false; - } - - - return isDone; - } - - // --- public string GetSetting(int settingIndex) --- - /// - /// Returns the value of a desired setting at 'settingIndex'. - /// - /// An 'int' that relates to the index of the desired setting to retrieve. - /// A 'string' containing the value of the setting at 'settingIndex' or 'null' if a response wasn't received in an expected time frame. - public string GetSetting(int settingIndex) - { - string settingValue = null; - - base.QueueCommand("d" + settingIndex); - - ackEvent.Reset(); - - if (ackEvent.WaitOne(2000)) - { - settingValue = AckMessage; - } - - return settingValue; - } - - // --- public string GetSetting(string settingName) --- - /// - /// Returns the value of the desired setting whose name matches 'settingName'. - /// - /// A 'string' that matches the name of the desired setting to retrieve. - /// A 'string' containing the value of the setting whose name matches 'settingName' or 'null' if a response wasn't received in an expected time frame. - public string GetSetting(string settingName) - { - string settingValue = null; - - if (settingNames.Contains(settingName)) - { - base.QueueCommand("d" + (settingNames.IndexOf(settingName) + 1)); - - ackEvent.Reset(); - - if (ackEvent.WaitOne(2000)) - { - settingValue = AckMessage; - } - } - - return settingValue; - } - - // --- public string GetSetting(int settingIndex, int timeout) --- - /// - /// Returns the value of the desired setting at 'settingIndex', waiting for 'timeout's duration for a response. - /// - /// An 'int' that relates to the index of the desired setting to retrieve. - /// An 'int' representing the desired timeout value in milliseconds the function will wait for a response. - /// A 'string' containing the value of the setting at 'settingIndex' or 'null' if a response was not received in the expected time frame of 'timeout'. - public string GetSetting(int settingIndex, int timeout) - { - string settingValue = null; - - base.QueueCommand("d" + settingIndex); - - ackEvent.Reset(); - if (ackEvent.WaitOne(timeout)) - { - settingValue = AckMessage; - } - - return settingValue; - } - - // --- public string GetSetting(string settingName, int timeout) --- - /// - /// Returns the value of the setting whose name matches 'settingName', waiting for 'timeout's duration for a response. - /// - /// A 'string' that matches the name of the desired setting to retrieve. - /// An 'int' representing the desired timeout value in milliseconds the function will wait for a response. - /// A 'string' containing the value of the setting whose name matches 'settingName' or 'null' if a response wasn't received in the expected time frame of 'timeout'. - public string GetSetting(string settingName, int timeout) - { - string settingValue = null; - - if (settingNames.Contains(settingName)) - { - base.QueueCommand("d" + settingNames.IndexOf(settingName)); - - ackEvent.Reset(); - - if (ackEvent.WaitOne(timeout)) - { - settingValue = AckMessage; - } - } - - return settingValue; - } - - // --- public void Stop() --- - /// - /// Sends a stop command to the machine, ending any action its currently in the middle of. - /// - public void Stop() - { - base.QueueCommand("ms"); - } - - // --- public void EmergencyStop() --- - /// - /// Sends an emergency stop command to the machine, ending any action its currently in the middle of and disabling the machine's drive. - /// - public void EmergencyStop() - { - base.QueueCommand("me"); - } - - // --- public static Dictionary[] FindConnections() --- - /// - /// Searches through all available com ports and baud rates to find potential connections by asking for serial numbers from machines that - /// might be on the other end of the connection. - /// - /// A 'Dictionary' where a 'string' comport name key has an 'int' baud rate value. - public static List> Connections() - { - return FindConnections(); - } - - // --- public string[] GetAnalog() --- - /// - /// Returns the analog values tracked by the amp. - /// - /// A 'string' array of 5 entries that hold each of the 5 analog values tracked by the amp. - public string[] GetAnalog() - { - string[] values = new string[5]; - - base.QueueCommand("a"); - - for (int i = 0; i < 5; i++) - { - ackEvent.Reset(); - - if (ackEvent.WaitOne(500)) - { - values[i] = AckMessage; - } - } - - return values; - } - - // --- public string GetAnalog(int subCommand) --- - /// - /// Returns the analog value related to the analog subcommand, 1-5, 'subCommand' matches. - /// - /// An 'int' that represents the desired subcommand value to retrieve. - /// A 'string' that represents the returned value of the subcommand at 'subCommand' or 'null' if a response is not received in an expected time frame. - public string GetAnalog(int subCommand) - { - string analogValue = null; - - base.QueueCommand("a" + subCommand); - - ackEvent.Reset(); - - if (ackEvent.WaitOne(2000)) - { - analogValue = AckMessage; - } - - return analogValue; - } - - // --- public string GetAnalog(int subCommand, int timeout) --- - /// - /// Returns the analog value related to the analog subcommand, 1-5, 'subCommand' matches. Waiting for the duration of 'timeout' for a response. - /// - /// An 'int' that represents the desired subcommand value to retrieve. - /// An 'int' representing the desired timeout value in milliseconds the function will wait for a response. - /// A 'string' that represents the returned value of the subcommand at 'subCommand' or 'null' if a response is not received in the expected time frame of 'timeout'. - public string GetAnalog(int subCommand, int timeout) - { - string analogValue = null; - - base.QueueCommand("a" + subCommand); - - ackEvent.Reset(); - - if (ackEvent.WaitOne(timeout)) - { - analogValue = AckMessage; - } - - return analogValue; - } - - // --- public string GetAnalog(string subCommand) --- - /// - /// Returns the analog value related to the analog subcommand, 1-5, 'subCommand' matches. - /// - /// An 'string' that represents the desired subcommand value to retrieve. - /// A 'string' that represents the returned value of the subcommand at 'subCommand' or 'null' if a response is not received in an expected time frame. - public string GetAnalog(string subCommand) - { - string analogValue = null; - - base.QueueCommand("a" + subCommand); - - ackEvent.Reset(); - - if (ackEvent.WaitOne(2000)) - { - analogValue = AckMessage; - } - - return analogValue; - } - - // --- public string GetAnalog(string subCommand, int timeout) --- - /// - /// Returns the analog value related to the analog subcommand, 1-5, 'subCommand' matches. Waiting for the duration of 'timeout' for a response. - /// - /// An 'string' that represents the desired subcommand value to retrieve. - /// An 'int' representing the desired timeout value in milliseconds the function will wait for a response. - /// A 'string' that represents the returned value of the subcommand at 'subCommand' or 'null' if a response is not received in the expected time frame of 'timeout'. - public string GetAnalog(string subCommand, int timeout) - { - string analogValue = null; - - base.QueueCommand("a" + subCommand); - - ackEvent.Reset(); - - if (ackEvent.WaitOne(timeout)) - { - analogValue = AckMessage; - } - - return analogValue; - } - - // --- public string[] GetLog() --- - /// - /// Returns the 20 most recent command and error log entries. - /// - /// A 'string' array of 20 entries that hold each of the 20 command and error log entries. - public string[] GetLog() - { - string[] log = new string[20]; - - base.QueueCommand("b"); - - for (int i = 0; i < 20; i++) - { - ackEvent.Reset(); - - if (ackEvent.WaitOne(500)) - { - log[i] = AckMessage; - } - } - - return log; - } - - // --- public string[] GetLog(int logIndex) --- - /// - /// Returns the 20 most recent command and error log entries starting at 'logIndex' and going back. - /// - /// An 'int' that designates the log index to start from. - /// A 'string' array of 20 entries that hold each of the command and error log entries starting at 'logIndex'. - public string[] GetLog(int logIndex) - { - string[] log = new string[20]; - - base.QueueCommand("b" + logIndex); - - for (int i = 0; i < 20; i++) - { - ackEvent.Reset(); - - if (ackEvent.WaitOne(500)) - { - log[i] = AckMessage; - } - } - - return log; - } - - // --- public string[] GetLog(string logIndex) --- - /// - /// Returns the 20 most recent command and error log entries starting at 'logIndex' and going back. - /// - /// An 'string' that designates the log index to start from. - /// A 'string' array of 20 entries that hold each of the command and error log entries starting at 'logIndex'. - public string[] GetLog(string logIndex) - { - string[] log = new string[20]; - - base.QueueCommand("b" + logIndex); - - for (int i = 0; i < 20; i++) - { - ackEvent.Reset(); - - if (ackEvent.WaitOne(500)) - { - log[i] = AckMessage; - } - } - - return log; - } - - // --- public string[] GetCounters() --- - /// - /// Returns the 25 counter values tracked by the amp. - /// - /// A 'string' array of 25 entries that hold each of the 25 counter values tracked by the amp. - public string[] GetCounter() - { - string[] counters = new string[25]; - - base.QueueCommand("c"); - - for (int i = 0; i < 25; i++) - { - ackEvent.Reset(); - - if (ackEvent.WaitOne(500)) - { - counters[i] = AckMessage; - } - } - - return counters; - } - - // --- public string GetCounter(int subCommand) --- - /// - /// Returns the counter value related to the counter subcommand, 1-25, 'subCommand' matches. - /// - /// An 'int' that represents the desired subcommand value to retrieve. - /// A 'string' that represents the returned value of the subcommand at 'subCommand' or 'null' if a response is not received in an expected time frame. - public string GetCounter(int subCommand) - { - string counterValue = null; - - base.QueueCommand("c" + subCommand); - - ackEvent.Reset(); - - if (ackEvent.WaitOne(2000)) - { - counterValue = AckMessage; - } - - return counterValue; - } - - // --- public string GetCounter(int subCommand, int timeout) --- - /// - /// Returns the counter value related to the counter subcommand, 1-25, 'subCommand' matches. Waiting for the duration of 'timeout' for a response. - /// - /// An 'int' that represents the desired subcommand value to retrieve. - /// An 'int' representing the desired timeout value in milliseconds the function will wait for a response. - /// A 'string' that represents the returned value of the subcommand at 'subCommand' or 'null' if a response is not received in the expected time frame of 'timeout'. - public string GetCounter(int subCommand, int timeout) - { - string counterValue = null; - - base.QueueCommand("c" + subCommand); - - ackEvent.Reset(); - - if (ackEvent.WaitOne(timeout)) - { - counterValue = AckMessage; - } - - return counterValue; - } - - // --- public string GetCounter(string subCommand) --- - /// - /// Returns the counter value related to the counter subcommand, 1-25, 'subCommand' matches. - /// - /// A 'string' that represents the desired subcommand value to retrieve. - /// A 'string' that represents the returned value of the subcommand at 'subCommand' or 'null' if a response is not received in an expected time frame. - public string GetCounter(string subCommand) - { - string counterValue = null; - - base.QueueCommand("c" + subCommand); - - ackEvent.Reset(); - - if (ackEvent.WaitOne(2000)) - { - counterValue = AckMessage; - } - - return counterValue; - } - - // --- public string GetCounter(string subCommand, int timeout) --- - /// - /// Returns the counter value related to the counter subcommand, 1-25, 'subCommand' matches. Waiting for the duration of 'timeout' for a response. - /// - /// A 'string' that represents the desired subcommand value to retrieve. - /// An 'int' representing the desired timeout value in milliseconds the function will wait for a response. - /// A 'string' that represents the returned value of the subcommand at 'subCommand' or 'null' if a response is not received in the expected time frame of 'timeout'. - public string GetCounter(string subCommand, int timeout) - { - string counterValue = null; - - base.QueueCommand("c" + subCommand); - - ackEvent.Reset(); - - if (ackEvent.WaitOne(timeout)) - { - counterValue = AckMessage; - } - - return counterValue; - } - - // --- public string GetPosition() --- - /// - /// Returns the current position of the machine. - /// - /// A 'double' that represents the returned current position from the machine or 'NaN' if no response is received in an expected time frame. - public double GetPosition() - { - double pos = 0.00; - - base.QueueCommand("p"); - - ackEvent.Reset(); - - if (ackEvent.WaitOne(2000)) - { - pos = Convert.ToDouble(AckMessage.TrimEnd('\r')); - } - else - { - pos = double.NaN; - } - - return pos; - } - - // --- public double GetPosition(int timeout) --- - /// - /// Returns the current position of the machine, waiting for the duration of 'timeout' for a response. - /// - /// An 'int' that representing the desired timeout value in milliseconds the function will wait for a response. - /// A 'double' that represents the returned current position from the machine or 'NaN' if no response is received in the expected time frame of 'timeout'. - public double GetPosition(int timeout) - { - double pos = 0.00; - - base.QueueCommand("p"); - - ackEvent.Reset(); - - if (ackEvent.WaitOne(timeout)) - { - pos = Convert.ToDouble(AckMessage.TrimEnd('\r')); - } - else - { - pos = double.NaN; - } - - return pos; - } - - // --- public int GetStatus() --- - /// - /// Returns the current status of the machine. - /// - /// An 'int' that represents the returned status of the machine or '-1' if no response is received in an expected time frame. - public int GetStatus() - { - int state = -1; - - base.QueueCommand("s"); - - ackEvent.Reset(); - - if (ackEvent.WaitOne(2000)) - { - state = Convert.ToInt32(AckMessage); - } - - return state; - } - - // --- public int GetStatus(int timeout) --- - /// - /// Returns the current status of the machine, waiting for the duration of 'timeout' for a response. - /// - /// An 'int' representing the desired timeout value in milliseconds the function will wait for a response. - /// An 'int' that represents the returned status of the machine or '-1' if no response is received in the expected time frame of 'timeout'. - public int GetStatus(int timeout) - { - int state = -1; - - base.QueueCommand("s"); - - ackEvent.Reset(); - - if (ackEvent.WaitOne(timeout)) - { - state = Convert.ToInt32(AckMessage); - } - - return state; - } - - // --- public void DriveSleep() --- - /// - /// Sends the drive sleep command to turn off the amp drive. - /// - public void DriveSleep() - { - base.QueueCommand("f6"); - } - - // --- public void DriveWake() --- - /// - /// Sends the wake up command to turn on the amp drive. - /// - public void DriveWake() - { - base.QueueCommand("f7"); - } - - // --- public void SendCommand(string command) --- - /// - /// Sends 'command' to the machine to execute. - /// - /// A 'string' representing the command being sent to the machine to execute. - public void SendCommand(string command) - { - base.QueueCommand(command); - } - - // --- public bool UpdateSetting(string settingName, int newValue) --- - /// - /// Changes the setting value of 'settingName' to 'newValue'. - /// - /// A 'string' the represents the name of the setting to change. - /// A 'double' that represents the new value 'settingName' is being changed to. - /// A 'bool' that signals whether the setting was successfully changed. - public bool UpdateSetting(string settingName, double newValue) - { - bool isChanged = false; - - base.ChangeSetting("d" + (settingNames.IndexOf(settingName) + 1) + " " + newValue); - - ackEvent.Reset(); - ackEvent.Set(); - - if (AckMessage == "SetUp") - { - isChanged = true; - } - else - { - isChanged = false; - } - - return isChanged; - } - - // --- public bool UpdateSetting(string settingName, string newValue) --- - /// - /// Changes the setting value of 'settingName' to 'newValue'. - /// - /// A 'string' the represents the name of the setting to change. - /// An 'string' that represents the new value 'settingName' is being changed to. - /// A 'bool' that signals whether the setting was successfully changed. - public bool UpdateSetting(string settingName, string newValue) - { - bool isChanged = false; - - base.ChangeSetting("d" + (settingNames.IndexOf(settingName) + 1) + " " + newValue); - - ackEvent.Reset(); - ackEvent.Set(); - - if (AckMessage == "SetUp") - { - isChanged = true; - } - else - { - isChanged = false; - } - - return isChanged; - } - - // --- public bool UpdateSetting(int settingIndex, int newValue) --- - /// - /// Changes the setting value at 'settingIndex' to 'newValue'. - /// - /// An 'int' the represents the index of the setting to change. - /// An 'int' that represents the new value the setting is being changed to. - /// A 'bool' that signals whether the setting was successfully changed. - public bool UpdateSetting(int settingIndex, double newValue) - { - bool isChanged = false; - - base.ChangeSetting("d" + settingIndex + " " + newValue); - - ackEvent.Reset(); - ackEvent.Set(); - - if (AckMessage == "SetUp") - { - isChanged = true; - } - else - { - isChanged = false; - } - - return isChanged; - } - - // --- public bool UpdateSetting(int settingIndex, string newValue) --- - /// - /// Changes the setting value at 'settingIndex' to 'newValue'. - /// - /// An 'int' the represents the index of the setting to change. - /// A 'double' that represents the new value the setting is being changed to. - /// A 'bool' that signals whether the setting was successfully changed. - public bool UpdateSetting(int settingIndex, string newValue) - { - bool isChanged = false; - - base.ChangeSetting("d" + settingIndex + " " + newValue); - - ackEvent.Reset(); - ackEvent.Set(); - - if (AckMessage == "SetUp") - { - isChanged = true; - } - else - { - isChanged = false; - } - - return isChanged; - } - - // --- public bool DetectToolCycle() --- - /// - /// Listens for the expected sequence of acknowledgments from the machine, making sure that the deadman off signal followed by the deadman on signal - /// is received by the system, meaning a full tool cycle occurred. - /// - /// A 'bool' denoting whether a deadman off and on signal was received in sequence, defining a full tool cycle has occurred. - public bool DetectToolCycle() - { - bool cycled = false; - - deadmanOffEvent.Reset(); - deadmanOffEvent.WaitOne(-1); - - deadmanOnEvent.Reset(); - deadmanOnEvent.WaitOne(-1); - - return cycled; - } - - // --- public bool DetectToolCycle(int timeout) --- - /// - /// Listens for the expected sequence of acknowledgments from the machine, make sure that the deadman off signal followed by the deadman on signal - /// us received by the system, meaning a full tool cycle occurred. Each of the waiting events will wait for the duration of 'timeout' for a response. - /// - /// An 'int' representing the desired timeout value in milliseconds the function will wait for a response. - /// A 'bool' denoting whether a deadman off and on signal was received in sequence, defining a full tool cycle has occurred. - public bool DetectToolCycle(int timeout) - { - bool isDmOff = false; - bool isDmOn = false; - bool cycled = false; - - deadmanOffEvent.Reset(); - - if (deadmanOffEvent.WaitOne(timeout)) - { - isDmOff = true; - } - - deadmanOnEvent.Reset(); - - if (deadmanOnEvent.WaitOne(timeout)) - { - isDmOn = true; - } - - if (isDmOff && isDmOn) - { - cycled = true; - } - - return cycled; - } - - // --- public bool DetectToolCycle(int timeout1, int timeout 2) --- - /// - /// Listens for the expected sequence of acknowledgments from the machine, make sure that the deadman off signal followed by the deadman on signal - /// us received by the system, meaning a full tool cycle occurred. The first waiting event will wait for the duration of 'timeout1' for a response, - /// and the second waiting event will wait for the duration of 'timeout2' for a response. - /// - /// An 'int' representing the desired timeout value in milliseconds the first event will wait for a response. - /// An 'int' representing the desired timeout value in milliseconds the second event will wait for a response. - /// A 'bool' denoting whether a deadman off and on signal was received in sequence, defining a full tool cycle has occurred. - public bool DetectToolCycle(int timeout1, int timeout2) - { - bool isDmOff = false; - bool isDmOn = false; - bool cycled = false; - - deadmanOffEvent.Reset(); - - if (deadmanOffEvent.WaitOne(timeout1)) - { - isDmOff = true; - } - - deadmanOnEvent.Reset(); - - if (deadmanOnEvent.WaitOne(timeout2)) - { - isDmOn = true; - } - - if (isDmOff && isDmOn) - { - cycled = true; - } - - return cycled; - } - - // --- public bool DetectToolCycle(ref BacgroundWorker b) --- - /// - /// Listens for the expected sequence of acknowledgments from the machine, make sure that the deadman off signal followed by the deadman on signal - /// us received by the system, meaning a full tool cycle occurred. - /// - /// A 'BackgroundWorker' that is running DetectToolCycle() that may signal an impending cancellation. - /// A 'bool' denoting whether a deadman off and on signal was received in sequence, defining a full tool cycle has occurred. - public bool DetectToolCycle(ref BackgroundWorker b) - { - bool isDmOff = false; - bool isDmOn = false; - bool cycled = false; - - if (b.CancellationPending) - { - return false; - } - - deadmanOffEvent.Reset(); - deadmanOffEvent.WaitOne(-1); - isDmOff = true; - - if (b.CancellationPending) - { - return false; - } - - deadmanOnEvent.Reset(); - deadmanOnEvent.WaitOne(-1); - isDmOn = true; - - if (b.CancellationPending) - { - return false; - } - - if (isDmOff && isDmOn) - { - cycled = true; - } - - return cycled; - } - - // --- public bool DetectToolCycle(int timeout, ref BackgroundWorker b) --- - /// - /// Listens for the expected sequence of acknowledgments from the machine, make sure that the deadman off signal followed by the deadman on signal - /// us received by the system, meaning a full tool cycle occurred. Each of the waiting events will wait for the duration of 'timeout' for a response. - /// - /// An 'int' representing the desired timeout value in milliseconds the function will wait for a response. - /// A 'BackgroundWorker' that is running DetectToolCycle() that may signal an impending cancellation. - /// A 'bool' denoting whether a deadman off and on signal was received in sequence, defining a full tool cycle has occurred. - public bool DetectToolCycle(int timeout, ref BackgroundWorker b) - { - bool isDmOff = false; - bool isDmOn = false; - bool cycled = false; - - if (b.CancellationPending) - { - return false; - } - - deadmanOffEvent.Reset(); - if (deadmanOffEvent.WaitOne(timeout)) - { - isDmOff = true; - } - - if (b.CancellationPending) - { - return false; - } - - deadmanOnEvent.Reset(); - if (deadmanOnEvent.WaitOne(timeout)) - { - isDmOn = true; - } - - if (b.CancellationPending) - { - return false; - } - - if (isDmOff && isDmOn) - { - cycled = true; - } - - return cycled; - } - - // --- public bool DetectToolCycle(int timeout1, int timeout2, ref BackgroundWorker b) --- - /// - /// Listens for the expected sequence of acknowledgments from the machine, make sure that the deadman off signal followed by the deadman on signal - /// us received by the system, meaning a full tool cycle occurred. The first waiting event will wait for the duration of 'timeout1' for a response, - /// and the second waiting event will wait for the duration of 'timeout2' for a response. - /// - /// An 'int' representing the desired timeout value in milliseconds the first event will wait for a response. - /// An 'int' representing the desired timeout value in milliseconds the second event will wait for a response. - /// A 'BackgroundWorker' that is running DetectToolCycle() that may signal an impending cancellation. - /// A 'bool' denoting whether a deadman off and on signal was received in sequence, defining a full tool cycle has occurred. - public bool DetectToolCycle(int timeout1, int timeout2, ref BackgroundWorker b) - { - bool isDmOff = false; - bool isDmOn = false; - bool cycled = false; - - if (b.CancellationPending) - { - return false; - } - - deadmanOffEvent.Reset(); - if (deadmanOffEvent.WaitOne(timeout1)) - { - isDmOff = true; - } - - if (b.CancellationPending) - { - return false; - } - - deadmanOnEvent.Reset(); - if (deadmanOnEvent.WaitOne(timeout2)) - { - isDmOn = true; - } - - if (b.CancellationPending) - { - return false; - } - - if (isDmOff && isDmOn) - { - cycled = true; - } - - return cycled; - } - - // --- public bool IO_Connection(bool onOff) --- - /// - /// Turns the desired IO connection on the IO panel on or off depending on 'onOff'. - /// - /// An 'int' denoting which IO connection, 1 - 12, on the IO panel to change. If 'ioNum' is outside of the range 1 - 12, it is treated as 1. - /// A 'bool' that signals whether to turn the connection on if 'onOff' is 'true' and off if 'onOff' is 'false'. - /// A 'bool' denoting whether an acknowledgment was received for the command. - public bool IO_Connection(int ioNum, bool onOff) - { - bool acknowledged = false; - string mask = string.Empty; - - switch (ioNum) - { - case 1: - mask = "0x001"; - break; - case 2: - mask = "0x002"; - break; - case 3: - mask = "0x004"; - break; - case 4: - mask = "0x008"; - break; - case 5: - mask = "0x010"; - break; - case 6: - mask = "0x020"; - break; - case 7: - mask = "0x040"; - break; - case 8: - mask = "0x080"; - break; - case 9: - mask = "0x100"; - break; - case 10: - mask = "0x200"; - break; - case 11: - mask = "0x400"; - break; - case 12: - mask = "0x800"; - break; - default: - return acknowledged; - } - - if (onOff) - { - base.QueueCommand("ww " + "0xFFF " + mask); - } - else - { - base.QueueCommand("ww " + "0x000 " + mask); - } - - ackEvent.Reset(); - ackEvent.WaitOne(); - - acknowledged = true; - - return acknowledged; - } - - // --- public bool IO_Connection(bool onOff, int timeout) --- - /// - /// Turns the desired IO connection on the IO panel on or off depending on 'onOff', waiting for the duration of 'timeout' for a response. - /// - /// An 'int' denoting which IO connection, 1 - 12, on the IO panel to change. If 'ioNum' is outside of the range 1 - 12, it is treated as 1. - /// A 'bool' that signals whether to turn the connection on if 'onOff' is 'true' and off if 'onOff' is 'false'. - /// An 'int' representing the desired timeout value in milliseconds the event will wait for a response. - /// A 'bool' denoting whether an acknowledgment was received for the command. - public bool IO_Connection(int ioNum, bool onOff, int timeout) - { - bool acknowledged = false; - string mask = string.Empty; - - switch (ioNum) - { - case 1: - mask = "0x001"; - break; - case 2: - mask = "0x002"; - break; - case 3: - mask = "0x004"; - break; - case 4: - mask = "0x008"; - break; - case 5: - mask = "0x010"; - break; - case 6: - mask = "0x020"; - break; - case 7: - mask = "0x040"; - break; - case 8: - mask = "0x080"; - break; - case 9: - mask = "0x100"; - break; - case 10: - mask = "0x200"; - break; - case 11: - mask = "0x400"; - break; - case 12: - mask = "0x800"; - break; - default: - return acknowledged; - } - - if (onOff) - { - base.QueueCommand("ww " + "0xFFF " + mask); - } - else - { - base.QueueCommand("ww " + "0x000 " + mask); - } - - ackEvent.Reset(); - - if (!ackEvent.WaitOne(timeout)) - { - acknowledged = false; - } - else - { - acknowledged = true; - } - - return acknowledged; - } - } -} diff --git a/TigerStopSDKExample/TigerStopSDKTest/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/TigerStopSDKExample/TigerStopSDKTest/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache index 64c3e6cc1af596650c7b8860f0378a0a632e6d20..adb12bfce96c586af628156bcdaa0b0288375db2 100644 GIT binary patch delta 142 zcmca@cFJtSR&I{q{L-T2)R>^nd%4va;k?Ovx$QS=^WJCnk9W3;2`x@7Dvn9c&QH#W zfvHa|$S;lw$xKfz3NFbn2zK#Ca2x|XQ8`JOc`-q$IjM=oshhI|C$gbh<0K);3;-eP BH1_}i delta 101 zcmX?QcH3;jR&I{s{L-T2)R>~pd%4va;k?Ovx$QS=^WJBcC~&rl2`x@7Dvn9c&QH#W efvE?n;7rQQi*ZR!Dox)UDL9c0RkxvpBr^ch$0gVR From 9e982d9b526d3ad2b0874965a3a08bccc747269e Mon Sep 17 00:00:00 2001 From: Christopher Koch Date: Wed, 7 Aug 2019 12:11:57 -0700 Subject: [PATCH 3/3] Added help for minmax and build --- .../TigerStopSDKTest/Program.cs | 7 +++++++ .../bin/Debug/TigerStopAPI.dll | Bin 28160 -> 28672 bytes .../bin/Debug/TigerStopAPI.pdb | Bin 58880 -> 60928 bytes .../bin/Debug/TigerStopSDKExample.exe | Bin 43008 -> 17408 bytes .../bin/Debug/TigerStopSDKExample.pdb | Bin 77312 -> 17920 bytes ...StopSDKExample.csproj.FileListAbsolute.txt | 10 ++++++++++ .../obj/Debug/TigerStopSDKExample.exe | Bin 43008 -> 17408 bytes .../obj/Debug/TigerStopSDKExample.pdb | Bin 77312 -> 17920 bytes 8 files changed, 17 insertions(+) diff --git a/TigerStopSDKExample/TigerStopSDKTest/Program.cs b/TigerStopSDKExample/TigerStopSDKTest/Program.cs index 299c87d..de925db 100644 --- a/TigerStopSDKExample/TigerStopSDKTest/Program.cs +++ b/TigerStopSDKExample/TigerStopSDKTest/Program.cs @@ -171,6 +171,9 @@ public static bool InputHandler() "Home : Homes the machine, returning to the home position.\n" + " - Home | home | HOME | hm | HM \n" + "\n" + + "Min-max : Finds end sensors to determine working length.\n" + + " - FEL | fel | MIN-MAX | min-max | MINMAX | minmax | mm | MM \n" + + "\n" + "Sleep : Sets the drive to sleep.\n" + " - Sleep | sleep | SLEEP | sl | SL \n" + "\n" + @@ -337,6 +340,10 @@ public static bool InputHandler() break; case "FEL": case "fel": + case "Fel": + case "Minmax": + case "Min-Max": + case "Min-max": case "minmax": case "min-max": case "MINMAX": diff --git a/TigerStopSDKExample/TigerStopSDKTest/bin/Debug/TigerStopAPI.dll b/TigerStopSDKExample/TigerStopSDKTest/bin/Debug/TigerStopAPI.dll index 849038ae8c9a13737fa97ba25c22d752b391b524..e98b0a3afb1a22edd611a982c1043847f5757843 100644 GIT binary patch literal 28672 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 literal 28160 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 diff --git a/TigerStopSDKExample/TigerStopSDKTest/bin/Debug/TigerStopAPI.pdb b/TigerStopSDKExample/TigerStopSDKTest/bin/Debug/TigerStopAPI.pdb index a1a3a254570a9dddee153846cc5d714cf8e302ec..48f06c07cf2c779be318d4db6db75c0cbb8c5e3a 100644 GIT binary patch literal 60928 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 EZvx>)C;$Ke literal 43008 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

|S0eW~*Bb#R+qWvBlA8e*l-m&=pT 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 diff --git a/TigerStopSDKExample/TigerStopSDKTest/obj/Debug/TigerStopSDKExample.csproj.FileListAbsolute.txt b/TigerStopSDKExample/TigerStopSDKTest/obj/Debug/TigerStopSDKExample.csproj.FileListAbsolute.txt index 59f4386..9045c7c 100644 --- a/TigerStopSDKExample/TigerStopSDKTest/obj/Debug/TigerStopSDKExample.csproj.FileListAbsolute.txt +++ b/TigerStopSDKExample/TigerStopSDKTest/obj/Debug/TigerStopSDKExample.csproj.FileListAbsolute.txt @@ -16,3 +16,13 @@ C:\Users\jshoup\Documents\OpenSource Gits\SDKExGit\TigerStopSDKExample\TigerStop C:\Users\jshoup\Documents\OpenSource Gits\SDKExGit\TigerStopSDKExample\TigerStopSDKTest\bin\Debug\TigerStopSDKExample.pdb C:\Users\jshoup\Documents\OpenSource Gits\SDKExGit\TigerStopSDKExample\TigerStopSDKTest\bin\Debug\TigerStopAPI.pdb C:\Users\jshoup\Documents\OpenSource Gits\SDKExGit\TigerStopSDKExample\TigerStopSDKTest\obj\Debug\TigerStopSDKExample.csprojResolveAssemblyReference.cache +C:\Users\ckoch\Source\Repos\TigerStopSDK-Example\TigerStopSDKExample\TigerStopSDKTest\bin\Debug\TigerStopSDKExample.exe.config +C:\Users\ckoch\Source\Repos\TigerStopSDK-Example\TigerStopSDKExample\TigerStopSDKTest\bin\Debug\TigerStopSDKExample.exe +C:\Users\ckoch\Source\Repos\TigerStopSDK-Example\TigerStopSDKExample\TigerStopSDKTest\bin\Debug\TigerStopSDKExample.pdb +C:\Users\ckoch\Source\Repos\TigerStopSDK-Example\TigerStopSDKExample\TigerStopSDKTest\bin\Debug\TigerStopAPI.dll +C:\Users\ckoch\Source\Repos\TigerStopSDK-Example\TigerStopSDKExample\TigerStopSDKTest\bin\Debug\TigerStopAPI.pdb +C:\Users\ckoch\Source\Repos\TigerStopSDK-Example\TigerStopSDKExample\TigerStopSDKTest\obj\Debug\TigerStopSDKExample.csprojAssemblyReference.cache +C:\Users\ckoch\Source\Repos\TigerStopSDK-Example\TigerStopSDKExample\TigerStopSDKTest\obj\Debug\TigerStopSDKExample.csproj.CoreCompileInputs.cache +C:\Users\ckoch\Source\Repos\TigerStopSDK-Example\TigerStopSDKExample\TigerStopSDKTest\obj\Debug\TigerStopSDKExample.csproj.CopyComplete +C:\Users\ckoch\Source\Repos\TigerStopSDK-Example\TigerStopSDKExample\TigerStopSDKTest\obj\Debug\TigerStopSDKExample.exe +C:\Users\ckoch\Source\Repos\TigerStopSDK-Example\TigerStopSDKExample\TigerStopSDKTest\obj\Debug\TigerStopSDKExample.pdb diff --git a/TigerStopSDKExample/TigerStopSDKTest/obj/Debug/TigerStopSDKExample.exe b/TigerStopSDKExample/TigerStopSDKTest/obj/Debug/TigerStopSDKExample.exe index cafd0211e98430665b10289e6f9a74d667264dc2..e5809955698ef55d0a654245cdbe83aee2a27794 100644 GIT binary patch delta 7428 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 EZvx>)C;$Ke literal 43008 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

|S0eW~*Bb#R+qWvBlA8e*l-m&=pT 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