aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Integration/Operators/MachineOperator.cs
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-03-01 16:30:25 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-03-01 16:30:25 +0200
commit7a347e757764f69d2768bbfa1265fe771b73703b (patch)
tree2a0f2eb6c8ca297f1379e0009ab7d459d56a1ff4 /Software/Visual_Studio/Tango.Integration/Operators/MachineOperator.cs
parent5d9c16644968f03cc3979f5ff8d6b74945a4184e (diff)
downloadTango-7a347e757764f69d2768bbfa1265fe771b73703b.tar.gz
Tango-7a347e757764f69d2768bbfa1265fe771b73703b.zip
Changed Operators to Operation in Integration.
Added UploadHardwareCOnfiguration method to IMachineOperator.
Diffstat (limited to 'Software/Visual_Studio/Tango.Integration/Operators/MachineOperator.cs')
-rw-r--r--Software/Visual_Studio/Tango.Integration/Operators/MachineOperator.cs465
1 files changed, 0 insertions, 465 deletions
diff --git a/Software/Visual_Studio/Tango.Integration/Operators/MachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operators/MachineOperator.cs
deleted file mode 100644
index 27dfdf428..000000000
--- a/Software/Visual_Studio/Tango.Integration/Operators/MachineOperator.cs
+++ /dev/null
@@ -1,465 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Tango.PMR;
-using Tango.PMR.Diagnostics;
-using Tango.Transport;
-using Tango.Transport.Transporters;
-using System.Reactive.Linq;
-using System.Reactive.Concurrency;
-using System.Reactive.Threading;
-using Tango.PMR.Common;
-using Tango.PMR.Printing;
-using System.Reactive.Subjects;
-using Tango.PMR.Debugging;
-using Tango.Logging;
-using Tango.Settings;
-using System.IO;
-using Tango.BL.Observables;
-
-namespace Tango.Integration.Operators
-{
- /// <summary>
- /// Represents the Tango machine operator default implementation.
- /// </summary>
- /// <seealso cref="Tango.Transport.Transporters.BasicTransporter" />
- /// <seealso cref="Tango.Integration.Operators.IMachineOperator" />
- public class MachineOperator : BasicTransporter, IMachineOperator
- {
- private bool _diagnosticsSent;
- private bool _debugSent;
- private LogManager _embeddedLogger;
-
- public MachineOperator() : base()
- {
- EnableEmbeddedDebugging = true;
- LogEmbeddedDebuggingToFile = true;
- }
-
- #region Events
-
- /// <summary>
- /// Occurs when there is new diagnostics data available.
- /// </summary>
- public event EventHandler<PushDiagnosticsResponse> DiagnosticsDataAvailable;
- public event EventHandler<DebugLogResponse> DebugLogAvailable;
-
- #endregion
-
- #region Properties
-
- private bool _enableDiagnostics;
- /// <summary>
- /// Gets or sets a value indicating whether direct the embedded device to send diagnostics messages.
- /// </summary>
- public bool EnableDiagnostics
- {
- get { return _enableDiagnostics; }
- set
- {
- if (_enableDiagnostics != value)
- {
- _enableDiagnostics = value;
- RaisePropertyChangedAuto();
- OnEnableDiagnosticsChanged(value);
- }
- }
- }
-
- private bool _enableEmbeddedDebugging;
- /// <summary>
- /// Gets or sets a value indicating whether to allow incoming debugging messages.
- /// </summary>
- /// <exception cref="System.NotImplementedException">
- /// </exception>
- public bool EnableEmbeddedDebugging
- {
- get
- {
- return _enableEmbeddedDebugging;
- }
- set
- {
- if (_enableEmbeddedDebugging != value)
- {
- _enableEmbeddedDebugging = value;
- RaisePropertyChangedAuto();
- OnEnableEmbeddedDebuggingChanged(value);
- }
- }
- }
-
- private bool _logEmbeddedDebuggingToFile;
- /// <summary>
- /// Gets or sets a value indicating whether to automatically save incoming log data from the embedded device.
- /// </summary>
- public bool LogEmbeddedDebuggingToFile
- {
- get { return _logEmbeddedDebuggingToFile; }
- set
- {
- _logEmbeddedDebuggingToFile = value; RaisePropertyChangedAuto();
-
- if (_logEmbeddedDebuggingToFile && _embeddedLogger == null)
- {
- _embeddedLogger = new LogManager();
-
- String folder = SettingsManager.DefaultFolder + "\\embedded logs";
- Directory.CreateDirectory(folder);
- FileLogger fileLogger = new FileLogger(Path.Combine(folder, String.Format("{1}-{0:yyyy-MM-dd_hh-mm-ss}.log", DateTime.Now, "embedded"))) { Enabled = true };
- _embeddedLogger.RegisterLogger(fileLogger);
- }
- }
- }
-
- #endregion
-
- #region Virtual Methods
-
- /// <summary>
- /// Called when the enable diagnostics property has been changed
- /// </summary>
- /// <param name="value">if set to <c>true</c> [value].</param>
- protected virtual void OnEnableDiagnosticsChanged(bool value)
- {
- if (value && State == TransportComponentState.Connected && !_diagnosticsSent)
- {
- SendContinuousRequest<PushDiagnosticsRequest, PushDiagnosticsResponse>(new TangoMessage<PushDiagnosticsRequest>(new PushDiagnosticsRequest()
- {
- PushMotors = true,
- PushSensors = true,
-
- }, MessageType.PushDiagnosticsRequest)).ObserveOn(new NewThreadScheduler()).Subscribe(
- (response) =>
- {
- _diagnosticsSent = true;
- OnDiagnosticsDataAvailable(response);
- },
- (ex) =>
- {
- _diagnosticsSent = false;
- //Do I need separate event for each one ??
- },
- () =>
- {
- _diagnosticsSent = false;
- //What to do now ??
- });
- }
- else
- {
- _diagnosticsSent = false;
- }
- }
-
- /// <summary>
- /// Called when the enable embedded debugging has been changed
- /// </summary>
- /// <param name="value">if set to <c>true</c> [value].</param>
- protected void OnEnableEmbeddedDebuggingChanged(bool value)
- {
- if (value && State == TransportComponentState.Connected && !_debugSent)
- {
- SendContinuousRequest<DebugLogRequest, DebugLogResponse>(new DebugLogRequest()).ObserveOn(new NewThreadScheduler())
- .Subscribe
- (
- (response) =>
- {
- _debugSent = true;
- OnDebugLogAvailable(response);
- },
- (ex) =>
- {
- _debugSent = false;
- //Do I need separate event for each one ??
- },
- () =>
- {
- _debugSent = false;
- //What to do now ??
- });
- }
- else
- {
- _debugSent = false;
- }
- }
-
- /// <summary>
- /// Invokes the <see cref="DiagnosticsDataAvailable"/> event.
- /// </summary>
- /// <param name="data">The sensors data.</param>
- protected virtual void OnDiagnosticsDataAvailable(PushDiagnosticsResponse data)
- {
- DiagnosticsDataAvailable?.Invoke(this, data);
- }
-
- /// <summary>
- /// Invokes the <see cref="DebugLogAvailable"/> event.
- /// </summary>
- /// <param name="data">The sensors data.</param>
- protected virtual void OnDebugLogAvailable(DebugLogResponse data)
- {
- if (LogEmbeddedDebuggingToFile && _embeddedLogger != null)
- {
- _embeddedLogger.Log(new EmbeddedLogItem(data));
- }
-
- DebugLogAvailable?.Invoke(this, data);
- }
-
- #endregion
-
- #region Protected Methods
-
- /// <summary>
- /// Called when the component state has changed.
- /// </summary>
- /// <param name="state">The state.</param>
- protected override void OnStateChanged(TransportComponentState state)
- {
- base.OnStateChanged(state);
-
- if (state != TransportComponentState.Connected)
- {
- _diagnosticsSent = false;
- _debugSent = false;
- }
-
- OnEnableDiagnosticsChanged(EnableDiagnostics);
- OnEnableEmbeddedDebuggingChanged(EnableEmbeddedDebugging);
- }
-
- #endregion
-
- #region Public Methods
-
- /// <summary>
- /// Prints the specified job using the specified job parameters.
- /// </summary>
- /// <param name="job">The job.</param>
- /// <param name="processParameters">Process parameters table</param>
- /// <returns></returns>
- public JobHandler Print(Job job, ProcessParametersTable processParameters)
- {
- JobRequest request = new JobRequest();
-
- JobTicket ticket = new JobTicket();
- ticket.EnableInterSegment = job.EnableInterSegment;
- ticket.InterSegmentLength = job.InterSegmentLength;
- ticket.Length = job.Length;
- ticket.WindingMethod = (JobWindingMethod)job.WindingMethod.Code;
- ticket.Spool = new JobSpool();
-
- job.SpoolType.MapPrimitivesTo(ticket.Spool);
- ticket.Spool.JobSpoolType = (JobSpoolType)job.SpoolType.Code;
-
- ProcessParameters process = new ProcessParameters();
- processParameters.MapPrimitivesTo(process);
- ticket.ProcessParameters = process;
-
- foreach (var segment in job.Segments)
- {
- JobSegment jobSegment = new JobSegment();
- jobSegment.Length = segment.Length;
- jobSegment.Name = segment.Name;
-
- foreach (var stop in segment.BrushStops)
- {
- JobBrushStop jobStop = new JobBrushStop();
- jobStop.Index = stop.Index;
- jobStop.OffsetPercent = stop.OffsetPercent;
- jobStop.OffsetMeters = stop.OffsetMeters;
-
- if (stop.LiquidVolumes == null)
- {
- stop.SetLiquidVolumes(job.Machine.Configuration, job.Rml, processParameters);
- }
-
- foreach (var liquidVolume in stop.LiquidVolumes)
- {
- JobDispenser dispenser = new JobDispenser();
- dispenser.Index = liquidVolume.IdsPack.PackIndex;
- dispenser.Volume = liquidVolume.Volume;
- dispenser.DispenserLiquidType = (DispenserLiquidType)liquidVolume.IdsPack.LiquidType.Code;
- dispenser.DispenserStepDivision = (DispenserStepDivision)liquidVolume.DispenserStepDivision;
-
- dispenser.NanoliterPerPulse = liquidVolume.IdsPack.DispenserType.NlPerPulse;
-
- dispenser.LiquidMaxNanoliterPerCentimeter = liquidVolume.LiquidMaxNanoliterPerCentimeter;
- dispenser.NanoliterPerCentimeter = liquidVolume.NanoliterPerCentimeter;
- dispenser.NanolitterPerSecond = liquidVolume.NanoliterPerSecond;
- dispenser.PulsePerSecond = liquidVolume.PulsePerSecond;
-
- jobStop.Dispensers.Add(dispenser);
- }
-
- jobSegment.BrushStops.Add(jobStop);
- }
-
- ticket.Segments.Add(jobSegment);
- }
-
- request.JobTicket = ticket;
-
- JobHandler handler = null;
-
- handler = new JobHandler(async () =>
- {
- try
- {
- var result = await SendRequest<AbortJobRequest, AbortJobResponse>(new AbortJobRequest());
- handler.RaiseCanceled();
- }
- catch (Exception)
- {
- //TODO: What to do in case job failed to cancel ??
- }
- });
-
- SendContinuousRequest<JobRequest, JobResponse>(request).Subscribe((response) =>
- {
- handler.RaiseStatusReceived(response.Message.Status);
- }, (ex) =>
- {
- if (!handler.IsCanceled)
- {
- handler.RaiseFailed(ex);
- }
- }, () =>
- {
- handler.RaiseCompleted();
- });
-
- return handler;
- }
-
- /// <summary>
- /// Uploads the specified process parameters to the embedded device.
- /// </summary>
- /// <param name="processParameters">The process parameters.</param>
- /// <returns></returns>
- public async Task<UploadProcessParametersResponse> UploadProcessParameters(ProcessParametersTable processParameters)
- {
- UploadProcessParametersRequest request = new UploadProcessParametersRequest();
- request.ProcessParameters = new ProcessParameters();
- processParameters.MapPrimitivesTo(request.ProcessParameters);
- var result = await SendRequest<UploadProcessParametersRequest, UploadProcessParametersResponse>(request);
- return result;
- }
-
- /// <summary>
- /// Starts jogging the specified motor.
- /// </summary>
- /// <param name="request">The request.</param>
- /// <returns></returns>
- public async Task<MotorJoggingResponse> StartMotorJogging(MotorJoggingRequest request)
- {
- return await SendRequest<MotorJoggingRequest, MotorJoggingResponse>(request);
- }
-
- /// <summary>
- /// Stops jogging the specified motor.
- /// </summary>
- /// <param name="request">The request.</param>
- /// <returns></returns>
- public async Task<MotorAbortJoggingResponse> StopMotorJogging(MotorAbortJoggingRequest request)
- {
- return await SendRequest<MotorAbortJoggingRequest, MotorAbortJoggingResponse>(request);
- }
-
- /// <summary>
- /// Starts homing the specified motor.
- /// </summary>
- /// <param name="request">The request.</param>
- /// <returns></returns>
- public IObservable<MotorHomingResponse> StartMotorHoming(MotorHomingRequest request)
- {
- return SendContinuousRequest<MotorHomingRequest, MotorHomingResponse>(request).Select(x => x.Message);
- }
-
- /// <summary>
- /// Stops homing the specified motor.
- /// </summary>
- /// <param name="request">The request.</param>
- /// <returns></returns>
- public async Task<MotorAbortHomingResponse> StopMotorHoming(MotorAbortHomingRequest request)
- {
- return await SendRequest<MotorAbortHomingRequest, MotorAbortHomingResponse>(request);
- }
-
- /// <summary>
- /// Starts jogging the specified dispenser.
- /// </summary>
- /// <param name="request">The request.</param>
- /// <returns></returns>
- public async Task<DispenserJoggingResponse> StartDispenserJogging(DispenserJoggingRequest request)
- {
- return await SendRequest<DispenserJoggingRequest, DispenserJoggingResponse>(request);
- }
-
- /// <summary>
- /// Stops jogging the specified dispenser.
- /// </summary>
- /// <param name="request">The request.</param>
- /// <returns></returns>
- public async Task<DispenserAbortJoggingResponse> StopDispenserJogging(DispenserAbortJoggingRequest request)
- {
- return await SendRequest<DispenserAbortJoggingRequest, DispenserAbortJoggingResponse>(request);
- }
-
- /// <summary>
- /// Starts homing the specified dispenser.
- /// </summary>
- /// <param name="request">The request.</param>
- /// <returns></returns>
- public IObservable<DispenserHomingResponse> StartDispenserHoming(DispenserHomingRequest request)
- {
- return SendContinuousRequest<DispenserHomingRequest, DispenserHomingResponse>(request).Select(x => x.Message);
- }
-
- /// <summary>
- /// Stops homing the specified dispenser.
- /// </summary>
- /// <param name="request">The request.</param>
- /// <returns></returns>
- public async Task<DispenserAbortHomingResponse> StopDispenserHoming(DispenserAbortHomingRequest request)
- {
- return await SendRequest<DispenserAbortHomingRequest, DispenserAbortHomingResponse>(request);
- }
-
- /// <summary>
- /// Turn on/off the specified digital output pin.
- /// </summary>
- /// <param name="request">The request.</param>
- /// <returns></returns>
- public async Task<SetDigitalOutResponse> SetDigitalOut(SetDigitalOutRequest request)
- {
- return await SendRequest<SetDigitalOutRequest, SetDigitalOutResponse>(request);
- }
-
- /// <summary>
- /// Starts jogging the thread motion system.
- /// </summary>
- /// <param name="request">The request.</param>
- /// <returns></returns>
- public async Task<ThreadJoggingResponse> StartThreadJogging(ThreadJoggingRequest request)
- {
- return await SendRequest<ThreadJoggingRequest, ThreadJoggingResponse>(request);
- }
-
- /// <summary>
- /// Stops jogging the thread motion system.
- /// </summary>
- /// <param name="request">The request.</param>
- /// <returns></returns>
- public async Task<ThreadAbortJoggingResponse> StopThreadJogging(ThreadAbortJoggingRequest request)
- {
- return await SendRequest<ThreadAbortJoggingRequest, ThreadAbortJoggingResponse>(request);
- }
-
- #endregion
- }
-}