aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2019-03-06 13:27:36 +0200
committerShlomo Hecht <shlomo@twine-s.com>2019-03-06 13:27:36 +0200
commitd95329065734fec34e0e3763cf4b6dee428499d2 (patch)
treebfdb162ff3d9126e0223ba3c8df6057559569a0f /Software/Embedded_SW/Embedded/Modules
parentb3cfecea7d2493776db2f03ee48b06436029d438 (diff)
parente779c5128f45ccf3e45fbe304da496d4b2f89cb4 (diff)
downloadTango-d95329065734fec34e0e3763cf4b6dee428499d2.tar.gz
Tango-d95329065734fec34e0e3763cf4b6dee428499d2.zip
merge
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules')
-rw-r--r--Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c31
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c169
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h8
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c12
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/process.c21
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c191
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c33
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c16
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Heater.c7
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c10
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c17
14 files changed, 421 insertions, 100 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
index f4da887c7..94c7614d1 100644
--- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
+++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
@@ -124,8 +124,8 @@ AlarmStatusItem AlarmState[MAX_SYSTEM_ALARMS];
* or static variable whose declaration follows the pragma directive (only if using it without #define for example: #pragma location = MOTOR_MAP_IN_FLASH)
* The variables must be declared either __no_init or const!
*/
-//AlarmHandlingItemStruc *AlarmItem;
-const AlarmHandlingItemStruc AlarmItem[MAX_SYSTEM_ALARMS]={
+AlarmHandlingItemStruc *AlarmItem;
+const AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={
{eHundredMillisecond,LimitSwitchAlarm,LimitSwitchAlarmEmpty_1,0,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_1_EMPTY,"Dispenser 1 Empty"},
{eHundredMillisecond,LimitSwitchAlarm,LimitSwitchAlarmEmpty_2,1,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_2_EMPTY,"Dispenser 2 Empty"},
{eHundredMillisecond,LimitSwitchAlarm,LimitSwitchAlarmEmpty_3,2,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_3_EMPTY,"Dispenser 3 Empty"},
@@ -270,15 +270,15 @@ const AlarmHandlingItemStruc AlarmItem[MAX_SYSTEM_ALARMS]={
{ eOneSecond, MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_UNDERVOLTAGE ," MotorDyeingHeadCleaningUnderVoltage " }, /* 5038 */
{ eOneSecond, MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_UNDERVOLTAGE ," MotorDyeingHeadCleaningHeadUnderVoltage " }, /* 5042 */
- { eOneSecond, CurrentAlarm, HEAD_ZONE_1_6 , HEAD_ZONE_1_6 , 312 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_1_CURRENT_OUT_OF_RANGE ," Head Zone 1 Heater Current Out Of Range " }, /* 5018 */
- { eOneSecond, CurrentAlarm, HEAD_ZONE_2 , HEAD_ZONE_2 , 187 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_2_CURRENT_OUT_OF_RANGE ," Head Zone 2 Heater Current Out Of Range " }, /* 5019 */
- { eOneSecond, CurrentAlarm, HEAD_ZONE_3 , HEAD_ZONE_3 , 187 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_3_CURRENT_OUT_OF_RANGE ," Head Zone 3 Heater Current Out Of Range " }, /* 5020 */
- { eOneSecond, CurrentAlarm, HEAD_ZONE_4 , HEAD_ZONE_4 , 312 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_4_CURRENT_OUT_OF_RANGE ," Head Zone 4 Heater Current Out Of Range " }, /* 5021 */
- { eOneSecond, CurrentAlarm, HEAD_ZONE_5 , HEAD_ZONE_5 , 312 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_5_6_CURRENT_OUT_OF_RANGE ," Head Zone 5-6 Heater Current Out Of Range " }, /* 5022 */
- { eOneSecond, CurrentAlarm, MIXCHIP , MIXCHIP , 187 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__MIXER_CURRENT_OUT_OF_RANGE ," Mixer Heater Current Out Of Range " }, /* 6004 */
- { eOneSecond, CurrentAlarm, DRYER_CURRENT_1, DRYER_CURRENT_1, 1 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DRYER_HEATERS_ZONE_1_CURRENT_OUT_OF_RANGE ," Drier Heater 1 Current Out Of Range " }, /* 6004 */
- { eOneSecond, CurrentAlarm, DRYER_CURRENT_2, DRYER_CURRENT_2, 1 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DRYER_HEATERS_ZONE_2_CURRENT_OUT_OF_RANGE ," Drier Heater 2 Current Out Of Range " }, /* 6004 */
- {eOneSecond,DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Safety,0xFF,0,EVENT_TYPE__DYEING_HEAD_THERMAL_CUTOFF,"Dyeing head Thermal Cut-Off"},
+// { eOneSecond, CurrentAlarm, HEAD_ZONE_1 , HEAD_ZONE_1 , 312 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_1_CURRENT_OUT_OF_RANGE ," Head Zone 1 Heater Current Out Of Range " }, /* 5018 */
+// { eOneSecond, CurrentAlarm, HEAD_ZONE_2 , HEAD_ZONE_2 , 187 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_2_CURRENT_OUT_OF_RANGE ," Head Zone 2 Heater Current Out Of Range " }, /* 5019 */
+// { eOneSecond, CurrentAlarm, HEAD_ZONE_3 , HEAD_ZONE_3 , 187 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_3_CURRENT_OUT_OF_RANGE ," Head Zone 3 Heater Current Out Of Range " }, /* 5020 */
+// { eOneSecond, CurrentAlarm, HEAD_ZONE_4 , HEAD_ZONE_4 , 312 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_4_CURRENT_OUT_OF_RANGE ," Head Zone 4 Heater Current Out Of Range " }, /* 5021 */
+// { eOneSecond, CurrentAlarm, HEAD_ZONE_5_6 , HEAD_ZONE_5_6 , 312 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_ZONE_5_6_CURRENT_OUT_OF_RANGE ," Head Zone 5-6 Heater Current Out Of Range " }, /* 5022 */
+// { eOneSecond, CurrentAlarm, MIXCHIP , MIXCHIP , 187 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__MIXER_CURRENT_OUT_OF_RANGE ," Mixer Heater Current Out Of Range " }, /* 6004 */
+// { eOneSecond, CurrentAlarm, DRYER_CURRENT_1, DRYER_CURRENT_1, 1 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DRYER_HEATERS_ZONE_1_CURRENT_OUT_OF_RANGE ," Drier Heater 1 Current Out Of Range " }, /* 6004 */
+// { eOneSecond, CurrentAlarm, DRYER_CURRENT_2, DRYER_CURRENT_2, 1 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 2 , EVENT_TYPE__DRYER_HEATERS_ZONE_2_CURRENT_OUT_OF_RANGE ," Drier Heater 2 Current Out Of Range " }, /* 6004 */
+// {eOneSecond,DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Safety,0xFF,0,EVENT_TYPE__DYEING_HEAD_THERMAL_CUTOFF,"Dyeing head Thermal Cut-Off"},
{eOneSecond,DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_BREAK,"Thread Break"},
{eOneSecond,DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER,"Thread Feeder Tension Control Failure"},
@@ -330,9 +330,10 @@ void AlarmHandlingInit(void)
AlarmState[Alarm_i].EventPtr = NULL;
}
- //AlarmItem = (AlarmHandlingItemStruc *)MOTOR_MAP_IN_FLASH;
- //ReadAppAndProgram(AlarmItem, sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS, HardCodedAlarmItem);
- //LOG_ERROR(AlarmItem[2].EventName,"Flash Test");
+ AlarmItem = (AlarmHandlingItemStruc *)ALARM_MAP_IN_FLASH;
+ EraseFlashSection(ALARM_MAP_IN_FLASH,sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS);
+ ReadAppAndProgram(AlarmItem, sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS, HardCodedAlarmItem);
+ LOG_ERROR(AlarmItem[2].EventName,"Flash Test");
return;
}
@@ -394,7 +395,7 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever
case DEBUG_LOG_CATEGORY__Critical:
case DEBUG_LOG_CATEGORY__Safety:
- watchdogCriticalAlarm = true;
+// watchdogCriticalAlarm = true;
LOG_ERROR(AlarmId,"Critical Alarm - Watchdog activated to reset hardware");
/*
//stop all dispensers
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
index 968e52d7d..db6624fd4 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
@@ -40,6 +40,13 @@
#include "modules/thread/thread_ex.h"
#include "modules/ids/ids_ex.h"
+#include "drivers/Flash_Memory/Flash_Memory.h"
+#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"
Task_Handle Millisecond_Task_Handle;
@@ -147,7 +154,11 @@ void MillisecStop(void)
MillisecRestart = false;
ADCAcquireStop();
}
+#ifdef HUNDRED_MICROSECONDS_DANCER_READ
+#define HIGH_TASK_FREQUENCY 12000
+#else
#define HIGH_TASK_FREQUENCY 120000
+#endif
void MillisecStart(void)
{
MillisecRestart = true;
@@ -164,6 +175,8 @@ void OneMilliSecondMillisecInterrupt(UArg arg0)
{
MillisecMessageStruc MillisecMessage;
uint32_t Tenmsec_millisecondCounter = 0;
+#ifndef HUNDRED_MICROSECONDS_DANCER_READ
+
ROM_IntMasterDisable();
ROM_TimerIntClear(Millisec_timerBase, TIMER_TIMA_TIMEOUT); // Clear the timer interrupt
if (MillisecRestart == true)
@@ -176,6 +189,7 @@ void OneMilliSecondMillisecInterrupt(UArg arg0)
ROM_IntMasterEnable();
return;
}
+#endif
if (msec_millisecondCounter%10 == 0)
{
Tenmsec_millisecondCounter = msec_millisecondCounter;
@@ -420,10 +434,13 @@ uint32_t MillisecLoop(uint32_t tick)
}
}
}
+#ifdef HUNDRED_MICROSECONDS_DANCER_READ
+ SaveLogData();
+#else
Dancer_Data[FEEDER_DANCER] = Read_Dancer_Position(FEEDER_DANCER);
Dancer_Data[POOLER_DANCER] = Read_Dancer_Position(POOLER_DANCER);
Dancer_Data[WINDER_DANCER] = Read_Dancer_Position(WINDER_DANCER);
-
+#endif
return OK;
}
uint32_t MillisecLowLoop(uint32_t tick)
@@ -489,10 +506,10 @@ uint32_t MillisecLowLoop(uint32_t tick)
if (isMotorConfigured(Motor_i))
MotorGetStatusFromFPGA(Motor_i);
}
- /* for (Heater_i = 0;Heater_i < NUM_OF_HEATERS;Heater_i++)
+ for (Heater_i = 0;Heater_i < NUM_OF_HEATERS;Heater_i++)
{
- Read_Head_MixChip_Heaters_Current(Heater_i);
- }*/
+ Read_Heaters_Current(Heater_i);
+ }
}
if (OneMinute_Tick)
{
@@ -600,3 +617,147 @@ uint32_t getDrawerFansStatus(void)
{
return DrawerFansStatus;
}
+#ifdef HUNDRED_MICROSECONDS_DANCER_READ
+uint32_t DancerData[NUM_OF_DANCERS];
+uint32_t Control_Read_Dancer_Position(HardwareDancerType DancerId, uint32_t Parameter1, uint32_t Parameter2)
+{
+ return DancerData[DancerId];
+}
+uint32_t dancer1;
+uint32_t dancer2;
+uint32_t dancer3;
+uint32_t dancer1sum;
+uint32_t dancer2sum;
+uint32_t dancer3sum;
+uint32_t dancer_count;
+/*-----------------------*/
+uint32_t StoreBuffer[2][128];
+//char * StoreBuffer[2][512];
+/*-----------------------*/
+int StoreBufferId = 0;
+int StoreBufferCounter=0;
+uint32_t BufferCounter=0xEEEEEEEE;
+bool storeData=false;
+uint8_t len=0;
+void HundredMicroTimerInterrupt(int ARG0)
+{
+ ROM_IntMasterDisable();
+ ROM_TimerIntClear(Millisec_timerBase, TIMER_TIMA_TIMEOUT); // Clear the timer interrupt
+ if (MillisecRestart == true)
+ {
+ ROM_TimerLoadSet(Millisec_timerBase, TIMER_A,HIGH_TASK_FREQUENCY);
+ }
+ else
+ {
+ ROM_TimerDisable(Millisec_timerBase,TIMER_A);
+ ROM_IntMasterEnable();
+ return;
+ }
+ dancer1 = Read_Dancer_Position(WINDER_DANCER);
+ dancer2 = Read_Dancer_Position(POOLER_DANCER);
+ dancer3 = Read_Dancer_Position(FEEDER_DANCER);
+//data store - logging
+//double buffer switch
+ /*-----------------------*/
+ if (StoreBufferCounter>125)
+ //if (StoreBufferCounter>490)
+ /*-----------------------*/
+ {
+ StoreBufferId = 1-StoreBufferId;//switch buffer
+ StoreBufferCounter=0;
+ storeData = true;
+ }
+//double buffer initialize
+ /*-----------------------*/
+ if (StoreBufferCounter==0)
+ {
+ StoreBuffer[StoreBufferId][StoreBufferCounter] = BufferCounter++;
+ StoreBufferCounter++;
+ }
+ /*-----------------------*/
+//store data
+ /*-----------------------*/
+ StoreBuffer[StoreBufferId][StoreBufferCounter++] = dancer1;
+ StoreBuffer[StoreBufferId][StoreBufferCounter++] = dancer2;
+ StoreBuffer[StoreBufferId][StoreBufferCounter++] = dancer3;
+ /*-----------------------*/
+ //len = usprintf(&StoreBuffer[StoreBufferId][StoreBufferCounter], "\r\n%d %d %d", dancer1[dancer_count],dancer2[dancer_count],dancer3[dancer_count]);
+ //StoreBufferCounter+=(len+1);
+ /*-----------------------*/
+ dancer1sum+=dancer1;
+ dancer2sum+=dancer2;
+ dancer3sum+=dancer3;
+ dancer_count++;
+
+
+ if (dancer_count == 10)
+ {
+ DancerData[WINDER_DANCER] = dancer1sum/dancer_count;
+ DancerData[POOLER_DANCER] = dancer2sum/dancer_count;
+ DancerData[FEEDER_DANCER] = dancer3sum/dancer_count;
+ dancer_count = 0;
+ dancer1sum = 0;
+ dancer2sum = 0;
+ dancer3sum = 0;
+ OneMilliSecondMillisecInterrupt(ARG0);
+ }
+ ROM_IntMasterEnable();
+ return ;
+
+}
+char MillisecPath[50] = "0://SysInfo//Millisec.txt";
+FIL *FileHandle;
+void SaveLogData(void)
+{
+ uint32_t WrittenBytes = 0;
+ int BufferID = 1- StoreBufferId;
+
+ if (storeData == true)
+ {
+ if (FileHandle)
+ {
+ f_write(FileHandle,StoreBuffer[BufferID],512,&WrittenBytes );
+ storeData = false;
+ }
+ }
+}
+void MillisecLogInit(void)
+{
+ FRESULT Fresult = FR_OK;
+ ROM_IntMasterDisable();
+ BufferCounter = 0;
+ FileHandle = my_malloc(sizeof(FIL));
+ if (FileHandle == 0)
+ Fresult = FR_DENIED;
+ else
+ Fresult = f_open(FileHandle,MillisecPath,FA_WRITE | FA_OPEN_ALWAYS);
+ ROM_IntMasterEnable();
+ return ;
+
+}
+void MillisecLogClose(void)
+{
+ FRESULT Fresult = FR_OK;
+ if (FileHandle == 0)
+ Fresult = FR_DENIED;
+ else
+ {
+ storeData = false;
+ ROM_IntMasterDisable();
+ Fresult = f_close(FileHandle);
+ my_free(FileHandle);
+ FileHandle = 0;
+ ROM_IntMasterEnable();
+ }
+ return ;
+
+}
+#endif
+void MillisecInterrupt(UArg arg0)
+{
+#ifdef HUNDRED_MICROSECONDS_DANCER_READ
+ HundredMicroTimerInterrupt(arg0);
+#else
+ OneMilliSecondMillisecInterrupt(arg0);
+#endif
+}
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h
index 517716c08..61c7df7ee 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.h
@@ -36,6 +36,14 @@ void MillisecInit(void);
void MillisecStop(void);
void MillisecStart(void);
+#ifdef HUNDRED_MICROSECONDS_DANCER_READ
+void SaveLogData(void);
+void MillisecLogInit(void);
+void MillisecLogClose(void);
+
+#endif
+
+
extern bool watchdogCriticalAlarm;
extern Task_Handle Millisecond_Task_Handle;
diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
index 580648842..97bb2e245 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
@@ -60,7 +60,9 @@ uint32_t HWConfigurationInit(void)
uint32_t status = OK;
UploadHardwareConfigurationRequest* UploadRequest;
+ GeneralHwReady = false;
Control_WD(ENABLE,250);
+
Fresult = f_mkdir(SW_INFO_DIR);
if ((Fresult == FR_OK)||(Fresult == FR_EXIST))
{
@@ -85,6 +87,7 @@ uint32_t HWConfigurationInit(void)
if (status ==OK)
{
upload_hardware_configuration_request__free_unpacked(UploadRequest,NULL);
+ EraseFlashSection(GENHWCFG_MAP_IN_FLASH,Bytes);
ReadAppAndProgram(GENHWCFG_MAP_IN_FLASH, Bytes, buffer);
}
else
@@ -232,9 +235,11 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest)
if (request->n_winders == 1)
status += InternalWinderConfigMessage(request->winders);
status += MotorsInit();
-
+
if (request->n_motors < NUM_OF_MOTORS)
{
+ //EraseFlashSection(GENHWCFG_MAP_IN_FLASH + 0x2000,sizeof(HardwareMotor)*request->n_motors);
+
for (Motor_i = 0; Motor_i < request->n_motors ; Motor_i++)
status += MotorsConfigMessage(request->motors[Motor_i]);
}
@@ -259,6 +264,8 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest)
//StoreDancerConfigMessage();
if (request->n_pidcontrols <= HARDWARE_PID_CONTROL_TYPE__Dispenser8)
{
+ IDS_DispenserControlInit();
+
for (PID_i = 0; PID_i < request->n_pidcontrols ; PID_i++)
{
if (request->pidcontrols[PID_i]->hardwarepidcontroltype <= HARDWARE_PID_CONTROL_TYPE__MixerHeater)
@@ -338,6 +345,9 @@ uint32_t HWConfigurationFunc(MessageContainer* requestContainer)
UploadHardwareConfigurationRequest* UploadRequest = upload_hardware_configuration_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
+ GeneralHwReady = false;
+ Control_WD(ENABLE,250);
+
status = HWConfiguration(UploadRequest);
responseContainer = createContainer(MESSAGE_TYPE__UploadHardwareConfigurationResponse, requestContainer->token, true, &response, &upload_hardware_configuration_response__pack, &upload_hardware_configuration_response__get_packed_size);
diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.c b/Software/Embedded_SW/Embedded/Modules/General/process.c
index dd9f8deae..458bb35f2 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/process.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/process.c
@@ -38,11 +38,29 @@ int32_t tableindex = 0;
char ProcessParamsConfigPath[50] = "0://SysInfo//ProcessP.cfg";
ProcessParameters ProcessParametersKeep;
+void HeatersStopControlOnHeatersOff(ProcessParameters* ProcessParams)
+{
+ uint32_t temp_sum = 0;
+ temp_sum += ProcessParams->dryerzone1temp;
+ temp_sum += ProcessParams->dryerzone2temp;
+ temp_sum += ProcessParams->dryerzone3temp;
+ temp_sum += ProcessParams->mixertemp;
+ temp_sum += ProcessParams->headzone1temp;
+ temp_sum += ProcessParams->headzone2temp;
+ temp_sum += ProcessParams->headzone3temp;
+ temp_sum += ProcessParams->headzone4temp;
+ temp_sum += ProcessParams->headzone5temp;
+ temp_sum += ProcessParams->headzone6temp;
+ if (temp_sum == 0)// heating off
+ {
+ HeatersControlStop();
+ REPORT_MSG(temp_sum,"Heating control off - temperatures off");
+ }
+}
uint32_t HandleProcessParameters(ProcessParameters* ProcessParams)
{
uint32_t status = 0;
-
if (ProcessParams==NULL)
{
status = ERROR_CODE__INVALID_PARAMETER;
@@ -145,6 +163,7 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams)
HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, false,
ProcessParams->dryerzone3temp);
*/
+ HeatersStopControlOnHeatersOff(ProcessParams);
dyeingspeed = ProcessParams->dyeingspeed;
dryerbufferlength = ProcessParams->dryerbufferlength;
mininkuptake = ProcessParams->mininkuptake;
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h
index 8a77f98a2..0b65d9e5e 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h
@@ -27,4 +27,5 @@ void Heaters_SetOperationLimits(int acheatersloweroperationlimit,int acheatersu
uint32_t HeatersEnd(void);
+void HeatersControlStop(void);
uint32_t Heaters_Init(void);
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c
index 6fbfa5884..7c4bb1761 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c
@@ -29,7 +29,7 @@
/******************** STRUCTURES AND ENUMs ********************************************/
-typedef enum {
+/*typedef enum {
HeatersInitialState,
HeatersInit,
HeatersControlledOp,
@@ -43,7 +43,7 @@ typedef enum {
HeatersOverHeat,
HeatersOnTest
}HEATERS_EVENTS_ENUM;
-
+*/
/******************** GLOBAL PARAMETERS ********************************************/
HeaterPIDControlConfig HeaterControl[MAX_HEATERS_NUM] = {0,0,0,0,0,0,0,0,0,0,0,0};
bool AcHeaterConfigured[MAX_AC_HEATERS] = {0,0,0};
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
index bbf3822f0..3f62fc3b6 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
@@ -17,12 +17,13 @@
#include "PMR/Diagnostics/HeaterType.pb-c.h"
#include "PMR/Diagnostics/HeaterState.pb-c.h"
#include "PMR/common/MessageContainer.pb-c.h"
-#include "PMR/Diagnostics/EventType.pb-c.h"
+#include "PMR/Diagnostics/EventType.pb-c.h"
#include "../AlarmHandling/AlarmHandling.h"
#include "../control/control.h"
#include "../control/pidalgo.h"
+#include <ti/sysbios/knl/Task.h>
#include <driverlib/timer.h>
#include <inc/hw_ints.h>
#include <inc/hw_memmap.h>
@@ -89,7 +90,7 @@ uint32_t SecondDryerHeaterMaxTempControl = 0xFF;
//old uint32_t HeaterId2PT100Id[MAX_HEATERS_NUM] = {DRYER_AIR_PT100,DRYER_MAIN_PT100,DRYER_SECONDARY_PT100,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,TEMP_SENSE_ANALOG_DYEINGH_TEMP5,TEMP_SENSE_ANALOG_MIXCHIP_TEMP,TEMP_SENSE_AN_ENCLOSURETEMP3};
uint32_t HeaterId2PT100Id[MAX_HEATERS_NUM] = {DRYER_AIR_PT100,DRYER_MAIN_PT100,DRYER_SECONDARY_PT100,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,TEMP_SENSE_ANALOG_DYEINGH_TEMP5,HEAD6_PT100,MIXER_PT100};
-HEATERS_CURRENT HeaterId2CurrentId[MAX_HEATERS_NUM] = {NUM_OF_HEATERS,DRYER_CURRENT_1,DRYER_CURRENT_2,HEAD_ZONE_1_6,HEAD_ZONE_2,HEAD_ZONE_3,HEAD_ZONE_4,HEAD_ZONE_5,HEAD_ZONE_1_6,MIXCHIP};
+HEATERS_CURRENT HeaterId2CurrentId[MAX_HEATERS_NUM] = {NUM_OF_HEATERS,DRYER_CURRENT_1,DRYER_CURRENT_2,HEAD_ZONE_1,HEAD_ZONE_2,HEAD_ZONE_3,HEAD_ZONE_4,HEAD_ZONE_5_6,HEAD_ZONE_5_6,MIXCHIP};
uint32_t DryerInternalPT100Id = DRYER_AIR_PT100;
bool HeatersRestart = false;
@@ -276,6 +277,9 @@ uint32_t HeatersSingleHeaterEnd(HardwarePidControlType HeaterId)
HeaterReady[HeaterId] = true;
}
+ AlarmHandlingSetAlarm(HeaterUnderEventType[HeaterId], false);
+ AlarmHandlingSetAlarm(HeaterUnderEventType_B[HeaterId], false);
+ AlarmHandlingSetAlarm(HeaterEventType[HeaterId], false);
return status;
}
@@ -308,6 +312,30 @@ void HeatersStartControlTimer (void)
Report("HeatersStartControlTimer ", __FILE__,__LINE__,0, RpMessage, 0, 0);
return;
}
+/***************************************************************************************************/
+int GetFilteredHeaterRead(int HeaterId)
+{
+#define MAX_FILTER 12
+ int i,maxread = -999999,minread = 999999,sum=0;
+ int FilteredRead[MAX_FILTER];
+ for (i = 0; i < MAX_FILTER;i++)
+ {
+ FilteredRead[i] = TemperatureSensorRead(HeaterId2PT100Id[HeaterId]);
+ Task_sleep(1);
+ }
+ for (i = 0; i < MAX_FILTER;i++)
+ {
+ if (FilteredRead[i]<minread)
+ minread = FilteredRead[i];
+ if (FilteredRead[i]>maxread)
+ maxread = FilteredRead[i];
+ sum+=FilteredRead[i];
+ }
+ sum -= minread;
+ sum -= maxread;
+ Report("GetFilteredHeaterRead ", __FILE__,HeaterId,sum, minread, maxread, 0);
+ return (sum/(MAX_FILTER-2));
+}
/**************************************************************************************
* HeaterCommandRequestMessage
* called by: Communication from host
@@ -364,11 +392,17 @@ uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature)
}
else if ((HeaterState == HEATER_ON)&& (OnOff == HEATER_ON)) //set temperature
{
- if (abs(HeaterPIDConfig[HeaterId].m_SetParam - HeaterCmd[HeaterId].targettemperatue)>0.5) //#bug 221
+ HeaterPIDConfig[HeaterId].m_SetParam = HeaterCmd[HeaterId].targettemperatue;
+ /*/if (abs(HeaterPIDConfig[HeaterId].m_SetParam - HeaterCmd[HeaterId].targettemperatue)>0.5) //#bug 221
{
PrepareHeater(HeaterId,Temperature); //prepare the heaters control info
}
- HeaterPIDConfig[HeaterId].m_SetParam = HeaterCmd[HeaterId].targettemperatue;
+ else
+ {
+ HeaterPreviousRead[HeaterId] = GetFilteredHeaterRead(HeaterId);//
+ LOG_ERROR(HeaterId,"ReRead Heater Temp");
+ }*/
+ PrepareHeater(HeaterId,Temperature); //prepare the heaters control info
// if the heater is not on return (?).
//set the target operation temperature
//set the heater operation mode to fast heating - depended on the current temperature
@@ -392,6 +426,88 @@ uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature)
* called by: Communication from host
* initialized all global data
*/
+void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue)
+{
+ if (ControlIdtoHeaterId [HeaterId] == 0xFF)
+ {
+ ControlIdtoHeaterId [HeaterId] = AddControlCallback( HeaterControlCBFunction, Frequency/*eOneSecond*/,TemperatureSensorRead,(IfTypeHeaters*0x100+HeaterId),DryerInternalPT100Id,0);
+ //HeaterPreviousRead[HeaterId] = TemperatureSensorRead(DryerInternalPT100Id);
+ HeaterPreviousRead[HeaterId] = GetFilteredHeaterRead(HeaterId);//
+ Report("PrepareHeater Read", __FILE__,__LINE__,HeaterId, SetTemperatue, HeaterPreviousRead[HeaterId], 0);
+ HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] = GetFilteredHeaterRead(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain);//TemperatureSensorRead(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]);
+ HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary] = GetFilteredHeaterRead(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary);// = TemperatureSensorRead(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]);
+ }
+ //turn all alarms off
+ AlarmHandlingSetAlarm(HeaterUnderEventType[HeaterId], false);
+ AlarmHandlingSetAlarm(HeaterUnderEventType_B[HeaterId], false);
+ AlarmHandlingSetAlarm(HeaterEventType[HeaterId], false);
+
+ if (ControlIdtoMaxHeaterId [HeaterId] == 0xFF)
+ ControlIdtoMaxHeaterId [HeaterId] = AddControlCallback( DcHeaterMaxTempCBFunction, eOneSecond,TemperatureSensorRead,(IfTypeHeaters*0x100+HeaterId),HeaterId2PT100Id[HeaterId],0);
+
+ Enable_Reading_Heaters_Current(HeaterId2CurrentId[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]);
+ Enable_Reading_Heaters_Current(HeaterId2CurrentId[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]);
+
+ HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, 0);
+ HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, 0);
+ if (MainDryerHeaterMaxTempControl == 0xFF)
+ MainDryerHeaterMaxTempControl = AddControlCallback( HeaterMaxTempCBFunction, eHundredMillisecond,TemperatureSensorRead,(IfTypeHeaters*0x100+HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain),HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain],0);
+ if (SecondDryerHeaterMaxTempControl == 0xFF)
+ SecondDryerHeaterMaxTempControl = AddControlCallback( HeaterMaxTempCBFunction, eHundredMillisecond,TemperatureSensorRead,(IfTypeHeaters*0x100+HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary),HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary],0);
+ //InitialHeating = true;
+ HeaterReady[HeaterId] = false;
+ if (BlowerCfg.enabled == true)
+ {
+ Turn_the_Blower_On();//Turn on with the Default_Voltage
+ if (BlowerCfg.heatingvoltage)
+ Control_Voltage_To_Blower(BlowerCfg.heatingvoltage);
+ else
+ Control_Voltage_To_Blower(BlowerCfg.voltage-500);
+
+ }
+ if (SetTemperatue)
+ {
+ Control_Dryer_Fan(START,75);//use START or STOP, 0 - 100%
+ }
+}
+/*
+ * PrepareHeater
+ * called by: Communication from host
+ * initialized all global data
+ */
+int PrepareDCHeater(int HeaterId, uint32_t Frequency, uint32_t SetTemperatue)
+{
+ if (ControlIdtoHeaterId [HeaterId] == 0xFF)
+ ControlIdtoHeaterId [HeaterId] = AddControlCallback( DCHeaterControlCBFunction, Frequency/*eOneSecond*/,TemperatureSensorRead,(IfTypeHeaters*0x100+HeaterId),HeaterId2PT100Id[HeaterId],0);
+ //HeaterPIDConfig[HeaterId].m_params.dt *=10;
+ //DCInitialHeating[HeaterId] = true;
+ HeaterReady[HeaterId] = false;
+ HeaterRecalculateHeaterParams(HeaterId, 0);
+
+ //turn all alarms off
+ AlarmHandlingSetAlarm(HeaterUnderEventType[HeaterId], false);
+ AlarmHandlingSetAlarm(HeaterUnderEventType_B[HeaterId], false);
+ AlarmHandlingSetAlarm(HeaterEventType[HeaterId], false);
+
+ Enable_Reading_Heaters_Current(HeaterId2CurrentId[HeaterId]);
+
+ HeaterPreviousRead[HeaterId] = GetFilteredHeaterRead(HeaterId);//TemperatureSensorRead(HeaterId2PT100Id[HeaterId]);
+ if((abs(HeaterPreviousRead[HeaterId]-MINIMUM_HEATER_READ)<1)||(abs(MAXIMUM_HEATER_READ-HeaterPreviousRead[HeaterId])<10))
+ {
+ LOG_ERROR (HeaterId,"PT100 not working properly");
+ return ERROR;
+ }
+ Report("PrepareHeater Read", __FILE__,__LINE__,HeaterId, SetTemperatue, HeaterPreviousRead[HeaterId], 0);
+ if (ControlIdtoMaxHeaterId [HeaterId] == 0xFF)
+ ControlIdtoMaxHeaterId [HeaterId] = AddControlCallback( DcHeaterMaxTempCBFunction, eOneSecond,TemperatureSensorRead,(IfTypeHeaters*0x100+HeaterId),HeaterId2PT100Id[HeaterId],0);
+
+ return OK;
+}
+/*
+ * PrepareHeater
+ * called by: Communication from host
+ * initialized all global data
+ */
uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue)
{
double temp ;
@@ -402,7 +518,7 @@ uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue)
return ERROR;
}
- Report("PrepareHeater ", __FILE__,__LINE__,HeaterId, SetTemperatue, 0, 0);
+ //Report("PrepareHeater ", __FILE__,__LINE__,HeaterId, SetTemperatue, 0, 0);
//start thread control for all motors
HeaterPIDConfig[HeaterId].m_params.MAX = HeaterControl[HeaterId].outputproportionalpowerlimit*100;
@@ -436,60 +552,12 @@ uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue)
}
if (HeaterId >= MAX_AC_HEATERS) //DC Heaters
{
- if (ControlIdtoHeaterId [HeaterId] == 0xFF)
- ControlIdtoHeaterId [HeaterId] = AddControlCallback( DCHeaterControlCBFunction, Frequency/*eOneSecond*/,TemperatureSensorRead,(IfTypeHeaters*0x100+HeaterId),HeaterId2PT100Id[HeaterId],0);
- //HeaterPIDConfig[HeaterId].m_params.dt *=10;
- //DCInitialHeating[HeaterId] = true;
- HeaterReady[HeaterId] = false;
-
- Enable_Reading_Heaters_Current(HeaterId2CurrentId[HeaterId]);
-
- HeaterPreviousRead[HeaterId] = TemperatureSensorRead(HeaterId2PT100Id[HeaterId]);
- if((abs(HeaterPreviousRead[HeaterId]-MINIMUM_HEATER_READ)<1)||(abs(MAXIMUM_HEATER_READ-HeaterPreviousRead[HeaterId])<10))
- {
- LOG_ERROR (HeaterId,"PT100 not working properly");
+ if (PrepareDCHeater(HeaterId,Frequency,SetTemperatue)!=OK)
return ERROR;
- }
- Report("PrepareHeater Read", __FILE__,__LINE__,HeaterId, SetTemperatue, HeaterPreviousRead[HeaterId], 0);
- if (ControlIdtoMaxHeaterId [HeaterId] == 0xFF)
- ControlIdtoMaxHeaterId [HeaterId] = AddControlCallback( DcHeaterMaxTempCBFunction, eOneSecond,TemperatureSensorRead,(IfTypeHeaters*0x100+HeaterId),HeaterId2PT100Id[HeaterId],0);
-
}
else if (HeaterId == HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature) //AC Heaters
{
- if (ControlIdtoHeaterId [HeaterId] == 0xFF)
- {
- ControlIdtoHeaterId [HeaterId] = AddControlCallback( HeaterControlCBFunction, Frequency/*eOneSecond*/,TemperatureSensorRead,(IfTypeHeaters*0x100+HeaterId),DryerInternalPT100Id,0);
- HeaterPreviousRead[HeaterId] = TemperatureSensorRead(DryerInternalPT100Id);
- Report("PrepareHeater Read", __FILE__,__LINE__,HeaterId, SetTemperatue, HeaterPreviousRead[HeaterId], 0);
- HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] = TemperatureSensorRead(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]);
- HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary] = TemperatureSensorRead(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]);
- }
- if (ControlIdtoMaxHeaterId [HeaterId] == 0xFF)
- ControlIdtoMaxHeaterId [HeaterId] = AddControlCallback( DcHeaterMaxTempCBFunction, eOneSecond,TemperatureSensorRead,(IfTypeHeaters*0x100+HeaterId),HeaterId2PT100Id[HeaterId],0);
-
- Enable_Reading_Heaters_Current(HeaterId2CurrentId[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]);
- Enable_Reading_Heaters_Current(HeaterId2CurrentId[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]);
-
- if (MainDryerHeaterMaxTempControl == 0xFF)
- MainDryerHeaterMaxTempControl = AddControlCallback( HeaterMaxTempCBFunction, eHundredMillisecond,TemperatureSensorRead,(IfTypeHeaters*0x100+HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain),HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain],0);
- if (SecondDryerHeaterMaxTempControl == 0xFF)
- SecondDryerHeaterMaxTempControl = AddControlCallback( HeaterMaxTempCBFunction, eHundredMillisecond,TemperatureSensorRead,(IfTypeHeaters*0x100+HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary),HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary],0);
- //InitialHeating = true;
- HeaterReady[HeaterId] = false;
- if (BlowerCfg.enabled == true)
- {
- Turn_the_Blower_On();//Turn on with the Default_Voltage
- if (BlowerCfg.heatingvoltage)
- Control_Voltage_To_Blower(BlowerCfg.heatingvoltage);
- else
- Control_Voltage_To_Blower(BlowerCfg.voltage-500);
-
- }
- if (SetTemperatue)
- {
- Control_Dryer_Fan(START,75);//use START or STOP, 0 - 100%
- }
+ PrepareACHeater(HeaterId,Frequency,SetTemperatue);
}
return OK;
}
@@ -659,7 +727,7 @@ uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t eadValue)
return OK;
}
}
- else //temperature withing limits
+ else //temperature within limits
{
if(UnderHeatCounter[index] )
{
@@ -711,6 +779,10 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
if (abs(readValue - HeaterPreviousRead[index])>2000)
{
Report("Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index);
+ if (readValue > HeaterCmd[index].targettemperatue)
+ {
+ DeActivateHeater(index);
+ }
return ERROR;
}
HeaterPreviousRead[index] = readValue;
@@ -834,6 +906,11 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
if (abs(readValue - HeaterPreviousRead[index])>2000)
{
Report("Temperature Spike",__FILE__,__LINE__,HeaterPreviousRead[index],RpWarning,readValue, index);
+ if (readValue > HeaterCmd[index].targettemperatue)
+ {
+ DeActivateHeater(index);
+ HeaterRecalculateHeaterParams(index, 0);
+ }
return ERROR;
}
HeaterPreviousRead[index] = readValue;
@@ -844,6 +921,7 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
if (readValue > ((HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100))
{
DeActivateHeater(index);
+ HeaterRecalculateHeaterParams(index, 0);
//Heaters OFF until coming into the proportional band
//Report("DC HEATER Over temperature ", __FILE__,__LINE__,index, RpMessage, readValue, 0);
return OK;
@@ -851,6 +929,7 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
if (readValue < ((HeaterCmd[index].targettemperatue * (100-HeaterControl[index].outputproportionalband))/100))
{
ActivateHeater(index);
+ //HeaterRecalculateHeaterParams(index, 100);
//Heaters OFF until coming into the proportional band
//Report("DC HEATER Under temperature ", __FILE__,__LINE__,index, RpMessage, readValue, 0);
return OK;
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c
index 417b4e536..1e33b99ca 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c
@@ -169,17 +169,30 @@ uint32_t IDS_Dispenser_Start_Motor_and_Open_Valve(int DispenserId, int MotorSpee
DispenserCallback[DispenserId] = callback;
TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[DispenserId];
- MotorSetSpeed(HW_Motor_Id, MotorSpeed);
- CurrentDispenserSpeed[DispenserId] = MotorSpeed;
- if (DispenserControlId[DispenserId] != 0xFF)
- Report("Cannot Add control callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0);
- Report("IDS_Dispenser_Start_Motor_and_Open_Valve",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)msec_millisecondCounter,0);
-
- DispenserControlId[DispenserId] = AddControlCallback( IDS_Dispenser_OpenValveCallback, OpenValveTimeout, TemplateDataReadCBFunction,DispenserId, DispenserId, 0 );
- if (DispenserControlId[DispenserId] == 0xFF)
- Report("Add control callback failed",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0);
+ if (CurrentDispenserSpeed[DispenserId]) //motor already running
+ {
+ MotorSetSpeed(HW_Motor_Id, MotorSpeed);
+ CurrentDispenserSpeed[DispenserId] = MotorSpeed;
+ if (DispenserCallback[DispenserId])
+ {
+ DispenserCallback[DispenserId](DispenserId,0);
+ DispenserCallback[DispenserId] = 0;
+ }
+ }
else
- Report("Add control callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0);
+ {
+ MotorSetSpeed(HW_Motor_Id, MotorSpeed);
+ CurrentDispenserSpeed[DispenserId] = MotorSpeed;
+ if (DispenserControlId[DispenserId] != 0xFF)
+ Report("Cannot Add control callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0);
+ Report("IDS_Dispenser_Start_Motor_and_Open_Valve",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)msec_millisecondCounter,0);
+
+ DispenserControlId[DispenserId] = AddControlCallback( IDS_Dispenser_OpenValveCallback, OpenValveTimeout, TemplateDataReadCBFunction,DispenserId, DispenserId, 0 );
+ if (DispenserControlId[DispenserId] == 0xFF)
+ Report("Add control callback failed",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0);
+ else
+ Report("Add control callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0);
+ }
return OK;
}
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
index 8f58bac3e..bf73ed7fa 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
@@ -40,6 +40,7 @@ uint32_t IDSDistanceToSpoolState(void);
uint32_t IDSEndState(void *JobDetails);
uint32_t IDS_DispenserPidRequestMessage(HardwarePidControl* request);
+uint32_t IDS_DispenserControlInit();
uint32_t IDS_HomeDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback);
uint32_t IDS_StopHomeDispenser (uint32_t deviceID);
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
index d77d6f082..2be233962 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
@@ -30,7 +30,7 @@ typedef struct
bool m_isReady;
PID_Config_Params m_params;
}DispenserControlConfig_t;
-HardwarePidControl DispensersControl[MAX_SYSTEM_DISPENSERS] = {0};
+HardwarePidControl *DispensersControl;// = (HardwarePidControl *)GENHWCFG_MAP_IN_FLASH + 0x4000;
int32_t DispenserSamples[MAX_SYSTEM_DISPENSERS][MAX_CONTROL_SAMPLES] = {0};
int DispenserSamplePointer[MAX_SYSTEM_DISPENSERS] = {0};
@@ -55,6 +55,13 @@ bool DispenserUsedInJob[MAX_SYSTEM_DISPENSERS] = {false,false,false,fals
bool DispensersAlarmState[ MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false};
int JobBrushStopId = 0;
+uint32_t IDS_DispenserControlInit()
+{
+ DispensersControl = (void *)(GENHWCFG_MAP_IN_FLASH + 0x4000);
+ EraseFlashSection(DispensersControl,sizeof(HardwarePidControl)*MAX_SYSTEM_DISPENSERS);
+ return OK;
+}
+
uint32_t IDS_DispenserPidRequestMessage(HardwarePidControl* request)
{
int Dispenser_i,i;
@@ -67,9 +74,10 @@ uint32_t IDS_DispenserPidRequestMessage(HardwarePidControl* request)
break;
}
}
- memcpy (&DispensersControl[Dispenser_i],request,sizeof(HardwarePidControl));
- if (DispensersControl[Dispenser_i].pvinputfilterfactormode > MAX_CONTROL_SAMPLES)
- DispensersControl[Dispenser_i].pvinputfilterfactormode = MAX_CONTROL_SAMPLES;
+ if (request->pvinputfilterfactormode > MAX_CONTROL_SAMPLES)
+ request->pvinputfilterfactormode = MAX_CONTROL_SAMPLES;
+ ReadAppAndProgram(&DispensersControl[Dispenser_i], sizeof(HardwarePidControl), request);
+
for (i = 0;i < DispensersControl[Dispenser_i].pvinputfilterfactormode; i++)
DispenserSamples[Dispenser_i][i] = 0; //reset the samples value for control beginning
/*DispenserNormalizedErrorCoEfficient[Dispenser_i] = (2*PI*DancersCfg[ThreadDispenserIdToDancerId[Dispenser_i]].armlength);
diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Heater.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Heater.c
index 47e1bda34..7735c9955 100644
--- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Heater.c
+++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Heater.c
@@ -25,7 +25,7 @@
void Stub_HeaterRequest(MessageContainer* requestContainer)
{
- uint32_t status = NOT_SUPPORTED;
+ uint32_t status = PASSED;
MessageContainer responseContainer;
StubHeaterRequest* request = stub_heater_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
@@ -35,6 +35,11 @@ void Stub_HeaterRequest(MessageContainer* requestContainer)
request->heatergroupon
*/
+ if((request->heatergroupid == 0xff) && (request->heatergroupon == false) && (request->heatertemperaturereq == 0))
+ {
+ HeatersEnd();
+ }
+ else
if (request->heatergroupon )
status = ActivateHeater(request->heatergroupid);
else
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c
index 435d7aef3..a1e91f6fc 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c
@@ -17,6 +17,8 @@
#include "drivers/Flash_Memory/fatfs/ff.h"
#include "drivers/SSI_Comm/Dancer/Dancer.h"
+#include "drivers/FPGA/Moters_Driver/PowerSTEP01.h"
+
#include "thread.h"
MotorDriverConfigStruc MotorsCfg[NUM_OF_MOTORS]={0};
HardwarePidControl MotorsControl[MAX_THREAD_MOTORS_NUM] = {0};
@@ -52,6 +54,14 @@ uint32_t MotorsConfigMessage(HardwareMotor * request)
MotorsCfg[Motor_i].pulseperround = request->pulseperround;
MotorsCfg[Motor_i].pulleyradius = request->pulleyradius;
MotorsCfg[Motor_i].configword = request->configword;
+ if(MotorDriverResponse[Motor_i].DriverType == VoltageCombinedMotDriver)
+ {
+ MotorsCfg[Motor_i].directionthreadwize = !(request->directionthreadwize);//PowerSTEP01
+ }
+ else
+ {
+ MotorsCfg[Motor_i].directionthreadwize = request->directionthreadwize;//L6470 + L6472
+ }
MotorsCfg[Motor_i].directionthreadwize = request->directionthreadwize;
MotorsCfg[Motor_i].kvalhold = request->kvalhold;
MotorsCfg[Motor_i].kvalrun = request->kvalrun;
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
index ee49d56f3..6a8474438 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
@@ -427,9 +427,9 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
JobEndReason = JOB_THREAD_BREAK;
ThreadControlActive = false;
SendJobProgress(0.0,0,false, TMessage);
- //SegmentReady(Module_Thread,ModuleFail);
- AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true);
- EndState(CurrentJob,"ReadBreakSensor Error" );
+ SegmentReady(Module_Thread,ModuleFail);
+ //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true);
+ //EndState(CurrentJob,"ReadBreakSensor Error" );
LOG_ERROR(index, "ReadBreakSensor Error");
return OK;
} //passed limit
@@ -458,7 +458,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
SendJobProgress(0.0,0,false, TMessage);
//EndState(CurrentJob,TMessage );
SegmentReady(Module_Thread,ModuleFail);
- switch (index)
+ /*switch (index)
{
case POOLER_MOTOR:
AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_PULLER_DANCER,true);
@@ -469,7 +469,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
case WINDER_MOTOR:
AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_WINDER_DANCER,true);
break;
- }
+ }*/
LOG_ERROR (DancerId, "Dancer Failure");
return OK;
}
@@ -694,6 +694,9 @@ uint32_t ThreadPreSegmentState(void *JobDetails, uint32_t SegmentId)
PrepareState = false;
// set the new speed in the dryer motor to the speed of the new segment
MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING, OriginalMotorSpd_2PPS[DRYER_MOTOR]);
+#ifdef HUNDRED_MICROSECONDS_DANCER_READ
+ MillisecLogInit();
+#endif
if (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].maxfrequency > 0)
{
@@ -775,7 +778,9 @@ char Endstr[150];
ThreadUpdateProcessLength (0.0,(void *)NULL);
SetOriginMotorSpeed(0);
-
+#ifdef HUNDRED_MICROSECONDS_DANCER_READ
+ MillisecLogClose();
+#endif
if (SpeedControlId != 0xFF)
{
if(RemoveControlCallback(SpeedControlId,ThreadLengthCBFunction)!=OK)