aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-07-23 18:54:20 +0300
committerShlomo Hecht <shlomo@twine-s.com>2020-07-23 18:54:20 +0300
commitcf49f9b7af8cb4ad0376157d27ef208eca6d1304 (patch)
treeb99059abdc696a31cb56ef227d29e4482e23cf8d
parent93bf6344f8cc37a662c19db81c4f341e5b9ed0f0 (diff)
downloadTango-cf49f9b7af8cb4ad0376157d27ef208eca6d1304.tar.gz
Tango-cf49f9b7af8cb4ad0376157d27ef208eca6d1304.zip
some small changes, mostly in drier loading
-rw-r--r--Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.c402
-rw-r--r--Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.h9
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c3
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c5
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/control.c3
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c6
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c11
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c16
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c11
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c49
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c21
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c8
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c3
-rw-r--r--Software/Stubs Collection/Procedures/Dancers calibration.pproj1
-rw-r--r--Software/Stubs Collection/Procedures/EmbeddedParametersBuild.pproj1
-rw-r--r--Software/Stubs Collection/Procedures/WHS Loop Disable.pproj1
21 files changed, 332 insertions, 229 deletions
diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.c b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.c
index 153e5bd8d..7f667ae6d 100644
--- a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.c
+++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.c
@@ -7,7 +7,7 @@
#endif
#include "EventType.pb-c.h"
-static const ProtobufCEnumValue event_type__enum_values_by_number[358] =
+static const ProtobufCEnumValue event_type__enum_values_by_number[365] =
{
{ "", "", 0 },
{ "", "", 1000 },
@@ -45,6 +45,7 @@ static const ProtobufCEnumValue event_type__enum_values_by_number[358] =
{ "", "", 2018 },
{ "", "", 2019 },
{ "", "", 2020 },
+ { "", "", 2021 },
{ "", "", 3000 },
{ "", "", 3001 },
{ "", "", 3002 },
@@ -212,6 +213,12 @@ static const ProtobufCEnumValue event_type__enum_values_by_number[358] =
{ "", "", 5090 },
{ "", "", 5091 },
{ "", "", 5092 },
+ { "", "", 5093 },
+ { "", "", 5094 },
+ { "", "", 5095 },
+ { "", "", 5096 },
+ { "", "", 5097 },
+ { "", "", 5098 },
{ "", "", 6000 },
{ "", "", 6001 },
{ "", "", 6002 },
@@ -369,177 +376,179 @@ static const ProtobufCEnumValue event_type__enum_values_by_number[358] =
{ "", "", 10005 },
};
static const ProtobufCIntRange event_type__value_ranges[] = {
-{0, 0},{1000, 1},{2000, 15},{3000, 36},{4000, 88},{5000, 110},{6000, 203},{7000, 209},{8000, 297},{9000, 329},{10000, 352},{0, 358}
+{0, 0},{1000, 1},{2000, 15},{3000, 37},{4000, 89},{5000, 111},{6000, 210},{7000, 216},{8000, 304},{9000, 336},{10000, 359},{0, 365}
};
-static const ProtobufCEnumValueIndex event_type__enum_values_by_name[358] =
+static const ProtobufCEnumValueIndex event_type__enum_values_by_name[365] =
{
- { "", 330 },
- { "", 329 },
- { "", 355 },
+ { "", 337 },
+ { "", 336 },
+ { "", 362 },
{ "", 4 },
{ "", 5 },
{ "", 6 },
{ "", 7 },
+ { "", 22 },
{ "", 21 },
- { "", 335 },
- { "", 346 },
- { "", 340 },
+ { "", 342 },
+ { "", 353 },
{ "", 347 },
- { "", 341 },
+ { "", 354 },
{ "", 348 },
- { "", 342 },
+ { "", 355 },
{ "", 349 },
- { "", 343 },
+ { "", 356 },
{ "", 350 },
- { "", 351 },
- { "", 225 },
+ { "", 357 },
+ { "", 358 },
+ { "", 232 },
+ { "", 296 },
+ { "", 288 },
+ { "", 248 },
+ { "", 256 },
+ { "", 264 },
+ { "", 272 },
+ { "", 216 },
+ { "", 240 },
+ { "", 224 },
+ { "", 280 },
+ { "", 233 },
+ { "", 297 },
{ "", 289 },
- { "", 281 },
- { "", 241 },
{ "", 249 },
{ "", 257 },
{ "", 265 },
- { "", 209 },
- { "", 233 },
- { "", 217 },
{ "", 273 },
- { "", 226 },
+ { "", 217 },
+ { "", 241 },
+ { "", 225 },
+ { "", 281 },
+ { "", 234 },
+ { "", 298 },
{ "", 290 },
- { "", 282 },
- { "", 242 },
{ "", 250 },
{ "", 258 },
{ "", 266 },
- { "", 210 },
- { "", 234 },
- { "", 218 },
{ "", 274 },
- { "", 227 },
+ { "", 218 },
+ { "", 242 },
+ { "", 226 },
+ { "", 282 },
+ { "", 235 },
+ { "", 299 },
{ "", 291 },
- { "", 283 },
- { "", 243 },
{ "", 251 },
{ "", 259 },
{ "", 267 },
- { "", 211 },
- { "", 235 },
- { "", 219 },
{ "", 275 },
- { "", 228 },
+ { "", 219 },
+ { "", 243 },
+ { "", 227 },
+ { "", 283 },
+ { "", 236 },
+ { "", 300 },
{ "", 292 },
- { "", 284 },
- { "", 244 },
{ "", 252 },
{ "", 260 },
{ "", 268 },
- { "", 212 },
- { "", 236 },
- { "", 220 },
{ "", 276 },
- { "", 229 },
+ { "", 220 },
+ { "", 244 },
+ { "", 228 },
+ { "", 284 },
+ { "", 237 },
+ { "", 301 },
{ "", 293 },
- { "", 285 },
- { "", 245 },
{ "", 253 },
{ "", 261 },
{ "", 269 },
- { "", 213 },
- { "", 237 },
- { "", 221 },
{ "", 277 },
- { "", 230 },
+ { "", 221 },
+ { "", 245 },
+ { "", 229 },
+ { "", 285 },
+ { "", 238 },
+ { "", 302 },
{ "", 294 },
- { "", 286 },
- { "", 246 },
{ "", 254 },
{ "", 262 },
{ "", 270 },
- { "", 214 },
- { "", 238 },
- { "", 222 },
{ "", 278 },
- { "", 231 },
+ { "", 222 },
+ { "", 246 },
+ { "", 230 },
+ { "", 286 },
+ { "", 239 },
+ { "", 303 },
{ "", 295 },
- { "", 287 },
- { "", 247 },
{ "", 255 },
{ "", 263 },
{ "", 271 },
- { "", 215 },
- { "", 239 },
- { "", 223 },
{ "", 279 },
- { "", 232 },
- { "", 296 },
- { "", 288 },
- { "", 248 },
- { "", 256 },
- { "", 264 },
- { "", 272 },
- { "", 216 },
- { "", 240 },
- { "", 224 },
- { "", 280 },
- { "", 92 },
- { "", 103 },
+ { "", 223 },
+ { "", 247 },
+ { "", 231 },
+ { "", 287 },
+ { "", 93 },
{ "", 104 },
- { "", 101 },
- { "", 99 },
+ { "", 105 },
{ "", 102 },
{ "", 100 },
- { "", 105 },
+ { "", 103 },
+ { "", 101 },
{ "", 106 },
{ "", 107 },
{ "", 108 },
- { "", 88 },
+ { "", 109 },
{ "", 89 },
{ "", 90 },
{ "", 91 },
- { "", 98 },
- { "", 93 },
- { "", 95 },
- { "", 96 },
+ { "", 92 },
+ { "", 99 },
{ "", 94 },
- { "", 109 },
+ { "", 96 },
{ "", 97 },
- { "", 193 },
- { "", 191 },
- { "", 197 },
- { "", 195 },
- { "", 185 },
- { "", 187 },
- { "", 189 },
+ { "", 95 },
+ { "", 110 },
+ { "", 98 },
+ { "", 208 },
{ "", 194 },
{ "", 192 },
{ "", 198 },
{ "", 196 },
+ { "", 204 },
+ { "", 206 },
{ "", 186 },
{ "", 188 },
{ "", 190 },
- { "", 149 },
+ { "", 195 },
+ { "", 193 },
+ { "", 199 },
+ { "", 197 },
+ { "", 205 },
+ { "", 207 },
+ { "", 187 },
+ { "", 189 },
+ { "", 191 },
{ "", 150 },
{ "", 151 },
{ "", 152 },
- { "", 145 },
+ { "", 153 },
{ "", 146 },
{ "", 147 },
{ "", 148 },
- { "", 140 },
+ { "", 149 },
{ "", 141 },
{ "", 142 },
{ "", 143 },
{ "", 144 },
- { "", 139 },
+ { "", 145 },
+ { "", 140 },
+ { "", 203 },
+ { "", 201 },
{ "", 202 },
{ "", 200 },
- { "", 201 },
- { "", 199 },
- { "", 138 },
- { "", 182 },
- { "", 175 },
- { "", 156 },
- { "", 162 },
- { "", 168 },
+ { "", 139 },
+ { "", 209 },
{ "", 183 },
{ "", 176 },
{ "", 157 },
@@ -550,11 +559,11 @@ static const ProtobufCEnumValueIndex event_type__enum_values_by_name[358] =
{ "", 158 },
{ "", 164 },
{ "", 170 },
- { "", 133 },
- { "", 128 },
- { "", 110 },
- { "", 116 },
- { "", 122 },
+ { "", 185 },
+ { "", 178 },
+ { "", 159 },
+ { "", 165 },
+ { "", 171 },
{ "", 134 },
{ "", 129 },
{ "", 111 },
@@ -575,16 +584,16 @@ static const ProtobufCEnumValueIndex event_type__enum_values_by_name[358] =
{ "", 114 },
{ "", 120 },
{ "", 126 },
- { "", 178 },
- { "", 171 },
+ { "", 138 },
+ { "", 133 },
{ "", 115 },
{ "", 121 },
{ "", 127 },
{ "", 179 },
{ "", 172 },
- { "", 153 },
- { "", 159 },
- { "", 165 },
+ { "", 116 },
+ { "", 122 },
+ { "", 128 },
{ "", 180 },
{ "", 173 },
{ "", 154 },
@@ -595,41 +604,46 @@ static const ProtobufCEnumValueIndex event_type__enum_values_by_name[358] =
{ "", 155 },
{ "", 161 },
{ "", 167 },
+ { "", 182 },
+ { "", 175 },
+ { "", 156 },
+ { "", 162 },
+ { "", 168 },
{ "", 26 },
{ "", 27 },
{ "", 33 },
{ "", 16 },
- { "", 74 },
- { "", 77 },
- { "", 80 },
- { "", 83 },
- { "", 39 },
- { "", 46 },
- { "", 53 },
- { "", 60 },
+ { "", 75 },
+ { "", 78 },
+ { "", 81 },
+ { "", 84 },
+ { "", 40 },
+ { "", 47 },
+ { "", 54 },
+ { "", 61 },
{ "", 34 },
{ "", 17 },
{ "", 18 },
{ "", 19 },
{ "", 20 },
- { "", 352 },
- { "", 353 },
- { "", 336 },
+ { "", 359 },
+ { "", 360 },
+ { "", 343 },
{ "", 12 },
{ "", 14 },
{ "", 13 },
{ "", 11 },
{ "", 10 },
- { "", 42 },
- { "", 49 },
- { "", 56 },
- { "", 63 },
- { "", 45 },
- { "", 52 },
- { "", 59 },
- { "", 66 },
- { "", 68 },
+ { "", 43 },
+ { "", 50 },
+ { "", 57 },
+ { "", 64 },
+ { "", 46 },
+ { "", 53 },
+ { "", 60 },
{ "", 67 },
+ { "", 69 },
+ { "", 68 },
{ "", 24 },
{ "", 25 },
{ "", 23 },
@@ -637,100 +651,100 @@ static const ProtobufCEnumValueIndex event_type__enum_values_by_name[358] =
{ "", 29 },
{ "", 30 },
{ "", 28 },
- { "", 86 },
+ { "", 87 },
+ { "", 312 },
+ { "", 328 },
+ { "", 304 },
+ { "", 320 },
+ { "", 313 },
+ { "", 329 },
{ "", 305 },
{ "", 321 },
- { "", 297 },
- { "", 313 },
+ { "", 314 },
+ { "", 330 },
{ "", 306 },
{ "", 322 },
- { "", 298 },
- { "", 314 },
+ { "", 315 },
+ { "", 331 },
{ "", 307 },
{ "", 323 },
- { "", 299 },
- { "", 315 },
+ { "", 316 },
+ { "", 332 },
{ "", 308 },
{ "", 324 },
- { "", 300 },
- { "", 316 },
+ { "", 317 },
+ { "", 333 },
{ "", 309 },
{ "", 325 },
- { "", 301 },
- { "", 317 },
+ { "", 318 },
+ { "", 334 },
{ "", 310 },
{ "", 326 },
- { "", 302 },
- { "", 318 },
+ { "", 319 },
+ { "", 335 },
{ "", 311 },
{ "", 327 },
- { "", 303 },
- { "", 319 },
- { "", 312 },
- { "", 328 },
- { "", 304 },
- { "", 320 },
- { "", 208 },
- { "", 207 },
- { "", 203 },
- { "", 206 },
- { "", 204 },
- { "", 205 },
- { "", 332 },
- { "", 354 },
+ { "", 215 },
+ { "", 214 },
+ { "", 210 },
+ { "", 213 },
+ { "", 211 },
+ { "", 212 },
+ { "", 339 },
+ { "", 361 },
{ "", 0 },
{ "", 15 },
- { "", 344 },
- { "", 338 },
+ { "", 351 },
{ "", 345 },
- { "", 339 },
- { "", 73 },
- { "", 76 },
- { "", 79 },
- { "", 82 },
- { "", 41 },
- { "", 48 },
- { "", 55 },
- { "", 62 },
- { "", 22 },
+ { "", 352 },
+ { "", 346 },
+ { "", 74 },
+ { "", 77 },
+ { "", 80 },
+ { "", 83 },
+ { "", 42 },
+ { "", 49 },
+ { "", 56 },
+ { "", 63 },
{ "", 8 },
{ "", 9 },
{ "", 3 },
{ "", 1 },
{ "", 2 },
- { "", 40 },
- { "", 47 },
- { "", 54 },
- { "", 61 },
- { "", 70 },
- { "", 69 },
+ { "", 41 },
+ { "", 48 },
+ { "", 55 },
+ { "", 62 },
{ "", 71 },
- { "", 44 },
- { "", 51 },
- { "", 58 },
- { "", 65 },
+ { "", 70 },
+ { "", 72 },
+ { "", 45 },
+ { "", 52 },
+ { "", 59 },
+ { "", 66 },
{ "", 36 },
- { "", 87 },
{ "", 37 },
- { "", 84 },
+ { "", 88 },
+ { "", 38 },
{ "", 85 },
+ { "", 86 },
{ "", 35 },
{ "", 31 },
- { "", 337 },
- { "", 334 },
- { "", 356 },
- { "", 357 },
- { "", 331 },
- { "", 333 },
- { "", 38 },
- { "", 72 },
- { "", 75 },
- { "", 78 },
- { "", 81 },
- { "", 43 },
- { "", 50 },
- { "", 57 },
- { "", 64 },
+ { "", 344 },
+ { "", 341 },
+ { "", 363 },
+ { "", 364 },
+ { "", 338 },
+ { "", 340 },
+ { "", 39 },
+ { "", 73 },
+ { "", 76 },
+ { "", 79 },
+ { "", 82 },
+ { "", 44 },
+ { "", 51 },
+ { "", 58 },
+ { "", 65 },
};
const ProtobufCEnumDescriptor event_type__descriptor =
{
@@ -739,9 +753,9 @@ const ProtobufCEnumDescriptor event_type__descriptor =
"",
"",
"",
- 358,
+ 365,
event_type__enum_values_by_number,
- 358,
+ 365,
event_type__enum_values_by_name,
11,
event_type__value_ranges,
diff --git a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.h b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.h
index fe8060fb7..cfb700260 100644
--- a/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.h
+++ b/Software/Embedded_SW/Embedded/Communication/PMR/Diagnostics/EventType.pb-c.h
@@ -42,7 +42,7 @@ typedef enum _EventType {
EVENT_TYPE__FRONT_COVER_3_OPEN = 2004,
EVENT_TYPE__FRONT_COVER_4_OPEN = 2005,
EVENT_TYPE__CARTRIDGES_COVER_OPEN = 2006,
- EVENT_TYPE__REAR_COVER_OPEN = 2007,
+ EVENT_TYPE__ARCH_COVER_OPEN = 2007,
EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE = 2008,
EVENT_TYPE__MACHINE_FANS_RPM_TOO_LOW = 2009,
EVENT_TYPE__MACHINE_FANS_STOPPED = 2010,
@@ -56,6 +56,7 @@ typedef enum _EventType {
EVENT_TYPE__ELECTRICAL_CABINET_OVERTEMPERATURE = 2018,
EVENT_TYPE__FPGA_WATCHDOG_ACTIVATED = 2019,
EVENT_TYPE__UNINTENDED_RESET = 2020,
+ EVENT_TYPE__TEMPERATURE_MEASUREMENT_ERROR = 2021,
EVENT_TYPE__THREAD_BREAK = 3000,
EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER = 3001,
EVENT_TYPE__WINDER_CONE_DOES_NOT_EXIST = 3002,
@@ -223,6 +224,12 @@ typedef enum _EventType {
EVENT_TYPE__DYEING_HEAD_LEFT_ACTUATOR_UP_TIMEOUT = 5090,
EVENT_TYPE__DYEING_HEAD_RIGHT_ACTUATOR_DOWN_TIMEOUT = 5091,
EVENT_TYPE__DYEING_HEAD_LEFT_ACTUATOR_DOWN_TIMEOUT = 5092,
+ EVENT_TYPE__DYEING_HEAD_BLOWER_1_FLOW_TOO_HIGH = 5093,
+ EVENT_TYPE__DYEING_HEAD_BLOWER_2_FLOW_TOO_HIGH = 5094,
+ EVENT_TYPE__DYEING_HEAD_BLOWER_1_FLOW_TOO_LOW = 5095,
+ EVENT_TYPE__DYEING_HEAD_BLOWER_2_FLOW_TOO_LOW = 5096,
+ EVENT_TYPE__DYEING_HEAD_ARC_LID_IS_OPEN = 5097,
+ EVENT_TYPE__DYEING_HEAD_TUNNEL_LID_IS_OPEN = 5098,
EVENT_TYPE__MIXER_OVERTEMPERATURE = 6000,
EVENT_TYPE__MIXER_UNDERTEMPERATURE_A = 6001,
EVENT_TYPE__MIXER_UNDERTEMPERATURE_B = 6002,
diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c
index 24b0fce27..6069c78ff 100644
--- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c
+++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c
@@ -1157,7 +1157,7 @@ bool Safety_Incident_Report()//TODO move to GPIO folder
{
bool IsSafetyIncidentOccurred = No_Safety_Event;
- if(ROM_GPIOPinRead(GPIO_PORTR_BASE, GPIO_PIN_2)) //EPB_S1 (GPI_PS1_DC_OK)
+ if(ROM_GPIOPinRead(GPIO_PORTR_BASE, GPIO_PIN_2)==0) //EPB_S1 (GPI_PS1_DC_OK)
IsSafetyIncidentOccurred = Safety_Event_Occurred;
return IsSafetyIncidentOccurred;
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c
index 9ae12d0b4..d9f5385f6 100644
--- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c
+++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.c
@@ -272,7 +272,7 @@ uint32_t Get_EEPROM_DATA_From_Dispenser(int Dispenser_ID,StubDispenserEEpromData
if (dispensereeprom->dispensers_n)
memcpy(dispensereeprom->dispensers_n,Dispenser_struct[Dispenser_ID].Read_Disp_EEPROM.bytes.Dispenser_SN,sizeof(Dispenser_struct[Dispenser_ID].Read_Disp_EEPROM.bytes.Dispenser_SN));
dispensereeprom->has_minimalpressure = true;
- dispensereeprom->minimalpressure = Dispenser_struct[Dispenser_ID].Read_Disp_EEPROM.bytes.Maximal_Pressure;
+ dispensereeprom->minimalpressure = Dispenser_struct[Dispenser_ID].Read_Disp_EEPROM.bytes.Minimal_Pressure;
dispensereeprom->has_maximalpressure = true;
dispensereeprom->maximalpressure = Dispenser_struct[Dispenser_ID].Read_Disp_EEPROM.bytes.Maximal_Pressure;
dispensereeprom->has_minimalmv = true;
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 32d82f8af..ad34e4224 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
@@ -651,6 +651,9 @@ uint32_t WHS_Pid_Testing_Func(double setParam,double measuredParam)
//WHS_ControlData.m_params.dt = 2;
close_loop_time = WHS_ControlData.m_params.dt;
SendLimitedBlowerControl(calculated_speed);
+ if (calculated_speed < MIN_ALLOWED_BLOWER_VOLTAGE)
+ WHS_ControlData.m_integral = 0;
+
return OK;
}
diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h
index aa5ffbb12..fdfb99561 100644
--- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h
+++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h
@@ -350,7 +350,7 @@ uint32_t MotorMovetoBreakSensor (TimerMotors_t _motorId,bool direction, uint32_t
uint32_t MotorMovetoDancerPosition (TimerMotors_t _motorId,bool direction, uint32_t Freq,uint32_t DancerId,bool dancervaluedirection, callback_fptr callback,uint32_t timeout);
uint32_t MotorAbortMovetoLimitSwitch (TimerMotors_t _motorId);
uint32_t MotorMoveToStopper (TimerMotors_t _motorId,bool direction, uint32_t Speed, callback_fptr callback,uint32_t backlash,uint32_t timeout);
-uint32_t MotorMovetoEncoderPosition (TimerMotors_t MotorId, callback_fptr callback,uint32_t timeout);
+uint32_t MotorMovetoEncoderPosition (TimerMotors_t MotorId, callback_fptr callback,uint32_t timeout, bool direction);
uint32_t MotorStopAction (TimerMotors_t MotorId); //Stop the controlled action of a motor
diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
index 12c9193e3..e505ac017 100644
--- a/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
+++ b/Software/Embedded_SW/Embedded/Drivers/Motors/MotorActions.c
@@ -283,7 +283,7 @@ uint32_t MotorVerifiedCallBackFunction(uint32_t IfIndex, uint32_t ArmPosition) /
if (MotorCallback[MotorId])
MotorCallback[MotorId](MotorId,ArmPosition);
MotorSetDirection(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize);
- MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,NULL,1000);
+ MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,NULL,1000,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize);
DrierZeroPosition = Read_Dryer_ENC_Position(); //trigger the next call
}
@@ -383,7 +383,7 @@ uint32_t MotorMoveToDrierPositionCallBackFunction(uint32_t IfIndex, uint32_t Rea
}
return OK;
}
-uint32_t MotorMovetoEncoderPosition (TimerMotors_t MotorId, callback_fptr callback,uint32_t timeout)
+uint32_t MotorMovetoEncoderPosition (TimerMotors_t MotorId, callback_fptr callback,uint32_t timeout, bool direction)
{
//assert (callback);
uint32_t currentposition = 0;
@@ -412,6 +412,7 @@ uint32_t MotorMovetoEncoderPosition (TimerMotors_t MotorId, callback_fptr callb
//Report("MotorMovetoEncoderPosition direction",__FILE__,__LINE__,direction,RpWarning,15,0);
//MotorSetDirection( MotorId, direction);
+ MotorSetDirection(MotorId,direction);
MotorSetSpeed (MotorId, 30);
MotorControlId[MotorId] = AddControlCallback(NULL, MotorMoveToDrierPositionCallBackFunction, 2,Control_Read_Dryer_Position,(IfTypeMotors*0x100+MotorId), MotorId, 0 );
MotorControlCallback[MotorId] = MotorMoveToDrierPositionCallBackFunction;
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c
index 26fba0194..14275533e 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/control.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c
@@ -597,6 +597,9 @@ uint32_t ControlLowLoop(uint32_t tick)
continue;
if (ControlArray[ControlLowDevice_i].ControlTiming == eOneMillisecond)
continue;
+ if (ControlArray[ControlLowDevice_i].StartTick == tick)
+ continue;
+
if (((tick - ControlArray[ControlLowDevice_i].StartTick)%ControlArray[ControlLowDevice_i].ControlTiming)<=skipped_ticks) // run the control on exact intervals
{
ControlBacklog[backlogindex]=ControlLowDevice_i;
diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c
index 4d3344ce7..7bda97734 100644
--- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c
+++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c
@@ -24,6 +24,7 @@
#include <PMR/Diagnostics/SetBlowerStateResponse.pb-c.h>
#include <PMR/Hardware/HardwareBlowerType.pb-c.h>
+#include <Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.h>
#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"
#include "drivers/I2C_Communication/DAC/blower.h"
#include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h"
@@ -214,6 +215,11 @@ uint32_t SetDigitalOutRequestRequestFunc(MessageContainer* requestContainer)
Trigger_SetWHSValveWatseCartridge(request->value);
break;
case INTERFACE_IOS__GPO_WHS_WTANKPUMP2:
+ if ((IFS_Availability[1] == IFS_RECOGNIZED)&&(IFS_Availability[2] == IFS_RECOGNIZED)) //ifs installed -check cartridges
+ {
+ if (NoCartAvailable())
+ return ERROR;
+ }
SetWastePump( request->value);
break;
case INTERFACE_IOS__GPO_SPARE_SSR12_CTRL:
diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c
index a439a8715..93bf916b2 100644
--- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c
+++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c
@@ -480,18 +480,20 @@ uint32_t Diagnostics_Dryer_UnLoading_Callback(uint32_t MotorId, uint32_t ReadVal
uint32_t temp = Read_Dryer_ENC_Position();
Report("Diagnostics_Dryer_UnLoading_Callback",__FILE__,ReadValue,temp,RpMessage,D_DrierPrevLocation,0);
//Report("Diagnostics_Dryer_UnLoading_Callback details",__FILE__,(int)(TotalLoadedLen),D_numberOfCycles,RpMessage,CallbackCounter,0);
- if (ReadValue == NOTBUSY) // OK - take another round
+ if ((abs (temp -D_DrierPrevLocation)>1000 )&&(ReadValue == NOTBUSY)) // OK - take another round
+// if (ReadValue == NOTBUSY) // OK - take another round
{
D_DrierPrevLocation = temp;
Report("Diagnostics_Dryer_UnLoading cycles",__FILE__,D_numberOfCycles,LoadArmRounds,RpMessage,0,0);
if (D_numberOfCycles<LoadArmRounds)
{
+ MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,LoadArmRounds-D_numberOfCycles);
MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize,
D_numberOfSteps, Diagnostics_Dryer_UnLoading_Callback, 10000);
}
else //done enough cycles, go to the center point
{
- MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Diagnostics_Set_Load_Arm_To_Stopper_Callback,15000);
+ MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Diagnostics_Set_Load_Arm_To_Stopper_Callback,15000,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize);
MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,LoadArmRounds-D_numberOfCycles);
Report("Store Number of cycles in drier",__FILE__,__LINE__,D_numberOfCycles,RpMessage,LoadArmRounds,0);
}
@@ -556,6 +558,7 @@ uint32_t Diagnostics_Dryer_Loading_Callback(uint32_t MotorId, uint32_t ReadValue
Report("Diagnostics_Dryer_Loading_Callback",__FILE__,(int)D_numberOfCycles,(int)D_DrierPrevLocation,RpMessage,ReadValue,0);
+ MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,D_numberOfCycles);
if (ReadValue == NOTBUSY)
{
//Report("Diagnostics_Dryer_Loading_Callback",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0);
@@ -567,15 +570,13 @@ uint32_t Diagnostics_Dryer_Loading_Callback(uint32_t MotorId, uint32_t ReadValue
}
else
{
- MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Diagnostics_Dryer_MovetoEncoderPosition_Callback,15000);
- MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,D_numberOfCycles);
+ MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Diagnostics_Dryer_MovetoEncoderPosition_Callback,15000,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize);
Report("Store Number of cycles in drier",__FILE__,__LINE__,D_numberOfCycles,RpMessage,LoadArmRounds,0);
}
}
else
{
Report("Store Number of cycles in drier - halted",__FILE__,__LINE__,D_numberOfCycles,RpMessage,LoadArmRounds,0);
- MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,D_numberOfCycles);
MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, 200);
}
return OK;
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
index 73da7924b..a9899afd7 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
@@ -684,8 +684,7 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue)
}
DeActivateHeater(HeaterId);
HeaterCmd[HeaterId].targettemperatue = 0;
-#warning PT100 error is misidentified as overheat in alarms
- AlarmHandlingSetAlarm(EVENT_TYPE__POWER_UP_BIT_FAILURE, true);
+ AlarmHandlingSetAlarm(EVENT_TYPE__TEMPERATURE_MEASUREMENT_ERROR, true);
return;
}
@@ -767,7 +766,7 @@ int PrepareDCHeater(int HeaterId, uint32_t Frequency, uint32_t SetTemperatue)
ControlIdtoHeaterId [HeaterId] = 0xFF;
}
DeActivateHeater(HeaterId);
- AlarmHandlingSetAlarm(EVENT_TYPE__POWER_UP_BIT_FAILURE, true);
+ AlarmHandlingSetAlarm(EVENT_TYPE__TEMPERATURE_MEASUREMENT_ERROR, true);
HeaterCmd[HeaterId].targettemperatue = 0;
return ERROR;
@@ -1154,6 +1153,17 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
DeActivateHeater(HEATER_TYPE__DryerMainHeater);
HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerMainHeater,0);
HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerSecondaryHeater,0);
+ if (HeaterSpikeRead[index] == 0)
+ {
+ HeaterSpikeRead[index] = readValue;
+ }
+ else
+ {
+ ReportWithPackageFilter(HeatersFilter,"restoring read Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,HeaterSpikeRead[index], index);
+ HeaterPreviousRead[index] = HeaterSpikeRead[index];
+ HeaterSpikeRead[index] = 0;
+ }
+
}
return ERROR;
}
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
index 8682d648a..5f1dfe138 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
@@ -593,7 +593,7 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue)
Report("pressureReady = true or timeout;",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0);
}
}
- else if ((endOfPrepareWCF == false)&&(NumOfActiveDispensers))
+ else if (endOfPrepareWCF == false)
{
if ((DispenserBuildTimeCounter == PRESSURE_READ_TIME_GAP)&&(FirstBrushStop))
{
@@ -686,13 +686,6 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue)
}
}
- else if (NumOfActiveDispensers == 0)
- {
- endOfPrepareWCF = true;
- FreeBrushStopFileData(FirstBrushStop);
- FirstBrushStop =NULL;
- Report("endOfPrepareWCF = true;",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0);
- }
//start new stage
if (endOfPrepareWCF == true)
{
@@ -1612,7 +1605,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId)
//handle ending of presegment
if (DispenserPreSegmentControlId != 0xFF)
{
- Report("IDS presegment not yet ended!!",__FILE__,__LINE__,(int)InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0);
+ Report("IDS presegment not yet ended!!",__FILE__,DispenserPreSegmentControlId,(int)InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0);
//IDS_Cleaning_Stop_Cleaning_Solution (NULL);
RemoveControlCallback(DispenserPreSegmentControlId, IDSPreSegmentStateCallbackRunner );
DispenserPreSegmentControlId = 0xFF;
diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
index 6b6b85f2f..e14053ae3 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c
@@ -1125,7 +1125,9 @@ void Stub_ProgressRequest(MessageContainer* requestContainer)
uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer));
size_t container_size = message_container__pack(&responseContainer, container_buffer);
free(responseContainer.data.data);
- progress_request__free_unpacked(request,NULL);
+ if (request)
+ progress_request__free_unpacked(request,NULL);
+ //writeLine("Progress Completed!");
SendChars((char*)container_buffer, container_size);
//free(container_buffer);
if (RestartNeeded == true)
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
index f5bc45d85..2c8db8b6c 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
@@ -226,6 +226,19 @@
}
return OK;
}
+ uint32_t Thread_Load_Set_Load_Arm_To_Stopper_OnError_Callback(uint32_t deviceID, uint32_t BusyFlag)
+ {
+
+ Report("Thread_Load_Set_Load_Arm_To_Stopper_OnError_Callback time",__FILE__,msec_millisecondCounter - UnloadingStart,msec_millisecondCounter,RpMessage,UnloadingStart,0);
+
+ Report("Thread_Load_Set_Load_Arm_To_Stopper_OnError_Callback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0);
+ NumberOfDrierLoaderCycles=0;
+ //storeLoadArmParameters();
+ MotorStop(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Hard_Stop);
+ SetMotHome(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM); //set this point as the spool home
+
+ return OK;
+ }
uint32_t Thread_Load_Set_Load_Arm_To_Stopper_Callback(uint32_t deviceID, uint32_t BusyFlag)
{
@@ -600,7 +613,7 @@
{
numberOfCycles++;
- Report("Thread_Load_Dryer_Loading_Callback",__FILE__,(int)TotalLoadedLen,(int)DrierPrevLocation,RpMessage,ReadValue,0);
+ Report("Thread_Load_Dryer_Loading_Callback",__FILE__,(int)TotalLoadedLen,(int)DrierPrevLocation,RpMessage,numberOfCycles,0);
if ((fabs (TotalLoadedLen -DrierPrevLocation)>50 )&&(ReadValue == NOTBUSY))
{
@@ -618,7 +631,7 @@
}
else
{
- MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Thread_Load_Dryer_MovetoEncoderPosition_Callback,30000);
+ MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Thread_Load_Dryer_MovetoEncoderPosition_Callback,30000,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize);
MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,numberOfCycles);
Report("Store Number of cycles in drier",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmRounds,0);
}
@@ -803,6 +816,7 @@
}
uint32_t Thread_Load_Dryer_UnLoading_Callback(uint32_t MotorId, uint32_t ReadValue)
{
+ bool direction;
numberOfCycles++;
uint32_t temp = Read_Dryer_ENC_Position();
Report("Thread_Load_Dryer_UnLoading_Callback",__FILE__,ReadValue,temp,RpMessage,DrierPrevLocation,0);
@@ -823,7 +837,7 @@
}
else //done enough cycles, go to the center point
{
- MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Thread_Load_Set_Load_Arm_To_Stopper_Callback,30000);
+ MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Thread_Load_Set_Load_Arm_To_Stopper_Callback,30000,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize);
MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,0);
Report("Store Number of cycles in drier",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmRounds,0);
}
@@ -831,7 +845,23 @@
else //timeout or no movement
{
Report("Store Number of cycles in drier - halted",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmRounds,0);
- MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,LoadArmRounds-numberOfCycles);
+ if (SecondTry == true)
+ MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,0);
+ else
+ MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,LoadArmRounds-numberOfCycles);
+ if (abs(temp -DrierPrevLocation)<200)
+ {
+ if (temp<DrierPrevLocation)
+ direction = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize;
+ else
+ direction = 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize;
+ MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Thread_Load_Set_Load_Arm_To_Stopper_OnError_Callback,3000,direction);
+
+ }
+ else
+ MotorStop(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Hard_Stop);
+
+
TimeoutsCounter = 0;
CallbackCounter = 0;
/*if(PullerControlId != 0xFF)
@@ -853,7 +883,6 @@
MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz);*/
MotorStop(HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,Hard_Hiz);
- MotorStop(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Hard_Stop);
load.color = fastBILNK;
usnprintf(LoadErrorMsg, 100, "Stage %s - Drier load arm timeout",LoadStagesStr[LoadStages]);
Report(LoadErrorMsg,__FILE__,__LINE__,LoadStages,RpWarning,TimeoutsCounter,0);
@@ -1210,15 +1239,15 @@ uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
NormalizedError = avreageSampleValue*NormalizedErrorCoEfficient[index];
- MotorControlConfig[index].m_mesuredParam = NormalizedError;
- MotorControlConfig[index].m_calculatedError = PIDAlgorithmCalculation((float)MotorControlConfig[index].m_SetParam , (float)MotorControlConfig[index].m_mesuredParam,
- &MotorControlConfig[index].m_params, &MotorControlConfig[index].m_preError, &MotorControlConfig[index].m_integral);
if (index != FEEDER_MOTOR) //feeder unit handles errors opposite to left unit
{
- MotorControlConfig[index].m_calculatedError = (-1*MotorControlConfig[index].m_calculatedError);
+ NormalizedError = (-1*NormalizedError);
}
+ MotorControlConfig[index].m_mesuredParam = NormalizedError;
+ MotorControlConfig[index].m_calculatedError = PIDAlgorithmCalculation((float)MotorControlConfig[index].m_SetParam , (float)MotorControlConfig[index].m_mesuredParam,
+ &MotorControlConfig[index].m_params, &MotorControlConfig[index].m_preError, &MotorControlConfig[index].m_integral);
calculated_speed = (1-MotorControlConfig[index].m_calculatedError)*OriginalMotorSpd_2PPS[index];
- if (fabs(calculated_speed-CurrentControlledSpeed[index])> MotorControlConfig[index].m_ingnoreValue)
+ //if (fabs(calculated_speed-CurrentControlledSpeed[index])> MotorControlConfig[index].m_ingnoreValue)
{
CurrentControlledSpeed[index] = calculated_speed;
MotorSetSpeed(ThreadMotorIdToMotorId[index], calculated_speed);
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h
index 308de0bd0..af4bd5e08 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h
@@ -33,6 +33,7 @@ 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
+bool NoCartAvailable();
void Waste_Init();
void Waste_StateMachine(void);
diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
index 7d358cfc2..40e23e0b3 100644
--- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
+++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c
@@ -499,3 +499,24 @@ void Waste_StateMachine(void)
break;
}
}
+void Waste_Prepare(void)
+{
+ //check if the waste is ready to run - waste level not above overflow level and no cartridge in the slots
+ if (wasteLevel > wasteLevelOverflow)
+ {
+ Report("cannot start a job with waste tank overflow", __FILE__, __LINE__, wasteLevel, RpMessage, wasteLevelOverflow, 0);
+ PrepareReady(Module_Waste,ModuleFail);
+ return;
+ }
+ if ((WHS_IsEmptying())||(NoCartAvailable()))
+ {
+ PrepareReady(Module_Waste,ModuleDone);
+ }
+ else
+ {
+ Report("cannot start a job with cartridges in the IFS", __FILE__, __LINE__, wasteLevel, RpMessage, wasteLevelOverflow, 0);
+ PrepareReady(Module_Waste,ModuleFail);
+ }
+ return;
+
+}
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
index 48ade0798..106d515ad 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
@@ -207,6 +207,10 @@ static ReturnCode PrepareState(void *JobDetails)
{
PrepareWaiting[Module_Thread] = ModuleWaiting;
}
+ if (Configured[Module_Waste])
+ {
+ PrepareWaiting[Module_Waste] = ModuleWaiting;
+ }
if (Configured[Module_Winder])
{
PrepareWaiting[Module_Winder] = ModuleWaiting;
@@ -239,6 +243,8 @@ static ReturnCode PrepareState(void *JobDetails)
SendJobProgress(0.0, 0, false, "Winder prepare failed !!!!");
}
}
+ if (Configured[Module_Waste])
+ Waste_Prepare();
return retcode;
}
@@ -548,7 +554,7 @@ uint32_t ThreadCleaningJob(int speed)
Configured[Module_Winder] = true;
Configured[Module_IDS] = true;
Configured[Module_Heaters] = true;
- Configured[Module_Waste] = false;
+ Configured[Module_Waste] = true;
//set the requested speed without changing other process parameters
memcpy (&ProcessParametersCopy,&ProcessParametersKeep,sizeof(ProcessParameters));
if(speed)
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c
index a0828322e..6f2b9c534 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c
@@ -20,6 +20,7 @@
#include "./printingSTM.h"
#include "Drivers/Heater/Heater.h"
+#include <Drivers/I2C_Communication/RFID_NFC/I2C_IFS_Mux.h>
#include "Modules/General/MachineStatus.h"
#include "modules/General/process.h"
@@ -306,6 +307,8 @@ uint32_t PrintingHWConfiguration(void *Configuration)
HardwareConfiguration *request = Configuration;
if (request->n_winders == 1)
Configured[Module_Winder] = true;
+ if ((IFS_Availability[1] == IFS_RECOGNIZED)&&(IFS_Availability[2] == IFS_RECOGNIZED)) //ifs installed -check cartridges
+ Configured[Module_Waste] = true;
if (request->n_motors < HARDWARE_MOTOR_TYPE__MOTO_SPARE1_1)
{
diff --git a/Software/Stubs Collection/Procedures/Dancers calibration.pproj b/Software/Stubs Collection/Procedures/Dancers calibration.pproj
new file mode 100644
index 000000000..e906c6329
--- /dev/null
+++ b/Software/Stubs Collection/Procedures/Dancers calibration.pproj
@@ -0,0 +1 @@
+{"$id":"1","Name":"Dancers calibration","Description":null,"Scripts":{"$id":"2","$values":[{"$id":"3","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Program\r\n{\r\n public void OnExecute(IProcedureContext context)\r\n {\r\n\r\n\t\tvar response1 = context.ShowQuestion(\"Please Enter Password:\");\r\n\t\tif (response1. \"Aa123456\")\r\n\t\t{\r\n\t\t\tcontext.WriteLine(response1);\r\n\t\t\t\r\n\t\t\t\r\n\t\t\tcontext.RequestTimeout = 2000;\r\n\t\t\t//for (int i = 0; i < 100; i++)\r\n\t\t\t{\r\n\t\t\t\tvar response = context.Send<StubDancerPositionResponse>(\"StubDancerPositionRequest\" ,0);\r\n\t\t\t\tThread.Sleep(1000);\r\n\t\t\t\t response = context.Send<StubDancerPositionResponse>(\"StubDancerPositionRequest\" ,1);\r\n\t\t\t\tThread.Sleep(1000);\r\n\t\t\t\t response = context.Send<StubDancerPositionResponse>(\"StubDancerPositionRequest\" ,2);\r\n\t\t\t\tThread.Sleep(1000);\r\n\t\t\t}\r\n\t }\r\n\r\n }\r\n}","Name":"Program.csx","IsEntryPoint":true},{"$id":"4","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Service\r\n{\r\n public double Calc(double a, double b)\r\n {\r\n return a + b;\r\n }\r\n}","Name":"Service.csx","IsEntryPoint":false}]},"Inputs":{"$id":"5","$values":[]},"ReferenceAssemblies":{"$id":"6","$values":[{"$id":"7","File":"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll","HintType":"System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"8","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Core\\v4.0_4.0.0.0__b77a5c561934e089\\System.Core.dll","HintType":"System.Linq.Enumerable, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"9","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Windows.Forms\\v4.0_4.0.0.0__b77a5c561934e089\\System.Windows.Forms.dll","HintType":"System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"10","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Procedures.dll","HintType":"Tango.FSE.Procedures.ProcedureProject, Tango.FSE.Procedures, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"11","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Common.dll","HintType":"Tango.FSE.Common.Diagnostics.IDiagnosticsProvider, Tango.FSE.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"12","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.BL.dll","HintType":"Tango.BL.Enumerations.TechMonitors, Tango.BL, Version=2.0.36.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"13","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.PMR.dll","HintType":"Tango.PMR.Common.MessageType, Tango.PMR, Version=2.0.40.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"14","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Transport.dll","HintType":"Tango.Transport.ITransporter, Tango.Transport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"15","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Integration.dll","HintType":"Tango.Integration.Operation.IMachineOperator, Tango.Integration, Version=2.0.31.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"16","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Google.Protobuf.dll","HintType":"Google.Protobuf.IMessage, Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604"},{"$id":"17","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Drawing\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Drawing.dll","HintType":"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"}]},"ApartmentState":"MTA"} \ No newline at end of file
diff --git a/Software/Stubs Collection/Procedures/EmbeddedParametersBuild.pproj b/Software/Stubs Collection/Procedures/EmbeddedParametersBuild.pproj
new file mode 100644
index 000000000..0b1371bbb
--- /dev/null
+++ b/Software/Stubs Collection/Procedures/EmbeddedParametersBuild.pproj
@@ -0,0 +1 @@
+{"$id":"1","Name":"EmbeddedParametersBuild","Description":null,"Scripts":{"$id":"2","$values":[{"$id":"3","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing System.IO;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.PMR.EmbeddedParameters;\r\nusing Tango.PMR.IO;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Program\r\n{\r\n public void OnExecute(IProcedureContext context)\r\n {\r\n\r\n context.AddResult(ResultType.Passed, \"My Value Name\", \"Test for this value has passed.\");\r\n\t\tConfigurationParameters configurationParameters = new ConfigurationParameters();\r\n\r\n\t\tconfigurationParameters.BreakSensorLimit = 10;\r\n\r\n\t\t//how many samples to collect in diagnostics before sending\r\n\t\tconfigurationParameters.DiagnosticCollectionLimit = 3;\r\n\r\n\t\t//how many consecutive readout before declaring DC over/underheat alarm\r\n\t\tconfigurationParameters.OverHeatCountLimit = 3;\r\n\t\tconfigurationParameters.UnderHeatCountLimit = 3;\r\n\r\n\t\t// time of motor activity before opening the valve or after closing the valve, in milliseconds\r\n\t\tconfigurationParameters.CloseValveTimeout = 20;\r\n\t\tconfigurationParameters.OpenValveTimeout = 20;\r\n\r\n\t\t//backlash after filling - target pressure, timoeout, time staps (speed will be added in general parameters)\r\n\t\tconfigurationParameters.InitialDispenserPressure = 0.25; \r\n\t\tconfigurationParameters.InitialDispenserTimeout = 60000; //20 seconds\r\n\t\tconfigurationParameters.InitialDispenserTimeLag = 100;\r\n\r\n\t\t//job prepare - build pressure in dispensers - target pressure, timoeout, time staps, speed\r\n\t\tconfigurationParameters.DispenserBuildPressureSpeed = 950; //no more than 1000\r\n\t\tconfigurationParameters.DispenserBuildPressureLimit = 0.85; \r\n\t\tconfigurationParameters.DispenserBuildPressureTimeout = 180000;\r\n\t\tconfigurationParameters.DispenserBuildPressureLag = 100;\r\n\r\n\t\t//temperature band 1000 = 100% - thresholds for job start around target temprature - AC\r\n\t\tconfigurationParameters.ACHeatersLowerOperationLimit = 995;\r\n\t\tconfigurationParameters.ACHeatersUpperOperationLimit = 1005;\r\n\r\n\t\t//temperature band 1000 = 100% - thresholds for job start around target temprature - DC\r\n\t\tconfigurationParameters.DCHeatersLowerOperationLimit = 978;\r\n\t\tconfigurationParameters.DCHeatersUpperOperationLimit = 1005;\r\n\r\n\t\t// mid tank reading offset to add to the readout (OBSOLETE!)\r\n\t\tconfigurationParameters.MidTankPressureCorrection = 0.0;\r\n\r\n\t\t//waste factor for intersegment pressure building\r\n\t\tconfigurationParameters.DispenserPresegmentWFCF = 40;\r\n\t\t//how much time to start the WFCF process (pressure buildup) before segment start\r\n\t\tconfigurationParameters.IDSPreSegmentWFCFTimeBeforeSegment = 12000;\r\n\r\n\t\t//flag: start heaters according to saved process parameters upon init?\r\n\t\tconfigurationParameters.StartHeatingOnInitSequence = true;\r\n\r\n\t\t// current test for the heaters - alarm thresholds\r\n\t\tconfigurationParameters.CurrentAlarmLowLimit = 0.78;\r\n\t\tconfigurationParameters.CurrentAlarmHighLimit = 1.07;\r\n\r\n\t\t//currently not in use\r\n\t\tconfigurationParameters.IDSSegmentRefillTimeout = 5000;\r\n\t\tconfigurationParameters.IDSPreSegmentBuildupTime = 5000;\r\n\t\t//cleaning!!!!!!!!!!\r\n\t\tconfigurationParameters.IDSCleaningSpeed = 800;\r\n\t\tconfigurationParameters.IDSCleaningStopBeforeSegmentTime = 10000; //end of presegemnt\r\n\t\tconfigurationParameters.IDSCleaningStartSprayPreSegmentTime =2000; //beginning of presegment\r\n\r\n\t\tint Tup = 6,Tdelay1 = 26,Tdelay2 = 65;//300 milli up, stay 1 sec, stay down 2 sec\r\n\t\t// Tup = LeftRockerSpeed/100;\r\n\t\t// Tdelay1 = LeftRockerSpeed%100;\r\n\t\t// Tdelay2 = RightRockerSpeed;\r\n\t\tint LeftRockerSpeed = Tup*100+Tdelay1;\r\n\t\tint RightRockerSpeed = Tdelay2;\r\n\r\n\t\tconfigurationParameters.IDSLeftCleaningMotorSpeed = LeftRockerSpeed;\r\n\t\tconfigurationParameters.IDSRightCleaningMotorSpeed = RightRockerSpeed;\r\n\r\n\t\tconfigurationParameters.SwitchToIdleTimeinSeconds = 3600;\r\n\t\tconfigurationParameters.IdleDrierTemperature = 80;\r\n\t\tconfigurationParameters.IdleHeadTemperature = 80;\r\n\t\tconfigurationParameters.IdleMixerTemperature = 0;\r\n\t\tconfigurationParameters.PowerOffTemperatureLimit = 60;\r\n\r\n\t\t//general parameters, ORDER MUST BE PRESERVED!!!!\r\n\t\t//check the dispensers hard limit alarms\r\n\t\t/*1*/\r\n\t\tDouble checkHardLimitAlarms = new Double();\r\n\r\n\t\tcheckHardLimitAlarms = 1.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(checkHardLimitAlarms);\r\n\r\n\t\t/*2*/\r\n\t\tDouble checkCurrentAlarms = new Double();\r\n\t\tcheckCurrentAlarms = 0.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(checkCurrentAlarms);\r\n\t\t//check the tamper alarms\r\n\r\n\t\t/*3*/\r\n\t\tDouble checkTamperAlarms = new Double();\r\n\t\tcheckTamperAlarms = 1.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(checkTamperAlarms);\r\n\r\n\t\t/*4*/\r\n\t\tDouble checkMotorAlarms = new Double();\r\n\t\tcheckMotorAlarms = 1.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(checkMotorAlarms);\r\n\r\n\t\t/*5*/\r\n\t\tDouble WinderBackToBaseTime = new Double();\r\n\t\tWinderBackToBaseTime = 820.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(WinderBackToBaseTime);\r\n\r\n\t\t/*6*/\r\n\t\tDouble DispenserInitialPressureSpeed = new Double();\r\n\t\tDispenserInitialPressureSpeed = 1050.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(DispenserInitialPressureSpeed);\r\n\r\n\t\t/*7*/\r\n\t\tDouble SetDiagnosticMode = new Double();\r\n\t\tSetDiagnosticMode = 3.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(SetDiagnosticMode);\r\n\r\n\t\t/*8*/\r\n\t\tDouble SetAutoFill = new Double();\r\n\t\tSetAutoFill = 3.0;\r\n\t\tconfigurationParameters.GeneralParameters.Add(SetAutoFill);\r\n\r\n\t\tFile.WriteAllBytes(\"C:/temp/EmbParam.cfg\",configurationParameters.ToBytes());\r\n\r\n\t\tbyte[] fileBytes = File.ReadAllBytes(\"C:/temp/EmbParam.cfg\");\r\n\r\n\r\n\t\tvar config = ConfigurationParameters.Parser.ParseFrom(fileBytes);\r\n\r\n\t\tcontext.Write( config);\r\n\t\tThread.Sleep(1000);\r\n\r\n\r\n\t\tcontext.Write(\"\\n\\n Deleting old file\");\r\n\r\n\t\tDeleteRequest deleteRequest = new DeleteRequest();\r\n\t\tdeleteRequest.Path = \"SYSINFO//EmbParam.cfg\";\r\n\t\tdeleteRequest.Attribute = Tango.PMR.IO.FileAttribute.Unspecified;\r\n\t\tDeleteResponse response5 = context.Send<DeleteResponse>(deleteRequest);\r\n\r\n\r\n\t\tThread.Sleep(1000);\r\n\t\tcontext.Write(\"\\n\\n Loading new file file\");\r\n\r\n\t\tFileUploadRequest fileUploadRequest = new FileUploadRequest();\r\n\t\tfileUploadRequest.Path = \"SYSINFO//EmbParam.cfg\";\r\n\t\tfileUploadRequest.Length = (int)fileBytes.Length;\r\n\t\tFileUploadResponse response2 = context.Send<FileUploadResponse>(fileUploadRequest);\r\n\t\tThread.Sleep(1000);\r\n\t\tlong chunk_size = response2.MaxChunkLength;\r\n\r\n\t\tFileStream fs = new FileStream(\"C:/temp/EmbParam.cfg\",FileMode.Open);\r\n\r\n\t\twhile (fs.Position < fs.Length)\r\n\t\t{\r\n\t\t\t\tcontext.Write(\"Position \"+ fs.Position+ \" Length \"+ fs.Length +\"\\n\\n\");\r\n\t\t\t\tFileChunkUploadRequest fileChunkUploadRequest = new FileChunkUploadRequest();\r\n\t\t\t\tfileChunkUploadRequest.UploadID = response2.UploadID;\r\n\t\t\t\tbyte[] chunk = new byte[Math.Min(chunk_size,fs.Length - fs.Position)];\r\n\t\t\t\tfs.Read(chunk,0,chunk.Length);\r\n\t\t\t\tfileChunkUploadRequest.Buffer = ByteString.CopyFrom(chunk);\t\r\n\t\t\t\tvar response3 = context.Send<FileChunkUploadResponse>(fileChunkUploadRequest);\r\n\t\t\t\tThread.Sleep(2000);\r\n\r\n\t\t}\r\n\r\n\t\t// activating the new file\r\n\t\tProgressRequest progressRequest = new ProgressRequest();\r\n\t\tprogressRequest.Amount = 0xCD;\r\n\t\tprogressRequest.Delay = 0xCD;\r\n\t\tvar response1 = context.Send<ProgressResponse>(progressRequest);\r\n\r\n }\r\n}","Name":"Program.csx","IsEntryPoint":true},{"$id":"4","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Service\r\n{\r\n public double Calc(double a, double b)\r\n {\r\n return a + b;\r\n }\r\n}","Name":"Service.csx","IsEntryPoint":false}]},"Inputs":{"$id":"5","$values":[]},"ReferenceAssemblies":{"$id":"6","$values":[{"$id":"7","File":"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll","HintType":"System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"8","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Core\\v4.0_4.0.0.0__b77a5c561934e089\\System.Core.dll","HintType":"System.Linq.Enumerable, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"9","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Windows.Forms\\v4.0_4.0.0.0__b77a5c561934e089\\System.Windows.Forms.dll","HintType":"System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"10","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Procedures.dll","HintType":"Tango.FSE.Procedures.ProcedureProject, Tango.FSE.Procedures, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"11","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Common.dll","HintType":"Tango.FSE.Common.Diagnostics.IDiagnosticsProvider, Tango.FSE.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"12","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.BL.dll","HintType":"Tango.BL.Enumerations.TechMonitors, Tango.BL, Version=2.0.36.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"13","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.PMR.dll","HintType":"Tango.PMR.Common.MessageType, Tango.PMR, Version=2.0.40.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"14","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Transport.dll","HintType":"Tango.Transport.ITransporter, Tango.Transport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"15","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Integration.dll","HintType":"Tango.Integration.Operation.IMachineOperator, Tango.Integration, Version=2.0.31.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"16","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Google.Protobuf.dll","HintType":"Google.Protobuf.IMessage, Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604"},{"$id":"17","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Drawing\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Drawing.dll","HintType":"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"}]},"ApartmentState":"MTA"} \ No newline at end of file
diff --git a/Software/Stubs Collection/Procedures/WHS Loop Disable.pproj b/Software/Stubs Collection/Procedures/WHS Loop Disable.pproj
new file mode 100644
index 000000000..046c188a1
--- /dev/null
+++ b/Software/Stubs Collection/Procedures/WHS Loop Disable.pproj
@@ -0,0 +1 @@
+{"$id":"1","Name":"WHS Loop Disable","Description":null,"Scripts":{"$id":"2","$values":[{"$id":"3","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Program\r\n{\r\n public void OnExecute(IProcedureContext context)\r\n {\r\n\r\n\t\tint ControlLoopEnable = 0x1000;\r\n\t\tint ControlLoopDisable = 0x0000;\r\n\t\t\r\n\t\tProgressRequest progressRequest = new ProgressRequest();\r\n\t\tprogressRequest.Amount = 0x3e8;\r\n\t\tprogressRequest.Delay = ControlLoopDisable+2700;\r\n\r\n\tvar response = context.Send<ProgressResponse>(progressRequest);\r\n\r\n }\r\n}","Name":"Program.csx","IsEntryPoint":true},{"$id":"4","Code":"using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing Google.Protobuf;\r\nusing Tango.BL.Enumerations;\r\nusing Tango.PMR.Stubs;\r\nusing Tango.PMR.Diagnostics;\r\nusing Tango.FSE.Common.Diagnostics;\r\nusing Tango.FSE.Procedures;\r\n\r\npublic class Service\r\n{\r\n public double Calc(double a, double b)\r\n {\r\n return a + b;\r\n }\r\n}","Name":"Service.csx","IsEntryPoint":false}]},"Inputs":{"$id":"5","$values":[]},"ReferenceAssemblies":{"$id":"6","$values":[{"$id":"7","File":"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll","HintType":"System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"8","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Core\\v4.0_4.0.0.0__b77a5c561934e089\\System.Core.dll","HintType":"System.Linq.Enumerable, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"9","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Windows.Forms\\v4.0_4.0.0.0__b77a5c561934e089\\System.Windows.Forms.dll","HintType":"System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"},{"$id":"10","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Procedures.dll","HintType":"Tango.FSE.Procedures.ProcedureProject, Tango.FSE.Procedures, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"11","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.FSE.Common.dll","HintType":"Tango.FSE.Common.Diagnostics.IDiagnosticsProvider, Tango.FSE.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"12","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.BL.dll","HintType":"Tango.BL.Enumerations.TechMonitors, Tango.BL, Version=2.0.36.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"13","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.PMR.dll","HintType":"Tango.PMR.Common.MessageType, Tango.PMR, Version=2.0.40.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"14","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Transport.dll","HintType":"Tango.Transport.ITransporter, Tango.Transport, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"},{"$id":"15","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Tango.Integration.dll","HintType":"Tango.Integration.Operation.IMachineOperator, Tango.Integration, Version=2.0.31.1608, Culture=neutral, PublicKeyToken=null"},{"$id":"16","File":"C:\\Program Files (x86)\\Twine Solutions LTD\\Tango FSE\\Google.Protobuf.dll","HintType":"Google.Protobuf.IMessage, Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604"},{"$id":"17","File":"C:\\WINDOWS\\Microsoft.Net\\assembly\\GAC_MSIL\\System.Drawing\\v4.0_4.0.0.0__b03f5f7f11d50a3a\\System.Drawing.dll","HintType":"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"}]},"ApartmentState":"MTA"} \ No newline at end of file