aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules/Control
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-02-20 11:39:04 +0200
committerShlomo Hecht <shlomo@twine-s.com>2020-02-20 11:39:04 +0200
commit57a828b4d11ab8274053ee035c8de8014ddd4ca1 (patch)
treec88e63b5e9019fe67cc3be451e46fbe57efc4a35 /Software/Embedded_SW/Embedded/Modules/Control
parent2d55102532afaccc447c8a28ded8ccb93437683b (diff)
parentd6e2772dd98e6880de14ea12be0ef53bae24f763 (diff)
downloadTango-57a828b4d11ab8274053ee035c8de8014ddd4ca1.tar.gz
Tango-57a828b4d11ab8274053ee035c8de8014ddd4ca1.zip
merge
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules/Control')
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c92
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/control.c62
2 files changed, 88 insertions, 66 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
index 6d92e06c9..fe350d78d 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
@@ -56,10 +56,9 @@
#include "Modules/General/buttons.h"
#include "Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.h"
-#ifdef Use_WHS_Card
#include <Drivers/I2C_Communication/WHS_Card/D_ADS122_PT100/WHS_PT100_ADC.h>
#include <Drivers/I2C_Communication/I2C_Task.h>
-#endif
+#include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h>
Task_Handle Millisecond_Task_Handle;
/******************** Definitions ********************************************/
@@ -229,11 +228,6 @@ 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)
{
@@ -575,6 +569,7 @@ void setRapidPressureRead(bool value)
}
uint16_t PumpCounter = 0;
+uint16_t realtimetest[101];
uint32_t MillisecLowLoop(uint32_t tick)
{
uint8_t Motor_i,Disp_i,temp;
@@ -585,7 +580,7 @@ uint32_t MillisecLowLoop(uint32_t tick)
//test dancers and speed encoders
//check all callback units (state machine waiting for completion of a change)
bool Ten_msTick, Fifty_msTick, Hundred_msTick , m20msecTick,m70msecTick,m90msecTick, Onesecond_Tick,OneMinute_Tick,OneHourTick,Gradient_Tick;
- bool O100Millisecond_Tick,O200Millisecond_Tick,O400Millisecond_Tick,O500Millisecond_Tick,O600Millisecond_Tick;
+ bool O700Millisecond_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 == 40) ?true:false; //eFiftyMillisecond
@@ -593,7 +588,7 @@ uint32_t MillisecLowLoop(uint32_t tick)
m20msecTick = (tick%eHundredMillisecond == 20) ?true:false;
m70msecTick = (tick%eHundredMillisecond == 70) ?true:false;
m90msecTick = (tick%eHundredMillisecond == 90) ?true:false;
- O100Millisecond_Tick = (tick%eOneSecond == 100) ?true:false;
+ O700Millisecond_Tick = (tick%eOneSecond == 700) ?true:false;
O200Millisecond_Tick = (tick%eOneSecond == 200) ?true:false;
O400Millisecond_Tick = (tick%eOneSecond == 400) ?true:false;
O500Millisecond_Tick = (tick%eOneSecond == 500) ?true:false;
@@ -604,14 +599,16 @@ uint32_t MillisecLowLoop(uint32_t tick)
Onesecond_Tick = (tick%eOneSecond == 0) ?true:false;
OneMinute_Tick = (tick%eOneMinute == 0) ?true:false;
OneHourTick = (tick%eOneHour == 0) ?true:false;
+ realtimetest[(tick%1000)/10]++;
//gather Motor data from FPGA
//ROM_IntMasterDisable();
-
+ int StartPT100 = 0;
//Screw_ENC_Velocity_to_DAC(); - for testing the screw enc
-
+ if (Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD)
+ StartPT100 = TEMP_SENSE_ANALOG_DRYER_TEMP1;
if (Ten_msTick)
{
- //Speed_Data = Calculate_Speed_Sensor_Velocity();
+ Speed_Data = Read_Speed_Sensor_TypeII();
//MillisecReadFromTempSensor(Sensor_Read, NULL);
//if (Sensor_Read++ >= MAX_MAIN_CARD_TEMPERATURE_SENSOR_ID) Sensor_Read = 0;
if(Machine_Idle_Mode == true)
@@ -619,39 +616,18 @@ uint32_t MillisecLowLoop(uint32_t tick)
Trigger_HeaterWriting();
}
-#ifdef Use_Head_Card
if(Fifty_msTick)
{
Trigger_PT100_Read();//call every 50mSec (minimum delay 30mSec)
//Set_HeadCard_PT100();//call every 50mSec (minimum delay 30mSec)
}
-#endif
-/*#ifdef Use_Head_Card
- if (m20msecTick) //read odd PT1000
- {
- for (Sensor_i = HEAD_PT100_ZONE_1_0X80_0;Sensor_i < HEAD_PT100_ZONE_2_0X80_1;Sensor_i++)
- {
- //MillisecReadFromI2CTempSensor(Sensor_i, NULL);
- }
- //Set_HeadCard_PT100();
-#warning call chip select replace in I2C
- }
- if (m70msecTick) //read odd PT1000
+ if(m70msecTick)
{
- for (Sensor_i = HEAD_PT100_ZONE_2_0X80_1;Sensor_i < HEAD_PT100_RESERVE_0X8E_1;Sensor_i++)
- {
- //MillisecReadFromI2CTempSensor(Sensor_i, NULL);
- }
- //Set_HeadCard_PT100();
+ AlarmHandling_ControlTrigger(0,0);
}
-#endif */
if (m90msecTick)
{
-#ifdef Use_Head_Card
- for (Sensor_i = TEMP_SENSE_ANALOG_DRYER_TEMP1;Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID;Sensor_i++)
-#else
- for (Sensor_i = 0;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++)
-#endif
+ for (Sensor_i = StartPT100;Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID;Sensor_i++)
{
MillisecReadFromTempSensor(Sensor_i, NULL);
}
@@ -664,11 +640,7 @@ uint32_t MillisecLowLoop(uint32_t tick)
///////////////////////////////////////////////////////////////////
-#ifdef Use_Head_Card
- for (Sensor_i = TEMP_SENSE_ANALOG_DRYER_TEMP1;Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID;Sensor_i++)
-#else
- for (Sensor_i = 0;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++)
-#endif
+ for (Sensor_i = StartPT100;Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID;Sensor_i++)
{
MillisecUpdateTemperatures (Sensor_i,TemperatureSensorRead(Sensor_i));
}
@@ -689,14 +661,11 @@ uint32_t MillisecLowLoop(uint32_t tick)
ADC_TriggerCollection();
}
-#ifdef Use_Head_Card
- //Head_Read_IO_Reg(0x46, HIGH);//READ HEAD CARD LS
-#endif
-
+ Trigger_InputsReading();
}
if (Gradient_Tick)
DispensersCollectionCall();
- if (O100Millisecond_Tick)
+ if (O700Millisecond_Tick)
{
Trigger_Heater_Current_Read();
}
@@ -736,15 +705,11 @@ uint32_t MillisecLowLoop(uint32_t tick)
char Lenstr[160];
static int Counter = 0;
MachineUpdateResponseFunc();
- KeepAliveOneSecondCall();
-#ifdef Use_Head_Card
- TemperatureListString(Lenstr);
- ReportWithPackageFilter(ThreadFilter,Lenstr,__FILE__,__LINE__,(int)Counter++,RpWarning,(int) msec_millisecondCounter,0);
-//#ifdef Use_Head_Card
- for (Sensor_i = TEMP_SENSE_ANALOG_DRYER_TEMP1;Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID;Sensor_i++)
-#else
- for (Sensor_i = 0;Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID;Sensor_i++)
-#endif
+ //KeepAliveOneSecondCall();
+
+ //TemperatureListString(Lenstr);
+ //ReportWithPackageFilter(ThreadFilter,Lenstr,__FILE__,__LINE__,(int)Counter++,RpWarning,(int) msec_millisecondCounter,0);
+ for (Sensor_i = StartPT100;Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID;Sensor_i++)
{
TemperatureCalc[Sensor_i] = MillisecCalculateTemperatures ( Sensor_i);
}
@@ -755,11 +720,12 @@ uint32_t MillisecLowLoop(uint32_t tick)
PressureCalc[Disp_i] = MillisecCalculatePressures(Disp_i);
}
}
-#ifdef Use_WHS_Card
- Trigger_WHS_PT100_Read_All();
- Trigger_WHS_MAX11614_Read_allADC();
-#endif
-
+ Trigger_WHS_PT100_Read_All();
+ Trigger_WHS_MAX11614_Read_allADC();
+ WHS_Blower_Avarege_ORF1(); //drier
+ WHS_Blower_Avarege_ORF3(); //head
+ Trigger_WHSReadAllFanTacho ();
+ WHS_Start_Blower_Control_Closed_Loop ();
}
if (OneMinute_Tick)
{
@@ -778,8 +744,10 @@ uint32_t MillisecLowLoop(uint32_t tick)
}*/
midtankDisplay = 1-midtankDisplay;
Gas_PPM_Info = Calculate_Gas_Power_Consumption();
- Trigger_WHS_MAX11614_Read_allADC();
-
+ //Trigger_WHS_MAX11614_Read_allADC();
+#ifdef CONTROL_DEBUG
+ ResetControlTime();
+#endif
}
if (OneHourTick)
{
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c
index e093815a9..bea68e314 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/control.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c
@@ -66,8 +66,9 @@
+#define DURATION_LIMIT 6
/******************** Definitions ********************************************/
-#define MAX_TANGO_CONTROL_DEVICES 120
+#define MAX_TANGO_CONTROL_DEVICES 100
/******************** STRUCTURES AND ENUMs ********************************************/
@@ -108,6 +109,7 @@ ControlDeviceStruc ControlArray[MAX_TANGO_CONTROL_DEVICES];
uint32_t ControlDatalog[MAX_TANGO_CONTROL_DEVICES];
#define MAX_BACKLOG_SIZE 100
uint16_t ControlBacklog[MAX_BACKLOG_SIZE]={0};
+uint32_t ControlTime[MAX_TANGO_CONTROL_DEVICES]={0};
uint16_t backlogindex = 0;
uint32_t Control_timerBase = TIMER0_BASE; //Timer handle
uint32_t MaxHighDevices = 0xFF;
@@ -382,6 +384,7 @@ uint32_t AddControlCallback(char* Name, ControlCBFunction Callback, uint32_t Ct
if (deviceId == 0xFF)
{
LOG_ERROR(deviceId, "Add Callback failed");
+ AlarmHandlingSetAlarm(EVENT_TYPE__FPGA_WATCHDOG_ACTIVATED,true);
return 0xFF;
}
key = GateMutex_enter(gateControlDB);
@@ -556,22 +559,44 @@ uint32_t ControlLoop(uint32_t tick)
return OK;
}
+uint32_t prevtick = 0;
+#ifdef CONTROL_DEBUG
+void ResetControlTime(void)
+{
+ memset(ControlTime,0,sizeof(ControlTime));
+}
+#endif
uint32_t ControlLowLoop(uint32_t tick)
{
+ uint32_t skipped_ticks = 0;
+#ifdef CONTROL_DEBUG
+ uint32_t tempp,tempq,delta;
+ uint32_t sys_ticks_start = msec_millisecondCounter,sys_ticks_end,max = 0,dev = 0;
+#endif
+ if (tick-prevtick>1)
+ {
+ skipped_ticks = tick-prevtick-1;
+ //if (tick-prevtick>10)
+ // Report("ControlLowLoop skipped",__FILE__,tick,(int)prevtick,RpWarning,(int)skipped_ticks,0);
+ }
+ prevtick = tick;
+
for (ControlLowDevice_i = 0; ControlLowDevice_i < MAX_TANGO_CONTROL_DEVICES;ControlLowDevice_i++)
{
if (ControlArray[ControlLowDevice_i].ControlActive)
{
- if (tick == ControlArray[ControlLowDevice_i].StartTick)
+ if (tick - ControlArray[ControlLowDevice_i].StartTick<=skipped_ticks)
continue;
if (ControlArray[ControlLowDevice_i].ControlTiming == eOneMillisecond)
continue;
- if (((tick - ControlArray[ControlLowDevice_i].StartTick)%ControlArray[ControlLowDevice_i].ControlTiming)==0) // run the control on exact intervals
+ if (((tick - ControlArray[ControlLowDevice_i].StartTick)%ControlArray[ControlLowDevice_i].ControlTiming)<=skipped_ticks) // run the control on exact intervals
{
ControlBacklog[backlogindex]=ControlLowDevice_i;
if ( ++backlogindex >= MAX_BACKLOG_SIZE)
backlogindex = 0;
-
+#ifdef CONTROL_DEBUG
+ tempp = HibernateRTCSSGet();
+#endif
if(ControlArray[ControlLowDevice_i].ControlDataReadPtr)
ControlDatalog[ControlLowDevice_i] = ControlArray[ControlLowDevice_i].ControlDataReadPtr( ControlArray[ControlLowDevice_i].Parameter1);
else
@@ -580,9 +605,38 @@ uint32_t ControlLowLoop(uint32_t tick)
ControlArray[ControlLowDevice_i].ControlCallbackPtr(ControlArray[ControlLowDevice_i].IfIndex, ControlDatalog[ControlLowDevice_i]);
else
LOG_ERROR (ControlLowDevice_i, "Invalid callback ptr");
+#ifdef CONTROL_DEBUG
+ tempq = HibernateRTCSSGet();
+ if (tempq < tempp)
+ {
+ delta = (32768 - tempp) + tempq + 1;
+ }
+ else
+ delta = tempq - tempp;
+ if (ControlTime[ControlLowDevice_i]<delta)
+ {
+ ControlTime[ControlLowDevice_i] = delta;
+ }
+#endif
}
} //if control active
} //for
+#ifdef CONTROL_DEBUG
+ sys_ticks_end= msec_millisecondCounter;
+ if (sys_ticks_end-sys_ticks_start > DURATION_LIMIT)
+ {
+ Report("ControlLowLoop long",__FILE__,sys_ticks_end-sys_ticks_start,(int)sys_ticks_end,RpWarning,(int)sys_ticks_start,0);
+ for (ControlLowDevice_i = 0; ControlLowDevice_i < MAX_TANGO_CONTROL_DEVICES;ControlLowDevice_i++)
+ {
+ if (ControlTime[ControlLowDevice_i]>max)
+ {
+ max = ControlTime[ControlLowDevice_i];
+ dev = ControlLowDevice_i;
+ }
+ }
+ //Report(ControlArray[dev].Name,__FILE__,__LINE__,dev,RpWarning,max,0);
+ }
+#endif
//ROM_IntMasterEnable();
return OK;