aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2019-11-13 16:47:49 +0200
committerAvi Levkovich <avi@twine-s.com>2019-11-13 16:47:49 +0200
commitf0f038c8126eaf5c67b54df726d93a860875df47 (patch)
tree457b8681b19face10e3963d9324052d6f43c5891
parent4067820661540c0611f04054d5b82bb140151ba3 (diff)
parent1d5da0064e2e82db6cf5544a2ea7836556d730c9 (diff)
downloadTango-f0f038c8126eaf5c67b54df726d93a860875df47.tar.gz
Tango-f0f038c8126eaf5c67b54df726d93a860875df47.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c544
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs75
-rw-r--r--Software/Visual_Studio/Tango.Integration/Operation/DefaultGradientGenerationConfiguration.cs6
-rw-r--r--Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs51
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)
{