diff options
| author | Avi Levkovich <avi@twine-s.com> | 2019-11-13 16:47:49 +0200 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2019-11-13 16:47:49 +0200 |
| commit | f0f038c8126eaf5c67b54df726d93a860875df47 (patch) | |
| tree | 457b8681b19face10e3963d9324052d6f43c5891 /Software | |
| parent | 4067820661540c0611f04054d5b82bb140151ba3 (diff) | |
| parent | 1d5da0064e2e82db6cf5544a2ea7836556d730c9 (diff) | |
| download | Tango-f0f038c8126eaf5c67b54df726d93a860875df47.tar.gz Tango-f0f038c8126eaf5c67b54df726d93a860875df47.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software')
4 files changed, 102 insertions, 574 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c index 2c5af6362..f3812cc2c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c @@ -70,61 +70,6 @@ bool SetActiveWastCartridge(); -//bool PowerOffInProcessGetState(); - - -//struct cartridge_params -//{ -// uint32_t serial_number; -// cartridge_status status; /*WasteEmpty, WasteFilling, WasteFail, WasteFull....... */ -// MidTank_t cart_color; -// bool autheticate; -// uint32_t time_out; -//}; - -//struct pump_params -//{ -// bool status; -// uint32_t time; -//}; - - -//struct WHS_sensors_status -//{ -// WHS_CarteidgeCoverSensorStatus cartridge_cover; /*open(1) ,close(0) */ -// WHS_CarteidgPrecenseSensorStatus IFS_Ink_precense_sensor; /*presence(1) ,not_precense(0) */ -// bool IFS_Ink_precense_sensor_flag; /* 1=event 0=no enent */ -// WHS_CarteidgPrecenseSensorStatus waste_cartridge1_precense_sensor; /*presence(1) ,not_precense(0) */ -// bool waste_cartridge1_precense_sensor_flag; /* 1=event 0=no enent */ -// WHS_CarteidgPrecenseSensorStatus waste_cartridge2_precense_sensor; /*presence(1) ,not_precense(0) */ -// bool waste_cartridge2_precense_sensor_flag; /* 1=event 0=no enent */ -// bool waste_tank_filter_sensor; /*presence(1) ,not_precense(0) */ -// WHS_EmptySensorStatus waste_tank_empty_sensor; /*enpty(1) ,not_empty(0) */ -// WHS_FullSensorStatus waste_tank_full_sensor; /*full(1) ,not_full(0) */ -// bool waste_tank_over_flow_sensor; /*over_flow(1) ,not_over_flow(0) */ -//}; - - - -//struct WHS_information -//{ -// WHS_sttMachin sttMachine; -// struct cartridge_params cartridge_1, cartridge_2; -// struct WHS_sensors_status WHS_sensors; -// struct pump_params WHS_pump; -// bool WHS_valve; -// WHS_sensor event; -// cartridge_name active_cartridge; -// uint32_t Cartridge_Ink_device_Id; -// uint32_t Cartridge_Ink_TimeOut_device_Id; -// uint32_t Cartridge_Waste1_device_Id; -// uint32_t Cartridge_Waste2_device_Id; -// uint32_t Cartridge_Cover_device_Id; -// //PBcolor Ink_Led, cartridge_1_Led, cartridge_2_Led; -// double MidTank_capacity; -//}; - -//struct WHS_information WHS_info; RfidTagContent cartridge_info; // function for RFID: @@ -622,14 +567,6 @@ WHS_sensor WasteTankCallBackFunction() return ret; } -/* -bool start_WHS_machin() -{ - AddControlCallback(NULL, WasteTankCBFunction, eTenMillisecond, WasteTankCallBackFunction, 0,0,0 );// eOneMinute - return OK; -} - */ - bool WasteTankCBFunction() { @@ -662,7 +599,7 @@ bool WasteTankCBFunction() REPORT_MSG(WHS_filling," ------------ WHS_empty ----------------- "); ret = CartridgeWasteFilling(OFF); WHS_info.Cartridge_Cover_device_Id = RemoveControlCallback(WHS_info.Cartridge_Cover_device_Id, WasteTankCBFunction ); - WHS_info.Cartridge_Cover_device_Id = AddControlCallback(NULL, WasteTankCBFunction, CartridgeCoverCallBackTime, CartridgeCoverCallBackFunction, 0,0,0 );//eOneSecond + WHS_info.Cartridge_Cover_device_Id = AddControlCallback("Cartridge Cover Door", WasteTankCBFunction, CartridgeCoverCallBackTime, CartridgeCoverCallBackFunction, 0,0,0 );//eOneSecond WrRFIDStatus(WHS_info.active_cartridge, WasteFull);//write RFID status todo } else @@ -688,7 +625,7 @@ bool WasteTankCBFunction() WHS_info.sttMachine = WHS_full; REPORT_MSG(WHS_emptying," ------------ WHS_full ----------------- "); WHS_info.Cartridge_Cover_device_Id = RemoveControlCallback(WHS_info.Cartridge_Cover_device_Id, WasteTankCBFunction ); - WHS_info.Cartridge_Cover_device_Id = AddControlCallback(NULL, WasteTankCBFunction, CartridgeCoverCallBackFastTime , CartridgeCoverCallBackFunction, 0,0,0 );//eTenMillisecond + WHS_info.Cartridge_Cover_device_Id = AddControlCallback("Cartridge Cover Door", WasteTankCBFunction, CartridgeCoverCallBackFastTime , CartridgeCoverCallBackFunction, 0,0,0 );//eTenMillisecond if (RdRFIDStatus (WHS_info.active_cartridge) == WasteEmpty) { ret = WrRFIDStatus(WHS_info.active_cartridge, WasteFilling);//write RFID status todo @@ -756,9 +693,9 @@ bool WasteTankCBFunction() if ( !PowerOffInProcessGetState() ) { - IFS_info.Cartridge_Ink_device_Id = AddControlCallback(NULL, WasteTankCBFunction, CartridgeInkCallBackTime , CartridgeInkCallBackFunction , 0,0,0 ); //eOneSecond - WHS_info.Cartridge_Waste1_device_Id = AddControlCallback(NULL, WasteTankCBFunction, CartridgeWaste1CallBackTime, CartridgeWaste1CallBackFunction, 0,0,0 ); //eOneSecond - WHS_info.Cartridge_Waste2_device_Id = AddControlCallback(NULL, WasteTankCBFunction, CartridgeWaste2CallBackTime, CartridgeWaste2CallBackFunction, 0,0,0 ); //eOneSecond + IFS_info.Cartridge_Ink_device_Id = AddControlCallback("Ink_Cartridge", WasteTankCBFunction, CartridgeInkCallBackTime , CartridgeInkCallBackFunction , 0,0,0 ); //eOneSecond + WHS_info.Cartridge_Waste1_device_Id = AddControlCallback("Waste1 Cartridge", WasteTankCBFunction, CartridgeWaste1CallBackTime, CartridgeWaste1CallBackFunction, 0,0,0 ); //eOneSecond + WHS_info.Cartridge_Waste2_device_Id = AddControlCallback("Waste2 Cartridge", WasteTankCBFunction, CartridgeWaste2CallBackTime, CartridgeWaste2CallBackFunction, 0,0,0 ); //eOneSecond } else { @@ -811,7 +748,7 @@ bool WasteTankCBFunction() //add timeout IFS_TimeOutAlarm(false); IFS_info.Ink.time_out = 1; - IFS_info.Cartridge_Ink_TimeOut_device_Id = AddControlCallback(NULL, WasteTankCBFunction, CartridgeInkTimeOutCallBackTime, CartridgeInkTimeOutCallBackFunction, 0,0,0 ); //eOneSecond + IFS_info.Cartridge_Ink_TimeOut_device_Id = AddControlCallback("Ink Cartridge TimeOut", WasteTankCBFunction, CartridgeInkTimeOutCallBackTime, CartridgeInkTimeOutCallBackFunction, 0,0,0 ); //eOneSecond // //add callback for midtank status is full @@ -1220,11 +1157,11 @@ bool InitCartStatus() if (WHS_info.WHS_sensors.cartridge_cover == WHS_CartridgeCoverOPEN) { REPORT_MSG(parameter," ------------ WHS_CartridgeCoverOPEN : add callback for cart1 and cart 2 ----------------- "); - IFS_info.Cartridge_Ink_device_Id = AddControlCallback(NULL, WasteTankCBFunction, eOneSecond, CartridgeInkCallBackFunction, 0,0,0 ); - WHS_info.Cartridge_Waste1_device_Id = AddControlCallback(NULL, WasteTankCBFunction, eOneSecond, CartridgeWaste1CallBackFunction, 0,0,0 ); - WHS_info.Cartridge_Waste2_device_Id = AddControlCallback(NULL, WasteTankCBFunction, eOneSecond, CartridgeWaste2CallBackFunction, 0,0,0 ); + IFS_info.Cartridge_Ink_device_Id = AddControlCallback("Ink Cartridge CB" , WasteTankCBFunction, eOneSecond, CartridgeInkCallBackFunction , 0,0,0 ); + WHS_info.Cartridge_Waste1_device_Id = AddControlCallback("Waste1 Cartridge CB", WasteTankCBFunction, eOneSecond, CartridgeWaste1CallBackFunction, 0,0,0 ); + WHS_info.Cartridge_Waste2_device_Id = AddControlCallback("Waste2 Cartridge CB", WasteTankCBFunction, eOneSecond, CartridgeWaste2CallBackFunction, 0,0,0 ); } - WHS_info.Cartridge_Cover_device_Id = AddControlCallback(NULL, WasteTankCBFunction, eOneSecond, CartridgeCoverCallBackFunction, 0,0,0 ); + WHS_info.Cartridge_Cover_device_Id = AddControlCallback("Cartridge Cover Door", WasteTankCBFunction, eOneSecond, CartridgeCoverCallBackFunction, 0,0,0 ); return OK; } @@ -1264,138 +1201,32 @@ bool SetActiveWastCartridge() uint8_t parameter = 5; bool ret = notOK; - if (( WHS_info.WHS_sensors.waste_cartridge1_precense_sensor == PRECENSE ) && - (WHS_info.cartridge_1.autheticate == PASSED)) + if (( WHS_info.WHS_sensors.waste_cartridge1_precense_sensor == PRECENSE ) + && (WHS_info.cartridge_1.autheticate == PASSED) + && (WHS_info.cartridge_1.status == WasteEmpty)) { REPORT_MSG(parameter," ------------ WHS : active_cartridge = waste_cartridge 1 ----------------- "); WHS_info.active_cartridge = waste_cartridge1; + AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, false); } - else if (( WHS_info.WHS_sensors.waste_cartridge2_precense_sensor == PRECENSE) && - (WHS_info.cartridge_2.autheticate == PASSED)) + else if (( WHS_info.WHS_sensors.waste_cartridge2_precense_sensor == PRECENSE) + && (WHS_info.cartridge_2.autheticate == PASSED) + && (WHS_info.cartridge_2.status == WasteEmpty)) { REPORT_MSG(parameter," ------------ WHS : active_cartridge = waste_cartridge 2 ----------------- "); WHS_info.active_cartridge = waste_cartridge2; + AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, false); } else { REPORT_MSG(parameter," ------------ WHS : NO active_cartridge ----------------- "); WHS_info.active_cartridge = no_waste_cartridge; + AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, true); } return ret; } -/* -U8 RdWastePrecenseSensor(cartridge_name name) -{ - - // we have 2 waste_cartridge (waste_cartridge1 and waste_cartridge2) - // bool Is_Cartridge_Present(PANEL_BUTTON_OR_CRAT_ID Cartridge); //use CART_2 or CART_3 - - WHS_Read_GPI_Registers(); - switch (name) - { - case waste_cartridge1: - if (WHS_info.WHS_sensors.waste_cartridge1_precense_sensor != Is_Cartridge_Present(CART_2)) - { - WHS_info.WHS_sensors.waste_cartridge1_precense_sensor = !WHS_info.WHS_sensors.waste_cartridge1_precense_sensor; - WHS_info.event = WHS_waste1_presence_sensor; - } - break; - case waste_cartridge2: - if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor != Is_Cartridge_Present(CART_3)) - { - WHS_info.WHS_sensors.waste_cartridge2_precense_sensor = !WHS_info.WHS_sensors.waste_cartridge2_precense_sensor; - WHS_info.event = WHS_waste2_presence_sensor; - } - break; - default : - break; - } - return OK; -} -*/ -/* -U8 cartridge_handeling() -{ - AddControlCallback(NULL, CartridgePrecenceCBFunction, eOneMinute, CartridgePrecenceCallBackFunction, 0,0,0 ); // - return OK; -} -*/ - -//U8 SetCartridgeLED(cartridge_name name,led_status led) -//{ -// bool ret = notOK; -// return ret; -//} - -/* -U8 CartridgePrecenceCBFunction() -{ - if ( WHS_info.WHS_sensors.waste_cartridge1_precense_sensor_flag ) // if we have changes at cartridge1: - { - if (WHS_info.WHS_sensors.waste_cartridge1_precense_sensor) // if new cartridge is presence: - { - if (rd_waste_cartridge_param()== OK) //read parameter from RFID - SetCartridgeLED(waste_cartridge1,led_on); //change led status to ON - } - else // if the cartridge is removed - { - SetCartridgeLED(waste_cartridge1, led_off); //change led status to OFF - } - WHS_info.WHS_sensors.waste_cartridge1_precense_sensor_flag = 0; //remove the flag - - } - else if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor_flag ) - { - if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor) - { - - } - else - { - - } - } - return OK; -}*/ -/* -U8 CartridgePrecenceCallBackFunction() -{ - bool ret = notOK; - return ret; -} -*/ - - - - - - - - -//bool CartridgeCoverCBFunction() -//{ -// bool ret = notOK; -// if (WHS_info.WHS_sensors.cartridge_cover == OPEN) -// { -// //if (WHS_info.WHS_pump == ON) -// //{ -// SetWastePump(CLOSE); //pump OFF -// //} -// // prevent NEW Job -// // Display "Close cartridge cover" -// // pop up message in GUI -// } -// else -// { -// // can do a NEW Job -// // remove message "Close cartridge cover" -// // remove pop up message in GUI -// } -// WHS_info.event = WHS_no_event; -// return ret; -//} /*------------------------------------------------------------------------------------------------*/ @@ -1542,343 +1373,6 @@ U8 WHS_HW_test() } - - - - - - -/*------------------------------------------------------------------------------------------------*/ - -/* -//U8 WasteCartridgeCallBackFunction(); -//U8 WasteCartridgeCBFunction(); - -bool start_WHS_machin(); -U8 CartridgePrecenceCallBackFunction(); -uint32_t EmptyWasteTankFullCBFunction(); -U8 cartridge_handeling(); - -U8 RdWastePrecenseSensor(cartridge_name name); - -U8 rd_waste_cartridge_param(); -U8 set_cartridge_1(U8 cartridge_status); -U8 set_cartridge_2(U8 cartridge_status); -U8 check_sensors_before_start_emptying(); -bool check_RFID_authentication(); - -uint32_t waste_tank_init(void); -uint32_t EmptyWasteTankCBFunction(); - - - -U8 WasteCartridgeCallBackFunction() -{ - bool ret = notOK; - - ret = RdWastePrecenseSensor(waste_cartridge1); - ret = RdWastePrecenseSensor(waste_cartridge2); - return ret; -} - - -U8 Wr_cartridge_RFid(cartridge_name cartridge, cartridge_status status); -WHS_sttMachin UpdateStateMachine(); - -*/ - -// uint32_t updateWasteTankStruct(); -//uint32_t WasteTankFullCallBackFunction(uint32_t IfIndex, uint32_t ReadValue); - -/*--- functipons not in use ----*/ - -/* -U8 check_sensors_before_start_emptying() ???????????????????? -{ - bool ret = notOK; - - if ((WHS_info.WHS_sensors.cartridge_cover == CLOSE) && - (( WHS_info.WHS_sensors.waste_cartridge1_precense_sensor == precense) || - (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor == precense)) && - (WHS_info.WHS_sensors.waste_tank_filter_sensor == 1 )) - { - ret = OK; - } - return ret; -} - - - - -uint32_t updateWasteTankStruct() //----------what is the timing??????----------------- -{ -// bool waste_number =1; - - rd_waste_precense_sensor( ); - RdWasteTankFilterSensor(); - rd_whs_cartridge_cover(); - -// rd_waste_tank_RdWasteTankEmptySensor_sensor(); -// RdWasteTankFullSensor(); -// rd_waste_tank_over_flow_sensor(); - return OK; -} - - - - -uint32_t WasteTankFullCallBackFunction(uint32_t IfIndex, uint32_t ReadValue) -{ - if ( RdWasteTankFullSensor() != WHS_info.WHS_sensors.waste_tank_full_sensor ) - { - WHS_info.event = WHS_full_sensor; - WHS_info.WHS_sensors.waste_tank_full_sensor = !WHS_info.WHS_sensors.waste_tank_full_sensor; - } - return OK; -} - - -uint32_t WasteTankEmptyCallBackFunction(uint32_t IfIndex, uint32_t ReadValue) -{ - if (RdWasteTankEmptySensor() != WHS_info.WHS_sensors.waste_tank_empty_sensor) - { - WHS_info.event = WHS_empty_sensor; - WHS_info.WHS_sensors.waste_tank_empty_sensor = !WHS_info.WHS_sensors.waste_tank_empty_sensor; - } - return OK; -} - -uint32_t WasteTankOverflowCallBackFunction(uint32_t IfIndex, uint32_t ReadValue) -{ - if (rd_waste_tank_over_flow_sensor() != WHS_info.WHS_sensors.waste_tank_over_flow_sensor) - { - WHS_info.event = WHS_overflow_sensor; - WHS_info.WHS_sensors.waste_tank_over_flow_sensor = !(WHS_info.WHS_sensors.waste_tank_over_flow_sensor); - } - return OK; -} - - -U8 CartridgeCoverCallBackFunction() -{ - bool ret = notOK; - return ret; -} - - -U8 CartridgeCoverCBFunction() -{ - bool ret = notOK; - return ret; -} - - - - -uint32_t WHS_machin() -{ - switch( WHS_info.sttMachine ) - { - case WHS_empty: // last OnOffPBstate was OFF - - break; - case WHS_filling : // last OnOffPBstate was COUNTPB - - break; - case WHS_emptying: // last OnOffPBstate was SHORTPB - - break; - case WHS_full: - - break; - case WHS_overflow: - - break; - default: // WHS_sttError - break; - } - return OK; -} - - - - -uint32_t EmptyWasteTankCBFunction() -{ - bool ret = notOK; -//--------try state machine------- - if (WHS_info.event == WHS_no_event) - return OK; - else - { -// WHS_info.sttMachine = UpdateStateMachine(); -// WHS_info.event = WHS_no_event; - switch (WHS_info.event) - { - case WHS_empty_sensor: - if (WHS_info.WHS_sensors.waste_tank_empty_sensor) - { - - } - else - { - ret = CartridgeWasteFilling(OFF); - } - break; - case WHS_full_sensor: - if (WHS_info.WHS_sensors.waste_tank_full_sensor) - { - ret = CartridgeWasteFilling(ON); - // cant start a new Job - } - else - { - // can start a new JOB - WHS_info.sttMachine = WHS_empty; - } - break; - case WHS_overflow_sensor: - if (WHS_info.WHS_sensors.waste_tank_empty_sensor) - { - - // 1.StopMacine - // 2. - - WHS_info.sttMachine = WHS_overflow; - } - else - { - WHS_info.sttMachine = WHS_full; - } - break; - default: //error state - break; - } - WHS_info.event = WHS_no_event;; - } - return ret; -} - - - -uint32_t start_WHS_machin() -{ - switch( WHS_info.sttMachine ) - { - case WHS_empty: // last OnOffPBstate was OFF - AddControlCallback(NULL, EmptyWasteTankCBFunction, eOneMinute, WasteTankEmptyCallBackFunction, 0,0,0 ); // - break; - case WHS_filling : // last OnOffPBstate was COUNTPB - AddControlCallback(NULL, EmptyWasteTankCBFunction, eOneMinute, WasteTankFullCallBackFunction, 0,0,0 ); // - AddControlCallback(NULL, EmptyWasteTankCBFunction, eOneMinute, WasteTankEmptyCallBackFunction, 0,0,0 ); // - break; - case WHS_emptying: // last OnOffPBstate was SHORTPB - AddControlCallback(NULL, EmptyWasteTankCBFunction, eOneMinute, WasteTankEmptyCallBackFunction, 0,0,0 ); // - AddControlCallback(NULL, EmptyWasteTankCBFunction, eOneMinute, WasteTankFullCallBackFunction, 0,0,0 ); // - break; - case WHS_full: - AddControlCallback(NULL, EmptyWasteTankCBFunction, eOneMinute, WasteTankFullCallBackFunction, 0,0,0 ); // - AddControlCallback(NULL, EmptyWasteTankCBFunction, eOneMinute, WasteTankOverflowCallBackFunction, 0,0,0 ); // - break; - case WHS_overflow: - AddControlCallback(NULL, EmptyWasteTankCBFunction, eOneMinute, WasteTankFullCallBackFunction, 0,0,0 ); // - AddControlCallback(NULL, EmptyWasteTankCBFunction, eOneMinute, WasteTankOverflowCallBackFunction, 0,0,0 ); // - break; - default: // WHS_sttError - break; - } - return OK; -} - -*/ - -//U8 WasteCartridgeCBFunction() -//{ -// bool ret = notOK; -// switch (WHS_info.event) -// { -// /*case WHS_waste1_presence_sensor : -// if (WHS_info.WHS_sensors.waste_cartridge1_precense_sensor ) // waste cartridge 1 is inserted . -// { -// SetCartridgeLED(waste_cartridge1, led_on); -// RdCartridgeParam(waste_cartridge1); -// if ( CartridgeAuthentication(waste_cartridge1)) // to define authentication -// { -// //WHS_info.cartridge_1.autheticate = PASSED; //='0' -// //???WHS_info.WHS_valve = waste_cartridge1; // or we should do it only before pumping???? -// //???SetValveDirection(); // or we should do it only before pumping???? -// } -// else -// { -// //WHS_info.cartridge_1.autheticate = FAILED; //='1' -// SetCartridgeLED(waste_cartridge1, led_off); -// } -// } -// else // waste cartridge 1 take out -// { -// WHS_info.cartridge_1.autheticate = FAILED; -// //???if (WHS_info.cartridge_2.autheticate == PASSED) // or we should do it only before pumping???? -// //???{ -// //???WHS_info.WHS_valve = waste_cartridge; -// //???SetValveDirection(); -// //???} -// //???else -// //???{ -// //??? -// //???} -// //??? RdCartridgeParam(waste_cartridge2); -// //???WHS_info.WHS_valve = waste_cartridge1; -// } -// -// break; -// case WHS_waste2_presence_sensor : -// if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor ) // waste cartridge is inserted . -// { -// SetCartridgeLED(waste_cartridge2, led_on); -// RdCartridgeParam(waste_cartridge2); -// if ( CartridgeAuthentication(waste_cartridge2)) // to define authentication -// { -// //WHS_info.cartridge_2.autheticate = PASSED; //='0' -// //???WHS_info.WHS_valve = waste_cartridge2; // or we should do it only before pumping???? -// //???SetValveDirection(); // or we should do it only before pumping???? -// } -// else -// { -// //WHS_info.cartridge_2.autheticate = FAILED; //='1' -// SetCartridgeLED(waste_cartridge2, led_off); -// } -// } -// else // waste cartridge 2 take out -// { -// WHS_info.cartridge_2.autheticate = FAILED; -// -// if (WHS_info.cartridge_2.autheticate == PASSED) // or we should do it only before pumping???? -// { -// WHS_info.WHS_valve = waste_cartridge; -// SetValveDirection(); -// } -// else -// { -// -// } -// RdCartridgeParam(waste_cartridge2); -// WHS_info.WHS_valve = waste_cartridge1; -// -// } -// break;*/ -// default: -// break; -// } -// -// WHS_info.event = WHS_no_event; -// -// return ret; -//} - - -//IDS_Dispenser_Build_Pressure_Callback - - /*------------------------------------------------------------------------------------------------*/ 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 fec02529b..93baf3b9d 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 @@ -1920,50 +1920,60 @@ namespace Tango.MachineStudio.Developer.ViewModels { CanWork = false; - using (_notification.PushTaskItem("Saving job details...")) + try { - await Task.Factory.StartNew(() => + using (_notification.PushTaskItem("Saving job details...")) { - LogManager.Log(String.Format("Saving the active job {0}...", ActiveJob.Name)); - ActiveJob.LastUpdated = DateTime.UtcNow; - ActiveJob.Rml = SelectedRML; - ActiveJob.EstimatedDurationMili = (int)EstimatedDuration.TotalMilliseconds; - _activeJobDbContext.SaveChanges(); - - _machineDbContext.Entry(SelectedMachineJob).Reload(); + await Task.Factory.StartNew(() => + { + LogManager.Log(String.Format("Saving the active job {0}...", ActiveJob.Name)); + ActiveJob.LastUpdated = DateTime.UtcNow; + ActiveJob.Rml = SelectedRML; + ActiveJob.EstimatedDurationMili = (int)EstimatedDuration.TotalMilliseconds; + _activeJobDbContext.SaveChanges(); + _machineDbContext.Entry(SelectedMachineJob).Reload(); - _machineDbContext.Entry(SelectedMachineJob).Collection(x => x.Segments).Load(); - foreach (var segment in SelectedMachineJob.Segments.ToList()) - { - _machineDbContext.Entry(segment).Collection(x => x.BrushStops).Load(); + _machineDbContext.Entry(SelectedMachineJob).Collection(x => x.Segments).Load(); - foreach (var brushStop in segment.BrushStops.ToList()) + foreach (var segment in SelectedMachineJob.Segments.ToList()) { - _machineDbContext.Entry(brushStop).Reload(); - } + _machineDbContext.Entry(segment).Collection(x => x.BrushStops).Load(); - _machineDbContext.Entry(segment).Reload(); - } + foreach (var brushStop in segment.BrushStops.ToList()) + { + _machineDbContext.Entry(brushStop).Reload(); + } - InvokeUI(() => - { - SelectedMachineJob.Segments = SelectedMachineJob.Segments; - }); + _machineDbContext.Entry(segment).Reload(); + } - var settings = SettingsManager.Default.GetOrCreate<DeveloperModuleSettings>(); - settings.DefaultJobRmlGuid = ActiveJob.RmlGuid; - settings.Save(); + InvokeUI(() => + { + SelectedMachineJob.Segments = SelectedMachineJob.Segments; + }); - if (ActiveJob != null) - { - _current_job_string = ActiveJob.ToJobFileWhenLoaded().ToString(); - } - }); - } + var settings = SettingsManager.Default.GetOrCreate<DeveloperModuleSettings>(); + settings.DefaultJobRmlGuid = ActiveJob.RmlGuid; + settings.Save(); - CanWork = true; + if (ActiveJob != null) + { + _current_job_string = ActiveJob.ToJobFileWhenLoaded().ToString(); + } + }); + } + } + catch (Exception ex) + { + LogManager.Log(ex, "Error saving active job."); + _notification.ShowError($"An error occurred while trying to save the current job.\n{ex.FlattenMessage()}"); + } + finally + { + CanWork = true; + } } } @@ -2273,6 +2283,7 @@ namespace Tango.MachineStudio.Developer.ViewModels return; } SelectedSegment.BrushStops.Remove(x); + _activeJobDbContext.BrushStops.Remove(x); }); ArrangeBrushStopsIndices(); diff --git a/Software/Visual_Studio/Tango.Integration/Operation/DefaultGradientGenerationConfiguration.cs b/Software/Visual_Studio/Tango.Integration/Operation/DefaultGradientGenerationConfiguration.cs index 1f8cf6ada..acc0c6723 100644 --- a/Software/Visual_Studio/Tango.Integration/Operation/DefaultGradientGenerationConfiguration.cs +++ b/Software/Visual_Studio/Tango.Integration/Operation/DefaultGradientGenerationConfiguration.cs @@ -101,7 +101,9 @@ namespace Tango.Integration.Operation var refStop = clonedStops.First().Clone(segment); - for (double cm = 0; cm <= segment.Length; cm += (ResolutionCM / 100d)) + decimal segment_length = (decimal)segment.Length; + + for (decimal cm = 0; cm <= segment_length; cm += (ResolutionCM / 100M)) { if (aborted) return stops; @@ -127,7 +129,7 @@ namespace Tango.Integration.Operation { Job = job, Total = job.Segments.Sum(x => x.Length), - Progress = previousSegmentsLength + cm, + Progress = previousSegmentsLength + (double)cm, }); } diff --git a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs index ea1b0a0e3..d6d926800 100644 --- a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs +++ b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs @@ -1418,24 +1418,42 @@ namespace Tango.Integration.Operation { liquidQuantities.Add(pack.PackIndex, 0); } - + int resolution = GradientGenerationConfiguration.ResolutionCM; for (int i = 0; i < Math.Max(job.NumberOfUnits, 1); i++) { for (int segmentIndex = 0; segmentIndex < job.Segments.Count; segmentIndex++) { var segment = job.Segments[segmentIndex]; var segment_length_cm = segment.Length * 100d; - - var stop_count = segment.BrushStops.Count - (segment.BrushStops.Count == 1 ? 0 : 1); - var stop_length_centimeters = segment_length_cm / stop_count; - - for (int stopIndex = 0; stopIndex < stop_count; stopIndex++) + + List<BrushStop> orderedBrushCollection = segment.BrushStops.OrderBy(x => x.OffsetMeters).ToList(); + + int solid_gradient_oeff = orderedBrushCollection.Count == 1 ? 1 : 2; + double prev_offset_cm = 0; + for (int brushIndex = 0; brushIndex < orderedBrushCollection.Count; brushIndex++) { - var stop = segment.BrushStops[stopIndex]; - - foreach (var liquidVolumes in stop.LiquidVolumes) + var brush = orderedBrushCollection[brushIndex]; + double brush_length_centimeters = 0d; + double brush_offset_cm = 0; + if ((brushIndex + 1) < orderedBrushCollection.Count) { - liquidQuantities[liquidVolumes.IdsPack.PackIndex] += liquidVolumes.NanoliterPerCentimeter * stop_length_centimeters; + brush_offset_cm = (brush.OffsetMeters * 100d); + double next_brush_offset_cm = (orderedBrushCollection[brushIndex + 1].OffsetMeters * 100d); + brush_length_centimeters = ((next_brush_offset_cm - brush_offset_cm) + (brush_offset_cm - prev_offset_cm)); + if (brushIndex == 0)// add a resolution step for first brush + brush_length_centimeters += resolution; + } + else//last brush or solid brush + { + brush_length_centimeters = (segment_length_cm - prev_offset_cm); + if (orderedBrushCollection.Count > 1)// add a resolution for last brush , not solid brush + brush_length_centimeters -= resolution; + } + prev_offset_cm = brush_offset_cm; + + foreach (var liquidVolumes in brush.LiquidVolumes) + { + liquidQuantities[liquidVolumes.IdsPack.PackIndex] += liquidVolumes.NanoliterPerCentimeter * (brush_length_centimeters / solid_gradient_oeff); } } } @@ -1749,10 +1767,10 @@ namespace Tango.Integration.Operation job.NumberOfUnits = 1; } - //if (EnableJobLiquidQuantityValidation) - //{ - // ValidateJobLiquidQuantity(job, processParameters, job.Machine.Configuration); - //} + if (EnableJobLiquidQuantityValidation) + { + ValidateJobLiquidQuantity(job, processParameters, job.Machine.Configuration); + } var originalJob = job; var clonedJob = job.Clone(); @@ -1902,7 +1920,10 @@ namespace Tango.Integration.Operation { try { - ValidateJobLiquidQuantity(ticket, processParameters, job.Machine.Configuration); + //ValidateJobLiquidQuantity(originalJob, processParameters, job.Machine.Configuration); + var ticketForValidation = ticket.Clone(); + ticketForValidation.NumberOfUnits = (uint)originalJob.NumberOfUnits; + ValidateJobLiquidQuantity(ticketForValidation, processParameters, job.Machine.Configuration); } catch (Exception ex) { |
