aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules/Control
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2019-12-17 14:37:38 +0200
committerAvi Levkovich <avi@twine-s.com>2019-12-17 14:37:38 +0200
commit8a7e65715ef393a08cc39d1b5d4a3da22799c852 (patch)
treef71065b4c0000aafad1356ff2ab6b17f8287476b /Software/Embedded_SW/Embedded/Modules/Control
parentc653fa2077b6118c2ace3b7bcc8bc91c9a9ed4f5 (diff)
parent3ed7e9cc55e10888d84aa53abcb5e765a317ddb1 (diff)
downloadTango-8a7e65715ef393a08cc39d1b5d4a3da22799c852.tar.gz
Tango-8a7e65715ef393a08cc39d1b5d4a3da22799c852.zip
merge conflicts
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules/Control')
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c145
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/control.c24
3 files changed, 135 insertions, 35 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
index 6318de280..76b7aa7a1 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
@@ -50,7 +50,6 @@
#include "drivers/Flash_Memory/fatfs/ff.h"
#include "drivers/Flash_ram/FlashProgram.h"
-#include "third_party/fatfs/src/ffconf.h"
#include "Common/SWUpdate/FileSystem.h"
#include "Communication/Connection.h"
@@ -227,13 +226,18 @@ void OneMilliSecondMillisecInterrupt(UArg arg0)
return ;
}
uint32_t PT100Activity = 0;
+int32_t MillisecReadFromI2CTempSensor(uint32_t TempSensorId, MSecFptr Callback)
+{
+#warning call I2C temeratures
+ return OK;
+}
+
int32_t MillisecReadFromTempSensor(uint32_t TempSensorId, MSecFptr Callback)
{
if (TempSensorId >= MAX_MAIN_CARD_TEMP_SENS_ID) return -1;
PT100Activity++; //read request
PT100Data[TempSensorId].Callback = Callback;
PT100Data[TempSensorId].Active = true;
-
return OK;
}
//typedef uint32_t (* MSecFptr)(uint32_t deviceID, uint32_t ReadValue);
@@ -521,30 +525,77 @@ int MillisecCalculateTemperatures (TEMPERATURE_SENSOR_ID_ENUM SensorId)
}
int MillisecGetTemperatures (TEMPERATURE_SENSOR_ID_ENUM SensorId)
{
+ if (SensorId > WHS_PT100_4_0X82_1)
+ return 0;
return TemperatureCalc[SensorId];
}
bool RapidPressureRead = false;
+float PressureSum[MAX_SYSTEM_DISPENSERS];
+float PressureMin[MAX_SYSTEM_DISPENSERS];
+float PressureMax[MAX_SYSTEM_DISPENSERS];
+float PressureCount[MAX_SYSTEM_DISPENSERS];
+float PressureCalc[MAX_SYSTEM_DISPENSERS];
+void MillisecUpdatePressures (int SensorId,float Pressure)
+{
+ //if(PressureCount[SensorId]++>=10)
+ // PressureCount[SensorId] = 0;
+ PressureCount[SensorId]++;
+ if (PressureMax[SensorId]<Pressure) PressureMax[SensorId]=Pressure;
+ if (PressureMin[SensorId]>Pressure) PressureMin[SensorId]=Pressure;
+ PressureSum[SensorId]+=Pressure;
+}
+float MillisecCalculatePressures (int SensorId)
+{
+ float calc = 0;
+ PressureSum[SensorId]-=PressureMax[SensorId];
+ PressureSum[SensorId]-=PressureMin[SensorId];
+ calc = PressureSum[SensorId] / (PressureCount[SensorId]-2);
+
+ PressureSum[SensorId] = 0;
+ PressureCount[SensorId] = 0;
+ PressureMin[SensorId] = 30000;
+ PressureMax[SensorId] = -30000;
+ return calc;
+}
+float MillisecGetPressures (int SensorId)
+{
+ if (SensorId > MAX_SYSTEM_DISPENSERS)
+ return 0;
+ return PressureCalc[SensorId];
+}
+
void setRapidPressureRead(bool value)
{
RapidPressureRead = value;
+ if (GetDiagnosticMode() == Diagnostic_Extreme_Mode)
+ RapidPressureRead = true;
}
uint16_t PumpCounter = 0;
uint32_t MillisecLowLoop(uint32_t tick)
{
- uint8_t Motor_i,Disp_i,Heater_i,temp;
+ uint8_t Motor_i,Disp_i,temp;
TEMPERATURE_SENSOR_ID_ENUM Sensor_i;
//static int temp=0;
//call all modules Millisec functions
//test dancers and speed encoders
//check all callback units (state machine waiting for completion of a change)
- bool Ten_msTick, Fifty_msTick, Hundred_msTick , m90msecTick, Onesecond_Tick,O900Millisecond_Tick,OneMinute_Tick,OneHourTick;
+ bool Ten_msTick, Hundred_msTick , m20msecTick,m70msecTick,m90msecTick, Onesecond_Tick,OneMinute_Tick,OneHourTick;
+ bool O100Millisecond_Tick,O200Millisecond_Tick,O400Millisecond_Tick,O500Millisecond_Tick,O600Millisecond_Tick;
+ //bool O100Millisecond_Tick,O200Millisecond_Tick,O400Millisecond_Tick,O500Millisecond_Tick,O600Millisecond_Tick,O800Millisecond_Tick,O900Millisecond_Tick;
Ten_msTick = (tick%eTenMillisecond == 0) ?true:false;
- Fifty_msTick = (tick%eHundredMillisecond == 0) ?true:false; //eFiftyMillisecond
Hundred_msTick = (tick%eHundredMillisecond == 0) ?true:false;
+ m20msecTick = (tick%eHundredMillisecond == 20) ?true:false;
+ m70msecTick = (tick%eHundredMillisecond == 70) ?true:false;
m90msecTick = (tick%eHundredMillisecond == 90) ?true:false;
- O900Millisecond_Tick = (tick%eOneSecond == 900) ?true:false;
+ O100Millisecond_Tick = (tick%eOneSecond == 100) ?true:false;
+ O200Millisecond_Tick = (tick%eOneSecond == 200) ?true:false;
+ O400Millisecond_Tick = (tick%eOneSecond == 400) ?true:false;
+ O500Millisecond_Tick = (tick%eOneSecond == 500) ?true:false;
+ O600Millisecond_Tick = (tick%eOneSecond == 600) ?true:false;
+ //O800Millisecond_Tick = (tick%eOneSecond == 800) ?true:false;
+ //O900Millisecond_Tick = (tick%eOneSecond == 900) ?true:false;
Onesecond_Tick = (tick%eOneSecond == 0) ?true:false;
OneMinute_Tick = (tick%eOneMinute == 0) ?true:false;
OneHourTick = (tick%eOneHour == 0) ?true:false;
@@ -561,13 +612,30 @@ uint32_t MillisecLowLoop(uint32_t tick)
if(Machine_Idle_Mode == true)
Machine_Idle_Breathing_Led();
}
- if(Fifty_msTick)
+#ifdef Use_Head_Card
+ if (m20msecTick) //read odd PT1000
{
- Set_HeadCard_PT100();//call every 50mSec (minimum delay 30mSec)
+ for (Sensor_i = HEAD_PT100_ZONE_1_0X80_0;Sensor_i < HEAD_PT100_ZONE_2_0X80_1;Sensor_i++)
+ {
+ MillisecReadFromI2CTempSensor(Sensor_i, NULL);
+ }
+#warning call chip select replace in I2C
}
+ if (m70msecTick) //read odd PT1000
+ {
+ for (Sensor_i = HEAD_PT100_ZONE_2_0X80_1;Sensor_i < HEAD_PT100_RESERVE_0X8E_1;Sensor_i++)
+ {
+ MillisecReadFromI2CTempSensor(Sensor_i, NULL);
+ }
+ }
+#endif
if (m90msecTick)
{
+#ifdef Use_Head_Card
+ for (Sensor_i = TEMP_SENSE_ANALOG_DRYER_TEMP1;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++)
+#else
for (Sensor_i = 0;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++)
+#endif
{
MillisecReadFromTempSensor(Sensor_i, NULL);
}
@@ -577,7 +645,11 @@ uint32_t MillisecLowLoop(uint32_t tick)
Speed_Data = Calculate_Speed_Sensor_Velocity();
Read_Buttons_Reg();
//Ink_Cart_Led();
+#ifdef Use_Head_Card
+ for (Sensor_i = TEMP_SENSE_ANALOG_DRYER_TEMP1;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++)
+#else
for (Sensor_i = 0;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++)
+#endif
{
MillisecUpdateTemperatures (Sensor_i,TemperatureSensorRead(Sensor_i));
}
@@ -593,37 +665,26 @@ uint32_t MillisecLowLoop(uint32_t tick)
{
for (Disp_i = 0;Disp_i < MAX_SYSTEM_DISPENSERS;Disp_i++)
{
- CalculateDispenserPressure(Disp_i);
+ MillisecUpdatePressures(Disp_i, CalculateDispenserPressure(Disp_i));
}
ADC_TriggerCollection();
}
DispensersCollectionCall();
-#ifdef Use_Head_Card
- Head_Read_IO_Reg(0x46, HIGH);//READ HEAD CARD LS
-#endif
-
}
-
- if ((O900Millisecond_Tick)&&(RapidPressureRead == false))
+ if (O100Millisecond_Tick)
{
- ADC_TriggerCollection();
+ Trigger_Heater_Current_Read();
}
- if (Onesecond_Tick)
+ if (O200Millisecond_Tick)
{
- if (RapidPressureRead == false)
- {
- for (Disp_i = 0;Disp_i < MAX_SYSTEM_DISPENSERS;Disp_i++)
- {
- CalculateDispenserPressure(Disp_i);
- }
- }
FPGA_GetAllDispensersValveBusyOCD();
temp = Read_Fans_Tacho();
DrawerFansStatus = temp & 0x1F;
SystemFansStatus = temp & 0xE0;
- MachineUpdateResponseFunc();
- //KeepAliveOneSecondCall();
+ }
+ if (O400Millisecond_Tick)
+ {
for (Motor_i = 0;Motor_i < NUM_OF_MOTORS;Motor_i++)
{
if (Motor_i == HARDWARE_MOTOR_TYPE__MOTO_SCREW)
@@ -631,18 +692,40 @@ uint32_t MillisecLowLoop(uint32_t tick)
if (isMotorConfigured(Motor_i))
MotorGetStatusFromFPGA(Motor_i);
}
- if (!(OneMinute_Tick))
+ }
+ if ((O500Millisecond_Tick)&&(RapidPressureRead == false))
+ {
+ ADC_TriggerCollection();
+ }
+ if (O600Millisecond_Tick)
+ {
+ if (RapidPressureRead == false)
{
- Trigger_Heater_Current_Read();
- /*for (Heater_i = 0;Heater_i < NUM_OF_CURRENT_HEATERS;Heater_i++)
+ for (Disp_i = 0;Disp_i < MAX_SYSTEM_DISPENSERS;Disp_i++)
{
- Read_Heaters_Current(Heater_i);
- }*/
+ CalculateDispenserPressure(Disp_i);
+ }
}
+ }
+ if (Onesecond_Tick)
+ {
+ MachineUpdateResponseFunc();
+ //KeepAliveOneSecondCall();
+#ifdef Use_Head_Card
+ for (Sensor_i = TEMP_SENSE_ANALOG_DRYER_TEMP1;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++)
+#else
for (Sensor_i = 0;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++)
+#endif
{
TemperatureCalc[Sensor_i] = MillisecCalculateTemperatures ( Sensor_i);
}
+ if (RapidPressureRead == true)
+ {
+ for (Disp_i = 0;Disp_i < MAX_SYSTEM_DISPENSERS;Disp_i++)
+ {
+ PressureCalc[Disp_i] = MillisecCalculatePressures(Disp_i);
+ }
+ }
}
if (OneMinute_Tick)
{
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h
index 4edc1a8ed..9335a6d08 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h
@@ -34,6 +34,7 @@ uint32_t getDrawerFansStatus(void);
uint32_t getSystemFansStatus(void);
uint8_t getGasReading(void);
int MillisecGetTemperatures (TEMPERATURE_SENSOR_ID_ENUM SensorId);
+float MillisecGetPressures (int SensorId);
void setRapidPressureRead(bool value);
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c
index 1f5e008d3..b60fb3aa4 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/control.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c
@@ -45,19 +45,27 @@
//by recieved esign flow of the user from the UI
///////////////////////////////////////////////////////////////////////////////////////////
#include "include.h"
-#include "Modules/General/GeneralHardware.h"
#include <driverlib/timer.h>
#include <inc/hw_ints.h>
+#include <PMR/Diagnostics/EventType.pb-c.h>
+
#include "drivers/adc_sampling/adc.h"
+#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"
+
#include "Modules/General/buttons.h"
+#include "Modules/General/GeneralHardware.h"
+
+#include "StateMachines/Printing/PrintingSTM.h"
#include "control.h"
#include "MillisecTask.h"
-#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"
+
+
+
/******************** Definitions ********************************************/
-#define MAX_TANGO_CONTROL_DEVICES 100
+#define MAX_TANGO_CONTROL_DEVICES 120
/******************** STRUCTURES AND ENUMs ********************************************/
@@ -169,8 +177,16 @@ uint32_t ControlActivityLed( uint32_t Parameter1)
ACTIVITY_RED_LED_OFF; // Heaters indication - all the Heaters OFF
if(FPGA_WD_Occurred == true)
{
+ FPGA_WD_Occurred = false;
+ AlarmHandlingSetAlarm(EVENT_TYPE__FPGA_WATCHDOG_ACTIVATED,true);
+ JobEndReason = JOB_MOTOR_ALARM;
+ SendJobProgress(0.0,0,false, "Hardware Failure Error");
+ AbortJob("FPGA Watchdog Error");
+ ReportWithPackageFilter(FPGAFilter, "FPGA Watchdog Error",__FILE__,__LINE__,0,RpError, 0,0);
+
ACTIVITY_GREEN_LED_ON;
- HWConfigurationInit();
+ FPGA_SetMotorsInit();
+ Motor_ReconfigAllMotors();
}
else
ACTIVITY_GREEN_LED_OFF;