/// <summary> /// Takes manual input parameters for a set of commands for motorized printhead droplet printing and outputs the commands to the serial port. /// </summary> /// <param name="xDistance"></param> /// <param name="yDistance"></param> /// <param name="zDistance"></param> /// <param name="interpolateDistance"></param> /// <param name="eDispensePerDroplet"></param> public void ProcessManualMotorDropletPrintCommand(double xDistance, double yDistance, double zDistance, double interpolateDistance, double eDispensePerDroplet) { PrintheadModel printheadModel = _printerModel.FindPrinthead(_realTimeStatusDataModel.ActivePrintheadModel.Name); MotorizedPrintheadTypeModel motorizedPrintheadTypeModel = (MotorizedPrintheadTypeModel)printheadModel.PrintheadTypeModel; double emmPerStep = motorizedPrintheadTypeModel.MmPerStep; RealTimeStatusMotorizedPrintheadModel realTimeStatusMotorizedPrintheadModel = (RealTimeStatusMotorizedPrintheadModel)_realTimeStatusDataModel.ActivePrintheadModel; double eMaxSpeed = realTimeStatusMotorizedPrintheadModel.MaxSpeed; double eAcceleration = realTimeStatusMotorizedPrintheadModel.Acceleration; double xmmPerStep = (xDistance != 0) ? _printerModel.AxisModelList[0].MmPerStep : double.MaxValue; double ymmPerStep = (yDistance != 0) ? _printerModel.AxisModelList[1].MmPerStep : double.MaxValue; AxisModel zAxisModel = _printerModel.FindAxis(_realTimeStatusDataModel.ZRealTimeStatusAxisModel.Name); double zmmPerStep = (zDistance != 0) ? _printerModel.FindAxis(zAxisModel.Name).MmPerStep : double.MaxValue; bool zDirectionInverted = (zAxisModel != null) ? zAxisModel.IsDirectionInverted : false; double unused = 0; string printString = GCodeLinesConverter.GCodeLinesListToString( WriteG00.WriteMotorizedDropletPrint( emmPerStep, xmmPerStep, ymmPerStep, zmmPerStep, eDispensePerDroplet, 0, xDistance, 0, yDistance, 0, zDistance, _printerModel.AxisModelList[0].IsDirectionInverted, _printerModel.AxisModelList[1].IsDirectionInverted, zDirectionInverted, motorizedPrintheadTypeModel.IsDirectionInverted, ref unused, ref unused, ref unused, ref unused, null, new DropletModel(interpolateDistance))); _serialCommunicationOutgoingMessagesModel.QueueNextProspectiveOutgoingMessage(printString); }
public RealTimeStatusMotorizedPrintheadViewModel(RealTimeStatusMotorizedPrintheadModel RealTimeStatusMotorizedPrintheadModel) : base(RealTimeStatusMotorizedPrintheadModel) { _realTimeStatusMotorizedPrintheadModel = RealTimeStatusMotorizedPrintheadModel; base._imageSource = "/Resources/General/ValvePrinthead.png"; UpdateProperties(); }
/// <summary> /// Set the new center as the origin (position 0) and adjust the max and min range around such. /// </summary> /// <param name="commandSet"></param> /// <returns></returns> private List <string> InterpretSetOrigin(string commandSet) { //Remove "*Origin" from the beginning of the string. commandSet = commandSet.Substring(6); if (commandSet.Contains("E")) { if (_realTimeStatusDataModel.ActivePrintheadType == PrintheadType.Motorized) { RealTimeStatusMotorizedPrintheadModel realTimeStatusMotorizedPrintheadModel = (RealTimeStatusMotorizedPrintheadModel)_realTimeStatusDataModel.ActivePrintheadModel; MotorizedPrintheadTypeModel motorizedPrintheadTypeModel = (MotorizedPrintheadTypeModel)_printerModel.FindPrinthead(realTimeStatusMotorizedPrintheadModel.Name).PrintheadTypeModel; double previousEPosition = realTimeStatusMotorizedPrintheadModel.Position; motorizedPrintheadTypeModel.MaxPosition -= previousEPosition; motorizedPrintheadTypeModel.MinPosition -= previousEPosition; realTimeStatusMotorizedPrintheadModel.Position = 0; } } if (commandSet.Contains("X")) { AxisModel xAxisModel = _printerModel.AxisModelList[0]; double previousXPosition = _realTimeStatusDataModel.XRealTimeStatusAxisModel.Position; xAxisModel.MaxPosition -= previousXPosition; xAxisModel.MinPosition -= previousXPosition; _realTimeStatusDataModel.XRealTimeStatusAxisModel.Position = 0; } if (commandSet.Contains("Y")) { AxisModel yAxisModel = _printerModel.AxisModelList[1]; double previousYPosition = _realTimeStatusDataModel.YRealTimeStatusAxisModel.Position; yAxisModel.MaxPosition -= previousYPosition; yAxisModel.MinPosition -= previousYPosition; _realTimeStatusDataModel.YRealTimeStatusAxisModel.Position = 0; } if (commandSet.Contains("Z")) { AxisModel zAxisModel = _printerModel.FindAxis(_realTimeStatusDataModel.ZRealTimeStatusAxisModel.Name); double previousZPosition = _realTimeStatusDataModel.ZRealTimeStatusAxisModel.Position; zAxisModel.MaxPosition -= previousZPosition; zAxisModel.MinPosition -= previousZPosition; _realTimeStatusDataModel.ZRealTimeStatusAxisModel.Position = 0; } OnCommandSetMinMaxPositionChanged(); OnCommandSetMinMaxPositionChanged(); //No commands to return. return(null); }
/// <summary> /// Takes manual input parameters for a motor print without movement command and outputs the command to the serial port. /// </summary> /// <param name="eDistance"></param> public void ProcessManualMotorPrintWithoutMovementCommand(double eDistance) { MotorizedPrintheadTypeModel motorizedPrintheadTypeModel = (MotorizedPrintheadTypeModel)_printerModel.FindPrinthead(_realTimeStatusDataModel.ActivePrintheadModel.Name).PrintheadTypeModel; double emmPerStep = motorizedPrintheadTypeModel.MmPerStep; RealTimeStatusMotorizedPrintheadModel realTimeStatusMotorizedPrintheadModel = (RealTimeStatusMotorizedPrintheadModel)_realTimeStatusDataModel.ActivePrintheadModel; double unused = 0; string printString = GCodeLinesConverter.GCodeLinesListToString( WriteG00.WriteMotorizedPrintWithoutMovement(eDistance, emmPerStep, motorizedPrintheadTypeModel.IsDirectionInverted, ref unused, null)); _serialCommunicationOutgoingMessagesModel.QueueNextProspectiveOutgoingMessage(printString); }
/// <summary> /// Record the parameters from a Motorized Printhead Print With Movement command. /// </summary> /// <param name="taskQueuedMessage"></param> /// <param name="eStepsTaken"></param> /// <param name="xStepsTaken"></param> /// <param name="yStepsTaken"></param> /// <param name="zStepsTaken"></param> public void RecordMotorizedPrintWithMovement(int eStepsTaken, int xStepsTaken, int yStepsTaken, int zStepsTaken) { if (_activePrintheadType == PrintheadType.Motorized) { MotorizedPrintheadTypeModel motorizedPrintheadTypeModel = (MotorizedPrintheadTypeModel)_printerModel.FindPrinthead(_activePrintheadModel.Name).PrintheadTypeModel; double emmPerStep = motorizedPrintheadTypeModel.MmPerStep; double xmmPerStep = _printerModel.AxisModelList[0].MmPerStep; double ymmPerStep = _printerModel.AxisModelList[1].MmPerStep; double zmmPerStep = _printerModel.FindAxis(_zRealTimeStatusAxisModel.Name).MmPerStep; //Record data. RealTimeStatusMotorizedPrintheadModel motorizedPrintheadModel = (RealTimeStatusMotorizedPrintheadModel)_activePrintheadModel; //Record positions. if (eStepsTaken != 0) { motorizedPrintheadModel.Position += (motorizedPrintheadTypeModel.IsDirectionInverted == false) ? (double)(eStepsTaken * emmPerStep) : (double)(eStepsTaken * -1 * emmPerStep); motorizedPrintheadModel.LimitSwitchStatus = LimitSwitchStatus.NoLimit; } if (xStepsTaken != 0) { _xRealTimeStatusAxisModel.Position += (_printerModel.AxisModelList[0].IsDirectionInverted == false) ? (double)(xStepsTaken * xmmPerStep) : (double)(xStepsTaken * -1 * xmmPerStep); _xRealTimeStatusAxisModel.LimitSwitchStatus = LimitSwitchStatus.NoLimit; } if (yStepsTaken != 0) { _yRealTimeStatusAxisModel.Position += (_printerModel.AxisModelList[1].IsDirectionInverted == false) ? (double)(yStepsTaken * ymmPerStep) : (double)(yStepsTaken * -1 * ymmPerStep); _yRealTimeStatusAxisModel.LimitSwitchStatus = LimitSwitchStatus.NoLimit; } if (zStepsTaken != 0) { _zRealTimeStatusAxisModel.Position += (_printerModel.FindAxis(_zRealTimeStatusAxisModel.Name).IsDirectionInverted == false) ? (double)(zStepsTaken * zmmPerStep) : (double)(zStepsTaken * -1 * zmmPerStep); _zRealTimeStatusAxisModel.LimitSwitchStatus = LimitSwitchStatus.NoLimit; } //Notify other classes. OnRecordMotorizedPrintWithMovementExecuted(); } }
/// <summary> /// Record the parameters from a Motorized Printhead Print without Movement command. /// </summary> /// <param name="ePosition"></param> public void RecordMotorizedPrintWithoutMovement(double eStepsTaken) { if (_activePrintheadType == PrintheadType.Motorized) { MotorizedPrintheadTypeModel motorizedPrintheadTypeModel = (MotorizedPrintheadTypeModel)_printerModel.FindPrinthead(_activePrintheadModel.Name).PrintheadTypeModel; double emmPerStep = motorizedPrintheadTypeModel.MmPerStep; //Record data. RealTimeStatusMotorizedPrintheadModel motorizedPrintheadModel = (RealTimeStatusMotorizedPrintheadModel)_activePrintheadModel; if (eStepsTaken != 0) { motorizedPrintheadModel.Position += (motorizedPrintheadTypeModel.IsDirectionInverted == false) ? (double)(eStepsTaken * emmPerStep) : (double)(eStepsTaken * -1 * emmPerStep); motorizedPrintheadModel.LimitSwitchStatus = LimitSwitchStatus.NoLimit; } //Notify other classes. OnRecordMotorizedPrintWithoutMovementExecuted(); } }
/// <summary> /// Sets the minimum and/or maximum position of actuator-based equipment as its current position. /// </summary> /// <param name="commandSet"></param> /// <returns></returns> private List <string> InterpretSetMinMaxPosition(string commandSet) { //Remove "*SetMinMaxPos" from the beginning of the command set. commandSet = commandSet.Substring(12); for (int index = 0; index < commandSet.Length; index++) { switch (commandSet[index]) { case 'E': if (_realTimeStatusDataModel.ActivePrintheadType == PrintheadType.Motorized) { //Set the current position as the parameter value. RealTimeStatusMotorizedPrintheadModel realTimeStatusMotorizedPrintheadModel = (RealTimeStatusMotorizedPrintheadModel)_realTimeStatusDataModel.ActivePrintheadModel; MotorizedPrintheadTypeModel motorizedPrintheadTypeModel = (MotorizedPrintheadTypeModel)_printerModel.FindPrinthead(_realTimeStatusDataModel.ActivePrintheadModel.Name).PrintheadTypeModel; double ePreviousPosition = realTimeStatusMotorizedPrintheadModel.Position; realTimeStatusMotorizedPrintheadModel.Position = ParseDouble(commandSet.Substring(index)); double ePositionDifference = realTimeStatusMotorizedPrintheadModel.Position - ePreviousPosition; //Set the Min or Max Position property as the parameter value. //Adjust the Min and Max positions such that the distance between Max and Min Position remains the same. switch (commandSet[index + 1]) { case 'N': motorizedPrintheadTypeModel.MinPosition = realTimeStatusMotorizedPrintheadModel.Position; motorizedPrintheadTypeModel.MaxPosition += ePositionDifference; break; case 'M': motorizedPrintheadTypeModel.MaxPosition = realTimeStatusMotorizedPrintheadModel.Position; motorizedPrintheadTypeModel.MinPosition += ePositionDifference; break; default: //Set position value only. //Do nothing here. break; } } break; case 'X': //Set the current position as the parameter value. RealTimeStatusAxisModel xRealTimeStatusAxisModel = _realTimeStatusDataModel.XRealTimeStatusAxisModel; AxisModel xAxisModel = _printerModel.AxisModelList[0]; double xPreviousPosition = xRealTimeStatusAxisModel.Position; xRealTimeStatusAxisModel.Position = ParseDouble(commandSet.Substring(index)); double xPositionDifference = xRealTimeStatusAxisModel.Position - xPreviousPosition; //Set the Min or Max Position property as the parameter value. //Adjust the Min and Max positions such that the distance between Max and Min Position remains the same. switch (commandSet[index + 1]) { case 'N': xAxisModel.MinPosition = xRealTimeStatusAxisModel.Position; xAxisModel.MaxPosition += xPositionDifference; break; case 'M': xAxisModel.MaxPosition = xRealTimeStatusAxisModel.Position; xAxisModel.MinPosition += xPositionDifference; break; default: //Set position value only. //Do nothing here. break; } break; case 'Y': //Set the current position as the parameter value. RealTimeStatusAxisModel yRealTimeStatusAxisModel = _realTimeStatusDataModel.YRealTimeStatusAxisModel; AxisModel yAxisModel = _printerModel.AxisModelList[1]; double yPreviousPosition = yRealTimeStatusAxisModel.Position; yRealTimeStatusAxisModel.Position = ParseDouble(commandSet.Substring(index)); double yPositionDifference = yRealTimeStatusAxisModel.Position - yPreviousPosition; //Set the Min or Max Position property as the parameter value. //Adjust the Min and Max positions such that the distance between Max and Min Position remains the same. switch (commandSet[index + 1]) { case 'N': yAxisModel.MinPosition = yRealTimeStatusAxisModel.Position; yAxisModel.MaxPosition += yPositionDifference; break; case 'M': yAxisModel.MaxPosition = yRealTimeStatusAxisModel.Position; yAxisModel.MinPosition += yPositionDifference; break; default: //Set position value only. //Do nothing here. break; } break; case 'Z': //Set the current position as the parameter value. RealTimeStatusAxisModel zRealTimeStatusAxisModel = _realTimeStatusDataModel.ZRealTimeStatusAxisModel; AxisModel zAxisModel = _printerModel.FindAxis(zRealTimeStatusAxisModel.Name); double zPreviousPosition = zRealTimeStatusAxisModel.Position; zRealTimeStatusAxisModel.Position = ParseDouble(commandSet.Substring(index)); double zPositionDifference = zRealTimeStatusAxisModel.Position - zPreviousPosition; //Set the Min or Max Position property as the parameter value. //Adjust the Min and Max positions such that the distance between Max and Min Position remains the same. switch (commandSet[index + 1]) { case 'N': zAxisModel.MinPosition = zRealTimeStatusAxisModel.Position; zAxisModel.MaxPosition += zPositionDifference; break; case 'M': zAxisModel.MaxPosition = zRealTimeStatusAxisModel.Position; zAxisModel.MinPosition += zPositionDifference; break; default: //Set position value only. //Do nothing here. break; } break; } } OnCommandSetPositionChanged(); OnCommandSetMinMaxPositionChanged(); //No commands to return. return(null); }
/// <summary> /// Record the parameters from a Limit Switch status message. /// </summary> /// <param name="xLimit"></param> /// <param name="yLimit"></param> /// <param name="zLimit"></param> /// <param name="eLimit"></param> /// <param name="xStepsTaken"></param> /// <param name="yStepsTaken"></param> /// <param name="zStepsTaken"></param> /// <param name="eStepsTaken"></param> public void RecordLimit(bool xLimit, bool yLimit, bool zLimit, bool eLimit, int xStepsTaken, int yStepsTaken, int zStepsTaken, int eStepsTaken) { //E if (_activePrintheadType == PrintheadType.Motorized) { //mm Per Step. MotorizedPrintheadTypeModel motorizedPrintheadTypeModel = (MotorizedPrintheadTypeModel)_printerModel.FindPrinthead(_activePrintheadModel.Name).PrintheadTypeModel; eStepsTaken = (motorizedPrintheadTypeModel.IsDirectionInverted == false) ? eStepsTaken : (-1 * eStepsTaken); double emmPerStep = motorizedPrintheadTypeModel.MmPerStep; //Update Position. RealTimeStatusMotorizedPrintheadModel realTimeStatusMotorizedPrintheadTypeModel = (RealTimeStatusMotorizedPrintheadModel)_activePrintheadModel; realTimeStatusMotorizedPrintheadTypeModel.Position += (double)(eStepsTaken * -1 * emmPerStep); //Update Max/Min Position and Limit. if (eLimit == true) { if (eStepsTaken > 0) { motorizedPrintheadTypeModel.MaxPosition = realTimeStatusMotorizedPrintheadTypeModel.Position; realTimeStatusMotorizedPrintheadTypeModel.LimitSwitchStatus = LimitSwitchStatus.UpperLimit; } else if (eStepsTaken < 0) { motorizedPrintheadTypeModel.MinPosition = realTimeStatusMotorizedPrintheadTypeModel.Position; realTimeStatusMotorizedPrintheadTypeModel.LimitSwitchStatus = LimitSwitchStatus.LowerLimit; } } } AxisModel xAxisModel = _printerModel.AxisModelList[0]; AxisModel yAxisModel = _printerModel.AxisModelList[1]; AxisModel zAxisModel = _printerModel.FindAxis(_zRealTimeStatusAxisModel.Name); //mm Per Step. double xmmPerStep = xAxisModel.MmPerStep; double ymmPerStep = yAxisModel.MmPerStep; double zmmPerStep = (zAxisModel != null) ? _printerModel.FindAxis(_zRealTimeStatusAxisModel.Name).MmPerStep : 0; //Record positions. if (xStepsTaken != 0) { xStepsTaken = (_printerModel.AxisModelList[0].IsDirectionInverted == false) ? xStepsTaken : (-1 * xStepsTaken); _xRealTimeStatusAxisModel.Position += (double)(xStepsTaken * xmmPerStep); } if (yStepsTaken != 0) { yStepsTaken = (_printerModel.AxisModelList[1].IsDirectionInverted == false) ? yStepsTaken : (-1 * yStepsTaken); _yRealTimeStatusAxisModel.Position += (double)(yStepsTaken * ymmPerStep); } if (zStepsTaken != 0) { zStepsTaken = (_printerModel.FindAxis(_zRealTimeStatusAxisModel.Name).IsDirectionInverted == false) ? zStepsTaken : (-1 * zStepsTaken); _zRealTimeStatusAxisModel.Position += (double)(zStepsTaken * zmmPerStep); } //Set Max Positions and Limits. if (xLimit == true) { if (xStepsTaken > 0) { xAxisModel.MaxPosition = _xRealTimeStatusAxisModel.Position; _xRealTimeStatusAxisModel.LimitSwitchStatus = LimitSwitchStatus.UpperLimit; } else if (xStepsTaken < 0) { xAxisModel.MinPosition = _xRealTimeStatusAxisModel.Position; _xRealTimeStatusAxisModel.LimitSwitchStatus = LimitSwitchStatus.LowerLimit; } } if (yLimit == true) { if (yStepsTaken > 0) { yAxisModel.MaxPosition = _yRealTimeStatusAxisModel.Position; _yRealTimeStatusAxisModel.LimitSwitchStatus = LimitSwitchStatus.UpperLimit; } else if (yStepsTaken < 0) { yAxisModel.MinPosition = _yRealTimeStatusAxisModel.Position; _yRealTimeStatusAxisModel.LimitSwitchStatus = LimitSwitchStatus.LowerLimit; } } if (zLimit == true) { if (zStepsTaken > 0) { if (_shouldZCalibrate == true) { zAxisModel.MaxPosition = _zRealTimeStatusAxisModel.Position; _shouldZCalibrate = false; } _zRealTimeStatusAxisModel.LimitSwitchStatus = LimitSwitchStatus.UpperLimit; } else if (zStepsTaken < 0) { //The minimum Position of Z Axes are always zero. //If the lower limit of a Z Axis is hit, then adjust the Max Position such that the range remains the same. if (_shouldZCalibrate == true) { zAxisModel.MaxPosition = zAxisModel.MaxPosition + _zRealTimeStatusAxisModel.Position; zAxisModel.MinPosition = 0; _shouldZCalibrate = false; } _zRealTimeStatusAxisModel.LimitSwitchStatus = LimitSwitchStatus.LowerLimit; } } //Notify other classes. OnRecordLimitExecuted(); }