aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2020-07-13 18:26:20 +0300
committerAvi Levkovich <avi@twine-s.com>2020-07-13 18:26:20 +0300
commit6908c13314f00030dd039d003aaf6193bdb0f28b (patch)
tree5eee7e648541f0f1f971a9e7a33614bacd0adf1a
parent5f72798aaff5d2200c939f522bcc92ff7471d2af (diff)
parentebdba4dd5bb09f3bbefcd774931153346041dabc (diff)
downloadTango-6908c13314f00030dd039d003aaf6193bdb0f28b.tar.gz
Tango-6908c13314f00030dd039d003aaf6193bdb0f28b.zip
merge
-rw-r--r--Software/DB/Tango.mdfbin75497472 -> 75497472 bytes
-rw-r--r--Software/DB/Tango_log.ldfbin22675456 -> 22675456 bytes
-rw-r--r--Software/Embedded_SW/Embedded/.cproject2
-rw-r--r--Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c2
-rw-r--r--Software/Embedded_SW/Embedded/DataDef.h2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/EEPROM/Head_EEPROM.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c88
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c45
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c132
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c12
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c5
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/control.c12
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c10
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c7
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/Safety.c18
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/buttons.c28
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/process.c6
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c25
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS.h4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c81
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c11
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c35
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c15
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c13
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c174
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h41
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c46
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c363
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.h0
-rw-r--r--Software/Embedded_SW/Embedded/Software Release Notes.txt23
-rw-r--r--Software/PMR/Messages/Diagnostics/EventType.proto41
-rw-r--r--Software/Stubs Collection/stubs/technician view files/new head.tpf360
-rw-r--r--Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip6
-rw-r--r--Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txtbin52 -> 52 bytes
-rw-r--r--Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip24
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/RemoteDesktopView.xaml4
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/CSV/CsvColumn.cs30
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/CSV/CsvRow.cs33
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridView.xaml.cs9
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/UserInputDialogViewVM.cs1
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/IProcedureContext.cs3
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ProcedureContext.cs22
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Resources/lib_template.csx1
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Resources/main_template.csx1
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Result.cs6
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Tango.FSE.Procedures.csproj6
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/ProcedureRunnerViewVM.cs100
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Views/ProcedureDesignerView.xaml2
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Views/ProcedureRunnerExecutionView.xaml1
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/ViewModels/ApplicationUpgradeGeneratedViewVM.cs17
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/ViewModels/FirmwareUpgradeGeneratedViewVM.cs17
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/ViewModels/FirmwareUpgradeViewVM.cs25
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/ApplicationUpgradeGeneratedView.xaml4
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/ApplicationUpgradeView.xaml2
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/FirmwareUpgradeGeneratedView.xaml4
-rw-r--r--Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/FirmwareUpgradeView.xaml9
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.BL/Services/OrganizationsService.cs2
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.BL/Services/PublishedProcedureProjectsService.cs14
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.Common/RemoteUpgrade/RemoteUpgradeHandler.cs3
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.UI/Notifications/DefaultNotificationProvider.cs2
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteUpgrade/DefaultRemoteUpgradeManager.cs4
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs9
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml3
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs36
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Tango.MachineStudio.RML.csproj1
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs133
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml106
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml.cs1
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/LiquidQuantityToFormatStringConverter.cs8
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/TooltipLiquidQuantityFormatConverter.cs38
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj1
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml13
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Resources/MaterialDesign.xaml41
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs2
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/MainViewVM.cs21
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Converters/LiquidTypeToBrushConverter.cs54
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Converters/StringToFirstLetterConverter.cs8
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/ViewModels/MaintenanceViewVM.cs4
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Views/MaintenanceView.xaml14
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/PPCSettings.cs2
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs2
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs14
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest2
-rw-r--r--Software/Visual_Studio/Resources/Tango alarm events handling chart_Rev21.xlsxbin0 -> 65389 bytes
-rw-r--r--Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs4
-rw-r--r--Software/Visual_Studio/Tango.BL/DTO/PublishedProcedureProjectDTOBase.cs8
-rw-r--r--Software/Visual_Studio/Tango.BL/Entities/PublishedProcedureProjectBase.cs38
-rw-r--r--Software/Visual_Studio/Tango.BL/Enumerations/EventTypes.cs44
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/PUBLISHED_PROCEDURE_PROJECTS.cs1
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx3
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram136
-rw-r--r--Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs28
-rw-r--r--Software/Visual_Studio/Tango.PMR/Diagnostics/EventType.cs576
-rw-r--r--Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/OverrideData.xmlbin84256 -> 84276 bytes
-rw-r--r--Software/Visual_Studio/Tango.Transport/TransporterBase.cs2
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analysis/IAnalyzerResult.cs3
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/FlowAnalyser.cs19
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/MainWindow.xaml11
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Models/SettingsModel.cs52
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Tango.DispenserAnalyzer.UI.csproj9
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/View/SettingsWnd.xaml166
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/View/SettingsWnd.xaml.cs38
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/MainWindowVM.cs30
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/SettingsVM.cs54
-rw-r--r--Software/Visual_Studio/Utilities/Tango.EventsTypesGenerator/Program.cs2
-rw-r--r--Software/Visual_Studio/Utilities/Tango.EventsTypesGenerator/Tango.EventsTypesGenerator.csproj4
112 files changed, 2596 insertions, 1112 deletions
diff --git a/Software/DB/Tango.mdf b/Software/DB/Tango.mdf
index b8e49d61a..0d73c39e0 100644
--- a/Software/DB/Tango.mdf
+++ b/Software/DB/Tango.mdf
Binary files differ
diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf
index 0ff918d2f..f22a84182 100644
--- a/Software/DB/Tango_log.ldf
+++ b/Software/DB/Tango_log.ldf
Binary files differ
diff --git a/Software/Embedded_SW/Embedded/.cproject b/Software/Embedded_SW/Embedded/.cproject
index 33288a248..0bc7dc368 100644
--- a/Software/Embedded_SW/Embedded/.cproject
+++ b/Software/Embedded_SW/Embedded/.cproject
@@ -441,7 +441,7 @@
</toolChain>
</folderInfo>
<sourceEntries>
- <entry excluding="Drivers/I2C_Communication/Head_Card/ADC/Head_ADC_old.c|EmbParam.cfg|JigCommands.c|PWM.c|USBCDCD.c|Message.c|Pin_config.c|src|Configuration.c|SlowMotors.c|Timer.c|Communication.c|FastMotors.c|ADCUtils.c|Drivers/L6470|Pin.c|ADCLogger.c|Flashstore.c|Profile.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+ <entry excluding="EmbParam.cfg|Drivers/Uart_Comm/Uart.c|JigCommands.c|PWM.c|USBCDCD.c|Message.c|Pin_config.c|src|Configuration.c|SlowMotors.c|Timer.c|Communication.c|FastMotors.c|ADCUtils.c|Drivers/L6470|Pin.c|ADCLogger.c|Flashstore.c|Profile.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
</sourceEntries>
</configuration>
</storageModule>
diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
index 60707d0cb..beeb86c92 100644
--- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
+++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
@@ -20,7 +20,7 @@ typedef struct
} TangoVersion_t;
-TangoVersion_t _gTangoVersion = {1,4,6,33};
+TangoVersion_t _gTangoVersion = {1,4,6,35};
#define BUILD_DATE __DATE__
char Dat[50] = BUILD_DATE;
char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d
diff --git a/Software/Embedded_SW/Embedded/DataDef.h b/Software/Embedded_SW/Embedded/DataDef.h
index 4c74839a1..4b6bdc129 100644
--- a/Software/Embedded_SW/Embedded/DataDef.h
+++ b/Software/Embedded_SW/Embedded/DataDef.h
@@ -20,7 +20,7 @@
#define NO_INITIAL_HEATING
#define MAX_STRING_LEN 255 //Embedded version + filter.c
-//#define WATCHDOG
+#define WATCHDOG
//#define DISPESER_TEST
//#define FPGA_WATCHDOG_DISABLE
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/EEPROM/Head_EEPROM.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/EEPROM/Head_EEPROM.c
index d7f0c8277..0d767b864 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/EEPROM/Head_EEPROM.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/EEPROM/Head_EEPROM.c
@@ -121,7 +121,7 @@ uint32_t Check_Head_Type_Via_EEPROM()
if (status == 0xFF)
{
ACTIVITY_RED_LED_ON;
- AlarmHandlingSetAlarm(EVENT_TYPE__POWER_UP_BIT_FAILURE, true);
+ //AlarmHandlingSetAlarm(EVENT_TYPE__POWER_UP_BIT_FAILURE, true);
}
if((Head_i2c_status == I2C_MASTER_ERR_ADDR_ACK)||(status == 0xFF))
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c
index a5c9376d2..d73fbcdba 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Heaters/Head_Heaters.c
@@ -13,6 +13,7 @@
bool HeaterMap[HEADCARD_HIT_MIXER+1] = {0};
+uint8_t OT_Heater_Index = 0;IN_Heater_Index = 0;
uint32_t Activate_Head_Card_Heaters(HEADCARD_HEATERS_ENUM Head_Heater_ID)
{
uint32_t status= OK;
@@ -40,15 +41,15 @@ uint32_t Deactivate_Head_Card_Heaters(HEADCARD_HEATERS_ENUM Head_Heater_ID)
HeaterMap[Head_Heater_ID] &= ~(1 << Head_Heater_ID);
if(Head_Heater_ID <= HEADCARD_UPPER_HIT_IN4)
- {
- Head_I2C_EXP1_0x40.ushort &= ~(1 << Head_Heater_ID);
- }
- else if(Head_Heater_ID <= HEADCARD_HIT_MIXER)
- {
- Head_I2C_EXP2_0x42.ushort &= ~(1 << (Head_Heater_ID - 16));
- }
- else
- status = ERROR;
+ {
+ Head_I2C_EXP1_0x40.ushort &= ~(1 << Head_Heater_ID);
+ }
+ else if(Head_Heater_ID <= HEADCARD_HIT_MIXER)
+ {
+ Head_I2C_EXP2_0x42.ushort &= ~(1 << (Head_Heater_ID - 16));
+ }
+ else
+ status = ERROR;
return status;
}
@@ -66,6 +67,38 @@ uint32_t Write_Head_Card_Heaters_Commands()
Report(" Write_Head_Card_Heaters",__FILE__,__LINE__,255,RpWarning,0,0);
if (status)
ReadFailures++;
+ if ((IN_Heater_Index)&&(IN_Heater_Index<=4))
+ {
+ switch (IN_Heater_Index)
+ {
+ case 2:
+ Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 = true;
+ break;
+ case 3:
+ Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 = true;
+ break;
+ case 4:
+ Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 = true;
+ break;
+ }
+ IN_Heater_Index++;
+ }
+ if ((OT_Heater_Index)&&(OT_Heater_Index<=4))
+ {
+ switch (OT_Heater_Index)
+ {
+ case 2:
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = true;
+ break;
+ case 3:
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = true;
+ break;
+ case 4:
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = true;
+ break;
+ }
+ OT_Heater_Index++;
+ }
return status;
}
@@ -137,34 +170,65 @@ uint32_t HeadCard_Control_Heaters(HEADCARD_HEATERS_ENUM Heater_ID, bool Pwr_Cmd)
break;
case HEADCARD_UPPER_HIT_IN1:
Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN1 = Pwr_Cmd;
+ IN_Heater_Index = (Pwr_Cmd)?1:0;
//status |= Head_Write_IO_Reg(0x40,HIGH);
// break;
// case HEADCARD_UPPER_HIT_IN2:
+ if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 == Pwr_Cmd)
Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 = Pwr_Cmd;
+ else
+ if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 == true)
+ Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN2 = false;
//status |= Head_Write_IO_Reg(0x40,HIGH);
// break;
// case HEADCARD_UPPER_HIT_IN3:
+ if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 == Pwr_Cmd)
Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 = Pwr_Cmd;
+ else
+ if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 == true)
+ Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 = false;
+ //Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN3 = false;
//status |= Head_Write_IO_Reg(0x40,HIGH);
// break;
// case HEADCARD_UPPER_HIT_IN4:
+ if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 == Pwr_Cmd)
Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 = Pwr_Cmd;
+ else
+ if (Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 == true)
+ Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 = false;
+ //Head_I2C_EXP1_0x40.bits.OUTPUT_ON_HTIN4 = false;
//status |= Head_Write_IO_Reg(0x40,HIGH);
break;
case HEADCARD_UPPER_HIT_OUT1:
Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT1 = Pwr_Cmd;
+ OT_Heater_Index = (Pwr_Cmd)?1:0;
//status |= Head_Write_IO_Reg(0x42,LOW);
// break;
// case HEADCARD_UPPER_HIT_OUT2:
- Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = Pwr_Cmd;
+ if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 == Pwr_Cmd)
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = Pwr_Cmd;
+ else
+ if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 == true)
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = false;
+ //Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT2 = false;
//status |= Head_Write_IO_Reg(0x42,LOW);
// break;
// case HEADCARD_UPPER_HIT_OUT3:
- Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = Pwr_Cmd;
+ if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 == Pwr_Cmd)
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = Pwr_Cmd;
+ else
+ if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 == true)
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = false;
+ //Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT3 = false;
//status |= Head_Write_IO_Reg(0x42,LOW);
// break;
// case HEADCARD_UPPER_HIT_OUT4:
- Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = Pwr_Cmd;
+ if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 == Pwr_Cmd)
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = Pwr_Cmd;
+ else
+ if (Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 == true)
+ Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = false;
+ //Head_I2C_EXP2_0x42.bits.OUTPUT_ON_HTOT4 = false;
//status |= Head_Write_IO_Reg(0x42,LOW);
break;
case HEADCARD_HIT_MIXER:
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c
index 4289c1794..69be5a330 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/I2C_Comm.c
@@ -22,6 +22,9 @@
#include "i2c_fifo.h"
#include "i2c.h"
+uint32_t LastReadI2C_BASE; unsigned char LastReadaddr; unsigned char* LastReaddata; unsigned int LastReadlen;
+uint32_t LastWriteI2C_BASE; unsigned char LastWriteaddr; unsigned char *LastWritedata; unsigned int LastWritelen;
+Task_Handle TaskId;
uint32_t Arb_Loss_Count = 0;
//*****************************************************************************
@@ -36,6 +39,7 @@ uint32_t Arb_Loss_Count = 0;
//! \b false.
//*****************************************************************************
+char I2CErrMsg[181];
uint32_t I2C_WriteBuff(uint32_t I2C_BASE, unsigned char addr, unsigned char* data, unsigned int len)
{
uint32_t status = OK;
@@ -179,11 +183,31 @@ uint32_t I2C_Write(uint32_t I2C_ID, uint32_t Slave_Add, uint8_t *I2C_Write_buf,
//Byte2Write = Byte2Write & 0xFF;
- /*if(No_BytesToWrite <= 2) {
+ status = I2C_WriteBuff(I2C_BASE, Slave_Add, I2C_Write_buf, No_BytesToWrite);
+ //status = I2C_WriteFifo(I2C_BASE, Slave_Add, buff, No_BytesToWrite);
+ /*if(No_BytesToWrite <= 2)
+ {
status = I2C_WriteBuff(I2C_BASE, Slave_Add, I2C_Write_buf, No_BytesToWrite);
- } else {
+ }
+ else
+ {
status = I2C_WriteFifo(I2C_BASE, Slave_Add, buff, No_BytesToWrite);
}*/
+ if (status == OK)
+ {
+ //LastWriteI2C_BASE = I2C_BASE;
+ LastWriteaddr = Slave_Add;
+ LastWritedata = buff;
+ LastWritelen = No_BytesToWrite;
+ TaskId = Task_self();
+ }
+ else
+ {
+ usnprintf(I2CErrMsg, 180, "I2C Err write 0x%x 0x%x, last good read 0x%x, %d, write 0x%x, %d, T 0x%x 0x%x",status,Slave_Add,
+ LastReadaddr, LastReadlen,
+ LastWriteaddr, LastWritelen, Task_self(),TaskId);
+ Report(I2CErrMsg, __FILE__, __LINE__, status, RpWarning, Slave_Add, 0);
+ }
//uint32_t I2C_W_buf[256] = {0},i;
@@ -192,7 +216,6 @@ uint32_t I2C_Write(uint32_t I2C_ID, uint32_t Slave_Add, uint8_t *I2C_Write_buf,
// I2C_W_buf[i] = request->bytestwrite[i];
// }
- status = I2C_WriteBuff(I2C_BASE, Slave_Add, I2C_Write_buf, No_BytesToWrite);
if (status)
{
if (Arb_Loss_Count++ >= 5)
@@ -255,6 +278,22 @@ uint32_t I2C_Read(uint32_t I2C_ID, uint32_t Slave_Add, uint8_t *I2C_Read_buf, ui
}
}
+ if (status == OK)
+ {
+ //LastReadI2C_BASE = I2C_BASE;
+ LastReadaddr = Slave_Add;
+ LastReaddata = buff;
+ LastReadlen = No_BytesToRead;
+ TaskId = Task_self();
+ }
+ else
+ {
+ usnprintf(I2CErrMsg, 180, "I2C Err read 0x%x 0x%x, last good read 0x%x, %d, write 0x%x, %d, T 0x%x 0x%x",status,Slave_Add,
+ LastReadaddr, LastReadlen,
+ LastWriteaddr, LastWritelen, Task_self(),TaskId);
+ Report(I2CErrMsg, __FILE__, __LINE__, status, RpWarning, Slave_Add, 0);
+ }
+
/*else
{
if (Arb_Loss_Count)
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c
deleted file mode 100644
index 8d11589be..000000000
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/Cartridges/Cartridges.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Cartridges.c
- *
- * Created on: Jun 29, 2020
- * Author: avi
- */
-#include "include.h"
-#include "DataDef.h"
-#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"
-
-typedef enum
-{
- UPPER_CART,
- LOWER_CART,
- UNKNOWN_CART,//at power up
- NONE_CART,//NA
-}WASTE_ID;
-
-//WASTE_ID Waste_Id;
-
-typedef enum
-{
- CART_UNKNOWN,//after power-up...
- CART_OUT,
- CART_IN,
- CART_SELECTED,
-}CART_STATE;
-
-typedef enum
-{
- CART_INIT,//unknown, acquire info, decide
- CART_IDLE,//empty + valid (RFID tag OK), ready to use
- CART_FULL,
- CART_EMPTYING,
- CART_EMPTYING_PAUSED,
- CART_BLOCKED,//RFID FAILED ...
-}CART_STATUS;// mode
-
-typedef struct
-{
- CART_STATE State;
- uint8_t RFID_Legality;
- double Leval;//waste tank level mili litters
- uint8_t Warnings;//empty / full / overflow
- bool Emptying_Process;// YES / NO
- uint8_t Emptying_Duration; //if Emptying_Process YES
-}WASTE_HANDLING;
-
-typedef struct
-{
- uint8_t Door; // OPEN / CLOSE / unknown
- uint8_t Waste_Active; // CART_2 / CART_3 / NONE
- WASTE_HANDLING Waste_Handling[2];
-}CART_HANDLING;
-
-CART_HANDLING Cart_Handling;
-
-void cartWaste_Init()
-{
- //Initial state - OUT
- Cart_Handling.Waste_Handling[UPPER_CART].State = CART_UNKNOWN;
- Cart_Handling.Waste_Handling[LOWER_CART].State = CART_UNKNOWN;
-
- Pannel_Leds(CART_2,MODE_OFF);
- Pannel_Leds(CART_3,MODE_OFF);
-
- Cart_Handling.Door = UNKNOWN;
- Cart_Handling.Waste_Active = NONE_CART;
-}
-
-void cartCart_door()//Polled by polling function. Notify waste. Poll each 1 second. During active filling poll each 100msec
-{
- if(Get_COVER_1_State(CartridgesDoor))//to check the polarity
- {
- Cart_Handling.Door = OPEN;
- }
- else
- {
- Cart_Handling.Door = CLOSE;
- }
-}
-
-void cartCART_INSERTED(WASTE_ID CartId) //every 1 sec.
-{
- switch(CartId)
- {
- case UPPER_CART:
- if(Is_Cartridge_Present(CART_2) == true)
- {
- Cart_Handling.Waste_Handling[UPPER_CART].State = CART_IN;
- Pannel_Leds(CART_2,MODE_ON);
- }
- break;
- case LOWER_CART:
- if(Is_Cartridge_Present(CART_3) == true)
- {
- Cart_Handling.Waste_Handling[LOWER_CART].State = CART_IN;
- Pannel_Leds(CART_3,MODE_ON);
- }
- break;
- default:
- break;
- }
-}
-
-void cartCART_EXTRACTED(WASTE_ID CartId)
-{
- if(Cart_Handling.Waste_Active == CART_SELECTED)
- {
- #warning notify waste module
- }
-
- Cart_Handling.Waste_Handling[CartId].State = CART_OUT;
-
- switch(CartId)
- {
- case UPPER_CART:
- if(Is_Cartridge_Present(CART_2) == false)
- {
- Pannel_Leds(CART_2,MODE_OFF);
- }
- break;
- case LOWER_CART:
- if(Is_Cartridge_Present(CART_3) == false)
- {
- Pannel_Leds(CART_3,MODE_OFF);
- }
- break;
- default:
- break;
- }
-}
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c
index 29698239a..f7d734536 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.c
@@ -554,7 +554,7 @@ double CalculateWHSWasteTankLevelMiliLiter()
waste_volume_milliliter = Vm_ml -LocalV0_ml;
}
//ReportWithPackageFilter(WasteFilter,"------------ waste_volume_ml -----------------", __FILE__, __LINE__, 0, RpMessage, (int)(waste_volume_milliliter), 0);
- Report("------------ get waste level in ml -----------------", __FILE__, __LINE__, 0, RpMessage, (int)(waste_volume_milliliter), 0);
+ Report("------------ get waste level in ml -----------------", __FILE__, LocalV0_ml, Vm_ml, RpMessage, (int)(waste_volume_milliliter), 0);
return waste_volume_milliliter;
}
@@ -578,13 +578,13 @@ bool waste_seq_cont()
case Open_Valve:
Set_WHS_valve(VOC_VALVE, OPEN, 0);
Write_WHS_Valve_reg();
- Report("------------ waste level procedure open -----------------", __FILE__, WasteAverageIndex, OpenClose, RpMessage, (int)(waste_level_ml), 0);
+ //Report("------------ waste level procedure open -----------------", __FILE__, WasteAverageIndex, OpenClose, RpMessage, (int)(waste_level_ml), 0);
OpenClose = Close_Valve;
break;
case Close_Valve:
Set_WHS_valve(VOC_VALVE, CLOSE, 0);
Write_WHS_Valve_reg();
- Report("------------ waste level procedure close ----------------", __FILE__, WasteAverageIndex, OpenClose, RpMessage, (int)(waste_level_ml), 0);
+ //Report("------------ waste level procedure close ----------------", __FILE__, WasteAverageIndex, OpenClose, RpMessage, (int)(waste_level_ml), 0);
OpenClose = Read_Waste;
break;
case Read_Waste:
@@ -607,7 +607,7 @@ bool waste_seq_cont()
WasteCounter = 0;
waste_level_ml = avg/8;
- Report("------------ Avg waste level in ml -----------------", __FILE__, WasteAverageIndex, OpenClose, RpMessage, (int)(waste_level_ml), 0);
+ Report("------------ Avg waste level in ml -----------------", __FILE__, WasteAverageIndex, avg, RpMessage, (int)(waste_level_ml), 0);
}
return status;
}
@@ -673,7 +673,7 @@ bool waste_seq_step1_cont()
Trigger_SetWHS_VOC_Valve(OPEN);
- //WasteControlId = AddControlCallback(NULL, Trigger_ReadWHS_WasteContinouos, WASTE_PROCESS_TIME, TemplateDataReadCBFunction,0,0, 0 );
+ WasteControlId = AddControlCallback(NULL, Trigger_ReadWHS_WasteContinouos, WASTE_PROCESS_TIME, TemplateDataReadCBFunction,0,0, 0 );
Report("------------ waste_seq_step1_cont -----------------", __FILE__, __LINE__, WasteControlId, RpMessage, 0, 0);
return status;
@@ -704,7 +704,7 @@ bool waste_seq_step1()
WasteCounter = 0;
OpenClose = CLOSE;
- ReportWithPackageFilter(WasteFilter,"------------ open waste level Air valve -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ Report("------------ open waste level Air valve -----------------", __FILE__, __LINE__, WHS_Eeprom.bytes.Orifice_Waste_Level_V0_ml, RpMessage, 0, 0);
Trigger_SetWHS_VOC_Valve(OPEN);
ReportWithPackageFilter(WasteFilter,"------------ wait 1 second -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
index 3f50f9898..92f24e083 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c
@@ -469,6 +469,7 @@ bool WHS_Set_Blower_Control_Closed_Loop(double Q_value)
Valve_Set(IDS_Id_to_AirValve[midtank_cleared], Atm_MidTank_ON ); //Atm_MidTank_OFF/ON
Valve_Set(IDS_Id_to_CartrideValve[midtank_cleared], Atm_MidTank_ON ); //Atm_MidTank_OFF/ON
}
+ return OK;
}
else
{
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
index 356f192a3..1c2b6662d 100644
--- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
+++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
@@ -652,6 +652,9 @@ JobEndReasonEnum getEndReason(uint32_t AlarmId)
usnprintf(AlarmReasonStr, 100, "Alarm %d type %d caused a job stop",AlarmId,AlarmItem[AlarmId].EventType);
return JOB_OTHER_ALARM;
}
+ case ALARM_SOURCE_TYPE__FluidLevelAlarm:
+ usnprintf(AlarmReasonStr, 100, "Midtank %d is empty",AlarmItem[AlarmId].DeviceId);
+ return JOB_OUT_OF_DYE;
default:
usnprintf(AlarmReasonStr, 100, "Alarm %d type %d caused a job stop",AlarmId,AlarmItem[AlarmId].EventType);
return JOB_OTHER_ALARM;
@@ -993,6 +996,8 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob)
if (FoundReason != JOB_OK)
{
JobEndReason = getEndReason(AlarmId);
+ if (JobEndReason!=FoundReason)
+ ReportWithPackageFilter(AlarmFilter,"end reason mismatch!!!", __FILE__,AlarmId,JobEndReason, RpMessage, FoundReason, 0);
//AbortJob(AlarmReasonStr);
//PrepareReady(Module_Alarms,ModuleFail);
ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,__LINE__,AlarmId, RpMessage, DEBUG_LOG_CATEGORY__Error, 0);
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
index 5f9c3130b..4ad5336d9 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
@@ -43,6 +43,7 @@
#include "modules/thread/thread_ex.h"
#include "modules/ifs/ifs.h"
#include "modules/ids/ids_ex.h"
+#include "modules/waste/waste_ex.h"
#include "modules/Diagnostics/Diagnostics.h"
#include "Modules/General/MachineStatus.h"
@@ -658,7 +659,6 @@ uint32_t MillisecLowLoop(uint32_t tick)
#ifndef EVALUATION_BOARD
Read_Buttons_Reg();
#endif
- //Ink_Cart_Led();
///////////////////////////////////////////////////////////////////
@@ -766,6 +766,8 @@ uint32_t MillisecLowLoop(uint32_t tick)
}
*/
}
+ //call waste state machine
+ Waste_StateMachine_OneSecond_Call();
}
if (Tensecond_Tick)
{
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c
index 0f9848ba1..26fba0194 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/control.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c
@@ -170,6 +170,7 @@ void ControlStop(void)
ControlRestart = false;
ADCAcquireStop();
}
+int FPGA_ReInit_Count = 0; ///avoid too many reinitializations of motors as happens when FPGA is corrupted
uint32_t ControlActivityLed( uint32_t Parameter1)
{
static bool flag = false;
@@ -192,11 +193,14 @@ uint32_t ControlActivityLed( uint32_t Parameter1)
SendJobProgress(0.0,0,false, "Hardware Failure Error");
AbortJob("FPGA Watchdog Error");
}
- ReportWithPackageFilter(FPGAFilter, "FPGA Watchdog Error",__FILE__,__LINE__,0,RpError, 0,0);
+ if (FPGA_ReInit_Count++<20)
+ {
+ ReportWithPackageFilter(FPGAFilter, "FPGA Watchdog Error",__FILE__,__LINE__,0,RpError, 0,0);
- ACTIVITY_GREEN_LED_ON;
- FPGA_SetMotorsInit();
- Motor_ReconfigAllMotors();
+ ACTIVITY_GREEN_LED_ON;
+ FPGA_SetMotorsInit();
+ Motor_ReconfigAllMotors();
+ }
}
}
else
diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
index 849d1cd9b..8e01fe18e 100644
--- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
+++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c
@@ -115,7 +115,7 @@ double dispenserinklevel[MAX_SYSTEM_DISPENSERS][1];
double midtankinklevel[MAX_SYSTEM_DISPENSERS][1];
double MidTankpressure[MAX_SYSTEM_DISPENSERS][1];
double HeadFlowMeter;
-double tempFlow = 0.0;
+//double tempFlow = 0.0;
double DrierFlowMeter;
double AcVoltage;
double WasteLevel = 0.0;
@@ -819,11 +819,11 @@ void DiagnosticOneMinuteCollection(void)
DiagnosticsMonitor.dryerairflow = &DrierFlowMeter;
HeadFlowMeter = GetWHSAirFlow(HEAD_FLOW_METER);
- if (fabs(tempFlow - HeadFlowMeter)>0.05)
+ /*if (fabs(tempFlow - HeadFlowMeter)>0.05)
{
Report("Head flow change 1m",__FILE__,(int)diagvoltage,(int)(tempFlow*1000),RpWarning,(int)(HeadFlowMeter*1000),0);
tempFlow = HeadFlowMeter;
- }
+ }*/
DiagnosticsMonitor.n_headairflow = 1;
DiagnosticsMonitor.headairflow = &HeadFlowMeter;
@@ -858,11 +858,11 @@ void DiagnosticOneSecCollection(void)
HeadFlowMeter = GetWHSAirFlow(HEAD_FLOW_METER);
DiagnosticsMonitor.n_headairflow = 1;
DiagnosticsMonitor.headairflow = &HeadFlowMeter;
- if (fabs(tempFlow - HeadFlowMeter)>0.25)
+ /*if (fabs(tempFlow - HeadFlowMeter)>0.25)
{
Report("Head flow change 1s",__FILE__,(int)diagvoltage,(int)(tempFlow*1000),RpWarning,(int)(HeadFlowMeter*1000),0);
tempFlow = HeadFlowMeter;
- }
+ }*/
WasteLevel = GetWHSWasteTankLevelMiliLiter()/1000;//change from ml to litter
static double InitCounter = 0;
if (GetMachineState()<MACHINE_STATE_NO_PROCESS_PARAMS)
diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
index 6d4d1c668..27ed8d0e9 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
@@ -165,8 +165,12 @@ uint32_t HWConfigurationInit(void)
#ifndef DISPESER_TEST
if (WHS_Type == WHS_TYPE_NEW)
newWHS_init();
- WHS_init();
+ //WHS_init(); // remove call to old WHS
#endif
+
+ // Waste Init (WHS)
+ Waste_Init();
+
ADC_MUX_Init();
GeneralHwReady = true;
@@ -554,7 +558,6 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest)
}
ControlStart();
AlarmHandlingStart();
- //ThreadInitialTestStub(request);
GeneralHwReady = true;
STATUS_RED_LED_OFF;
return OK;
diff --git a/Software/Embedded_SW/Embedded/Modules/General/Safety.c b/Software/Embedded_SW/Embedded/Modules/General/Safety.c
index 400b083e4..89ac8d020 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/Safety.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/Safety.c
@@ -46,7 +46,7 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag)
bool mDrierDoorAlarmState = false;
bool mAirFlowAlarmState = false;
bool mAirFilterAlarmState = false;
- bool mWasteOverflowAlarmState = false;
+ //bool mWasteOverflowAlarmState = false;
#ifdef CONTROL_DEBUG
uint32_t tempp,tempq,delta;
uint32_t sys_ticks_start = msec_millisecondCounter,sys_ticks_end,max = 0,dev = 0;
@@ -91,16 +91,6 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag)
mDrierDoorAlarmState = true;
DrierDoorAlarmState = true;
}
- else
- {
- //if (WHS_GPI_WASTE_OVERFULL()) - cannot read this switch
- {
- //report and handle waste overflow
- AlarmHandlingSetAlarm(EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, true);
- mWasteOverflowAlarmState = true;
- WasteOverflowAlarmState = true;
- }
- }
}
}
@@ -234,12 +224,6 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag)
AlarmHandlingSetAlarm(EVENT_TYPE__AIR_FILTER_NOT_INSTALLED, false);
AirFilterAlarmState = mAirFilterAlarmState;
}
- if ((mWasteOverflowAlarmState != WasteOverflowAlarmState)|| (mWasteOverflowAlarmState == false))
- {
- //alarm went off
- AlarmHandlingSetAlarm(EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, false);
- WasteOverflowAlarmState = mWasteOverflowAlarmState;
- }
#ifdef CONTROL_DEBUG
tempq = HibernateRTCSSGet();
if (tempq < tempp)
diff --git a/Software/Embedded_SW/Embedded/Modules/General/buttons.c b/Software/Embedded_SW/Embedded/Modules/General/buttons.c
index f81cfb88f..328ff3203 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/buttons.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/buttons.c
@@ -691,34 +691,6 @@ return OK;
return OK;
}*/
-void Ink_Cart_Led()//temporary for ITMA
-{
- if(Is_Cartridge_Present(CART_1) == true)
- {
- Pannel_Leds( CART_1, MODE_ON);
- }
- else
- {
- Pannel_Leds( CART_1, MODE_OFF);
- }
- if(Is_Cartridge_Present(CART_2) == true)
- {
- Pannel_Leds( CART_2, MODE_ON);
- }
- else
- {
- Pannel_Leds( CART_2, MODE_OFF);
- }
- if(Is_Cartridge_Present(CART_3) == true)
- {
- Pannel_Leds( CART_3, MODE_ON);
- }
- else
- {
- Pannel_Leds( CART_3, MODE_OFF);
- }
-}
-
void test_avi()
{
diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.c b/Software/Embedded_SW/Embedded/Modules/General/process.c
index 968522e48..bf7d761dd 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/process.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/process.c
@@ -200,6 +200,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
}
if(Head_Type != HEAD_TYPE_STAPLE_SPUN)
{
+ Trigger_HeaterWriting();
if (ProcessParams->headzone4temp>1)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, true,ProcessParams->headzone4temp);
@@ -239,6 +240,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, false,ProcessParams->headzone7temp);
}
+ Trigger_HeaterWriting();
if (ProcessParams->headzone8temp>1)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, true,ProcessParams->headzone8temp);
@@ -263,6 +265,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, false,ProcessParams->headzone10temp);
}
+ Trigger_HeaterWriting();
if (ProcessParams->headzone11temp>1)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, true,ProcessParams->headzone11temp);
@@ -282,6 +285,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
}
if(Head_Type == HEAD_TYPE_STAPLE_SPUN)
{
+ Trigger_HeaterWriting();
if (ProcessParams->rblowertemp>1)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, true,ProcessParams->rblowertemp);
@@ -290,6 +294,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, false,ProcessParams->rblowertemp);
}
+ Trigger_HeaterWriting();
if (ProcessParams->lblowertemp>1)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, true,ProcessParams->lblowertemp);
@@ -298,6 +303,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData)
{
status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, false,ProcessParams->lblowertemp);
}
+ Trigger_HeaterWriting();
Trigger_Head_Fan_Control(HEAD_FAN_RIGHT,ProcessParams->rblowerflow);
Trigger_Head_Fan_Control(HEAD_FAN_LEFT,ProcessParams->lblowerflow);
}
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
index 309eada85..73da7924b 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
@@ -1110,6 +1110,7 @@ uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue)
}
return ERROR;
}
+bool IncreaseBlower = false;
uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
{
int index=HEATER_TYPE_MAX_HEATERS;
@@ -1259,23 +1260,29 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
ReportWithPackageFilter(HeatersFilter,"AC Ready",__FILE__,index,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0);
HeaterAtTemp[index] = true;
HeaterPrepareReady();
+ IncreaseBlower = false;
}
}
if ( (readValue > (HeaterCmd[index].targettemperatue * ((100-HeaterControl[index].outputproportionalband+2)/100)))
&& (readValue < (HeaterCmd[index].targettemperatue * ((100+HeaterControl[index].outputproportionalband)/100))))
{
- if (BlowerCfg.enabled == true)
+ if (IncreaseBlower == false)
{
- if(Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD)
- {
- WHS_Set_SetPoint_Q_value(headairflow);
- }
- else
+ IncreaseBlower = true;
+ if (BlowerCfg.enabled == true)
{
- Turn_the_Blower_On();//Turn on with the Default_Voltage
- if (BlowerCfg.voltage)
- Control_Voltage_To_Blower(BlowerCfg.voltage);
+ if(Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD)
+ {
+ WHS_Set_SetPoint_Q_value(headairflow);
+ }
+ else
+ {
+ Turn_the_Blower_On();//Turn on with the Default_Voltage
+ if (BlowerCfg.voltage)
+ Control_Voltage_To_Blower(BlowerCfg.voltage);
+ }
}
+
}
}
if(HeaterPIDConfig[index].m_isEnabled && (HeaterPIDConfig[index].m_SetParam != 0))
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h
index 41e729b9b..647797b69 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h
@@ -28,6 +28,9 @@ extern uint32_t DispenserIdToMotorId[MAX_SYSTEM_DISPENSERS];
extern bool HomingActive[MAX_SYSTEM_DISPENSERS];
extern bool PrimingActive[MAX_SYSTEM_DISPENSERS];
+extern uint32_t LeftRockerSpeed;
+extern uint32_t RightRockerSpeed;
+
uint32_t IDS_Dispenser_EmptyCBFunction(uint32_t IfIndex, uint32_t ReadValue);
/*typedef struct
@@ -45,6 +48,7 @@ void IDS_Dispenser_RefillEnded (char DispenserId,char MicroSteps);
//uint32_t IDS_Dispenser_Build_Pressure(int DispenserId, callback_fptr callback);
+uint32_t IDS_Cleaning_Move_Actuators(void);
uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed);
uint32_t IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callback);
uint32_t IDS_Cleaning_Spray_Cleaning_Solution (int dispenserSpeed,callback_fptr callback);
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c
index bdde05b43..8f10a0e5d 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c
@@ -13,11 +13,73 @@
#include "PMR/Hardware/Hardwaremotor.pb-c.h"
#include "PMR/Hardware/HardwareDispenser.pb-c.h"
#include "StateMachines/Printing/printingSTM.h"
+#include <Drivers/I2C_Communication/I2C_Task.h>
+
#include "drivers/motors/motor.h"
#include "drivers/valves/valve.h"
+#include "Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h"
int SaveLeftRockerSpeed = 50, SaveRightRockerSpeed = 50;
+typedef enum
+{
+ CleaningStageIdle,
+ CleaningStageActuatorUp = 1,
+ CleaningStageDelay1,
+ CleaningStageActuatorDown,
+ CleaningStageDelay2,
+}CleaningStageEnum;
+
+/*
+ *Cleaning sequence:
+
+
+t up – time actuator goes up
+t delay1 – time actuator stays in position (up position – not limit switch)
+Down to limit - actuator goes to lower limit switch
+t delay2 – time actuator stays in lower limit switch position
+
+Values for start:
+t up – 300 msec
+t delay1 – 500 msec
+t delay2 – 2 sec
+
+ */
+
+CleaningStageEnum CleaningStage = CleaningStageIdle;
+int CleaningStageCounter = 0;
+int Tup = 4,Tdelay1 = 9,Tdelay2 = 29;
+
+uint32_t IDS_Cleaning_Move_Actuators()
+{
+ if(Head_Type != HEAD_TYPE_SYLKO)
+ return OK;
+ if (CleaningStageCounter == 1)
+ {
+ Trigger_Head_Actuators_Control(ACTIN, LOW,true);
+ Report("IDS_Cleaning_Move_ActuatorUp", __FILE__, __LINE__, 1, RpWarning, CleaningStageCounter, 0);
+ }
+ else if (CleaningStageCounter == Tup)
+ {
+ Trigger_Head_Actuators_Disable();
+ Report("IDS_Cleaning_Stop_Actuator", __FILE__, __LINE__, Tup, RpWarning, CleaningStageCounter, 0);
+ }
+ else if (CleaningStageCounter == Tdelay1)
+ {
+ Trigger_Head_Actuators_Control(ACTIN, LOW,false);
+ Report("IDS_Cleaning_MoveDown", __FILE__, __LINE__, Tdelay1, RpWarning, CleaningStageCounter, 0);
+ }
+ else if (CleaningStageCounter == Tdelay2)
+ {
+ CleaningStageCounter = 0;
+ Report("IDS_Cleaning_Stop_delay", __FILE__, __LINE__, Tdelay2, RpWarning, CleaningStageCounter, 0);
+ }
+
+
+ CleaningStageCounter++;
+
+ return OK;
+}
uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed)
{
uint32_t status = OK;
@@ -34,17 +96,25 @@ uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed)
uint32_t IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callback)
{
uint32_t status = OK;
- status |= MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD].directionthreadwize, SaveRightRockerSpeed, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD], callback,timeout);
- status |= MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH].directionthreadwize, SaveLeftRockerSpeed, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH], callback,timeout);
- Report("IDS_Cleaning_Center_And_Stop_Rockers", __FILE__, __LINE__, timeout, RpWarning, 123456, 0);
+ //status |= MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD].directionthreadwize, SaveRightRockerSpeed, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD], callback,timeout);
+ //status |= MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH].directionthreadwize, SaveLeftRockerSpeed, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH], callback,timeout);
+ Trigger_Head_Actuators_Disable();
+ Trigger_Head_Actuators_Control(ACTIN, LOW,false);
+ CleaningStageCounter = 0;
+ CleaningStage = CleaningStageIdle;
+ Report("IDS_Cleaning_Center_And_Stop_Rockers actuator down", __FILE__, __LINE__, timeout, RpWarning, 123456, 0);
return status;
}
uint32_t IDS_Cleaning_Spray_Cleaning_Solution (int dispenserSpeed,callback_fptr callback)
{
uint32_t status = OK;
+ Tup = LeftRockerSpeed/100;
+ Tdelay1 = LeftRockerSpeed%100;
+ Tdelay2 = RightRockerSpeed;
status = IDS_Dispenser_Start_Motor_and_Open_Valve(CLEANER_DISPENSER, dispenserSpeed, callback);
Report("IDS_Cleaning_Spray_Cleaning_Solution", __FILE__, __LINE__, CLEANER_DISPENSER, RpWarning, dispenserSpeed, 0);
+ Report("IDS_Cleaning parameters", __FILE__, Tup*100, Tdelay1*100, RpWarning, Tdelay2*100, 0);
return status;
@@ -54,6 +124,11 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback)
uint32_t status = OK;
status = IDS_Dispenser_Close_Valve_And_Stop_Motor(CLEANER_DISPENSER,callback);
Report("IDS_Cleaning_Stop_Cleaning_Solution", __FILE__, __LINE__, CLEANER_DISPENSER, RpWarning, status, 0);
+ if(Head_Type == HEAD_TYPE_SYLKO)
+ {
+ Trigger_Head_Actuators_Control(ACTIN, LOW,false);
+ Report("IDS_Cleaning_MoveDown cleaning stop", __FILE__, __LINE__, Tdelay1, RpWarning, CleaningStageCounter, 0);
+ }
return status;
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
index b3f21e187..831fa18cd 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
@@ -45,6 +45,8 @@ extern DispenserRunningData IDS_Dispenser_Data[MAX_SYSTEM_DISPENSERS];
//extern DispenserData IDSDispenserData;
extern DispenserRunningData **dispenserdata;
+extern bool ActuatorsCleaningSequence;
+
extern bool DispenserUsedInJob[MAX_SYSTEM_DISPENSERS];
extern int32_t CurrentDispenserSpeed[MAX_SYSTEM_DISPENSERS];
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
index a76453f95..b4442c996 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
@@ -51,6 +51,7 @@ HardwarePidControlType ThreadDispenserIdToControlId[MAX_SYSTEM_DISPENSERS] = {
JobUploadStrategy uploadstrategy = JOB_UPLOAD_STRATEGY__Default;
bool DispenserReady[MAX_SYSTEM_DISPENSERS] = {true};
bool IDS_Active = false;
+bool ActuatorsCleaningSequence = true;
bool Special_Dispensers = false;
/******************** STRUCTURES AND ENUMs ********************************************/
@@ -78,7 +79,7 @@ int lInterSegmentLength = 0;
uint32_t InterSegmentStartRocking = 0;
uint32_t InterSegmentCenterRockers = 0;
uint32_t LeftRockerSpeed = 20;
- uint32_t RighttRockerSpeed = 20;
+ uint32_t RightRockerSpeed = 20;
uint32_t CleaningDispenserSpeed = 40;
uint32_t InterSegmentStartWFCFDispensers;
uint32_t WFCF = 80;
@@ -115,7 +116,7 @@ void IDS_Dispenser_SetPreSegmentWFCFValues(double dispenserpresegmentwfcf, doubl
if ( ids_leftcleaningmotorspeed)
LeftRockerSpeed = ids_leftcleaningmotorspeed;
if ( ids_rightcleaningmotorspeed)
- RighttRockerSpeed = ids_rightcleaningmotorspeed;
+ RightRockerSpeed = ids_rightcleaningmotorspeed;
Report("IDS_Dispenser_SetPreSegmentCleaningValues ",__FILE__,__LINE__,CleaningDispenserSpeed,RpWarning,(int)LeftRockerSpeed,0);
Report("IDS_Dispenser_SetPreSegmentCleaningValues ",__FILE__,__LINE__,InterSegmentStartSprayCleaner,RpWarning,(int)InterSegmentCenterRockers,0);
@@ -1089,6 +1090,12 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback);
Report("Start cleaning rockers",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0);
//IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed);
}*/
+ if (( InterSegmentStartSprayCleaner )&&
+ ((InterSegmentStepsCount>InterSegmentStartSprayCleaner)&&(InterSegmentStepsCount<(lInterSegmentLength-InterSegmentCenterRockers) )))
+ {
+ if (ActuatorsCleaningSequence)
+ IDS_Cleaning_Move_Actuators();
+ }
if (( InterSegmentCenterRockers)&&(InterSegmentCenterRockers == (lInterSegmentLength-InterSegmentStepsCount)))
{
Report("Stop spray and center rockers",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0);
diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
index cbdab01d1..4a7008a7a 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
@@ -31,6 +31,7 @@
#include "Modules/Control/MillisecTask.h"
#include "modules/thread/thread_ex.h"
#include "modules/heaters/heaters_ex.h"
+#include "modules/waste/waste_ex.h"
#include <Drivers/I2C_Communication/I2C.h>
#include <Drivers/I2C_Communication/Head_Card/I2C_Head_Mux.h>
#include "Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h"
@@ -500,6 +501,30 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
response.has_progress = true;
}
else
+ if(request->amount == 0xAD6) //Set skip open lids
+ {
+ LOG_ERROR(request->delay,"Set SkipOpenLids");
+ SkipOpenLids = request->delay;
+ response.progress = SkipOpenLids;
+ response.has_progress = true;
+ }
+ else
+ if(request->amount == 0xAD7) //Set actuators cleaning sequence
+ {
+ LOG_ERROR(request->delay,"Set actuators cleaning sequence");
+ ActuatorsCleaningSequence = request->delay;
+ response.progress = ActuatorsCleaningSequence;
+ response.has_progress = true;
+ }
+ else
+ if(request->amount == 0xAD8) //Set ignore cone missing
+ {
+ LOG_ERROR(request->delay,"Set ignore cone missing");
+ IgnoreConeMissing = request->delay;
+ response.progress = IgnoreConeMissing;
+ response.has_progress = true;
+ }
+ else
if((request->amount == 0x01) && ((request->delay &0x010000) == 0x010000)) //change mode powerset01
{
response.progress = Power_Step_01_Mode(((request->delay &0x00FF00)>>8), request->delay &0x0000FF);
@@ -1016,6 +1041,16 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
}
else
+ if(request->amount == 0xB8) //fast refresh for pressure
+ {
+ if (request->delay == 1) {//init waste
+ Waste_Init();
+ LOG_ERROR(request->delay,"Waste_Init");
+ }
+ response.progress = request->delay;
+ response.has_progress = true;
+ }
+ else
if(request->amount == 0xC3) //suspend I2C task
{
if (request->delay == 0)
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h
index d1d23598f..3a7045a6e 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h
@@ -76,7 +76,6 @@ extern int MotorSpeedSamplePointer[MAX_THREAD_MOTORS_NUM];
uint32_t InternalWinderConfigMessage(HardwareWinder* request);
uint32_t MotorsConfigMessage( HardwareConfiguration* HW_request);
uint32_t InternalWindingConfigMessage(JobSpool* request);
-uint32_t ThreadInitialTestStub(HardwareMotor * request);
uint32_t MotorPidRequestMessage(HardwarePidControl* request);
void SetKeepWindingCone(bool value);
void SetWinderBackToBaseTime(uint32_t value);
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
index 965ea30da..f5bc45d85 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
@@ -204,6 +204,7 @@
strcpy(LoadErrorMsg,"Thread_Load_Reduce_Heat failed");
LoadStatus = ERROR;
TryAgain = true;
+ //ThreadLoadButton(LoadStages);
}
else
{
@@ -300,6 +301,7 @@
LoadStatus = ERROR;
ThreadLoadingReport();
TryAgain = true;
+ //ThreadLoadButton(LoadStages);
}
else
{
@@ -544,6 +546,7 @@
LoadStatus = ERROR;
ThreadLoadingReport();
TryAgain = true;
+ //ThreadLoadButton(LoadStages);
}
}
@@ -647,6 +650,7 @@
Report("Total Feeder load",__FILE__,__LINE__,dryerbufferCentimeters,RpMessage,TotalLoadedLen,0);
ThreadLoadingReport();
+ //ThreadLoadButton(LoadStages);
}
return OK;
}
@@ -857,13 +861,14 @@
LoadStatus = ERROR;
TryAgain = true;
ThreadLoadingReport();
+ //ThreadLoadButton(LoadStages);
}
return OK;
}
uint32_t Thread_Load_Dryer_UnLoading(void)
{
uint32_t temp;
- REPORT_MSG(LoadStages, "Thread UnLoad State Machine step");
+ REPORT_MSG(LoadStages, "Thread Load State Machine step Dryer Unloading");
//LoadArmRounds = 0;
//uint32_t numberOfSteps = 0;
//Start Feeder Pid, Rotate Loading Arm Counter Thread Direction X Circles According To Rml. Feeder Speed Is 40
@@ -971,7 +976,7 @@
uint32_t ThreadLoadStateMachine( THREAD_LOAD_STAGES_ENUM ReadValue)
{
REPORT_MSG(ReadValue,"ThreadLoadStateMachine");
- ThreadLoaded();
+ //ThreadLoaded();
ThreadLoadingReport();
if (LoadStages!=ReadValue)
@@ -1089,7 +1094,7 @@ uint32_t ThreadLoadButton(THREAD_LOAD_STAGES_ENUM ReadValue)
Report("Calling State machine",__FILE__,LoadStages,LoadStatus,RpMessage,SecondTry,0);
ThreadLoadStateMachine(LoadStages);
}
- else
+ else if (SecondTry == true)
{
SecondTry = false;
Report("Calling State machine",__FILE__,LoadStages,LoadStatus,RpMessage,SecondTry,0);
@@ -1258,7 +1263,7 @@ uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
}
bool ThreadLoaded(void)
{
- uint32_t ReadValue;
+ /* uint32_t ReadValue;
int32_t PoolerValue,WinderValue,FeederValue;
//this function tests if there is a thread in the machine. all dancers are in lowermost position then there is no thread.
@@ -1280,7 +1285,7 @@ bool ThreadLoaded(void)
Report("Thread is out",__FILE__,(-1*PoolerValue),(-1*WinderValue),RpWarning,(-1*FeederValue),0);
return true;
}
- else
+ else*/
return false;
}
void ThreadLoadRequest(MessageContainer* requestContainer)
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
index 80ca05cb7..92b953db5 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
@@ -54,7 +54,7 @@ double ScrewRunningTime = 0;
uint32_t ScrewNumberOfSteps = 0; //holds the current number of steps for the next screw run - will be used to build the cone
bool SCREW_TimerActivated = false;
uint32_t ScrewControlId = 0xFF;
-
+bool IgnoreConeMissing = false;
static bool KeepWindingCone = false;
@@ -156,10 +156,13 @@ uint32_t Winder_Prepare(void *JobDetails)
REPORT_MSG(LIMIT, "No cone in winder");
if (Is_PP_Machine())
{
- JobEndReason = JOB_THREAD_BREAK;
- PrepareReady(Module_Winder,ModuleFail);
- AlarmHandlingSetAlarm(EVENT_TYPE__WINDER_CONE_DOES_NOT_EXIST,true);
- return ERROR;
+ if (IgnoreConeMissing == false)
+ {
+ JobEndReason = JOB_THREAD_BREAK;
+ PrepareReady(Module_Winder,ModuleFail);
+ AlarmHandlingSetAlarm(EVENT_TYPE__WINDER_CONE_DOES_NOT_EXIST,true);
+ return ERROR;
+ }
}
}
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h
index 4081b53f2..4339c5312 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h
@@ -24,6 +24,7 @@ typedef enum threadMotorsEnum
extern double TotalProcessedLength;
extern double PoolerTotalProcessedLength;
extern int SecondFeederCorrection;
+extern bool SkipOpenLids,IgnoreConeMissing;
void ThreadSetBreakSensorLimit(int limit);
@@ -37,7 +38,6 @@ uint32_t ThreadPreSegmentState(void *SegmentDetails, uint32_t SegmentId);
uint32_t ThreadSegmentState(void *SegmentDetails, int SegmentId);
uint32_t ThreadDistanceToSpoolState(void);
uint32_t ThreadEndState();
-uint32_t ThreadInitialTestStub();
bool Set_Thread_Rockers_Bypass (int value);
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c
index 760a0726b..e1f887303 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c
@@ -112,8 +112,6 @@ uint32_t MotorsConfigMessage(HardwareConfiguration * HWrequest)
{
IDS_Dispenser_Init(Motor_i-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1);
}
-// if (Motor_i == MOTOR_RDRIVING)
-// ThreadInitialTestStub(request);
}
return status;
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
index c27725b68..42a56ae8a 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
@@ -217,7 +217,7 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue)
}
}
- FeederSpeedStore[FeederSpeedIndex++] = length;
+ /*FeederSpeedStore[FeederSpeedIndex++] = length;
if (FeederSpeedIndex>=SPEED_STORE_SIZE)
{
FeederSpeedIndex = 0;
@@ -225,8 +225,8 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue)
for (Speed_i = 0;Speed_i<SPEED_STORE_SIZE;Speed_i++)
FeederSpeedAverage+=FeederSpeedStore[Speed_i];
FeederSpeedAverage = FeederSpeedAverage/SPEED_STORE_SIZE;
- ReportWithPackageFilter(ThreadFilter,"Average Speed 2 second",__FILE__,__LINE__,(int)(FeederSpeedAverage*100),RpWarning,(int)(PullerSpeedAverage*100),0);
- }
+ ReportWithPackageFilter(ThreadFilter,"Avg len 100ms last 2 sec",__FILE__,(int)PoolerTotalProcessedLength,(int)(FeederSpeedAverage*1000),RpWarning,(int)(PullerSpeedAverage*1000),0);
+ }*/
TotalProcessedLength += (length/100);
TempTotalProcessedLength = TotalProcessedLength;
#ifdef FEEDER_LENGTH_CALCULATION
@@ -317,7 +317,7 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue)
length = 0;
}
- PullerSpeedStore[PullerSpeedIndex++] = length;
+ /*PullerSpeedStore[PullerSpeedIndex++] = length;
if (PullerSpeedIndex>=SPEED_STORE_SIZE)
{
PullerSpeedIndex = 0;
@@ -326,7 +326,7 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue)
PullerSpeedAverage+=PullerSpeedStore[Speed_i];
PullerSpeedAverage = PullerSpeedAverage/SPEED_STORE_SIZE;
//ReportWithPackageFilter(ThreadFilter,"Average Speed 2 second",__FILE__,__LINE__,(int)(FeederSpeedAverage*100),RpWarning,(int)(PullerSpeedAverage*100),0);
- }
+ }**/
//}
@@ -423,7 +423,67 @@ uint32_t ThreadControlSpeedReadFunction(uint32_t IfIndex, uint32_t ReadValue)
}
return OK;
}
+uint16_t BreakSensorCounter = 0;
+uint16_t BreakSensorLatchCounter = 0;
+char TMessage[150];
+
+uint32_t checkBreakSensor(uint32_t index)
+{
+ if (BreakSensorenabled == true)
+ {
+ if (JobCounter > eOneSecond)
+ {
+ if (ReadBreakSensor()==ERROR)
+ {
+ BreakSensorCounter++;
+ BreakSensorLatchCounter++;
+ if (BreakSensorCounter>=BreakSensordebouncetimemilli)
+ {
+ //consider applying the debouce parameters later
+ usnprintf(TMessage, 60, "ReadBreakSensor Error");
+ //BreakSensordebouncetimemilli
+ JobEndReason = JOB_THREAD_BREAK;
+ ThreadControlActive = false;
+ SendJobProgress(0.0,0,false, TMessage);
+ SendSegmentFail();
+ //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true);
+ //EndState(CurrentJob,"ReadBreakSensor Error" );
+ ReportWithPackageFilter(ThreadFilter,"ReadBreakSensor Error",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0);
+ return ERROR;
+ } //passed limit
+ }//ReadBreakSensor()==ERROR
+ else //reset counter - we are looking for consequent calls
+ {
+ if (BreakSensorCounter)
+ {
+ ReportWithPackageFilter(ThreadFilter,"ReadBreakSensor Spike",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0);
+ }
+ BreakSensorCounter = 0;
+ }
+ if (CurrentControlledSpeed[index] < (OriginalMotorSpd_2PPS[index]/3))
+ {
+ BreakSensorCounter++;
+ BreakSensorLatchCounter++;
+ if (BreakSensorCounter>=BreakSensordebouncetimemilli)
+ {
+ //consider applying the debouce parameters later
+ usnprintf(TMessage, 60, "thread speed too low");
+ JobEndReason = JOB_THREAD_BREAK;
+ ThreadControlActive = false;
+ SendJobProgress(0.0,0,false, TMessage);
+ SendSegmentFail();
+ //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true);
+ //EndState(CurrentJob,"ReadBreakSensor Error" );
+ ReportWithPackageFilter(ThreadFilter,"thread speed too low Error",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0);
+ return ERROR;
+ }
+ }
+
+ }
+ }
+ return OK;
+}
int controlIndex = 0;
bool keepdata = true;
int32_t KeepReadValue = 0;
@@ -477,10 +537,7 @@ void testDancersControl()
}
#endif
int MotorFailedSample[MAX_THREAD_MOTORS_NUM] = {0,0,0,0,0};
-char TMessage[150];
//char time[150];
-uint16_t BreakSensorCounter = 0;
-uint16_t BreakSensorLatchCounter = 0;
bool FirstCalcInJob = true;
uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
{
@@ -510,6 +567,11 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
}
index = IfIndex&0xFF;
+ if (index == POOLER_MOTOR) //move break sensor handling up to ensure handling even if tiing control is > 1 msec
+ {
+ if (checkBreakSensor(index) == ERROR)
+ return OK;
+ }
if (MotorTiming[index]>1)
{
MotorTimer[index]++;
@@ -571,61 +633,6 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
avreageSampleValue += MotorSamples[index][i];
avreageSampleValue = avreageSampleValue / (int)MotorsControl[index].pvinputfilterfactormode;
- if (BreakSensorenabled == true)
- {
- if (index == POOLER_MOTOR)
- {
- if (JobCounter > eOneSecond)
- {
- if (ReadBreakSensor()==ERROR)
- {
- BreakSensorCounter++;
- BreakSensorLatchCounter++;
- if (BreakSensorCounter>=BreakSensordebouncetimemilli)
- {
- //consider applying the debouce parameters later
- usnprintf(TMessage, 60, "ReadBreakSensor Error");
- //BreakSensordebouncetimemilli
- JobEndReason = JOB_THREAD_BREAK;
- ThreadControlActive = false;
- SendJobProgress(0.0,0,false, TMessage);
- SendSegmentFail();
- //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true);
- //EndState(CurrentJob,"ReadBreakSensor Error" );
- ReportWithPackageFilter(ThreadFilter,"ReadBreakSensor Error",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0);
- return OK;
- } //passed limit
- }//ReadBreakSensor()==ERROR
- else //reset counter - we are looking for consequent calls
- {
- if (BreakSensorCounter)
- {
- ReportWithPackageFilter(ThreadFilter,"ReadBreakSensor Spike",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0);
- }
- BreakSensorCounter = 0;
- }
- if (CurrentControlledSpeed[index] < (OriginalMotorSpd_2PPS[index]/3))
- {
- BreakSensorCounter++;
- BreakSensorLatchCounter++;
- if (BreakSensorCounter>=BreakSensordebouncetimemilli)
- {
- //consider applying the debouce parameters later
- usnprintf(TMessage, 60, "thread speed too low");
- JobEndReason = JOB_THREAD_BREAK;
- ThreadControlActive = false;
- SendJobProgress(0.0,0,false, TMessage);
- SendSegmentFail();
- //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true);
- //EndState(CurrentJob,"ReadBreakSensor Error" );
- ReportWithPackageFilter(ThreadFilter,"thread speed too low Error",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0);
- return OK;
- }
- }
-
- }
- }
- }
//Stop Execution if the dancer moves too much
if ((abs(avreageSampleValue)> DancerStopActivityLimit[index])&&(JobCounter > eOneSecond))
@@ -783,15 +790,6 @@ double ThreadGetMotorCalculatedError(int DancerId)
}
//********************************************************************************************************************
-uint32_t ThreadInitialTestStub(HardwareMotor * request)
-{
-
-
- //MotorsConfigMessage(request);
- ThreadPrepareState(request);
- ThreadPreSegmentState(request,0);
- return OK;
-}
uint32_t HandleJobThreadControlParameters(ThreadParameters* ThreadParams)
{
if (ThreadParams == NULL)
@@ -951,7 +949,8 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension)
return status;
}
//********************************************************************************************************************
- uint32_t ThreadPrepareState(void *JobDetails)
+bool SkipOpenLids = true;
+uint32_t ThreadPrepareState(void *JobDetails)
{
int Motor_i,i, HW_Motor_Id, Pid_Id;
JobTicket* JobTicket = JobDetails;
@@ -1016,22 +1015,30 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension)
//return ERROR;
}*/
- if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_LID]) == LIMIT)&&(JoggingJobActive == false))
+// if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_LID]) == LIMIT)&&(JoggingJobActive == false))
+ if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DH_LID]) != LIMIT)&&(JoggingJobActive == false))
{
if(Head_Type != HEAD_TYPE_STAPLE_SPUN)
{
ReportWithPackageFilter(ThreadFilter,"Dyeing head is wide open!!!",__FILE__,__LINE__,HARDWARE_MOTOR_TYPE__MOTO_DH_LID,RpError,LIMIT,0);
- JobEndReason = JOB_LIDS_OPEN;
- PrepareReady(Module_Thread,ModuleFail);
- return ERROR;
+ if (SkipOpenLids == false)
+ {
+ JobEndReason = JOB_LIDS_OPEN;
+ PrepareReady(Module_Thread,ModuleFail);
+ return ERROR;
+ }
}
}
- if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID]) == LIMIT)&&(JoggingJobActive == false))
+// if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID]) == LIMIT)&&(JoggingJobActive == false))
+ if ((FPGA_Read_limit_Switches(Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID]) != LIMIT)&&(JoggingJobActive == false))
{
ReportWithPackageFilter(ThreadFilter,"Dryer lid is wide open!!!",__FILE__,__LINE__,HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID,RpError,LIMIT,0);
- JobEndReason = JOB_LIDS_OPEN;
- PrepareReady(Module_Thread,ModuleFail);
- return ERROR;
+ if (SkipOpenLids == false)
+ {
+ JobEndReason = JOB_LIDS_OPEN;
+ PrepareReady(Module_Thread,ModuleFail);
+ return ERROR;
+ }
}
//start thread control for all motors
@@ -1057,6 +1064,8 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension)
MotorControlConfig[Motor_i].m_preError = 0;
MotorControlConfig[Motor_i].m_SetParam = 0;//need to update SetParams on presegment stage
+ HandleJobThreadControlParameters(JobTicket->threadparameters); //OVERRIDES CONFIGURATION PARAMETERS!!!
+
temp_dt = MotorControlConfig[Motor_i].m_params.dt/0.001;
MotorTiming[Motor_i] = (int)temp_dt;
if (MotorTiming[Motor_i])
@@ -1068,7 +1077,7 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension)
for (i = 0;i < (int)MotorsControl[Motor_i].pvinputfilterfactormode; i++)
{
//if (Motor_i == DRYER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled
- MotorSamples[Motor_i][i] = Control_Read_Dancer_Position(ThreadMotorIdToDancerId[Motor_i],0); //reset the samples value for control beginning
+ MotorSamples[Motor_i][i] = 0;
// else if ((Motor_i == POOLER_MOTOR)||(Motor_i == FEEDER_MOTOR))
// MotorSamples[Motor_i][i] = DancersCfg[ThreadMotorIdToDancerId[Motor_i]].zeropoint;
//MotorSpeedSamples[Motor_i][i] = 0;
@@ -1148,7 +1157,6 @@ uint32_t ThreadPrepare_Tension (int DancerId, double tension)
if (Motor_i == ThreadMotorIdToMotorId[DRYER_MOTOR]) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled
continue;
}
- HandleJobThreadControlParameters(JobTicket->threadparameters); //OVERRIDES CONFIGURATION PARAMETERS!!!
#ifdef TEST_PID_THREAD
testDancersControl();
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h
index 8b1378917..2fdd3a479 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h
@@ -1 +1,42 @@
+#ifndef WASTE_MAINT_H
+#define WASTE_MAINT_H
+
+typedef enum {
+ CartridgeStateOUT,
+ CartridgeStateIN,
+ CartridgeStateSELECTED,
+ CartridgeStateACTIVE,
+ CartridgeStateFULL
+}CartridgeStateEnum;
+
+typedef enum {
+ WasteCartridge_upper,
+ WasteCartridge_middle,
+ WasteCartridge_lower,
+ MaxWasteCartridges
+}WasteCartridgeEnum;
+
+typedef enum{
+ WasteTankStateIdle,
+ WasteTankStateFull,
+ WasteTankStateEmptying,
+ WasteTankStatePaused
+}WasteTankStateEnum;
+
+extern bool DoorState;
+/////////////////////////////// Cartridges //////////////////////////////////////
+void cartCART_INSERTED (WasteCartridgeEnum); //{called from polling function. validate, set state to IN)
+void cartCART_EXTRACTED(WasteCartridgeEnum); //{called from polling function. set state to out, if was ACTIVE – notify waste module)
+WasteCartridgeEnum cartSELECT_CART(void); //{ if there is no SELECTED cartridge select the first cartridge in IN state. If there is none, return -1}
+void cartFILLING_START(void); //{set state of SELECTED to ACTIVE}
+void cartFILLING_END(void); //{set state of ACTIVE to FULL}
+CartridgeStateEnum cartGetState (WasteCartridgeEnum);
+bool cartGetPresence (WasteCartridgeEnum CartId);
+bool cartCart_door();//Polled by polling function. Notify waste. Poll each 1 second. During active filling poll each 100msec
+
+void Waste_Init();
+void Waste_StateMachine(void);
+void Waste_StateMachine_OneSecond_Call(void);
+
+#endif
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c
index cf9fb3b7b..03ee73daf 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c
@@ -20,6 +20,7 @@
#include <Drivers/I2C_Communication/I2C_Task.h>
#include <Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h>
#include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h>
+#include <Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.h>
//
//#define CARTRIDGE_INK_TIMEOUT 60
//#define CARTRIDGE_INK_TIMEOUTx2 120
@@ -231,11 +232,11 @@ bool RdCartridgeParam(cartridge_name cart_name)
{
case waste_cartridge1:
WHS_info.cartridge_1.serial_number = temp_funcion; //to do
- WHS_info.cartridge_1.status = temp_funcion; // to do
+ WHS_info.cartridge_1.status = WasteEmpty; // to do
break;
case waste_cartridge2:
WHS_info.cartridge_2.serial_number = temp_funcion;
- WHS_info.cartridge_2.status = temp_funcion;
+ WHS_info.cartridge_2.status = WasteEmpty;
break;
case INK_cartridge:
ReadCartridgeData(cart_name);
@@ -313,6 +314,12 @@ U8 set_cartridge_2(U8 cartridge_status)
bool SetWastePump( bool power)
{
+ if ((IFS_Availability[1] == IFS_RECOGNIZED)&&(IFS_Availability[2] == IFS_RECOGNIZED)) //ifs installed -check cartridges
+ {
+ if ((WHS_WasteCartridgeLowerPresent() == false)&&(WHS_WasteCartridgeMiddlePresent() == false))
+ return ERROR;
+ }
+
/*
set the waste pump on/off
off - :
@@ -415,6 +422,29 @@ U8 CartridgeWasteFilling(bool status)
SetWasteLevelEmptyingLimit(GetWHSWasteTankLevelMiliLiter());
waste_seq_step1_cont();
}
+ switch (WHS_info.active_cartridge)
+ {
+ case waste_cartridge1:
+ Pannel_Leds( CART_2, MODE_ON); //set led color
+ cart2.color = BLINK;
+ ReportWithPackageFilter(WasteFilter,"------------ WHS waste_cartridge1 is used please replace it -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ break;
+ case waste_cartridge2:
+ Pannel_Leds( CART_3, MODE_ON); //set led color
+ cart3.color = BLINK;
+ ReportWithPackageFilter(WasteFilter,"------------ WHS waste_cartridge2 is used please replace it -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ break;
+ case no_waste_cartridge:
+ ReportWithPackageFilter(WasteFilter,"------------ !!!!!WHS No waste cartridge !!!!! -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ ReportWithPackageFilter(WasteFilter,"------------ !!!! WHS insert cartridge!!!! -----------------", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ SetWastePump(CLOSE);
+ //WHS_info.WHS_pump.time = 0;
+ AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, true);
+ ret = ERROR;
+ break;
+ default:
+ break;
+ }
ret=OK;
}
else // stop Waste cartridge filling
@@ -460,9 +490,9 @@ U8 CartridgeWasteFilling(bool status)
/* ------read waste tank sensors ----------- */
#define WASTE_CARTRIDGE_SIZE 1500
-#define WASTE_LEVEL_OVERFLOW 4000
-#define WASTE_LEVEL_FULL 3500
-#define WASTE_LEVEL_EMPTY 2100
+#define WASTE_LEVEL_OVERFLOW 2700
+#define WASTE_LEVEL_FULL 2300
+#define WASTE_LEVEL_EMPTY 900
double WasteLevelOverflow = WASTE_LEVEL_OVERFLOW;
double WasteLevelFull = WASTE_LEVEL_FULL;
double WasteLevelEmpty = WASTE_LEVEL_EMPTY;
@@ -727,7 +757,7 @@ bool WasteTankCBFunction()
ReportWithPackageFilter(WasteFilter,"------------ WHS, Cartridge cover open -------------", __FILE__, __LINE__, WHS_info.sttMachine, RpMessage, WHS_info.WHS_sensors.cartridge_cover, 0);//popup message :"Cartridge cover open" //todo
if ( WHS_info.WHS_pump.status == OPEN)
{
- CartridgeWasteFilling(CLOSE);
+ CartridgeWasteFilling(OFF);
pump_on_flag = OPEN;
}
@@ -759,12 +789,12 @@ bool WasteTankCBFunction()
}
else // CLOSE
{
- //if (WHS_info.sttMachine == WHS_full) CartridgeWasteFilling(OPEN);
+ if (WHS_info.sttMachine == WHS_full) CartridgeWasteFilling(ON);
SetActiveWastCartridge();
if (pump_on_flag == OPEN )
{
WHS_info.WHS_sensors.waste_tank_full_sensor = SENSORnotFULL; // todo
- // CartridgeWasteFilling(OPEN);
+ CartridgeWasteFilling(OPEN);
pump_on_flag = CLOSE;
}
IFS_info.Cartridge_Ink_device_Id = RemoveControlCallback(IFS_info.Cartridge_Ink_device_Id , WasteTankCBFunction );
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
index e69de29bb..099fc0c2e 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
@@ -0,0 +1,363 @@
+#include <Container.h>
+#include <DataDef.h>
+#include "include.h"
+#include "Modules/Control/control.h" // use for FPGA IO
+#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"//#include "FPGA_GPIO.h" // use for FPGA IO
+#include "drivers/Valves/Valve.h"
+#include "Common/report/report.h"
+#include "Modules/Waste/Waste_ex.h"
+#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
+#include "Drivers/I2C_Communication/RFID_NFC/logi-tag/LT_RFID.h"
+#include "Drivers/I2C_Communication/RFID_NFC/NFC.h"
+//#include <Utilities/RfidTagHandling.h>
+
+#include <PMR/Diagnostics/EventType.pb-c.h>
+#include "Modules/AlarmHandling/AlarmHandling.h"
+#include "StateMachines/Initialization/PowerOffSequence.h"
+#include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h"
+#include "CartridgeValidationRequest.pb-c.h"
+#include "CartridgeValidationResponse.pb-c.h"
+#include "Modules/General/buttons.h"
+#include "Modules/IFS/ifs.h"
+#include <Drivers/I2C_Communication/I2C_Task.h>
+#include <Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h>
+#include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h>
+
+bool DoorState = OPEN;
+uint32_t timeout_counter = 0;
+int wasteLevel = 0;
+WasteCartridgeEnum SelectedCard = MaxWasteCartridges;
+CartridgeStateEnum CartState[MaxWasteCartridges];
+uint32_t Cartridge_Cover_Control;
+button *CartLed[MaxWasteCartridges] = {0, &cart2, &cart3};
+WasteTankStateEnum WasteTankState = WasteTankStateIdle;
+
+#define WASTE_CARTRIDGE_SIZE 1500
+#define WASTE_LEVEL_OVERFLOW 2700
+#define WASTE_LEVEL_FULL 2300
+#define WASTE_LEVEL_EMPTY 900
+#define WASTE_EMPTING_TIMEOUT 1200
+double wasteLevelOverflow = WASTE_LEVEL_OVERFLOW;
+double wasteLevelFull = WASTE_LEVEL_FULL;
+double wasteLevelEmpty = WASTE_LEVEL_EMPTY;
+double wasteLevelOverFlow = WASTE_LEVEL_OVERFLOW;
+
+//#define WHS_DEBUG
+
+/////////////////////////////// Cartridges //////////////////////////////////////
+void Waste_StateMachine(void);
+void cartCART_INSERTED (WasteCartridgeEnum CartId)
+{
+ assert (CartId<MaxWasteCartridges);
+ if (CartState[CartId] != CartridgeStateOUT)
+ Report("Cartridges Cart inserted wrong state", __FILE__, __LINE__, CartId, RpMessage, CartState[CartId], 0);
+ CartState[CartId] = CartridgeStateIN;
+ CartLed[CartId]->color = colorON;
+
+ Report("Cartridges Cart inserted", __FILE__, __LINE__, CartId, RpMessage, CartState[CartId], 0);
+}
+void cartCART_EXTRACTED(WasteCartridgeEnum CartId) //{called from polling function. set state to out, if was ACTIVE – notify waste module)
+{
+ assert (CartId<MaxWasteCartridges);
+ if (CartState[CartId] == CartridgeStateOUT)
+ Report("Cartridges Cart extracted wrong state", __FILE__, __LINE__, CartId, RpMessage, CartState[CartId], 0);
+
+ Report("Cartridges Cart extracted", __FILE__, __LINE__, CartId, RpMessage, CartState[CartId], 0);
+ CartState[CartId] = CartridgeStateOUT;
+ CartLed[CartId]->color = colorOFF;
+
+}
+WasteCartridgeEnum cartSELECT_CART(void) //{ if there is no SELECTED cartridge select the first cartridge in IN state. If there is none, return -1}
+{
+ Report("Cartridges select cart", __FILE__, __LINE__, CartState[WasteCartridge_middle], RpMessage, CartState[WasteCartridge_lower], 0);
+ if ((CartState[WasteCartridge_middle] == CartridgeStateSELECTED)||(CartState[WasteCartridge_middle] == CartridgeStateACTIVE))
+ return WasteCartridge_middle;
+ if ((CartState[WasteCartridge_lower] == CartridgeStateSELECTED)||(CartState[WasteCartridge_lower] == CartridgeStateACTIVE))
+ return WasteCartridge_lower;
+ //no selected/active cartridge yet
+ if (CartState[WasteCartridge_middle] == CartridgeStateIN) {
+ CartState[WasteCartridge_middle] = CartridgeStateSELECTED;
+ return WasteCartridge_middle;
+ }
+ if (CartState[WasteCartridge_lower] == CartridgeStateIN) {
+ CartState[WasteCartridge_lower] = CartridgeStateSELECTED;
+ return WasteCartridge_lower;
+ }
+ return MaxWasteCartridges;
+}
+
+void cartFILLING_START(void) //{set state of SELECTED to ACTIVE}
+{
+ if (CartState[WasteCartridge_middle] == CartridgeStateSELECTED) {
+ Report("Cartridges middle Cart active", __FILE__, __LINE__, WasteCartridge_middle, RpMessage, CartState[WasteCartridge_middle], 0);
+ CartState[WasteCartridge_middle] = CartridgeStateACTIVE;
+ CartLed[WasteCartridge_middle]->color = BLINK;
+ } else if (CartState[WasteCartridge_lower] == CartridgeStateSELECTED) {
+ Report("Cartridges lower Cart active", __FILE__, __LINE__, WasteCartridge_lower, RpMessage, CartState[WasteCartridge_lower], 0);
+ CartState[WasteCartridge_lower] = CartridgeStateACTIVE;
+ CartLed[WasteCartridge_lower]->color = BLINK;
+ } else {
+ Report("Cartridges start with no selected cartridge", __FILE__, __LINE__, CartState[WasteCartridge_middle], RpMessage, CartState[WasteCartridge_lower], 0);
+ }
+}
+
+void cartFILLING_END(void)
+{
+ //{set state of ACTIVE to FULL}
+ if (CartState[WasteCartridge_middle] == CartridgeStateACTIVE) {
+ CartState[WasteCartridge_middle] = CartridgeStateFULL;
+ CartLed[WasteCartridge_middle]->color = colorOFF;
+ } else if (CartState[WasteCartridge_lower] == CartridgeStateACTIVE) {
+ CartState[WasteCartridge_lower] = CartridgeStateFULL;
+ CartLed[WasteCartridge_lower]->color = colorOFF;
+ } else {
+ Report("Cartridges end with no active cartridge", __FILE__, __LINE__, CartState[WasteCartridge_middle], RpMessage, CartState[WasteCartridge_lower], 0);
+ }
+}
+
+CartridgeStateEnum cartGetState(WasteCartridgeEnum CartId)
+{
+ assert (CartId<MaxWasteCartridges);
+ return CartState[CartId];
+}
+
+bool cartGetPresence (WasteCartridgeEnum CartId)
+{
+ assert (CartId<MaxWasteCartridges);
+ if (CartState[CartId] == CartridgeStateOUT)
+ return false;
+ else
+ return true;
+}
+
+bool NoCartAvailable()
+{
+ uint32_t CartId;
+
+ for(CartId = CART_2; CartId <= CART_3; CartId++) {
+ if (Is_Cartridge_Present(CartId))
+ return false;
+ }
+ return true;
+}
+
+WasteCartridgeEnum cartGetActiveCart()
+{
+ uint32_t CartId;
+
+ for (CartId = 0; CartId < MaxWasteCartridges; CartId++) {
+ if (CartState[CartId] == CartridgeStateACTIVE)
+ return CartId;
+ }
+ return MaxWasteCartridges;
+}
+
+WasteCartridgeEnum cartNotAllFull()
+{
+ uint32_t CartId;
+
+ for (CartId = WasteCartridge_middle; CartId < MaxWasteCartridges; CartId++) {
+ if (CartState[CartId] != CartridgeStateFULL)
+ return true;
+ }
+ return false;
+}
+
+void Waste_Init()
+{
+ CartState[WasteCartridge_middle] = CartridgeStateOUT;
+ CartState[WasteCartridge_lower] = CartridgeStateOUT;
+ DoorState = OPEN;
+}
+
+bool cartCart_door()//Polled by polling function. Notify waste. Poll each 1 second. During active filling poll each 100msec
+{
+ if(Get_COVER_1_State(CartridgesDoor))//to check the polarity
+ {
+ DoorState = OPEN;
+ }
+ else
+ {
+ DoorState = CLOSE;
+ }
+#ifdef WHS_DEBUG
+ DoorState = CLOSE;
+#endif
+ return DoorState;
+}
+
+//Waste_DoorOpenDuringEmptying
+uint32_t Waste_DoorOpenDuringEmptying(uint32_t IfIndex, uint32_t ReadValue)
+{
+ cartCart_door();
+ if ((DoorState == OPEN) && (WasteTankState == WasteTankStateEmptying)) {
+ SetWastePump(CLOSE);
+ WasteTankState = WasteTankStatePaused;
+ Report("move to WasteTankStatePaused", __FILE__, __LINE__, DoorState, RpMessage, WasteTankState, 0);
+ }
+ if ((DoorState == CLOSE) && (WasteTankState == WasteTankStatePaused)) {
+ if (cartGetActiveCart() != MaxWasteCartridges) {
+ SetWastePump(OPEN);
+ WasteTankState = WasteTankStateEmptying;
+ Report("return to WasteTankStateEmptying", __FILE__, __LINE__, DoorState, RpMessage, WasteTankState, 0);
+ } else {
+ Report("WasteTankStateEmptying no active cart", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ WasteTankState = WasteTankStateIdle;
+ Report("move to WasteTankStateIdle", __FILE__, __LINE__, DoorState, RpMessage, WasteTankState, 0);
+ }
+ }
+ return OK;
+#warning add alarm on door open
+}
+
+void Waste_StateMachine_OneSecond_Call(void)
+{
+ static int init = 1;
+ static WasteTankStateEnum prev_state = 0;
+ static int prev_wasteLevel = 0;
+
+ //call cartridge state
+ if ((Is_Cartridge_Present(CART_2) != cartGetPresence(WasteCartridge_middle)) || (init)) {
+ if (Is_Cartridge_Present(CART_2)) {
+ cartCART_INSERTED(WasteCartridge_middle);
+ } else {
+ cartCART_EXTRACTED(WasteCartridge_middle);
+ }
+ }
+ if ((Is_Cartridge_Present(CART_3) != cartGetPresence(WasteCartridge_lower)) || (init)) {
+ if (Is_Cartridge_Present(CART_3)) {
+ cartCART_INSERTED(WasteCartridge_lower);
+ } else {
+ cartCART_EXTRACTED(WasteCartridge_lower);
+ }
+ }
+
+ //call door state
+ cartCart_door();
+
+ //call waste tank level
+#ifndef WHS_DEBUG
+ wasteLevel = GetWHSWasteTankLevelMiliLiter();
+#endif
+
+ if ((WasteTankState != prev_state) || (abs(wasteLevel - prev_wasteLevel) > 50)) {
+ Report("Waste_StateMachine_OneSecond_Call", __FILE__, WasteTankState, SelectedCard, RpMessage, wasteLevel, 0);
+ prev_state = WasteTankState;
+ prev_wasteLevel = wasteLevel;
+ }
+
+ //call state machine
+ Waste_StateMachine();
+
+ if(init)
+ init = 0;
+
+#ifdef WHS_DEBUG
+ wasteLevel += 50;
+#endif
+}
+
+void Waste_StateMachine(void)
+{
+ uint32_t activeCart;
+ switch (WasteTankState)
+ {
+ case WasteTankStateIdle:
+ if (wasteLevel > wasteLevelOverFlow) {
+ AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, true);
+ } else {
+ AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, false);
+ }
+ if (cartNotAllFull() == true) {
+ AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, false);
+ }
+ if (wasteLevel > wasteLevelFull) {
+ //check if power down in process
+ if ( PowerOffInProcessGetState() ) {
+ Report("Power-down in process", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ break;
+ }
+
+ //check door
+ if (DoorState == OPEN) {
+ Report("Close cartridge cover", __FILE__, __LINE__, DoorState, RpMessage, 0, 0);
+ break;
+ }
+
+ // select cartridge
+ SelectedCard = cartSELECT_CART();
+ if (SelectedCard == MaxWasteCartridges) {
+ Report("No Available cart", __FILE__, __LINE__, SelectedCard, RpMessage, 0, 0);
+ AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, true);
+ break;
+ } else {
+ AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, false);
+ }
+
+ //check RFID? (TBD)
+
+ //move to next state
+ WasteTankState = WasteTankStateFull;
+ Report("move to WasteTankStateFull", __FILE__, __LINE__, DoorState, RpMessage, WasteTankState, 0);
+ }
+ break;
+ case WasteTankStateFull:
+ //set cart Active
+ cartFILLING_START();
+
+ // set valve selection
+ activeCart = cartGetActiveCart();
+ Valve_Set(VALVE_WASTE_TANK, activeCart);
+ Report("WasteTankStateEmptying set valve", __FILE__, __LINE__, activeCart, RpMessage, 0, 0);
+
+ // RFID change status - TBD
+
+ // set count down
+ timeout_counter = 1;
+
+ // set emptying limit
+ wasteLevelEmpty = wasteLevel - WASTE_CARTRIDGE_SIZE;
+
+ // start a timer to observe door opening
+ Cartridge_Cover_Control = AddControlCallback("Cartridge Cover Door", Waste_DoorOpenDuringEmptying, 100, cartCart_door, 0, 0, 0);
+ Report("add control Cartridge Cover Door", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+
+ SetWastePump(OPEN);
+ Report("WasteTankStateEmptying set Pump Open", __FILE__, __LINE__, activeCart, RpMessage, 0, 0);
+
+ //start emptying
+ WasteTankState = WasteTankStateEmptying;
+ break;
+ case WasteTankStateEmptying:
+ // if time out or emptying done - idle
+ if (timeout_counter++ > WASTE_EMPTING_TIMEOUT) {
+ SetWastePump(CLOSE);
+ cartFILLING_END();
+ // RFID change status - TBD
+ WasteTankState = WasteTankStateIdle;
+ Report("WasteTankStateEmptying TimeOut", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_EMPTYING_TIMEOUT, true);
+ RemoveControlCallback(Cartridge_Cover_Control, Waste_DoorOpenDuringEmptying);
+ } else if (wasteLevel < wasteLevelEmpty) {
+ SetWastePump(CLOSE);
+ cartFILLING_END();
+ // RFID change status - TBD
+ WasteTankState = WasteTankStateIdle;
+ RemoveControlCallback(Cartridge_Cover_Control, Waste_DoorOpenDuringEmptying);
+ if (cartNotAllFull() == false)
+ AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, true);
+ Report("WasteTankStateEmptying done", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ }
+#ifdef WHS_DEBUG
+ wasteLevel -= 100;
+ timeout_counter += 10;
+#endif
+ break;
+ case WasteTankStatePaused:
+ Report("WasteTankStatePaused...", __FILE__, __LINE__, 0, RpMessage, 0, 0);
+ break;
+ default:
+ Report("wrong state", __FILE__, WasteTankState, 0, RpMessage, SelectedCard, 0);
+ break;
+ }
+}
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.h b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.h
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.h
diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt
index b53a7016f..8857b69eb 100644
--- a/Software/Embedded_SW/Embedded/Software Release Notes.txt
+++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt
@@ -1,3 +1,26 @@
+Embedded SW Release note - Version 1.4.6.35 - Pack Mid alpha
+=============================================================
+Arc head - activate arc heaters gradually
+stop FPGA Reinit after 20 trials
+Head cleaning - move actuators (with stub - 0xAD7)
+fix RML PID support
+head open prevent job - (with stub - 0xAD6)
+add stub to overrule cone missing - 0xAD8
+
+Embedded SW Release note - Version 1.4.6.34 - Pack 2+
+=============================================================
+Validate IFS and cartridge location on manual waste handling - bug #3033
+better handling of powerstep01 configuration and motors clocks
+waste level: logs, fixed reading during waste filling,
+fix PT100 reading in WHS //important, OK
+improve diespensers reading in I2C timing //important OK
+alarm handling: fix report (mid tank empty)
+diagnostics - waste level in liters
+Heating and process - avoid activating all heaters at once. tested for flat head.
+Heating - remove alarms when colling dwn due to change of RML or idle mode
+Thread - improve feeder tension handling
+system: hold initalization process after 3 failures to enable code / parameters change and debugging
+
Embedded SW Release note - Version 1.4.6.33 - Pack 2+
=============================================================
remove logs from I2C errors - show only summary.
diff --git a/Software/PMR/Messages/Diagnostics/EventType.proto b/Software/PMR/Messages/Diagnostics/EventType.proto
index b7872cf35..c165e893f 100644
--- a/Software/PMR/Messages/Diagnostics/EventType.proto
+++ b/Software/PMR/Messages/Diagnostics/EventType.proto
@@ -83,7 +83,7 @@ enum EventType
CARTRIDGES_COVER_OPEN = 2006;
//Cover is open. Cannot execute job (Group = GeneralHardware, Category = Error)
- REAR_COVER_OPEN = 2007;
+ ARCH_COVER_OPEN = 2007;
//The machine temperature is too high. Cannot execute job (Group = GeneralHardware, Category = Critical)
MACHINE_INTERNAL_OVERTEMPERATURE = 2008;
@@ -124,6 +124,9 @@ enum EventType
//Software error has occurred (Group = GeneralHardware, Category = Error)
UNINTENDED_RESET = 2020;
+ //Temperature measurement error has occurred. Cannot execute job. (Group = GeneralHardware, Category = Error)
+ TEMPERATURE_MEASUREMENT_ERROR = 2021;
+
//Thread break. Cannot execute job (Group = ThreadFeedingSystem, Category = Error)
THREAD_BREAK = 3000;
@@ -625,6 +628,24 @@ enum EventType
//Dyeing head actuator did not reach position. Cannot execute job (Group = DyeingHead, Category = Error)
DYEING_HEAD_LEFT_ACTUATOR_DOWN_TIMEOUT = 5092;
+ //Dyeing head blower flow is too high. Cannot execute job (Group = DyeingHead, Category = Error)
+ DYEING_HEAD_BLOWER_1_FLOW_TOO_HIGH = 5093;
+
+ //Dyeing head blower flow is too high. Cannot execute job (Group = DyeingHead, Category = Error)
+ DYEING_HEAD_BLOWER_2_FLOW_TOO_HIGH = 5094;
+
+ //Dyeing head blower flow is too low. Cannot execute job (Group = DyeingHead, Category = Error)
+ DYEING_HEAD_BLOWER_1_FLOW_TOO_LOW = 5095;
+
+ //Dyeing head blower flow is too low. Cannot execute job (Group = DyeingHead, Category = Error)
+ DYEING_HEAD_BLOWER_2_FLOW_TOO_LOW = 5096;
+
+ //Dyeing head arc lid is open. Cannot execute job. (Group = DyeingHead, Category = Error)
+ DYEING_HEAD_ARC_LID_IS_OPEN = 5097;
+
+ //Dyeing head tunnel lid is open. Cannot execute job (Group = DyeingHead, Category = Error)
+ DYEING_HEAD_TUNNEL_LID_IS_OPEN = 5098;
+
//The temperature in the mixer is too high. Cannot execute job (Group = Mixer, Category = Critical)
MIXER_OVERTEMPERATURE = 6000;
@@ -667,28 +688,28 @@ enum EventType
//Overpressure in lubricant dispenser. Cannot execute job (Group = Dispensers, Category = Critical)
DISPENSER_8_OVERPRESSURE = 7007;
- //The pressure in black dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ //The pressure in black dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
DISPENSER_1_UNDERPRESSURE = 7008;
- //The pressure in cyan dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ //The pressure in cyan dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
DISPENSER_2_UNDERPRESSURE = 7009;
- //The pressure in magenta dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ //The pressure in magenta dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
DISPENSER_3_UNDERPRESSURE = 7010;
- //The pressure in yellow dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ //The pressure in yellow dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
DISPENSER_4_UNDERPRESSURE = 7011;
- //The pressure in transparent ink dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ //The pressure in transparent ink dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
DISPENSER_5_UNDERPRESSURE = 7012;
- //The pressure in spot color 1 dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ //The pressure in spot color 1 dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
DISPENSER_6_UNDERPRESSURE = 7013;
- //The pressure in cleaner dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ //The pressure in cleaner dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
DISPENSER_7_UNDERPRESSURE = 7014;
- //The pressure in lubricant dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ //The pressure in lubricant dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
DISPENSER_8_UNDERPRESSURE = 7015;
//Black dispenser is empty (Group = Dispensers, Category = Error)
@@ -1024,7 +1045,7 @@ enum EventType
//Chiller malfunction. Cannot execute job (Group = WasteHandlingSystem, Category = Critical)
CHILLER_DRY_CONTACT = 9006;
- //Insufficient air flow. Cannot execute job (Group = WasteHandlingSystem, Category = Critical)
+ //Insufficient air flow. Cannot execute job (Group = WasteHandlingSystem, Category = Error)
INSUFFICIENT_AIR_FLOW = 9007;
//Air quality alert. Cannot execute job (Group = WasteHandlingSystem, Category = Critical)
diff --git a/Software/Stubs Collection/stubs/technician view files/new head.tpf b/Software/Stubs Collection/stubs/technician view files/new head.tpf
index 25215919f..2ae59d2ed 100644
--- a/Software/Stubs Collection/stubs/technician view files/new head.tpf
+++ b/Software/Stubs Collection/stubs/technician view files/new head.tpf
@@ -27,7 +27,7 @@
<HeaterState>
<HeaterType>DryerAirHeater</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>69.85</CurrentValue>
+ <CurrentValue>176.1</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -46,8 +46,8 @@
<HeaterState>
<HeaterType>DryerMainHeater</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>92.97</CurrentValue>
- <IsActive>false</IsActive>
+ <CurrentValue>208.58999999999998</CurrentValue>
+ <IsActive>true</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
@@ -65,8 +65,8 @@
<HeaterState>
<HeaterType>DryerSecondaryHeater</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>92.94</CurrentValue>
- <IsActive>true</IsActive>
+ <CurrentValue>209.10999999999999</CurrentValue>
+ <IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
</HeaterState>
@@ -84,7 +84,7 @@
<HeaterState>
<HeaterType>HeaterZone3</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>39.55</CurrentValue>
+ <CurrentValue>96.71</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -103,7 +103,7 @@
<HeaterState>
<HeaterType>HeaterZone2</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>37.29</CurrentValue>
+ <CurrentValue>88.699999999999989</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -122,7 +122,7 @@
<HeaterState>
<HeaterType>HeaterZone1</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>34.27</CurrentValue>
+ <CurrentValue>76.08</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -141,7 +141,7 @@
<HeaterState>
<HeaterType>MixerHeater</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>54.669999999999995</CurrentValue>
+ <CurrentValue>78.37</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -179,7 +179,7 @@
<HeaterState>
<HeaterType>HeaterZone5</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>43.389999999999993</CurrentValue>
+ <CurrentValue>0</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -289,7 +289,7 @@
<HeaterState>
<HeaterType>HeaterZone7</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>50.449999999999996</CurrentValue>
+ <CurrentValue>6.59</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -559,7 +559,7 @@
<HeaterState>
<HeaterType>HeadCoverHeater1</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>283.75</CurrentValue>
+ <CurrentValue>174.69</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -578,7 +578,7 @@
<HeaterState>
<HeaterType>HeadCoverHeater2</HeaterType>
<SetPoint>0</SetPoint>
- <CurrentValue>283.75</CurrentValue>
+ <CurrentValue>174.95999999999998</CurrentValue>
<IsActive>false</IsActive>
<IsRampingUp>false</IsRampingUp>
<IsInSetPoint>true</IsInSetPoint>
@@ -654,44 +654,44 @@
<ColorNumber>-1</ColorNumber>
</TechItem>
<TechItem xsi:type="ProcessParametersItem">
- <ID>38e5d1ac-40a5-4c5f-822c-51813cb15b7b</ID>
- <Left>31</Left>
- <Top>144.3584070796461</Top>
- <Width>310</Width>
- <Height>315.12831858407088</Height>
+ <ID>d2e09fbf-2ac8-4c32-a4f5-45e50e305098</ID>
+ <Left>1016</Left>
+ <Top>821.96460176991263</Top>
+ <Width>361</Width>
+ <Height>233.95575221238948</Height>
<Angle>0</Angle>
<ColorNumber>-14774017</ColorNumber>
<ProcessParameters>
<ID>0</ID>
- <Guid>ce709f03-59be-410d-a928-e942c0c46ce3</Guid>
- <LastUpdated>2020-02-09T12:45:24.1272815Z</LastUpdated>
- <Name>Process parameters 6</Name>
- <DyeingSpeed>50</DyeingSpeed>
+ <Guid>9b265a7c-cc48-4c5a-abed-dfa8c8e3099f</Guid>
+ <LastUpdated>2020-02-09T13:11:03.3185652Z</LastUpdated>
+ <Name>Process parameters 2</Name>
+ <DyeingSpeed>0</DyeingSpeed>
<MinInkUptake>0</MinInkUptake>
<MaxInkUptake>0</MaxInkUptake>
<FeederTension>0</FeederTension>
- <PullerTension>5000</PullerTension>
- <WinderTension>5000</WinderTension>
- <MixerTemp>80</MixerTemp>
- <HeadZone1Temp>80</HeadZone1Temp>
- <HeadZone2Temp>90</HeadZone2Temp>
- <HeadZone3Temp>110</HeadZone3Temp>
- <HeadZone4Temp>120</HeadZone4Temp>
- <HeadZone5Temp>120</HeadZone5Temp>
- <HeadZone6Temp>135</HeadZone6Temp>
- <DryerAirFlow>7</DryerAirFlow>
- <DryerZone1Temp>190</DryerZone1Temp>
+ <PullerTension>0</PullerTension>
+ <WinderTension>0</WinderTension>
+ <MixerTemp>0</MixerTemp>
+ <HeadZone1Temp>0</HeadZone1Temp>
+ <HeadZone2Temp>0</HeadZone2Temp>
+ <HeadZone3Temp>0</HeadZone3Temp>
+ <HeadZone4Temp>0</HeadZone4Temp>
+ <HeadZone5Temp>0</HeadZone5Temp>
+ <HeadZone6Temp>0</HeadZone6Temp>
+ <DryerAirFlow>0</DryerAirFlow>
+ <DryerZone1Temp>100</DryerZone1Temp>
<DryerZone2Temp>0</DryerZone2Temp>
<DryerZone3Temp>0</DryerZone3Temp>
<DryerBufferLength>0</DryerBufferLength>
- <HeadAirFlow>12</HeadAirFlow>
+ <HeadAirFlow>0</HeadAirFlow>
<TableIndex>0</TableIndex>
- <HeadZone7Temp>135</HeadZone7Temp>
- <HeadZone8Temp>125</HeadZone8Temp>
- <HeadZone9Temp>135</HeadZone9Temp>
- <HeadZone10Temp>135</HeadZone10Temp>
- <HeadZone11Temp>140</HeadZone11Temp>
- <HeadZone12Temp>140</HeadZone12Temp>
+ <HeadZone7Temp>0</HeadZone7Temp>
+ <HeadZone8Temp>0</HeadZone8Temp>
+ <HeadZone9Temp>0</HeadZone9Temp>
+ <HeadZone10Temp>0</HeadZone10Temp>
+ <HeadZone11Temp>0</HeadZone11Temp>
+ <HeadZone12Temp>0</HeadZone12Temp>
<RBlowerFlow>0</RBlowerFlow>
<RBlowerTemp>0</RBlowerTemp>
<LBlowerFlow>0</LBlowerFlow>
@@ -700,159 +700,166 @@
</ProcessParameters>
<ParametersIndices>
<ParameterIndex>
- <Name>Process Parameters Tables Group Guid</Name>
+ <Name>Name</Name>
<Index>0</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Name</Name>
+ <Name>Dyeing Speed</Name>
<Index>1</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Table Index</Name>
+ <Name>Min Ink Uptake</Name>
<Index>2</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Dyeing Speed</Name>
+ <Name>Max Ink Uptake</Name>
<Index>3</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Min Ink Uptake</Name>
+ <Name>Feeder Tension</Name>
<Index>4</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Max Ink Uptake</Name>
+ <Name>Puller Tension</Name>
<Index>5</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Feeder Tension</Name>
+ <Name>Winder Tension</Name>
<Index>6</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Puller Tension</Name>
+ <Name>Mixer Temp</Name>
<Index>7</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Winder Tension</Name>
+ <Name>Head Zone 1 Temp</Name>
<Index>8</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Mixer Temp</Name>
+ <Name>Head Zone 2 Temp</Name>
<Index>9</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 1 Temp</Name>
+ <Name>Head Zone 3 Temp</Name>
<Index>10</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 2 Temp</Name>
+ <Name>Head Zone 4 Temp</Name>
<Index>11</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 3 Temp</Name>
+ <Name>Head Zone 5 Temp</Name>
<Index>12</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 4 Temp</Name>
+ <Name>Head Zone 6 Temp</Name>
<Index>13</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 5 Temp</Name>
+ <Name>Dryer Air Flow</Name>
<Index>14</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 6 Temp</Name>
+ <Name>Dryer Zone 1 Temp</Name>
<Index>15</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 7 Temp</Name>
+ <Name>Dryer Zone 2 Temp</Name>
<Index>16</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 8 Temp</Name>
+ <Name>Dryer Zone 3 Temp</Name>
<Index>17</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 9 Temp</Name>
+ <Name>Dryer Buffer Length</Name>
<Index>18</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 10 Temp</Name>
+ <Name>Head Air Flow</Name>
<Index>19</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 11 Temp</Name>
+ <Name>Process Parameters Tables Group Guid</Name>
<Index>20</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 12 Temp</Name>
+ <Name>Table Index</Name>
<Index>21</Index>
</ParameterIndex>
- <ParameterIndex>
- <Name>St Sp Zone 1 Temp</Name>
- <Index>22</Index>
- </ParameterIndex>
- <ParameterIndex>
- <Name>St Sp Zone 2 Temp</Name>
- <Index>23</Index>
- </ParameterIndex>
- <ParameterIndex>
- <Name>Dryer Zone 1 Temp</Name>
- <Index>24</Index>
- </ParameterIndex>
- <ParameterIndex>
- <Name>Dryer Zone 2 Temp</Name>
- <Index>25</Index>
- </ParameterIndex>
- <ParameterIndex>
- <Name>Dryer Zone 3 Temp</Name>
- <Index>26</Index>
- </ParameterIndex>
- <ParameterIndex>
- <Name>Dryer Air Flow</Name>
- <Index>27</Index>
- </ParameterIndex>
- <ParameterIndex>
- <Name>Head Air Flow</Name>
- <Index>28</Index>
- </ParameterIndex>
- <ParameterIndex>
- <Name>Dryer Buffer Length</Name>
- <Index>29</Index>
- </ParameterIndex>
</ParametersIndices>
</TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>11f4748e-ed30-48d6-a08a-afeaa0277e2e</ID>
+ <Left>330</Left>
+ <Top>12.154867256637203</Top>
+ <Width>205</Width>
+ <Height>90.181415929203524</Height>
+ <Angle>0</Angle>
+ <ItemGuid>1778C1A7-AFB5-42F9-9E00-E80D30D9FC02</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>2</DecimalPoints>
+ </TechItem>
+ <TechItem xsi:type="SingleGraphItem">
+ <ID>dcf78507-ea09-4529-b635-ec1eeed31141</ID>
+ <Left>145</Left>
+ <Top>842.58849557522137</Top>
+ <Width>357</Width>
+ <Height>215.82743362831855</Height>
+ <Angle>0</Angle>
+ <ItemGuid>FE0D0A56-5795-4C5A-8E09-939FBB35C441</ItemGuid>
+ <ColorNumber>-14774017</ColorNumber>
+ <Duration>1275</Duration>
+ <Min>0</Min>
+ <Max>100</Max>
+ <UseAutoRange>true</UseAutoRange>
+ <DecimalPlaces>2</DecimalPlaces>
+ </TechItem>
+ <TechItem xsi:type="MonitorItem">
+ <ID>85762a06-25d4-457a-9974-7eab916d65c5</ID>
+ <Left>540</Left>
+ <Top>4.0486725663717493</Top>
+ <Width>205</Width>
+ <Height>90.181415929203524</Height>
+ <Angle>0</Angle>
+ <ItemGuid>055D0A38-09BD-490D-9852-12B06A4B22F2</ItemGuid>
+ <ColorNumber>-1</ColorNumber>
+ <UpdateInterval>10</UpdateInterval>
+ <DecimalPoints>0</DecimalPoints>
+ </TechItem>
<TechItem xsi:type="ProcessParametersItem">
- <ID>d2e09fbf-2ac8-4c32-a4f5-45e50e305098</ID>
- <Left>1016</Left>
- <Top>821.96460176991263</Top>
- <Width>361</Width>
- <Height>233.95575221238948</Height>
+ <ID>36f69103-89b6-4076-b8f3-bf4a0806ba05</ID>
+ <Left>18.250000000000007</Left>
+ <Top>132.59405940594058</Top>
+ <Width>317.70833333333337</Width>
+ <Height>392.24752475247521</Height>
<Angle>0</Angle>
<ColorNumber>-14774017</ColorNumber>
<ProcessParameters>
<ID>0</ID>
- <Guid>9b265a7c-cc48-4c5a-abed-dfa8c8e3099f</Guid>
- <LastUpdated>2020-02-09T13:11:03.3185652Z</LastUpdated>
- <Name>Process parameters 2</Name>
- <DyeingSpeed>0</DyeingSpeed>
+ <Guid>0025b28d-1475-4af2-b50e-ecc344c3e43a</Guid>
+ <LastUpdated>2020-07-05T08:17:42.9870702Z</LastUpdated>
+ <Name>Process parameters 4</Name>
+ <DyeingSpeed>50</DyeingSpeed>
<MinInkUptake>0</MinInkUptake>
<MaxInkUptake>0</MaxInkUptake>
<FeederTension>0</FeederTension>
<PullerTension>0</PullerTension>
<WinderTension>0</WinderTension>
- <MixerTemp>0</MixerTemp>
- <HeadZone1Temp>0</HeadZone1Temp>
- <HeadZone2Temp>0</HeadZone2Temp>
- <HeadZone3Temp>0</HeadZone3Temp>
+ <MixerTemp>80</MixerTemp>
+ <HeadZone1Temp>80</HeadZone1Temp>
+ <HeadZone2Temp>90</HeadZone2Temp>
+ <HeadZone3Temp>100</HeadZone3Temp>
<HeadZone4Temp>0</HeadZone4Temp>
<HeadZone5Temp>0</HeadZone5Temp>
<HeadZone6Temp>0</HeadZone6Temp>
<DryerAirFlow>0</DryerAirFlow>
- <DryerZone1Temp>100</DryerZone1Temp>
+ <DryerZone1Temp>180</DryerZone1Temp>
<DryerZone2Temp>0</DryerZone2Temp>
<DryerZone3Temp>0</DryerZone3Temp>
<DryerBufferLength>0</DryerBufferLength>
- <HeadAirFlow>0</HeadAirFlow>
+ <HeadAirFlow>3</HeadAirFlow>
<TableIndex>0</TableIndex>
<HeadZone7Temp>0</HeadZone7Temp>
<HeadZone8Temp>0</HeadZone8Temp>
@@ -860,142 +867,147 @@
<HeadZone10Temp>0</HeadZone10Temp>
<HeadZone11Temp>0</HeadZone11Temp>
<HeadZone12Temp>0</HeadZone12Temp>
- <RBlowerFlow>0</RBlowerFlow>
- <RBlowerTemp>0</RBlowerTemp>
- <LBlowerFlow>0</LBlowerFlow>
- <LBlowerTemp>0</LBlowerTemp>
+ <RBlowerFlow>180</RBlowerFlow>
+ <RBlowerTemp>180</RBlowerTemp>
+ <LBlowerFlow>180</LBlowerFlow>
+ <LBlowerTemp>180</LBlowerTemp>
<PressureBuildUp>0</PressureBuildUp>
</ProcessParameters>
<ParametersIndices>
<ParameterIndex>
- <Name>Name</Name>
+ <Name>Process Parameters Tables Group Guid</Name>
<Index>0</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Dyeing Speed</Name>
+ <Name>Name</Name>
<Index>1</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Min Ink Uptake</Name>
+ <Name>Table Index</Name>
<Index>2</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Max Ink Uptake</Name>
+ <Name>Dyeing Speed</Name>
<Index>3</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Feeder Tension</Name>
+ <Name>Min Ink Uptake</Name>
<Index>4</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Puller Tension</Name>
+ <Name>Max Ink Uptake</Name>
<Index>5</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Winder Tension</Name>
+ <Name>Feeder Tension</Name>
<Index>6</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Mixer Temp</Name>
+ <Name>Puller Tension</Name>
<Index>7</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 1 Temp</Name>
+ <Name>Winder Tension</Name>
<Index>8</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 2 Temp</Name>
+ <Name>Mixer Temp</Name>
<Index>9</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 3 Temp</Name>
+ <Name>Head Zone 1 Temp</Name>
<Index>10</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 4 Temp</Name>
+ <Name>Head Zone 2 Temp</Name>
<Index>11</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 5 Temp</Name>
+ <Name>Head Zone 3 Temp</Name>
<Index>12</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Zone 6 Temp</Name>
+ <Name>Head Zone 4 Temp</Name>
<Index>13</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Dryer Air Flow</Name>
+ <Name>Head Zone 5 Temp</Name>
<Index>14</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Dryer Zone 1 Temp</Name>
+ <Name>Head Zone 6 Temp</Name>
<Index>15</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Dryer Zone 2 Temp</Name>
+ <Name>Head Zone 7 Temp</Name>
<Index>16</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Dryer Zone 3 Temp</Name>
+ <Name>Head Zone 8 Temp</Name>
<Index>17</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Dryer Buffer Length</Name>
+ <Name>Head Zone 9 Temp</Name>
<Index>18</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Head Air Flow</Name>
+ <Name>Head Zone 10 Temp</Name>
<Index>19</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Process Parameters Tables Group Guid</Name>
+ <Name>Head Zone 11 Temp</Name>
<Index>20</Index>
</ParameterIndex>
<ParameterIndex>
- <Name>Table Index</Name>
+ <Name>Head Zone 12 Temp</Name>
<Index>21</Index>
</ParameterIndex>
+ <ParameterIndex>
+ <Name>R Blower Flow</Name>
+ <Index>22</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>R Blower Temp</Name>
+ <Index>23</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>L Blower Flow</Name>
+ <Index>24</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>L Blower Temp</Name>
+ <Index>25</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>Dryer Zone 1 Temp</Name>
+ <Index>26</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>Dryer Zone 2 Temp</Name>
+ <Index>27</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>Dryer Zone 3 Temp</Name>
+ <Index>28</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>Dryer Air Flow</Name>
+ <Index>29</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>Head Air Flow</Name>
+ <Index>30</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>Dryer Buffer Length</Name>
+ <Index>31</Index>
+ </ParameterIndex>
+ <ParameterIndex>
+ <Name>Pressure Build Up</Name>
+ <Index>32</Index>
+ </ParameterIndex>
</ParametersIndices>
</TechItem>
- <TechItem xsi:type="MonitorItem">
- <ID>11f4748e-ed30-48d6-a08a-afeaa0277e2e</ID>
- <Left>330</Left>
- <Top>12.154867256637203</Top>
- <Width>205</Width>
- <Height>90.181415929203524</Height>
- <Angle>0</Angle>
- <ItemGuid>1778C1A7-AFB5-42F9-9E00-E80D30D9FC02</ItemGuid>
- <ColorNumber>-1</ColorNumber>
- <UpdateInterval>10</UpdateInterval>
- <DecimalPoints>2</DecimalPoints>
- </TechItem>
- <TechItem xsi:type="SingleGraphItem">
- <ID>dcf78507-ea09-4529-b635-ec1eeed31141</ID>
- <Left>145</Left>
- <Top>842.58849557522137</Top>
- <Width>357</Width>
- <Height>215.82743362831855</Height>
- <Angle>0</Angle>
- <ItemGuid>FE0D0A56-5795-4C5A-8E09-939FBB35C441</ItemGuid>
- <ColorNumber>-14774017</ColorNumber>
- <Duration>1275</Duration>
- <Min>0</Min>
- <Max>100</Max>
- <UseAutoRange>true</UseAutoRange>
- <DecimalPlaces>2</DecimalPlaces>
- </TechItem>
- <TechItem xsi:type="MonitorItem">
- <ID>85762a06-25d4-457a-9974-7eab916d65c5</ID>
- <Left>540</Left>
- <Top>4.0486725663717493</Top>
- <Width>205</Width>
- <Height>90.181415929203524</Height>
- <Angle>0</Angle>
- <ItemGuid>055D0A38-09BD-490D-9852-12B06A4B22F2</ItemGuid>
- <ColorNumber>-1</ColorNumber>
- <UpdateInterval>10</UpdateInterval>
- <DecimalPoints>0</DecimalPoints>
- </TechItem>
</Items>
</MachineTechViewProjectTab>
<MachineTechViewProjectTab>
diff --git a/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip b/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip
index fd2f22c0b..c410b3310 100644
--- a/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip
+++ b/Software/Visual_Studio/Advanced Installer Projects/Machine Studio Installer.aip
@@ -16,10 +16,10 @@
<ROW Property="ARPCOMMENTS" Value="This installer database contains the logic and data required to install [|ProductName]." ValueLocId="*"/>
<ROW Property="ARPNOREPAIR" MultiBuildValue="DefaultBuild:1"/>
<ROW Property="Manufacturer" Value="Twine"/>
- <ROW Property="ProductCode" Value="1033:{2DDE0E64-89DD-42DB-80D0-212BA97052D2} " Type="16"/>
+ <ROW Property="ProductCode" Value="1033:{9E37B9B1-348D-4A0F-BD20-CD7CB78DFB73} " Type="16"/>
<ROW Property="ProductLanguage" Value="1033"/>
<ROW Property="ProductName" Value="Machine Studio"/>
- <ROW Property="ProductVersion" Value="4.1.13.0" Type="32"/>
+ <ROW Property="ProductVersion" Value="4.1.14.0" Type="32"/>
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/>
<ROW Property="UpgradeCode" Value="{CBEE5CAE-7C5A-4280-98DE-AA98113764E4}"/>
<ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
@@ -826,7 +826,7 @@
<ROW Action="AI_DetectSoftware" Sequence="101"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
- <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\Machine Studio\Release" PackageFileName="Machine Studio Installer_v4.0.9" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Machine Studio Installer_v4.1.13"/>
+ <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\Machine Studio\Release" PackageFileName="Machine Studio Installer_v4.0.9" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Machine Studio Installer_v4.1.14"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
<ROW Path="&lt;AI_DICTS&gt;ui.ail"/>
diff --git a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt
index 9453b5c13..a603ff06b 100644
--- a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt
+++ b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer-cache/cacheIndex.txt
Binary files differ
diff --git a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip
index 8c5ad5e3a..de47739b9 100644
--- a/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip
+++ b/Software/Visual_Studio/Advanced Installer Projects/PPC Installer.aip
@@ -18,10 +18,10 @@
<ROW Property="ARPNOREPAIR" Value="1" MultiBuildValue="DefaultBuild:1"/>
<ROW Property="ARPSYSTEMCOMPONENT" Value="1"/>
<ROW Property="Manufacturer" Value="Twine"/>
- <ROW Property="ProductCode" Value="1033:{3B6E9062-3DBE-4A33-A51B-8238ED54DB45} " Type="16"/>
+ <ROW Property="ProductCode" Value="1033:{2337828E-2432-405A-B8F4-960A367F8CD1} " Type="16"/>
<ROW Property="ProductLanguage" Value="1033"/>
<ROW Property="ProductName" Value="Tango"/>
- <ROW Property="ProductVersion" Value="1.1.19.0" Type="32"/>
+ <ROW Property="ProductVersion" Value="1.1.20.0" Type="32"/>
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/>
<ROW Property="UpgradeCode" Value="{F8EAB8B4-FD57-45B7-8307-D52DF760273D}"/>
<ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME" ValueLocId="-"/>
@@ -203,11 +203,13 @@
<ROW Component="mscoree.dll" ComponentId="{85F439D0-8FD0-4B99-888D-336C7A125E3D}" Directory_="APPDIR" Attributes="0" KeyPath="mscoree.dll"/>
<ROW Component="msvcp140d.dll" ComponentId="{69E32675-9ACF-4C23-A495-300B78913B66}" Directory_="APPDIR" Attributes="0" KeyPath="msvcp140d.dll"/>
<ROW Component="protobufnet.dll" ComponentId="{163F1E17-6462-4ABE-BC86-E055F7690139}" Directory_="APPDIR" Attributes="0" KeyPath="protobufnet.dll"/>
+ <ROW Component="turbojpeg.dll" ComponentId="{27A0FCF0-5142-4098-919F-1F41DBD4E96C}" Directory_="win7x64_Dir" Attributes="256" KeyPath="turbojpeg.dll"/>
+ <ROW Component="turbojpeg.dll.meta" ComponentId="{2277C165-C973-4631-B796-6072626F94FD}" Directory_="win7x64_Dir" Attributes="0" KeyPath="turbojpeg.dll.meta" Type="0"/>
+ <ROW Component="turbojpeg.dll.meta_1" ComponentId="{6CE58AB5-8A03-45B4-B1F2-C32484FFF26D}" Directory_="win7x86_Dir" Attributes="0" KeyPath="turbojpeg.dll.meta_1" Type="0"/>
+ <ROW Component="turbojpeg.dll_1" ComponentId="{0F3812A4-9F26-4D7C-92A5-A1A0DB6276D8}" Directory_="win7x86_Dir" Attributes="0" KeyPath="turbojpeg.dll_1"/>
<ROW Component="ucrtbased.dll" ComponentId="{B8D025EA-CD16-4EE7-A3E7-713E2BE82BF3}" Directory_="APPDIR" Attributes="0" KeyPath="ucrtbased.dll"/>
<ROW Component="vcruntime140.dll" ComponentId="{144594CC-D19B-45E4-A420-7A1BBB122EE3}" Directory_="APPDIR" Attributes="0" KeyPath="vcruntime140.dll"/>
<ROW Component="vcruntime140d.dll" ComponentId="{7653420C-C6C3-4F31-97E8-D6DE417D3DF2}" Directory_="APPDIR" Attributes="0" KeyPath="vcruntime140d.dll"/>
- <ROW Component="win7x64" ComponentId="{4EC45DC4-ADF4-4C04-9B3B-3DCD30209D93}" Directory_="win7x64_Dir" Attributes="0"/>
- <ROW Component="win7x86" ComponentId="{CA5E862B-7791-4F9B-9B4B-AD324C04850A}" Directory_="win7x86_Dir" Attributes="0"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
<ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0"/>
@@ -456,6 +458,10 @@
<ROW File="Tango.PPC.Shared.pdb" Component_="Tango.PPC.Shared.dll" FileName="TANGO~17.PDB|Tango.PPC.Shared.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.PPC.Shared.pdb" SelfReg="false"/>
<ROW File="Tango.CSV.dll" Component_="Tango.CSV.dll" FileName="TANGOC~8.DLL|Tango.CSV.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.CSV.dll" SelfReg="false"/>
<ROW File="Tango.CSV.pdb" Component_="Tango.CSV.dll" FileName="TANGOC~5.PDB|Tango.CSV.pdb" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\Tango.CSV.pdb" SelfReg="false"/>
+ <ROW File="turbojpeg.dll" Component_="turbojpeg.dll" FileName="TURBOJ~1.DLL|turbojpeg.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x64\turbojpeg.dll" SelfReg="false"/>
+ <ROW File="turbojpeg.dll.meta" Component_="turbojpeg.dll.meta" FileName="TURBOJ~1.MET|turbojpeg.dll.meta" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x64\turbojpeg.dll.meta" SelfReg="false"/>
+ <ROW File="turbojpeg.dll_1" Component_="turbojpeg.dll_1" FileName="TURBOJ~1.DLL|turbojpeg.dll" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x86\turbojpeg.dll" SelfReg="false"/>
+ <ROW File="turbojpeg.dll.meta_1" Component_="turbojpeg.dll.meta_1" FileName="TURBOJ~1.MET|turbojpeg.dll.meta" Version="65535.65535.65535.65535" Attributes="0" SourcePath="..\Build\PPC\Release\win7-x86\turbojpeg.dll.meta" SelfReg="false"/>
<ATTRIBUTE name="DontAddFileAttributes" value="true"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BootstrOptComponent">
@@ -465,7 +471,7 @@
<ROW Action="AI_DetectSoftware" Sequence="101"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
- <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\PPC" PackageFileName="PPC Installer v1.0.3" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="PPC Installer_v1.1.19"/>
+ <ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="0" PackageFolder="..\Build\Installers\PPC" PackageFileName="PPC Installer v1.0.3" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="PPC Installer_v1.1.20"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
<ROW Path="&lt;AI_DICTS&gt;ui.ail"/>
@@ -533,8 +539,6 @@
<COMPONENT cid="caphyon.advinst.msicomp.MsiCreateFolderComponent">
<ROW Directory_="SHORTCUTDIR" Component_="SHORTCUTDIR" ManualDelete="false"/>
<ROW Directory_="APPDIR" Component_="APPDIR" ManualDelete="true"/>
- <ROW Directory_="win7x64_Dir" Component_="win7x64" ManualDelete="false"/>
- <ROW Directory_="win7x86_Dir" Component_="win7x86" ManualDelete="false"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent">
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH_ORIGINAL" Target="[AI_SETUPEXEPATH]"/>
@@ -726,8 +730,10 @@
<ROW Feature_="MainFeature" Component_="LiteDB.dll"/>
<ROW Feature_="MainFeature" Component_="Tango.PPC.Shared.dll"/>
<ROW Feature_="MainFeature" Component_="Tango.CSV.dll"/>
- <ROW Feature_="MainFeature" Component_="win7x86"/>
- <ROW Feature_="MainFeature" Component_="win7x64"/>
+ <ROW Feature_="MainFeature" Component_="turbojpeg.dll"/>
+ <ROW Feature_="MainFeature" Component_="turbojpeg.dll.meta"/>
+ <ROW Feature_="MainFeature" Component_="turbojpeg.dll_1"/>
+ <ROW Feature_="MainFeature" Component_="turbojpeg.dll.meta_1"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstExSeqComponent">
<ROW Action="AI_STORE_LOCATION" Condition="(Not Installed) OR REINSTALL" Sequence="1502"/>
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/RemoteDesktopView.xaml b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/RemoteDesktopView.xaml
index 46327eeae..95e4b4a52 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/RemoteDesktopView.xaml
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/RemoteDesktopView.xaml
@@ -123,7 +123,7 @@
<Setter Property="Foreground" Value="{StaticResource FSE_PrimaryForegroundBrush}"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding RemoteDesktopProvider.IsWebRtcActive}" Value="True">
- <Setter Property="Text" Value="Remote desktop session is active using a fast communication channel."></Setter>
+ <Setter Property="Text" Value="Remote desktop session is active using a P2P communication channel."></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
@@ -159,7 +159,7 @@
<Button IsEnabled="{Binding RemoteDesktopProvider.InSession}" Width="250" Margin="5" Style="{StaticResource FSE_Button_Polygon}" Content="Open Task Manager" Command="{Binding OpenTaskManagerCommand}" />
- <CheckBox Margin="5" HorizontalAlignment="Center" IsEnabled="{Binding RemoteDesktopProvider.InSession,Converter={StaticResource BooleanInverseConverter}}" IsChecked="{Binding RemoteDesktopProvider.EnableWebRtc}">Enable fast communication channel</CheckBox>
+ <CheckBox Margin="5" HorizontalAlignment="Center" IsEnabled="{Binding RemoteDesktopProvider.InSession,Converter={StaticResource BooleanInverseConverter}}" IsChecked="{Binding RemoteDesktopProvider.EnableWebRtc}">Enable P2P communication channel</CheckBox>
</UniformGrid>
</StackPanel>
</Grid>
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/CSV/CsvColumn.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/CSV/CsvColumn.cs
new file mode 100644
index 000000000..afe65f565
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/CSV/CsvColumn.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.FSE.Procedures.CSV
+{
+ public class CsvColumn
+ {
+ public String Name { get; set; }
+ public String Description { get; set; }
+ public bool IsProperty { get; set; }
+ public PropertyInfo PropertyInfo { get; set; }
+ public FieldInfo FieldInfo { get; set; }
+
+ public Object GetValue(Object obj)
+ {
+ if (IsProperty)
+ {
+ return PropertyInfo.GetValue(obj);
+ }
+ else
+ {
+ return FieldInfo.GetValue(obj);
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/CSV/CsvRow.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/CSV/CsvRow.cs
new file mode 100644
index 000000000..db79c2e13
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/CSV/CsvRow.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.FSE.Procedures.CSV
+{
+ public class CsvRow
+ {
+ public Object V0 { get; set; }
+ public Object V1 { get; set; }
+ public Object V2 { get; set; }
+ public Object V3 { get; set; }
+ public Object V4 { get; set; }
+ public Object V5 { get; set; }
+ public Object V6 { get; set; }
+ public Object V7 { get; set; }
+ public Object V8 { get; set; }
+ public Object V9 { get; set; }
+ public Object V10 { get; set; }
+ public Object V11 { get; set; }
+ public Object V12 { get; set; }
+ public Object V13 { get; set; }
+ public Object V14 { get; set; }
+ public Object V15 { get; set; }
+ public Object V16 { get; set; }
+ public Object V17 { get; set; }
+ public Object V18 { get; set; }
+ public Object V19 { get; set; }
+ public Object V20 { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridView.xaml.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridView.xaml.cs
index 5dc17ed66..c16086d9f 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridView.xaml.cs
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/ResultGridView.xaml.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
@@ -81,18 +82,22 @@ namespace Tango.FSE.Procedures.Dialogs
//Generate columns
foreach (var prop in model.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
+ var att = prop.GetCustomAttribute<DescriptionAttribute>();
+
grid.Columns.Add(new DataGridTextColumn()
{
- Header = prop.Name,
+ Header = att != null ? att.Description : prop.Name,
Binding = new Binding($"V{columnCount++}"),
});
}
foreach (var field in model.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance))
{
+ var att = field.GetCustomAttribute<DescriptionAttribute>();
+
grid.Columns.Add(new DataGridTextColumn()
{
- Header = field.Name,
+ Header = att != null ? att.Description : field.Name,
Binding = new Binding($"V{columnCount++}"),
});
}
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/UserInputDialogViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/UserInputDialogViewVM.cs
index 738c71ca9..e8fc957d9 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/UserInputDialogViewVM.cs
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Dialogs/UserInputDialogViewVM.cs
@@ -40,6 +40,7 @@ namespace Tango.FSE.Procedures.Dialogs
if (Model.GetType().IsValueTypeOrString())
{
Parameter p = new Parameter();
+ p.Value = Model.ToStringSafe();
p.Name = "Value";
Parameters.Add(p);
}
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/IProcedureContext.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/IProcedureContext.cs
index 84301896d..a142e183c 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/IProcedureContext.cs
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/IProcedureContext.cs
@@ -294,8 +294,9 @@ namespace Tango.FSE.Procedures
/// <summary>
/// Gets the latest diagnostics package.
/// </summary>
+ /// <param name="waitForNext">Waits for a fresh package.</param>
/// <returns></returns>
- DiagnosticsPackage GetDiagnosticsPackage();
+ DiagnosticsPackage GetDiagnosticsPackage(bool waitForNext = false);
/// <summary>
/// Pauses the script execution for the specified time in milliseconds.
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ProcedureContext.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ProcedureContext.cs
index 2ce26daa7..8724b12a5 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ProcedureContext.cs
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ProcedureContext.cs
@@ -2,6 +2,7 @@
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
+using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reactive.Concurrency;
@@ -31,6 +32,7 @@ namespace Tango.FSE.Procedures
private IProcedureLogger _logger;
private ProcedureProject _project;
private Dictionary<String, ProcedureInput> _inputs;
+ private DiagnosticsFrame _lastDiagnosticsFrame;
[TangoInject]
private IMachineProvider MachineProvider { get; set; }
@@ -471,8 +473,26 @@ namespace Tango.FSE.Procedures
WriteLine(line);
}
- public DiagnosticsPackage GetDiagnosticsPackage()
+ public DiagnosticsPackage GetDiagnosticsPackage(bool waitForNext = false)
{
+ if (waitForNext)
+ {
+ Stopwatch watch = new Stopwatch();
+ watch.Start();
+
+ while (_lastDiagnosticsFrame == DiagnosticsProvider.CurrentFrame)
+ {
+ Thread.Sleep(10);
+
+ if (watch.Elapsed.TotalSeconds > 5)
+ {
+ throw new TimeoutException("Diagnostics package did not arrive within the given time of 5 seconds.");
+ }
+ }
+ }
+
+ _lastDiagnosticsFrame = DiagnosticsProvider.CurrentFrame;
+
return DiagnosticsProvider.CurrentFrame.ToPackage();
}
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Resources/lib_template.csx b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Resources/lib_template.csx
index 3b317dbad..0fcf7da88 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Resources/lib_template.csx
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Resources/lib_template.csx
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
+using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Resources/main_template.csx b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Resources/main_template.csx
index 8c17cf72f..4f0dd0922 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Resources/main_template.csx
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Resources/main_template.csx
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
+using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Result.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Result.cs
index 3cd093f7f..ef63ae108 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Result.cs
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Result.cs
@@ -1,4 +1,5 @@
-using System;
+using Newtonsoft.Json;
+using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
@@ -13,8 +14,11 @@ namespace Tango.FSE.Procedures
public ResultType Type { get; set; }
public String Name { get; set; }
public Object Value { get; set; }
+
+ [JsonIgnore]
public bool IsGraph { get; set; }
+ [JsonIgnore]
public bool IsValueArray
{
get { return Value != null && typeof(IEnumerable).IsAssignableFrom(Value.GetType()) && Value.GetType() != typeof(String); }
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Tango.FSE.Procedures.csproj b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Tango.FSE.Procedures.csproj
index b062266b3..8ff4f771e 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Tango.FSE.Procedures.csproj
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Tango.FSE.Procedures.csproj
@@ -103,6 +103,8 @@
<Compile Include="Contracts\IProcedureDesignerView.cs" />
<Compile Include="CreateGroup.cs" />
<Compile Include="CreateItem.cs" />
+ <Compile Include="CSV\CsvColumn.cs" />
+ <Compile Include="CSV\CsvRow.cs" />
<Compile Include="Designer\ProjectModel.cs" />
<Compile Include="Designer\ScriptTabModel.cs" />
<Compile Include="Dialogs\AddReferenceAssemblyView.xaml.cs">
@@ -224,6 +226,10 @@
<Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project>
<Name>Tango.Core</Name>
</ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.CSV\Tango.CSV.csproj">
+ <Project>{58e8825f-0c96-449c-b320-1e82b0aa876b}</Project>
+ <Name>Tango.CSV</Name>
+ </ProjectReference>
<ProjectReference Include="..\..\..\Tango.Integration\Tango.Integration.csproj">
<Project>{4206ac58-3b57-4699-8835-90bf6db01a61}</Project>
<Name>Tango.Integration</Name>
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/ProcedureRunnerViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/ProcedureRunnerViewVM.cs
index cf54087ba..9d845218e 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/ProcedureRunnerViewVM.cs
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/ViewModels/ProcedureRunnerViewVM.cs
@@ -1,12 +1,17 @@
using System;
+using System.Collections;
using System.Collections.Generic;
+using System.ComponentModel;
using System.Linq;
+using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Tango.BL.Entities;
using Tango.Core;
using Tango.Core.Commands;
+using Tango.CSV;
using Tango.FSE.Common;
+using Tango.FSE.Procedures.CSV;
using Tango.FSE.Procedures.Dialogs;
using Tango.FSE.Procedures.Messages;
using Tango.FSE.Procedures.Views;
@@ -104,6 +109,7 @@ namespace Tango.FSE.Procedures.ViewModels
public RelayCommand StartProjectCommand { get; set; }
public RelayCommand StopProjectCommand { get; set; }
public RelayCommand<Result> DisplayResultGridCommand { get; set; }
+ public RelayCommand<Result> ExportResultGridCommand { get; set; }
public ProcedureRunnerViewVM()
{
@@ -112,6 +118,7 @@ namespace Tango.FSE.Procedures.ViewModels
StartProjectCommand = new RelayCommand(StartProject, () => ProjectRunner != null && ProjectRunner.CanRun);
StopProjectCommand = new RelayCommand(StopProject, () => ProjectRunner != null && ProjectRunner.IsRunning);
DisplayResultGridCommand = new RelayCommand<Result>(DisplayResultGrid);
+ ExportResultGridCommand = new RelayCommand<Result>(ExportResultGrid);
_requiresReloadingOfProjects = true;
RegisterForMessage<ProcedureProjectPublishedOrSuppressed>((x) => _requiresReloadingOfProjects = true);
@@ -251,5 +258,98 @@ namespace Tango.FSE.Procedures.ViewModels
NotificationProvider.ShowDialog(vm);
}
}
+
+ private async void ExportResultGrid(Result result)
+ {
+ if (result != null && result.IsValueArray && (result.Value as IList).Count > 0)
+ {
+ var r = await StorageProvider.SaveFile("Export procedure result", "CSV Files|*.csv", result.Name + ".csv", ".csv");
+ if (r.Confirmed)
+ {
+ using (NotificationProvider.PushTaskItem("Exporting csv file..."))
+ {
+ try
+ {
+ await Task.Factory.StartNew(() =>
+ {
+ List<Object> values = (result.Value as IEnumerable).Cast<Object>().ToList();
+
+ var model = values.First();
+
+ if (model.GetType().IsValueTypeOrString())
+ {
+ CsvFile<CsvRow> csvFile = new CsvFile<CsvRow>(new CsvDestination(r.SelectedItem), new CsvDefinition() { Columns = new List<String>() { "Values" } });
+
+ foreach (var value in values)
+ {
+ csvFile.Append(new CsvRow()
+ {
+ V0 = value
+ });
+ }
+
+ csvFile.Dispose();
+ }
+ else
+ {
+ List<CsvColumn> columns = new List<CsvColumn>();
+
+ //prop columns
+ foreach (var prop in model.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
+ {
+ var att = prop.GetCustomAttribute<DescriptionAttribute>();
+ columns.Add(new CsvColumn()
+ {
+ Name = prop.Name,
+ Description = att != null ? att.Description : prop.Name,
+ IsProperty = true,
+ PropertyInfo = prop
+ });
+ }
+
+ //field columns
+ foreach (var field in model.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance))
+ {
+ var att = field.GetCustomAttribute<DescriptionAttribute>();
+ columns.Add(new CsvColumn()
+ {
+ Name = field.Name,
+ Description = att != null ? att.Description : field.Name,
+ FieldInfo = field
+ });
+ }
+
+ CsvFile<CsvRow> csvFile = new CsvFile<CsvRow>(new CsvDestination(r.SelectedItem), new CsvDefinition() { Columns = columns.Select(x => x.Description).ToList() });
+
+ List<PropertyInfo> rowProps = typeof(CsvRow).GetProperties().ToList();
+
+ foreach (var value in values)
+ {
+ CsvRow row = new CsvRow();
+
+ for (int i = 0; i < columns.Count; i++)
+ {
+ var column = columns[i];
+ rowProps[i].SetValue(row, column.GetValue(value));
+ }
+
+ csvFile.Append(row);
+ }
+
+ csvFile.Dispose();
+ }
+ });
+
+ await NotificationProvider.ShowSuccess("File exported successfully.");
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error exporting csv file.");
+ await NotificationProvider.ShowError($"Error occurred while exporting the csv file.\n{ex.FlattenMessage()}");
+ }
+ }
+ }
+ }
+ }
}
}
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Views/ProcedureDesignerView.xaml b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Views/ProcedureDesignerView.xaml
index b76b3af5d..26c1e19b8 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Views/ProcedureDesignerView.xaml
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Views/ProcedureDesignerView.xaml
@@ -234,7 +234,7 @@
<TextBox Background="{StaticResource FSE_PrimaryBackgroundBrush}" Padding="5" Text="{Binding Project.Name,UpdateSourceTrigger=PropertyChanged,NotifyOnValidationError=True,ValidatesOnDataErrors=True,ValidatesOnNotifyDataErrors=True}" Margin="0 2 0 0" Style="{StaticResource FSE_Rounded_Corners_TextBox}"></TextBox>
<TextBlock Foreground="{StaticResource FSE_GrayBrush}" Margin="2 15 0 0" FontSize="{StaticResource FSE_SmallFontSize}">Description</TextBlock>
- <TextBox Text="{Binding Project.Description,UpdateSourceTrigger=PropertyChanged}" Margin="0 2 0 0" Style="{StaticResource FSE_Rounded_Corners_TextBox_Multiline}" MinHeight="100"></TextBox>
+ <TextBox Text="{Binding Project.Description,UpdateSourceTrigger=PropertyChanged}" Margin="0 2 0 0" Style="{StaticResource FSE_Rounded_Corners_TextBox_Multiline}" MinHeight="100" TextWrapping="Wrap"></TextBox>
</StackPanel>
<DockPanel Margin="0 20 0 0">
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Views/ProcedureRunnerExecutionView.xaml b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Views/ProcedureRunnerExecutionView.xaml
index a85a3e024..1f682c033 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Views/ProcedureRunnerExecutionView.xaml
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Stubs/Views/ProcedureRunnerExecutionView.xaml
@@ -149,6 +149,7 @@
<Run Text="Values."></Run>
</TextBlock>
<Button Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.DisplayResultGridCommand}" CommandParameter="{Binding}" Height="22" FontSize="{StaticResource FSE_SmallFontSize}" Foreground="{StaticResource FSE_PrimaryAccentBrush}" Background="Transparent" BorderBrush="Transparent" Margin="0 -4 0 0">(Grid View)</Button>
+ <Button Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.ExportResultGridCommand}" CommandParameter="{Binding}" Height="22" FontSize="{StaticResource FSE_SmallFontSize}" Foreground="{StaticResource FSE_PrimaryAccentBrush}" Background="Transparent" Padding="0" BorderBrush="Transparent" Margin="0 -4 0 0">(Export To CSV)</Button>
</StackPanel>
<StackPanel Visibility="{Binding IsGraph,Converter={StaticResource BooleanToVisibilityConverter}}">
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/ViewModels/ApplicationUpgradeGeneratedViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/ViewModels/ApplicationUpgradeGeneratedViewVM.cs
index f1737463d..003aebab0 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/ViewModels/ApplicationUpgradeGeneratedViewVM.cs
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/ViewModels/ApplicationUpgradeGeneratedViewVM.cs
@@ -247,14 +247,17 @@ namespace Tango.FSE.Upgrade.ViewModels
{
var abort = await NotificationProvider.ShowWarningQuestion("Are you sure you want to abort the upgrade operation?");
- if (Handler.CanAbort)
+ if (Handler.Status == RemoteUpgradeHandlerStatus.Started)
{
- Handler.Abort();
- }
- else
- {
- await NotificationProvider.ShowWarning("Cannot abort the operation at this stage.");
- return false;
+ if (Handler.CanAbort)
+ {
+ Handler.Abort();
+ }
+ else
+ {
+ await NotificationProvider.ShowWarning("Cannot abort the operation at this stage.");
+ return false;
+ }
}
return abort;
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/ViewModels/FirmwareUpgradeGeneratedViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/ViewModels/FirmwareUpgradeGeneratedViewVM.cs
index ec35a9581..57cd3aa43 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/ViewModels/FirmwareUpgradeGeneratedViewVM.cs
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/ViewModels/FirmwareUpgradeGeneratedViewVM.cs
@@ -219,14 +219,17 @@ namespace Tango.FSE.Upgrade.ViewModels
{
var abort = await NotificationProvider.ShowWarningQuestion("Are you sure you want to abort the upgrade operation?");
- if (Handler.CanAbort)
+ if (Handler.Status == RemoteUpgradeHandlerStatus.Started)
{
- Handler.Abort();
- }
- else
- {
- await NotificationProvider.ShowWarning("Cannot abort the operation at this stage.");
- return false;
+ if (Handler.CanAbort)
+ {
+ Handler.Abort();
+ }
+ else
+ {
+ await NotificationProvider.ShowWarning("Cannot abort the operation at this stage.");
+ return false;
+ }
}
return abort;
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/ViewModels/FirmwareUpgradeViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/ViewModels/FirmwareUpgradeViewVM.cs
index 6a5ba78b1..ed434d92f 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/ViewModels/FirmwareUpgradeViewVM.cs
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/ViewModels/FirmwareUpgradeViewVM.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -40,6 +41,14 @@ namespace Tango.FSE.Upgrade.ViewModels
set { _existingTfpFileLocation = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); }
}
+ private String _existingTfpFileVersion;
+ public String ExistingTfpFileVersion
+ {
+ get { return _existingTfpFileVersion; }
+ set { _existingTfpFileVersion = value; RaisePropertyChangedAuto(); }
+ }
+
+
private RemoteUpgradeHandler _handler;
public RemoteUpgradeHandler Handler
{
@@ -77,6 +86,22 @@ namespace Tango.FSE.Upgrade.ViewModels
var result = await StorageProvider.OpenFile("Select existing firmware package file", "Tango Firmware Package|*.tfp");
if (result)
{
+ try
+ {
+ LogManager.Log("Validating firmware package file...");
+ using (FileStream s = File.OpenRead(result.SelectedItem))
+ {
+ var package = MachineProvider.MachineOperator.GetFirmwarePackageInfo(s).Result;
+ package.Validate();
+ ExistingTfpFileVersion = package.GetMcuVersion().ToString();
+ }
+ }
+ catch (Exception ex)
+ {
+ await NotificationProvider.ShowError($"Error loading the selected tfp file.\n{ex.FlattenMessage()}");
+ return;
+ }
+
ExistingTfpFileLocation = result.SelectedItem;
}
}
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/ApplicationUpgradeGeneratedView.xaml b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/ApplicationUpgradeGeneratedView.xaml
index 3c775f3f3..c1f60d813 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/ApplicationUpgradeGeneratedView.xaml
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/ApplicationUpgradeGeneratedView.xaml
@@ -69,7 +69,7 @@
<TextBlock Margin="10 0 0 0" VerticalAlignment="Center" FontSize="{StaticResource FSE_LargeFontSize}">UPGRADE NOW</TextBlock>
</StackPanel>
</Button>
- <Button material:ButtonAssist.CornerRadius="25" Command="{Binding SaveTupFileCommand}" Visibility="{Binding ElementName=chkSaveToDisk,Path=IsChecked,Converter={StaticResource BooleanToVisibilityConverter}}" DockPanel.Dock="Right" HorizontalAlignment="Right" Width="250" Height="50">
+ <Button material:ButtonAssist.CornerRadius="25" Command="{Binding SaveTupFileCommand}" Visibility="{Binding ElementName=chkSaveToDisk,Path=IsChecked,Converter={StaticResource BooleanToVisibilityConverter}}" DockPanel.Dock="Right" HorizontalAlignment="Right" Width="250" Height="50" VerticalAlignment="Bottom">
<StackPanel Orientation="Horizontal">
<material:PackIcon Width="32" Height="28" Kind="ContentSaveEdit" />
<TextBlock Margin="10 0 0 0" VerticalAlignment="Center" FontSize="{StaticResource FSE_LargeFontSize}">SAVE PACKAGE</TextBlock>
@@ -78,7 +78,7 @@
</Grid>
<StackPanel VerticalAlignment="Bottom" Margin="0 0 40 0">
- <TextBlock Text="{Binding Handler.Progress.Message}" ToolTip="{Binding Handler.Progress.Message}" TextTrimming="CharacterEllipsis" Style="{StaticResource FSE_HandlerStatusTextBlock}"></TextBlock>
+ <TextBlock Text="{Binding Handler.Progress.Message}" TextWrapping="NoWrap" MaxHeight="110" TextTrimming="CharacterEllipsis" ToolTip="{Binding Handler.Progress.Message}" Style="{StaticResource FSE_HandlerStatusTextBlock}"></TextBlock>
<ProgressBar Margin="0 5 0 0" Minimum="0" Maximum="{Binding Handler.Progress.Maximum}" Value="{Binding Handler.Progress.Value}" IsIndeterminate="{Binding Handler.Progress.IsIndeterminate}"></ProgressBar>
</StackPanel>
</DockPanel>
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/ApplicationUpgradeView.xaml b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/ApplicationUpgradeView.xaml
index 046259d75..3a1ab183d 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/ApplicationUpgradeView.xaml
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/ApplicationUpgradeView.xaml
@@ -22,7 +22,7 @@
</Style>
</Grid.Style>
<StackPanel>
- <TextBlock FontSize="{StaticResource FSE_LargeFontSize}">Application Upgrade</TextBlock>
+ <TextBlock FontSize="{StaticResource FSE_LargeFontSize}">Full Upgrade</TextBlock>
<TextBlock Margin="0 10 0 0" Foreground="{StaticResource FSE_GrayBrush}" LineHeight="20" Visibility="{Binding ResolutionService.IsHighResolution,Converter={StaticResource BooleanToVisibilityConverter}}">
<Run>You chose to perform a machine application and firmware upgrade.</Run>
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/FirmwareUpgradeGeneratedView.xaml b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/FirmwareUpgradeGeneratedView.xaml
index a8739b347..a9d6034fd 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/FirmwareUpgradeGeneratedView.xaml
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/FirmwareUpgradeGeneratedView.xaml
@@ -52,7 +52,7 @@
<StackPanel VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="1000">
<DockPanel>
<Grid DockPanel.Dock="Right" >
- <Button material:ButtonAssist.CornerRadius="25" Visibility="{Binding ElementName=chkUpgradeNow,Path=IsChecked,Converter={StaticResource BooleanToVisibilityConverter}}" Command="{Binding StartUpgradeCommand}" HorizontalAlignment="Right" Width="250" Height="50">
+ <Button material:ButtonAssist.CornerRadius="25" Visibility="{Binding ElementName=chkUpgradeNow,Path=IsChecked,Converter={StaticResource BooleanToVisibilityConverter}}" Command="{Binding StartUpgradeCommand}" HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="250" Height="50">
<StackPanel Orientation="Horizontal">
<material:PackIcon Width="32" Height="28" Kind="ClockFast" />
<TextBlock Margin="10 0 0 0" VerticalAlignment="Center" FontSize="{StaticResource FSE_LargeFontSize}">UPGRADE NOW</TextBlock>
@@ -67,7 +67,7 @@
</Grid>
<StackPanel VerticalAlignment="Bottom" Margin="0 0 40 0">
- <TextBlock Text="{Binding Handler.Progress.Message}" Style="{StaticResource FSE_HandlerStatusTextBlock}"></TextBlock>
+ <TextBlock Text="{Binding Handler.Progress.Message}" TextWrapping="NoWrap" MaxHeight="110" TextTrimming="CharacterEllipsis" ToolTip="{Binding Handler.Progress.Message}" Style="{StaticResource FSE_HandlerStatusTextBlock}"></TextBlock>
<ProgressBar Margin="0 5 0 0" Minimum="0" Maximum="{Binding Handler.Progress.Maximum}" Value="{Binding Handler.Progress.Value}" IsIndeterminate="{Binding Handler.Progress.IsIndeterminate}"></ProgressBar>
</StackPanel>
</DockPanel>
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/FirmwareUpgradeView.xaml b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/FirmwareUpgradeView.xaml
index d105c5617..6aeb0fcb1 100644
--- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/FirmwareUpgradeView.xaml
+++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Upgrade/Views/FirmwareUpgradeView.xaml
@@ -67,12 +67,17 @@
</DockPanel>
</RadioButton>
- <StackPanel IsEnabled="{Binding ElementName=chkExisting,Path=IsChecked}" Margin="80 10 0 0" Width="380" HorizontalAlignment="Left">
+ <StackPanel IsEnabled="{Binding ElementName=chkExisting,Path=IsChecked}" Margin="80 10 0 0" HorizontalAlignment="Left">
<TextBlock>Select an existing .tfp file on your computer</TextBlock>
<DockPanel Margin="0 0 0 0">
+ <DockPanel DockPanel.Dock="Right" Margin="0 0 0 0" Visibility="{Binding ExistingTfpFileLocation,Converter={StaticResource IsNullToVisibilityConverter}}">
+ <TextBlock Margin="10 0 0 0" Foreground="{StaticResource FSE_PrimaryAccentBrush}" FontSize="{StaticResource FSE_SmallFontSize}" VerticalAlignment="Center">
+ <Run>v</Run><Run Text="{Binding ExistingTfpFileVersion}"></Run>
+ </TextBlock>
+ </DockPanel>
<controls:IconButton ToolTip="Browse for .tfp file" Margin="5 0 0 0" DockPanel.Dock="Right" Icon="FolderOpenOutline" Width="38" Height="38" Command="{Binding SelectExistingTfpFileLocationCommand}" />
- <TextBox FontSize="{StaticResource FSE_SmallFontSize}" Foreground="{StaticResource FSE_PrimaryAccentBrush}" IsReadOnly="True" Text="{Binding ExistingTfpFileLocation,Converter={StaticResource FilePathToFileNameConverter}}" VerticalContentAlignment="Bottom"></TextBox>
+ <TextBox Width="350" FontSize="{StaticResource FSE_SmallFontSize}" Foreground="{StaticResource FSE_PrimaryAccentBrush}" IsReadOnly="True" Text="{Binding ExistingTfpFileLocation,Converter={StaticResource FilePathToFileNameConverter}}" VerticalContentAlignment="Bottom"></TextBox>
</DockPanel>
</StackPanel>
</StackPanel>
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/OrganizationsService.cs b/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/OrganizationsService.cs
index 730cd7409..fc2b79566 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/OrganizationsService.cs
+++ b/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/OrganizationsService.cs
@@ -145,7 +145,7 @@ namespace Tango.FSE.BL.Services
using (ObservablesContext db = ObservablesContext.CreateDefault())
{
- var usersRolesToAdd = user.UsersRoles;
+ var usersRolesToAdd = user.UsersRoles.ToList();
user.UsersRoles.Clear();
foreach (var userRole in usersRolesToAdd)
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/PublishedProcedureProjectsService.cs b/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/PublishedProcedureProjectsService.cs
index 074483dec..baa5d3fdd 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/PublishedProcedureProjectsService.cs
+++ b/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/PublishedProcedureProjectsService.cs
@@ -36,7 +36,7 @@ namespace Tango.FSE.BL.Services
throw new IndexOutOfRangeException("The memory cache did not contain any procedure projects.");
}
- return projects.OrderByDescending(x => x.PublishDate).ToList();
+ return projects.OrderBy(x => x.SortingIndex).ToList();
})
.Online((context) =>
{
@@ -79,7 +79,7 @@ namespace Tango.FSE.BL.Services
}
}
- return projects.OrderByDescending(x => x.PublishDate).ToList();
+ return projects.OrderBy(x => x.SortingIndex).ToList();
}
})
.DiskCache((context) =>
@@ -97,7 +97,7 @@ namespace Tango.FSE.BL.Services
_projectsCache.Put(cachedProject.Guid, cachedProject);
}
- return cachedProjects.Select(x => x.ToObservable()).OrderByDescending(x => x.PublishDate).ToList();
+ return cachedProjects.Select(x => x.ToObservable()).OrderBy(x => x.SortingIndex).ToList();
}
})
.BuildExecuteAsync();
@@ -131,6 +131,7 @@ namespace Tango.FSE.BL.Services
if (projectGuid == null)
{
project = new PublishedProcedureProject();
+ project.PublishDate = DateTime.UtcNow;
db.PublishedProcedureProjects.Add(project);
}
else
@@ -143,11 +144,16 @@ namespace Tango.FSE.BL.Services
{
version = lastVersion.Value + 1;
}
+
+ if (!project.IsVisible)
+ {
+ project.PublishDate = DateTime.UtcNow;
+ }
}
project.Name = name;
+ project.LastUpdated = DateTime.UtcNow;
project.Description = description;
- project.PublishDate = DateTime.UtcNow;
project.IsVisible = true;
PublishedProcedureProjectsVersion projectVersion = new PublishedProcedureProjectsVersion();
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/RemoteUpgrade/RemoteUpgradeHandler.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/RemoteUpgrade/RemoteUpgradeHandler.cs
index 85e48a045..e06c2f95b 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.Common/RemoteUpgrade/RemoteUpgradeHandler.cs
+++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/RemoteUpgrade/RemoteUpgradeHandler.cs
@@ -102,18 +102,21 @@ namespace Tango.FSE.Common.RemoteUpgrade
{
FailedException = exception;
Status = RemoteUpgradeHandlerStatus.Failed;
+ CanAbort = true;
_completionSource.SetException(exception);
}
internal void RaiseCompleted()
{
Status = RemoteUpgradeHandlerStatus.Completed;
+ CanAbort = true;
_completionSource.SetResult(Status);
}
internal void RaiseAborted()
{
Status = RemoteUpgradeHandlerStatus.Aborted;
+ CanAbort = true;
_completionSource.SetException(new OperationCanceledException("Remote upgrade operation aborted."));
}
}
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Notifications/DefaultNotificationProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/Notifications/DefaultNotificationProvider.cs
index ce64bd0f1..368752120 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Notifications/DefaultNotificationProvider.cs
+++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Notifications/DefaultNotificationProvider.cs
@@ -900,7 +900,7 @@ namespace Tango.FSE.UI.Notifications
DemoModeManager.InsertCommand(() =>
{
- PushErrorReportingSnackbar(new TimeoutException("This is a demo exception"), "Test Error", "This is a demo exception.");
+ throw new TimeoutException("This is a fake exception.");
}, "Emulate Bug Reporting Error", "Creates a snackbar notification with a fake error and bug reporting option.");
}
}
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteUpgrade/DefaultRemoteUpgradeManager.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteUpgrade/DefaultRemoteUpgradeManager.cs
index f64958bcf..0ce74e51e 100644
--- a/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteUpgrade/DefaultRemoteUpgradeManager.cs
+++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteUpgrade/DefaultRemoteUpgradeManager.cs
@@ -558,7 +558,7 @@ namespace Tango.FSE.UI.RemoteUpgrade
LogManager.Log("Retrieving remote temporary folder...");
var remoteTempFolder = FileSystemProvider.GetFolder("%temp%").Result as FileSystemItem;
- var remoteTempFile = Path.Combine(remoteTempFolder.Path, Path.GetTempFileName());
+ var remoteTempFile = Path.Combine(remoteTempFolder.Path, Path.GetFileName(Path.GetTempFileName()));
LogManager.Log("Uploading tup file to remote machine...");
var uploadHandler = FileSystemProvider.Upload(tupFile, remoteTempFile).Result;
@@ -681,7 +681,7 @@ namespace Tango.FSE.UI.RemoteUpgrade
LogManager.Log("Retrieving remote temporary folder...");
var remoteTempFolder = FileSystemProvider.GetFolder("%temp%").Result as FileSystemItem;
- var remoteTempFile = Path.Combine(remoteTempFolder.Path, Path.GetTempFileName());
+ var remoteTempFile = Path.Combine(remoteTempFolder.Path, Path.GetFileName(Path.GetTempFileName()));
LogManager.Log("Uploading tfp file to remote machine...");
var uploadHandler = FileSystemProvider.Upload(tfpFile, remoteTempFile).Result;
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
index eed594718..01def8679 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
@@ -2321,7 +2321,13 @@ namespace Tango.MachineStudio.Developer.ViewModels
return;
}
SelectedSegment.BrushStops.Remove(x);
- _activeJobDbContext.BrushStops.Remove(x);
+ var existingBrushStop = _activeJobDbContext.BrushStops.FirstOrDefault(y => y.Guid == x.Guid);
+ if(existingBrushStop != null)
+ {
+ _activeJobDbContext.BrushStops.Remove(existingBrushStop);
+ }
+
+
});
ArrangeBrushStopsIndices();
@@ -2356,6 +2362,7 @@ namespace Tango.MachineStudio.Developer.ViewModels
stop.SetAllDispensingStepDivisions(BL.Dispensing.DispenserStepDivisions.D8);
stop.SetLiquidVolumes(SelectedMachine.Configuration, SelectedRML, SelectedProcessParametersTable);
SelectedSegment.BrushStops.Add(stop);
+ // _activeJobDbContext.BrushStops.Add(stop);
SelectedSegment.BrushStops.ToList().ForEach(x => x.RaiseOffsetChanged());
ArrangeBrushStopsIndices();
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml
index ed832f468..35c621822 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml
@@ -976,7 +976,8 @@
<Image Source="../Images/colorspace.png" Width="24"></Image>
<TextBlock VerticalAlignment="Center" Margin="5 0 0 0" FontSize="10">Color Space</TextBlock>
</StackPanel>
- <ComboBox SelectionChanged="OnBrushStopColorSpace_SelectionChanged" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.ColorSpaces}" SelectedItem="{Binding ColorSpace}" DisplayMemberPath="Name" Width="100" HorizontalAlignment="Left">
+ <ComboBox SelectionChanged="OnBrushStopColorSpace_SelectionChanged" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.ColorSpaces}" SelectedItem="{Binding ColorSpace}" DisplayMemberPath="Name" Width="100" HorizontalAlignment="Left"
+ Style="{StaticResource TransparentComboBoxStyle}" >
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem" BasedOn="{StaticResource {x:Type ComboBoxItem}}">
<Setter Property="Background" Value="{StaticResource WhiteBrush100}"></Setter>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs
new file mode 100644
index 000000000..fe9ec7e37
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Models/ColorLinearizationModel.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Documents;
+
+namespace Tango.MachineStudio.RML.Models
+{
+ public class ColorLinearizationModel
+ {
+ private class LinearizationDataItem
+ {
+ public double L { get; set; }
+ public double A { get; set; }
+ public double B { get; set; }
+ public int InkPercentage { get; set; }
+ }
+
+ public ColorLinearizationModel()
+ {
+
+ }
+
+ public void GetDataFromFile(string fileName)
+ {
+
+ ExcelReader reader = new ExcelReader(fileName);
+ var items = reader.GetDataByIndex<LinearizationDataItem>("Sheet1", 2);
+ foreach (var item in items)
+ {
+ }
+ reader.Dispose();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Tango.MachineStudio.RML.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Tango.MachineStudio.RML.csproj
index 1f9d56f07..145a0e06e 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Tango.MachineStudio.RML.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Tango.MachineStudio.RML.csproj
@@ -81,6 +81,7 @@
<Compile Include="Contracts\IMainView.cs" />
<Compile Include="Models\CalibrationMeasurementModel.cs" />
<Compile Include="Models\CctModel.cs" />
+ <Compile Include="Models\ColorLinearizationModel.cs" />
<Compile Include="RMLModule.cs" />
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs
index d44ef7a0c..f118ce77a 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs
@@ -42,6 +42,14 @@ namespace Tango.MachineStudio.RML.ViewModels
set { _liquidType = value; RaisePropertyChangedAuto(); }
}
+ private BL.Entities.LiquidType _selectedLinearizationliquidType;
+
+ public BL.Entities.LiquidType SelectedLinearizationLiquidType
+ {
+ get { return _selectedLinearizationliquidType; }
+ set { _selectedLinearizationliquidType = value; RaisePropertyChangedAuto(); }
+ }
+
private List<BL.Entities.LiquidType> _liquidTypes;
public List<BL.Entities.LiquidType> LiquidTypes
@@ -89,13 +97,19 @@ namespace Tango.MachineStudio.RML.ViewModels
}
public RelayCommand CreateGraphCommand { get; set; }
+ public RelayCommand CreateLinearizationGraphCommand { get; set; }
-
- public string CalibrationType
+
+ public string CalibrationLiquidTypeName
{
get { return LiquidType == null ?"" : LiquidType.Name; }
}
+ public string LinearizationLiquidTypeName
+ {
+ get { return SelectedLinearizationLiquidType == null ? "" : SelectedLinearizationLiquidType.Name; }
+ }
+
public Plot PlotControl { get; set; }
private IList<DataPoint> _points;
/// <summary>
@@ -156,6 +170,22 @@ namespace Tango.MachineStudio.RML.ViewModels
}
}
+
+ public Plot LinearizationPlotControl { get; set; }
+ private IList<DataPoint> _linearizationPoints;
+ /// <summary>
+ /// Binding to ItemsSource of line chart.
+ /// </summary>
+ public IList<DataPoint> LinearizationPoints
+ {
+ get { return _linearizationPoints; }
+ set
+ {
+ _linearizationPoints = value;
+ RaisePropertyChangedAuto();
+ }
+ }
+
#endregion
public ColorCalibrationViewVM(INotificationProvider notification)
@@ -170,6 +200,7 @@ namespace Tango.MachineStudio.RML.ViewModels
Factor = 0;
HasError = false;
CreateGraphCommand = new RelayCommand(CreateGraph);
+ CreateLinearizationGraphCommand = new RelayCommand(CreateLinearizationGraph);
this.Points = new List<DataPoint>();
TargetPoints = new List<DataPoint>();
}
@@ -245,92 +276,38 @@ namespace Tango.MachineStudio.RML.ViewModels
RaisePropertyChanged("CalibrationType");
PlotControl.InvalidatePlot(true);
- //await Task.Factory.StartNew(() =>
- //{
- // DataPoint ? intersectionpoints = FindIntersection(Points.ToArray(), TargetPoints.ToArray());
- // if(intersectionpoints == null)
- // {
- // InvokeUI(() =>
- // {
- // _notification.ShowWarning(LogManager.Log($"No intersect target value with input values", LogCategory.Warning));
- // });
- // }
- //});
-
}
#endregion
+ #region CreateLinearizationGraph
- #region Intersect
-
- public DataPoint? FindIntersection(DataPoint[] line1, DataPoint[] line2)
- {
- for (int i = 0; i < line1.Length; i++)
- {
- int nextI = i;
- nextI++;
- if (nextI == line1.Length) break;
-
- for (int j = 0; j < line2.Length; j++)
- {
- int nextJ = j;
- nextJ++;
- if (nextJ == line2.Length) break;
- DataPoint? d = CheckIntersecting(line1[i], line1[nextI], line2[j], line2[nextJ]);
- return d;
-
- }
- }
- return null;
- }
-
- public DataPoint? CheckIntersecting(DataPoint A, DataPoint B, DataPoint C, DataPoint D)
+ private void CreateLinearizationGraph(object obj)
{
- // Line AB represented as a1x + b1y = c1
- double a1 = B.Y - A.Y;
- double b1 = A.X - B.X;
- double c1 = a1 * (A.X) + b1 * (A.Y);
+ if (_selectedLinearizationliquidType == null)
+ return;
- // Line CD represented as a2x + b2y = c2
- double a2 = D.Y - C.Y;
- double b2 = C.X - D.X;
- double c2 = a2 * (C.X) + b2 * (C.Y);
+ string labType = ColorCalibrationExt.DisplayLiquidTypeToLABType[_selectedLinearizationliquidType.Type];
- double determinant = a1 * b2 - a2 * b1;
+ ColorLinearizationModel model = new ColorLinearizationModel();
+ string fileName = @"C:\Test\Test Input Lineration.xlsx";
+ model.GetDataFromFile(fileName);
+ //await Task.Factory.StartNew(() =>
+ //{
+ // Factor = GetLiquidFactor();
+ //});
- if (determinant == 0)
- {
- // The lines are parallel. This is simplified
- }
- else
- {
- double x = (b2 * c1 - b1 * c2) / determinant;
- double y = (a1 * c2 - a2 * c1) / determinant;
+ LinearizationPoints.Clear();
+
+ Measurements.ToList().ForEach(x => {
+ LinearizationPoints.Add(new DataPoint(x.Ink, x.L));
+ });
- // check if the point lies on given line segment
- /* To check if "x" is between "a" and "b";
- int m = (a+b)/2;
- if(Math.abs(x-m) <= (Math.abs(a-m)))
- {
- }
- */
- double mx1 = (A.X + B.X) / 2;
- double mx2 = (C.X + D.X) / 2;
- double my1 = (A.Y + B.Y) / 2;
- double my2 = (C.Y + D.Y) / 2;
- if (Math.Abs(x - mx1) <= Math.Abs(A.X - mx1)
- && Math.Abs(x - mx2) <= Math.Abs(C.X - mx2)
- && Math.Abs(y - my1) <= Math.Abs(A.Y - my1)
- && Math.Abs(y - my2) <= Math.Abs(C.Y - my2))
- {
- return new DataPoint(x, y);
- }
-
- }
- return null;
+ RaisePropertyChanged("To");
+ RaisePropertyChanged("From");
+ XStep = (int)(Points.Count / 6);
+ LinearizationPlotControl.InvalidatePlot(true);
}
-
#endregion
-
+
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml
index ffe3bf68e..de433b7e7 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml
@@ -36,26 +36,28 @@
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
- <Grid Grid.Column="0" Margin="20 0 0 0">
+ <Grid Grid.Column="0" Margin="20 0 20 0">
<Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
<RowDefinition Height="1*"/>
- <RowDefinition Height="1"/>
+ <RowDefinition Height="3*"/>
</Grid.RowDefinitions>
- <Border Grid.Row="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="Auto" Height="80" Margin="0 0 0 20" >
- <StackPanel Orientation="Vertical">
- <TextBlock FontSize="16" HorizontalAlignment="Left" >Liquid Type</TextBlock>
+ <Grid Grid.Row="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="Auto" Height="80" Margin="0 0 0 20" >
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="1*"></ColumnDefinition>
+ <ColumnDefinition Width="1*"></ColumnDefinition>
+ </Grid.ColumnDefinitions>
+ <StackPanel Orientation="Vertical" Grid.Column="0">
+ <TextBlock FontSize="20" HorizontalAlignment="Left" >Liquid Type</TextBlock>
<ComboBox Margin="0 20 0 0" MinWidth="140" HorizontalAlignment="Left" ItemsSource="{Binding LiquidTypes}"
SelectedItem="{Binding LiquidType}" DisplayMemberPath="Name"
Style="{StaticResource TransparentComboBoxStyle}" FontSize="16"></ComboBox>
</StackPanel>
- </Border>
+ <Button Grid.Column="1" VerticalAlignment="Top" Background="{StaticResource TransparentBackgroundBrush200}" MinWidth="160" Height="50" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Command="{Binding CreateGraphCommand}" >
+ <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}">GET MAX DISPENSING RATE</TextBlock>
+ </Button>
+ </Grid>
<Grid Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Stretch">
- <Grid.RowDefinitions>
- <RowDefinition Height="1*"/>
- <RowDefinition Height="Auto"/>
- </Grid.RowDefinitions>
- <DataGrid HorizontalAlignment="Left" VerticalScrollBarVisibility ="Auto" Margin="0 0 0 10" SelectionUnit="FullRow" BorderBrush="{StaticResource DarkGrayBrush }" BorderThickness="1" Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="False" ItemsSource="{Binding Measurements}" >
+ <DataGrid HorizontalAlignment="Left" VerticalScrollBarVisibility ="Auto" SelectionUnit="FullRow" BorderBrush="{StaticResource DarkGrayBrush }" BorderThickness="1" Background="{StaticResource TransparentBackgroundBrush}" AlternatingRowBackground="{StaticResource Transparent200}" AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="False" ItemsSource="{Binding Measurements}" Margin="0 30 0 50">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
<Setter Property="BorderThickness" Value="0"/>
@@ -97,14 +99,17 @@
<mahapps:DataGridNumericUpDownColumn Header="B" Minimum="-128" Maximum="127" Binding="{Binding B}" HideUpDownButtons="True" Width="1*" ElementStyle="{StaticResource CellNumericUpDown}" EditingElementStyle="{StaticResource EditableCellNumericUpDown}" />
</DataGrid.Columns>
</DataGrid>
- <Button Grid.Row="1" Background="{StaticResource TransparentBackgroundBrush200}" MinWidth="160" Height="50" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Command="{Binding CreateGraphCommand}" >
- <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}">CREATE GRAPH</TextBlock>
- </Button>
+
</Grid>
</Grid>
- <Grid Grid.Column="1">
- <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="20 20 0 0">
- <oxy:Plot Title="{Binding CalibrationType}" x:Name="CalibrationPlot">
+ <Grid Grid.Column="1" Margin="20 0 20 0">
+ <Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="1*"/>
+ <RowDefinition Height="3*"/>
+ </Grid.RowDefinitions>
+ <Border Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0 20 0 0" BorderThickness="0" BorderBrush="{StaticResource DarkGrayBrush}" CornerRadius="5">
+ <oxy:Plot Title="{Binding CalibrationLiquidTypeName}" x:Name="CalibrationPlot" Margin="0 0 10 0" Background="Transparent">
<oxy:Plot.Series >
<oxy:LineSeries ItemsSource="{Binding Points}" Color="#73B6EC" MarkerFill="SteelBlue" MarkerType="Circle" />
<oxy:LineSeries ItemsSource="{Binding TargetPoints}" Color="#E14141" MarkerFill="#E14141" MarkerType="Circle" />
@@ -114,20 +119,59 @@
<oxy:LinearAxis Position="Left" Title = "Lab" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="{Binding From}" Maximum="{Binding To}"/>
</oxy:Plot.Axes>
</oxy:Plot>
- </Border>
- </Grid>
- <Grid Grid.Column="2" Margin="40 0 0 0">
- <StackPanel Orientation="Vertical">
- <TextBlock FontSize="16" HorizontalAlignment="Left" Foreground="{StaticResource MainWindow.Foreground}" Height="50" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityInverseConverter}}">
- <Run FontWeight="DemiBold"> Factor: </Run>
- <Run Text="{Binding Factor}"></Run>
- <LineBreak />
- </TextBlock>
- <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}" FontWeight="SemiBold" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}" Margin="0 20 10 20" >Warning:</TextBlock>
- <Border BorderThickness="1" CornerRadius="4" BorderBrush="{StaticResource DarkGrayBrush}" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}">
- <TextBlock Margin="5" Foreground="{StaticResource RedBrush300}" Text="{Binding ErrorMessage}" Height="75" TextWrapping="Wrap" TextTrimming="CharacterEllipsis" />
</Border>
- </StackPanel>
+ <Border BorderBrush="{StaticResource BlueBrush100}" BorderThickness="0" CornerRadius="5" Margin="55 0 20 0">
+ <StackPanel Orientation="Vertical" Grid.Row="0" Margin="10 10 0 0">
+
+ <TextBlock FontSize="16" HorizontalAlignment="Left" Foreground="{StaticResource MainWindow.Foreground}" Height="50" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityInverseConverter}}">
+ <Run FontSize="20"> Factor: </Run>
+ <Run Text="{Binding Factor}" Foreground="{StaticResource BlueBrush100}"></Run>
+ <LineBreak />
+ </TextBlock>
+ <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}" FontWeight="SemiBold" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}" Margin="0 20 10 10" >Warning:</TextBlock>
+
+ <Border BorderThickness="1" CornerRadius="4" BorderBrush="{StaticResource DarkGrayBrush}" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}" Height="Auto">
+ <TextBlock Margin="5" Foreground="{StaticResource RedBrush300}" Text="{Binding ErrorMessage}" TextWrapping="Wrap" Padding="5" FontSize="14"/>
+ </Border>
+ </StackPanel>
+ </Border>
+ </Grid>
+ </Grid>
+ <Grid Grid.Column="2" Margin="10 0 0 0">
+ <Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="1*"/>
+ <RowDefinition Height="3*"/>
+ </Grid.RowDefinitions>
+ <Grid Grid.Row="0" Margin="55 0 0 0">
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition/>
+ <ColumnDefinition Width="Auto"/>
+ </Grid.ColumnDefinitions>
+ <StackPanel Orientation="Vertical" Grid.Column="0">
+ <TextBlock HorizontalAlignment="Left" FontSize="20" >Liquid Type</TextBlock>
+ <ComboBox Margin="0 20 0 0" MinWidth="140" HorizontalAlignment="Left" ItemsSource="{Binding LiquidTypes}"
+ SelectedItem="{Binding SelectedLinearizationLiquidType}" DisplayMemberPath="Name"
+ Style="{StaticResource TransparentComboBoxStyle}" FontSize="16"></ComboBox>
+ </StackPanel>
+ <Button Grid.Column="1" IsEnabled="False" VerticalAlignment="Top" Background="{StaticResource TransparentBackgroundBrush200}" MinWidth="160" Height="50" BorderBrush="{StaticResource TransparentBackgroundBrush200}" Command="{Binding CreateLinearizationGraphCommand}" >
+ <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}">CREATE LINEARIZATION GRAPH</TextBlock>
+ </Button>
+
+ </Grid>
+ <Border Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0 20 0 0" BorderThickness="0" BorderBrush="{StaticResource DarkGrayBrush}" CornerRadius="5">
+ <oxy:Plot Title="{Binding LinearizationLiquidTypeName}" x:Name="LinearizationPlot" Margin="0 0 10 0" Background="Transparent">
+ <oxy:Plot.Series >
+ <oxy:LineSeries ItemsSource="{Binding LinearizationPoints}" Color="#73B6EC" MarkerFill="SteelBlue" />
+ </oxy:Plot.Series>
+ <oxy:Plot.Axes>
+ <oxy:LinearAxis Position="Bottom" Title = "In Ink" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="0"/>
+ <oxy:LinearAxis Position="Left" Title = "Out Ink" MajorGridlineStyle="Solid" MinorGridlineStyle="Dot" IsZoomEnabled="True" Minimum="0" />
+ </oxy:Plot.Axes>
+ </oxy:Plot>
+ </Border>
+ </Grid>
+
</Grid>
</Grid>
</DockPanel>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml.cs
index 4c456c12d..d56b3c6c9 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml.cs
@@ -33,6 +33,7 @@ namespace Tango.MachineStudio.RML.Views
{
ColorCalibrationViewVM vm = (ColorCalibrationViewVM)DataContext;
vm.PlotControl = CalibrationPlot;
+ vm.LinearizationPlotControl = LinearizationPlot;
vm.Loading();
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/LiquidQuantityToFormatStringConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/LiquidQuantityToFormatStringConverter.cs
index e5f06e167..3ab013ab3 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/LiquidQuantityToFormatStringConverter.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/LiquidQuantityToFormatStringConverter.cs
@@ -15,11 +15,17 @@ namespace Tango.MachineStudio.Statistics.Converters
{
try
{
+ string format = "";
+ if (parameter is string)
+ {
+ format = (string)parameter;
+ }
+
var longValue = System.Convert.ToUInt64(value.ToString());
double liters_val = (longValue / 1000000000d);
double cc_val = (longValue / 1000000d);
double dispensers_val = (longValue / 130000000d);
- string tooltip = String.Format($"Nanoliters: {longValue}\nCubic Centimeters: {cc_val}\nLiters: {liters_val}\nDispensers: {dispensers_val}");
+ string tooltip = String.Format($"Nanoliters: {longValue.ToString(format)}\nCubic Centimeters: {cc_val}\nLiters: {liters_val}\nDispensers: {dispensers_val}");
return tooltip;
}
catch { }
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/TooltipLiquidQuantityFormatConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/TooltipLiquidQuantityFormatConverter.cs
new file mode 100644
index 000000000..6c4d1347f
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/TooltipLiquidQuantityFormatConverter.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Data;
+namespace Tango.MachineStudio.Statistics.Converters
+{
+ class TooltipLiquidQuantityFormatConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ try
+ {
+ string format = "";
+ if (parameter is string)
+ {
+ format = (string)parameter;
+ }
+ var longValue = System.Convert.ToUInt64(value.ToString());
+ decimal liters_val = (decimal)(longValue / 1000000000d);
+ decimal cc_val = (decimal)(longValue / 1000000d);
+ decimal dispensers_val = (decimal)(longValue / 130000000d);
+ string tooltip = String.Format($"Nanoliters: {longValue.ToString(format)}\nCubic Centimeters: {cc_val}\nLiters: {liters_val}\nDispensers: {dispensers_val}");
+ return tooltip;
+ }
+ catch { }
+
+ return "";
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj
index 02e3f40a9..4ce0ea87d 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Tango.MachineStudio.Statistics.csproj
@@ -85,6 +85,7 @@
<Compile Include="Converters\NanoLiterToLiterFormatConverter.cs" />
<Compile Include="Converters\StringToBoolYesNoNullConverter.cs" />
<Compile Include="Converters\StringToFirstLetterConverter.cs" />
+ <Compile Include="Converters\TooltipLiquidQuantityFormatConverter.cs" />
<Compile Include="Models\ExcelModel.cs" />
<Compile Include="Models\TotalLiquidQuantityModel.cs" />
<Compile Include="Models\JobRunModel.cs" />
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml
index b3e93a52c..e6c46ba10 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml
@@ -32,6 +32,7 @@
<localConverters:JobLengthConverter x:Key="JobLengthConverter"/>
<localConverters:NanoLiterToLiterFormatConverter x:Key="NanoLiterToLiterFormatConverter"/>
<localConverters:LiquidQuantityToFormatStringConverter x:Key="LiquidQuantityToFormatStringConverter"/>
+ <localConverters:TooltipLiquidQuantityFormatConverter x:Key="TooltipLiquidQuantityFormatConverter"/>
<ResourceDictionary x:Key="SelectAllTextBoxResource">
<Style TargetType="TextBox">
@@ -518,7 +519,7 @@
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
- <DockPanel ToolTip="{Binding Quantity}" ToolTipService.Placement="Center" ToolTipService.VerticalOffset="10">
+ <DockPanel ToolTip="{Binding Quantity, Converter={StaticResource TooltipLiquidQuantityFormatConverter}, ConverterParameter='#,#\\'}" ToolTipService.Placement="Center" ToolTipService.VerticalOffset="10">
<Grid DockPanel.Dock="Top" Height="40" Margin="0 5 8 0" Width="16" >
<Border x:Name="LiquidTypeBorder" BorderThickness="1" BorderBrush="{StaticResource borderBrush}" CornerRadius="2" >
<Canvas x:Name="LiquidCanvas" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="0" ClipToBounds="True" ToolTip="{Binding Quantity}" ToolTipService.Placement="Left" ToolTipService.VerticalOffset="10">
@@ -539,7 +540,7 @@
</Style>
</Border.Style>
</Border>
- <Border Background="Transparent" ToolTip="{Binding Quantity}" Height="{Binding RelativeSource={RelativeSource AncestorType=Canvas}, Path=ActualHeight }" Width="{Binding RelativeSource={RelativeSource AncestorType=Canvas}, Path=ActualWidth }"></Border>
+ <Border Background="Transparent" ToolTip="{Binding Quantity, Converter={StaticResource TooltipLiquidQuantityFormatConverter}, ConverterParameter='#,#\\'}" Height="{Binding RelativeSource={RelativeSource AncestorType=Canvas}, Path=ActualHeight }" Width="{Binding RelativeSource={RelativeSource AncestorType=Canvas}, Path=ActualWidth }"></Border>
</Canvas>
</Border>
</Grid>
@@ -589,7 +590,7 @@
<StackPanel Orientation="Horizontal" Margin="0 3">
<TextBlock Text="{Binding Name}" FontWeight="SemiBold"/>
<TextBlock Text=": "/>
- <TextBlock Text="{Binding Value, StringFormat={}{0:#,0.##}}"/>
+ <TextBlock Text="{Binding Value, StringFormat={}{0:N2}}"/>
<TextBlock Text="{Binding Unit}"/>
</StackPanel>
</DataTemplate>
@@ -634,7 +635,7 @@
<StackPanel Orientation="Horizontal" Margin="2">
<TextBlock Margin="5 0 0 0" Text="{Binding Name}" FontWeight="SemiBold"/>
<TextBlock Text=": "/>
- <TextBlock Text="{Binding Value, StringFormat={}{0:0.0}}"/>
+ <TextBlock Text="{Binding Value, StringFormat={}{0:N0}}"/>
<TextBlock Text="{Binding Unit}"/>
</StackPanel>
</DataTemplate>
@@ -694,7 +695,7 @@
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
- <Border Background="Transparent" ToolTip="{Binding Quantity, Converter={StaticResource NanoLiterToLiterFormatConverter}}">
+ <Border Background="Transparent" ToolTip="{Binding Quantity, Converter={StaticResource TooltipLiquidQuantityFormatConverter}, ConverterParameter='#,#\\'}">
<StackPanel Orientation="Horizontal" Margin="4">
<Ellipse Width="30" Height="30">
<Ellipse.Fill>
@@ -713,7 +714,7 @@
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
- <Border Background="Transparent" ToolTip="{Binding StatisticsValueCollection.TotalLiquidQuantities, Converter={StaticResource LiquidQuantityToFormatStringConverter}}">
+ <Border Background="Transparent" ToolTip="{Binding StatisticsValueCollection.TotalLiquidQuantities, Converter={StaticResource TooltipLiquidQuantityFormatConverter}, ConverterParameter='#,#\\'}">
<TextBlock DockPanel.Dock="Bottom" Margin="4 10 0 0 ">
<Run Text="Total liquid quantities for all: " FontWeight="SemiBold"/>
<Run Text="{Binding StatisticsValueCollection.TotalLiquidQuantities, Converter={StaticResource NanoLiterToLiterFormatConverter}, ConverterParameter='0.00'}"></Run>
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Resources/MaterialDesign.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Resources/MaterialDesign.xaml
index 37e35b1ab..11dc2bad3 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Resources/MaterialDesign.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Resources/MaterialDesign.xaml
@@ -540,16 +540,12 @@
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
- <Border Background="Transparent"
- BorderBrush="{DynamicResource MaterialDesignShadowBrush}"
- BorderThickness="1"
- CornerRadius="2">
+ <Border Background="Transparent" BorderBrush="{DynamicResource MaterialDesignShadowBrush}" BorderThickness="1" CornerRadius="2">
<Border.Effect>
<BlurEffect Radius="6"/>
</Border.Effect>
</Border>
- <Grid Margin="1"
- SnapsToDevicePixels="True">
+ <Grid Margin="1" SnapsToDevicePixels="True">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
@@ -560,7 +556,7 @@
<Border Grid.Row="0"
CornerRadius="2 2 0 0"
Background="{DynamicResource ComboBox.Floating.Background}"
- Height="{StaticResource PopupTopBottomMargin}"/>
+ Height="0"/>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
@@ -568,29 +564,18 @@
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
- <Border Grid.Column="0"
- Width="{StaticResource PopupLeftRightMargin}"
- Background="{DynamicResource ComboBox.Floating.Background}"
- />
- <Grid Grid.Column="1"
- Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type materialDesign:ComboBoxPopup}}, Path=VisiblePlacementWidth}"
- Height="{Binding ElementName=templateRoot, Path=ActualHeight}"/>
- <Border Grid.Column="2"
- MinWidth="{StaticResource PopupLeftRightMargin}"
- Background="{DynamicResource ComboBox.Floating.Background}"
- />
+ <Border Grid.Column="0" Width="{StaticResource PopupLeftRightMargin}" Background="{DynamicResource ComboBox.Floating.Background}" />
+ <Grid Grid.Column="1"
+ Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type materialDesign:ComboBoxPopup}}, Path=VisiblePlacementWidth}"
+ Height="0"/>
+ <Border Grid.Column="2" MinWidth="{StaticResource PopupLeftRightMargin}" Background="{DynamicResource ComboBox.Floating.Background}"/>
</Grid>
- <Border Grid.Row="2"
- Background="{DynamicResource ComboBox.Floating.Background}"
- Height="{StaticResource PopupContentPresenterExtend}"/>
+ <Border Grid.Row="2" Background="{DynamicResource ComboBox.Floating.Background}" Height="0"/>
<ContentPresenter Grid.Row="3"/>
- <Border Grid.Row="4"
- CornerRadius="0 0 2 2"
- Height="{StaticResource PopupTopBottomMargin}"
- Background="{DynamicResource ComboBox.Floating.Background}" />
+ <Border Grid.Row="4" CornerRadius="0 0 2 2" Height="0" Background="{DynamicResource ComboBox.Floating.Background}" />
</Grid>
</Grid>
</ControlTemplate>
@@ -657,7 +642,7 @@
Visibility="{Binding Path=(materialDesign:TextFieldAssist.DecorationVisibility), RelativeSource={RelativeSource TemplatedParent}}"/>
<materialDesign:ComboBoxPopup x:Name="PART_Popup"
-
+
AllowsTransparency="true"
Focusable="False"
HorizontalOffset="-11.5"
@@ -667,9 +652,9 @@
UseLayoutRounding="True"
Placement="Custom"
PopupAnimation="Fade"
- VerticalOffset="0"
+ VerticalOffset="-10"
DefaultVerticalOffset="5"
- DownVerticalOffset="-15.5"
+ DownVerticalOffset="{Binding ElementName=templateRoot, Path=ActualHeight}"
UpVerticalOffset="15"
ClassicMode="{Binding Path=(materialDesign:ComboBoxAssist.ClassicMode), RelativeSource={RelativeSource TemplatedParent}}"
UpContentTemplate="{StaticResource PopupContentUpTemplate}"
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs
index 7fe1cd8fd..e72f62f17 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Properties/AssemblyInfo.cs
@@ -4,5 +4,5 @@ using System.Runtime.InteropServices;
[assembly: System.Windows.ThemeInfo(System.Windows.ResourceDictionaryLocation.None, System.Windows.ResourceDictionaryLocation.SourceAssembly)]
[assembly: AssemblyTitle("Tango - Machine Studio")]
-[assembly: AssemblyVersion("4.1.13.0")]
+[assembly: AssemblyVersion("4.1.14.0")]
[assembly: ComVisible(false)] \ No newline at end of file
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/MainViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/MainViewVM.cs
index 087e30be6..7869e6990 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/MainViewVM.cs
@@ -24,6 +24,7 @@ namespace Tango.PPC.Jobs.ViewModels
public class MainViewVM : PPCViewModel
{
private NotificationItem _last_failed_job_notification;
+ private bool resuming;
/// <summary>
/// Called when the application has been started.
@@ -33,15 +34,14 @@ namespace Tango.PPC.Jobs.ViewModels
MachineProvider.MachineOperator.PrintingCompleted += MachineOperator_PrintingCompleted;
MachineProvider.MachineOperator.PrintingFailed += MachineOperator_PrintingFailed;
MachineProvider.MachineOperator.ResumingJob += MachineOperator_ResumingJob;
+ MachineProvider.MachineOperator.PrintingStarted += MachineOperator_PrintingStarted;
}
- private void MachineOperator_ResumingJob(object sender, ResumingJobEventArgs e)
+ private void MachineOperator_PrintingStarted(object sender, PrintingEventArgs e)
{
- LogManager.Log($"Trying to resume job '{e.JobGuid}'...");
-
- try
+ if (resuming)
{
- e.Approve();
+ resuming = false;
InvokeUI(() =>
{
@@ -54,6 +54,17 @@ namespace Tango.PPC.Jobs.ViewModels
}
});
}
+ }
+
+ private void MachineOperator_ResumingJob(object sender, ResumingJobEventArgs e)
+ {
+ LogManager.Log($"Job resume request '{e.JobGuid}' approving...");
+
+ try
+ {
+ e.Approve();
+ resuming = true;
+ }
catch (Exception ex)
{
LogManager.Log(ex, "An error occurred while trying to resume the job.");
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Converters/LiquidTypeToBrushConverter.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Converters/LiquidTypeToBrushConverter.cs
index c7e828148..c33efdca6 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Converters/LiquidTypeToBrushConverter.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Converters/LiquidTypeToBrushConverter.cs
@@ -4,6 +4,7 @@ using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using System.Windows;
using System.Windows.Data;
using System.Windows.Media;
using System.Windows.Media.Imaging;
@@ -19,24 +20,45 @@ namespace Tango.PPC.Maintenance.Converters
if (value is LiquidType)
{
LiquidType type = value as LiquidType;
- if (type.Type == BL.Enumerations.LiquidTypes.Lubricant)
+ switch (type.Type)
{
- ImageBrush lubricantBrush = new ImageBrush() { Stretch = Stretch.None, TileMode = TileMode.Tile, ViewportUnits = BrushMappingMode.Absolute };
- lubricantBrush.ImageSource = ResourceHelper.GetImageFromResources(@"Images/lubricant2.png");
- lubricantBrush.Viewport = new System.Windows.Rect(lubricantBrush.ImageSource.Width/3, lubricantBrush.ImageSource.Height/3, lubricantBrush.ImageSource.Width, lubricantBrush.ImageSource.Height);
- return lubricantBrush;
- }
- if (type.Type == BL.Enumerations.LiquidTypes.Cleaner)
- {
- ImageBrush cleanerBrush = new ImageBrush(){ Stretch = Stretch.None, TileMode = TileMode.Tile, ViewportUnits = BrushMappingMode.Absolute };
- cleanerBrush.ImageSource = ResourceHelper.GetImageFromResources(@"Images/cl-full.png");
- cleanerBrush.Viewport = new System.Windows.Rect(5, 5, cleanerBrush.ImageSource.Width, cleanerBrush.ImageSource.Height);
- return cleanerBrush;
- }
- else
- {
- return new SolidColorBrush(type.LiquidTypeColor); ;
+ case BL.Enumerations.LiquidTypes.Lubricant:
+ {
+
+ ImageBrush lubricantBrush = new ImageBrush() { Stretch = Stretch.None, TileMode = TileMode.Tile, ViewportUnits = BrushMappingMode.Absolute };
+
+ BitmapSource bit_source = ResourceHelper.GetImageFromResources(@"Images/lubricant2.png");
+ var targetBitmap = new WriteableBitmap(new TransformedBitmap(bit_source, new ScaleTransform(0.2, 0.2)));
+ lubricantBrush.ImageSource = targetBitmap;
+ lubricantBrush.Viewport = new System.Windows.Rect(2, 2, targetBitmap.Width, targetBitmap.Height);
+ return lubricantBrush;
+ }
+ case BL.Enumerations.LiquidTypes.Cleaner:
+ {
+ ImageBrush cleanerBrush = new ImageBrush() { Stretch = Stretch.None, TileMode = TileMode.Tile, ViewportUnits = BrushMappingMode.Absolute };
+ BitmapSource bit_source = ResourceHelper.GetImageFromResources(@"Images/cl-full.png");
+ var targetBitmap = new WriteableBitmap(new TransformedBitmap(bit_source, new ScaleTransform(0.3, 0.3)));
+
+ cleanerBrush.ImageSource = targetBitmap;
+ cleanerBrush.Viewport = new System.Windows.Rect(0, 0, targetBitmap.Width, targetBitmap.Height);
+ return cleanerBrush;
+ }
+ case BL.Enumerations.LiquidTypes.Yellow:
+ {
+ return new SolidColorBrush(Color.FromRgb(232, 225, 12));
+ }
+ case BL.Enumerations.LiquidTypes.Cyan:
+ {
+ return new SolidColorBrush(Color.FromRgb(22, 98, 235));
+ }
+ case BL.Enumerations.LiquidTypes.Magenta:
+ {
+ return new SolidColorBrush(Color.FromRgb(237, 0, 140));
+ }
}
+
+
+ return new SolidColorBrush(type.LiquidTypeColor);
}
return null;
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Converters/StringToFirstLetterConverter.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Converters/StringToFirstLetterConverter.cs
index 0922af78d..5418b5cf5 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Converters/StringToFirstLetterConverter.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Converters/StringToFirstLetterConverter.cs
@@ -14,6 +14,14 @@ namespace Tango.PPC.Maintenance.Converters
{
if (value != null && value.ToString().Length > 1)
{
+ if (value.ToString() == "Cleaner")
+ return "CL";
+ else if (value.ToString() == "Transparent Ink")
+ return "TI";
+ else if(value.ToString() == "Black")
+ {
+ return "K";
+ }
return value.ToString().First().ToString();
}
else
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/ViewModels/MaintenanceViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/ViewModels/MaintenanceViewVM.cs
index f613d6f43..252c8aa2e 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/ViewModels/MaintenanceViewVM.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/ViewModels/MaintenanceViewVM.cs
@@ -111,8 +111,8 @@ namespace Tango.PPC.Maintenance.ViewModels
{
Max = MachineOperator.MAX_MIDTANK_LITERS,
IDSPack = x,
- }).ToList();
-
+ }).OrderBy(y=>y.IDSPack.LiquidType.Code).ToList();
+
MachineProvider.MachineOperator.MachineStatusChanged += MachineOperator_MachineStatusChanged;
}
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Views/MaintenanceView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Views/MaintenanceView.xaml
index acbda9daa..2216c47d8 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Views/MaintenanceView.xaml
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Maintenance/Views/MaintenanceView.xaml
@@ -32,7 +32,7 @@
<DataTemplate x:Key="LiquidBox">
<DockPanel>
<TextBlock DockPanel.Dock="Top" Text="{Binding IDSPack.LiquidType.Name,Converter={StaticResource StringToFirstLetterConverter}}" HorizontalAlignment="Center"></TextBlock>
- <Grid MaxWidth="30" Margin="5 0">
+ <Grid MaxWidth="20" Margin="1 0">
<touch:TouchIcon Icon="MapMarkerSolid" Width="20" Height="20" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0 0 0 10" Foreground ="{Binding Path=IDSPack.LiquidType, Converter={StaticResource LiquidTypeToBrushConverter}}">
<touch:TouchIcon.Style>
<Style TargetType="touch:TouchIcon">
@@ -114,13 +114,13 @@
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150*" />
- <ColumnDefinition Width="250*" />
- <ColumnDefinition Width="100*" />
+ <ColumnDefinition Width="200*" />
+ <ColumnDefinition Width="150*" />
<ColumnDefinition Width="100*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="100" />
- <RowDefinition Height="25" />
+ <RowDefinition Height="28" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
@@ -170,7 +170,7 @@
<TextBlock Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="{StaticResource TangoTitleFontSize}">Temperature</TextBlock>
<TextBlock Grid.Column="1" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="{StaticResource TangoTitleFontSize}">Inks</TextBlock>
- <TextBlock Grid.Column="2" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="{StaticResource TangoTitleFontSize}">Cone</TextBlock>
+ <TextBlock Grid.Column="2" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="{StaticResource TangoTitleFontSize}">Collecting Cone</TextBlock>
</Grid>
</StackPanel>
</StackPanel>
@@ -242,12 +242,12 @@
<!--JOB RUNS-->
<StackPanel Margin="0 20 0 20" TextElement.FontSize="{StaticResource TangoTitleFontSize}" TextElement.Foreground="{StaticResource TangoGrayTextBrush}">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
- <TextBlock FontWeight="SemiBold">Total Dye Time:</TextBlock>
+ <TextBlock FontWeight="SemiBold">Total Dyeing Time:</TextBlock>
<TextBlock Margin="10 0 0 0" Text="{Binding TotalDyeTime,Mode=OneWay,FallbackValue=0}"></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0 10 0 0" HorizontalAlignment="Center">
- <TextBlock FontWeight="SemiBold">Total Dye Meters:</TextBlock>
+ <TextBlock FontWeight="SemiBold">Total Dyed Length:</TextBlock>
<TextBlock Margin="10 0 0 0" Text="{Binding TotalDyeMeters,Mode=OneWay,FallbackValue=0}"></TextBlock>
</StackPanel>
</StackPanel>
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCSettings.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCSettings.cs
index 2c605ec36..5586b5341 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCSettings.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/PPCSettings.cs
@@ -279,7 +279,7 @@ namespace Tango.PPC.Common
HotSpotPassword = "Aa123456";
LockScreenTimeout = TimeSpan.FromMinutes(10);
LockScreenPassword = "1111";
- DeploymentSlot = DeploymentSlot.TEST;
+ DeploymentSlot = DeploymentSlot.DEV;
EnableWatchDog = true;
EnableEmergencyNotifications = true;
EmergencyComPort = "COM2";
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs
index 6e9f18b0d..c2a48aec9 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Properties/AssemblyInfo.cs
@@ -8,4 +8,4 @@ using System.Windows;
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Tango PPC Application")]
-[assembly: AssemblyVersion("1.1.19.0")]
+[assembly: AssemblyVersion("1.1.20.0")]
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs
index 54a92aa5c..d4d78dac6 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs
@@ -609,6 +609,7 @@ namespace Tango.PPC.UI.ViewModels
{
_update_result = await MachineUpdateManager.UpdateFromTUP(request.RemoteTupFilePath, request.SetupFirmware, request.SetupFPGA);
LogManager.Log("Machine update from package completed.");
+ stopReporting = true;
InvokeUI(() =>
{
@@ -624,6 +625,8 @@ namespace Tango.PPC.UI.ViewModels
{
NavigateTo(MachineUpdateView.UpdateFailedFromPackageView);
});
+
+ throw ex;
}
await receiver.SendGenericResponse(new StartRemoteApplicationUpgradeResponse()
@@ -646,10 +649,13 @@ namespace Tango.PPC.UI.ViewModels
}
catch (Exception ex)
{
+ stopReporting = true;
await receiver.SendErrorResponse(ex, token);
}
finally
{
+ stopReporting = true;
+
try
{
File.Delete(request.RemoteTupFilePath);
@@ -707,6 +713,7 @@ namespace Tango.PPC.UI.ViewModels
try
{
await MachineUpdateManager.UpdateFromTFP(request.RemoteTfpFilePath);
+ stopReporting = true;
LogManager.Log("Firmware upgrade from package completed.");
_update_result = new MachineUpdateResult()
{
@@ -720,6 +727,8 @@ namespace Tango.PPC.UI.ViewModels
}
catch (Exception ex)
{
+ stopReporting = true;
+
LogManager.Log(ex, "Firmware upgrade from package failed.");
FailedError = ex.FlattenMessage();
@@ -727,6 +736,8 @@ namespace Tango.PPC.UI.ViewModels
{
NavigateTo(MachineUpdateView.UpdateFailedFromPackageView);
});
+
+ throw ex;
}
await receiver.SendGenericResponse(new StartRemoteFirmwareUpgradeResponse()
@@ -749,10 +760,13 @@ namespace Tango.PPC.UI.ViewModels
}
catch (Exception ex)
{
+ stopReporting = true;
await receiver.SendErrorResponse(ex, token);
}
finally
{
+ stopReporting = true;
+
try
{
File.Delete(request.RemoteTfpFilePath);
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
index efc5f8179..d72e75011 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
@@ -16,7 +16,7 @@
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
- <!--<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />-->
+ <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
diff --git a/Software/Visual_Studio/Resources/Tango alarm events handling chart_Rev21.xlsx b/Software/Visual_Studio/Resources/Tango alarm events handling chart_Rev21.xlsx
new file mode 100644
index 000000000..f3c8b0e48
--- /dev/null
+++ b/Software/Visual_Studio/Resources/Tango alarm events handling chart_Rev21.xlsx
Binary files differ
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs
index 6417e34f8..3ceecae4b 100644
--- a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs
+++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/ScriptEditor.cs
@@ -1939,6 +1939,8 @@ namespace Tango.Scripting.Editors
currentLine = currentLine.Split('(')[currentLine.Split('(').Length - 2];
}
+ currentLine = Regex.Replace(currentLine, "(?<=\")(.*?)(?=\")", string.Empty);
+
var words = currentLine.Split(' ');
if (words.Count() > 0 && (words.First() == "private" || words.First() == "public" || words.First() == "void"))
@@ -1951,6 +1953,8 @@ namespace Tango.Scripting.Editors
if (expression != null)
{
int parameterIndex = expression.Count(x => x == ',');
+
+
expression = new string(expression.TakeWhile(x => x != '(').ToArray());
var tree = expression.Split('.').Select(x => x.Remove(@"\n|\r|\s|\t|\(|\)|\[|\]|<.*>")).ToList();
diff --git a/Software/Visual_Studio/Tango.BL/DTO/PublishedProcedureProjectDTOBase.cs b/Software/Visual_Studio/Tango.BL/DTO/PublishedProcedureProjectDTOBase.cs
index ef759e862..851b3fa8d 100644
--- a/Software/Visual_Studio/Tango.BL/DTO/PublishedProcedureProjectDTOBase.cs
+++ b/Software/Visual_Studio/Tango.BL/DTO/PublishedProcedureProjectDTOBase.cs
@@ -46,6 +46,14 @@ namespace Tango.BL.DTO
}
/// <summary>
+ /// sorting index
+ /// </summary>
+ public Int32 SortingIndex
+ {
+ get; set;
+ }
+
+ /// <summary>
/// is visible
/// </summary>
public Boolean IsVisible
diff --git a/Software/Visual_Studio/Tango.BL/Entities/PublishedProcedureProjectBase.cs b/Software/Visual_Studio/Tango.BL/Entities/PublishedProcedureProjectBase.cs
index 272f562d6..d4ce0decb 100644
--- a/Software/Visual_Studio/Tango.BL/Entities/PublishedProcedureProjectBase.cs
+++ b/Software/Visual_Studio/Tango.BL/Entities/PublishedProcedureProjectBase.cs
@@ -33,6 +33,8 @@ namespace Tango.BL.Entities
public event EventHandler<DateTime> PublishDateChanged;
+ public event EventHandler<Int32> SortingIndexChanged;
+
public event EventHandler<Boolean> IsVisibleChanged;
public event EventHandler<SynchronizedObservableCollection<PublishedProcedureProjectsVersion>> PublishedProcedureProjectsVersionsChanged;
@@ -118,6 +120,33 @@ namespace Tango.BL.Entities
}
}
+ protected Int32 _sortingindex;
+
+ /// <summary>
+ /// Gets or sets the publishedprocedureprojectbase sorting index.
+ /// </summary>
+
+ [Column("SORTING_INDEX")]
+
+ public Int32 SortingIndex
+ {
+ get
+ {
+ return _sortingindex;
+ }
+
+ set
+ {
+ if (_sortingindex != value)
+ {
+ _sortingindex = value;
+
+ OnSortingIndexChanged(value);
+
+ }
+ }
+ }
+
protected Boolean _isvisible;
/// <summary>
@@ -198,6 +227,15 @@ namespace Tango.BL.Entities
}
/// <summary>
+ /// Called when the SortingIndex has changed.
+ /// </summary>
+ protected virtual void OnSortingIndexChanged(Int32 sortingindex)
+ {
+ SortingIndexChanged?.Invoke(this, sortingindex);
+ RaisePropertyChanged(nameof(SortingIndex));
+ }
+
+ /// <summary>
/// Called when the IsVisible has changed.
/// </summary>
protected virtual void OnIsVisibleChanged(Boolean isvisible)
diff --git a/Software/Visual_Studio/Tango.BL/Enumerations/EventTypes.cs b/Software/Visual_Studio/Tango.BL/Enumerations/EventTypes.cs
index 37e1b2dc9..69c81c7f3 100644
--- a/Software/Visual_Studio/Tango.BL/Enumerations/EventTypes.cs
+++ b/Software/Visual_Studio/Tango.BL/Enumerations/EventTypes.cs
@@ -149,7 +149,7 @@ namespace Tango.BL.Enumerations
/// (Cover is open. Cannot execute job )
/// </summary>
[Description("Cover is open. Cannot execute job ")]
- REAR_COVER_OPEN = 2007,
+ ARCH_COVER_OPEN = 2007,
/// <summary>
/// (The machine temperature is too high. Cannot execute job)
@@ -230,6 +230,12 @@ namespace Tango.BL.Enumerations
UNINTENDED_RESET = 2020,
/// <summary>
+ /// (Temperature measurement error has occurred. Cannot execute job.)
+ /// </summary>
+ [Description("Temperature measurement error has occurred. Cannot execute job.")]
+ TEMPERATURE_MEASUREMENT_ERROR = 2021,
+
+ /// <summary>
/// (Thread break. Cannot execute job)
/// </summary>
[Description("Thread break. Cannot execute job")]
@@ -1232,6 +1238,42 @@ namespace Tango.BL.Enumerations
DYEING_HEAD_LEFT_ACTUATOR_DOWN_TIMEOUT = 5092,
/// <summary>
+ /// (Dyeing head blower flow is too high. Cannot execute job)
+ /// </summary>
+ [Description("Dyeing head blower flow is too high. Cannot execute job")]
+ DYEING_HEAD_BLOWER_1_FLOW_TOO_HIGH = 5093,
+
+ /// <summary>
+ /// (Dyeing head blower flow is too high. Cannot execute job)
+ /// </summary>
+ [Description("Dyeing head blower flow is too high. Cannot execute job")]
+ DYEING_HEAD_BLOWER_2_FLOW_TOO_HIGH = 5094,
+
+ /// <summary>
+ /// (Dyeing head blower flow is too low. Cannot execute job)
+ /// </summary>
+ [Description("Dyeing head blower flow is too low. Cannot execute job")]
+ DYEING_HEAD_BLOWER_1_FLOW_TOO_LOW = 5095,
+
+ /// <summary>
+ /// (Dyeing head blower flow is too low. Cannot execute job)
+ /// </summary>
+ [Description("Dyeing head blower flow is too low. Cannot execute job")]
+ DYEING_HEAD_BLOWER_2_FLOW_TOO_LOW = 5096,
+
+ /// <summary>
+ /// (Dyeing head arc lid is open. Cannot execute job.)
+ /// </summary>
+ [Description("Dyeing head arc lid is open. Cannot execute job.")]
+ DYEING_HEAD_ARC_LID_IS_OPEN = 5097,
+
+ /// <summary>
+ /// (Dyeing head tunnel lid is open. Cannot execute job)
+ /// </summary>
+ [Description("Dyeing head tunnel lid is open. Cannot execute job")]
+ DYEING_HEAD_TUNNEL_LID_IS_OPEN = 5098,
+
+ /// <summary>
/// (The temperature in the mixer is too high. Cannot execute job)
/// </summary>
[Description("The temperature in the mixer is too high. Cannot execute job")]
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/PUBLISHED_PROCEDURE_PROJECTS.cs b/Software/Visual_Studio/Tango.DAL.Remote/DB/PUBLISHED_PROCEDURE_PROJECTS.cs
index 827a2ba94..cabfa89c7 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/PUBLISHED_PROCEDURE_PROJECTS.cs
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/PUBLISHED_PROCEDURE_PROJECTS.cs
@@ -26,6 +26,7 @@ namespace Tango.DAL.Remote.DB
public string NAME { get; set; }
public string DESCRIPTION { get; set; }
public System.DateTime PUBLISH_DATE { get; set; }
+ public int SORTING_INDEX { get; set; }
public bool IS_VISIBLE { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx
index a379b2049..50f09d327 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx
@@ -927,6 +927,7 @@
<Property Name="NAME" Type="nvarchar" MaxLength="100" Nullable="false" />
<Property Name="DESCRIPTION" Type="nvarchar(max)" />
<Property Name="PUBLISH_DATE" Type="datetime2" Precision="3" Nullable="false" />
+ <Property Name="SORTING_INDEX" Type="int" Nullable="false" />
<Property Name="IS_VISIBLE" Type="bit" Nullable="false" />
</EntityType>
<EntityType Name="PUBLISHED_PROCEDURE_PROJECTS_VERSIONS">
@@ -4359,6 +4360,7 @@
<Property Name="NAME" Type="String" Nullable="false" MaxLength="100" FixedLength="false" Unicode="true" />
<Property Name="DESCRIPTION" Type="String" MaxLength="Max" FixedLength="false" Unicode="true" />
<Property Name="PUBLISH_DATE" Type="DateTime" Nullable="false" Precision="3" />
+ <Property Name="SORTING_INDEX" Type="Int32" Nullable="false" />
<Property Name="IS_VISIBLE" Type="Boolean" Nullable="false" />
<NavigationProperty Name="PUBLISHED_PROCEDURE_PROJECTS_VERSIONS" Relationship="RemoteModel.FK_PUBLISHED_TEST_PROJECTS_VERSIONS_PUBLISHED_TEST_PROJECTS" FromRole="PUBLISHED_PROCEDURE_PROJECTS" ToRole="PUBLISHED_PROCEDURE_PROJECTS_VERSIONS" />
</EntityType>
@@ -6890,6 +6892,7 @@
<EntityTypeMapping TypeName="RemoteModel.PUBLISHED_PROCEDURE_PROJECTS">
<MappingFragment StoreEntitySet="PUBLISHED_PROCEDURE_PROJECTS">
<ScalarProperty Name="IS_VISIBLE" ColumnName="IS_VISIBLE" />
+ <ScalarProperty Name="SORTING_INDEX" ColumnName="SORTING_INDEX" />
<ScalarProperty Name="PUBLISH_DATE" ColumnName="PUBLISH_DATE" />
<ScalarProperty Name="DESCRIPTION" ColumnName="DESCRIPTION" />
<ScalarProperty Name="NAME" ColumnName="NAME" />
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram
index 9731d3aac..41f8bf0c3 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram
@@ -5,88 +5,88 @@
<!-- Diagram content (shape and connector positions) -->
<edmx:Diagrams>
<Diagram DiagramId="f9ae01d708754bbd997add25a4bacc79" Name="Diagram1" ZoomLevel="97">
- <EntityTypeShape EntityType="RemoteModel.ACTION_LOGS" Width="1.5" PointX="11.25" PointY="33" />
- <EntityTypeShape EntityType="RemoteModel.ADDRESS" Width="1.5" PointX="1.5" PointY="59.125" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_DISPLAY_PANEL_VERSIONS" Width="1.5" PointX="1.5" PointY="84.5" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_FIRMWARE_VERSIONS" Width="1.5" PointX="1.5" PointY="78.625" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_OS_VERSIONS" Width="1.5" PointX="1.5" PointY="63.5" />
+ <EntityTypeShape EntityType="RemoteModel.ACTION_LOGS" Width="1.5" PointX="11.25" PointY="93" />
+ <EntityTypeShape EntityType="RemoteModel.ADDRESS" Width="1.5" PointX="4.5" PointY="32.5" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_DISPLAY_PANEL_VERSIONS" Width="1.5" PointX="4.5" PointY="72.25" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_FIRMWARE_VERSIONS" Width="1.5" PointX="4.5" PointY="75.125" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_OS_VERSIONS" Width="1.5" PointX="4.5" PointY="69.25" />
<EntityTypeShape EntityType="RemoteModel.BRUSH_STOPS" Width="1.5" PointX="15.75" PointY="17" />
- <EntityTypeShape EntityType="RemoteModel.CARTRIDGE_TYPES" Width="1.5" PointX="3" PointY="41.875" />
- <EntityTypeShape EntityType="RemoteModel.CAT" Width="1.5" PointX="5.25" PointY="15.875" />
- <EntityTypeShape EntityType="RemoteModel.CCT" Width="1.5" PointX="0.75" PointY="23.625" />
+ <EntityTypeShape EntityType="RemoteModel.CARTRIDGE_TYPES" Width="1.5" PointX="9.75" PointY="46.875" />
+ <EntityTypeShape EntityType="RemoteModel.CAT" Width="1.5" PointX="5.25" PointY="23.875" />
+ <EntityTypeShape EntityType="RemoteModel.CCT" Width="1.5" PointX="0.75" PointY="12.75" />
<EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS" Width="1.5" PointX="1.5" PointY="7.625" />
<EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_GROUPS" Width="1.5" PointX="3.75" PointY="8.125" />
<EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_ITEMS" Width="1.5" PointX="6" PointY="6.875" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_ITEMS_RECIPES" Width="1.5" PointX="8.25" PointY="19.75" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_SPACES" Width="1.5" PointX="9" PointY="7.625" />
- <EntityTypeShape EntityType="RemoteModel.CONFIGURATION" Width="1.5" PointX="0.75" PointY="69" />
- <EntityTypeShape EntityType="RemoteModel.CONTACT" Width="1.5" PointX="1.5" PointY="55.25" />
- <EntityTypeShape EntityType="RemoteModel.CUSTOMER" Width="1.5" PointX="9" PointY="29.125" />
- <EntityTypeShape EntityType="RemoteModel.DISPENSER_TYPES" Width="1.5" PointX="0.75" PointY="88.75" />
- <EntityTypeShape EntityType="RemoteModel.DISPENSER" Width="1.5" PointX="3" PointY="88.125" />
- <EntityTypeShape EntityType="RemoteModel.EMBEDDED_FIRMWARE_VERSIONS" Width="1.5" PointX="1.5" PointY="81.625" />
- <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES" Width="1.5" PointX="9" PointY="41" />
- <EntityTypeShape EntityType="RemoteModel.FIBER_SHAPES" Width="1.5" PointX="0.75" PointY="15.75" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_ITEMS_RECIPES" Width="1.5" PointX="8.25" PointY="15.75" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_SPACES" Width="1.5" PointX="9" PointY="42.75" />
+ <EntityTypeShape EntityType="RemoteModel.CONFIGURATION" Width="1.5" PointX="6.75" PointY="67.625" />
+ <EntityTypeShape EntityType="RemoteModel.CONTACT" Width="1.5" PointX="4.5" PointY="28.625" />
+ <EntityTypeShape EntityType="RemoteModel.CUSTOMER" Width="1.5" PointX="9" PointY="31.125" />
+ <EntityTypeShape EntityType="RemoteModel.DISPENSER_TYPES" Width="1.5" PointX="7.5" PointY="2.375" />
+ <EntityTypeShape EntityType="RemoteModel.DISPENSER" Width="1.5" PointX="9.75" PointY="1.875" />
+ <EntityTypeShape EntityType="RemoteModel.EMBEDDED_FIRMWARE_VERSIONS" Width="1.5" PointX="4.5" PointY="66.375" />
+ <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES" Width="1.5" PointX="13" PointY="75" />
+ <EntityTypeShape EntityType="RemoteModel.FIBER_SHAPES" Width="1.5" PointX="0.75" PointY="27" />
<EntityTypeShape EntityType="RemoteModel.FIBER_SYNTHS" Width="1.5" PointX="0.75" PointY="29.875" />
- <EntityTypeShape EntityType="RemoteModel.FSE_VERSIONS" Width="1.5" PointX="11.25" PointY="50.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWER_TYPES" Width="1.5" PointX="4.5" PointY="68" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWERS" Width="1.5" PointX="6.75" PointY="68.625" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSOR_TYPES" Width="1.5" PointX="7.5" PointY="85" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSORS" Width="1.5" PointX="9.75" PointY="74.625" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCER_TYPES" Width="1.5" PointX="7.5" PointY="65" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCERS" Width="1.5" PointX="9.75" PointY="68.875" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTOR_TYPES" Width="1.5" PointX="1.5" PointY="92.875" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTORS" Width="1.5" PointX="3.75" PointY="71.625" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROL_TYPES" Width="1.5" PointX="4.5" PointY="82" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROLS" Width="1.5" PointX="6.75" PointY="73" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSOR_TYPES" Width="1.5" PointX="4.5" PointY="93" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSORS" Width="1.5" PointX="6.75" PointY="80.625" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_VERSIONS" Width="1.5" PointX="1.5" PointY="74.375" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDER_TYPES" Width="1.5" PointX="7.5" PointY="89" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDERS" Width="1.5" PointX="9.75" PointY="78.75" />
- <EntityTypeShape EntityType="RemoteModel.IDS_PACK_FORMULAS" Width="1.5" PointX="3" PointY="35.5" />
- <EntityTypeShape EntityType="RemoteModel.IDS_PACKS" Width="1.5" PointX="5.25" PointY="35.5" />
- <EntityTypeShape EntityType="RemoteModel.JOB_RUNS" Width="1.5" PointX="11.75" PointY="0.75" />
+ <EntityTypeShape EntityType="RemoteModel.FSE_VERSIONS" Width="1.5" PointX="11.25" PointY="89.5" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWER_TYPES" Width="1.5" PointX="7.5" PointY="81.625" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWERS" Width="1.5" PointX="9.75" PointY="62.25" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSOR_TYPES" Width="1.5" PointX="4.5" PointY="54.625" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSORS" Width="1.5" PointX="6.75" PointY="62.375" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCER_TYPES" Width="1.5" PointX="9.5" PointY="76.625" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCERS" Width="1.5" PointX="11.75" PointY="56.625" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTOR_TYPES" Width="1.5" PointX="12.5" PointY="48.625" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTORS" Width="1.5" PointX="14.75" PointY="52.25" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROL_TYPES" Width="1.5" PointX="10.5" PointY="80.625" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROLS" Width="1.5" PointX="12.75" PointY="62.75" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSOR_TYPES" Width="1.5" PointX="9.5" PointY="85.625" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSORS" Width="1.5" PointX="11.75" PointY="70.375" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_VERSIONS" Width="1.5" PointX="4.5" PointY="62.125" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDER_TYPES" Width="1.5" PointX="4.5" PointY="58.625" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDERS" Width="1.5" PointX="6.75" PointY="58.5" />
+ <EntityTypeShape EntityType="RemoteModel.IDS_PACK_FORMULAS" Width="1.5" PointX="9.75" PointY="12.125" />
+ <EntityTypeShape EntityType="RemoteModel.IDS_PACKS" Width="1.5" PointX="12" PointY="35.125" />
+ <EntityTypeShape EntityType="RemoteModel.JOB_RUNS" Width="1.5" PointX="13.75" PointY="0.75" />
<EntityTypeShape EntityType="RemoteModel.JOB" Width="1.5" PointX="11.25" PointY="16.375" />
- <EntityTypeShape EntityType="RemoteModel.LINEAR_MASS_DENSITY_UNITS" Width="1.5" PointX="0.75" PointY="20.25" />
- <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES" Width="1.5" PointX="3" PointY="2.125" />
- <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES_RMLS" Width="1.5" PointX="8.25" PointY="16" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE_STUDIO_VERSIONS" Width="1.5" PointX="11.25" PointY="46.75" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE_VERSIONS" Width="1.5" PointX="0.75" PointY="44.125" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE" Width="1.5" PointX="3" PointY="45" />
- <EntityTypeShape EntityType="RemoteModel.MACHINES_EVENTS" Width="1.5" PointX="11.25" PointY="42.25" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_CONDITIONS" Width="1.5" PointX="0.75" PointY="27" />
+ <EntityTypeShape EntityType="RemoteModel.LINEAR_MASS_DENSITY_UNITS" Width="1.5" PointX="0.75" PointY="16.125" />
+ <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES" Width="1.5" PointX="3" PointY="2.75" />
+ <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES_RMLS" Width="1.5" PointX="5.25" PointY="16" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE_STUDIO_VERSIONS" Width="1.5" PointX="11.25" PointY="42.875" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE_VERSIONS" Width="1.5" PointX="6.75" PointY="78" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE" Width="1.5" PointX="9" PointY="66.875" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINES_EVENTS" Width="1.5" PointX="15.25" PointY="64.25" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_CONDITIONS" Width="1.5" PointX="0.75" PointY="24" />
<EntityTypeShape EntityType="RemoteModel.MEDIA_MATERIALS" Width="1.5" PointX="0.75" PointY="32.75" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_PURPOSES" Width="1.5" PointX="0.75" PointY="12.75" />
- <EntityTypeShape EntityType="RemoteModel.MID_TANK_TYPES" Width="1.5" PointX="3" PointY="38.75" />
- <EntityTypeShape EntityType="RemoteModel.ORGANIZATION" Width="1.5" PointX="0.75" PointY="38.125" />
- <EntityTypeShape EntityType="RemoteModel.PERMISSION" Width="1.5" PointX="12" PointY="8.625" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_PURPOSES" Width="1.5" PointX="0.75" PointY="20.25" />
+ <EntityTypeShape EntityType="RemoteModel.MID_TANK_TYPES" Width="1.5" PointX="9.75" PointY="27.75" />
+ <EntityTypeShape EntityType="RemoteModel.ORGANIZATION" Width="1.5" PointX="6.75" PointY="30.625" />
+ <EntityTypeShape EntityType="RemoteModel.PERMISSION" Width="1.5" PointX="15" PointY="44.625" />
<EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES" Width="1.5" PointX="7.5" PointY="46.625" />
<EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES_GROUPS" Width="1.5" PointX="5.25" PointY="49.25" />
- <EntityTypeShape EntityType="RemoteModel.PUBLISHED_PROCEDURE_PROJECTS" Width="1.5" PointX="5.75" PointY="1" />
- <EntityTypeShape EntityType="RemoteModel.PUBLISHED_PROCEDURE_PROJECTS_VERSIONS" Width="1.5" PointX="8" PointY="1" />
+ <EntityTypeShape EntityType="RemoteModel.PUBLISHED_PROCEDURE_PROJECTS" Width="1.5" PointX="8.75" PointY="7" />
+ <EntityTypeShape EntityType="RemoteModel.PUBLISHED_PROCEDURE_PROJECTS_VERSIONS" Width="1.5" PointX="11" PointY="7" />
<EntityTypeShape EntityType="RemoteModel.RML" Width="1.5" PointX="3" PointY="15.25" />
- <EntityTypeShape EntityType="RemoteModel.RMLS_SPOOLS" Width="1.5" PointX="5.25" PointY="23.875" />
- <EntityTypeShape EntityType="RemoteModel.ROLE" Width="1.5" PointX="12" PointY="29.5" />
- <EntityTypeShape EntityType="RemoteModel.ROLES_PERMISSIONS" Width="1.5" PointX="14.25" PointY="29.625" />
+ <EntityTypeShape EntityType="RemoteModel.RMLS_SPOOLS" Width="1.5" PointX="8.25" PointY="19.875" />
+ <EntityTypeShape EntityType="RemoteModel.ROLE" Width="1.5" PointX="15" PointY="48.5" />
+ <EntityTypeShape EntityType="RemoteModel.ROLES_PERMISSIONS" Width="1.5" PointX="17.25" PointY="48.625" />
<EntityTypeShape EntityType="RemoteModel.SEGMENT" Width="1.5" PointX="13.5" PointY="20" />
- <EntityTypeShape EntityType="RemoteModel.SITE" Width="1.5" PointX="3" PointY="29" />
- <EntityTypeShape EntityType="RemoteModel.SITES_CATALOGS" Width="1.5" PointX="11.25" PointY="12.5" />
+ <EntityTypeShape EntityType="RemoteModel.SITE" Width="1.5" PointX="3" PointY="37" />
+ <EntityTypeShape EntityType="RemoteModel.SITES_CATALOGS" Width="1.5" PointX="8.25" PointY="24.5" />
<EntityTypeShape EntityType="RemoteModel.SITES_RMLS" Width="1.5" PointX="5.25" PointY="20.25" />
- <EntityTypeShape EntityType="RemoteModel.SPOOL_TYPES" Width="1.5" PointX="9" PointY="24.125" />
- <EntityTypeShape EntityType="RemoteModel.SPOOL" Width="1.5" PointX="11.25" PointY="37.375" />
- <EntityTypeShape EntityType="RemoteModel.sysdiagram" Width="1.5" PointX="8.75" PointY="4.75" />
- <EntityTypeShape EntityType="RemoteModel.TANGO_UPDATES" Width="1.5" PointX="13.75" PointY="0.75" />
- <EntityTypeShape EntityType="RemoteModel.TANGO_VERSIONS" Width="1.5" PointX="14.25" PointY="37.875" />
- <EntityTypeShape EntityType="RemoteModel.TECH_CONTROLLERS" Width="1.5" PointX="13.75" PointY="11.75" />
+ <EntityTypeShape EntityType="RemoteModel.SPOOL_TYPES" Width="1.5" PointX="9" PointY="34.625" />
+ <EntityTypeShape EntityType="RemoteModel.SPOOL" Width="1.5" PointX="11.25" PointY="52.5" />
+ <EntityTypeShape EntityType="RemoteModel.sysdiagram" Width="1.5" PointX="11.75" PointY="10.75" />
+ <EntityTypeShape EntityType="RemoteModel.TANGO_UPDATES" Width="1.5" PointX="13.75" PointY="8.75" />
+ <EntityTypeShape EntityType="RemoteModel.TANGO_VERSIONS" Width="1.5" PointX="14.25" PointY="69.75" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_CONTROLLERS" Width="1.5" PointX="15.75" PointY="0.75" />
<EntityTypeShape EntityType="RemoteModel.TECH_DISPENSERS" Width="1.5" PointX="5.75" PointY="12.75" />
- <EntityTypeShape EntityType="RemoteModel.TECH_HEATERS" Width="1.5" PointX="14.75" PointY="5.75" />
- <EntityTypeShape EntityType="RemoteModel.TECH_IOS" Width="1.5" PointX="15.75" PointY="0.75" />
- <EntityTypeShape EntityType="RemoteModel.TECH_MONITORS" Width="1.5" PointX="15.75" PointY="8.75" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_HEATERS" Width="1.5" PointX="13.75" PointY="13.75" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_IOS" Width="1.5" PointX="15.75" PointY="4.75" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_MONITORS" Width="1.5" PointX="15.75" PointY="9.75" />
<EntityTypeShape EntityType="RemoteModel.TECH_VALVES" Width="1.5" PointX="17.75" PointY="0.75" />
- <EntityTypeShape EntityType="RemoteModel.USER" Width="1.5" PointX="9" PointY="32.25" />
- <EntityTypeShape EntityType="RemoteModel.USERS_ROLES" Width="1.5" PointX="14.25" PointY="33.625" />
- <EntityTypeShape EntityType="RemoteModel.WINDING_METHODS" Width="1.5" PointX="9" PointY="11.5" />
+ <EntityTypeShape EntityType="RemoteModel.USER" Width="1.5" PointX="9" PointY="56.25" />
+ <EntityTypeShape EntityType="RemoteModel.USERS_ROLES" Width="1.5" PointX="17.25" PointY="57.625" />
+ <EntityTypeShape EntityType="RemoteModel.WINDING_METHODS" Width="1.5" PointX="9" PointY="39.625" />
<AssociationConnector Association="RemoteModel.FK_ACTION_LOGS_USERS" />
<AssociationConnector Association="RemoteModel.FK_ORGANIZATIONS_ADDRESSES" />
<AssociationConnector Association="RemoteModel.FK_USERS_ADDRESSES" />
diff --git a/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs b/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs
index e93fa0eba..5c260f639 100644
--- a/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs
+++ b/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs
@@ -715,10 +715,13 @@ namespace Tango.Emulations.Emulators
Task.Factory.StartNew(() =>
{
MachineStatus.State = MachineState.RunningJob;
-
- List<JobBrushStop> calculatedStops = new List<JobBrushStop>();
+
+ List<int> calculatedStopIndexes = new List<int>();
double progress = 0;
double lastProgress = 0;
+ Stopwatch watch = new Stopwatch();
+ Dictionary<int, IDSPackLevel> dispenserindexToPacklevel = new Dictionary<int, IDSPackLevel>();
+
for (int i = 0; i < units; i++)
{
@@ -757,6 +760,8 @@ namespace Tango.Emulations.Emulators
double currentPosition = 0;
double nextStopPosition = unit_length;
+
+ watch.Restart();
for (int seg_index = 0; seg_index < jobTicket.Segments.Count(); seg_index++)
{
var segment = jobTicket.Segments[seg_index];
@@ -773,8 +778,8 @@ namespace Tango.Emulations.Emulators
var nextStop = segment.BrushStops[index + 1];
nextStopPosition = nextStop.OffsetMeters;
}
-
- if (!calculatedStops.Contains(stop))
+
+ if(!calculatedStopIndexes.Contains(stop.Index))
{
var brushStopPosition = currentPosition + stop.OffsetMeters;
if (brushStopPosition >= lastProgress && brushStopPosition <= progress)
@@ -782,22 +787,27 @@ namespace Tango.Emulations.Emulators
foreach (var dispenser in stop.Dispensers)
{
var quantity = dispenser.NanoliterPerCentimeter * (nextStopPosition - stop.OffsetMeters) * 100d;
- var packLevel = MachineStatus.IDSPacksLevels.SingleOrDefault(x => x.Index == dispenser.Index);
+ IDSPackLevel packLevel;
+ if(!dispenserindexToPacklevel.TryGetValue(dispenser.Index, out packLevel))
+ {
+ packLevel = MachineStatus.IDSPacksLevels.SingleOrDefault(x => x.Index == dispenser.Index);
+ dispenserindexToPacklevel.Add(dispenser.Index, packLevel);
+ }
if (packLevel != null)
{
packLevel.DispenserLevel -= (int)quantity;
}
}
-
- calculatedStops.Add(stop);
+ calculatedStopIndexes.Add(stop.Index);
}
}
}
currentPosition += segment.Length;
}
+ watch.Stop();
lastProgress = progress;
-
- Thread.Sleep(100);
+ int delay = (100 - (int)watch.ElapsedMilliseconds) > 0? (100 - (int)watch.ElapsedMilliseconds) : 5;
+ Thread.Sleep(delay);
if (_cancelJob)
{
diff --git a/Software/Visual_Studio/Tango.PMR/Diagnostics/EventType.cs b/Software/Visual_Studio/Tango.PMR/Diagnostics/EventType.cs
index c3b58f341..ac44f7de0 100644
--- a/Software/Visual_Studio/Tango.PMR/Diagnostics/EventType.cs
+++ b/Software/Visual_Studio/Tango.PMR/Diagnostics/EventType.cs
@@ -22,7 +22,7 @@ namespace Tango.PMR.Diagnostics {
static EventTypeReflection() {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
- "Cg9FdmVudFR5cGUucHJvdG8SFVRhbmdvLlBNUi5EaWFnbm9zdGljcyrsYQoJ",
+ "Cg9FdmVudFR5cGUucHJvdG8SFVRhbmdvLlBNUi5EaWFnbm9zdGljcyr5YwoJ",
"RXZlbnRUeXBlEggKBE5vbmUQABIRCgxSRVFVRVNUX1NFTlQQ6AcSFgoRUkVT",
"UE9OU0VfUkVDRUlWRUQQ6QcSEwoOUkVRVUVTVF9GQUlMRUQQ6gcSGgoVQVBQ",
"TElDQVRJT05fRVhDRVBUSU9OEOsHEhwKF0FQUExJQ0FUSU9OX0lORk9STUFU",
@@ -34,7 +34,7 @@ namespace Tango.PMR.Diagnostics {
"DxIiCh1FTUVSR0VOQ1lfUFVTSF9CVVRUT05fUFJFU1NFRBDRDxIXChJGUk9O",
"VF9DT1ZFUl8xX09QRU4Q0g8SFwoSRlJPTlRfQ09WRVJfMl9PUEVOENMPEhcK",
"EkZST05UX0NPVkVSXzNfT1BFThDUDxIXChJGUk9OVF9DT1ZFUl80X09QRU4Q",
- "1Q8SGgoVQ0FSVFJJREdFU19DT1ZFUl9PUEVOENYPEhQKD1JFQVJfQ09WRVJf",
+ "1Q8SGgoVQ0FSVFJJREdFU19DT1ZFUl9PUEVOENYPEhQKD0FSQ0hfQ09WRVJf",
"T1BFThDXDxIlCiBNQUNISU5FX0lOVEVSTkFMX09WRVJURU1QRVJBVFVSRRDY",
"DxIdChhNQUNISU5FX0ZBTlNfUlBNX1RPT19MT1cQ2Q8SGQoUTUFDSElORV9G",
"QU5TX1NUT1BQRUQQ2g8SKAojRUxFQ1RSSUNBTF9DQUJJTkVUX0ZBTlNfUlBN",
@@ -44,265 +44,271 @@ namespace Tango.PMR.Diagnostics {
"X0lOSVRJQUxfQkxPV0VSX0ZBSUxFRBDfDxIQCgtVTlNQRUNJRklFRBDgDxIn",
"CiJNQUNISU5FX0lOVEVSTkFMX09WRVJURU1QRVJBVFVSRV8yEOEPEicKIkVM",
"RUNUUklDQUxfQ0FCSU5FVF9PVkVSVEVNUEVSQVRVUkUQ4g8SHAoXRlBHQV9X",
- "QVRDSERPR19BQ1RJVkFURUQQ4w8SFQoQVU5JTlRFTkRFRF9SRVNFVBDkDxIR",
- "CgxUSFJFQURfQlJFQUsQuBcSMQosVEhSRUFEX1RFTlNJT05fQ09OVFJPTF9G",
- "QUlMVVJFX0ZFRURFUl9EQU5DRVIQuRcSHwoaV0lOREVSX0NPTkVfRE9FU19O",
- "T1RfRVhJU1QQuhcSHQoYRkVFREVSX01PVE9SX09WRVJDVVJSRU5UELsXEiMK",
- "HlJJR0hUX0xPQURFUl9NT1RPUl9PVkVSQ1VSUkVOVBC8FxIdChhQVUxMRVJf",
- "TU9UT1JfT1ZFUkNVUlJFTlQQvRcSIgodTEVGVF9MT0FERVJfTU9UT1JfT1ZF",
- "UkNVUlJFTlQQvhcSHQoYV0lOREVSX01PVE9SX09WRVJDVVJSRU5UEL8XEhwK",
- "F1NDUkVXX01PVE9SX09WRVJDVVJSRU5UEMAXEiIKHUxPQURJTkdfQVJNX01P",
- "VE9SX09WRVJDVVJSRU5UEMEXEiEKHEZFRURFUl9NT1RPUl9PVkVSVEVNUEVS",
- "QVRVUkUQwhcSJwoiUklHSFRfTE9BREVSX01PVE9SX09WRVJURU1QRVJBVFVS",
- "RRDDFxIhChxQVUxMRVJfTU9UT1JfT1ZFUlRFTVBFUkFUVVJFEMQXEiYKIUxF",
- "RlRfTE9BREVSX01PVE9SX09WRVJURU1QRVJBVFVSRRDFFxIhChxXSU5ERVJf",
- "TU9UT1JfT1ZFUlRFTVBFUkFUVVJFEMYXEiAKG1NDUkVXX01PVE9SX09WRVJU",
- "RU1QRVJBVFVSRRDHFxImCiFMT0FESU5HX0FSTV9NT1RPUl9PVkVSVEVNUEVS",
- "QVRVUkUQyBcSFwoSRkVFREVSX01PVE9SX1NUQUxMEMkXEh0KGFJJR0hUX0xP",
- "QURFUl9NT1RPUl9TVEFMTBDKFxIXChJQVUxMRVJfTU9UT1JfU1RBTEwQyxcS",
- "HAoXTEVGVF9MT0FERVJfTU9UT1JfU1RBTEwQzBcSFwoSV0lOREVSX01PVE9S",
- "X1NUQUxMEM0XEhYKEVNDUkVXX01PVE9SX1NUQUxMEM4XEhwKF0xPQURJTkdf",
- "QVJNX01PVE9SX1NUQUxMEM8XEh4KGUZFRURFUl9NT1RPUl9VTkRFUlZPTFRB",
- "R0UQ0BcSJAofUklHSFRfTE9BREVSX01PVE9SX1VOREVSVk9MVEFHRRDRFxIe",
- "ChlQVUxMRVJfTU9UT1JfVU5ERVJWT0xUQUdFENIXEiMKHkxFRlRfTE9BREVS",
- "X01PVE9SX1VOREVSVk9MVEFHRRDTFxIeChlXSU5ERVJfTU9UT1JfVU5ERVJW",
- "T0xUQUdFENQXEh0KGFNDUkVXX01PVE9SX1VOREVSVk9MVEFHRRDVFxIjCh5M",
- "T0FESU5HX0FSTV9NT1RPUl9VTkRFUlZPTFRBR0UQ1hcSFAoPTFRGVV9VUF9U",
- "SU1FT1VUENcXEhYKEUxURlVfRE9XTl9USU1FT1VUENgXEhQKD1JURlVfVVBf",
- "VElNRU9VVBDZFxIWChFSVEZVX0RPV05fVElNRU9VVBDaFxIeChlTQ1JFV19N",
- "T1RPUl9MSU1JVF9USU1FT1VUENsXEiQKH1dJTkRFUl9EQU5DRVJfTU9UT1Jf",
- "T1ZFUkNVUlJFTlQQ3BcSJAofUFVMTEVSX0RBTkNFUl9NT1RPUl9PVkVSQ1VS",
- "UkVOVBDdFxIkCh9GRUVERVJfREFOQ0VSX01PVE9SX09WRVJDVVJSRU5UEN4X",
- "EigKI1dJTkRFUl9EQU5DRVJfTU9UT1JfT1ZFUlRFTVBFUkFUVVJFEN8XEigK",
- "I1BVTExFUl9EQU5DRVJfTU9UT1JfT1ZFUlRFTVBFUkFUVVJFEOAXEigKI0ZF",
- "RURFUl9EQU5DRVJfTU9UT1JfT1ZFUlRFTVBFUkFUVVJFEOEXEh4KGVdJTkRF",
- "Ul9EQU5DRVJfTU9UT1JfU1RBTEwQ4hcSHgoZUFVMTEVSX0RBTkNFUl9NT1RP",
- "Ul9TVEFMTBDjFxIeChlGRUVERVJfREFOQ0VSX01PVE9SX1NUQUxMEOQXEiUK",
- "IFdJTkRFUl9EQU5DRVJfTU9UT1JfVU5ERVJWT0xUQUdFEOUXEiUKIFBVTExF",
- "Ul9EQU5DRVJfTU9UT1JfVU5ERVJWT0xUQUdFEOYXEiUKIEZFRURFUl9EQU5D",
- "RVJfTU9UT1JfVU5ERVJWT0xUQUdFEOcXEjEKLFRIUkVBRF9URU5TSU9OX0NP",
- "TlRST0xfRkFJTFVSRV9QVUxMRVJfREFOQ0VSEOgXEjEKLFRIUkVBRF9URU5T",
- "SU9OX0NPTlRST0xfRkFJTFVSRV9XSU5ERVJfREFOQ0VSEOkXEiUKIE1BQ0hJ",
- "TkVfU1RBVEVfTk9fVEhSRUFEX0RFVEVDVEVEEOoXEhkKFFRIUkVBRF9MT0FE",
- "SU5HX0VSUk9SEOsXEhwKF0RSWUVSX01PVE9SX09WRVJDVVJSRU5UEKAfEiAK",
- "G0RSWUVSX01PVE9SX09WRVJURU1QRVJBVFVSRRChHxIWChFEUllFUl9NT1RP",
- "Ul9TVEFMTBCiHxIdChhEUllFUl9NT1RPUl9VTkRFUlZPTFRBR0UQox8SFAoP",
- "RFJZRVJfRE9PUl9PUEVOEKQfEiEKHERSWUVSX1pPTkVfMV9PVkVSVEVNUEVS",
- "QVRVUkUQpR8SIQocRFJZRVJfWk9ORV8yX09WRVJURU1QRVJBVFVSRRCmHxIk",
- "Ch9EUllFUl9aT05FXzFfVU5ERVJURU1QRVJBVFVSRV9BEKcfEiQKH0RSWUVS",
- "X1pPTkVfMV9VTkRFUlRFTVBFUkFUVVJFX0IQqB8SJAofRFJZRVJfWk9ORV8y",
- "X1VOREVSVEVNUEVSQVRVUkVfQhCpHxIZChREUllFUl9USEVSTUFMX0NVVE9G",
- "RhCqHxIuCilEUllFUl9IRUFURVJTX1pPTkVfMV9DVVJSRU5UX09VVF9PRl9S",
- "QU5HRRCrHxIuCilEUllFUl9IRUFURVJTX1pPTkVfMl9DVVJSRU5UX09VVF9P",
- "Rl9SQU5HRRCsHxIsCidEUllFUl9IRUFURVJTX1pPTkVfMV9DVVJSRU5UX0xP",
- "T1BfQlJFQUsQrR8SLAonRFJZRVJfSEVBVEVSU19aT05FXzJfQ1VSUkVOVF9M",
- "T09QX0JSRUFLEK4fEhoKFURSWUVSX0ZBTl9SUE1fVE9PX0xPVxCvHxIWChFE",
- "UllFUl9GQU5fU1RPUFBFRBCwHxIgChtEUllFUl9MSURfTU9UT1JfT1ZFUkNV",
- "UlJFTlQQsR8SJAofRFJZRVJfTElEX01PVE9SX09WRVJURU1QRVJBVFVSRRCy",
- "HxIaChVEUllFUl9MSURfTU9UT1JfU1RBTEwQsx8SIQocRFJZRVJfTElEX01P",
- "VE9SX1VOREVSVk9MVEFHRRC0HxIkCh9EUllFUl9aT05FXzJfVU5ERVJURU1Q",
- "RVJBVFVSRV9BELUfEicKIkRZRUlOR19IRUFEX1pPTkVfMV9PVkVSVEVNUEVS",
- "QVRVUkUQiCcSJwoiRFlFSU5HX0hFQURfWk9ORV8yX09WRVJURU1QRVJBVFVS",
- "RRCJJxInCiJEWUVJTkdfSEVBRF9aT05FXzNfT1ZFUlRFTVBFUkFUVVJFEIon",
- "EicKIkRZRUlOR19IRUFEX1pPTkVfNF9PVkVSVEVNUEVSQVRVUkUQiycSJwoi",
- "RFlFSU5HX0hFQURfWk9ORV81X09WRVJURU1QRVJBVFVSRRCMJxInCiJEWUVJ",
- "TkdfSEVBRF9aT05FXzZfT1ZFUlRFTVBFUkFUVVJFEI0nEioKJURZRUlOR19I",
- "RUFEX1pPTkVfMV9VTkRFUlRFTVBFUkFUVVJFX0EQjicSKgolRFlFSU5HX0hF",
- "QURfWk9ORV8yX1VOREVSVEVNUEVSQVRVUkVfQRCPJxIqCiVEWUVJTkdfSEVB",
- "RF9aT05FXzNfVU5ERVJURU1QRVJBVFVSRV9BEJAnEioKJURZRUlOR19IRUFE",
- "X1pPTkVfNF9VTkRFUlRFTVBFUkFUVVJFX0EQkScSKgolRFlFSU5HX0hFQURf",
- "Wk9ORV81X1VOREVSVEVNUEVSQVRVUkVfQRCSJxIqCiVEWUVJTkdfSEVBRF9a",
- "T05FXzZfVU5ERVJURU1QRVJBVFVSRV9BEJMnEioKJURZRUlOR19IRUFEX1pP",
- "TkVfMV9VTkRFUlRFTVBFUkFUVVJFX0IQlCcSKgolRFlFSU5HX0hFQURfWk9O",
- "RV8yX1VOREVSVEVNUEVSQVRVUkVfQhCVJxIqCiVEWUVJTkdfSEVBRF9aT05F",
- "XzNfVU5ERVJURU1QRVJBVFVSRV9CEJYnEioKJURZRUlOR19IRUFEX1pPTkVf",
- "NF9VTkRFUlRFTVBFUkFUVVJFX0IQlycSKgolRFlFSU5HX0hFQURfWk9ORV81",
- "X1VOREVSVEVNUEVSQVRVUkVfQhCYJxIqCiVEWUVJTkdfSEVBRF9aT05FXzZf",
- "VU5ERVJURU1QRVJBVFVSRV9CEJknEiwKJ0RZRUlOR19IRUFEX1pPTkVfMV9D",
- "VVJSRU5UX09VVF9PRl9SQU5HRRCaJxIsCidEWUVJTkdfSEVBRF9aT05FXzJf",
- "Q1VSUkVOVF9PVVRfT0ZfUkFOR0UQmycSLAonRFlFSU5HX0hFQURfWk9ORV8z",
- "X0NVUlJFTlRfT1VUX09GX1JBTkdFEJwnEiwKJ0RZRUlOR19IRUFEX1pPTkVf",
- "NF9DVVJSRU5UX09VVF9PRl9SQU5HRRCdJxIsCidEWUVJTkdfSEVBRF9aT05F",
- "XzVfQ1VSUkVOVF9PVVRfT0ZfUkFOR0UQnicSKgolRFlFSU5HX0hFQURfWk9O",
- "RV8xX0NVUlJFTlRfTE9PUF9CUkVBSxCfJxIqCiVEWUVJTkdfSEVBRF9aT05F",
- "XzJfQ1VSUkVOVF9MT09QX0JSRUFLEKAnEioKJURZRUlOR19IRUFEX1pPTkVf",
- "M19DVVJSRU5UX0xPT1BfQlJFQUsQoScSKgolRFlFSU5HX0hFQURfWk9ORV80",
- "X0NVUlJFTlRfTE9PUF9CUkVBSxCiJxIqCiVEWUVJTkdfSEVBRF9aT05FXzVf",
- "Q1VSUkVOVF9MT09QX0JSRUFLEKMnEh8KGkRZRUlOR19IRUFEX1RIRVJNQUxf",
- "Q1VUT0ZGEKQnEiMKHkRZRUlOR19IRUFEX0NPVkVSX09QRU5fVElNRU9VVBCl",
- "JxIkCh9EWUVJTkdfSEVBRF9DT1ZFUl9DTE9TRV9USU1FT1VUEKYnEigKI0RZ",
- "RUlOR19IRUFEX0NPVkVSX01PVE9SX09WRVJDVVJSRU5UEKcnEiwKJ0RZRUlO",
- "R19IRUFEX0NPVkVSX01PVE9SX09WRVJURU1QRVJBVFVSRRCoJxIiCh1EWUVJ",
- "TkdfSEVBRF9DT1ZFUl9NT1RPUl9TVEFMTBCpJxIpCiREWUVJTkdfSEVBRF9D",
- "T1ZFUl9NT1RPUl9VTkRFUlZPTFRBR0UQqicSNQowRFlFSU5HX0hFQURfQ0xF",
- "QU5JTkdfTUVDSEFOSVNNX01PVE9SX09WRVJDVVJSRU5UEKsnEjkKNERZRUlO",
- "R19IRUFEX0NMRUFOSU5HX01FQ0hBTklTTV9NT1RPUl9PVkVSVEVNUEVSQVRV",
- "UkUQrCcSLwoqRFlFSU5HX0hFQURfQ0xFQU5JTkdfTUVDSEFOSVNNX01PVE9S",
- "X1NUQUxMEK0nEjYKMURZRUlOR19IRUFEX0NMRUFOSU5HX01FQ0hBTklTTV9N",
- "T1RPUl9VTkRFUlZPTFRBR0UQricSMAorRFlFSU5HX0hFQURfQ0xFQU5JTkdf",
- "SEVBRF9NT1RPUl9PVkVSQ1VSUkVOVBCvJxI0Ci9EWUVJTkdfSEVBRF9DTEVB",
- "TklOR19IRUFEX01PVE9SX09WRVJURU1QRVJBVFVSRRCwJxIqCiVEWUVJTkdf",
- "SEVBRF9DTEVBTklOR19IRUFEX01PVE9SX1NUQUxMELEnEjEKLERZRUlOR19I",
- "RUFEX0NMRUFOSU5HX0hFQURfTU9UT1JfVU5ERVJWT0xUQUdFELInEicKIkRZ",
- "RUlOR19IRUFEX1pPTkVfN19PVkVSVEVNUEVSQVRVUkUQsycSJwoiRFlFSU5H",
- "X0hFQURfWk9ORV84X09WRVJURU1QRVJBVFVSRRC0JxInCiJEWUVJTkdfSEVB",
- "RF9aT05FXzlfT1ZFUlRFTVBFUkFUVVJFELUnEigKI0RZRUlOR19IRUFEX1pP",
- "TkVfMTBfT1ZFUlRFTVBFUkFUVVJFELYnEigKI0RZRUlOR19IRUFEX1pPTkVf",
- "MTFfT1ZFUlRFTVBFUkFUVVJFELcnEigKI0RZRUlOR19IRUFEX1pPTkVfMTJf",
- "T1ZFUlRFTVBFUkFUVVJFELgnEioKJURZRUlOR19IRUFEX1pPTkVfN19VTkRF",
- "UlRFTVBFUkFUVVJFX0EQuScSKgolRFlFSU5HX0hFQURfWk9ORV84X1VOREVS",
- "VEVNUEVSQVRVUkVfQRC6JxIqCiVEWUVJTkdfSEVBRF9aT05FXzlfVU5ERVJU",
- "RU1QRVJBVFVSRV9BELsnEisKJkRZRUlOR19IRUFEX1pPTkVfMTBfVU5ERVJU",
- "RU1QRVJBVFVSRV9BELwnEisKJkRZRUlOR19IRUFEX1pPTkVfMTFfVU5ERVJU",
- "RU1QRVJBVFVSRV9BEL0nEisKJkRZRUlOR19IRUFEX1pPTkVfMTJfVU5ERVJU",
- "RU1QRVJBVFVSRV9BEL4nEioKJURZRUlOR19IRUFEX1pPTkVfN19VTkRFUlRF",
- "TVBFUkFUVVJFX0IQvycSKgolRFlFSU5HX0hFQURfWk9ORV84X1VOREVSVEVN",
- "UEVSQVRVUkVfQhDAJxIqCiVEWUVJTkdfSEVBRF9aT05FXzlfVU5ERVJURU1Q",
- "RVJBVFVSRV9CEMEnEisKJkRZRUlOR19IRUFEX1pPTkVfMTBfVU5ERVJURU1Q",
- "RVJBVFVSRV9CEMInEisKJkRZRUlOR19IRUFEX1pPTkVfMTFfVU5ERVJURU1Q",
- "RVJBVFVSRV9CEMMnEisKJkRZRUlOR19IRUFEX1pPTkVfMTJfVU5ERVJURU1Q",
- "RVJBVFVSRV9CEMQnEiwKJ0RZRUlOR19IRUFEX1pPTkVfNl9DVVJSRU5UX09V",
- "VF9PRl9SQU5HRRDFJxIsCidEWUVJTkdfSEVBRF9aT05FXzdfQ1VSUkVOVF9P",
- "VVRfT0ZfUkFOR0UQxicSLAonRFlFSU5HX0hFQURfWk9ORV84X0NVUlJFTlRf",
- "T1VUX09GX1JBTkdFEMcnEiwKJ0RZRUlOR19IRUFEX1pPTkVfOV9DVVJSRU5U",
- "X09VVF9PRl9SQU5HRRDIJxItCihEWUVJTkdfSEVBRF9aT05FXzEwX0NVUlJF",
- "TlRfT1VUX09GX1JBTkdFEMknEi0KKERZRUlOR19IRUFEX1pPTkVfMTFfQ1VS",
- "UkVOVF9PVVRfT0ZfUkFOR0UQyicSLQooRFlFSU5HX0hFQURfWk9ORV8xMl9D",
- "VVJSRU5UX09VVF9PRl9SQU5HRRDLJxIqCiVEWUVJTkdfSEVBRF9aT05FXzZf",
- "Q1VSUkVOVF9MT09QX0JSRUFLEMwnEioKJURZRUlOR19IRUFEX1pPTkVfN19D",
- "VVJSRU5UX0xPT1BfQlJFQUsQzScSKgolRFlFSU5HX0hFQURfWk9ORV84X0NV",
- "UlJFTlRfTE9PUF9CUkVBSxDOJxIqCiVEWUVJTkdfSEVBRF9aT05FXzlfQ1VS",
- "UkVOVF9MT09QX0JSRUFLEM8nEisKJkRZRUlOR19IRUFEX1pPTkVfMTBfQ1VS",
- "UkVOVF9MT09QX0JSRUFLENAnEisKJkRZRUlOR19IRUFEX1pPTkVfMTFfQ1VS",
- "UkVOVF9MT09QX0JSRUFLENEnEisKJkRZRUlOR19IRUFEX1pPTkVfMTJfQ1VS",
- "UkVOVF9MT09QX0JSRUFLENInEikKJERZRUlOR19IRUFEX0JMT1dFUl8xX09W",
- "RVJURU1QRVJBVFVSRRDTJxIpCiREWUVJTkdfSEVBRF9CTE9XRVJfMl9PVkVS",
- "VEVNUEVSQVRVUkUQ1CcSLAonRFlFSU5HX0hFQURfQkxPV0VSXzFfVU5ERVJU",
- "RU1QRVJBVFVSRV9BENUnEiwKJ0RZRUlOR19IRUFEX0JMT1dFUl8yX1VOREVS",
- "VEVNUEVSQVRVUkVfQRDWJxIsCidEWUVJTkdfSEVBRF9CTE9XRVJfMV9VTkRF",
- "UlRFTVBFUkFUVVJFX0IQ1ycSLAonRFlFSU5HX0hFQURfQkxPV0VSXzJfVU5E",
- "RVJURU1QRVJBVFVSRV9CENgnEi4KKURZRUlOR19IRUFEX0JMT1dFUl8xX0NV",
- "UlJFTlRfT1VUX09GX1JBTkdFENknEi4KKURZRUlOR19IRUFEX0JMT1dFUl8y",
- "X0NVUlJFTlRfT1VUX09GX1JBTkdFENonEiwKJ0RZRUlOR19IRUFEX0JMT1dF",
- "Ul8xX0NVUlJFTlRfTE9PUF9CUkVBSxDbJxIsCidEWUVJTkdfSEVBRF9CTE9X",
- "RVJfMl9DVVJSRU5UX0xPT1BfQlJFQUsQ3CcSJQogRFlFSU5HX0hFQURfQkxP",
- "V0VSXzFfRkFOX1NUT1BQRUQQ3ScSJQogRFlFSU5HX0hFQURfQkxPV0VSXzJf",
- "RkFOX1NUT1BQRUQQ3icSKQokRFlFSU5HX0hFQURfQkxPV0VSXzFfRkFOX1JQ",
- "TV9UT09fTE9XEN8nEikKJERZRUlOR19IRUFEX0JMT1dFUl8yX0ZBTl9SUE1f",
- "VE9PX0xPVxDgJxIqCiVEWUVJTkdfSEVBRF9SSUdIVF9BQ1RVQVRPUl9VUF9U",
- "SU1FT1VUEOEnEikKJERZRUlOR19IRUFEX0xFRlRfQUNUVUFUT1JfVVBfVElN",
- "RU9VVBDiJxIsCidEWUVJTkdfSEVBRF9SSUdIVF9BQ1RVQVRPUl9ET1dOX1RJ",
- "TUVPVVQQ4ycSKwomRFlFSU5HX0hFQURfTEVGVF9BQ1RVQVRPUl9ET1dOX1RJ",
- "TUVPVVQQ5CcSGgoVTUlYRVJfT1ZFUlRFTVBFUkFUVVJFEPAuEh0KGE1JWEVS",
- "X1VOREVSVEVNUEVSQVRVUkVfQRDxLhIdChhNSVhFUl9VTkRFUlRFTVBFUkFU",
- "VVJFX0IQ8i4SGQoUTUlYRVJfVEhFUk1BTF9DVVRPRkYQ8y4SHwoaTUlYRVJf",
- "Q1VSUkVOVF9PVVRfT0ZfUkFOR0UQ9C4SHQoYTUlYRVJfQ1VSUkVOVF9MT09Q",
- "X0JSRUFLEPUuEh0KGERJU1BFTlNFUl8xX09WRVJQUkVTU1VSRRDYNhIdChhE",
- "SVNQRU5TRVJfMl9PVkVSUFJFU1NVUkUQ2TYSHQoYRElTUEVOU0VSXzNfT1ZF",
- "UlBSRVNTVVJFENo2Eh0KGERJU1BFTlNFUl80X09WRVJQUkVTU1VSRRDbNhId",
- "ChhESVNQRU5TRVJfNV9PVkVSUFJFU1NVUkUQ3DYSHQoYRElTUEVOU0VSXzZf",
- "T1ZFUlBSRVNTVVJFEN02Eh0KGERJU1BFTlNFUl83X09WRVJQUkVTU1VSRRDe",
- "NhIdChhESVNQRU5TRVJfOF9PVkVSUFJFU1NVUkUQ3zYSHgoZRElTUEVOU0VS",
- "XzFfVU5ERVJQUkVTU1VSRRDgNhIeChlESVNQRU5TRVJfMl9VTkRFUlBSRVNT",
- "VVJFEOE2Eh4KGURJU1BFTlNFUl8zX1VOREVSUFJFU1NVUkUQ4jYSHgoZRElT",
- "UEVOU0VSXzRfVU5ERVJQUkVTU1VSRRDjNhIeChlESVNQRU5TRVJfNV9VTkRF",
- "UlBSRVNTVVJFEOQ2Eh4KGURJU1BFTlNFUl82X1VOREVSUFJFU1NVUkUQ5TYS",
- "HgoZRElTUEVOU0VSXzdfVU5ERVJQUkVTU1VSRRDmNhIeChlESVNQRU5TRVJf",
- "OF9VTkRFUlBSRVNTVVJFEOc2EhYKEURJU1BFTlNFUl8xX0VNUFRZEOg2EhYK",
- "EURJU1BFTlNFUl8yX0VNUFRZEOk2EhYKEURJU1BFTlNFUl8zX0VNUFRZEOo2",
- "EhYKEURJU1BFTlNFUl80X0VNUFRZEOs2EhYKEURJU1BFTlNFUl81X0VNUFRZ",
- "EOw2EhYKEURJU1BFTlNFUl82X0VNUFRZEO02EhYKEURJU1BFTlNFUl83X0VN",
- "UFRZEO42EhYKEURJU1BFTlNFUl84X0VNUFRZEO82Eh8KGkRJU1BFTlNFUl8x",
- "X1JFRklMTF9GQUlMVVJFEPA2Eh8KGkRJU1BFTlNFUl8yX1JFRklMTF9GQUlM",
- "VVJFEPE2Eh8KGkRJU1BFTlNFUl8zX1JFRklMTF9GQUlMVVJFEPI2Eh8KGkRJ",
- "U1BFTlNFUl80X1JFRklMTF9GQUlMVVJFEPM2Eh8KGkRJU1BFTlNFUl81X1JF",
- "RklMTF9GQUlMVVJFEPQ2Eh8KGkRJU1BFTlNFUl82X1JFRklMTF9GQUlMVVJF",
- "EPU2Eh8KGkRJU1BFTlNFUl83X1JFRklMTF9GQUlMVVJFEPY2Eh8KGkRJU1BF",
- "TlNFUl84X1JFRklMTF9GQUlMVVJFEPc2EiIKHURJU1BFTlNFUl8xX01PVE9S",
- "X09WRVJDVVJSRU5UEPg2EiIKHURJU1BFTlNFUl8yX01PVE9SX09WRVJDVVJS",
- "RU5UEPk2EiIKHURJU1BFTlNFUl8zX01PVE9SX09WRVJDVVJSRU5UEPo2EiIK",
- "HURJU1BFTlNFUl80X01PVE9SX09WRVJDVVJSRU5UEPs2EiIKHURJU1BFTlNF",
- "Ul81X01PVE9SX09WRVJDVVJSRU5UEPw2EiIKHURJU1BFTlNFUl82X01PVE9S",
- "X09WRVJDVVJSRU5UEP02EiIKHURJU1BFTlNFUl83X01PVE9SX09WRVJDVVJS",
- "RU5UEP42EiIKHURJU1BFTlNFUl84X01PVE9SX09WRVJDVVJSRU5UEP82EiYK",
- "IURJU1BFTlNFUl8xX01PVE9SX09WRVJURU1QRVJBVFVSRRCANxImCiFESVNQ",
- "RU5TRVJfMl9NT1RPUl9PVkVSVEVNUEVSQVRVUkUQgTcSJgohRElTUEVOU0VS",
- "XzNfTU9UT1JfT1ZFUlRFTVBFUkFUVVJFEII3EiYKIURJU1BFTlNFUl80X01P",
- "VE9SX09WRVJURU1QRVJBVFVSRRCDNxImCiFESVNQRU5TRVJfNV9NT1RPUl9P",
- "VkVSVEVNUEVSQVRVUkUQhDcSJgohRElTUEVOU0VSXzZfTU9UT1JfT1ZFUlRF",
- "TVBFUkFUVVJFEIU3EiYKIURJU1BFTlNFUl83X01PVE9SX09WRVJURU1QRVJB",
- "VFVSRRCGNxImCiFESVNQRU5TRVJfOF9NT1RPUl9PVkVSVEVNUEVSQVRVUkUQ",
- "hzcSHAoXRElTUEVOU0VSXzFfTU9UT1JfU1RBTEwQiDcSHAoXRElTUEVOU0VS",
- "XzJfTU9UT1JfU1RBTEwQiTcSHAoXRElTUEVOU0VSXzNfTU9UT1JfU1RBTEwQ",
- "ijcSHAoXRElTUEVOU0VSXzRfTU9UT1JfU1RBTEwQizcSHAoXRElTUEVOU0VS",
- "XzVfTU9UT1JfU1RBTEwQjDcSHAoXRElTUEVOU0VSXzZfTU9UT1JfU1RBTEwQ",
- "jTcSHAoXRElTUEVOU0VSXzdfTU9UT1JfU1RBTEwQjjcSHAoXRElTUEVOU0VS",
- "XzhfTU9UT1JfU1RBTEwQjzcSIwoeRElTUEVOU0VSXzFfTU9UT1JfVU5ERVJW",
- "T0xUQUdFEJA3EiMKHkRJU1BFTlNFUl8yX01PVE9SX1VOREVSVk9MVEFHRRCR",
- "NxIjCh5ESVNQRU5TRVJfM19NT1RPUl9VTkRFUlZPTFRBR0UQkjcSIwoeRElT",
- "UEVOU0VSXzRfTU9UT1JfVU5ERVJWT0xUQUdFEJM3EiMKHkRJU1BFTlNFUl81",
- "X01PVE9SX1VOREVSVk9MVEFHRRCUNxIjCh5ESVNQRU5TRVJfNl9NT1RPUl9V",
- "TkRFUlZPTFRBR0UQlTcSIwoeRElTUEVOU0VSXzdfTU9UT1JfVU5ERVJWT0xU",
- "QUdFEJY3EiMKHkRJU1BFTlNFUl84X01PVE9SX1VOREVSVk9MVEFHRRCXNxIh",
- "ChxESVNQRU5TRVJfMV9VUFBFUl9IQVJEX0xJTUlUEJg3EiEKHERJU1BFTlNF",
- "Ul8yX1VQUEVSX0hBUkRfTElNSVQQmTcSIQocRElTUEVOU0VSXzNfVVBQRVJf",
- "SEFSRF9MSU1JVBCaNxIhChxESVNQRU5TRVJfNF9VUFBFUl9IQVJEX0xJTUlU",
- "EJs3EiEKHERJU1BFTlNFUl81X1VQUEVSX0hBUkRfTElNSVQQnDcSIQocRElT",
- "UEVOU0VSXzZfVVBQRVJfSEFSRF9MSU1JVBCdNxIhChxESVNQRU5TRVJfN19V",
- "UFBFUl9IQVJEX0xJTUlUEJ43EiEKHERJU1BFTlNFUl84X1VQUEVSX0hBUkRf",
- "TElNSVQQnzcSIQocRElTUEVOU0VSXzFfTE9XRVJfSEFSRF9MSU1JVBCgNxIh",
- "ChxESVNQRU5TRVJfMl9MT1dFUl9IQVJEX0xJTUlUEKE3EiEKHERJU1BFTlNF",
- "Ul8zX0xPV0VSX0hBUkRfTElNSVQQojcSIQocRElTUEVOU0VSXzRfTE9XRVJf",
- "SEFSRF9MSU1JVBCjNxIhChxESVNQRU5TRVJfNV9MT1dFUl9IQVJEX0xJTUlU",
- "EKQ3EiEKHERJU1BFTlNFUl82X0xPV0VSX0hBUkRfTElNSVQQpTcSIQocRElT",
- "UEVOU0VSXzdfTE9XRVJfSEFSRF9MSU1JVBCmNxIhChxESVNQRU5TRVJfOF9M",
- "T1dFUl9IQVJEX0xJTUlUEKc3Eh4KGURJU1BFTlNFUl8xX0hJR0hfUFJFU1NV",
- "UkUQqDcSHgoZRElTUEVOU0VSXzJfSElHSF9QUkVTU1VSRRCpNxIeChlESVNQ",
- "RU5TRVJfM19ISUdIX1BSRVNTVVJFEKo3Eh4KGURJU1BFTlNFUl80X0hJR0hf",
- "UFJFU1NVUkUQqzcSHgoZRElTUEVOU0VSXzVfSElHSF9QUkVTU1VSRRCsNxIe",
- "ChlESVNQRU5TRVJfNl9ISUdIX1BSRVNTVVJFEK03Eh4KGURJU1BFTlNFUl83",
- "X0hJR0hfUFJFU1NVUkUQrjcSHgoZRElTUEVOU0VSXzhfSElHSF9QUkVTU1VS",
- "RRCvNxIZChRNSURfVEFOS18xX0xPV19MRVZFTBDAPhIZChRNSURfVEFOS18y",
- "X0xPV19MRVZFTBDBPhIZChRNSURfVEFOS18zX0xPV19MRVZFTBDCPhIZChRN",
- "SURfVEFOS180X0xPV19MRVZFTBDDPhIZChRNSURfVEFOS181X0xPV19MRVZF",
- "TBDEPhIZChRNSURfVEFOS182X0xPV19MRVZFTBDFPhIZChRNSURfVEFOS183",
- "X0xPV19MRVZFTBDGPhIZChRNSURfVEFOS184X0xPV19MRVZFTBDHPhIVChBN",
- "SURfVEFOS18xX0VNUFRZEMg+EhUKEE1JRF9UQU5LXzJfRU1QVFkQyT4SFQoQ",
- "TUlEX1RBTktfM19FTVBUWRDKPhIVChBNSURfVEFOS180X0VNUFRZEMs+EhUK",
- "EE1JRF9UQU5LXzVfRU1QVFkQzD4SFQoQTUlEX1RBTktfNl9FTVBUWRDNPhIV",
- "ChBNSURfVEFOS183X0VNUFRZEM4+EhUKEE1JRF9UQU5LXzhfRU1QVFkQzz4S",
- "GAoTTUlEX1RBTktfMV9PVkVSRkxPVxDQPhIYChNNSURfVEFOS18yX09WRVJG",
- "TE9XENE+EhgKE01JRF9UQU5LXzNfT1ZFUkZMT1cQ0j4SGAoTTUlEX1RBTktf",
- "NF9PVkVSRkxPVxDTPhIYChNNSURfVEFOS181X09WRVJGTE9XENQ+EhgKE01J",
- "RF9UQU5LXzZfT1ZFUkZMT1cQ1T4SGAoTTUlEX1RBTktfN19PVkVSRkxPVxDW",
- "PhIYChNNSURfVEFOS184X09WRVJGTE9XENc+EhwKF01JRF9UQU5LXzFfRklM",
- "TF9USU1FT1VUENg+EhwKF01JRF9UQU5LXzJfRklMTF9USU1FT1VUENk+EhwK",
- "F01JRF9UQU5LXzNfRklMTF9USU1FT1VUENo+EhwKF01JRF9UQU5LXzRfRklM",
- "TF9USU1FT1VUENs+EhwKF01JRF9UQU5LXzVfRklMTF9USU1FT1VUENw+EhwK",
- "F01JRF9UQU5LXzZfRklMTF9USU1FT1VUEN0+EhwKF01JRF9UQU5LXzdfRklM",
- "TF9USU1FT1VUEN4+EhwKF01JRF9UQU5LXzhfRklMTF9USU1FT1VUEN8+Eh0K",
- "GEFJUl9GSUxURVJfTk9UX0lOU1RBTExFRBCoRhIXChJBSVJfRklMVEVSX0NM",
- "T0dHRUQQqUYSJQogV0FTVEVfQ09OVEFJTkVSX0VNUFRZSU5HX1RJTUVPVVQQ",
- "qkYSFAoPTk9fQUlSX1BSRVNTVVJFEKtGEh0KGFdBU1RFX0NPTlRBSU5FUl9P",
- "VkVSRkxPVxCsRhIaChVWT0NfU0VOU09SX0FMQVJNX1RJTUUQrUYSGAoTQ0hJ",
- "TExFUl9EUllfQ09OVEFDVBCuRhIaChVJTlNVRkZJQ0lFTlRfQUlSX0ZMT1cQ",
- "r0YSGwoWVk9DX1NFTlNPUl9BTEFSTV9TTE9QRRCwRhIdChhQUkVfQ09PTEVS",
- "X0ZBTl8xX1NUT1BQRUQQsUYSHQoYUFJFX0NPT0xFUl9GQU5fMl9TVE9QUEVE",
- "ELJGEhkKFENPT0xFUl9GQU5fMV9TVE9QUEVEELNGEhkKFENPT0xFUl9GQU5f",
- "Ml9TVE9QUEVEELRGEhkKFENPT0xFUl9GQU5fM19TVE9QUEVEELVGEhkKFENP",
- "T0xFUl9GQU5fNF9TVE9QUEVEELZGEiEKHFBSRV9DT09MRVJfRkFOXzFfUlBN",
- "X1RPT19MT1cQt0YSIQocUFJFX0NPT0xFUl9GQU5fMl9SUE1fVE9PX0xPVxC4",
- "RhIdChhDT09MRVJfRkFOXzFfUlBNX1RPT19MT1cQuUYSHQoYQ09PTEVSX0ZB",
- "Tl8yX1JQTV9UT09fTE9XELpGEh0KGENPT0xFUl9GQU5fM19SUE1fVE9PX0xP",
- "VxC7RhIdChhDT09MRVJfRkFOXzRfUlBNX1RPT19MT1cQvEYSIAobQ09PTEVS",
- "X1RFTVBFUkFUVVJFX1RPT19ISUdIEL1GEh8KGkNPT0xFUl9URU1QRVJBVFVS",
- "RV9UT09fTE9XEL5GEioKJUlOS19DQVJUUklER0VfUFJFU0VOQ0VfU0VOU09S",
- "X1RJTUVPVVQQkE4SHwoaSU5LX0NBUlRSSURHRV9SRklEX1RJTUVPVVQQkU4S",
- "IQocTk9fV0FTVEVfQ0FSVFJJREdFX0FWQUlMQUJMRRCSThIeChlBTExfV0FT",
- "VEVfQ0FSVFJJREdFU19GVUxMEJNOEiwKJ1dBU1RFX0NBUlRSSURHRV9QUkVT",
- "RU5DRV9TRU5TT1JfVElNRU9VVBCUThIhChxXQVNURV9DQVJUUklER0VfUkZJ",
- "RF9USU1FT1VUEJVOQiEKH2NvbS50d2luZS50YW5nby5wbXIuZGlhZ25vc3Rp",
- "Y3NiBnByb3RvMw=="));
+ "QVRDSERPR19BQ1RJVkFURUQQ4w8SFQoQVU5JTlRFTkRFRF9SRVNFVBDkDxIi",
+ "Ch1URU1QRVJBVFVSRV9NRUFTVVJFTUVOVF9FUlJPUhDlDxIRCgxUSFJFQURf",
+ "QlJFQUsQuBcSMQosVEhSRUFEX1RFTlNJT05fQ09OVFJPTF9GQUlMVVJFX0ZF",
+ "RURFUl9EQU5DRVIQuRcSHwoaV0lOREVSX0NPTkVfRE9FU19OT1RfRVhJU1QQ",
+ "uhcSHQoYRkVFREVSX01PVE9SX09WRVJDVVJSRU5UELsXEiMKHlJJR0hUX0xP",
+ "QURFUl9NT1RPUl9PVkVSQ1VSUkVOVBC8FxIdChhQVUxMRVJfTU9UT1JfT1ZF",
+ "UkNVUlJFTlQQvRcSIgodTEVGVF9MT0FERVJfTU9UT1JfT1ZFUkNVUlJFTlQQ",
+ "vhcSHQoYV0lOREVSX01PVE9SX09WRVJDVVJSRU5UEL8XEhwKF1NDUkVXX01P",
+ "VE9SX09WRVJDVVJSRU5UEMAXEiIKHUxPQURJTkdfQVJNX01PVE9SX09WRVJD",
+ "VVJSRU5UEMEXEiEKHEZFRURFUl9NT1RPUl9PVkVSVEVNUEVSQVRVUkUQwhcS",
+ "JwoiUklHSFRfTE9BREVSX01PVE9SX09WRVJURU1QRVJBVFVSRRDDFxIhChxQ",
+ "VUxMRVJfTU9UT1JfT1ZFUlRFTVBFUkFUVVJFEMQXEiYKIUxFRlRfTE9BREVS",
+ "X01PVE9SX09WRVJURU1QRVJBVFVSRRDFFxIhChxXSU5ERVJfTU9UT1JfT1ZF",
+ "UlRFTVBFUkFUVVJFEMYXEiAKG1NDUkVXX01PVE9SX09WRVJURU1QRVJBVFVS",
+ "RRDHFxImCiFMT0FESU5HX0FSTV9NT1RPUl9PVkVSVEVNUEVSQVRVUkUQyBcS",
+ "FwoSRkVFREVSX01PVE9SX1NUQUxMEMkXEh0KGFJJR0hUX0xPQURFUl9NT1RP",
+ "Ul9TVEFMTBDKFxIXChJQVUxMRVJfTU9UT1JfU1RBTEwQyxcSHAoXTEVGVF9M",
+ "T0FERVJfTU9UT1JfU1RBTEwQzBcSFwoSV0lOREVSX01PVE9SX1NUQUxMEM0X",
+ "EhYKEVNDUkVXX01PVE9SX1NUQUxMEM4XEhwKF0xPQURJTkdfQVJNX01PVE9S",
+ "X1NUQUxMEM8XEh4KGUZFRURFUl9NT1RPUl9VTkRFUlZPTFRBR0UQ0BcSJAof",
+ "UklHSFRfTE9BREVSX01PVE9SX1VOREVSVk9MVEFHRRDRFxIeChlQVUxMRVJf",
+ "TU9UT1JfVU5ERVJWT0xUQUdFENIXEiMKHkxFRlRfTE9BREVSX01PVE9SX1VO",
+ "REVSVk9MVEFHRRDTFxIeChlXSU5ERVJfTU9UT1JfVU5ERVJWT0xUQUdFENQX",
+ "Eh0KGFNDUkVXX01PVE9SX1VOREVSVk9MVEFHRRDVFxIjCh5MT0FESU5HX0FS",
+ "TV9NT1RPUl9VTkRFUlZPTFRBR0UQ1hcSFAoPTFRGVV9VUF9USU1FT1VUENcX",
+ "EhYKEUxURlVfRE9XTl9USU1FT1VUENgXEhQKD1JURlVfVVBfVElNRU9VVBDZ",
+ "FxIWChFSVEZVX0RPV05fVElNRU9VVBDaFxIeChlTQ1JFV19NT1RPUl9MSU1J",
+ "VF9USU1FT1VUENsXEiQKH1dJTkRFUl9EQU5DRVJfTU9UT1JfT1ZFUkNVUlJF",
+ "TlQQ3BcSJAofUFVMTEVSX0RBTkNFUl9NT1RPUl9PVkVSQ1VSUkVOVBDdFxIk",
+ "Ch9GRUVERVJfREFOQ0VSX01PVE9SX09WRVJDVVJSRU5UEN4XEigKI1dJTkRF",
+ "Ul9EQU5DRVJfTU9UT1JfT1ZFUlRFTVBFUkFUVVJFEN8XEigKI1BVTExFUl9E",
+ "QU5DRVJfTU9UT1JfT1ZFUlRFTVBFUkFUVVJFEOAXEigKI0ZFRURFUl9EQU5D",
+ "RVJfTU9UT1JfT1ZFUlRFTVBFUkFUVVJFEOEXEh4KGVdJTkRFUl9EQU5DRVJf",
+ "TU9UT1JfU1RBTEwQ4hcSHgoZUFVMTEVSX0RBTkNFUl9NT1RPUl9TVEFMTBDj",
+ "FxIeChlGRUVERVJfREFOQ0VSX01PVE9SX1NUQUxMEOQXEiUKIFdJTkRFUl9E",
+ "QU5DRVJfTU9UT1JfVU5ERVJWT0xUQUdFEOUXEiUKIFBVTExFUl9EQU5DRVJf",
+ "TU9UT1JfVU5ERVJWT0xUQUdFEOYXEiUKIEZFRURFUl9EQU5DRVJfTU9UT1Jf",
+ "VU5ERVJWT0xUQUdFEOcXEjEKLFRIUkVBRF9URU5TSU9OX0NPTlRST0xfRkFJ",
+ "TFVSRV9QVUxMRVJfREFOQ0VSEOgXEjEKLFRIUkVBRF9URU5TSU9OX0NPTlRS",
+ "T0xfRkFJTFVSRV9XSU5ERVJfREFOQ0VSEOkXEiUKIE1BQ0hJTkVfU1RBVEVf",
+ "Tk9fVEhSRUFEX0RFVEVDVEVEEOoXEhkKFFRIUkVBRF9MT0FESU5HX0VSUk9S",
+ "EOsXEhwKF0RSWUVSX01PVE9SX09WRVJDVVJSRU5UEKAfEiAKG0RSWUVSX01P",
+ "VE9SX09WRVJURU1QRVJBVFVSRRChHxIWChFEUllFUl9NT1RPUl9TVEFMTBCi",
+ "HxIdChhEUllFUl9NT1RPUl9VTkRFUlZPTFRBR0UQox8SFAoPRFJZRVJfRE9P",
+ "Ul9PUEVOEKQfEiEKHERSWUVSX1pPTkVfMV9PVkVSVEVNUEVSQVRVUkUQpR8S",
+ "IQocRFJZRVJfWk9ORV8yX09WRVJURU1QRVJBVFVSRRCmHxIkCh9EUllFUl9a",
+ "T05FXzFfVU5ERVJURU1QRVJBVFVSRV9BEKcfEiQKH0RSWUVSX1pPTkVfMV9V",
+ "TkRFUlRFTVBFUkFUVVJFX0IQqB8SJAofRFJZRVJfWk9ORV8yX1VOREVSVEVN",
+ "UEVSQVRVUkVfQhCpHxIZChREUllFUl9USEVSTUFMX0NVVE9GRhCqHxIuCilE",
+ "UllFUl9IRUFURVJTX1pPTkVfMV9DVVJSRU5UX09VVF9PRl9SQU5HRRCrHxIu",
+ "CilEUllFUl9IRUFURVJTX1pPTkVfMl9DVVJSRU5UX09VVF9PRl9SQU5HRRCs",
+ "HxIsCidEUllFUl9IRUFURVJTX1pPTkVfMV9DVVJSRU5UX0xPT1BfQlJFQUsQ",
+ "rR8SLAonRFJZRVJfSEVBVEVSU19aT05FXzJfQ1VSUkVOVF9MT09QX0JSRUFL",
+ "EK4fEhoKFURSWUVSX0ZBTl9SUE1fVE9PX0xPVxCvHxIWChFEUllFUl9GQU5f",
+ "U1RPUFBFRBCwHxIgChtEUllFUl9MSURfTU9UT1JfT1ZFUkNVUlJFTlQQsR8S",
+ "JAofRFJZRVJfTElEX01PVE9SX09WRVJURU1QRVJBVFVSRRCyHxIaChVEUllF",
+ "Ul9MSURfTU9UT1JfU1RBTEwQsx8SIQocRFJZRVJfTElEX01PVE9SX1VOREVS",
+ "Vk9MVEFHRRC0HxIkCh9EUllFUl9aT05FXzJfVU5ERVJURU1QRVJBVFVSRV9B",
+ "ELUfEicKIkRZRUlOR19IRUFEX1pPTkVfMV9PVkVSVEVNUEVSQVRVUkUQiCcS",
+ "JwoiRFlFSU5HX0hFQURfWk9ORV8yX09WRVJURU1QRVJBVFVSRRCJJxInCiJE",
+ "WUVJTkdfSEVBRF9aT05FXzNfT1ZFUlRFTVBFUkFUVVJFEIonEicKIkRZRUlO",
+ "R19IRUFEX1pPTkVfNF9PVkVSVEVNUEVSQVRVUkUQiycSJwoiRFlFSU5HX0hF",
+ "QURfWk9ORV81X09WRVJURU1QRVJBVFVSRRCMJxInCiJEWUVJTkdfSEVBRF9a",
+ "T05FXzZfT1ZFUlRFTVBFUkFUVVJFEI0nEioKJURZRUlOR19IRUFEX1pPTkVf",
+ "MV9VTkRFUlRFTVBFUkFUVVJFX0EQjicSKgolRFlFSU5HX0hFQURfWk9ORV8y",
+ "X1VOREVSVEVNUEVSQVRVUkVfQRCPJxIqCiVEWUVJTkdfSEVBRF9aT05FXzNf",
+ "VU5ERVJURU1QRVJBVFVSRV9BEJAnEioKJURZRUlOR19IRUFEX1pPTkVfNF9V",
+ "TkRFUlRFTVBFUkFUVVJFX0EQkScSKgolRFlFSU5HX0hFQURfWk9ORV81X1VO",
+ "REVSVEVNUEVSQVRVUkVfQRCSJxIqCiVEWUVJTkdfSEVBRF9aT05FXzZfVU5E",
+ "RVJURU1QRVJBVFVSRV9BEJMnEioKJURZRUlOR19IRUFEX1pPTkVfMV9VTkRF",
+ "UlRFTVBFUkFUVVJFX0IQlCcSKgolRFlFSU5HX0hFQURfWk9ORV8yX1VOREVS",
+ "VEVNUEVSQVRVUkVfQhCVJxIqCiVEWUVJTkdfSEVBRF9aT05FXzNfVU5ERVJU",
+ "RU1QRVJBVFVSRV9CEJYnEioKJURZRUlOR19IRUFEX1pPTkVfNF9VTkRFUlRF",
+ "TVBFUkFUVVJFX0IQlycSKgolRFlFSU5HX0hFQURfWk9ORV81X1VOREVSVEVN",
+ "UEVSQVRVUkVfQhCYJxIqCiVEWUVJTkdfSEVBRF9aT05FXzZfVU5ERVJURU1Q",
+ "RVJBVFVSRV9CEJknEiwKJ0RZRUlOR19IRUFEX1pPTkVfMV9DVVJSRU5UX09V",
+ "VF9PRl9SQU5HRRCaJxIsCidEWUVJTkdfSEVBRF9aT05FXzJfQ1VSUkVOVF9P",
+ "VVRfT0ZfUkFOR0UQmycSLAonRFlFSU5HX0hFQURfWk9ORV8zX0NVUlJFTlRf",
+ "T1VUX09GX1JBTkdFEJwnEiwKJ0RZRUlOR19IRUFEX1pPTkVfNF9DVVJSRU5U",
+ "X09VVF9PRl9SQU5HRRCdJxIsCidEWUVJTkdfSEVBRF9aT05FXzVfQ1VSUkVO",
+ "VF9PVVRfT0ZfUkFOR0UQnicSKgolRFlFSU5HX0hFQURfWk9ORV8xX0NVUlJF",
+ "TlRfTE9PUF9CUkVBSxCfJxIqCiVEWUVJTkdfSEVBRF9aT05FXzJfQ1VSUkVO",
+ "VF9MT09QX0JSRUFLEKAnEioKJURZRUlOR19IRUFEX1pPTkVfM19DVVJSRU5U",
+ "X0xPT1BfQlJFQUsQoScSKgolRFlFSU5HX0hFQURfWk9ORV80X0NVUlJFTlRf",
+ "TE9PUF9CUkVBSxCiJxIqCiVEWUVJTkdfSEVBRF9aT05FXzVfQ1VSUkVOVF9M",
+ "T09QX0JSRUFLEKMnEh8KGkRZRUlOR19IRUFEX1RIRVJNQUxfQ1VUT0ZGEKQn",
+ "EiMKHkRZRUlOR19IRUFEX0NPVkVSX09QRU5fVElNRU9VVBClJxIkCh9EWUVJ",
+ "TkdfSEVBRF9DT1ZFUl9DTE9TRV9USU1FT1VUEKYnEigKI0RZRUlOR19IRUFE",
+ "X0NPVkVSX01PVE9SX09WRVJDVVJSRU5UEKcnEiwKJ0RZRUlOR19IRUFEX0NP",
+ "VkVSX01PVE9SX09WRVJURU1QRVJBVFVSRRCoJxIiCh1EWUVJTkdfSEVBRF9D",
+ "T1ZFUl9NT1RPUl9TVEFMTBCpJxIpCiREWUVJTkdfSEVBRF9DT1ZFUl9NT1RP",
+ "Ul9VTkRFUlZPTFRBR0UQqicSNQowRFlFSU5HX0hFQURfQ0xFQU5JTkdfTUVD",
+ "SEFOSVNNX01PVE9SX09WRVJDVVJSRU5UEKsnEjkKNERZRUlOR19IRUFEX0NM",
+ "RUFOSU5HX01FQ0hBTklTTV9NT1RPUl9PVkVSVEVNUEVSQVRVUkUQrCcSLwoq",
+ "RFlFSU5HX0hFQURfQ0xFQU5JTkdfTUVDSEFOSVNNX01PVE9SX1NUQUxMEK0n",
+ "EjYKMURZRUlOR19IRUFEX0NMRUFOSU5HX01FQ0hBTklTTV9NT1RPUl9VTkRF",
+ "UlZPTFRBR0UQricSMAorRFlFSU5HX0hFQURfQ0xFQU5JTkdfSEVBRF9NT1RP",
+ "Ul9PVkVSQ1VSUkVOVBCvJxI0Ci9EWUVJTkdfSEVBRF9DTEVBTklOR19IRUFE",
+ "X01PVE9SX09WRVJURU1QRVJBVFVSRRCwJxIqCiVEWUVJTkdfSEVBRF9DTEVB",
+ "TklOR19IRUFEX01PVE9SX1NUQUxMELEnEjEKLERZRUlOR19IRUFEX0NMRUFO",
+ "SU5HX0hFQURfTU9UT1JfVU5ERVJWT0xUQUdFELInEicKIkRZRUlOR19IRUFE",
+ "X1pPTkVfN19PVkVSVEVNUEVSQVRVUkUQsycSJwoiRFlFSU5HX0hFQURfWk9O",
+ "RV84X09WRVJURU1QRVJBVFVSRRC0JxInCiJEWUVJTkdfSEVBRF9aT05FXzlf",
+ "T1ZFUlRFTVBFUkFUVVJFELUnEigKI0RZRUlOR19IRUFEX1pPTkVfMTBfT1ZF",
+ "UlRFTVBFUkFUVVJFELYnEigKI0RZRUlOR19IRUFEX1pPTkVfMTFfT1ZFUlRF",
+ "TVBFUkFUVVJFELcnEigKI0RZRUlOR19IRUFEX1pPTkVfMTJfT1ZFUlRFTVBF",
+ "UkFUVVJFELgnEioKJURZRUlOR19IRUFEX1pPTkVfN19VTkRFUlRFTVBFUkFU",
+ "VVJFX0EQuScSKgolRFlFSU5HX0hFQURfWk9ORV84X1VOREVSVEVNUEVSQVRV",
+ "UkVfQRC6JxIqCiVEWUVJTkdfSEVBRF9aT05FXzlfVU5ERVJURU1QRVJBVFVS",
+ "RV9BELsnEisKJkRZRUlOR19IRUFEX1pPTkVfMTBfVU5ERVJURU1QRVJBVFVS",
+ "RV9BELwnEisKJkRZRUlOR19IRUFEX1pPTkVfMTFfVU5ERVJURU1QRVJBVFVS",
+ "RV9BEL0nEisKJkRZRUlOR19IRUFEX1pPTkVfMTJfVU5ERVJURU1QRVJBVFVS",
+ "RV9BEL4nEioKJURZRUlOR19IRUFEX1pPTkVfN19VTkRFUlRFTVBFUkFUVVJF",
+ "X0IQvycSKgolRFlFSU5HX0hFQURfWk9ORV84X1VOREVSVEVNUEVSQVRVUkVf",
+ "QhDAJxIqCiVEWUVJTkdfSEVBRF9aT05FXzlfVU5ERVJURU1QRVJBVFVSRV9C",
+ "EMEnEisKJkRZRUlOR19IRUFEX1pPTkVfMTBfVU5ERVJURU1QRVJBVFVSRV9C",
+ "EMInEisKJkRZRUlOR19IRUFEX1pPTkVfMTFfVU5ERVJURU1QRVJBVFVSRV9C",
+ "EMMnEisKJkRZRUlOR19IRUFEX1pPTkVfMTJfVU5ERVJURU1QRVJBVFVSRV9C",
+ "EMQnEiwKJ0RZRUlOR19IRUFEX1pPTkVfNl9DVVJSRU5UX09VVF9PRl9SQU5H",
+ "RRDFJxIsCidEWUVJTkdfSEVBRF9aT05FXzdfQ1VSUkVOVF9PVVRfT0ZfUkFO",
+ "R0UQxicSLAonRFlFSU5HX0hFQURfWk9ORV84X0NVUlJFTlRfT1VUX09GX1JB",
+ "TkdFEMcnEiwKJ0RZRUlOR19IRUFEX1pPTkVfOV9DVVJSRU5UX09VVF9PRl9S",
+ "QU5HRRDIJxItCihEWUVJTkdfSEVBRF9aT05FXzEwX0NVUlJFTlRfT1VUX09G",
+ "X1JBTkdFEMknEi0KKERZRUlOR19IRUFEX1pPTkVfMTFfQ1VSUkVOVF9PVVRf",
+ "T0ZfUkFOR0UQyicSLQooRFlFSU5HX0hFQURfWk9ORV8xMl9DVVJSRU5UX09V",
+ "VF9PRl9SQU5HRRDLJxIqCiVEWUVJTkdfSEVBRF9aT05FXzZfQ1VSUkVOVF9M",
+ "T09QX0JSRUFLEMwnEioKJURZRUlOR19IRUFEX1pPTkVfN19DVVJSRU5UX0xP",
+ "T1BfQlJFQUsQzScSKgolRFlFSU5HX0hFQURfWk9ORV84X0NVUlJFTlRfTE9P",
+ "UF9CUkVBSxDOJxIqCiVEWUVJTkdfSEVBRF9aT05FXzlfQ1VSUkVOVF9MT09Q",
+ "X0JSRUFLEM8nEisKJkRZRUlOR19IRUFEX1pPTkVfMTBfQ1VSUkVOVF9MT09Q",
+ "X0JSRUFLENAnEisKJkRZRUlOR19IRUFEX1pPTkVfMTFfQ1VSUkVOVF9MT09Q",
+ "X0JSRUFLENEnEisKJkRZRUlOR19IRUFEX1pPTkVfMTJfQ1VSUkVOVF9MT09Q",
+ "X0JSRUFLENInEikKJERZRUlOR19IRUFEX0JMT1dFUl8xX09WRVJURU1QRVJB",
+ "VFVSRRDTJxIpCiREWUVJTkdfSEVBRF9CTE9XRVJfMl9PVkVSVEVNUEVSQVRV",
+ "UkUQ1CcSLAonRFlFSU5HX0hFQURfQkxPV0VSXzFfVU5ERVJURU1QRVJBVFVS",
+ "RV9BENUnEiwKJ0RZRUlOR19IRUFEX0JMT1dFUl8yX1VOREVSVEVNUEVSQVRV",
+ "UkVfQRDWJxIsCidEWUVJTkdfSEVBRF9CTE9XRVJfMV9VTkRFUlRFTVBFUkFU",
+ "VVJFX0IQ1ycSLAonRFlFSU5HX0hFQURfQkxPV0VSXzJfVU5ERVJURU1QRVJB",
+ "VFVSRV9CENgnEi4KKURZRUlOR19IRUFEX0JMT1dFUl8xX0NVUlJFTlRfT1VU",
+ "X09GX1JBTkdFENknEi4KKURZRUlOR19IRUFEX0JMT1dFUl8yX0NVUlJFTlRf",
+ "T1VUX09GX1JBTkdFENonEiwKJ0RZRUlOR19IRUFEX0JMT1dFUl8xX0NVUlJF",
+ "TlRfTE9PUF9CUkVBSxDbJxIsCidEWUVJTkdfSEVBRF9CTE9XRVJfMl9DVVJS",
+ "RU5UX0xPT1BfQlJFQUsQ3CcSJQogRFlFSU5HX0hFQURfQkxPV0VSXzFfRkFO",
+ "X1NUT1BQRUQQ3ScSJQogRFlFSU5HX0hFQURfQkxPV0VSXzJfRkFOX1NUT1BQ",
+ "RUQQ3icSKQokRFlFSU5HX0hFQURfQkxPV0VSXzFfRkFOX1JQTV9UT09fTE9X",
+ "EN8nEikKJERZRUlOR19IRUFEX0JMT1dFUl8yX0ZBTl9SUE1fVE9PX0xPVxDg",
+ "JxIqCiVEWUVJTkdfSEVBRF9SSUdIVF9BQ1RVQVRPUl9VUF9USU1FT1VUEOEn",
+ "EikKJERZRUlOR19IRUFEX0xFRlRfQUNUVUFUT1JfVVBfVElNRU9VVBDiJxIs",
+ "CidEWUVJTkdfSEVBRF9SSUdIVF9BQ1RVQVRPUl9ET1dOX1RJTUVPVVQQ4ycS",
+ "KwomRFlFSU5HX0hFQURfTEVGVF9BQ1RVQVRPUl9ET1dOX1RJTUVPVVQQ5CcS",
+ "JwoiRFlFSU5HX0hFQURfQkxPV0VSXzFfRkxPV19UT09fSElHSBDlJxInCiJE",
+ "WUVJTkdfSEVBRF9CTE9XRVJfMl9GTE9XX1RPT19ISUdIEOYnEiYKIURZRUlO",
+ "R19IRUFEX0JMT1dFUl8xX0ZMT1dfVE9PX0xPVxDnJxImCiFEWUVJTkdfSEVB",
+ "RF9CTE9XRVJfMl9GTE9XX1RPT19MT1cQ6CcSIAobRFlFSU5HX0hFQURfQVJD",
+ "X0xJRF9JU19PUEVOEOknEiMKHkRZRUlOR19IRUFEX1RVTk5FTF9MSURfSVNf",
+ "T1BFThDqJxIaChVNSVhFUl9PVkVSVEVNUEVSQVRVUkUQ8C4SHQoYTUlYRVJf",
+ "VU5ERVJURU1QRVJBVFVSRV9BEPEuEh0KGE1JWEVSX1VOREVSVEVNUEVSQVRV",
+ "UkVfQhDyLhIZChRNSVhFUl9USEVSTUFMX0NVVE9GRhDzLhIfChpNSVhFUl9D",
+ "VVJSRU5UX09VVF9PRl9SQU5HRRD0LhIdChhNSVhFUl9DVVJSRU5UX0xPT1Bf",
+ "QlJFQUsQ9S4SHQoYRElTUEVOU0VSXzFfT1ZFUlBSRVNTVVJFENg2Eh0KGERJ",
+ "U1BFTlNFUl8yX09WRVJQUkVTU1VSRRDZNhIdChhESVNQRU5TRVJfM19PVkVS",
+ "UFJFU1NVUkUQ2jYSHQoYRElTUEVOU0VSXzRfT1ZFUlBSRVNTVVJFENs2Eh0K",
+ "GERJU1BFTlNFUl81X09WRVJQUkVTU1VSRRDcNhIdChhESVNQRU5TRVJfNl9P",
+ "VkVSUFJFU1NVUkUQ3TYSHQoYRElTUEVOU0VSXzdfT1ZFUlBSRVNTVVJFEN42",
+ "Eh0KGERJU1BFTlNFUl84X09WRVJQUkVTU1VSRRDfNhIeChlESVNQRU5TRVJf",
+ "MV9VTkRFUlBSRVNTVVJFEOA2Eh4KGURJU1BFTlNFUl8yX1VOREVSUFJFU1NV",
+ "UkUQ4TYSHgoZRElTUEVOU0VSXzNfVU5ERVJQUkVTU1VSRRDiNhIeChlESVNQ",
+ "RU5TRVJfNF9VTkRFUlBSRVNTVVJFEOM2Eh4KGURJU1BFTlNFUl81X1VOREVS",
+ "UFJFU1NVUkUQ5DYSHgoZRElTUEVOU0VSXzZfVU5ERVJQUkVTU1VSRRDlNhIe",
+ "ChlESVNQRU5TRVJfN19VTkRFUlBSRVNTVVJFEOY2Eh4KGURJU1BFTlNFUl84",
+ "X1VOREVSUFJFU1NVUkUQ5zYSFgoRRElTUEVOU0VSXzFfRU1QVFkQ6DYSFgoR",
+ "RElTUEVOU0VSXzJfRU1QVFkQ6TYSFgoRRElTUEVOU0VSXzNfRU1QVFkQ6jYS",
+ "FgoRRElTUEVOU0VSXzRfRU1QVFkQ6zYSFgoRRElTUEVOU0VSXzVfRU1QVFkQ",
+ "7DYSFgoRRElTUEVOU0VSXzZfRU1QVFkQ7TYSFgoRRElTUEVOU0VSXzdfRU1Q",
+ "VFkQ7jYSFgoRRElTUEVOU0VSXzhfRU1QVFkQ7zYSHwoaRElTUEVOU0VSXzFf",
+ "UkVGSUxMX0ZBSUxVUkUQ8DYSHwoaRElTUEVOU0VSXzJfUkVGSUxMX0ZBSUxV",
+ "UkUQ8TYSHwoaRElTUEVOU0VSXzNfUkVGSUxMX0ZBSUxVUkUQ8jYSHwoaRElT",
+ "UEVOU0VSXzRfUkVGSUxMX0ZBSUxVUkUQ8zYSHwoaRElTUEVOU0VSXzVfUkVG",
+ "SUxMX0ZBSUxVUkUQ9DYSHwoaRElTUEVOU0VSXzZfUkVGSUxMX0ZBSUxVUkUQ",
+ "9TYSHwoaRElTUEVOU0VSXzdfUkVGSUxMX0ZBSUxVUkUQ9jYSHwoaRElTUEVO",
+ "U0VSXzhfUkVGSUxMX0ZBSUxVUkUQ9zYSIgodRElTUEVOU0VSXzFfTU9UT1Jf",
+ "T1ZFUkNVUlJFTlQQ+DYSIgodRElTUEVOU0VSXzJfTU9UT1JfT1ZFUkNVUlJF",
+ "TlQQ+TYSIgodRElTUEVOU0VSXzNfTU9UT1JfT1ZFUkNVUlJFTlQQ+jYSIgod",
+ "RElTUEVOU0VSXzRfTU9UT1JfT1ZFUkNVUlJFTlQQ+zYSIgodRElTUEVOU0VS",
+ "XzVfTU9UT1JfT1ZFUkNVUlJFTlQQ/DYSIgodRElTUEVOU0VSXzZfTU9UT1Jf",
+ "T1ZFUkNVUlJFTlQQ/TYSIgodRElTUEVOU0VSXzdfTU9UT1JfT1ZFUkNVUlJF",
+ "TlQQ/jYSIgodRElTUEVOU0VSXzhfTU9UT1JfT1ZFUkNVUlJFTlQQ/zYSJgoh",
+ "RElTUEVOU0VSXzFfTU9UT1JfT1ZFUlRFTVBFUkFUVVJFEIA3EiYKIURJU1BF",
+ "TlNFUl8yX01PVE9SX09WRVJURU1QRVJBVFVSRRCBNxImCiFESVNQRU5TRVJf",
+ "M19NT1RPUl9PVkVSVEVNUEVSQVRVUkUQgjcSJgohRElTUEVOU0VSXzRfTU9U",
+ "T1JfT1ZFUlRFTVBFUkFUVVJFEIM3EiYKIURJU1BFTlNFUl81X01PVE9SX09W",
+ "RVJURU1QRVJBVFVSRRCENxImCiFESVNQRU5TRVJfNl9NT1RPUl9PVkVSVEVN",
+ "UEVSQVRVUkUQhTcSJgohRElTUEVOU0VSXzdfTU9UT1JfT1ZFUlRFTVBFUkFU",
+ "VVJFEIY3EiYKIURJU1BFTlNFUl84X01PVE9SX09WRVJURU1QRVJBVFVSRRCH",
+ "NxIcChdESVNQRU5TRVJfMV9NT1RPUl9TVEFMTBCINxIcChdESVNQRU5TRVJf",
+ "Ml9NT1RPUl9TVEFMTBCJNxIcChdESVNQRU5TRVJfM19NT1RPUl9TVEFMTBCK",
+ "NxIcChdESVNQRU5TRVJfNF9NT1RPUl9TVEFMTBCLNxIcChdESVNQRU5TRVJf",
+ "NV9NT1RPUl9TVEFMTBCMNxIcChdESVNQRU5TRVJfNl9NT1RPUl9TVEFMTBCN",
+ "NxIcChdESVNQRU5TRVJfN19NT1RPUl9TVEFMTBCONxIcChdESVNQRU5TRVJf",
+ "OF9NT1RPUl9TVEFMTBCPNxIjCh5ESVNQRU5TRVJfMV9NT1RPUl9VTkRFUlZP",
+ "TFRBR0UQkDcSIwoeRElTUEVOU0VSXzJfTU9UT1JfVU5ERVJWT0xUQUdFEJE3",
+ "EiMKHkRJU1BFTlNFUl8zX01PVE9SX1VOREVSVk9MVEFHRRCSNxIjCh5ESVNQ",
+ "RU5TRVJfNF9NT1RPUl9VTkRFUlZPTFRBR0UQkzcSIwoeRElTUEVOU0VSXzVf",
+ "TU9UT1JfVU5ERVJWT0xUQUdFEJQ3EiMKHkRJU1BFTlNFUl82X01PVE9SX1VO",
+ "REVSVk9MVEFHRRCVNxIjCh5ESVNQRU5TRVJfN19NT1RPUl9VTkRFUlZPTFRB",
+ "R0UQljcSIwoeRElTUEVOU0VSXzhfTU9UT1JfVU5ERVJWT0xUQUdFEJc3EiEK",
+ "HERJU1BFTlNFUl8xX1VQUEVSX0hBUkRfTElNSVQQmDcSIQocRElTUEVOU0VS",
+ "XzJfVVBQRVJfSEFSRF9MSU1JVBCZNxIhChxESVNQRU5TRVJfM19VUFBFUl9I",
+ "QVJEX0xJTUlUEJo3EiEKHERJU1BFTlNFUl80X1VQUEVSX0hBUkRfTElNSVQQ",
+ "mzcSIQocRElTUEVOU0VSXzVfVVBQRVJfSEFSRF9MSU1JVBCcNxIhChxESVNQ",
+ "RU5TRVJfNl9VUFBFUl9IQVJEX0xJTUlUEJ03EiEKHERJU1BFTlNFUl83X1VQ",
+ "UEVSX0hBUkRfTElNSVQQnjcSIQocRElTUEVOU0VSXzhfVVBQRVJfSEFSRF9M",
+ "SU1JVBCfNxIhChxESVNQRU5TRVJfMV9MT1dFUl9IQVJEX0xJTUlUEKA3EiEK",
+ "HERJU1BFTlNFUl8yX0xPV0VSX0hBUkRfTElNSVQQoTcSIQocRElTUEVOU0VS",
+ "XzNfTE9XRVJfSEFSRF9MSU1JVBCiNxIhChxESVNQRU5TRVJfNF9MT1dFUl9I",
+ "QVJEX0xJTUlUEKM3EiEKHERJU1BFTlNFUl81X0xPV0VSX0hBUkRfTElNSVQQ",
+ "pDcSIQocRElTUEVOU0VSXzZfTE9XRVJfSEFSRF9MSU1JVBClNxIhChxESVNQ",
+ "RU5TRVJfN19MT1dFUl9IQVJEX0xJTUlUEKY3EiEKHERJU1BFTlNFUl84X0xP",
+ "V0VSX0hBUkRfTElNSVQQpzcSHgoZRElTUEVOU0VSXzFfSElHSF9QUkVTU1VS",
+ "RRCoNxIeChlESVNQRU5TRVJfMl9ISUdIX1BSRVNTVVJFEKk3Eh4KGURJU1BF",
+ "TlNFUl8zX0hJR0hfUFJFU1NVUkUQqjcSHgoZRElTUEVOU0VSXzRfSElHSF9Q",
+ "UkVTU1VSRRCrNxIeChlESVNQRU5TRVJfNV9ISUdIX1BSRVNTVVJFEKw3Eh4K",
+ "GURJU1BFTlNFUl82X0hJR0hfUFJFU1NVUkUQrTcSHgoZRElTUEVOU0VSXzdf",
+ "SElHSF9QUkVTU1VSRRCuNxIeChlESVNQRU5TRVJfOF9ISUdIX1BSRVNTVVJF",
+ "EK83EhkKFE1JRF9UQU5LXzFfTE9XX0xFVkVMEMA+EhkKFE1JRF9UQU5LXzJf",
+ "TE9XX0xFVkVMEME+EhkKFE1JRF9UQU5LXzNfTE9XX0xFVkVMEMI+EhkKFE1J",
+ "RF9UQU5LXzRfTE9XX0xFVkVMEMM+EhkKFE1JRF9UQU5LXzVfTE9XX0xFVkVM",
+ "EMQ+EhkKFE1JRF9UQU5LXzZfTE9XX0xFVkVMEMU+EhkKFE1JRF9UQU5LXzdf",
+ "TE9XX0xFVkVMEMY+EhkKFE1JRF9UQU5LXzhfTE9XX0xFVkVMEMc+EhUKEE1J",
+ "RF9UQU5LXzFfRU1QVFkQyD4SFQoQTUlEX1RBTktfMl9FTVBUWRDJPhIVChBN",
+ "SURfVEFOS18zX0VNUFRZEMo+EhUKEE1JRF9UQU5LXzRfRU1QVFkQyz4SFQoQ",
+ "TUlEX1RBTktfNV9FTVBUWRDMPhIVChBNSURfVEFOS182X0VNUFRZEM0+EhUK",
+ "EE1JRF9UQU5LXzdfRU1QVFkQzj4SFQoQTUlEX1RBTktfOF9FTVBUWRDPPhIY",
+ "ChNNSURfVEFOS18xX09WRVJGTE9XENA+EhgKE01JRF9UQU5LXzJfT1ZFUkZM",
+ "T1cQ0T4SGAoTTUlEX1RBTktfM19PVkVSRkxPVxDSPhIYChNNSURfVEFOS180",
+ "X09WRVJGTE9XENM+EhgKE01JRF9UQU5LXzVfT1ZFUkZMT1cQ1D4SGAoTTUlE",
+ "X1RBTktfNl9PVkVSRkxPVxDVPhIYChNNSURfVEFOS183X09WRVJGTE9XENY+",
+ "EhgKE01JRF9UQU5LXzhfT1ZFUkZMT1cQ1z4SHAoXTUlEX1RBTktfMV9GSUxM",
+ "X1RJTUVPVVQQ2D4SHAoXTUlEX1RBTktfMl9GSUxMX1RJTUVPVVQQ2T4SHAoX",
+ "TUlEX1RBTktfM19GSUxMX1RJTUVPVVQQ2j4SHAoXTUlEX1RBTktfNF9GSUxM",
+ "X1RJTUVPVVQQ2z4SHAoXTUlEX1RBTktfNV9GSUxMX1RJTUVPVVQQ3D4SHAoX",
+ "TUlEX1RBTktfNl9GSUxMX1RJTUVPVVQQ3T4SHAoXTUlEX1RBTktfN19GSUxM",
+ "X1RJTUVPVVQQ3j4SHAoXTUlEX1RBTktfOF9GSUxMX1RJTUVPVVQQ3z4SHQoY",
+ "QUlSX0ZJTFRFUl9OT1RfSU5TVEFMTEVEEKhGEhcKEkFJUl9GSUxURVJfQ0xP",
+ "R0dFRBCpRhIlCiBXQVNURV9DT05UQUlORVJfRU1QVFlJTkdfVElNRU9VVBCq",
+ "RhIUCg9OT19BSVJfUFJFU1NVUkUQq0YSHQoYV0FTVEVfQ09OVEFJTkVSX09W",
+ "RVJGTE9XEKxGEhoKFVZPQ19TRU5TT1JfQUxBUk1fVElNRRCtRhIYChNDSElM",
+ "TEVSX0RSWV9DT05UQUNUEK5GEhoKFUlOU1VGRklDSUVOVF9BSVJfRkxPVxCv",
+ "RhIbChZWT0NfU0VOU09SX0FMQVJNX1NMT1BFELBGEh0KGFBSRV9DT09MRVJf",
+ "RkFOXzFfU1RPUFBFRBCxRhIdChhQUkVfQ09PTEVSX0ZBTl8yX1NUT1BQRUQQ",
+ "skYSGQoUQ09PTEVSX0ZBTl8xX1NUT1BQRUQQs0YSGQoUQ09PTEVSX0ZBTl8y",
+ "X1NUT1BQRUQQtEYSGQoUQ09PTEVSX0ZBTl8zX1NUT1BQRUQQtUYSGQoUQ09P",
+ "TEVSX0ZBTl80X1NUT1BQRUQQtkYSIQocUFJFX0NPT0xFUl9GQU5fMV9SUE1f",
+ "VE9PX0xPVxC3RhIhChxQUkVfQ09PTEVSX0ZBTl8yX1JQTV9UT09fTE9XELhG",
+ "Eh0KGENPT0xFUl9GQU5fMV9SUE1fVE9PX0xPVxC5RhIdChhDT09MRVJfRkFO",
+ "XzJfUlBNX1RPT19MT1cQukYSHQoYQ09PTEVSX0ZBTl8zX1JQTV9UT09fTE9X",
+ "ELtGEh0KGENPT0xFUl9GQU5fNF9SUE1fVE9PX0xPVxC8RhIgChtDT09MRVJf",
+ "VEVNUEVSQVRVUkVfVE9PX0hJR0gQvUYSHwoaQ09PTEVSX1RFTVBFUkFUVVJF",
+ "X1RPT19MT1cQvkYSKgolSU5LX0NBUlRSSURHRV9QUkVTRU5DRV9TRU5TT1Jf",
+ "VElNRU9VVBCQThIfChpJTktfQ0FSVFJJREdFX1JGSURfVElNRU9VVBCRThIh",
+ "ChxOT19XQVNURV9DQVJUUklER0VfQVZBSUxBQkxFEJJOEh4KGUFMTF9XQVNU",
+ "RV9DQVJUUklER0VTX0ZVTEwQk04SLAonV0FTVEVfQ0FSVFJJREdFX1BSRVNF",
+ "TkNFX1NFTlNPUl9USU1FT1VUEJROEiEKHFdBU1RFX0NBUlRSSURHRV9SRklE",
+ "X1RJTUVPVVQQlU5CIQofY29tLnR3aW5lLnRhbmdvLnBtci5kaWFnbm9zdGlj",
+ "c2IGcHJvdG8z"));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Tango.PMR.Diagnostics.EventType), }, null));
@@ -403,7 +409,7 @@ namespace Tango.PMR.Diagnostics {
/// <summary>
///Cover is open. Cannot execute job (Group = GeneralHardware, Category = Error)
/// </summary>
- [pbr::OriginalName("REAR_COVER_OPEN")] RearCoverOpen = 2007,
+ [pbr::OriginalName("ARCH_COVER_OPEN")] ArchCoverOpen = 2007,
/// <summary>
///The machine temperature is too high. Cannot execute job (Group = GeneralHardware, Category = Critical)
/// </summary>
@@ -457,6 +463,10 @@ namespace Tango.PMR.Diagnostics {
/// </summary>
[pbr::OriginalName("UNINTENDED_RESET")] UnintendedReset = 2020,
/// <summary>
+ ///Temperature measurement error has occurred. Cannot execute job. (Group = GeneralHardware, Category = Error)
+ /// </summary>
+ [pbr::OriginalName("TEMPERATURE_MEASUREMENT_ERROR")] TemperatureMeasurementError = 2021,
+ /// <summary>
///Thread break. Cannot execute job (Group = ThreadFeedingSystem, Category = Error)
/// </summary>
[pbr::OriginalName("THREAD_BREAK")] ThreadBreak = 3000,
@@ -1125,6 +1135,30 @@ namespace Tango.PMR.Diagnostics {
/// </summary>
[pbr::OriginalName("DYEING_HEAD_LEFT_ACTUATOR_DOWN_TIMEOUT")] DyeingHeadLeftActuatorDownTimeout = 5092,
/// <summary>
+ ///Dyeing head blower flow is too high. Cannot execute job (Group = DyeingHead, Category = Error)
+ /// </summary>
+ [pbr::OriginalName("DYEING_HEAD_BLOWER_1_FLOW_TOO_HIGH")] DyeingHeadBlower1FlowTooHigh = 5093,
+ /// <summary>
+ ///Dyeing head blower flow is too high. Cannot execute job (Group = DyeingHead, Category = Error)
+ /// </summary>
+ [pbr::OriginalName("DYEING_HEAD_BLOWER_2_FLOW_TOO_HIGH")] DyeingHeadBlower2FlowTooHigh = 5094,
+ /// <summary>
+ ///Dyeing head blower flow is too low. Cannot execute job (Group = DyeingHead, Category = Error)
+ /// </summary>
+ [pbr::OriginalName("DYEING_HEAD_BLOWER_1_FLOW_TOO_LOW")] DyeingHeadBlower1FlowTooLow = 5095,
+ /// <summary>
+ ///Dyeing head blower flow is too low. Cannot execute job (Group = DyeingHead, Category = Error)
+ /// </summary>
+ [pbr::OriginalName("DYEING_HEAD_BLOWER_2_FLOW_TOO_LOW")] DyeingHeadBlower2FlowTooLow = 5096,
+ /// <summary>
+ ///Dyeing head arc lid is open. Cannot execute job. (Group = DyeingHead, Category = Error)
+ /// </summary>
+ [pbr::OriginalName("DYEING_HEAD_ARC_LID_IS_OPEN")] DyeingHeadArcLidIsOpen = 5097,
+ /// <summary>
+ ///Dyeing head tunnel lid is open. Cannot execute job (Group = DyeingHead, Category = Error)
+ /// </summary>
+ [pbr::OriginalName("DYEING_HEAD_TUNNEL_LID_IS_OPEN")] DyeingHeadTunnelLidIsOpen = 5098,
+ /// <summary>
///The temperature in the mixer is too high. Cannot execute job (Group = Mixer, Category = Critical)
/// </summary>
[pbr::OriginalName("MIXER_OVERTEMPERATURE")] MixerOvertemperature = 6000,
@@ -1181,35 +1215,35 @@ namespace Tango.PMR.Diagnostics {
/// </summary>
[pbr::OriginalName("DISPENSER_8_OVERPRESSURE")] Dispenser8Overpressure = 7007,
/// <summary>
- ///The pressure in black dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ ///The pressure in black dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
/// </summary>
[pbr::OriginalName("DISPENSER_1_UNDERPRESSURE")] Dispenser1Underpressure = 7008,
/// <summary>
- ///The pressure in cyan dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ ///The pressure in cyan dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
/// </summary>
[pbr::OriginalName("DISPENSER_2_UNDERPRESSURE")] Dispenser2Underpressure = 7009,
/// <summary>
- ///The pressure in magenta dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ ///The pressure in magenta dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
/// </summary>
[pbr::OriginalName("DISPENSER_3_UNDERPRESSURE")] Dispenser3Underpressure = 7010,
/// <summary>
- ///The pressure in yellow dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ ///The pressure in yellow dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
/// </summary>
[pbr::OriginalName("DISPENSER_4_UNDERPRESSURE")] Dispenser4Underpressure = 7011,
/// <summary>
- ///The pressure in transparent ink dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ ///The pressure in transparent ink dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
/// </summary>
[pbr::OriginalName("DISPENSER_5_UNDERPRESSURE")] Dispenser5Underpressure = 7012,
/// <summary>
- ///The pressure in spot color 1 dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ ///The pressure in spot color 1 dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
/// </summary>
[pbr::OriginalName("DISPENSER_6_UNDERPRESSURE")] Dispenser6Underpressure = 7013,
/// <summary>
- ///The pressure in cleaner dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ ///The pressure in cleaner dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
/// </summary>
[pbr::OriginalName("DISPENSER_7_UNDERPRESSURE")] Dispenser7Underpressure = 7014,
/// <summary>
- ///The pressure in lubricant dispenser is too low. Cannot execute job (Group = Dispensers, Category = Critical)
+ ///The pressure in lubricant dispenser is too low. Cannot execute job (Group = Dispensers, Category = Error)
/// </summary>
[pbr::OriginalName("DISPENSER_8_UNDERPRESSURE")] Dispenser8Underpressure = 7015,
/// <summary>
@@ -1657,7 +1691,7 @@ namespace Tango.PMR.Diagnostics {
/// </summary>
[pbr::OriginalName("CHILLER_DRY_CONTACT")] ChillerDryContact = 9006,
/// <summary>
- ///Insufficient air flow. Cannot execute job (Group = WasteHandlingSystem, Category = Critical)
+ ///Insufficient air flow. Cannot execute job (Group = WasteHandlingSystem, Category = Error)
/// </summary>
[pbr::OriginalName("INSUFFICIENT_AIR_FLOW")] InsufficientAirFlow = 9007,
/// <summary>
diff --git a/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/OverrideData.xml b/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/OverrideData.xml
index 5a2082722..6fb63840f 100644
--- a/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/OverrideData.xml
+++ b/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/OverrideData.xml
Binary files differ
diff --git a/Software/Visual_Studio/Tango.Transport/TransporterBase.cs b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs
index 81166ac2e..cba768fce 100644
--- a/Software/Visual_Studio/Tango.Transport/TransporterBase.cs
+++ b/Software/Visual_Studio/Tango.Transport/TransporterBase.cs
@@ -1201,7 +1201,7 @@ namespace Tango.Transport
{
ErrorCode = ErrorCode.GeneralError,
Completed = true,
- ErrorMessage = exception.Message
+ ErrorMessage = exception.FlattenMessage()
});
}
diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analysis/IAnalyzerResult.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analysis/IAnalyzerResult.cs
index 074d5ec86..6b404d2a5 100644
--- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analysis/IAnalyzerResult.cs
+++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analysis/IAnalyzerResult.cs
@@ -13,6 +13,8 @@ namespace Tango.DispenserAnalyzer.UI.Analysis
{
public ObservableCollection<DataPoint> Points { get; set; }
+ public string Title { get; set; }
+
private int _step;
public int XStep
{
@@ -38,6 +40,7 @@ namespace Tango.DispenserAnalyzer.UI.Analysis
{
_to = Points.Max(x => x.Y) + 2;
_from = Points.Min(x => x.Y)-1;
+ RaisePropertyChanged("Title");
RaisePropertyChanged("Points");
}
diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/FlowAnalyser.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/FlowAnalyser.cs
index 60ca14fa9..2d4775a37 100644
--- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/FlowAnalyser.cs
+++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/FlowAnalyser.cs
@@ -22,10 +22,11 @@ namespace Tango.DispenserAnalyzer.UI.Analyzers
{
return Task.Factory.StartNew<List<IAnalyzerResult>>(() =>
{
- List<IAnalyzerResult> results = new List<IAnalyzerResult>();
- List<DispenserSample> commands = csvRows.Where(x => x.Command != null && x.Command.ToLower().Contains("label")).ToList<DispenserSample>();
- var pairs = commands.Select((x, i) => new { Index = i, Value = x }).GroupBy(x => x.Index / 2).Select(x => x.Select(v => v.Value).ToList()).ToList();
- MovingAverageFilter filter = new MovingAverageFilter();
+ List<IAnalyzerResult> results = new List<IAnalyzerResult>();
+ List<DispenserSample> commands = csvRows.Where(x => x.Command != null && x.Command.ToLower().Contains("label")).ToList<DispenserSample>();
+ var pairs = commands.Select((x, i) => new { Index = i, Value = x }).GroupBy(x => x.Index / 2).Select(x => x.Select(v => v.Value).ToList()).ToList();
+ MovingAverageFilter filter = new MovingAverageFilter();
+ int flowtestNumber = 0;
for (int index = 0; index < pairs.Count(); index++)
{
var pair = pairs[index];
@@ -73,7 +74,7 @@ namespace Tango.DispenserAnalyzer.UI.Analyzers
averageResult.Result = (averageResult.AverageValue <= 1850 && averageResult.AverageValue >= 1400) ? AnalyzerResultValue.Passed : AnalyzerResultValue.Failed;
results.Add(averageResult);
- FlowAnalyzerResult result = new FlowAnalyzerResult();
+ FlowAnalyzerResult result = new FlowAnalyzerResult(++flowtestNumber);
result.AverageValue = averageResult.AverageValue;
result.SetLocalErrors(differenceMaxMin, differenceMaxMinToLocationArr);
results.Add(result);
@@ -114,13 +115,15 @@ namespace Tango.DispenserAnalyzer.UI.Analyzers
public double AverageValue { get; set; }
+ public int TestNumber { get; set; }
+
#endregion Properties
- public FlowAnalyzerResult():base()
+ public FlowAnalyzerResult(int testNumber) :base()
{
AverageValue = 0.0;
Result = AnalyzerResultValue.Undetermined;
- //this.Points = new ObservableCollection<DataPoint>();
+ TestNumber = testNumber;
}
/// <summary>
@@ -142,6 +145,7 @@ namespace Tango.DispenserAnalyzer.UI.Analyzers
}
}
this.IsShowPlotResult = true;
+ RangeToCountChart.Title = $"Flow Range To Count {TestNumber}";
RangeToCountChart.UpdateData();
var rangeToTimePoints = RangeToTimeChart.Points;
rangeToTimePoints.Clear();
@@ -149,6 +153,7 @@ namespace Tango.DispenserAnalyzer.UI.Analyzers
{
rangeToTimePoints.Add(new DataPoint(differenceMaxMinToLocationArr.ElementAt(y), differenceMaxMin.ElementAt(y)));
}
+ RangeToTimeChart.Title = $"Flow Time Location To Range {TestNumber}";
RangeToTimeChart.UpdateData();
}
diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/MainWindow.xaml b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/MainWindow.xaml
index c73d67ba7..e56ae6639 100644
--- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/MainWindow.xaml
+++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/MainWindow.xaml
@@ -40,7 +40,12 @@
<TextBox x:Name="tbPath" BorderThickness="1" FontSize="16" VerticalContentAlignment="Center" IsReadOnly="False" Grid.Column="0" Margin="0 0 20 0" Text="{Binding OpenFilePath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" AllowDrop="True" PreviewDrop="TextBlock_PreviewDrop" PreviewDragOver="TextBox_PreviewDragOver" BorderBrush="Silver" Padding="5 0 0 0 "></TextBox>
<Button Grid.Column="1" Command="{Binding OpenCSVFileCommand}">Browse</Button>
</Grid>
- <Button Grid.Row="1" Margin="10 0 10 20" Command="{Binding GenerateCommand}" Content="{Binding ButtonName}"></Button>
+ <Grid Grid.Row="1" HorizontalAlignment="Stretch" Margin="10 0 20 20">
+ <Button Command="{Binding GenerateCommand}" Content="{Binding ButtonName}" Margin="0 0 30 0"></Button>
+ <Button Command="{Binding OpenSettingWndCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Width="20" Height="20" Margin="0 0 0 0" Padding="0" Style="{StaticResource MaterialDesignFlatButton}" ToolTip="Open Setting Window">
+ <materialDesign:PackIcon Kind="Settings" Width="16" Height="16" VerticalAlignment="Center"></materialDesign:PackIcon>
+ </Button>
+ </Grid>
<Grid Grid.Row="2">
<Border BorderBrush="Silver" Padding="5" BorderThickness="1" CornerRadius="5" Margin="10">
<Expander Header="{Binding TestName}" IsExpanded="True">
@@ -106,7 +111,7 @@
</ItemsControl>
<Border x:Name="PlotBorder" BorderBrush="Silver" Padding="2" BorderThickness="1" CornerRadius="5" Margin="10" Visibility="{Binding IsShowPlotResult, Converter={StaticResource BooleanToVisibilityConverter}}" MinHeight="300">
<StackPanel Orientation="Vertical" x:Name="PlotStackPanel">
- <oxy:Plot Title="Flow Range To Count" x:Name="RangeToCountPlot" LegendPlacement="Outside" LegendPosition="RightTop" LegendOrientation="Vertical" ClipToBounds="True" Loaded="RangeToCountPlot_Loaded" MinWidth="200" MinHeight="300">
+ <oxy:Plot Title="{Binding RangeToCountChart.Title}" x:Name="RangeToCountPlot" LegendPlacement="Outside" LegendPosition="RightTop" LegendOrientation="Vertical" ClipToBounds="True" Loaded="RangeToCountPlot_Loaded" MinWidth="220" MinHeight="300">
<oxy:Plot.Series >
<oxy:ColumnSeries ItemsSource="{Binding RangeToCountChart.Points}" Color="#73B6EC" StrokeThickness="1" FillColor="#73B6EC" ValueField="Y" LabelFormatString="{}{0}" LabelPlacement="Base" />
</oxy:Plot.Series>
@@ -119,7 +124,7 @@
</Border>
<Border x:Name="RangeToTimeBorder" BorderBrush="Silver" Padding="2" BorderThickness="1" CornerRadius="5" Margin="10" Visibility="{Binding IsShowPlotResult, Converter={StaticResource BooleanToVisibilityConverter}}" MinHeight="300">
<StackPanel Orientation="Vertical" x:Name="RangeToTimeStackPanel">
- <oxy:Plot Title="Flow Time Location To Range" x:Name="RangeToTimePlot" LegendPlacement="Outside" LegendPosition="RightTop" LegendOrientation="Vertical" ClipToBounds="True" MinWidth="200" MinHeight="300">
+ <oxy:Plot Title="{Binding RangeToTimeChart.Title}" x:Name="RangeToTimePlot" LegendPlacement="Outside" LegendPosition="RightTop" LegendOrientation="Vertical" ClipToBounds="True" MinWidth="220" MinHeight="300">
<oxy:Plot.Series >
<oxy:LineSeries ItemsSource="{Binding RangeToTimeChart.Points}" Color="#73B6EC" StrokeThickness="1" MarkerFill="SteelBlue" />
</oxy:Plot.Series>
diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Models/SettingsModel.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Models/SettingsModel.cs
new file mode 100644
index 000000000..0d9e20288
--- /dev/null
+++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Models/SettingsModel.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core;
+
+namespace Tango.DispenserAnalyzer.UI.Models
+{
+ public class SettingsModel: ExtendedObject
+ {
+ private string _propertyName;
+
+ public string PropertyName
+ {
+ get { return _propertyName; }
+ set { _propertyName = value; RaisePropertyChangedAuto(); }
+ }
+
+ private double _propertyvalue;
+
+ public double PropertyValue
+ {
+ get { return _propertyvalue; }
+ set { _propertyvalue = value; RaisePropertyChangedAuto(); }
+ }
+
+ private double _defaultValue;
+
+ public double DefaultValue
+ {
+ get { return _defaultValue; }
+ set { _defaultValue = value; RaisePropertyChangedAuto(); }
+ }
+
+ private string _defaultValueDisplay;
+
+ public string DefaultValueDisplay
+ {
+ get { return _defaultValueDisplay; }
+ set { _defaultValueDisplay = value; }
+ }
+
+
+ public SettingsModel( string propertyName, string defaultValueDisplay, double defaultValue)
+ {
+ PropertyName = propertyName;
+ DefaultValueDisplay = defaultValueDisplay;
+ DefaultValue = defaultValue;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Tango.DispenserAnalyzer.UI.csproj b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Tango.DispenserAnalyzer.UI.csproj
index 373654985..7efcaa58d 100644
--- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Tango.DispenserAnalyzer.UI.csproj
+++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Tango.DispenserAnalyzer.UI.csproj
@@ -143,7 +143,12 @@
<Compile Include="Models\DispenserCsvRow.cs" />
<Compile Include="Models\DispenserSample.cs" />
<Compile Include="Models\DispenserSampleCommand.cs" />
+ <Compile Include="Models\SettingsModel.cs" />
<Compile Include="ViewModels\MainWindowVM.cs" />
+ <Compile Include="ViewModels\SettingsVM.cs" />
+ <Compile Include="View\SettingsWnd.xaml.cs">
+ <DependentUpon>SettingsWnd.xaml</DependentUpon>
+ </Compile>
<Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
@@ -156,6 +161,10 @@
<DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
+ <Page Include="View\SettingsWnd.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs">
diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/View/SettingsWnd.xaml b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/View/SettingsWnd.xaml
new file mode 100644
index 000000000..9d818a05b
--- /dev/null
+++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/View/SettingsWnd.xaml
@@ -0,0 +1,166 @@
+<Window x:Class="Tango.DispenserAnalyzer.UI.View.SettingsWnd"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
+ xmlns:local="clr-namespace:Tango.DispenserAnalyzer.UI.View"
+ mc:Ignorable="d"
+ Title="Settings" Height="630" Width="800" FontSize="22" ResizeMode="NoResize" WindowStyle="ToolWindow">
+ <Window.Resources>
+ <Style TargetType="{x:Type TextBlock}" x:Key="WrapText">
+ <Setter Property="TextWrapping" Value="Wrap"/>
+ </Style>
+
+ <Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
+ <Setter Property="HorizontalAlignment" Value="Left"></Setter>
+ <Setter Property="HorizontalContentAlignment" Value="Left"></Setter>
+ <Setter Property="Padding" Value="0 0 0 0"></Setter>
+ <Setter Property="Margin" Value="8 0 0 0"></Setter>
+ <Setter Property="FontWeight" Value="SemiBold"/>
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="Height" Value="Auto"/>
+ <Setter Property="FontSize" Value="14"/>
+ </Style>
+ <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
+ <Setter Property="Padding" Value="1" />
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
+ <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
+ <Setter Property="VerticalAlignment" Value="Center"/>
+ <Setter Property="HorizontalAlignment" Value="Left"/>
+ <Setter Property="Margin" Value="8 0 8 0"/>
+ <Setter Property="Height" Value="Auto"/>
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="{x:Type DataGridCell}">
+ <ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ <Style.Triggers>
+ <Trigger Property="IsSelected" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" />
+ </Trigger>
+ </Style.Triggers>
+ </Style>
+ <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
+ <Setter Property="BorderThickness" Value="0 0 0 1"/>
+ <Setter Property="BorderBrush" Value="LightGray"/>
+ <Setter Property="Height" Value="Auto"/>
+ <Style.Triggers>
+ <Trigger Property="IsMouseOver" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ <Setter Property="Foreground" Value="#4fc3f7" />
+ <Setter Property="Cursor" Value="Hand"></Setter>
+ </Trigger>
+ <Trigger Property="IsSelected" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ </Trigger>
+ <Trigger Property="IsFocused" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ </Trigger>
+ </Style.Triggers>
+ </Style>
+
+ <Style TargetType="DataGrid" BasedOn="{StaticResource {x:Type DataGrid}}">
+ <Setter Property="BorderBrush" Value="#FF688CAF"/>
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="HorizontalScrollBarVisibility" Value="Disabled" />
+ <Setter Property="VerticalScrollBarVisibility" Value="Auto"/>
+ </Style>
+
+ <DataGrid x:Key="PropertyDataGrid" HorizontalAlignment="Left" VerticalScrollBarVisibility ="Auto" SelectionUnit="FullRow" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False"
+ ItemsSource="{Binding .}" GridLinesVisibility="None" SelectionMode="Single" AlternatingRowBackground="#F6F6F6" FontSize="12" >
+ <DataGrid.Columns>
+ <DataGridTextColumn Header="Property Name" Binding="{Binding PropertyName}" Width="150" ElementStyle="{StaticResource WrapText}"/>
+ <DataGridTextColumn Header="Property Value" Binding="{Binding PropertyValue}" Width="150" IsReadOnly="False"></DataGridTextColumn>
+ <DataGridTextColumn Header="Default Value" Binding="{Binding DefaultValueDisplay}" Width="150" ElementStyle="{StaticResource WrapText}" />
+ <DataGridTemplateColumn Header="" Width="1*">
+ <DataGridTemplateColumn.CellStyle>
+ <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
+ <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
+ <Setter Property="VerticalAlignment" Value="Center"/>
+ <Setter Property="HorizontalAlignment" Value="Stretch"/>
+ <Setter Property="Margin" Value="0 0 0 0"/>
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="{x:Type DataGridCell}">
+ <ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ <Style.Triggers>
+ <Trigger Property="IsSelected" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" />
+ </Trigger>
+ </Style.Triggers>
+ </Style>
+ </DataGridTemplateColumn.CellStyle>
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <Grid HorizontalAlignment="Stretch" VerticalAlignment="Center">
+ <Button Width="80" Padding="2" Height="26" FontSize="12" Margin="0 8">Set Default</Button>
+ </Grid>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+ </DataGrid.Columns>
+ </DataGrid>
+ </Window.Resources>
+
+
+ <Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="1*"/>
+ <RowDefinition Height="Auto"/>
+ </Grid.RowDefinitions>
+ <Grid.ColumnDefinitions>
+
+ </Grid.ColumnDefinitions>
+ <Grid Grid.Row="0">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition/>
+ </Grid.RowDefinitions>
+ <Grid Grid.Row="0" VerticalAlignment="Top">
+ <Border Margin="20 20 20 0" BorderBrush="LightGray" BorderThickness="0.6" CornerRadius="4" Height="36">
+ <Border.Effect>
+ <DropShadowEffect/>
+ </Border.Effect>
+ </Border>
+ <Border Margin="20 20 20 0" BorderBrush="LightGray" BorderThickness="0.6" CornerRadius="4" Height="34" Background="#C4EEFC">
+ <TextBlock FontSize="22" Padding="2">Pressure build up test</TextBlock>
+ </Border>
+ </Grid>
+ <ContentControl Grid.Row="1" Margin="20 3 20 0" Content="{StaticResource PropertyDataGrid}" DataContext="{Binding Path=PBUTestSettings}"></ContentControl>
+ </Grid>
+ <Grid Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Stretch">
+ <Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition Height="1*"/>
+ </Grid.RowDefinitions>
+ <Grid Grid.Row="0" VerticalAlignment="Top">
+ <Border Margin="20 20 20 0" BorderBrush="LightGray" BorderThickness="0.6" CornerRadius="4" Height="36">
+ <Border.Effect>
+ <DropShadowEffect/>
+ </Border.Effect>
+ </Border>
+ <Border Margin="20 20 20 0" BorderBrush="LightGray" BorderThickness="0.6" CornerRadius="4" Height="34" Background="#C4EEFC">
+ <TextBlock FontSize="22" Padding="2">Flow test</TextBlock>
+ </Border>
+ </Grid>
+ <ContentControl Grid.Row="1" Content="{StaticResource PropertyDataGrid}" DataContext="{Binding Path=FlowTestSettings}" Margin="20 0 20 0"></ContentControl>
+ </Grid>
+ </Grid>
+ <Grid Grid.Row="2" >
+ <Button Width="80" HorizontalAlignment="Right" Margin="20">Save</Button>
+ </Grid>
+ </Grid>
+</Window>
diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/View/SettingsWnd.xaml.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/View/SettingsWnd.xaml.cs
new file mode 100644
index 000000000..f0e35726e
--- /dev/null
+++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/View/SettingsWnd.xaml.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+using Tango.DispenserAnalyzer.UI.ViewModels;
+
+namespace Tango.DispenserAnalyzer.UI.View
+{
+ /// <summary>
+ /// Interaction logic for SettingsWnd.xaml
+ /// </summary>
+ public partial class SettingsWnd : Window
+ {
+ public SettingsWnd()
+ {
+ InitializeComponent();
+ DataContext = new SettingsVM();
+ Loaded += Window_loaded;
+ }
+
+ private void Window_loaded(object sender, RoutedEventArgs e)
+ {
+ Application curApp = Application.Current;
+ Window mainWindow = curApp.MainWindow;
+ this.Left = mainWindow.Left + (mainWindow.Width - this.ActualWidth) / 2;
+ this.Top = mainWindow.Top + (mainWindow.Height - this.ActualHeight) / 2;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/MainWindowVM.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/MainWindowVM.cs
index 1182d5301..ab571ec43 100644
--- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/MainWindowVM.cs
+++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/MainWindowVM.cs
@@ -27,6 +27,7 @@ using System.Windows.Media.Imaging;
using PdfSharp;
using OxyPlot.Reporting;
using System.Threading;
+using Tango.DispenserAnalyzer.UI.View;
namespace Tango.DispenserAnalyzer.UI.ViewModels
{
@@ -144,12 +145,14 @@ namespace Tango.DispenserAnalyzer.UI.ViewModels
public RelayCommand OpenCSVFileCommand { get; set; }
public RelayCommand GenerateCommand { get; set; }
+ public RelayCommand OpenSettingWndCommand { get; set; }
public MainWindowVM()
{
OpenCSVFileCommand = new RelayCommand(OpenCSVFile);
GenerateCommand = new RelayCommand(Generate, CanGenerate);
-
+ OpenSettingWndCommand = new RelayCommand(OpenSettingWnd);
+
YFormatter = value => value.ToString();
_from = 0;
_to = 1;
@@ -160,6 +163,18 @@ namespace Tango.DispenserAnalyzer.UI.ViewModels
this.Points = new List<DataPoint>();
}
+
+ #region Settings
+
+ public void OpenSettingWnd()
+ {
+ SettingsWnd settings = new SettingsWnd();
+ settings.Owner = System.Windows.Application.Current.MainWindow;
+ settings.ShowDialog();
+ }
+
+ #endregion
+
#region Read File
private void OpenCSVFile()
{
@@ -209,6 +224,7 @@ namespace Tango.DispenserAnalyzer.UI.ViewModels
}
}
#endregion
+
#region Generate
public bool CanGenerate()
{
@@ -351,10 +367,11 @@ namespace Tango.DispenserAnalyzer.UI.ViewModels
string pngPlotFileName = String.Format($"{fileNameWithoutExtension}_Plottest{index}.png");
File.Delete(pngPlotFileName);
System.Windows.Controls.Image plotImage = new System.Windows.Controls.Image();
- using (var stream = File.Open(pngPlotFileName, FileMode.Create, FileAccess.ReadWrite))
+ //print plot to png file - removed 2/07/2020
+ //using (var stream = File.Open(pngPlotFileName, FileMode.Create, FileAccess.ReadWrite))
{
PngExporter exporter = new PngExporter() { Width = (int)item.ActualWidth, Height = (int)item.ActualHeight, Background = OxyColors.White, Resolution = 96 };
- exporter.Export(item.ActualModel, stream);
+ //exporter.Export(item.ActualModel, stream);
BitmapSource bitmap = exporter.ExportToBitmap(item.ActualModel);
plotImage.Source = bitmap;
@@ -400,7 +417,10 @@ namespace Tango.DispenserAnalyzer.UI.ViewModels
FixedDocument fixedDoc = new FixedDocument();
PageContent pageContent = new PageContent();
FixedPage fixedPage = new FixedPage();
+ fixedPage.Width = reportSize.Width;
+ fixedPage.Height = reportSize.Height;
fixedPage.Children.Add(ResultsPanel);
+ fixedPage.UpdateLayout();
pageContent.BeginInit();
((System.Windows.Markup.IAddChild)pageContent).AddChild(fixedPage);
@@ -445,8 +465,8 @@ namespace Tango.DispenserAnalyzer.UI.ViewModels
private static Size GetReportSize(ItemsControl reportContainer)
{
- double reportWidth = reportContainer.ActualWidth;
- double reportHeight = reportContainer.ActualHeight;// (reportWidth / printDialog.PrintableAreaWidth) * printDialog.PrintableAreaHeight;
+ double reportWidth = reportContainer.ActualWidth + 10;
+ double reportHeight = reportContainer.ActualHeight + 10;// (reportWidth / printDialog.PrintableAreaWidth) * printDialog.PrintableAreaHeight;
return new Size(reportWidth, reportHeight);
}
diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/SettingsVM.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/SettingsVM.cs
new file mode 100644
index 000000000..99b6e948a
--- /dev/null
+++ b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/ViewModels/SettingsVM.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.DispenserAnalyzer.UI.Models;
+using Tango.SharedUI;
+
+namespace Tango.DispenserAnalyzer.UI.ViewModels
+{
+ public class SettingsVM : ViewModel
+ {
+ private ObservableCollection<SettingsModel> _PBUSettings;
+
+ public ObservableCollection<SettingsModel> PBUTestSettings
+ {
+ get { return _PBUSettings; }
+ set { _PBUSettings = value; RaisePropertyChangedAuto(); }
+ }
+
+ private ObservableCollection<SettingsModel> _flowTestSettings;
+
+ public ObservableCollection<SettingsModel> FlowTestSettings
+ {
+ get { return _flowTestSettings; }
+ set { _flowTestSettings = value; RaisePropertyChangedAuto(); }
+ }
+
+ public SettingsVM()
+ {
+ _PBUSettings = new ObservableCollection<SettingsModel>();
+ InitPBUTestSettings();
+ _flowTestSettings = new ObservableCollection<SettingsModel>();
+ InitFlowTestSettings();
+ }
+
+ private void InitPBUTestSettings()
+ {
+ _PBUSettings.Add(new SettingsModel("PBU Pass fail", "4.5 sec", 4.5));
+ }
+
+ private void InitFlowTestSettings()
+ {
+ _flowTestSettings.Add(new SettingsModel("PBU Pass fail", "4.5 sec", 4.5));
+ _flowTestSettings.Add(new SettingsModel("Exclude from analysis", "1800 reads", 1800));
+ _flowTestSettings.Add(new SettingsModel("Avg value", "1400-1850 [mbar]", 1400));
+ _flowTestSettings.Add(new SettingsModel("Max-Min range", "500 reads", 500));
+ _flowTestSettings.Add(new SettingsModel("Max Min intervals", "300 reads", 300));
+ _flowTestSettings.Add(new SettingsModel("Max error", "1.5%", 1.5));
+ _flowTestSettings.Add(new SettingsModel("Take off 'Max-min' values (out of highest results)", "3", 3));
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Utilities/Tango.EventsTypesGenerator/Program.cs b/Software/Visual_Studio/Utilities/Tango.EventsTypesGenerator/Program.cs
index e217076a1..25152d63f 100644
--- a/Software/Visual_Studio/Utilities/Tango.EventsTypesGenerator/Program.cs
+++ b/Software/Visual_Studio/Utilities/Tango.EventsTypesGenerator/Program.cs
@@ -16,7 +16,7 @@ namespace Tango.EventsTypesGenerator
{
class Program
{
- private static string EVENTS_FILE = "Tango alarm events handling chart_Rev17.xlsx";
+ private static string EVENTS_FILE = "Tango alarm events handling chart_Rev21.xlsx";
private class ExcelEventType
{
diff --git a/Software/Visual_Studio/Utilities/Tango.EventsTypesGenerator/Tango.EventsTypesGenerator.csproj b/Software/Visual_Studio/Utilities/Tango.EventsTypesGenerator/Tango.EventsTypesGenerator.csproj
index 6c00c03e8..f26ff09d5 100644
--- a/Software/Visual_Studio/Utilities/Tango.EventsTypesGenerator/Tango.EventsTypesGenerator.csproj
+++ b/Software/Visual_Studio/Utilities/Tango.EventsTypesGenerator/Tango.EventsTypesGenerator.csproj
@@ -72,6 +72,10 @@
<Link>Tango alarm events handling chart_Rev17.xlsx</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
+ <None Include="..\..\Resources\Tango alarm events handling chart_Rev21.xlsx">
+ <Link>Tango alarm events handling chart_Rev21.xlsx</Link>
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </None>
<None Include="App.config" />
<None Include="packages.config" />
<None Include="Events.xlsx">