diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2020-01-27 09:19:11 +0200 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2020-01-27 09:19:11 +0200 |
| commit | ddda6089bff56e80703c8d2dce297919edc58bf1 (patch) | |
| tree | 7702c5cf169124d522eacc7f1a9e0878373baedd /Software/Embedded_SW/Embedded/Modules | |
| parent | 1d4d327571d4c0c9f4e17411551bd4dae1e2aed0 (diff) | |
| parent | bf2f3245339b9fd9148a2ad25b5ba3320e970cc1 (diff) | |
| download | Tango-ddda6089bff56e80703c8d2dce297919edc58bf1.tar.gz Tango-ddda6089bff56e80703c8d2dce297919edc58bf1.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules')
47 files changed, 4108 insertions, 2589 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index c7a3a5e22..c432edba0 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -26,6 +26,7 @@ #include "drivers/FPGA/FPGA.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" #include "drivers/I2C_Communication/Dispenser_Card/IO_Ports/Dispenser_IO.h" +#include "drivers/I2C_Communication/Head_Card/ADC/Head_ADC.h" #include "Common/SWUpdate/FileSystem.h" #include "modules/thread/thread_ex.h" @@ -54,6 +55,8 @@ #include "drivers/Heater/TemperatureSensor.h" #include "drivers/Flash_ram/FlashProgram.h" +#include "drivers/Valves/Valve.h" + Task_Handle AlarmHandling_Task_Handle; Mailbox_Handle AlarmHandlingMsgQ = NULL; @@ -70,7 +73,6 @@ uint8_t alarm_response_buffer[500]; /******************** Functions ********************************************/ void SendEventNotifications(void); -//uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Read); //********************************************************************** typedef enum { @@ -89,7 +91,7 @@ typedef struct AlarmHandlingMessage{ // uint32_t Data; }AlarmHandlingMessageStruc; -#define MAX_SYSTEM_ALARMS 300+1 +#define MAX_SYSTEM_ALARMS 400+1 /*typedef enum { TemperatureAlarm, @@ -167,252 +169,274 @@ AlarmStatusItem AlarmState[MAX_SYSTEM_ALARMS]; */ uint32_t * pAlarmItemSize = (uint32_t *)(ALARM_MAP_IN_FLASH); uint32_t AlarmItemSize ; -AlarmHandlingItemStruc *AlarmItem = (AlarmHandlingItemStruc *)(ALARM_MAP_IN_FLASH+4); -AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ - {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_1,0,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_1_EMPTY}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_2,1,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_2_EMPTY}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_3,2,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_3_EMPTY}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_4,3,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_4_EMPTY}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_5,4,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_5_EMPTY}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_6,5,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_6_EMPTY}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_7,6,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_7_EMPTY}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_8,7,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_8_EMPTY}, +AlarmHandlingItemStruc *AlarmItem = NULL;//(AlarmHandlingItemStruc *)(ALARM_MAP_IN_FLASH+4); +AlarmHandlingItemStruc *HardCodedAlarmItem=NULL; +//AlarmHandlingItemStruc HardCodedAlarmItem[MAX_SYSTEM_ALARMS]={ +//* 7016 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_1,0,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_1_EMPTY}, +//* 7017 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_2,1,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_2_EMPTY}, +//* 7018 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_3,2,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_3_EMPTY}, +//* 7019 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_4,3,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_4_EMPTY}, +//* 7020 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_5,4,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_5_EMPTY}, +//* 7021 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_6,5,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_6_EMPTY}, +//* 7022 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_7,6,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_7_EMPTY}, +//* 7023 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__LimitSwitchAlarm,LimitSwitchAlarmEmpty_8,7,false,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DISPENSER_8_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,0,0,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_1_UPPER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,1,1,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_2_UPPER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,2,2,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_3_UPPER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,3,3,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_4_UPPER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,4,4,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_5_UPPER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,5,5,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_6_UPPER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,6,6,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_7_UPPER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,7,7,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_8_UPPER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,0,0,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_1_LOWER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,1,1,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_2_LOWER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,2,2,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_3_LOWER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,3,3,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_4_LOWER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,4,4,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_5_LOWER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,5,5,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_6_LOWER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,6,6,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_7_LOWER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,7,7,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_8_LOWER_HARD_LIMIT}, +//* 7064 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,0,0,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_1_UPPER_HARD_LIMIT}, +//* 7065 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,1,1,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_2_UPPER_HARD_LIMIT}, +//* 7066 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,2,2,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_3_UPPER_HARD_LIMIT}, +//* 7067 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,3,3,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_4_UPPER_HARD_LIMIT}, +//* 7068 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,4,4,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_5_UPPER_HARD_LIMIT}, +//* 7069 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,5,5,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_6_UPPER_HARD_LIMIT}, +//* 7070 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,6,6,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_7_UPPER_HARD_LIMIT}, +//* 7071 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,7,7,true,true,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_8_UPPER_HARD_LIMIT}, +//* 7072 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,0,0,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_1_LOWER_HARD_LIMIT}, +//* 7073 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,1,1,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_2_LOWER_HARD_LIMIT}, +//* 7074 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,2,2,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_3_LOWER_HARD_LIMIT}, +//* 7075 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,3,3,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_4_LOWER_HARD_LIMIT}, +//* 7076 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,4,4,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_5_LOWER_HARD_LIMIT}, +//* 7077 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,5,5,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_6_LOWER_HARD_LIMIT}, +//* 7078 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,6,6,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_7_LOWER_HARD_LIMIT}, +//* 7079 */ {eOneSecond,ALARM_SOURCE_TYPE__HardLimitAlarm,7,7,true,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_8_LOWER_HARD_LIMIT}, - {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,0,0,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_1_HIGH_PRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,1,1,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_2_HIGH_PRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,2,2,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_3_HIGH_PRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,3,3,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_4_HIGH_PRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,4,4,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_5_HIGH_PRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,5,5,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_6_HIGH_PRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,6,6,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_7_HIGH_PRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,7,7,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_8_HIGH_PRESSURE}, +//* 7080 */ {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,0,0,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_1_HIGH_PRESSURE}, +//* 7081 */ {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,1,1,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_2_HIGH_PRESSURE}, +//* 7082 */ {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,2,2,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_3_HIGH_PRESSURE}, +//* 7083 */ {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,3,3,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_4_HIGH_PRESSURE}, +//* 7084 */ {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,4,4,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_5_HIGH_PRESSURE}, +//* 7085 */ {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,5,5,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_6_HIGH_PRESSURE}, +//* 7086 */ {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,6,6,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_7_HIGH_PRESSURE}, +//* 7087 */ {eOneSecond,ALARM_SOURCE_TYPE__PressureAlarm,7,7,5,true,DEBUG_LOG_CATEGORY__Error,0xFF,5,EVENT_TYPE__DISPENSER_8_HIGH_PRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_1_OVERPRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_2_OVERPRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_3_OVERPRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_4_OVERPRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_5_OVERPRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_6_OVERPRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_7_OVERPRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_8_OVERPRESSURE}, +//* 7000 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_1_OVERPRESSURE}, +//* 7001 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_2_OVERPRESSURE}, +//* 7002 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_3_OVERPRESSURE}, +//* 7003 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_4_OVERPRESSURE}, +//* 7004 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_5_OVERPRESSURE}, +//* 7005 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_6_OVERPRESSURE}, +//* 7006 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_7_OVERPRESSURE}, +//* 7007 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DISPENSER_8_OVERPRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_1_LOW_LEVEL}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_2_LOW_LEVEL}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_3_LOW_LEVEL}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_4_LOW_LEVEL}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_5_LOW_LEVEL}, - //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,5,5,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_6_LOW_LEVEL}, - //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,6,6,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_7_LOW_LEVEL}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,50/*500cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_8_LOW_LEVEL}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_1_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_2_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_3_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_4_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_5_EMPTY}, - //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,5,5,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_6_EMPTY}, - //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,6,6,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_7_EMPTY}, - {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,20/*500cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_8_EMPTY}, +//* 8000 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,300//*300cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_1_LOW_LEVEL}, +//* 8001 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,300//*300cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_2_LOW_LEVEL}, +//* 8002 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,300//*300cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_3_LOW_LEVEL}, +//* 8003 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,300//*300cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_4_LOW_LEVEL}, +//* 8004 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,300//*300cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_5_LOW_LEVEL}, +//* 8005 */ //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,5,5,300//*300cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_6_LOW_LEVEL}, +//* 8006 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,6,6,300//*300cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_7_LOW_LEVEL}, +//* 8007 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,300//*300cc*/,false,DEBUG_LOG_CATEGORY__Warning, 0xFF,2,EVENT_TYPE__MID_TANK_8_LOW_LEVEL}, +//* 8008 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,200//*200cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_1_EMPTY}, +//* 8009 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,200//*200cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_2_EMPTY}, +//* 8010 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,200//*200cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_3_EMPTY}, +//* 8011 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,200//*200cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_4_EMPTY}, +//* 8012 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,200//*200cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_5_EMPTY}, +//* 8013 */ //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,5,5,200//*200cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_6_EMPTY}, +//* 8014 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,6,6,200//*200cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_7_EMPTY}, +//* 8015 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,200//*200cc*/,false,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_8_EMPTY}, +//* 8016 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,0,0,1800//*1800cc*/,true,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_1_OVERFLOW}, +//* 8017 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,1,1,1800//*1800cc*/,true,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_2_OVERFLOW}, +//* 8018 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,2,2,1800//*1800cc*/,true,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_3_OVERFLOW}, +//* 8019 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,3,3,1800//*1800cc*/,true,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_4_OVERFLOW}, +//* 8020 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,4,4,1800//*1800cc*/,true,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_5_OVERFLOW}, +//* 8021 */ //{eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,5,5,1800//*1800cc*/,true,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_6_OVERFLOW}, +//* 8022 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,6,6,1800//*1800cc*/,true,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_7_OVERFLOW}, +//* 8023 */ {eOneSecond,ALARM_SOURCE_TYPE__FluidLevelAlarm,7,7,1800//*1800cc*/,true,DEBUG_LOG_CATEGORY__Error, 0xFF,2,EVENT_TYPE__MID_TANK_8_OVERFLOW}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DRYER_MOTOR_OVERCURRENT }, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__FEEDER_MOTOR_OVERCURRENT }, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_SCREW, HARDWARE_MOTOR_TYPE__MOTO_SCREW, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__SCREW_MOTOR_OVERCURRENT }, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_WINDER, HARDWARE_MOTOR_TYPE__MOTO_WINDER, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__WINDER_MOTOR_OVERCURRENT }, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__PULLER_MOTOR_OVERCURRENT }, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_1_MOTOR_OVERCURRENT}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_2_MOTOR_OVERCURRENT}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_3_MOTOR_OVERCURRENT}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_4_MOTOR_OVERCURRENT}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_5_MOTOR_OVERCURRENT}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_6_MOTOR_OVERCURRENT}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_7_MOTOR_OVERCURRENT}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_8_MOTOR_OVERCURRENT}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DRYER_MOTOR_OVERTEMPERATURE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__FEEDER_MOTOR_OVERTEMPERATURE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_SCREW, HARDWARE_MOTOR_TYPE__MOTO_SCREW, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__SCREW_MOTOR_OVERTEMPERATURE }, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_WINDER, HARDWARE_MOTOR_TYPE__MOTO_WINDER, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__WINDER_MOTOR_OVERTEMPERATURE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__PULLER_MOTOR_OVERTEMPERATURE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_1_MOTOR_OVERTEMPERATURE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_2_MOTOR_OVERTEMPERATURE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_3_MOTOR_OVERTEMPERATURE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_4_MOTOR_OVERTEMPERATURE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_5_MOTOR_OVERTEMPERATURE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_6_MOTOR_OVERTEMPERATURE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_7_MOTOR_OVERTEMPERATURE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_8_MOTOR_OVERTEMPERATURE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DRYER_MOTOR_UNDERVOLTAGE }, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__FEEDER_MOTOR_UNDERVOLTAGE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_SCREW, HARDWARE_MOTOR_TYPE__MOTO_SCREW, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__SCREW_MOTOR_UNDERVOLTAGE }, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_WINDER, HARDWARE_MOTOR_TYPE__MOTO_WINDER, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__WINDER_MOTOR_UNDERVOLTAGE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__PULLER_MOTOR_UNDERVOLTAGE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_1_MOTOR_UNDERVOLTAGE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_2_MOTOR_UNDERVOLTAGE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_3_MOTOR_UNDERVOLTAGE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_4_MOTOR_UNDERVOLTAGE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_5_MOTOR_UNDERVOLTAGE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_6_MOTOR_UNDERVOLTAGE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_7_MOTOR_UNDERVOLTAGE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_8_MOTOR_UNDERVOLTAGE}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DRYER_MOTOR_STALL }, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__FEEDER_MOTOR_STALL }, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_SCREW, HARDWARE_MOTOR_TYPE__MOTO_SCREW, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__SCREW_MOTOR_STALL }, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_WINDER, HARDWARE_MOTOR_TYPE__MOTO_WINDER, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__WINDER_MOTOR_STALL }, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__PULLER_MOTOR_STALL }, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_1_MOTOR_STALL}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_2_MOTOR_STALL}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_3_MOTOR_STALL}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_4_MOTOR_STALL}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_5_MOTOR_STALL}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_6_MOTOR_STALL}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_7_MOTOR_STALL}, - {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_8_MOTOR_STALL}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,MIXER_PT100, HARDWARE_PID_CONTROL_TYPE__MixerHeater ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MIXER_OVERTEMPERATURE}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_1_OVERTEMPERATURE}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_2_OVERTEMPERATURE}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_3_OVERTEMPERATURE}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_4_OVERTEMPERATURE}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP5,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_5_OVERTEMPERATURE}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,HEAD6_PT100, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_6_OVERTEMPERATURE }, - {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DRYER_TEMP1, HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DRYER_ZONE_1_OVERTEMPERATURE }, +//* 4000 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DRYER_MOTOR_OVERCURRENT }, +//* 3003 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__FEEDER_MOTOR_OVERCURRENT }, +//* 3008 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_SCREW, HARDWARE_MOTOR_TYPE__MOTO_SCREW, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__SCREW_MOTOR_OVERCURRENT }, +//* 3007 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_WINDER, HARDWARE_MOTOR_TYPE__MOTO_WINDER, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__WINDER_MOTOR_OVERCURRENT }, +//* 3005 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__PULLER_MOTOR_OVERCURRENT }, +//* 7032 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_1_MOTOR_OVERCURRENT}, +//* 7033 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_2_MOTOR_OVERCURRENT}, +//* 7034 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_3_MOTOR_OVERCURRENT}, +//* 7035 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_4_MOTOR_OVERCURRENT}, +//* 7036 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_5_MOTOR_OVERCURRENT}, +//* 7037 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_6_MOTOR_OVERCURRENT}, +//* 7038 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_7_MOTOR_OVERCURRENT}, +//* 7039 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, x_STATUS_OCD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_8_MOTOR_OVERCURRENT}, +//* 4001 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DRYER_MOTOR_OVERTEMPERATURE}, +//* 3010 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__FEEDER_MOTOR_OVERTEMPERATURE}, +//* 3015 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_SCREW, HARDWARE_MOTOR_TYPE__MOTO_SCREW, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__SCREW_MOTOR_OVERTEMPERATURE }, +//* 3014 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_WINDER, HARDWARE_MOTOR_TYPE__MOTO_WINDER, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__WINDER_MOTOR_OVERTEMPERATURE}, +//* 3012 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__PULLER_MOTOR_OVERTEMPERATURE}, +//* 7040 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_1_MOTOR_OVERTEMPERATURE}, +//* 7041 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_2_MOTOR_OVERTEMPERATURE}, +//* 7042 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_3_MOTOR_OVERTEMPERATURE}, +//* 7043 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_4_MOTOR_OVERTEMPERATURE}, +//* 7044 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_5_MOTOR_OVERTEMPERATURE}, +//* 7045 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_6_MOTOR_OVERTEMPERATURE}, +//* 7046 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_7_MOTOR_OVERTEMPERATURE}, +//* 7047 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, x_STATUS_TH_SD,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_8_MOTOR_OVERTEMPERATURE}, +//* 4003 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DRYER_MOTOR_UNDERVOLTAGE }, +//* 3024 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__FEEDER_MOTOR_UNDERVOLTAGE}, +//* 3029 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_SCREW, HARDWARE_MOTOR_TYPE__MOTO_SCREW, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__SCREW_MOTOR_UNDERVOLTAGE }, +//* 3028 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_WINDER, HARDWARE_MOTOR_TYPE__MOTO_WINDER, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__WINDER_MOTOR_UNDERVOLTAGE}, +//* 3026 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__PULLER_MOTOR_UNDERVOLTAGE}, +//* 7056 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_1_MOTOR_UNDERVOLTAGE}, +//* 7057 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_2_MOTOR_UNDERVOLTAGE}, +//* 7058 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_3_MOTOR_UNDERVOLTAGE}, +//* 7059 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_4_MOTOR_UNDERVOLTAGE}, +//* 7060 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_5_MOTOR_UNDERVOLTAGE}, +//* 7061 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_6_MOTOR_UNDERVOLTAGE}, +//* 7062 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_7_MOTOR_UNDERVOLTAGE}, +//* 7063 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, x_STATUS_UVLO,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_8_MOTOR_UNDERVOLTAGE}, +//* 4002 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DRYER_MOTOR_STALL }, +//* 3017 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__FEEDER_MOTOR_STALL }, +//* 3022 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_SCREW, HARDWARE_MOTOR_TYPE__MOTO_SCREW, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__SCREW_MOTOR_STALL }, +//* 3021 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_WINDER, HARDWARE_MOTOR_TYPE__MOTO_WINDER, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__WINDER_MOTOR_STALL }, +//* 3019 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, HARDWARE_MOTOR_TYPE__MOTO_LDRIVING, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__PULLER_MOTOR_STALL }, +//* 7048 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_1_MOTOR_STALL}, +//* 7049 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_2_MOTOR_STALL}, +//* 7050 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_3, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_3_MOTOR_STALL}, +//* 7051 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_4, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_4_MOTOR_STALL}, +//* 7052 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_5, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_5_MOTOR_STALL}, +//* 7053 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_6, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_6_MOTOR_STALL}, +//* 7054 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_7_MOTOR_STALL}, +//* 7055 */ {eOneSecond,ALARM_SOURCE_TYPE__MotorAlarm,HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8, x_STATUS_STEP_LOSS_A,false,DEBUG_LOG_CATEGORY__Error,0xFF,2,EVENT_TYPE__DISPENSER_8_MOTOR_STALL}, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_AN_ENCLOSURETEMP1, 0,40,true,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE }, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_AN_ENCLOSURETEMP2, 1,40,true,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE }, -/* - {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor1_EC ,1,true,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_1_OPEN}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor2_PPC ,1,true,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_2_OPEN}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor3_DH_DRYER,1,true,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_3_OPEN}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor4_MIDTANKS,1,true,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_4_OPEN}, - {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,RearDoor ,1,true,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__REAR_COVER_OPEN }, -*/ - {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,CartridgesDoor ,1,true,true,DEBUG_LOG_CATEGORY__Warning,0xFF,5,EVENT_TYPE__CARTRIDGES_COVER_OPEN}, +//* 6000 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,MIXER_PT100, HARDWARE_PID_CONTROL_TYPE__MixerHeater ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MIXER_OVERTEMPERATURE}, +//* 5000 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_1_OVERTEMPERATURE}, +//* 5001 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_2_OVERTEMPERATURE}, +//* 5002 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_3_OVERTEMPERATURE}, +//* 5003 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_4_OVERTEMPERATURE}, +//* 5004 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP5,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_5_OVERTEMPERATURE}, +//* 5005 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,HEAD6_PT100, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6 ,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_6_OVERTEMPERATURE }, +//* 4005 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DRYER_TEMP1, HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature,270,true,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DRYER_ZONE_1_OVERTEMPERATURE }, + +//* 2008 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_AN_ENCLOSURETEMP1, 0,40,true,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE }, +//* 2017 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_AN_ENCLOSURETEMP2, 1,40,true,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE }, + +//* 2002 */ // {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor1_EC ,1,true,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_1_OPEN}, +//* 2003 */ // {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor2_PPC ,1,true,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_2_OPEN}, +//* 2004 */ // {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor3_DH_DRYER,1,true,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_3_OPEN}, +//* 2005 */ // {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,FrontDoor4_MIDTANKS,1,true,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__FRONT_COVER_4_OPEN}, +//* 2007 */ // {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,RearDoor ,1,true,true,DEBUG_LOG_CATEGORY__Error, 0xFF,5,EVENT_TYPE__REAR_COVER_OPEN }, + +//* 2006 */ {eHundredMillisecond,ALARM_SOURCE_TYPE__CoversAlarm,CartridgesDoor ,1,true,true,DEBUG_LOG_CATEGORY__Warning,0xFF,5,EVENT_TYPE__CARTRIDGES_COVER_OPEN}, + +//* 6001 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,MIXER_PT100, HARDWARE_PID_CONTROL_TYPE__MixerHeater ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__MIXER_UNDERTEMPERATURE_A}, +//* 5006 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_A}, +//* 5007 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_A}, +//* 5008 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_3_UNDERTEMPERATURE_A}, +//* 5009 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_A}, +//* 5010 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP5,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_A}, +//* 5011 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,HEAD6_PT100, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_A}, + +//* 4007 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DRYER_TEMP1, HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_A}, +//* 6002 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,MIXER_PT100, HARDWARE_PID_CONTROL_TYPE__MixerHeater ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MIXER_UNDERTEMPERATURE_B}, +//* 5012 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_B}, +//* 5013 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_B}, +//* 5014 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_3_UNDERTEMPERATURE_B}, +//* 5015 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_B}, +//* 5016 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP5,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_B}, +//* 5017 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,HEAD6_PT100, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_B }, +//* 4008 */ {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DRYER_TEMP1, HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_B }, + +//* 3004 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERCURRENT }, //* 3004 */ +//* 3006 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERCURRENT }, //* 3006 */ +//* 3009 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERCURRENT }, //* 3009 */ +//* 3036 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_MOTOR_OVERCURRENT //*EVENT_TYPE__WINDER_DANCER_MOTOR_OVERCURRENT*/ }, //* 3036 */ +//* 3037 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_MOTOR_OVERCURRENT //*EVENT_TYPE__PULLER_DANCER_MOTOR_OVERCURRENT*/ }, //* 3037 */ +//* 3038 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_MOTOR_OVERCURRENT //*EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERCURRENT*/ }, //* 3038 */ +//* 4017 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_MOTOR_OVERCURRENT //*EVENT_TYPE__DRYER_LID_MOTOR_OVERCURRENT*/ }, //* 4017 */ +//* 5031 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERCURRENT }, //* 5031 */ +//* 5035 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERCURRENT }, //* 5035 */ +//* 5039 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERCURRENT }, //* 5039 */ +//* 3011 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERTEMPERATURE }, //* 3011 */ +//* 3013 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERTEMPERATURE }, //* 3013 */ +//* 3016 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERTEMPERATURE }, //* 3016 */ +//* 3039 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_OVERTEMPERATURE }, //* 3039 */ +//* 3040 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_OVERTEMPERATURE }, //* 3040 */ +//* 3041 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERTEMPERATURE }, //* 3041 */ +//* 4018 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_OVERTEMPERATURE }, //* 4018 */ +//* 5032 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERTEMPERATURE }, //* 5032 */ +//* 5036 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERTEMPERATURE }, //* 5036 */ +//* 5040 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERTEMPERATURE }, //* 5040 */ - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,MIXER_PT100, HARDWARE_PID_CONTROL_TYPE__MixerHeater ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__MIXER_UNDERTEMPERATURE_A}, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_A}, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_A}, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_3_UNDERTEMPERATURE_A}, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_A}, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP5,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_A}, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,HEAD6_PT100, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6 ,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_A}, +//* 3018 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, //* 3018 */ +//* 3020 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, //* 3020 */ +//* 3023 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, //* 3023 */ +//* 3042 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, //* 3042 */ +//* 3043 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_STALL }, //* 3043 */ +//* 3044 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_STALL }, //* 3044 */ +//* 4019 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_STALL }, //* 4019 */ +//* 5033 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_STALL }, //* 5033 */ +//* 5037 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_STALL }, //* 5037 */ +//* 5041 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_STALL }, //* 5041 */ - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DRYER_TEMP1, HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature,9,false,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_A}, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,MIXER_PT100, HARDWARE_PID_CONTROL_TYPE__MixerHeater ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MIXER_UNDERTEMPERATURE_B}, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_B}, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_B}, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_3_UNDERTEMPERATURE_B}, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_B}, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DYEINGH_TEMP5,HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_B}, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,HEAD6_PT100, HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6 ,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_B }, - {eOneSecond,ALARM_SOURCE_TYPE__TemperatureAlarm,TEMP_SENSE_ANALOG_DRYER_TEMP1, HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature,9,false,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_B }, +//* 3025 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_UNDERVOLTAGE }, //* 3025 */ +//* 3027 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_UNDERVOLTAGE }, //* 3027 */ +//* 3030 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_UNDERVOLTAGE }, //* 3030 */ +//* 3045 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_UNDERVOLTAGE }, //* 3045 */ +//* 3046 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_UNDERVOLTAGE }, //* 3046 */ +//* 3047 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_UNDERVOLTAGE }, //* 3047 */ +//* 4020 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_UNDERVOLTAGE }, //* 4020 */ +//* 5034 */ {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_UNDERVOLTAGE }, //* 5034 */ +//* 5038 */ {eOneSecond, ALARM_SOURCE_TYPE__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 }, //* 5038 */ +//* 5042 */ {eOneSecond, ALARM_SOURCE_TYPE__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 }, //* 5042 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERCURRENT }, /* 3004 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERCURRENT }, /* 3006 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERCURRENT }, /* 3009 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_MOTOR_OVERCURRENT /*EVENT_TYPE__WINDER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3036 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_MOTOR_OVERCURRENT /*EVENT_TYPE__PULLER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3037 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_MOTOR_OVERCURRENT /*EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERCURRENT*/ }, /* 3038 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_MOTOR_OVERCURRENT /*EVENT_TYPE__DRYER_LID_MOTOR_OVERCURRENT*/ }, /* 4017 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERCURRENT }, /* 5031 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERCURRENT }, /* 5035 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_OCD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERCURRENT }, /* 5039 */ - // - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_OVERTEMPERATURE }, /* 3011 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_OVERTEMPERATURE }, /* 3013 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_OVERTEMPERATURE }, /* 3016 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3039 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3040 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_OVERTEMPERATURE }, /* 3041 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_OVERTEMPERATURE }, /* 4018 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_OVERTEMPERATURE }, /* 5032 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_OVERTEMPERATURE }, /* 5036 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , x_STATUS_TH_SD , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_OVERTEMPERATURE }, /* 5040 */ - // - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, /* 3018 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, /* 3020 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_STALL }, /* 3023 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_STALL }, /* 3042 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_STALL }, /* 3043 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_STALL }, /* 3044 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_STALL }, /* 4019 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_STALL }, /* 5033 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANMECH ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_MECHANISM_MOTOR_STALL }, /* 5037 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD , HARDWARE_MOTOR_TYPE__MOTO_DH_CLEANHEAD ,x_STATUS_STEP_LOSS_A , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_CLEANING_HEAD_MOTOR_STALL }, /* 5041 */ - // - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RLOADING , HARDWARE_MOTOR_TYPE__MOTO_RLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__RIGHT_LOADER_MOTOR_UNDERVOLTAGE }, /* 3025 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LLOADING , HARDWARE_MOTOR_TYPE__MOTO_LLOADING , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LEFT_LOADER_MOTOR_UNDERVOLTAGE }, /* 3027 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__LOADING_ARM_MOTOR_UNDERVOLTAGE }, /* 3030 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER2 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__WINDER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3045 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , HARDWARE_MOTOR_TYPE__MOTO_LDANCER1 , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__PULLER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3046 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_RDANCER , HARDWARE_MOTOR_TYPE__MOTO_RDANCER , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__FEEDER_DANCER_MOTOR_UNDERVOLTAGE }, /* 3047 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DRYER_LID_MOTOR_UNDERVOLTAGE }, /* 4020 */ - {eOneSecond, ALARM_SOURCE_TYPE__MotorAlarm, HARDWARE_MOTOR_TYPE__MOTO_DH_LID , HARDWARE_MOTOR_TYPE__MOTO_DH_LID , x_STATUS_UVLO , FALSE , DEBUG_LOG_CATEGORY__Error , 0xFF , 2 , EVENT_TYPE__DYEING_HEAD_COVER_MOTOR_UNDERVOLTAGE }, /* 5034 */ - {eOneSecond, ALARM_SOURCE_TYPE__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 }, /* 5038 */ - {eOneSecond, ALARM_SOURCE_TYPE__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 }, /* 5042 */ +//* 5018 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_1 , HEATER_HEAD_CURRENT_ZONE_1 , 125 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_1_CURRENT_OUT_OF_RANGE }, //* 5018 */ +//* 5019 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_2 , HEATER_HEAD_CURRENT_ZONE_2 , 187 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_2_CURRENT_OUT_OF_RANGE }, //* 5019 */ +//* 5020 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_3 , HEATER_HEAD_CURRENT_ZONE_3 , 187 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_3_CURRENT_OUT_OF_RANGE }, //* 5020 */ +//* 5021 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_4 , HEATER_HEAD_CURRENT_ZONE_4 , 312 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_4_CURRENT_OUT_OF_RANGE }, //* 5021 */ +//* 5022 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_5_6 , HEATER_HEAD_CURRENT_ZONE_5_6 , 500 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_5_6_CURRENT_OUT_OF_RANGE }, //* 5022 */ +//* 6004 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_MIXCHIP_CURRENT , HEATER_MIXCHIP_CURRENT , 187 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__MIXER_CURRENT_OUT_OF_RANGE }, //* 6004 */ +//* 4011 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_DRYER_CURRENT_1, HEATER_DRYER_CURRENT_1, CURRENT4AMP , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DRYER_HEATERS_ZONE_1_CURRENT_OUT_OF_RANGE }, //* 6004 */ +//* 4012 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_DRYER_CURRENT_2, HEATER_DRYER_CURRENT_2, CURRENT2AMP , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DRYER_HEATERS_ZONE_2_CURRENT_OUT_OF_RANGE }, //* 6004 */ - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_1 , HEATER_HEAD_CURRENT_ZONE_1 , 125 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_1_CURRENT_OUT_OF_RANGE }, /* 5018 */ - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_2 , HEATER_HEAD_CURRENT_ZONE_2 , 187 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_2_CURRENT_OUT_OF_RANGE }, /* 5019 */ - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_3 , HEATER_HEAD_CURRENT_ZONE_3 , 187 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_3_CURRENT_OUT_OF_RANGE }, /* 5020 */ - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_4 , HEATER_HEAD_CURRENT_ZONE_4 , 312 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_4_CURRENT_OUT_OF_RANGE }, /* 5021 */ - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_5_6 , HEATER_HEAD_CURRENT_ZONE_5_6 , 500 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_5_6_CURRENT_OUT_OF_RANGE }, /* 5022 */ - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_MIXCHIP_CURRENT , HEATER_MIXCHIP_CURRENT , 187 , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__MIXER_CURRENT_OUT_OF_RANGE }, /* 6004 */ - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_DRYER_CURRENT_1, HEATER_DRYER_CURRENT_1, CURRENT4AMP , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DRYER_HEATERS_ZONE_1_CURRENT_OUT_OF_RANGE }, /* 6004 */ - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_DRYER_CURRENT_2, HEATER_DRYER_CURRENT_2, CURRENT2AMP , TRUE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DRYER_HEATERS_ZONE_2_CURRENT_OUT_OF_RANGE }, /* 6004 */ +//* 5023 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_1 , HEATER_HEAD_CURRENT_ZONE_1 , 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_1_CURRENT_LOOP_BREAK }, //* 5018 */ +//* 5024 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_2 , HEATER_HEAD_CURRENT_ZONE_2 , 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_2_CURRENT_LOOP_BREAK }, //* 5019 */ +//* 5025 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_3 , HEATER_HEAD_CURRENT_ZONE_3 , 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_3_CURRENT_LOOP_BREAK }, //* 5020 */ +//* 5026 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_4 , HEATER_HEAD_CURRENT_ZONE_4 , 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_4_CURRENT_LOOP_BREAK }, //* 5021 */ +//* 5027 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_5_6 , HEATER_HEAD_CURRENT_ZONE_5_6 , 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_5_6_CURRENT_LOOP_BREAK }, //* 5022 */ +//* 6005 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_MIXCHIP_CURRENT , HEATER_MIXCHIP_CURRENT , 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__MIXER_CURRENT_LOOP_BREAK }, //* 6004 */ +//* 4013 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_DRYER_CURRENT_1, HEATER_DRYER_CURRENT_1, 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DRYER_HEATERS_ZONE_1_CURRENT_LOOP_BREAK }, //* 6004 */ +//* 4014 */ {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_DRYER_CURRENT_2, HEATER_DRYER_CURRENT_2, 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DRYER_HEATERS_ZONE_2_CURRENT_LOOP_BREAK }, //* 6004 */ +//* 5028 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DYEING_HEAD_THERMAL_CUTOFF}, - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_1 , HEATER_HEAD_CURRENT_ZONE_1 , 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_1_CURRENT_LOOP_BREAK }, /* 5018 */ - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_2 , HEATER_HEAD_CURRENT_ZONE_2 , 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_2_CURRENT_LOOP_BREAK }, /* 5019 */ - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_3 , HEATER_HEAD_CURRENT_ZONE_3 , 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_3_CURRENT_LOOP_BREAK }, /* 5020 */ - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_4 , HEATER_HEAD_CURRENT_ZONE_4 , 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_4_CURRENT_LOOP_BREAK }, /* 5021 */ - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_HEAD_CURRENT_ZONE_5_6 , HEATER_HEAD_CURRENT_ZONE_5_6 , 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DYEING_HEAD_ZONE_5_6_CURRENT_LOOP_BREAK }, /* 5022 */ - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_MIXCHIP_CURRENT , HEATER_MIXCHIP_CURRENT , 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__MIXER_CURRENT_LOOP_BREAK }, /* 6004 */ - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_DRYER_CURRENT_1, HEATER_DRYER_CURRENT_1, 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DRYER_HEATERS_ZONE_1_CURRENT_LOOP_BREAK }, /* 6004 */ - {eOneSecond, ALARM_SOURCE_TYPE__CurrentAlarm, HEATER_DRYER_CURRENT_2, HEATER_DRYER_CURRENT_2, 0 , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF , 5, EVENT_TYPE__DRYER_HEATERS_ZONE_2_CURRENT_LOOP_BREAK }, /* 6004 */ - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DYEING_HEAD_THERMAL_CUTOFF}, +//* 9005 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__VOC_SENSOR_ALARM_TIME}, +//* 9008 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__VOC_SENSOR_ALARM_TIME}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__VOC_SENSOR_ALARM_SLOPE}, +//* 3000 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_BREAK}, +//* 3001 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER}, +//* 3048 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_PULLER_DANCER}, +//* 3049 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_WINDER_DANCER}, +//* 3002 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__WINDER_CONE_DOES_NOT_EXIST}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_BREAK}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_PULLER_DANCER}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_WINDER_DANCER}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__WINDER_CONE_DOES_NOT_EXIST}, +//* 4004 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DRYER_DOOR_OPEN}, +//* 9003 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__NO_AIR_PRESSURE}, +//* 9000 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__AIR_FILTER_NOT_INSTALLED}, +//* 9002 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__WASTE_CONTAINER_EMPTYING_TIMEOUT}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__DRYER_DOOR_OPEN}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__NO_AIR_PRESSURE}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Critical,0xFF,0,EVENT_TYPE__AIR_FILTER_NOT_INSTALLED}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__WASTE_CONTAINER_EMPTYING_TIMEOUT}, +//* 2014 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MACHINE_STATE_HW_CONFIG_FAILED}, - {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MACHINE_STATE_HW_CONFIG_FAILED}, +//* 2009 */ {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, MACHINE_FANS , MACHINE_FANS , MACHINE_FANS_MIN_RPM , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF, 5, EVENT_TYPE__MACHINE_FANS_RPM_TOO_LOW }, //*2009*/ +//* 2010 */ {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, MACHINE_FANS , MACHINE_FANS , MACHINE_FANS_STOP , FALSE , DEBUG_LOG_CATEGORY__Critical, 0xFF, 5, EVENT_TYPE__MACHINE_FANS_STOPPED }, //*2010*/ +//* 2011 */ {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, ELECTRICAL_CABINET_FANS, ELECTRICAL_CABINET_FANS, ELECTRICAL_CABINET_FANS_MIN_RPM, FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF, 5, EVENT_TYPE__ELECTRICAL_CABINET_FANS_RPM_TOO_LOW }, //*2011*/ +//* 2012 */ {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, ELECTRICAL_CABINET_FANS, ELECTRICAL_CABINET_FANS, ELECTRICAL_CABINET_FANS_STOP , FALSE , DEBUG_LOG_CATEGORY__Critical, 0xFF, 5, EVENT_TYPE__ELECTRICAL_CABINET_FANS_STOPPED }, //*2012*/ +//* 4015 */ {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, DRYER_FAN , DRYER_FAN , DRYER_FAN_MIN_RPM , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF, 5, EVENT_TYPE__DRYER_FAN_RPM_TOO_LOW }, //*4015*/ +//* 4016 */ {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, DRYER_FAN , DRYER_FAN , DRYER_FAN_STOP , FALSE , DEBUG_LOG_CATEGORY__Critical, 0xFF, 5, EVENT_TYPE__DRYER_FAN_STOPPED }, //*4016*/ - {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, MACHINE_FANS , MACHINE_FANS , MACHINE_FANS_MIN_RPM , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF, 5, EVENT_TYPE__MACHINE_FANS_RPM_TOO_LOW }, /*2009*/ - {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, MACHINE_FANS , MACHINE_FANS , MACHINE_FANS_STOP , FALSE , DEBUG_LOG_CATEGORY__Critical, 0xFF, 5, EVENT_TYPE__MACHINE_FANS_STOPPED }, /*2010*/ - {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, ELECTRICAL_CABINET_FANS, ELECTRICAL_CABINET_FANS, ELECTRICAL_CABINET_FANS_MIN_RPM, FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF, 5, EVENT_TYPE__ELECTRICAL_CABINET_FANS_RPM_TOO_LOW }, /*2011*/ - {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, ELECTRICAL_CABINET_FANS, ELECTRICAL_CABINET_FANS, ELECTRICAL_CABINET_FANS_STOP , FALSE , DEBUG_LOG_CATEGORY__Critical, 0xFF, 5, EVENT_TYPE__ELECTRICAL_CABINET_FANS_STOPPED }, /*2012*/ - {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, DRYER_FAN , DRYER_FAN , DRYER_FAN_MIN_RPM , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF, 5, EVENT_TYPE__DRYER_FAN_RPM_TOO_LOW }, /*4015*/ - {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, DRYER_FAN , DRYER_FAN , DRYER_FAN_STOP , FALSE , DEBUG_LOG_CATEGORY__Critical, 0xFF, 5, EVENT_TYPE__DRYER_FAN_STOPPED }, /*4016*/ +//* 8024 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MID_TANK_1_FILL_TIMEOUT}, +//* 8025 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MID_TANK_2_FILL_TIMEOUT}, +//* 8026 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MID_TANK_3_FILL_TIMEOUT}, +//* 8027 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MID_TANK_4_FILL_TIMEOUT}, +//* 8028 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MID_TANK_5_FILL_TIMEOUT}, +//* 8029 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MID_TANK_6_FILL_TIMEOUT}, +//* 8030 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MID_TANK_7_FILL_TIMEOUT}, +//* 8031 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__MID_TANK_8_FILL_TIMEOUT}, -}; +//* 10002 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE}, +//* 10003 */ {eOneSecond,ALARM_SOURCE_TYPE__DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Error,0xFF,0,EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL} + +//}; char AlarmStorePath[30] ="0://SysInfo//Alarm.cfg"; uint16_t FluidLevelWarning = 20,FluidLevelError = 50; +int NumOfSystemAlarms = MAX_SYSTEM_ALARMS; //bool DispenserInUse[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false}; bool EventsNotificationRequestAccepted = false; //read dispensers limit switches. 25 - send warning. up - stop job and send alarm @@ -425,25 +449,16 @@ bool EventsNotificationRequestAccepted = false; //valve OCD //Motor Status //machine cover open -uint32_t AlarmHandlingFlashLoad(void) -{ - AlarmItemSize = sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS; - - - EraseFlashSection(pAlarmItemSize,sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS+4); - ReadAppAndProgram(pAlarmItemSize, 4,&AlarmItemSize); - ReadAppAndProgram(AlarmItem, sizeof(AlarmHandlingItemStruc)*MAX_SYSTEM_ALARMS, HardCodedAlarmItem); - LOG_ERROR(AlarmItem[110].EventType,"Flash Test"); - - return AlarmItemSize; -} +AlarmParameters * AlarmParametersTable = NULL; uint32_t AlarmHandlingLoadFile(void) { FRESULT Fresult = FR_OK; uint8_t* buffer = NULL; - uint32_t Bytes = 0,i,p_size = 0; - AlarmParameters * AlarmParametersTable = NULL; + uint32_t Bytes = 0,i,p_size = 0,F_count = 0,AlarmPtr; Fresult = FileRead(AlarmStorePath, &Bytes, &buffer); + AlarmHandlingItemStruc FileAlarmItem[4]; + int maxAlarms = 0; + if (Fresult == FR_OK) { AlarmParametersTable = alarm_parameters__unpack(NULL, Bytes, buffer); @@ -451,32 +466,66 @@ uint32_t AlarmHandlingLoadFile(void) { if (AlarmParametersTable->n_alarmitem) { + maxAlarms = AlarmParametersTable->n_alarmitem; + p_size = AlarmParametersTable->n_alarmitem*sizeof(AlarmHandlingItemStruc); + ReportWithPackageFilter(AlarmFilter,"Writing alarm size", __FILE__,pAlarmItemSize,AlarmParametersTable->n_alarmitem, RpMessage, p_size, 0); + EraseFlashSection(pAlarmItemSize,p_size+4); + ReadAppAndProgram(pAlarmItemSize, 4,&p_size); + AlarmPtr = (int)pAlarmItemSize+4; + p_size = 0; + F_count = 0; for (i = 0; i < AlarmParametersTable->n_alarmitem ;i++) { - HardCodedAlarmItem[i].AlarmDirection = AlarmParametersTable->alarmitem[i]->alarmdirection; - HardCodedAlarmItem[i].AlarmDirection = AlarmParametersTable->alarmitem[i]->alarmdirection; - HardCodedAlarmItem[i].Frequency = AlarmParametersTable->alarmitem[i]->frequency; //1/10/100/1000 - HardCodedAlarmItem[i].AlarmSource = AlarmParametersTable->alarmitem[i]->alarmsource; - HardCodedAlarmItem[i].DeviceId = AlarmParametersTable->alarmitem[i]->deviceid; - HardCodedAlarmItem[i].ModuleDeviceId = AlarmParametersTable->alarmitem[i]->moduledeviceid; - HardCodedAlarmItem[i].AlarmValue = AlarmParametersTable->alarmitem[i]->alarmvalue; - HardCodedAlarmItem[i].AlarmDirection = AlarmParametersTable->alarmitem[i]->alarmdirection; - HardCodedAlarmItem[i].Severity = AlarmParametersTable->alarmitem[i]->severity; - HardCodedAlarmItem[i].Predecessor = AlarmParametersTable->alarmitem[i]->predecessor; - HardCodedAlarmItem[i].DebounceValue = AlarmParametersTable->alarmitem[i]->debouncevalue; - HardCodedAlarmItem[i].EventType = AlarmParametersTable->alarmitem[i]->eventtype; + FileAlarmItem[F_count].AlarmDirection = AlarmParametersTable->alarmitem[i]->alarmdirection; + FileAlarmItem[F_count].AlarmDirection = AlarmParametersTable->alarmitem[i]->alarmdirection; + FileAlarmItem[F_count].Frequency = AlarmParametersTable->alarmitem[i]->frequency; //1/10/100/1000 + FileAlarmItem[F_count].AlarmSource = AlarmParametersTable->alarmitem[i]->alarmsource; + FileAlarmItem[F_count].DeviceId = AlarmParametersTable->alarmitem[i]->deviceid; + FileAlarmItem[F_count].ModuleDeviceId = AlarmParametersTable->alarmitem[i]->moduledeviceid; + FileAlarmItem[F_count].AlarmValue = AlarmParametersTable->alarmitem[i]->alarmvalue; + FileAlarmItem[F_count].AlarmDirection = AlarmParametersTable->alarmitem[i]->alarmdirection; + FileAlarmItem[F_count].Severity = AlarmParametersTable->alarmitem[i]->severity; + FileAlarmItem[F_count].Predecessor = AlarmParametersTable->alarmitem[i]->predecessor; + FileAlarmItem[F_count].DebounceValue = AlarmParametersTable->alarmitem[i]->debouncevalue; + FileAlarmItem[F_count].EventType = AlarmParametersTable->alarmitem[i]->eventtype; p_size+= sizeof(AlarmHandlingItemStruc); + F_count++; + + if (F_count == 4) + { + ReportWithPackageFilter(AlarmFilter,"Writing four alarms", __FILE__,AlarmPtr,F_count, RpMessage, p_size, 0); + F_count = 0; + ReadAppAndProgram(AlarmPtr, p_size,FileAlarmItem); + AlarmPtr+=p_size; + p_size = 0; + } + } + if (F_count)// finish the reminder of the file + { + ReportWithPackageFilter(AlarmFilter,"Writing additional alarms", __FILE__,AlarmPtr,F_count, RpMessage, p_size, 0); + //F_count = p_size%4; + //p_size += (4-F_count); + ReadAppAndProgram(AlarmPtr, p_size,FileAlarmItem); } - EraseFlashSection(pAlarmItemSize,p_size+4); - ReadAppAndProgram(pAlarmItemSize, 4,&p_size); - ReadAppAndProgram(AlarmItem, p_size,HardCodedAlarmItem); free (buffer); ReportWithPackageFilter(AlarmFilter,"AlarmHandlingLoadFile", __FILE__,__LINE__,p_size, RpMessage, AlarmParametersTable->n_alarmitem, 0); } alarm_parameters__free_unpacked(AlarmParametersTable,NULL); } + else + { + ReportWithPackageFilter(AlarmFilter,"no alarms alarm size", __FILE__,pAlarmItemSize,AlarmParametersTable->n_alarmitem, RpMessage, p_size, 0); + ReadAppAndProgram(pAlarmItemSize, 4,0); + return 0; + } + } + else + { + ReportWithPackageFilter(AlarmFilter,"no alarms file", __FILE__,pAlarmItemSize,AlarmParametersTable->n_alarmitem, RpMessage, p_size, 0); + ReadAppAndProgram(pAlarmItemSize, 4,0); + return 0; } - return Bytes; + return maxAlarms; } void AlarmHandlingInit(void) @@ -499,18 +548,26 @@ void AlarmHandlingInit(void) memcpy(&Bytes,(void *)pAlarmItemSize,sizeof(Bytes)); REPORT_MSG(Bytes,"Bytes read from flash"); - if ((Bytes)&&(Bytes < 10000)) + if ((Bytes)&&(Bytes < 12000)) { - AlarmItem = (AlarmHandlingItemStruc *)ALARM_MAP_IN_FLASH+4; + AlarmItem = (AlarmHandlingItemStruc *)((int)(ALARM_MAP_IN_FLASH+4)); + NumOfSystemAlarms = Bytes/sizeof(AlarmHandlingItemStruc); + ReportWithPackageFilter(AlarmFilter,"AlarmHandlingLoadFile", __FILE__,Bytes,NumOfSystemAlarms, RpMessage, sizeof(AlarmHandlingItemStruc), 0); } else { Bytes = AlarmHandlingLoadFile(); - Bytes = AlarmHandlingFlashLoad(); - REPORT_MSG(Bytes,"Bytes read hard coded"); + //Bytes = AlarmHandlingFlashLoad(); + REPORT_MSG(Bytes,"Bytes read from file"); + if ((Bytes)&&(Bytes <= MAX_SYSTEM_ALARMS)) + { + AlarmItem = (AlarmHandlingItemStruc *)((int)(ALARM_MAP_IN_FLASH+4)); + NumOfSystemAlarms = Bytes; + ReportWithPackageFilter(AlarmFilter,"AlarmHandlingLoadFile", __FILE__,Bytes,NumOfSystemAlarms, RpMessage, sizeof(AlarmHandlingItemStruc), 0); + } } - AlarmItem = HardCodedAlarmItem; //back to hard coded until flash problem are solved + //AlarmItem = HardCodedAlarmItem; //back to hard coded until flash problem are solved return; @@ -519,6 +576,7 @@ void AlarmHandlingSetCurrentLimits(double currentalarmhighlimit,double curre { CurrentAlarmHighLimit = currentalarmhighlimit; CurrentAlarmLowLimit = currentalarmlowlimit; + ReportWithPackageFilter(AlarmFilter,"Alarm Current Limits", __FILE__,__LINE__,(int)(currentalarmhighlimit*100), RpMessage, (int)(currentalarmlowlimit*100), 0); } void AlarmHandlingSetFlags(bool checkHardLimitAlarms,bool checkCurrentAlarms, bool checkTamperAlarms, bool checkMotorAlarms) @@ -539,7 +597,7 @@ JobEndReasonEnum getEndReason(uint32_t AlarmId) return JOB_TEMPERATURE_ALARM; case ALARM_SOURCE_TYPE__LimitSwitchAlarm: usnprintf(AlarmReasonStr, 100, "Dispenser %d empty",AlarmItem[AlarmId].DeviceId); - return JOB_LS_ALARM; + return JOB_OUT_OF_DYE; case ALARM_SOURCE_TYPE__PressureAlarm: usnprintf(AlarmReasonStr, 100, "Over pressure in dispenser %d",AlarmItem[AlarmId].DeviceId); return JOB_PRESSURE_ALARM; @@ -552,6 +610,20 @@ JobEndReasonEnum getEndReason(uint32_t AlarmId) case ALARM_SOURCE_TYPE__CoversAlarm: usnprintf(AlarmReasonStr, 100, "Machine door %d removed during a run",AlarmItem[AlarmId].DeviceId); return JOB_TAMPER_ALARM; + case ALARM_SOURCE_TYPE__HardLimitAlarm: + usnprintf(AlarmReasonStr, 100, "Dispenser %d hit the hard limit",AlarmItem[AlarmId].DeviceId); + return JOB_LS_ALARM; + case ALARM_SOURCE_TYPE__DoNotPollAlarm: + if (AlarmItem[AlarmId].Severity == DEBUG_LOG_CATEGORY__Critical) + { + usnprintf(AlarmReasonStr, 100, "Safety Critical Alarm %d",AlarmItem[AlarmId].EventType); + return JOB_SAFETY_CRITICAL_ALARM; + } + else + { + usnprintf(AlarmReasonStr, 100, "Alarm %d type %d caused a job stop",AlarmId,AlarmItem[AlarmId].EventType); + return JOB_OTHER_ALARM; + } default: usnprintf(AlarmReasonStr, 100, "Alarm %d caused a job stop",AlarmId); return JOB_OTHER_ALARM; @@ -559,6 +631,8 @@ JobEndReasonEnum getEndReason(uint32_t AlarmId) } uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Severity) { + if (AlarmItem == NULL) + return ERROR; //DebugLogCategory reprocessedSeverity = Severity; //ProcessParameters ProcessParameterZero; switch (AlarmItem[AlarmId].AlarmSource) @@ -605,6 +679,18 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever } } break; + case ALARM_SOURCE_TYPE__FluidLevelAlarm: + if (Severity == DEBUG_LOG_CATEGORY__Error) + { + ReportWithPackageFilter(AlarmFilter,"fluid level alarm", __FILE__,AlarmItem[AlarmId].ModuleDeviceId,AlarmId, RpMessage, AlarmItem[AlarmId].AlarmSource, 0); + if (AlarmItem[AlarmId].EventType >= EVENT_TYPE__MID_TANK_1_OVERFLOW) + { + Valve_Set(IDS_Id_to_AirValve[AlarmItem[AlarmId].DeviceId], AlarmItem[AlarmId].DeviceId ); //AlarmItem[AlarmId].DeviceId/ON + Valve_Set(IDS_Id_to_CartrideValve[AlarmItem[AlarmId].DeviceId], AlarmItem[AlarmId].DeviceId ); //Atm_MidTank_OFF/ON + } + } + + break; default: break; } @@ -634,8 +720,8 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever { JobEndReason = getEndReason(AlarmId); AbortJob(AlarmReasonStr); - //Report(AlarmReasonStr, __FILE__,__LINE__,AlarmId, RpMessage, DEBUG_LOG_CATEGORY__Error, 0); - ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,__LINE__,AlarmId, RpMessage, DEBUG_LOG_CATEGORY__Error, 0); + //Report(AlarmReasonStr, __FILE__,__LINE__,AlarmId, RpMessage, Severity, 0); + ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,__LINE__,AlarmId, RpMessage, Severity, 0); } /*switch (AlarmItem[AlarmId].AlarmSource) { @@ -686,12 +772,12 @@ uint32_t AlarmHandlingConsequentActions(uint32_t AlarmId, DebugLogCategory Sever JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) { //JobTicket* JobTicket = CurrentJob; - EventType HeaterEventType[MAX_HEATERS_NUM*2] = {EVENT_TYPE__DRYER_ZONE_1_OVERTEMPERATURE,EVENT_TYPE__DRYER_ZONE_2_OVERTEMPERATURE,EVENT_TYPE__DRYER_ZONE_1_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_1_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_2_OVERTEMPERATURE, + /*EventType HeaterEventType[HEATER_TYPE_MAX_HEATERS] = {EVENT_TYPE__DRYER_ZONE_1_OVERTEMPERATURE,EVENT_TYPE__DRYER_ZONE_2_OVERTEMPERATURE,EVENT_TYPE__DRYER_ZONE_1_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_1_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_2_OVERTEMPERATURE, EVENT_TYPE__DYEING_HEAD_ZONE_3_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_4_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_5_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_6_OVERTEMPERATURE, EVENT_TYPE__MIXER_OVERTEMPERATURE}; - EventType HeaterEventTypeUnder[MAX_HEATERS_NUM*2] = {EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_B,EVENT_TYPE__DRYER_ZONE_2_UNDERTEMPERATURE_B,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_B,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_B,EVENT_TYPE__DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_B, + EventType HeaterEventTypeUnder[HEATER_TYPE_MAX_HEATERS] = {EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_B,EVENT_TYPE__DRYER_ZONE_2_UNDERTEMPERATURE_B,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_B,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_B,EVENT_TYPE__DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_B, EVENT_TYPE__DYEING_HEAD_ZONE_3_UNDERTEMPERATURE_B,EVENT_TYPE__DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_B,EVENT_TYPE__DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_B,EVENT_TYPE__DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_B, - EVENT_TYPE__MIXER_UNDERTEMPERATURE_B}; + EVENT_TYPE__MIXER_UNDERTEMPERATURE_B};*/ int Dispenser_i,Alarm_i,Heater_i,AlarmId=0; HeaterState HeaterState; @@ -703,6 +789,8 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) IDS_MapDispenserUsedinJob(CurrentJob); if (n_segments == 0) return JOB_OK; + if (AlarmItem == NULL) + return JOB_UNSPECIFIED_ERROR; /*for (Segment_i=0;Segment_i<JobTicket->n_segments;Segment_i++) { @@ -729,13 +817,13 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) { if (DispenserUsedInJob[Dispenser_i] == true) { - for (Alarm_i = 0;Alarm_i<MAX_SYSTEM_ALARMS;Alarm_i++) + for (Alarm_i = 0;Alarm_i<NumOfSystemAlarms;Alarm_i++) { if (AlarmItem[Alarm_i].EventType == (EVENT_TYPE__DISPENSER_1_EMPTY+Dispenser_i)) { if (AlarmState[Alarm_i].Status == true) { - status = JOB_OK; + status = JOB_LS_ALARM; AlarmId = Alarm_i; break; } @@ -744,7 +832,7 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) } } } - for (Alarm_i = 0;Alarm_i<MAX_SYSTEM_ALARMS;Alarm_i++) + for (Alarm_i = 0;Alarm_i<NumOfSystemAlarms;Alarm_i++) { if (AlarmItem[Alarm_i].AlarmSource == ALARM_SOURCE_TYPE__CoversAlarm) @@ -752,19 +840,27 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) if (AlarmState[Alarm_i].Status == true) { status = JOB_TAMPER_ALARM; + ReportWithPackageFilter(AlarmFilter,"tamper alarm preventing job", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, AlarmItem[Alarm_i].Severity, AlarmItem[Alarm_i].DeviceId, 0); AlarmId = Alarm_i; break; } } - /*if (AlarmItem[Alarm_i].AlarmSource == ALARM_SOURCE_TYPE__FluidLevelAlarm) + if (AlarmItem[Alarm_i].AlarmSource == ALARM_SOURCE_TYPE__FluidLevelAlarm) { if (AlarmState[Alarm_i].Status == true) { - status = ERROR; - AlarmId = Alarm_i; - break; + if (AlarmItem[Alarm_i].Severity == DEBUG_LOG_CATEGORY__Error) + { + if (DispenserUsedInJob[AlarmItem[Alarm_i].DeviceId] == true) + { + status = ERROR; + ReportWithPackageFilter(AlarmFilter,"fluid level alarm preventing job", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, AlarmItem[Alarm_i].Severity, AlarmItem[Alarm_i].DeviceId, 0); + AlarmId = Alarm_i; + break; + } + } } - }*/ + } if (AlarmItem[Alarm_i].AlarmSource == ALARM_SOURCE_TYPE__MotorAlarm) { if (AlarmState[Alarm_i].Status == true) @@ -772,6 +868,7 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) if(AlarmItem[Alarm_i].Severity>=DEBUG_LOG_CATEGORY__Error) { status = JOB_MOTOR_ALARM; + ReportWithPackageFilter(AlarmFilter,"motor alarm preventing job", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, AlarmItem[Alarm_i].Severity, AlarmItem[Alarm_i].DeviceId, 0); AlarmId = Alarm_i; break; } @@ -782,12 +879,17 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) { if (HeaterCheckReady()==false) { - for (Heater_i = 0;Heater_i<MAX_HEATERS_NUM;Heater_i++) +#warning fit to new head with new alarms +#ifdef Use_Head_Card + for (Heater_i=HEATER_TYPE__DryerAirHeater;Heater_i<HEATER_TYPE_MAX_HEATERS;Heater_i++) +#else + for (Heater_i=HEATER_TYPE__DryerAirHeater;Heater_i<MAX_HEATERS_NUM;Heater_i++) +#endif { LoadHeaterState((HeaterType)Heater_i,&HeaterState); if (HeaterState.setpoint)//temperature is set - heater active { - for (Alarm_i = 0;Alarm_i<MAX_SYSTEM_ALARMS;Alarm_i++) + for (Alarm_i = 0;Alarm_i<NumOfSystemAlarms;Alarm_i++) { if (AlarmItem[Alarm_i].EventType == HeaterEventType[Heater_i]) { @@ -795,15 +897,17 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) { status = JOB_TEMPERATURE_ALARM; AlarmId = Alarm_i; + ReportWithPackageFilter(AlarmFilter,"temperature alarm preventing job", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, AlarmItem[Alarm_i].Severity, AlarmItem[Alarm_i].DeviceId, 0); break; } } - if (AlarmItem[Alarm_i].EventType == HeaterEventTypeUnder[Heater_i]) + if (AlarmItem[Alarm_i].EventType == HeaterUnderEventType_B[Heater_i]) { if (AlarmState[Alarm_i].Status == true) { status = JOB_TEMPERATURE_ALARM; AlarmId = Alarm_i; + ReportWithPackageFilter(AlarmFilter,"temperature alarm preventing job", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, AlarmItem[Alarm_i].Severity, AlarmItem[Alarm_i].DeviceId, 0); break; } } @@ -818,8 +922,9 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) //AbortJob(AlarmReasonStr); //PrepareReady(Module_Alarms,ModuleFail); ReportWithPackageFilter(AlarmFilter,AlarmReasonStr, __FILE__,__LINE__,AlarmId, RpMessage, DEBUG_LOG_CATEGORY__Error, 0); + return (JobEndReason); } - return JobEndReason; + return JOB_OK; } uint32_t AlarmHandling_ControlTrigger(uint32_t IfIndex, uint32_t ReadValue) @@ -854,7 +959,9 @@ void AlarmHandlingSetAlarm(uint32_t AlarmId, bool value) void AlarmHandlingInternalSetAlarm(uint32_t AlarmId, bool value) { int Alarm_i; - for (Alarm_i = 0;Alarm_i < MAX_SYSTEM_ALARMS;Alarm_i++) + if (AlarmItem == NULL) + return ERROR; + for (Alarm_i = 0;Alarm_i < NumOfSystemAlarms;Alarm_i++) { if (AlarmItem[Alarm_i].EventType == AlarmId) { @@ -874,6 +981,13 @@ void AlarmHandlingInternalSetAlarm(uint32_t AlarmId, bool value) AlarmState[Alarm_i].Status = value; } ReportWithPackageFilter(AlarmFilter,"Alarm ON ", __FILE__,AlarmState[Alarm_i].EventPtr,AlarmItem[Alarm_i].EventType, RpMessage, value, Alarm_i); + if ((AlarmItem[Alarm_i].Severity == DEBUG_LOG_CATEGORY__Critical)&&(JobIsActive())) + { + JobEndReason = getEndReason(Alarm_i); + SendJobProgress(0.0,0, false, "Critical alarm!!!!"); + AbortJob("Critical alarm"); + ReportWithPackageFilter(AlarmFilter, AlarmReasonStr,__FILE__,__LINE__,Alarm_i,RpError, 0,0); + } } else { @@ -900,7 +1014,7 @@ uint32_t AlarmHandlingStart(void) if ( AlarmHandlingActive == false) { AlarmHandlingActive = true; - AlarmHandlingControlId = AddControlCallback(AlarmHandling_ControlTrigger,eTenMillisecond,TemplateDataReadCBFunction,0,0,0); + AlarmHandlingControlId = AddControlCallback("Alarm Handling",AlarmHandling_ControlTrigger,eTenMillisecond,TemplateDataReadCBFunction,0,0,0); } return OK; } @@ -916,12 +1030,16 @@ uint32_t AlarmHandlingStop(void) } return OK; } +uint32_t Save_Alarm_i; +void *Save_Alarm_ptr; +EventType Save_Alarm_Type; uint32_t AlarmHandlingLoop(uint32_t tick) { int Alarm_i; uint32_t value; - uint32_t valueL; + double doubleValue = 0.0; +/* uint32_t valueL; uint32_t valueR; uint32_t valueN; uint32_t drawer_big; @@ -929,6 +1047,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick) uint32_t drawer_small1; uint32_t drawer_small2; uint32_t drawer_small3; +*/ @@ -937,8 +1056,10 @@ uint32_t AlarmHandlingLoop(uint32_t tick) //int32_t ivalue; bool Status = false; + if (AlarmItem == NULL) + return ERROR; int AlarmCounter=0; - for (Alarm_i = 0;Alarm_i < MAX_SYSTEM_ALARMS;Alarm_i++) + for (Alarm_i = 0;Alarm_i < NumOfSystemAlarms;Alarm_i++) { Status = false; if (AlarmItem[Alarm_i].AlarmSource > ALARM_SOURCE_TYPE__FluidLevelAlarm) @@ -1012,7 +1133,8 @@ uint32_t AlarmHandlingLoop(uint32_t tick) { if (value >= AlarmItem[Alarm_i].AlarmValue) { - ReportWithPackageFilter(AlarmFilter,"Pressure Alarm ON ", __FILE__,AlarmItem[Alarm_i].DeviceId,AlarmItem[Alarm_i].EventType, RpMessage, value, 0); + if (AlarmState[Alarm_i].Status == false) + ReportWithPackageFilter(AlarmFilter,"Pressure Alarm ON ", __FILE__,AlarmItem[Alarm_i].DeviceId,AlarmItem[Alarm_i].EventType, RpMessage, value, 0); Status = true; } } @@ -1027,24 +1149,55 @@ uint32_t AlarmHandlingLoop(uint32_t tick) case ALARM_SOURCE_TYPE__CurrentAlarm: if (CheckCurrentAlarms) { - if (Get_Heaters_Current_Integer(AlarmItem[Alarm_i].DeviceId, &value) == OK) - { - if (AlarmItem[Alarm_i].AlarmDirection == true) + if (AlarmItem[Alarm_i].ModuleDeviceId == 0xFF) + { + if (Get_Heaters_Current_float(AlarmItem[Alarm_i].DeviceId, &doubleValue) == OK) + { + if (AlarmItem[Alarm_i].AlarmDirection == true) + { + if ((doubleValue >= (float)(AlarmItem[Alarm_i].AlarmValue*CurrentAlarmHighLimit)) || (doubleValue <= (float)(AlarmItem[Alarm_i].AlarmValue*CurrentAlarmLowLimit))) + { + Status = true; + if (AlarmState[Alarm_i].Status == false) + ReportWithPackageFilter(AlarmFilter,"OverCurrent Alarm ON ", __FILE__,AlarmItem[Alarm_i].DeviceId,(int)(AlarmItem[Alarm_i].AlarmValue*100), RpMessage, (int)(doubleValue*100), 0); + } + } + else + { + if (doubleValue <= 0.1) + { + Status = true; + if (AlarmState[Alarm_i].Status == false) + ReportWithPackageFilter(AlarmFilter,"loop break Alarm ON ", __FILE__,AlarmItem[Alarm_i].DeviceId,(int)(AlarmItem[Alarm_i].AlarmValue*100), RpMessage, (int)(doubleValue*100), 0); + } + } + } + } + else + { + if (Get_Head_Current(AlarmItem[Alarm_i].DeviceId, &doubleValue) == OK) { - if ((value >= (AlarmItem[Alarm_i].AlarmValue*CurrentAlarmHighLimit)) || (value <= (AlarmItem[Alarm_i].AlarmValue*CurrentAlarmLowLimit))) + if (AlarmItem[Alarm_i].AlarmDirection == true) { - Status = true; + if ((doubleValue >= (float)(AlarmItem[Alarm_i].AlarmValue*CurrentAlarmHighLimit)) || (doubleValue <= (float)(AlarmItem[Alarm_i].AlarmValue*CurrentAlarmLowLimit))) + { + Status = true; + if (AlarmState[Alarm_i].Status == false) + ReportWithPackageFilter(AlarmFilter,"OverCurrent Alarm ON ", __FILE__,AlarmItem[Alarm_i].DeviceId,(int)(AlarmItem[Alarm_i].AlarmValue*100), RpMessage, (int)(doubleValue*100), 0); + } } - } - else - { - if (value == 0) + else { - Status = true; + if (doubleValue <= 0.1) + { + Status = true; + if (AlarmState[Alarm_i].Status == false) + ReportWithPackageFilter(AlarmFilter,"loop break Alarm ON ", __FILE__,AlarmItem[Alarm_i].DeviceId,(int)(AlarmItem[Alarm_i].AlarmValue*100), RpMessage, (int)(doubleValue*100), 0); + } } - } - } + } + } } else { @@ -1054,24 +1207,30 @@ uint32_t AlarmHandlingLoop(uint32_t tick) case ALARM_SOURCE_TYPE__MotorAlarm: if (CheckMotorAlarms) { - if (isMotorConfigured((TimerMotors_t)AlarmItem[Alarm_i].DeviceId) == false) + if (FPGA_WD_Occurred == true) { Status = false; - break; } - value = MotorGetStatus((TimerMotors_t)AlarmItem[Alarm_i].DeviceId); - if (AlarmItem[Alarm_i].AlarmDirection == true) + else if (isMotorConfigured((TimerMotors_t)AlarmItem[Alarm_i].DeviceId) == false) { - if (value && AlarmItem[Alarm_i].AlarmValue) - { - Status = true; - } + Status = false; } else { - if ((value && AlarmItem[Alarm_i].AlarmValue)==false) + value = MotorGetStatus((TimerMotors_t)AlarmItem[Alarm_i].DeviceId); + if (AlarmItem[Alarm_i].AlarmDirection == true) + { + if (value && AlarmItem[Alarm_i].AlarmValue) + { + Status = true; + } + } + else { - Status = true; + if ((value && AlarmItem[Alarm_i].AlarmValue)==false) + { + Status = true; + } } } } @@ -1084,7 +1243,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick) FluidLevelWarning = AlarmItem[Alarm_i].AlarmValue; else if (AlarmItem[Alarm_i].Severity == DEBUG_LOG_CATEGORY__Error) FluidLevelError = AlarmItem[Alarm_i].AlarmValue; - value = Get_MidTank_Int100_Sensor(AlarmItem[Alarm_i].DeviceId); + value = Get_MidTank_Int1000_Sensor(AlarmItem[Alarm_i].DeviceId); if (AlarmItem[Alarm_i].AlarmDirection == OVER_VALUE) { if (value > AlarmItem[Alarm_i].AlarmValue) @@ -1107,7 +1266,7 @@ uint32_t AlarmHandlingLoop(uint32_t tick) case ALARM_SOURCE_TYPE__TachoAlarm: // add by shai Status = false; - if (CheckTamperAlarms) + if (CheckCurrentAlarms) { // ReportWithPackageFilter(AlarmFilter,"------------FANS_RPM[Alarm_i]----------------", __FILE__,__LINE__,Alarm_i, RpMessage, value, 0); @@ -1117,12 +1276,12 @@ uint32_t AlarmHandlingLoop(uint32_t tick) if (AlarmItem[Alarm_i].Severity == DEBUG_LOG_CATEGORY__Critical ) { value = getSystemFansStatus(); - valueR = value & MASKSYSTEMRIGHT; +/* valueR = value & MASKSYSTEMRIGHT; valueL = value & MASKSYSTEMLEFT; valueN = value & MASKSYSTEMnotUSED; - /*if (valueR) + if (valueR) ReportWithPackageFilter(AlarmFilter,"----------- Right FAN System is not connected----------------", __FILE__,__LINE__,valueR, RpMessage, value, 0); else ReportWithPackageFilter(AlarmFilter,"----------- Right FAN System is connected----------------", __FILE__,__LINE__,valueR, RpMessage, value, 0); @@ -1145,12 +1304,12 @@ uint32_t AlarmHandlingLoop(uint32_t tick) if (AlarmItem[Alarm_i].Severity == DEBUG_LOG_CATEGORY__Critical ) { value = getDrawerFansStatus(); - drawer_big = value & MASKDRYERBIG; +/* drawer_big = value & MASKDRYERBIG; drawer_small0 = value & MASKDRYERSMALL0; drawer_small1 = value & MASKDRYERSMALL1; drawer_small2 = value & MASKDRYERSMALL2; drawer_small3 = value & MASKDRYERSMALL3; -/* + if (drawer_big) ReportWithPackageFilter(AlarmFilter,"----------- drawer_big FAN is not connected----------------", __FILE__,__LINE__,drawer_big, RpMessage, value, 0); else @@ -1283,16 +1442,19 @@ uint32_t AlarmHandlingLoop(uint32_t tick) } else // alarm off { + ReportWithPackageFilter(AlarmFilter,"Alarm OFF ", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, RpMessage, 0, Alarm_i); if (AlarmState[Alarm_i].EventPtr) { //ROM_IntMasterDisable(); + Save_Alarm_i = Alarm_i; + Save_Alarm_ptr = AlarmState[Alarm_i].EventPtr; + Save_Alarm_Type = AlarmItem[Alarm_i].EventType; my_free(AlarmState[Alarm_i].EventPtr); AlarmState[Alarm_i].EventPtr = NULL; //ROM_IntMasterEnable(); } AlarmState[Alarm_i].Status = false; AlarmHandlingConsequentActions(Alarm_i, DEBUG_LOG_CATEGORY__Info); - ReportWithPackageFilter(AlarmFilter,"Alarm OFF ", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, RpMessage, 0, Alarm_i); } } } @@ -1368,7 +1530,7 @@ void SendEventNotifications(void) EventsResponse.n_events = 0; UInt Key = Task_disable(); - for (i = 0;i<MAX_SYSTEM_ALARMS;i++) + for (i = 0;i<NumOfSystemAlarms;i++) { if (AlarmState[i].Status == true) { @@ -1387,7 +1549,7 @@ void SendEventNotifications(void) EventsResponse.events = (Event **)my_malloc(sizeof(Event*)*EventsResponse.n_events); if(EventsResponse.events) { - for (i = 0;i<MAX_SYSTEM_ALARMS;i++) + for (i = 0;i<NumOfSystemAlarms;i++) { if (AlarmState[i].Status == true) { @@ -1497,143 +1659,7 @@ uint32_t StopEventsNotificationRequestFunc(MessageContainer* requestContainer) my_free(responseContainer.data.data); SendChars(container_buffer, container_size); -return OK; - - -/* function : - * ------------- - * DrawerFansStatus // uint32_t getDrawerFansStatus(void) 5 fans OK or NotOK - * SystemFansStatus // uint32_t getSystemFansStatus(void) 2 fans OK or NotOK - * Fans_Speed_RPM[MAX_FANS] // - * - * Read_Dryer_Fan_Tacho // uint32_t Read_Dryer_Fan_Tacho() - * Control_Dryer_Fan(bool StartStop, uint8_t PWM_Command_Precent) //uint32_t Control_Dryer_Fan(bool StartStop, uint8_t PWM_Command_Precent); - * - * excell alarm ver9 from Nadav - * ---------------------------- - * 2009 MACHINE_FANS_RPM_TOO_LOW Warning - * 2010 MACHINE_FANS_STOPPED Critical - * 2011 ELECTRICAL_CABINET_FANS_RPM_TOO_LOW Warning - * 2012 ELECTRICAL_CABINET_FANS_STOPPED Critical - * 4015 DRYER_FAN_RPM_TOO_LOW Warning - * 4016 DRYER_FAN_STOPPED Critical - * - * - * - * - - - - - #define MACHINE_FANS_MIN_RPM 1000 - #define MACHINE_FANS_STOP 0 - #define ELECTRICAL_CABINET_FANS_MIN_RPM 1000 - #define ELECTRICAL_CABINET_FANS_STOP 0 - #define DRYER_FAN_MIN_RPM 1000 - #define DRYER_FAN_STOP 0 - - typedef enum - { - MACHINE_FANS, - ELECTRICAL_CABINET_FANS, -// ELECTRICAL_CABINET_FAN_BIG, -// ELECTRICAL_CABINET_FAN_SMALL1, -// ELECTRICAL_CABINET_FAN_SMALL2, -// ELECTRICAL_CABINET_FAN_SMALL3, -// ELECTRICAL_CABINET_FAN_SMALL4, - DRYER_FAN, - NUM_OF_FANS, - } Fans_t; - - - ----- 2009 : ------- - {eOneSecond, // uint16_t Frequency; - ALARM_SOURCE_TYPE__TachoAlarm, // AlarmSourceType AlarmSource; - MACHINE_FANS , // uint16_t DeviceId; - MACHINE_FANS , // uint8_t ModuleDeviceId; - MACHINE_FANS_MIN_RPM , // uint16_t AlarmValue; - FALSE , // bool AlarmDirection; - DEBUG_LOG_CATEGORY__Warning , // DebugLogCategory Severity; - 0xFF , // uint16_t Predecessor; - 5 , // uint8_t DebounceValue; - EVENT_TYPE__MACHINE_FANS_RPM_TOO_LOW // EventType EventType; - }, - - ----- 2010 : ------- - {eOneSecond, // uint16_t Frequency; - ALARM_SOURCE_TYPE__TachoAlarm, // AlarmSourceType AlarmSource; - MACHINE_FANS , // uint16_t DeviceId; - MACHINE_FANS , // uint8_t ModuleDeviceId; - MACHINE_FANS_STOP , // uint16_t AlarmValue; - FALSE , // bool AlarmDirection; - DEBUG_LOG_CATEGORY__Critical , // DebugLogCategory Severity; - 0xFF , // uint16_t Predecessor; - 5 , // uint8_t DebounceValue; - EVENT_TYPE__MACHINE_FANS_STOPPED // EventType EventType; - }, - - ----- 2011 : ------- - {eOneSecond, // uint16_t Frequency; - ALARM_SOURCE_TYPE__TachoAlarm, // AlarmSourceType AlarmSource; - ELECTRICAL_CABINET_FANS , // uint16_t DeviceId; - ELECTRICAL_CABINET_FANS , // uint8_t ModuleDeviceId; - ELECTRICAL_CABINET_FANS_MIN_RPM , // uint16_t AlarmValue; - FALSE , // bool AlarmDirection; - DEBUG_LOG_CATEGORY__Warning , // DebugLogCategory Severity; - 0xFF , // uint16_t Predecessor; - 5 , // uint8_t DebounceValue; - EVENT_TYPE__ELECTRICAL_CABINET_FANS_RPM_TOO_LOW // EventType EventType; - }, - - ----- 2012 : ------- - {eOneSecond, // uint16_t Frequency; - ALARM_SOURCE_TYPE__TachoAlarm, // AlarmSourceType AlarmSource; - ELECTRICAL_CABINET_FANS , // uint16_t DeviceId; - ELECTRICAL_CABINET_FANS , // uint8_t ModuleDeviceId; - ELECTRICAL_CABINET_FANS_STOP , // uint16_t AlarmValue; - FALSE , // bool AlarmDirection; - DEBUG_LOG_CATEGORY__Critical , // DebugLogCategory Severity; - 0xFF , // uint16_t Predecessor; - 5 , // uint8_t DebounceValue; - EVENT_TYPE__ELECTRICAL_CABINET_FANS_STOPPED // EventType EventType; - }, - - - ----- 2015 : ------- - {eOneSecond, // uint16_t Frequency; - ALARM_SOURCE_TYPE__TachoAlarm, // AlarmSourceType AlarmSource; - DRYER_FAN , // uint16_t DeviceId; - DRYER_FAN , // uint8_t ModuleDeviceId; - DRYER_FAN_MIN_RPM , // uint16_t AlarmValue; - FALSE , // bool AlarmDirection; - DEBUG_LOG_CATEGORY__Warning , // DebugLogCategory Severity; - 0xFF , // uint16_t Predecessor; - 5 , // uint8_t DebounceValue; - EVENT_TYPE__DRYER_FAN_RPM_TOO_LOW // EventType EventType; - }, - - ----- 2016 : ------- - {eOneSecond, // uint16_t Frequency; - ALARM_SOURCE_TYPE__TachoAlarm, // AlarmSourceType AlarmSource; - DRYER_FAN , // uint16_t DeviceId; - DRYER_FAN , // uint8_t ModuleDeviceId; - DRYER_FAN_STOP , // uint16_t AlarmValue; - FALSE , // bool AlarmDirection; - DEBUG_LOG_CATEGORY__Critical , // DebugLogCategory Severity; - 0xFF , // uint16_t Predecessor; - 5 , // uint8_t DebounceValue; - EVENT_TYPE__DRYER_FAN_STOPPED // EventType EventType; - }, - - {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm,MACHINE_FANS , MACHINE_FANS , MACHINE_FANS_MIN_RPM , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF, 5, EVENT_TYPE__MACHINE_FANS_RPM_TOO_LOW }, - {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm,MACHINE_FANS , MACHINE_FANS , MACHINE_FANS_STOP , FALSE , DEBUG_LOG_CATEGORY__Critical, 0xFF, 5, EVENT_TYPE__MACHINE_FANS_STOPPED }, - {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, ELECTRICAL_CABINET_FANS, ELECTRICAL_CABINET_FANS, ELECTRICAL_CABINET_FANS_MIN_RPM, FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF, 5, EVENT_TYPE__ELECTRICAL_CABINET_FANS_RPM_TOO_LOW }, - {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, ELECTRICAL_CABINET_FANS, ELECTRICAL_CABINET_FANS, ELECTRICAL_CABINET_FANS_STOP , FALSE , DEBUG_LOG_CATEGORY__Critical, 0xFF, 5, EVENT_TYPE__ELECTRICAL_CABINET_FANS_STOPPED }, - {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, DRYER_FAN , DRYER_FAN , DRYER_FAN_MIN_RPM , FALSE , DEBUG_LOG_CATEGORY__Warning , 0xFF, 5, EVENT_TYPE__DRYER_FAN_RPM_TOO_LOW }, - {eOneSecond, ALARM_SOURCE_TYPE__TachoAlarm, DRYER_FAN , DRYER_FAN , DRYER_FAN_STOP , FALSE , DEBUG_LOG_CATEGORY__Critical, 0xFF, 5, EVENT_TYPE__DRYER_FAN_STOPPED }, - - -* */ + return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h index 0f73ed4af..be7687f28 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.h @@ -8,6 +8,7 @@ #ifndef MODULES_ALARMHANDLING_ALARMHANDLING_H_ #define MODULES_ALARMHANDLING_ALARMHANDLING_H_ #include "StateMachines/Printing/PrintingSTM.h" +#include <PMR/Diagnostics/EventType.pb-c.h> uint32_t AlarmHandlingFlashLoad(void); uint32_t AlarmHandlingLoadFile(void); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/DriverWithCallbackExample.c b/Software/Embedded_SW/Embedded/Modules/Control/DriverWithCallbackExample.c index 881034e40..9dcb3affb 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/DriverWithCallbackExample.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/DriverWithCallbackExample.c @@ -26,7 +26,7 @@ uint32_t DriverActionWithCallback (uint32_t deviceId, uint32_t parameter, callba ModuleCallback = callback; //start control: - uint32_t ControlId = AddControlCallback( callback, eOneMillisecond, NULL, (IfTypeNone*0x100+deviceId),deviceId, parameter ); + uint32_t ControlId = AddControlCallback(NULL, callback, eOneMillisecond, NULL, (IfTypeNone*0x100+deviceId),deviceId, parameter ); return ControlId; } @@ -38,7 +38,7 @@ uint32_t ControlCallBackFunction(uint32_t deviceId, uint32_t ReadValue) //stop this control loop RemoveControlCallback(deviceId, ControlCallBackFunction ); //possibly: start regular control (speed etc) - //uint32_t ControlId = AddControlCallback(ControlCBFunction Callback, eOneMillisecond, NULL, deviceId, Parameter ); + //uint32_t ControlId = AddControlCallback(NULL,ControlCBFunction Callback, eOneMillisecond, NULL, deviceId, Parameter ); //call the module callback ModuleCallback(deviceId,ReadValue); diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 641a249ff..d3376c400 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -38,8 +38,10 @@ #include <drivers/FPGA/FPGA_Comm.h> #include "drivers/Valves/Valve.h" #include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" +#include "Drivers/I2C_Communication/I2C.h" #include "modules/thread/thread_ex.h" +#include "modules/ifs/ifs.h" #include "modules/ids/ids_ex.h" #include "modules/Diagnostics/Diagnostics.h" #include "Modules/General/MachineStatus.h" @@ -48,13 +50,16 @@ #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" #include "Modules/General/buttons.h" -#include "Drivers/I2C_Communication/Head_Card/PT100/PT100_ADC.h" +#include "Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.h" +#ifdef Use_WHS_Card +#include <Drivers/I2C_Communication/WHS_Card/D_ADS122/WHS_PT100_ADC.h> +#include <Drivers/I2C_Communication/I2C_Task.h> +#endif Task_Handle Millisecond_Task_Handle; /******************** Definitions ********************************************/ @@ -82,7 +87,7 @@ typedef struct MillisecMessage{ }MillisecMessageStruc; //uint32_t ADC_Data[MAX_ADC_DEVICES] = {0}; -//uint32_t TemperatureSensor_Data[MAX_TEMPERATURE_SENSOR_ID] = {0}; +//uint32_t TemperatureSensor_Data[MAX_MAIN_CARD_TEMPERATURE_SENSOR_ID] = {0}; //uint32_t MotorSpeed_Data[NUM_OF_MOTORS] = {0}; //uint32_t MotorStatus_Data[NUM_OF_MOTORS] = {0}; //uint32_t MotorPosition_Data[NUM_OF_MOTORS] = {0}; @@ -102,7 +107,7 @@ MillisecMotorDataStruc ScrewSetMaxSpeedPending = {0}; MillisecMotorDataStruc ScrewMovePending = {0}; MillisecMotorDataStruc MotorData[NUM_OF_MOTORS] = {0}; MillisecMotorDataStruc SpeedSetPending[NUM_OF_MOTORS] = {0}; -MillisecMotorDataStruc PT100Data[MAX_TEMPERATURE_SENSOR_ID] = {0}; +MillisecMotorDataStruc PT100Data[MAX_MAIN_CARD_TEMP_SENS_ID] = {0}; /******************** GLOBAL PARAMETERS ********************************************/ Mailbox_Handle MillisecMsgQ = NULL; Mailbox_Handle TenMillisecMsgQ = NULL; @@ -112,7 +117,6 @@ static GateMutex_Handle gateMillisecDB; uint32_t Millisec_timerBase = TIMER1_BASE; //Timer handle /******************** Functions ********************************************/ -uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Read); void CalculateVOCAlarms(void); //********************************************************************** /******************** CODE ********************************************/ @@ -225,13 +229,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_TEMPERATURE_SENSOR_ID) return -1; + 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); @@ -407,10 +416,11 @@ uint32_t MillisecLoop(uint32_t tick) } } //FPGA_GetTempSensorBusy(); - //int PT100Busy[MAX_TEMPERATURE_SENSOR_ID] = {0,0,0,0,0,0,0,0,0,0}; + //int PT100Busy[MAX_MAIN_CARD_TEMPERATURE_SENSOR_ID] = {0,0,0,0,0,0,0,0,0,0}; if (PT100Activity) { - for (Sensor_i = 0;Sensor_i < MAX_TEMPERATURE_SENSOR_ID;Sensor_i++) + + for (Sensor_i = 0;Sensor_i < MAX_TANGO_TEMPERATURE_SENSOR_ID;Sensor_i++) { /*if (TempSensorResponse[Sensor_i].Busy == true) { @@ -419,19 +429,35 @@ uint32_t MillisecLoop(uint32_t tick) }*/ if (PT100Data[Sensor_i].Active == true) { - #ifndef Use_Head_Card + if(Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID) + { TemperatureSendSensorDummyClk(Sensor_i); - #endif + } PT100Data[Sensor_i].Active = false; PT100Data[Sensor_i].WaitForData = true; // mark the motor for data request next round break; // one PT100 activitiy per MS } else if (PT100Data[Sensor_i].WaitForData == true) //Read request sent, data is waiting { - #ifdef Use_Head_Card - HeadADCPT100_SendReadDataCommand(Sensor_i); - #endif + if(Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID) + { TemperatureSensorReadFromFPGA_Res(Sensor_i); //got the data from the FPGA + } + /*else if(Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID) - move to the function control_HeadCard_PT100 + { + //HeadCard_Toggle_PT100(Sensor_i); + //delay?? + //HeadADCPT100_SendReadDataCommand(Sensor_i); + } + else if(Sensor_i < MAX_WHS_CARD_TEMP_SENS_ID) + { + //for WHS... + } + else + { + //TBD + }*/ + PT100Data[Sensor_i].WaitForData = false; PT100Data[Sensor_i].SyncRequired = true; if (PT100Data[Sensor_i].Callback) @@ -440,10 +466,23 @@ uint32_t MillisecLoop(uint32_t tick) } else if (PT100Data[Sensor_i].SyncRequired == true) { - #ifdef Use_Head_Card - HeadADCPT100_StartSync(Sensor_i); - #endif - TemperatureSensorSync(Sensor_i); + if(Sensor_i < MAX_MAIN_CARD_TEMP_SENS_ID) + { + TemperatureSensorSync(Sensor_i); + } + /*else if(Sensor_i < MAX_HEAD_CARD_TEMP_SENS_ID) - NA move to the function control_HeadCard_PT100 + { + //HeadADCPT100_StartSync(Sensor_i); + } + else if(Sensor_i < MAX_WHS_CARD_TEMP_SENS_ID) + { + //StartSync WHS... + } + else + { + //TBD... + }*/ + PT100Data[Sensor_i].SyncRequired = false; PT100Activity--; @@ -460,11 +499,11 @@ uint32_t MillisecLoop(uint32_t tick) #endif return OK; } -int TemperatureSum[MAX_TEMPERATURE_SENSOR_ID]; -int TemperatureMin[MAX_TEMPERATURE_SENSOR_ID]; -int TemperatureMax[MAX_TEMPERATURE_SENSOR_ID]; -int TemperatureCount[MAX_TEMPERATURE_SENSOR_ID]; -int TemperatureCalc[MAX_TEMPERATURE_SENSOR_ID]; +int TemperatureSum[MAX_HEAD_CARD_TEMP_SENS_ID]; +int TemperatureMin[MAX_HEAD_CARD_TEMP_SENS_ID]; +int TemperatureMax[MAX_HEAD_CARD_TEMP_SENS_ID]; +int TemperatureCount[MAX_HEAD_CARD_TEMP_SENS_ID]; +int TemperatureCalc[MAX_HEAD_CARD_TEMP_SENS_ID]; void MillisecUpdateTemperatures (TEMPERATURE_SENSOR_ID_ENUM SensorId,int temperature) { //if(TemperatureCount[SensorId]++>=10) @@ -489,29 +528,79 @@ 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; +bool RapidPressureRead = true; +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, Hundred_msTick , m90msecTick, Onesecond_Tick,O900Millisecond_Tick,OneMinute_Tick,OneHourTick; + 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 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 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; + Gradient_Tick = (tick%400 == 0) ?true:false; Onesecond_Tick = (tick%eOneSecond == 0) ?true:false; OneMinute_Tick = (tick%eOneMinute == 0) ?true:false; OneHourTick = (tick%eOneHour == 0) ?true:false; @@ -524,13 +613,45 @@ uint32_t MillisecLowLoop(uint32_t tick) { //Speed_Data = Calculate_Speed_Sensor_Velocity(); //MillisecReadFromTempSensor(Sensor_Read, NULL); - //if (Sensor_Read++ >= MAX_TEMPERATURE_SENSOR_ID) Sensor_Read = 0; + //if (Sensor_Read++ >= MAX_MAIN_CARD_TEMPERATURE_SENSOR_ID) Sensor_Read = 0; if(Machine_Idle_Mode == true) Machine_Idle_Breathing_Led(); + 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 + { + 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(); + } +#endif */ if (m90msecTick) { - for (Sensor_i = 0;Sensor_i < MAX_TEMPERATURE_SENSOR_ID;Sensor_i++) +#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 { MillisecReadFromTempSensor(Sensor_i, NULL); } @@ -540,7 +661,14 @@ uint32_t MillisecLowLoop(uint32_t tick) Speed_Data = Calculate_Speed_Sensor_Velocity(); Read_Buttons_Reg(); //Ink_Cart_Led(); - for (Sensor_i = 0;Sensor_i < MAX_TEMPERATURE_SENSOR_ID;Sensor_i++) + /////////////////////////////////////////////////////////////////// + + +#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 { MillisecUpdateTemperatures (Sensor_i,TemperatureSensorRead(Sensor_i)); } @@ -556,34 +684,31 @@ uint32_t MillisecLowLoop(uint32_t tick) { for (Disp_i = 0;Disp_i < MAX_SYSTEM_DISPENSERS;Disp_i++) { - CalculateDispenserPressure(Disp_i); - //Read_MidTank_Pressure_Sensor(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 (Gradient_Tick) + DispensersCollectionCall(); + 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); - //Read_MidTank_Pressure_Sensor(Disp_i); - } - } FPGA_GetAllDispensersValveBusyOCD(); temp = Read_Fans_Tacho(); DrawerFansStatus = temp & 0x1F; SystemFansStatus = temp & 0xE0; - //KeepAliveOneSecondCall(); + } + if (O400Millisecond_Tick) + { for (Motor_i = 0;Motor_i < NUM_OF_MOTORS;Motor_i++) { if (Motor_i == HARDWARE_MOTOR_TYPE__MOTO_SCREW) @@ -591,25 +716,54 @@ 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) { - 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); } } - for (Sensor_i = 0;Sensor_i < MAX_TEMPERATURE_SENSOR_ID;Sensor_i++) + } + if (Onesecond_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 { 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) { - for (Disp_i = 0;Disp_i < MAX_SYSTEM_DISPENSERS;Disp_i++) + Trigger_MidTank_Pressure_Read(); + /*for (Disp_i = 0;Disp_i < MAX_SYSTEM_DISPENSERS;Disp_i++) { Read_MidTank_Pressure_Sensor(Disp_i); - } - MachineUpdateResponseFunc(); + }*/ +// MachineUpdateResponseFunc(); /* for (Motor_i = 0;Motor_i < NUM_OF_MOTORS;Motor_i++) { if (Motor_i == HARDWARE_MOTOR_TYPE__MOTO_SCREW) @@ -630,6 +784,7 @@ uint32_t MillisecLowLoop(uint32_t tick) PumpActivation(900); PumpCounter = 0; } + MidTankReading(); } //ROM_IntMasterEnable(); @@ -705,7 +860,7 @@ void MillisecLowTask(UArg arg0, UArg arg1) */ /*uint32_t getTemperatureSensorData(int SensorId) { - assert (SensorId < MAX_TEMPERATURE_SENSOR_ID); + assert (SensorId < MAX_MAIN_CARD_TEMPERATURE_SENSOR_ID); return TemperatureSensor_Data[SensorId]; }*/ 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/PIDAlgo.c b/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c index 6c1b647be..3d1d353c2 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.c @@ -3,41 +3,6 @@ float PIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_Config_Params *params, float *_pre_error, float *_integral) { - float error; - float derivative; - float output; - - //Calculate P,I,D - error = _setPoint - _mesuredParam; - - //In case of error too small then stop integration - if(fabs(error) > params->epsilon) - { - *_integral = *_integral + error*params->dt; - } - - derivative = (error - *_pre_error)/params->dt; - - output = params->Kp*error + params->Ki**_integral + params->Kd*derivative; - - //Saturation Filter - if(output > params->MAX) - { - output = params->MAX; - } - else if(output < params->MIN) - { - output = params->MIN; - } - - //Update error - *_pre_error = error; - - return output; -} - -float AdvancedPIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_Config_Params *params, float *_pre_error, float *_integral) -{ float error; float derivative; float output; @@ -70,7 +35,7 @@ float AdvancedPIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_ return output; } - +/* float TestPIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_Config_Params *params, float *_pre_error, float *_integral) { float error; @@ -81,14 +46,14 @@ float TestPIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_Conf error = _setPoint - _mesuredParam; //ITerm+= (ki * error); *_integral = *_integral + (error*params->Ki); - /* if(ITerm > outMax) + /`* if(ITerm > outMax) { ITerm= outMax; } else if(ITerm < outMin) { ITerm= outMin; - } */ + } *`/ if(*_integral > params->MAX) { *_integral = params->MAX; @@ -100,7 +65,7 @@ float TestPIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_Conf // double dInput = (input - lastInput); derivative = error - *_pre_error; - /*Compute PID Output*/ + /`*Compute PID Output*`/ // double output = kp * error + ITerm- kd * dInput; output = params->Kp*error/params->ProportionalErrorMultiplier + *_integral/params->IntegralErrorMultiplier + params->Kd*derivative; @@ -119,3 +84,4 @@ float TestPIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_Conf return output; } +*/ diff --git a/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.h b/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.h index 4792be9ec..4f94f3612 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.h +++ b/Software/Embedded_SW/Embedded/Modules/Control/PIDAlgo.h @@ -17,6 +17,5 @@ typedef struct }PID_Config_Params; float PIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_Config_Params *params, float *_pre_error, float *_integral); -float AdvancedPIDAlgorithmCalculation(float _setPoint,float _mesuredParam , PID_Config_Params *params, float *_pre_error, float *_integral); #endif /* MODULES_PIDALGO_H_ */ diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.c b/Software/Embedded_SW/Embedded/Modules/Control/control.c index 80afb7ac6..e093815a9 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.c @@ -45,19 +45,29 @@ //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 "drivers/FPGA/FPGA_SPI_Comm.h" + #include "Modules/General/buttons.h" +#include "Modules/General/GeneralHardware.h" +#include "Modules/AlarmHandling/AlarmHandling.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 ********************************************/ @@ -71,6 +81,7 @@ typedef struct DataReadCBFunction ControlDataReadPtr; ControlCBFunction ControlCallbackPtr; uint32_t ControlTiming; + char *Name; }ControlDeviceStruc; typedef enum @@ -132,6 +143,7 @@ void ControlInit(void) ControlArray[Device_i].ControlCallbackPtr = NULL; ControlArray[Device_i].ControlDataReadPtr = NULL; ControlArray[Device_i].ControlTiming = eNoControl; + ControlArray[Device_i].Name = NULL; } gateControlDB = GateMutex_create(NULL, &eb); if (gateControlDB == NULL) @@ -166,7 +178,23 @@ uint32_t ControlActivityLed( uint32_t Parameter1) COMM_RED_LED_ON; 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); + if (JobIsActive()) + { + 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; + FPGA_SetMotorsInit(); + Motor_ReconfigAllMotors(); + } + else + ACTIVITY_GREEN_LED_OFF; if(power.color == fastBILNK) Pannel_Leds(POWER_ON_OFF,MODE_OFF); @@ -298,7 +326,7 @@ void ControlStart(void) TimerEnable(Control_timerBase, TIMER_A); ADCAcquireStart(0,1); - AddControlCallback( ControlEmptyCBFunction, eHundredMillisecond, ControlActivityLed,0, 0, 0 ); + AddControlCallback("ControlActivityLed", ControlEmptyCBFunction, eHundredMillisecond, ControlActivityLed,0, 0, 0 ); SysCtlDelay(12000000); MillisecStart(); @@ -313,7 +341,7 @@ void ControlStart(void) * both these callbacks can be removed. if a new call is arriving, it invalidates the previous one (no dual control or data) * ***************************************************************************************************************************************************/ -uint32_t AddControlCallback( ControlCBFunction Callback, uint32_t CtrlFrequency, DataReadCBFunction DriverfPtr, uint16_t IfIndex, uint32_t Parameter1, uint32_t Parameter2 ) +uint32_t AddControlCallback(char* Name, ControlCBFunction Callback, uint32_t CtrlFrequency, DataReadCBFunction DriverfPtr, uint16_t IfIndex, uint32_t Parameter1, uint32_t Parameter2 ) { assert(Callback); assert(DriverfPtr); @@ -364,6 +392,7 @@ uint32_t AddControlCallback( ControlCBFunction Callback, uint32_t CtrlFrequency ControlArray[deviceId].Parameter1 = Parameter1; ControlArray[deviceId].IfIndex = IfIndex; ControlArray[deviceId].StartTick = millisecondCounter; + ControlArray[deviceId].Name = Name; GateMutex_leave(gateControlDB, key); //LOG_ERROR(deviceId, "Add Callback"); @@ -377,11 +406,11 @@ int SafeRemoveHighControlCallback(uint32_t deviceId , ControlCBFunction Callback Report("Fixing Remove control ",__FILE__,__LINE__,(int)GetControlDevice_i(),RpWarning,(int)deviceId,0); if (RemoveControlCallback(GetControlDevice_i(),Callback)==OK) { - Report("Remove control callback fixed",__FILE__,__LINE__,(int)GetControlDevice_i(),RpWarning,(int)deviceId,0); + Report("Remove control callback fixed",ControlArray[GetControlDevice_i()].Name,__LINE__,(int)GetControlDevice_i(),RpWarning,(int)deviceId,0); } else { - Report("Remove control callback failed",__FILE__,__LINE__,(int)GetControlDevice_i(),RpWarning,(int)deviceId,0); + Report("Remove control callback failed",ControlArray[GetControlDevice_i()].Name,__LINE__,(int)GetControlDevice_i(),RpWarning,(int)deviceId,0); return ERROR; } } @@ -395,11 +424,11 @@ int SafeRemoveControlCallback(uint32_t deviceId , ControlCBFunction Callback) Report("Fixing Remove control ",__FILE__,__LINE__,(int)GetControlLowDevice_i(),RpWarning,(int)deviceId,0); if (RemoveControlCallback(GetControlLowDevice_i(),Callback)==OK) { - Report("Remove control callback fixed",__FILE__,__LINE__,(int)GetControlLowDevice_i(),RpWarning,(int)deviceId,0); + Report("Remove control callback fixed",ControlArray[GetControlDevice_i()].Name,__LINE__,(int)GetControlLowDevice_i(),RpWarning,(int)deviceId,0); } else { - Report("Remove control callback failed",__FILE__,__LINE__,(int)GetControlLowDevice_i(),RpWarning,(int)deviceId,0); + Report("Remove control callback failed",ControlArray[GetControlDevice_i()].Name,__LINE__,(int)GetControlLowDevice_i(),RpWarning,(int)deviceId,0); return ERROR; } } diff --git a/Software/Embedded_SW/Embedded/Modules/Control/control.h b/Software/Embedded_SW/Embedded/Modules/Control/control.h index 450646a68..78e24f495 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/control.h +++ b/Software/Embedded_SW/Embedded/Modules/Control/control.h @@ -17,6 +17,7 @@ typedef enum { eNoControl = 0, eOneMillisecond = 1, eTenMillisecond = 10, + eFiftyMillisecond = 50, eHundredMillisecond = 100, eOneSecond = 1000, eOneMinute = 60000, @@ -38,7 +39,7 @@ typedef enum void ControlInit(void); void ControlStop(void); void ControlStart(void); -uint32_t AddControlCallback( ControlCBFunction Callback, uint32_t CtrlFrequency, DataReadCBFunction DriverfPtr, uint16_t IfIndex, uint32_t Parameter1, uint32_t Parameter2 ); +uint32_t AddControlCallback(char *Name, ControlCBFunction Callback, uint32_t CtrlFrequency, DataReadCBFunction DriverfPtr, uint16_t IfIndex, uint32_t Parameter1, uint32_t Parameter2 ); int RemoveControlCallback(uint32_t deviceId, ControlCBFunction Callback ); //The safe remove command can be used ONLY when called from the control callback itself int SafeRemoveControlCallback(uint32_t deviceId , ControlCBFunction Callback); diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c index 4597efa93..2fbc60f09 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c @@ -20,10 +20,14 @@ #include <PMR/Diagnostics/SetValveStateResponse.pb-c.h> #include <PMR/Diagnostics/ValveType.pb-c.h> #include <PMR/Diagnostics/ValveStateCode.pb-c.h> +#include <PMR/Diagnostics/SetBlowerStateRequest.pb-c.h> +#include <PMR/Diagnostics/SetBlowerStateResponse.pb-c.h> +#include <PMR/Hardware/HardwareBlowerType.pb-c.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" +#include "Drivers/I2C_Communication/Head_Card/Fan/Head_Fan.h" #include "drivers/Valves/Valve.h" #include "drivers/Heater/Heater.h" #include "modules/waste/waste.h" @@ -128,112 +132,58 @@ uint32_t SetDigitalOutRequestRequestFunc(MessageContainer* requestContainer) DeActivateCleanerPump(); break; case INTERFACE_IOS__GPO_DRYER_SSR1_CTRL: -#ifdef DEMO_TEMPERATURE - HeaterTestActive[1] = false; -#endif if (request->value == true) ActivateHeater(1); else DeActivateHeater(1); -#ifdef DEMO_TEMPERATURE - HeaterTestActive[1] = true; -#endif break; case INTERFACE_IOS__GPO_DRYER_SSR2_CTRL: -#ifdef DEMO_TEMPERATURE - HeaterTestActive[2] = false; -#endif if (request->value == true) ActivateHeater(2); else DeActivateHeater(2); -#ifdef DEMO_TEMPERATURE - HeaterTestActive[2] = true; -#endif break; case INTERFACE_IOS__GPO_DYEINGH_SSR8_CTRL: -#ifdef DEMO_TEMPERATURE - HeaterTestActive[3] = false; -#endif if (request->value == true) ActivateHeater(3); else DeActivateHeater(3); -#ifdef DEMO_TEMPERATURE - HeaterTestActive[3] = true; -#endif break; case INTERFACE_IOS__GPO_DYEINGH_SSR7_CTRL: -#ifdef DEMO_TEMPERATURE - HeaterTestActive[4] = false; -#endif if (request->value == true) ActivateHeater(4); else DeActivateHeater(4); -#ifdef DEMO_TEMPERATURE - HeaterTestActive[4] = true; -#endif break; case INTERFACE_IOS__GPO_DYEINGH_SSR6_CTRL: -#ifdef DEMO_TEMPERATURE - HeaterTestActive[5] = false; -#endif if (request->value == true) ActivateHeater(5); else DeActivateHeater(5); -#ifdef DEMO_TEMPERATURE - HeaterTestActive[5] = true; -#endif break; case INTERFACE_IOS__GPO_DYEINGH_SSR5_CTRL: -#ifdef DEMO_TEMPERATURE - HeaterTestActive[6] = false; -#endif if (request->value == true) ActivateHeater(6); else DeActivateHeater(6); -#ifdef DEMO_TEMPERATURE - HeaterTestActive[6] = true; -#endif break; case INTERFACE_IOS__GPO_DILUTORPUMP_SSR10_CTRL: -#ifdef DEMO_TEMPERATURE - HeaterTestActive[7] = false; -#endif if (request->value == true) ActivateHeater(7); else DeActivateHeater(7); -#ifdef DEMO_TEMPERATURE - HeaterTestActive[7] = true; -#endif break; case INTERFACE_IOS__GPO_EXTWINDER_SSR11_CTRL: -#ifdef DEMO_TEMPERATURE - HeaterTestActive[8] = false; -#endif if (request->value == true) ActivateHeater(8); else DeActivateHeater(8); -#ifdef DEMO_TEMPERATURE - HeaterTestActive[8] = true; -#endif break; case INTERFACE_IOS__GPO_MIXCHIP_SSR4_CTRL: -#ifdef DEMO_TEMPERATURE - HeaterTestActive[9] = false; -#endif if (request->value == true) ActivateHeater(9); else DeActivateHeater(9); -#ifdef DEMO_TEMPERATURE - HeaterTestActive[9] = true; -#endif break; case INTERFACE_IOS__GPO_SPARE_SSR13_CTRL: if (request->value == true) @@ -271,6 +221,18 @@ uint32_t SetDigitalOutRequestRequestFunc(MessageContainer* requestContainer) case INTERFACE_IOS__GPO_TFEED_BREAK_1: Pumps_Control(WASTECH_PUMP2, request->value); break; + case INTERFACE_IOS__GPO_LED3: + HeadCard_Actuators_Control(ACTIN, LOW,request->value); + break; + case INTERFACE_IOS__GPO_LED4: + HeadCard_Actuators_Control(ACTOT, LOW,request->value); + break; + case INTERFACE_IOS__GPO_BUZZER: + if (request->value == true) + Buzzer(MODE_ON);//use START or STOP, 0 - 100%(); + else + Buzzer(MODE_OFF);//use START or STOP, 0 - 100%(); + break; default: responseContainer.has_error = true; responseContainer.error = ERROR_CODE__GENERAL_ERROR; @@ -372,6 +334,83 @@ uint32_t SetValveStateRequestFunc(MessageContainer* requestContainer) return status; } +/******************************************************************************** + *Blower Setting + ********************************************************************************/ +uint32_t SetBlowerStateRequestFunc(MessageContainer* requestContainer) +{ + MessageContainer responseContainer; + uint8_t* container_buffer; + uint32_t status = OK; + uint32_t blower; + SetBlowerStateRequest* request = set_blower_state_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + + SetBlowerStateResponse response = SET_BLOWER_STATE_RESPONSE__INIT; + + responseContainer = createContainer(MESSAGE_TYPE__SetBlowerStateResponse, requestContainer->token, true, &response, &set_blower_state_response__pack, &set_blower_state_response__get_packed_size); + container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); + + if (request->has_blowertype) + { + switch (request->blowertype) + { + case HARDWARE_BLOWER_TYPE__DefaultBlower: + if ((request->has_voltage)&&(request->isactive == true)) + { + Turn_the_Blower_On();//Turn on with the Default_Voltage + Control_Voltage_To_Blower(request->voltage); + } + else + Turn_the_Blower_Off(); + break; + case HARDWARE_BLOWER_TYPE__HeadBlower1: +#ifdef Use_Head_Card + if ((request->has_voltage)&&(request->isactive == true)) + status = Head_Fan_PWM_Control(0,request->voltage); + else if (request->isactive == false) + status = Head_Fan_PWM_Control(0,0); +#else + status = NOT_SUPPORTED; +#endif + break; + case HARDWARE_BLOWER_TYPE__HeadBlower2: +#ifdef Use_Head_Card + if ((request->has_voltage)&&(request->isactive == true)) + status = Head_Fan_PWM_Control(1,request->voltage); + else if (request->isactive == false) + status = Head_Fan_PWM_Control(1,0); +#else + status = NOT_SUPPORTED; +#endif + break; + case HARDWARE_BLOWER_TYPE__WHSBlower2: +#ifdef Use_WHS_Card +#else + status = NOT_SUPPORTED; +#endif + break; + default: + status = NOT_SUPPORTED; + break; + + } + } + else + status = NOT_SUPPORTED; + if (status != OK) + { + status = ERROR; + responseContainer.has_error = true; + responseContainer.error = ERROR_CODE__GENERAL_ERROR; + } + size_t container_size = message_container__pack(&responseContainer, container_buffer); + my_free(responseContainer.data.data); + SendChars(container_buffer, container_size); + set_blower_state_request__free_unpacked(request,NULL); + + return status; +} + diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c index 6db76e842..9fc851319 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.c @@ -63,14 +63,14 @@ uint32_t DiagnosticsStop(void); uint32_t Diagnostics_ControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t Diagnostics_TenMiliControlTrigger(uint32_t IfIndex, uint32_t ReadValue); uint32_t Diagnostics_OneSecControlTrigger(uint32_t IfIndex, uint32_t ReadValue); -uint32_t DispensersCollection(uint32_t IfIndex, uint32_t ReadValue); +uint32_t Diagnostics_OneMinControlTrigger(uint32_t IfIndex, uint32_t ReadValue); DiagnosticsMonitors DiagnosticsMonitor = DIAGNOSTICS_MONITORS__INIT; #define DIAGNOSTICS_LIMIT 3 #define DIAGNOSTICS_DANCER_LIMIT 30 int DiagnosticsIndex = 0; -int DiagnosticCollectionLimit = 2; //number of data samples to collect before sending to the host +int DiagnosticCollectionLimit = 3; //number of data samples to collect before sending to the host //int DiagnosticLimit = eHundredMillisecond; //frequency of data collection //int DiagnosticFastLimit = eTenMillisecond; //frequency of data collection int DiagnosticLimit =eHundredMillisecond; //frequency of data collection @@ -87,30 +87,43 @@ double pollermotor[DIAGNOSTICS_LIMIT+1]; double windermotor[DIAGNOSTICS_LIMIT+1]; double screwmotor[DIAGNOSTICS_LIMIT+1]; double mixertemperature[DIAGNOSTICS_LIMIT+1]; -double headzone1temperature[DIAGNOSTICS_LIMIT+1]; +/*double headzone1temperature[DIAGNOSTICS_LIMIT+1]; double headzone2temperature[DIAGNOSTICS_LIMIT+1]; double headzone3temperature[DIAGNOSTICS_LIMIT+1]; double headzone4temperature[DIAGNOSTICS_LIMIT+1]; double headzone5temperature[DIAGNOSTICS_LIMIT+1]; double headzone6temperature[DIAGNOSTICS_LIMIT+1]; +double headzone7temperature[DIAGNOSTICS_LIMIT+1]; +double headzone8temperature[DIAGNOSTICS_LIMIT+1]; +double headzone9temperature[DIAGNOSTICS_LIMIT+1]; +double headzone10temperature[DIAGNOSTICS_LIMIT+1]; +double headzone11temperature[DIAGNOSTICS_LIMIT+1]; +double headzone12temperature[DIAGNOSTICS_LIMIT+1]; double dryerzone1temperature[DIAGNOSTICS_LIMIT+1]; double dryerzone2temperature[DIAGNOSTICS_LIMIT+1]; -double dryerzone3temperature[DIAGNOSTICS_LIMIT+1]; +double dryerzone3temperature[DIAGNOSTICS_LIMIT+1];*/ double dispensermotorfrequency[MAX_SYSTEM_DISPENSERS][DIAGNOSTICS_LIMIT+1]; double dispenserspressure[MAX_SYSTEM_DISPENSERS][DIAGNOSTICS_LIMIT+1]; +double dispenserinklevel[MAX_SYSTEM_DISPENSERS][1]; +double midtankinklevel[MAX_SYSTEM_DISPENSERS][1]; double MidTankpressure[MAX_SYSTEM_DISPENSERS][1]; +double HeadFlowMeter; +double DrierFlowMeter; double HeatersCurrent[NUM_OF_CURRENT_HEATERS][1]; double VOC_Sensor; +double OverallTemperature; DoubleArray DispenserFreq[MAX_SYSTEM_DISPENSERS]; DoubleArray DiagnosticsDispenserPressure[MAX_SYSTEM_DISPENSERS]; +DoubleArray DispenserInkLevel[MAX_SYSTEM_DISPENSERS]; +DoubleArray DiagnosticsMidTankInkLevel[MAX_SYSTEM_DISPENSERS]; HeaterState **heatersstates; -HeaterState HeaterInfo[HEATER_TYPE__MixerHeater+1]; +HeaterState HeaterInfo[HEATER_TYPE_MAX_HEATERS]; -#define NUM_OF_INTERFACE_IOS 21 +#define NUM_OF_INTERFACE_IOS 23 DigitalInterfaceState **digitalinterfacestates; DigitalInterfaceState DigitalOutputState[NUM_OF_INTERFACE_IOS]; /*double dispenser1motorfrequency[DIAGNOSTICS_LIMIT+1]; @@ -129,13 +142,13 @@ bool blowervolatgedisplay = false; bool midtankDisplay = false; double diagvoltage = 0; /******************** Functions ********************************************/ -//uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Read); //********************************************************************** typedef enum { DiagnosticsTrigger, DiagnosticsTenMiliTrigger, DiagnosticsOneSecTrigger, + DiagnosticsOneMinuteTrigger }DiagnosticsMessages; typedef struct DiagnosticsMessage{ @@ -152,6 +165,8 @@ uint32_t diag_time[MAX_DIAG_LOG]; Diagnostic_Mode DiagnosticMode = Diagnostic_Normal_Mode; +uint32_t Diagnostis_Time_Stamp = 0; + /******************** CODE ********************************************/ //********************************************************************** @@ -164,22 +179,24 @@ void DiagnosticsInit(void) DiagnosticsMsgQ = Mailbox_create(sizeof(DiagnosticsMessageStruc), 40, NULL,&eb); - DiagnosticsMonitor.dispensersmotorsfrequency = (DoubleArray**)my_malloc(sizeof(DoubleArray *)*8); - DiagnosticsMonitor.dispenserspressure = (DoubleArray**)my_malloc(sizeof(DoubleArray)*8); - DiagnosticsMonitor.dispenserslinearpositions = (DoubleArray**)my_malloc(sizeof(DoubleArray)*8); - DiagnosticsMonitor.dispensersangularencoders = (DoubleArray**)my_malloc(sizeof(DoubleArray)*8); + DiagnosticsMonitor.dispensersmotorsfrequency = (DoubleArray**)my_malloc(sizeof(DoubleArray *)*MAX_SYSTEM_DISPENSERS); + DiagnosticsMonitor.dispenserspressure = (DoubleArray**)my_malloc(sizeof(DoubleArray)*MAX_SYSTEM_DISPENSERS); + DiagnosticsMonitor.midtanksinklevel = (DoubleArray**)my_malloc(sizeof(DoubleArray)*MAX_SYSTEM_DISPENSERS); + DiagnosticsMonitor.dispensersinklevel = (DoubleArray**)my_malloc(sizeof(DoubleArray)*MAX_SYSTEM_DISPENSERS); for (i = 0; i<MAX_SYSTEM_DISPENSERS;i++) { double_array__init(&DispenserFreq[i]); double_array__init(&DiagnosticsDispenserPressure[i]); + double_array__init(&DiagnosticsMidTankInkLevel[i]); + double_array__init(&DispenserInkLevel[i]); } - heatersstates = (HeaterState**)my_malloc(sizeof(HeaterState *)*(HEATER_TYPE__MixerHeater+1)); - for(i=0;i<=HEATER_TYPE__MixerHeater;i++) + heatersstates = (HeaterState**)my_malloc(sizeof(HeaterState *)*(HEATER_TYPE_MAX_HEATERS)); + for(i=0;i<HEATER_TYPE_MAX_HEATERS;i++) { heater_state__init(&HeaterInfo[i]); heatersstates[i] = &HeaterInfo[i]; } - digitalinterfacestates = (DigitalInterfaceState**)my_malloc(sizeof(DigitalInterfaceState *)*(MAX_HEATERS_NUM+8)); + digitalinterfacestates = (DigitalInterfaceState**)my_malloc(sizeof(DigitalInterfaceState *)*(NUM_OF_INTERFACE_IOS)); for (i = 0;i<NUM_OF_INTERFACE_IOS;i++ ) { digital_interface_state__init(&DigitalOutputState[i]); @@ -207,22 +224,32 @@ void SetDiagnosticMode(Diagnostic_Mode Mode) DiagnosticMode = Mode; REPORT_MSG(Mode,"Diagnostic Mode set"); } +Diagnostic_Mode GetDiagnosticMode(void) +{ + return DiagnosticMode; +} + +uint32_t GetDiagnosticCollectionLimit(void) +{ + return (DiagnosticLimit*DiagnosticCollectionLimit); +} void SetDiagnosticCollectionLimit(int limit) { if ((limit)&&(limit<= DIAGNOSTICS_LIMIT)) DiagnosticCollectionLimit = limit; DiagnosticLimit =eHundredMillisecond; //frequency of data collection - if (DiagnosticMode <= Diagnostic_Normal_Mode) + /*if (DiagnosticMode <= Diagnostic_Normal_Mode) { DiagnosticCollectionLimit = 1; //overrule - send at least once every second DiagnosticLimit =eOneSecond; //frequency of data collection - } + }*/ + REPORT_MSG(DiagnosticCollectionLimit,"Diagnostic limit set"); } -uint8_t HeaterCounterIndex[MAX_HEATERS_NUM]= {0,0,0,0,0,0,0,0,0,0}; -double HeaterTemperature[MAX_HEATERS_NUM][DIAGNOSTICS_LIMIT+1]; +uint8_t HeaterCounterIndex[HEATER_TYPE_MAX_HEATERS]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +double HeaterTemperature[HEATER_TYPE_MAX_HEATERS][DIAGNOSTICS_LIMIT+1]; uint8_t DancerCounterIndex[NUM_OF_DANCERS]= {0,0,0}; double DancerValue[NUM_OF_DANCERS][DIAGNOSTICS_DANCER_LIMIT+1]; int8_t DancerErrorCounterIndex[NUM_OF_DANCERS]= {0,0,0}; @@ -236,14 +263,13 @@ void DiagnosticLoadMotor(int MotorId, int frequency) { if (MotorId >= MAX_THREAD_MOTORS_NUM) { - LOG_ERROR(MotorId,"wrong Heater Id"); + ReportWithPackageFilter(DiagnosticsFilter,"wrong Motor Id",__FILE__,__LINE__,(int)MotorId,RpError,(int)0,0); return; } MotorValue[MotorId][MotorCounterIndex[MotorId]] = frequency; - MotorCounterIndex[MotorId]++; - if (MotorCounterIndex[MotorId]>=DIAGNOSTICS_LIMIT ) - MotorCounterIndex[MotorId] = 0; + if (MotorCounterIndex[MotorId]<DIAGNOSTICS_LIMIT ) + MotorCounterIndex[MotorId]++; } uint32_t DiagnosticsLoadDigitalValues(void) { @@ -284,8 +310,11 @@ uint32_t DiagnosticsLoadDigitalValues(void) DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_SPARE_SSR13_CTRL; DigitalOutputState[index++].value = ReadHeadMagnetBit(); + DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_LED3; + DigitalOutputState[index++].value = HeadCard_Actuators_Status(ACTIN); + DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPO_LED4; - DigitalOutputState[index++].value = DataUpdated; + DigitalOutputState[index++].value = HeadCard_Actuators_Status(ACTOT); DigitalOutputState[index].interfaceio = INTERFACE_IOS__GPI_WCONTAINER_FULL; DigitalOutputState[index++].value = WHS_IsContainerFull(); @@ -310,9 +339,9 @@ uint32_t DiagnosticsLoadDigitalValues(void) void DiagnosticLoadTemperature(int HeaterId, int temperature) { double temp = temperature; - if (HeaterId >= MAX_HEATERS_NUM) + if (HeaterId >= HEATER_TYPE_MAX_HEATERS) { - LOG_ERROR(HeaterId,"wrong Heater Id"); + ReportWithPackageFilter(DiagnosticsFilter,"wrong Heater Id",__FILE__,__LINE__,(int)HeaterId,RpError,(int)0,0); return; } if ((temperature < 1000)||(temperature>28000)) //error read, all 0xF or all 0 @@ -320,9 +349,8 @@ void DiagnosticLoadTemperature(int HeaterId, int temperature) return; } HeaterTemperature[HeaterId][HeaterCounterIndex[HeaterId]] = temp/100; - HeaterCounterIndex[HeaterId]++; - if (HeaterCounterIndex[HeaterId]>=DIAGNOSTICS_LIMIT ) - HeaterCounterIndex[HeaterId] = 0; + if (HeaterCounterIndex[HeaterId]<DIAGNOSTICS_LIMIT ) + HeaterCounterIndex[HeaterId]++; } void DiagnosticLoadSpeedSensor(float value) { @@ -335,9 +363,9 @@ void DiagnosticLoadSpeedSensor(float value) void DiagnosticLoadDancer(int DancerId, uint16_t value) { - if (DancerId >= MAX_HEATERS_NUM) + if (DancerId >= NUM_OF_DANCERS) { - LOG_ERROR(DancerId,"wrong Dancer Id"); + ReportWithPackageFilter(DiagnosticsFilter,"wrong Dancer Id",__FILE__,__LINE__,(int)DancerId,RpError,(int)0,0); return; } DancerValue[DancerId][DancerCounterIndex[DancerId]] = value; @@ -348,9 +376,9 @@ void DiagnosticLoadDancer(int DancerId, uint16_t value) } void DiagnosticLoadDancerError(int DancerId, double value) { - if (DancerId >= MAX_HEATERS_NUM) + if (DancerId >= NUM_OF_DANCERS) { - LOG_ERROR(DancerId,"wrong Dancer Id"); + ReportWithPackageFilter(DiagnosticsFilter,"wrong Dancer Id",__FILE__,__LINE__,(int)DancerId,RpError,(int)0,0); return; } DancerErrorValue[DancerId][DancerErrorCounterIndex[DancerId]] = value; @@ -366,9 +394,10 @@ void DiagnosticTenMsecCollection(void) return; /*if (JobIsActive()== false) return;*/ - DiagnosticLoadDancer(WINDER_DANCER,Control_Read_Dancer_Position(WINDER_DANCER, 0,0)); - DiagnosticLoadDancer(POOLER_DANCER,Control_Read_Dancer_Position(POOLER_DANCER, 0,0)); - DiagnosticLoadDancer(FEEDER_DANCER,Control_Read_Dancer_Position(FEEDER_DANCER, 0,0)); + + DiagnosticLoadDancer(WINDER_DANCER,Control_Read_Dancer_Position(WINDER_DANCER, 0)); + DiagnosticLoadDancer(POOLER_DANCER,Control_Read_Dancer_Position(POOLER_DANCER, 0)); + DiagnosticLoadDancer(FEEDER_DANCER,Control_Read_Dancer_Position(FEEDER_DANCER, 0)); DiagnosticLoadDancerError(WINDER_DANCER,ThreadGetMotorCalculatedError(WINDER_DANCER)); DiagnosticLoadDancerError(POOLER_DANCER,ThreadGetMotorCalculatedError(POOLER_DANCER)); @@ -376,9 +405,139 @@ void DiagnosticTenMsecCollection(void) //DiagnosticLoadSpeedSensor(getSensorSpeedData()); } +void DiagnosticOneMinuteCollection(void) +{ + int i; + + DiagnosticsMonitor.n_dispensersinklevel = 0; + DiagnosticsMonitor.n_midtanksinklevel = 0; + for (i=0;i<MAX_SYSTEM_DISPENSERS;i++) + { + MidTankpressure[i][0] = Get_MidTank_Pressure_Sensor(i); + dispenserinklevel[i][0] = 1.00-(IDS_Dispenser_Data[i].consumedinnanolitter/5800000); + midtankinklevel[i][0] = Get_MidTank_Pressure_Sensor(i); + if (DiagnosticsMonitor.dispensersinklevel) + { + DiagnosticsMonitor.n_dispensersinklevel = MAX_SYSTEM_DISPENSERS; + //DiagnosticsDispenserPressure[i] = dispenserspressure[i]; + //double_array__init(&DiagnosticsDispenserPressure[i]); + DispenserInkLevel[i].data = dispenserinklevel[i]; + DispenserInkLevel[i].n_data = 1; + DiagnosticsMonitor.dispensersinklevel[i] = &DispenserInkLevel[i]; + } + if (DiagnosticsMonitor.midtanksinklevel) + { + DiagnosticsMonitor.n_midtanksinklevel = MAX_SYSTEM_DISPENSERS; + //DiagnosticsDispenserPressure[i] = dispenserspressure[i]; + //double_array__init(&DiagnosticsDispenserPressure[i]); + DiagnosticsMidTankInkLevel[i].data = midtankinklevel[i]; + DiagnosticsMidTankInkLevel[i].n_data = 1; + DiagnosticsMonitor.midtanksinklevel[i] = &DiagnosticsMidTankInkLevel[i]; + } + + } + DiagnosticsMonitor.n_overalltemperature = 1; + OverallTemperature = max(MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP1),MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP2)); + DiagnosticsMonitor.overalltemperature = &OverallTemperature; + + DiagnosticsMonitor.n_midtank1level = 1; + DiagnosticsMonitor.midtank1level = MidTankpressure[0]; + DiagnosticsMonitor.n_midtank2level = 1; + DiagnosticsMonitor.midtank2level = MidTankpressure[1]; + DiagnosticsMonitor.n_midtank3level = 1; + DiagnosticsMonitor.midtank3level = MidTankpressure[2]; + DiagnosticsMonitor.n_midtank4level = 1; + DiagnosticsMonitor.midtank4level = MidTankpressure[3]; + DiagnosticsMonitor.n_midtank5level = 1; + DiagnosticsMonitor.midtank5level = MidTankpressure[4]; + DiagnosticsMonitor.n_midtank6level = 1; + DiagnosticsMonitor.midtank6level = MidTankpressure[5]; + DiagnosticsMonitor.n_midtank7level = 1; + DiagnosticsMonitor.midtank7level = MidTankpressure[6]; + DiagnosticsMonitor.n_midtank8level = 1; + DiagnosticsMonitor.midtank8level = MidTankpressure[7]; + + for (i=0;i<NUM_OF_CURRENT_HEATERS;i++) + { + if (Read_Head_MixChip_Heaters_Current(i) == true) + { + HeatersCurrent[i][0] = Get_Heaters_Current(i); + switch(i) + { + case HEATER_DRYER_CURRENT_1: + DiagnosticsMonitor.n_drierzone1heatercurrent = 1; + DiagnosticsMonitor.drierzone1heatercurrent = HeatersCurrent[HEATER_DRYER_CURRENT_1]; + break; + case HEATER_DRYER_CURRENT_2: + DiagnosticsMonitor.n_drierzone2heatercurrent = 1; + DiagnosticsMonitor.drierzone2heatercurrent = HeatersCurrent[HEATER_DRYER_CURRENT_2]; + break; + case HEATER_MIXCHIP_CURRENT: + DiagnosticsMonitor.n_mixer1heatercurrent = 1; + DiagnosticsMonitor.mixer1heatercurrent = HeatersCurrent[HEATER_MIXCHIP_CURRENT]; + break; + case HEATER_HEAD_CURRENT_ZONE_1: + DiagnosticsMonitor.n_headzone1heatercurrent = 1; + DiagnosticsMonitor.headzone1heatercurrent = HeatersCurrent[HEATER_HEAD_CURRENT_ZONE_1]; + break; + case HEATER_HEAD_CURRENT_ZONE_2: + DiagnosticsMonitor.n_headzone2heatercurrent = 1; + DiagnosticsMonitor.headzone2heatercurrent = HeatersCurrent[HEATER_HEAD_CURRENT_ZONE_2]; + break; + case HEATER_HEAD_CURRENT_ZONE_3: + DiagnosticsMonitor.n_headzone3heatercurrent = 1; + DiagnosticsMonitor.headzone3heatercurrent = HeatersCurrent[HEATER_HEAD_CURRENT_ZONE_3]; + break; + case HEATER_HEAD_CURRENT_ZONE_4: + DiagnosticsMonitor.n_headzone4heatercurrent = 1; + DiagnosticsMonitor.headzone4heatercurrent = HeatersCurrent[HEATER_HEAD_CURRENT_ZONE_4]; + break; + case HEATER_HEAD_CURRENT_ZONE_5_6: + DiagnosticsMonitor.n_headzone5_6heatercurrent = 1; + DiagnosticsMonitor.headzone5_6heatercurrent = HeatersCurrent[HEATER_HEAD_CURRENT_ZONE_5_6]; + break; + default: + break; + } + } + } + + VOC_Sensor = (double) getGasReading(); + DiagnosticsMonitor.n_filterdeltapressure = 1; + DiagnosticsMonitor.filterdeltapressure = &VOC_Sensor; + + DiagnosticsMonitor.n_blowervoltage = 1; + diagvoltage = getBlowerState(); + DiagnosticsMonitor.blowervoltage = &diagvoltage; + + DrierFlowMeter = GetWHSAirFlow(0); + DiagnosticsMonitor.n_dryerairflow = 1; + DiagnosticsMonitor.dryerairflow = &DrierFlowMeter; + HeadFlowMeter = GetWHSAirFlow(2); + DiagnosticsMonitor.n_headairflow = 1; + DiagnosticsMonitor.headairflow = &HeadFlowMeter; + + + +} void DiagnosticOneSecCollection(void) { int i; +#ifdef Use_Head_Card + DiagnosticLoadTemperature(HEATER_TYPE__MixerHeater, MillisecGetTemperatures( HEAD_PT100_MIXER_0X8E_0)); + DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone1, MillisecGetTemperatures(HEAD_PT100_ZONE_1_0X80_0)); + DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone2, MillisecGetTemperatures(HEAD_PT100_ZONE_2_0X80_1)); + DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone3, MillisecGetTemperatures(HEAD_PT100_ZONE_3_0X82_0)); + DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone4, MillisecGetTemperatures(HEAD_PT100_ZONE_4_0X82_1)); + DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone5, MillisecGetTemperatures(HEAD_PT100_ZONE_5_0X84_0)); + DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone6, MillisecGetTemperatures(HEAD_PT100_ZONE_6_0X84_1)); + DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone7, MillisecGetTemperatures(HEAD_PT100_ZONE_7_0X86_0)); + DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone8, MillisecGetTemperatures(HEAD_PT100_ZONE_8_0X86_1)); + DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone9, MillisecGetTemperatures(HEAD_PT100_ZONE_9_0X88_0)); + DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone10, MillisecGetTemperatures(HEAD_PT100_ZONE_10_0X88_1)); + DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone11, MillisecGetTemperatures(HEAD_PT100_ZONE_11_0X8A_0)); + DiagnosticLoadTemperature(HEATER_TYPE__HeaterZone12, MillisecGetTemperatures(HEAD_PT100_ZONE_12_0X8A_1)); +#else DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__MixerHeater, MillisecGetTemperatures( MIXER_PT100)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP1)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP2)); @@ -386,7 +545,7 @@ void DiagnosticOneSecCollection(void) DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP4)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP5)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, MillisecGetTemperatures(HEAD6_PT100)); - +#endif DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP1)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP2)); DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP3)); @@ -395,12 +554,9 @@ void DiagnosticOneSecCollection(void) dispensermotorfrequency[i][DiagnosticsIndex] = IdsGetMotorSpeed(i); //dispensermotorfrequency[i][DiagnosticsIndex] = IDS_Dispenser_Data[i].consumedinnanolitter; - dispenserspressure[i][DiagnosticsIndex] = GetDispenserPressure(i); //Read_MidTank_Pressure_Sensor - //if (midtankDisplay) - MidTankpressure[i][0] = Get_MidTank_Pressure_Sensor(i); - //else - // MidTankpressure[i][0] = 1.00-(IDS_Dispenser_Data[i].consumedinnanolitter/5800000); - //double dispcapacity = (1.00-(IDS_Dispenser_Data[i].consumedinnanolitter/5800000))*130*1000*1000; + if (DiagnosticMode < Diagnostic_Extended_Mode) + dispenserspressure[i][DiagnosticsIndex] = GetDispenserPressure(i); //Read_MidTank_Pressure_Sensor + MidTankpressure[i][0] = Get_MidTank_Pressure_Sensor(i); } } void Diagnostic100msecCollection(void) @@ -410,7 +566,7 @@ void Diagnostic100msecCollection(void) return; //DiagnosticLoadSpeedSensor(getSensorSpeedData()); - if (DiagnosticMode == Diagnostic_Extreme_Mode) + if (DiagnosticMode != Diagnostic_Extreme_Mode) DiagnosticTenMsecCollection(); //call the 10msec function every 100 msec to reduce transport if (DiagnosticMode >= Diagnostic_Extended_Mode) @@ -423,31 +579,11 @@ void Diagnostic100msecCollection(void) DiagnosticLoadMotor(WINDER_MOTOR, ThreadGetMotorSpeed (WINDER_MOTOR)); DiagnosticLoadMotor(SCREW_MOTOR, ThreadGetMotorSpeed (SCREW_MOTOR)); } + for (i=0;i<MAX_SYSTEM_DISPENSERS;i++) + { + dispenserspressure[i][DiagnosticsIndex] = GetDispenserPressure(i); //Read_MidTank_Pressure_Sensor + } } - /* - DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__MixerHeater, MillisecGetTemperatures( MIXER_PT100)); - DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP1)); - DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP2)); - DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP3)); - DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP4)); - DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DYEINGH_TEMP5)); - DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, MillisecGetTemperatures(HEAD6_PT100)); - - DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP1)); - DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP2)); - DiagnosticLoadTemperature(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, MillisecGetTemperatures(TEMP_SENSE_ANALOG_DRYER_TEMP3)); - for (i=0;i<MAX_SYSTEM_DISPENSERS;i++) - { - dispensermotorfrequency[i][DiagnosticsIndex] = IdsGetMotorSpeed(i); - //dispensermotorfrequency[i][DiagnosticsIndex] = IDS_Dispenser_Data[i].consumedinnanolitter; - - dispenserspressure[i][DiagnosticsIndex] = GetDispenserPressure(i); //Read_MidTank_Pressure_Sensor - if (midtankDisplay) - MidTankpressure[i][0] = Get_MidTank_Pressure_Sensor(i); - else - MidTankpressure[i][0] = 1.00-(IDS_Dispenser_Data[i].consumedinnanolitter/5800000); - } - */ if (DiagnosticMode == Diagnostic_Extreme_Mode) { for (i=0;i<NUM_OF_CURRENT_HEATERS;i++) @@ -464,8 +600,8 @@ void Diagnostic100msecCollection(void) dispenser7motorfrequency[DiagnosticsIndex] = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_7); dispenser8motorfrequency[DiagnosticsIndex] = MotorGetSpeed(HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8); */ - DiagnosticsIndex++; - if (DiagnosticsIndex >= DIAGNOSTICS_LIMIT) DiagnosticsIndex = DIAGNOSTICS_LIMIT; + if (DiagnosticsIndex < DIAGNOSTICS_LIMIT) + DiagnosticsIndex++; if (DiagnosticsIndex >= DiagnosticCollectionLimit) SendDiagnostics(); @@ -478,10 +614,17 @@ void DiagnosticsReset(void) SpeedCounterIndex = 0; memset(HeaterCounterIndex,0,sizeof(HeaterCounterIndex)); DiagnosticsIndex = 0; + DiagnosticsMonitor.n_dancer1angle = 0; + DiagnosticsMonitor.n_dancer2angle = 0; + DiagnosticsMonitor.n_dancer3angle = 0; + DiagnosticsMonitor.n_windertension = 0; + DiagnosticsMonitor.n_pullertension = 0; + DiagnosticsMonitor.n_feedertension = 0; + } int j=0; MessageContainer diagnosticsresponseContainer; -uint8_t diagnostics_response_buffer[3500]; +uint8_t diagnostics_response_buffer[5500]; uint8_t *diagnostics_response_ptr = diagnostics_response_buffer; char * diagnosticscontainer_buffer=0; int LargeMessagesD = 0; @@ -546,8 +689,8 @@ void SendDiagnostics(void) DiagnosticsMonitor.windertension = DancerErrorValue[0]; DiagnosticsMonitor.pullertension = DancerErrorValue[1]; DiagnosticsMonitor.feedertension = DancerErrorValue[2]; - DiagnosticsMonitor.n_threadspeed = SpeedCounterIndex; - DiagnosticsMonitor.threadspeed = SpeedValue; + //DiagnosticsMonitor.n_threadspeed = SpeedCounterIndex; + //DiagnosticsMonitor.threadspeed = SpeedValue; DiagnosticsMonitor.feedermotorfrequency = MotorValue[FEEDER_MOTOR]; @@ -561,30 +704,43 @@ void SendDiagnostics(void) DiagnosticsMonitor.n_windermotor = MotorCounterIndex[WINDER_MOTOR]; DiagnosticsMonitor.n_screwmotor = MotorCounterIndex[SCREW_MOTOR]; } - DiagnosticsMonitor.mixertemperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__MixerHeater]; - DiagnosticsMonitor.headzone1temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1]; - DiagnosticsMonitor.headzone2temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2]; - DiagnosticsMonitor.headzone3temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3]; - DiagnosticsMonitor.headzone4temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4]; - DiagnosticsMonitor.headzone5temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5]; - DiagnosticsMonitor.headzone6temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6]; - DiagnosticsMonitor.dryerzone1temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature]; - DiagnosticsMonitor.dryerzone2temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]; - DiagnosticsMonitor.dryerzone3temperature = HeaterTemperature[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]; + DiagnosticsMonitor.mixertemperature = HeaterTemperature[HEATER_TYPE__MixerHeater]; + DiagnosticsMonitor.headzone1temperature = HeaterTemperature[HEATER_TYPE__HeaterZone1]; + DiagnosticsMonitor.headzone2temperature = HeaterTemperature[HEATER_TYPE__HeaterZone2]; + DiagnosticsMonitor.headzone3temperature = HeaterTemperature[HEATER_TYPE__HeaterZone3]; + DiagnosticsMonitor.headzone4temperature = HeaterTemperature[HEATER_TYPE__HeaterZone4]; + DiagnosticsMonitor.headzone5temperature = HeaterTemperature[HEATER_TYPE__HeaterZone5]; + DiagnosticsMonitor.headzone6temperature = HeaterTemperature[HEATER_TYPE__HeaterZone6]; +#ifdef Use_Head_Card + DiagnosticsMonitor.headzone7temperature = HeaterTemperature[HEATER_TYPE__HeaterZone7]; + DiagnosticsMonitor.headzone8temperature = HeaterTemperature[HEATER_TYPE__HeaterZone8]; + DiagnosticsMonitor.headzone9temperature = HeaterTemperature[HEATER_TYPE__HeaterZone9]; + DiagnosticsMonitor.headzone10temperature = HeaterTemperature[HEATER_TYPE__HeaterZone10]; + DiagnosticsMonitor.headzone11temperature = HeaterTemperature[HEATER_TYPE__HeaterZone11]; + DiagnosticsMonitor.headzone12temperature = HeaterTemperature[HEATER_TYPE__HeaterZone12]; +#endif + DiagnosticsMonitor.dryerzone1temperature = HeaterTemperature[HEATER_TYPE__DryerAirHeater]; + DiagnosticsMonitor.dryerzone2temperature = HeaterTemperature[HEATER_TYPE__DryerMainHeater]; + DiagnosticsMonitor.dryerzone3temperature = HeaterTemperature[HEATER_TYPE__DryerSecondaryHeater]; - DiagnosticsMonitor.n_mixertemperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__MixerHeater]; - DiagnosticsMonitor.n_headzone1temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1]; - DiagnosticsMonitor.n_headzone2temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2]; - DiagnosticsMonitor.n_headzone3temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3]; - DiagnosticsMonitor.n_headzone4temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4]; - DiagnosticsMonitor.n_headzone5temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5]; - DiagnosticsMonitor.n_headzone6temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6]; - DiagnosticsMonitor.n_dryerzone1temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature]; - DiagnosticsMonitor.n_dryerzone2temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]; - DiagnosticsMonitor.n_dryerzone3temperature = HeaterCounterIndex[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]; - DiagnosticsMonitor.n_blowervoltage = 1; - diagvoltage = getBlowerState(); - DiagnosticsMonitor.blowervoltage = &diagvoltage; + DiagnosticsMonitor.n_mixertemperature = HeaterCounterIndex[HEATER_TYPE__MixerHeater]; + DiagnosticsMonitor.n_headzone1temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone1]; + DiagnosticsMonitor.n_headzone2temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone2]; + DiagnosticsMonitor.n_headzone3temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone3]; + DiagnosticsMonitor.n_headzone4temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone4]; + DiagnosticsMonitor.n_headzone5temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone5]; + DiagnosticsMonitor.n_headzone6temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone6]; +#ifdef Use_Head_Card + DiagnosticsMonitor.n_headzone7temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone7]; + DiagnosticsMonitor.n_headzone8temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone8]; + DiagnosticsMonitor.n_headzone9temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone9]; + DiagnosticsMonitor.n_headzone10temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone10]; + DiagnosticsMonitor.n_headzone11temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone11]; + DiagnosticsMonitor.n_headzone12temperature = HeaterCounterIndex[HEATER_TYPE__HeaterZone12]; +#endif + DiagnosticsMonitor.n_dryerzone1temperature = HeaterCounterIndex[HEATER_TYPE__DryerAirHeater]; + DiagnosticsMonitor.n_dryerzone2temperature = HeaterCounterIndex[HEATER_TYPE__DryerMainHeater]; + DiagnosticsMonitor.n_dryerzone3temperature = HeaterCounterIndex[HEATER_TYPE__DryerSecondaryHeater]; int i; DiagnosticsMonitor.n_dispensersmotorsfrequency = 0; @@ -687,14 +843,31 @@ void SendDiagnostics(void) response.n_digitalinterfacestates = DiagnosticsLoadDigitalValues(); response.digitalinterfacestates = digitalinterfacestates; - for (i=HEATER_TYPE__DryerAirHeater;i<=HEATER_TYPE__MixerHeater;i++) +#ifdef Use_Head_Card + for (i=HEATER_TYPE__DryerAirHeater;i<HEATER_TYPE_MAX_HEATERS;i++) +#else + for (i=HEATER_TYPE__DryerAirHeater;i<MAX_HEATERS_NUM;i++) +#endif { LoadHeaterState((HeaterType)i,&HeaterInfo[i]); //heatersstates[i] = &HeaterInfo[i]; } - response.n_heatersstates = HEATER_TYPE__MixerHeater+1; +#ifdef Use_Head_Card + response.n_heatersstates = HEATER_TYPE_MAX_HEATERS; +#else + response.n_heatersstates = MAX_HEATERS_NUM; +#endif response.heatersstates = heatersstates; + response.has_elapsedmilli = true; + if (Diagnostis_Time_Stamp == 0) + { + response.elapsedmilli = 0; + } + else + response.elapsedmilli = msec_millisecondCounter-Diagnostis_Time_Stamp; + Diagnostis_Time_Stamp = msec_millisecondCounter; + // diagnosticsresponseContainer = createContainer(MESSAGE_TYPE__StartDiagnosticsResponse, DiagnosticsToken, false, &response, &start_diagnostics_response__pack, &start_diagnostics_response__get_packed_size); diagnosticsresponseContainer = createAllocatedContainer(MESSAGE_TYPE__StartDiagnosticsResponse, DiagnosticsToken, false, &response, &start_diagnostics_response__pack, &start_diagnostics_response__get_packed_size,diagnostics_response_ptr); @@ -725,20 +898,20 @@ void SendDiagnostics(void) } else { - LOG_ERROR(Task_self(),"my_malloc failed"); + ReportWithPackageFilter(DiagnosticsFilter,"my_malloc failed, DiagnosticsStop ",__FILE__,__LINE__,(int)Task_self(),RpError,(int)0,0); DiagnosticsStop(); //CommunicationMailboxFlush(); } } else { - LOG_ERROR(Task_self(),"previous packet not sent"); + ReportWithPackageFilter(DiagnosticsFilter,"previous packet not sent",__FILE__,__LINE__,(int)Task_self(),RpError,(int)0,0); } //my_free(diagnosticsresponseContainer.data.data); } else { - LOG_ERROR(Task_self(),"my_malloc failed"); + ReportWithPackageFilter(DiagnosticsFilter,"my_malloc failed, DiagnosticsStop ",__FILE__,__LINE__,(int)Task_self(),RpError,(int)0,0); DiagnosticsStop(); } DiagnosticsReset(); @@ -746,6 +919,7 @@ void SendDiagnostics(void) uint32_t DiagnosticsControlId = 0xff; uint32_t Diagnostics10MSControlId = 0xff; uint32_t Diagnostics1SecControlId = 0xff; +uint32_t Diagnostics1MinControlId = 0xFF; bool DiagnosticRequestAccepted = false; uint32_t DiagnosticsStart(void) { @@ -756,17 +930,21 @@ uint32_t DiagnosticsStart(void) { DiagnosticsActive = true; if (DiagnosticsControlId == 0xFF) - DiagnosticsControlId = AddControlCallback(Diagnostics_ControlTrigger,DiagnosticLimit,TemplateDataReadCBFunction,0,0,0); + DiagnosticsControlId = AddControlCallback(NULL,Diagnostics_ControlTrigger,DiagnosticLimit,TemplateDataReadCBFunction,0,0,0); else - LOG_ERROR(DiagnosticsControlId,"Diagnostics restarted"); + ReportWithPackageFilter(DiagnosticsFilter,"Diagnostics restarted ",__FILE__,__LINE__,(int)DiagnosticLimit,RpWarning,(int)DiagnosticsControlId,0); if (Diagnostics10MSControlId == 0xFF) - Diagnostics10MSControlId = AddControlCallback(Diagnostics_TenMiliControlTrigger,DiagnosticFastLimit,TemplateDataReadCBFunction,0,0,0); + Diagnostics10MSControlId = AddControlCallback(NULL,Diagnostics_TenMiliControlTrigger,DiagnosticFastLimit,TemplateDataReadCBFunction,0,0,0); else - LOG_ERROR(DiagnosticsControlId,"Diagnostics restarted"); + ReportWithPackageFilter(DiagnosticsFilter,"Diagnostics restarted ",__FILE__,__LINE__,(int)DiagnosticFastLimit,RpWarning,(int)Diagnostics10MSControlId,0); if (Diagnostics1SecControlId == 0xFF) - Diagnostics1SecControlId = AddControlCallback(Diagnostics_OneSecControlTrigger,eOneSecond,TemplateDataReadCBFunction,0,0,0); + Diagnostics1SecControlId = AddControlCallback(NULL,Diagnostics_OneSecControlTrigger,eOneSecond,TemplateDataReadCBFunction,0,0,0); + else + ReportWithPackageFilter(DiagnosticsFilter,"Diagnostics restarted ",__FILE__,__LINE__,(int)eOneSecond,RpWarning,(int)Diagnostics1SecControlId,0); + if (Diagnostics1MinControlId == 0xFF) + Diagnostics1MinControlId = AddControlCallback(NULL,Diagnostics_OneMinControlTrigger,eOneMinute,TemplateDataReadCBFunction,0,0,0); else - LOG_ERROR(Diagnostics1SecControlId,"Diagnostics restarted"); + ReportWithPackageFilter(DiagnosticsFilter,"Diagnostics restarted ",__FILE__,__LINE__,(int)eOneMinute,RpWarning,(int)Diagnostics1MinControlId,0); } } @@ -783,10 +961,14 @@ uint32_t DiagnosticsStop(void) RemoveControlCallback(Diagnostics10MSControlId,Diagnostics_TenMiliControlTrigger); if (Diagnostics1SecControlId != 0xFF) RemoveControlCallback(Diagnostics1SecControlId,Diagnostics_OneSecControlTrigger); + if (Diagnostics1MinControlId != 0xFF) + RemoveControlCallback(Diagnostics1MinControlId,Diagnostics_OneMinControlTrigger); DiagnosticsControlId = 0xFF; Diagnostics10MSControlId = 0xFF; Diagnostics1SecControlId = 0xFF; + Diagnostics1MinControlId = 0xFF; + Diagnostis_Time_Stamp = 0; } return OK; @@ -848,7 +1030,6 @@ uint32_t Diagnostics_TenMiliControlTrigger(uint32_t IfIndex, uint32_t ReadValue) if (DiagnosticMode == Diagnostic_Extreme_Mode) { - //send message to the Millisec task Message.messageId = DiagnosticsTenMiliTrigger; Message.msglen = sizeof(DiagnosticsMessageStruc); if (DiagnosticsMsgQ != NULL) @@ -861,7 +1042,6 @@ uint32_t Diagnostics_OneSecControlTrigger(uint32_t IfIndex, uint32_t ReadValue) { DiagnosticsMessageStruc Message; - //send message to the Millisec task Message.messageId = DiagnosticsOneSecTrigger; Message.msglen = sizeof(DiagnosticsMessageStruc); if (DiagnosticsMsgQ != NULL) @@ -870,6 +1050,18 @@ uint32_t Diagnostics_OneSecControlTrigger(uint32_t IfIndex, uint32_t ReadValue) return OK; } +uint32_t Diagnostics_OneMinControlTrigger(uint32_t IfIndex, uint32_t ReadValue) +{ + DiagnosticsMessageStruc Message; + + Message.messageId = DiagnosticsOneMinuteTrigger; + Message.msglen = sizeof(DiagnosticsMessageStruc); + if (DiagnosticsMsgQ != NULL) + Mailbox_post(DiagnosticsMsgQ , &Message, BIOS_NO_WAIT); + + + return OK; +} /****************************************************************************** * ======== messageTsk ======== * Task for this function is created statically. See the project's .cfg file. @@ -893,11 +1085,15 @@ void DiagnosticsTask(UArg arg0, UArg arg1) Diagnostic100msecCollection(); break; case DiagnosticsTenMiliTrigger: - DiagnosticTenMsecCollection(); + if (DiagnosticMode >= Diagnostic_Extreme_Mode) + DiagnosticTenMsecCollection(); break; case DiagnosticsOneSecTrigger: DiagnosticOneSecCollection(); break; + case DiagnosticsOneMinuteTrigger: + DiagnosticOneMinuteCollection(); + break; default: break; } diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h index d6d515598..aa9b673be 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/Diagnostics.h @@ -23,12 +23,15 @@ typedef enum }Diagnostic_Mode; void SetDiagnosticMode(Diagnostic_Mode Mode); +Diagnostic_Mode GetDiagnosticMode(void); + uint32_t StartDiagnosticsRequestFunc(MessageContainer* requestContainer); uint32_t StopDiagnosticsRequestFunc(MessageContainer* requestContainer); uint32_t DiagnosticsStart(void); uint32_t DiagnosticsStop(void); void SetDiagnosticCollectionLimit(int limit); +uint32_t GetDiagnosticCollectionLimit(void); void DiagnosticsReset(void); void Diagnostic100msecCollection(void); diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c index 14c083b4d..c58d54a8c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsHoming.c @@ -27,6 +27,7 @@ #include "drivers/Motors/Motor.h" #include "drivers/Valves/Valve.h" #include "Drivers/I2C_Communication/DAC/blower.h" +#include "drivers/Flash_ram/MCU_E2Prom.h" #include "ids/ids_ex.h" #include "General/process.h" @@ -67,7 +68,7 @@ uint32_t MotorHomingRequestFunc(MessageContainer* requestContainer) TimerMotors_t MotorId = (TimerMotors_t)request->motortype; if (LoadArmRounds <= 2) - LoadArmRounds = 20; + LoadArmRounds = 30; int speed = request->speed; if (speed == 0) speed = 150; @@ -80,7 +81,7 @@ uint32_t MotorHomingRequestFunc(MessageContainer* requestContainer) { if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID) { - MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, DRIER_LID_OPEN, GPI_LS_DRYER_LID_OPEN, MotorHomingRequestCallback,4000); + MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, DRIER_LID_OPEN, GPI_LS_DRYER_LID_OPEN, MotorHomingRequestCallback,10000); return OK; } else @@ -89,13 +90,16 @@ uint32_t MotorHomingRequestFunc(MessageContainer* requestContainer) { numberOfSteps = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround*LoadArmRounds*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius; Report("MotorHomingRequestFunc Set_Load_Arm_To_Start_Position",__FILE__,__LINE__,numberOfSteps,RpMessage,LoadArmRounds,0); - MotorMoveWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, (1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize), - numberOfSteps, MotorHomingRequestCallback,1000); + MotorMoveToStopper(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, (1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize), + MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/2, MotorHomingRequestCallback,0,1000); + + //MotorMoveWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, (1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize), + // numberOfSteps, MotorHomingRequestCallback,1000); return OK; } if ( Motor_Id_to_LS_IdDown[MotorId] != MAX_GPI) { - MotorMovetoLimitSwitch (MotorId,1-MotorsCfg[MotorId].directionthreadwize, speed, Motor_Id_to_LS_IdUp[MotorId], MotorHomingRequestCallback,10000); + MotorMovetoLimitSwitch (MotorId,1-MotorsCfg[MotorId].directionthreadwize, speed, Motor_Id_to_LS_IdUp[MotorId], MotorHomingRequestCallback,30000); return OK; } @@ -113,7 +117,7 @@ uint32_t MotorHomingRequestFunc(MessageContainer* requestContainer) if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM) { if (LoadArmRounds <= 2) - LoadArmRounds = 20; + LoadArmRounds = 30; numberOfSteps = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround*LoadArmRounds*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius; numberOfSteps -= 100; diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsJogging.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsJogging.c index 4ea029610..e2eb264a7 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsJogging.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsJogging.c @@ -174,6 +174,9 @@ uint32_t DispenserJoggingRequestFunc(MessageContainer* requestContainer) MotorSetDirection(MotorId,direction); MotorSetSpeed(MotorId, speed); CurrentDispenserSpeed[request->index] = speed; + if(request->direction == MOTOR_DIRECTION__Backward) + CurrentDispenserSpeed[request->index] *= (-1); + } else { diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 58d1e1c37..500f03c25 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -18,13 +18,8 @@ #include "heaters/heaters_ex.h" -//#include "third_party/fatfs/src/ffconf.h" -//#include "third_party/fatfs/src/diskio.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 "PMR/common/MessageContainer.pb-c.h" @@ -54,6 +49,9 @@ #include "Drivers/I2C_Communication/Dispenser_Card/EEPROM/Dispenser_EEPROM.h" #include <Drivers/I2C_Communication/Dispenser_Card/IO_Ports/Dispenser_IO.h> #include "Modules/General/buttons.h" +#include "Modules/Waste/Waste.h" +#include "Drivers/I2C_Communication/Main_Board_EEPROM/Main_EEPROM.h" +#include <Modules/Waste/newWHS_init.h> uint32_t EmbeddedParametersInit(void); uint32_t EmbeddedParametersWrite(void * buffer, uint16_t size); @@ -105,7 +103,7 @@ uint32_t HWConfigurationInit(void) Report("HWConfigurationInit from flash", __FILE__,__LINE__,Bytes, RpMessage, UploadRequest->hardwareconfiguration->n_dancers, 0); } } - else + if (UploadRequest = NULL) { buffer = HWConfigurationLoadFromFile(&Bytes); //load hardware config if (buffer) @@ -126,6 +124,7 @@ uint32_t HWConfigurationInit(void) //UploadRequest = upload_hardware_configuration_request__unpack(NULL, Bytes, buffer); if (UploadRequest) { + AlarmHandlingSetAlarm (EVENT_TYPE__MACHINE_STATE_NO_CFG_FILE,OFF); status = HWConfiguration(UploadRequest); if (status !=OK) { @@ -135,9 +134,14 @@ uint32_t HWConfigurationInit(void) else { STATUS_RED_LED_OFF; + ACTIVITY_GREEN_LED_OFF; } upload_hardware_configuration_request__free_unpacked(UploadRequest,NULL); } + else + { + AlarmHandlingSetAlarm (EVENT_TYPE__MACHINE_STATE_NO_CFG_FILE,ON); + } if (buffer) free (buffer); @@ -146,9 +150,15 @@ uint32_t HWConfigurationInit(void) //ProcessParamsInit(); Buttons_Init(); WHS_init(); - +#ifdef Use_WHS_Card + newWHS_init(); +#endif ADC_MUX_Init(); GeneralHwReady = true; + + //I2C_NFC_Test(); + //RFID_Test(); + return status; } @@ -163,17 +173,17 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) configuration_parameters__init(EmbeddedParameters); EmbeddedParameters->breaksensorlimit = 10; EmbeddedParameters->has_diagnosticcollectionlimit = true; - EmbeddedParameters->diagnosticcollectionlimit = 1; + EmbeddedParameters->diagnosticcollectionlimit = 3; EmbeddedParameters->has_overheatcountlimit = true; EmbeddedParameters->overheatcountlimit = 3; EmbeddedParameters->has_underheatcountlimit = true; EmbeddedParameters->underheatcountlimit = 3; EmbeddedParameters->has_closevalvetimeout = true; - EmbeddedParameters->closevalvetimeout = 50; + EmbeddedParameters->closevalvetimeout = 52; EmbeddedParameters->has_openvalvetimeout = true; - EmbeddedParameters->openvalvetimeout = 50; + EmbeddedParameters->openvalvetimeout = 52; EmbeddedParameters->has_initialdispenserpressure = true; - EmbeddedParameters->initialdispenserpressure = 1.08; + EmbeddedParameters->initialdispenserpressure = 0.25; EmbeddedParameters->has_initialdispensertimeout = true; EmbeddedParameters->initialdispensertimeout = 60000; EmbeddedParameters->has_initialdispensertimelag = true; @@ -181,9 +191,9 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) EmbeddedParameters->has_dispenserbuildpressurespeed = true; EmbeddedParameters->dispenserbuildpressurespeed=500; EmbeddedParameters->has_dispenserbuildpressurelimit = true; - EmbeddedParameters->dispenserbuildpressurelimit=0.8 ; + EmbeddedParameters->dispenserbuildpressurelimit=1.0 ; EmbeddedParameters->has_dispenserbuildpressuretimeout = true; - EmbeddedParameters->dispenserbuildpressuretimeout=60000; + EmbeddedParameters->dispenserbuildpressuretimeout=150000; EmbeddedParameters->has_dispenserbuildpressurelag = true; EmbeddedParameters->dispenserbuildpressurelag=50; EmbeddedParameters->has_acheatersloweroperationlimit = true; @@ -210,11 +220,11 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) EmbeddedParameters->generalparameters[3] = 0.0; //CheckMotorAlarms EmbeddedParameters->generalparameters[4] = 800.0; //Winder homing time at end of job EmbeddedParameters->generalparameters[5] = 1000.0; //Dispenser initial pressure speed - EmbeddedParameters->generalparameters[6] = Diagnostic_Normal_Mode; //Diagnostic Mode SetDiagnosticMode + EmbeddedParameters->generalparameters[6] = Diagnostic_Extended_Mode; //Diagnostic Mode SetDiagnosticMode EmbeddedParameters->generalparameters[7] = AutoHoming_JobEnd_PowerOn_off; // } EmbeddedParameters->has_currentalarmlowlimit = true; - EmbeddedParameters->currentalarmlowlimit = 0.80; + EmbeddedParameters->currentalarmlowlimit = 0.78; EmbeddedParameters->has_currentalarmhighlimit = true; EmbeddedParameters->currentalarmhighlimit= 1.07; EmbeddedParameters->has_ids_segmentrefilltimeout = true; @@ -222,15 +232,15 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) EmbeddedParameters->has_ids_presegmentbuilduptime = true; EmbeddedParameters->ids_presegmentbuilduptime = 5000; EmbeddedParameters->has_ids_cleaningspeed = true; - EmbeddedParameters->ids_cleaningspeed = 50; + EmbeddedParameters->ids_cleaningspeed = 800; EmbeddedParameters->has_ids_cleaningstopbeforesegmenttime = true; - EmbeddedParameters->ids_cleaningstopbeforesegmenttime = 3000; + EmbeddedParameters->ids_cleaningstopbeforesegmenttime = 10000; EmbeddedParameters->has_ids_cleaningstartspraypresegmenttime = true; - EmbeddedParameters->ids_cleaningstartspraypresegmenttime = 1000; + EmbeddedParameters->ids_cleaningstartspraypresegmenttime = 2000; EmbeddedParameters->has_ids_leftcleaningmotorspeed = true; - EmbeddedParameters->ids_leftcleaningmotorspeed = 30; + EmbeddedParameters->ids_leftcleaningmotorspeed = 52; EmbeddedParameters->has_ids_rightcleaningmotorspeed = true; - EmbeddedParameters->ids_rightcleaningmotorspeed = 23; + EmbeddedParameters->ids_rightcleaningmotorspeed = 52; EmbeddedParameters->has_switchtoidletimeinseconds = true; EmbeddedParameters->switchtoidletimeinseconds = 3600; EmbeddedParameters->has_idledriertemperature = true; @@ -242,7 +252,7 @@ void LoadConfigurationParameters(ConfigurationParameters *Params) EmbeddedParameters->has_powerofftemperaturelimit = true; EmbeddedParameters->powerofftemperaturelimit = 50; EmbeddedParameters->has_ids_presegment_wfcf_timebeforesegment = true; - EmbeddedParameters->ids_presegment_wfcf_timebeforesegment = 1500; + EmbeddedParameters->ids_presegment_wfcf_timebeforesegment = 20000; uint8_t* response_buffer = my_malloc(configuration_parameters__get_packed_size(EmbeddedParameters)); size_t response_size = 0; if (response_buffer) @@ -264,6 +274,7 @@ uint32_t EmbeddedParametersInit(void) { FRESULT Fresult = FR_OK; uint32_t Bytes = 0; + uint8_t* buffer = NULL; ConfigurationParameters *Params; @@ -271,9 +282,21 @@ uint32_t EmbeddedParametersInit(void) if ((Bytes)&&(Bytes < 1000)) { - Params = configuration_parameters__unpack(NULL, Bytes, (void *)(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4)); - LoadConfigurationParameters(Params); - Report("LoadConfigurationParameters from flash", __FILE__,__LINE__,Bytes, RpMessage, Fresult, 0); + buffer = my_malloc (Bytes); + if (buffer) + { + memcpy(buffer, (void *)(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4),Bytes); + + Params = configuration_parameters__unpack(NULL, Bytes, buffer); + LoadConfigurationParameters(Params); + Report("LoadConfigurationParameters from flash", __FILE__,__LINE__,Bytes, RpMessage, Fresult, 0); + free(buffer); + } + else + { + LoadConfigurationParameters(0); + Report("LoadConfigurationParameters default", __FILE__,__LINE__,0, RpMessage, Fresult, 0); + } } else { @@ -294,7 +317,7 @@ uint32_t EmbeddedParametersInit(void) } else { - IDS_Dispenser_SetBackLashValues(EmbeddedParameters->initialdispenserpressure, EmbeddedParameters->initialdispensertimeout, EmbeddedParameters->initialdispensertimelag,900); + IDS_Dispenser_SetBackLashValues(EmbeddedParameters->initialdispenserpressure, EmbeddedParameters->initialdispensertimeout, EmbeddedParameters->initialdispensertimelag,1000); } IDS_Dispenser_SetTimeOutValues(EmbeddedParameters->closevalvetimeout, EmbeddedParameters->openvalvetimeout); @@ -359,7 +382,7 @@ uint32_t GenHWInitCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) { uint32_t status = 0; - int Dancer_i, Dispenser_i,PID_i; + int Dancer_i, Dispenser_i,PID_i,tempheaterId; if (UploadRequest == NULL) { @@ -413,12 +436,21 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) //StoreDancerConfigMessage(); if (request->n_pidcontrols <= HARDWARE_PID_CONTROL_TYPE__Dispenser8) { - IDS_DispenserControlInit(); + //IDS_DispenserControlInit(); for (PID_i = 0; PID_i < request->n_pidcontrols ; PID_i++) { - if (request->pidcontrols[PID_i]->hardwarepidcontroltype <= HARDWARE_PID_CONTROL_TYPE__MixerHeater) + if (isHeater(request->pidcontrols[PID_i]->hardwarepidcontroltype)) + { status += HeaterConfigRequestMessage(request->pidcontrols[PID_i]); + if ((request->pidcontrols[PID_i]->hardwarepidcontroltype>=HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1)&& + (request->pidcontrols[PID_i]->hardwarepidcontroltype<=HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6)) + { + tempheaterId = (request->pidcontrols[PID_i]->hardwarepidcontroltype-HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1+HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7); + request->pidcontrols[PID_i]->hardwarepidcontroltype = tempheaterId; + status += HeaterConfigRequestMessage(request->pidcontrols[PID_i]); + } + } else if ((request->pidcontrols[PID_i]->hardwarepidcontroltype >= HARDWARE_PID_CONTROL_TYPE__MotorDryer)&& (request->pidcontrols[PID_i]->hardwarepidcontroltype < HARDWARE_PID_CONTROL_TYPE__Dispenser1)) status += MotorPidRequestMessage(request->pidcontrols[PID_i]); @@ -436,6 +468,8 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) { for (Dispenser_i = 0; Dispenser_i < request->n_dispensers ; Dispenser_i++) { + Valve_Set(IDS_Id_to_AirValve[Dispenser_i], Atm_MidTank_OFF ); //Atm_MidTank_OFF/ON + Valve_Set(IDS_Id_to_CartrideValve[Dispenser_i], Atm_MidTank_OFF ); //Atm_MidTank_OFF/ON status += DispenserConfigMessage(request->dispensers[Dispenser_i]); if (Check_Dispenser_Type(request->dispensers[Dispenser_i]->index) == LS_STATUS_ERROR) { @@ -485,7 +519,7 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) Enable_MidTank_Pressure_Reading(Dispenser_i); Valve_Set(IDS_Id_to_AirValve[Dispenser_i], Atm_MidTank_ON ); //Atm_MidTank_OFF/ON } - GenHWControlId = AddControlCallback( GenHWInitCallBackFunction, 2* eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); + GenHWControlId = AddControlCallback(NULL, GenHWInitCallBackFunction, 2* eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); */ ControlStart(); AlarmHandlingStart(); @@ -564,12 +598,13 @@ uint32_t MidTankDataSetupFunc(MessageContainer* requestContainer) Report("MidTankData Read", __FILE__,__LINE__,(int)(a*1000), RpMessage, (int)(b*1000), 0); } //debug only + /* Task_sleep(1000); - MCU_E2PromSerialNumProgram ("Take me to the sky"); + //MCU_E2PromSerialNumProgram ("Take me to the sky"); memset (Serial,0,20); MCU_E2PromSerialNumRead(&Serial); Report(Serial, __FILE__,__LINE__,22, RpMessage, 21, 0); - + */ MidTankDataSetupResponse response = MID_TANK_DATA_SETUP_RESPONSE__INIT; @@ -612,6 +647,10 @@ uint32_t HWConfigurationFunc(MessageContainer* requestContainer) responseContainer.error = ERROR_CODE__INVALID_PARAMETER; responseContainer.errormessage = "JOb Active or incorrect parameters"; } + else + { + AlarmHandlingSetAlarm (EVENT_TYPE__MACHINE_STATE_NO_CFG_FILE,OFF); + } uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); my_free(responseContainer.data.data); @@ -641,8 +680,14 @@ void HWSystemResetRequest(MessageContainer* requestContainer) uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); SendChars((char*)container_buffer, container_size); + Report("HWSystemResetRequest before sleep", __FILE__,__LINE__,0, RpMessage, 2, 0); + + //ROM_SysCtlDelay(SYS_CLK_FREQ); + Task_sleep(2000); + Report("HWSystemResetRequest after sleep", __FILE__,__LINE__,2, RpMessage, 4, 0); - ROM_SysCtlDelay(SYS_CLK_FREQ); + //ROM_SysCtlDelay(SYS_CLK_FREQ); + Task_sleep(2000); SysCtlReset(); @@ -670,6 +715,7 @@ uint32_t LoadConfigurationParamsFromFile(void) EraseFlashSection(EMBEDDED_PARAMETERS_MAP_IN_FLASH,Bytes+4); ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); ReadAppAndProgram(EMBEDDED_PARAMETERS_MAP_IN_FLASH+4, Bytes, buffer); + EmbeddedParametersInit(); } return Fresult; } @@ -710,11 +756,6 @@ void FlashInitAndLoad(void) { Report("Alarm Initialized from file", __FILE__,__LINE__,Bytes, RpMessage, ALARM_MAP_IN_FLASH, 0); } - else - { - Bytes = AlarmHandlingFlashLoad(); - Report("Alarm Initialized hard coded", __FILE__,__LINE__,Bytes, RpMessage, ALARM_MAP_IN_FLASH, 0); - } Fresult = FileRead(EmbeddedParametersPath, &Bytes, &buffer); if (Fresult == FR_OK) diff --git a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c index ff4909438..157841365 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c +++ b/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.c @@ -20,16 +20,19 @@ #include "PMR/MachineStatus/IDSPackLevel.pb-c.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" +#include "Drivers/Heater/TemperatureSensor.h" #include "drivers/Motors/Motor.h" #include "Modules/General/MachineStatus.h" - +#include "Modules/Control/MillisecTask.h" #include "modules/ids/ids_ex.h" MachineState StoredMachineStatus = MACHINE_STATE__Ready; void SetMachineStatus (MachineState State) { + ReportWithPackageFilter(GeneralFilter,"SetMachineStatus",__FILE__,__LINE__,State,RpWarning,StoredMachineStatus, 0); + StoredMachineStatus = State; } char MachineUpdateToken[36+1] = {0}; @@ -68,9 +71,10 @@ int MachineUpdateResponseFunc(void) double dispcapacity = (1.00-(IDS_Dispenser_Data[i].consumedinnanolitter/5800000))*130*1000*1000; IDS_Level[i].dispenserlevel = (int32_t)dispcapacity; IDS_Level[i].has_midtanklevel = true; - IDS_Level[i].midtanklevel = Get_MidTank_Int100_Sensor(i); + IDS_Level[i].midtanklevel = Get_MidTank_Pressure_Sensor(i); MachineStatus.idspackslevels[MachineStatus.n_idspackslevels] = &IDS_Level[i]; MachineStatus.n_idspackslevels++; + MachineStatus.overalltemperature = max(MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP1),MillisecGetTemperatures(TEMP_SENSE_AN_ENCLOSURETEMP2)); } } else diff --git a/Software/Embedded_SW/Embedded/Modules/General/Safety.c b/Software/Embedded_SW/Embedded/Modules/General/Safety.c index a5a586e07..139763c75 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/Safety.c +++ b/Software/Embedded_SW/Embedded/Modules/General/Safety.c @@ -33,25 +33,27 @@ bool AirFilterAlarmState = false; bool WasteOverflowAlarmState = false; void Safety_Init(void) { - SafetyControlId = AddControlCallback( Safety_Main_State, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); + SafetyControlId = AddControlCallback("Safety", Safety_Main_State, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); //return; } uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) { int Disp_i; + bool Indication = false; bool AllDispensersInSafety = true; bool AnyDispensersInSafety = false; - bool DispenserBypass = false; - /*bool mDrierDoorAlarmState = false; + //bool DispenserBypass = false; + bool mDrierDoorAlarmState = false; bool mAirFlowAlarmState = false; bool mAirFilterAlarmState = false; - bool mWasteOverflowAlarmState = false;*/ + bool mWasteOverflowAlarmState = false; for (Disp_i = 0;Disp_i < MAX_SYSTEM_DISPENSERS;Disp_i++) { if (isMotorConfigured(Disp_i + HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1)==true) { - AllDispensersInSafety &= Check_Disp_Safety_Stop_Indication(Disp_i); - AnyDispensersInSafety |= Check_Disp_Safety_Stop_Indication(Disp_i); + Indication = Check_Disp_Safety_Stop_Indication(Disp_i); + AllDispensersInSafety &= Indication; + AnyDispensersInSafety |= Indication; } } @@ -61,8 +63,8 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) { //report and handle dryer door open AlarmHandlingSetAlarm(EVENT_TYPE__DRYER_DOOR_OPEN, true); - // mDrierDoorAlarmState = true; - // DrierDoorAlarmState = true; + mDrierDoorAlarmState = true; + DrierDoorAlarmState = true; } else { @@ -71,8 +73,8 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) //report and handle air flow failure //if blower if off handling is different AlarmHandlingSetAlarm(EVENT_TYPE__NO_AIR_PRESSURE, true); - // mAirFlowAlarmState = true; - // AirFlowAlarmState = true; + mAirFlowAlarmState = true; + AirFlowAlarmState = true; } else { @@ -80,8 +82,8 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) { //report and handle filter missing AlarmHandlingSetAlarm(EVENT_TYPE__AIR_FILTER_NOT_INSTALLED, true); - // mAirFilterAlarmState = true; - // AirFilterAlarmState = true; + mAirFilterAlarmState = true; + AirFilterAlarmState = true; } else { @@ -89,8 +91,8 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) { //report and handle waste overflow AlarmHandlingSetAlarm(EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, true); - // mWasteOverflowAlarmState = true; - // WasteOverflowAlarmState = true; + mWasteOverflowAlarmState = true; + WasteOverflowAlarmState = true; } } } @@ -104,12 +106,17 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) { if (Check_Disp_Safety_Stop_Indication(Disp_i) == true) { - DispenserBypass = Get_Notification_Bypass(Disp_i); + Read_SingleDispenser_IO_Registers(Disp_i); + //DispenserBypass = Get_Notification_Bypass(Disp_i); if(Get_Notification_Over_Press(Disp_i) == false) { //report dispenser over pressure AlarmHandlingSetAlarm(EVENT_TYPE__DISPENSER_1_OVERPRESSURE+Disp_i, true); DispenserAlarm[Disp_i] = EVENT_TYPE__DISPENSER_1_OVERPRESSURE+Disp_i; + if (DispenserAlarm[Disp_i] == false) + { + IDS_Dispenser_Alarm_On(Disp_i); + } DispenserOverPressure[Disp_i] = true; Report("Dispenser Safety - over pressure", __FILE__,__LINE__,Disp_i, RpFatalError, (int)(1000*GetDispenserPressure(Disp_i)), 0); } @@ -117,6 +124,10 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) { AlarmHandlingSetAlarm(EVENT_TYPE__DISPENSER_1_UPPER_HARD_LIMIT+Disp_i, true); DispenserAlarm[Disp_i] = EVENT_TYPE__DISPENSER_1_UPPER_HARD_LIMIT+Disp_i; + if (DispenserAlarm[Disp_i] == false) + { + IDS_Dispenser_Alarm_On(Disp_i); + } DispenserOverPressure[Disp_i] = true; Report("Dispenser upper hard limit", __FILE__,__LINE__,Disp_i, RpFatalError, Get_Notification_Disp_UP(Disp_i), 0); } @@ -124,12 +135,16 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) { AlarmHandlingSetAlarm(EVENT_TYPE__DISPENSER_1_LOWER_HARD_LIMIT+Disp_i, true); DispenserAlarm[Disp_i] = EVENT_TYPE__DISPENSER_1_LOWER_HARD_LIMIT+Disp_i; + if (DispenserAlarm[Disp_i] == false) + { + IDS_Dispenser_Alarm_On(Disp_i); + } DispenserOverPressure[Disp_i] = true; Report("Dispenser lower hard limit", __FILE__,__LINE__,Disp_i, RpFatalError, Get_Notification_Disp_Down(Disp_i), 0); } else { - Report("Dispenser unknown safety alarm", __FILE__,__LINE__,Disp_i, RpFatalError, 1-DispenserBypass, 0); + Report("Dispenser unknown safety alarm", __FILE__,__LINE__,Disp_i, RpFatalError,Get_Notification_Disp_Full(Disp_i), 0); } } @@ -144,15 +159,18 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) { if (Check_Disp_Safety_Stop_Indication(Disp_i) == false) { - //report dispenser over pressure AlarmHandlingSetAlarm(DispenserAlarm[Disp_i], false); + if (DispenserAlarm[Disp_i] == true) + { + IDS_Dispenser_Alarm_Off(Disp_i); + } DispenserAlarm[Disp_i] = 0; DispenserOverPressure[Disp_i] = false; } } } } -/* if ((mDrierDoorAlarmState != DrierDoorAlarmState)|| (mDrierDoorAlarmState == false)) + if ((mDrierDoorAlarmState != DrierDoorAlarmState)|| (mDrierDoorAlarmState == false)) { //alarm went off AlarmHandlingSetAlarm(EVENT_TYPE__DRYER_DOOR_OPEN, false); @@ -176,7 +194,7 @@ uint32_t Safety_Main_State(uint32_t IfIndex, uint32_t BusyFlag) AlarmHandlingSetAlarm(EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, false); WasteOverflowAlarmState = mWasteOverflowAlarmState; } -*/ + return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/General/buttons.c b/Software/Embedded_SW/Embedded/Modules/General/buttons.c index d5ed5cef9..d8c68b345 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/buttons.c +++ b/Software/Embedded_SW/Embedded/Modules/General/buttons.c @@ -40,15 +40,10 @@ int PowerUp(); int thredJog(); #define BUTTONS_SAMPLE_TIME (eHundredMillisecond) +#define SECOND1 (1000/BUTTONS_SAMPLE_TIME) #define SECOND2 (2000/BUTTONS_SAMPLE_TIME) #define SECOND5 (5000/BUTTONS_SAMPLE_TIME) -//enum PBstat OnOffPBstate = OFFPB; -//enum PBstat ret -//enum PBstat threadPB = OFFPB; - - - button power, jog, load, cart1, cart2, cart3; uint32_t ButtonPowerCallBackFunction(uint32_t IfIndex, uint32_t ReadValue); uint32_t ButtonPowerCBFunction(uint32_t IfIndex, uint32_t ReadValue); @@ -59,8 +54,6 @@ uint32_t StateMachine( button *pBtn); uint32_t ButtonJogCallBackFunction(uint32_t IfIndex, uint32_t ReadValue); uint32_t ButtonJogCBFunction(uint32_t IfIndex, uint32_t ReadValue); uint8_t thraedJogging(uint8_t off); -//uint32_t setJoggingEnableCondition( button *pBtn); -uint32_t joggingMachine( button *pBtn); //uint8_t OnOffPB, uint32_t ButtonLoadCallBackFunction(uint32_t IfIndex, uint32_t ReadValue); @@ -68,12 +61,6 @@ uint32_t ButtonLoadCBFunction(uint32_t IfIndex, uint32_t ReadValue); uint32_t LoadStatMachine( button *pBtn); uint32_t LoadLongPress( button *pBtn); bool get_pbAction ( button *pBtn, PB_Status ReadValue); -/* -void Power_Reset(); -uint8_t Buttons_LEDS(BUTTON Button, OPERATION_MODE LED_Mode); -uint8_t Buzzer(OPERATION_MODE Buzzer_Mode); -bool Read_PWR_Button();//TODO move to GPIO folder -*/ #define LOADLONGPRESS 3 @@ -89,6 +76,8 @@ int PowerUp() { bool ret = OK; + PowerIdleOutOfIdleState(); + return ret; } @@ -135,34 +124,53 @@ bool SetPowerMachineState(PBmachineState state) */ bool get_pbAction (button *pBtn, PB_Status ReadValue ) { - if ((pBtn->bttn_status == RELEASE) && ( ReadValue == PRESS)) - { - // load.bttn_status = PRESS; - load.count = 1 ; - } - else + pBtn->bttn_status = ReadValue; + switch (pBtn->Action) { - load.Action = OFFPB; - if ((pBtn->bttn_status == PRESS) && ( ReadValue == PRESS ) && (pBtn->count > 0 )) - { - pBtn->count ++ ; - if (pBtn->count > SECOND5) + case OFFPB: + if (ReadValue == PRESS) + { + pBtn->count = 1 ; + pBtn->Action = COUNTPB; + } + else { pBtn->count = 0 ; - pBtn->Action = LONGPB; + pBtn->Action = OFFPB; } - } - else if ((pBtn->bttn_status == PRESS) && ( ReadValue == RELEASE ) && (pBtn->count > 0 )) - { -// load.bttn_status = RELEASE; - pBtn->count = 0 ; - pBtn->Action = SHORTPB; - } + break; + case COUNTPB: + if (ReadValue == PRESS) + { + pBtn->count += 1 ; + if (pBtn->count > SECOND5) + { + pBtn->Action = LONGPB; + } + } + else + { + pBtn->count = 0 ; + pBtn->Action = SHORTPB; + } + break; + case SHORTPB: + pBtn->Action = OFFPB; + break ; + case LONGPB: + if (ReadValue == RELEASE) + { + pBtn->count = 0 ; + pBtn->Action = OFFPB; + } + break ; + default: + break; } - pBtn->bttn_status = ReadValue; -return OK; + return OK; } + /* * read GPIO status * port: GPIO_PORTN_BASE @@ -173,23 +181,16 @@ return OK; uint32_t ButtonPowerCallBackFunction(uint32_t IfIndex, uint32_t ReadValue) { return Read_PWR_Button(); - /* - * - if(ROM_GPIOPinRead(GPIO_PORTN_BASE, GPIO_PIN_7)) - return 0x00; - else - return 0x01; - */ } uint32_t ButtonJogCallBackFunction(uint32_t IfIndex, uint32_t ReadValue) { - return Get_Thread_Jogging_Button(); -// -// if(ROM_GPIOPinRead(GPIO_PORTN_BASE, GPIO_PIN_7)) -// return 0x00; -// else -// return 0x01; + if (jog.state != sttDISABLE) + { + ReadValue = Get_Thread_Jogging_Button(); + get_pbAction ( &jog, ReadValue ); + } + return ReadValue; } uint32_t ButtonLoadCallBackFunction(uint32_t IfIndex, uint32_t ReadValue) @@ -210,7 +211,7 @@ uint32_t Buttons_Init(void) power.state = sttON; //sttOFF, sttON, sttDISABLE, sttENABLE, sttIDLE, sttJOGGING power.count = 0; - AddControlCallback( ButtonPowerCBFunction, BUTTONS_SAMPLE_TIME, ButtonPowerCallBackFunction, 0,0,0 ); // eFiftyMillisecond + AddControlCallback("ButtonPowerCB", ButtonPowerCBFunction, BUTTONS_SAMPLE_TIME, ButtonPowerCallBackFunction, 0,0,0 ); // eFiftyMillisecond strcpy(jog.bttn_name, "jog"); jog.bttn_status = RELEASE; // 0=RELEASE 1=PRESS @@ -220,16 +221,17 @@ uint32_t Buttons_Init(void) jog.state = sttENABLE; // sttDISABLE, sttENABLE, sttJOGGING jog.count = 0; - AddControlCallback( ButtonJogCBFunction, BUTTONS_SAMPLE_TIME, ButtonJogCallBackFunction, 0,0,0 ); // + AddControlCallback("ButtonJogCB", ButtonJogCBFunction, BUTTONS_SAMPLE_TIME, ButtonJogCallBackFunction, 0,0,0 ); // strcpy(load.bttn_name, "load"); load.bttn_status = RELEASE; // 0=RELEASE 1=PRESS load.Action = OFFPB ; //OFFPB,short,long,count,replong - load.color = colorOFF; //colorOFF, BLUE, BLINK, + Pannel_Leds(THREAD_LOAD, MODE_ON);//AVI+ + load.color = colorON; //colorOFF, BLUE, BLINK, load.state = sttRDY; // load.count = 0; - AddControlCallback( ButtonLoadCBFunction, BUTTONS_SAMPLE_TIME, ButtonLoadCallBackFunction, 0,0,0 ); // + AddControlCallback("ButtonLoadCB", ButtonLoadCBFunction, BUTTONS_SAMPLE_TIME, ButtonLoadCallBackFunction, 0,0,0 ); // return OK; } @@ -241,18 +243,89 @@ uint32_t ButtonPowerCBFunction(uint32_t IfIndex, uint32_t ReadValue) return 0; } + +/*ButtonJogCBFunction() + * state machine for thread jogging button: + * 1. OFF - when the machine is working + * 2. blue - when the machin is not workig so we can jog thread + * 3. blink - when pushing the JOG button + * when pushing the JOG more the 5 second + * + */ uint32_t ButtonJogCBFunction(uint32_t IfIndex, uint32_t ReadValue) { - jog.bttn_status = ReadValue; - //if (ReadValue == PRESS) + switch (jog.state) { - //setJoggingEnableCondition(&jog); - joggingMachine(&jog); + case sttDISABLE: + if (JobIsActive() == false) + { + jog.color = colorON; + Pannel_Leds(THREAD_JOGGING, MODE_ON); + jog.state = sttENABLE; + } + break; + case sttENABLE: + if (jog.Action == COUNTPB) + { + ReportWithPackageFilter(GeneralFilter,"------------ joggingMachine: Jogging is sttENABLE and PRESS-----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); jog.state = sttJOGGING; + jog.color = colorON; + jog.color = BLINK; + ThreadJoggingFunc(40); + jog.state = sttJOGGING; + } + else + { + if (JobIsActive() == true) + { + ReportWithPackageFilter(GeneralFilter,"------------ joggingMachine: Jogging is Disable -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); + jog.Action = OFFPB; + jog.color = colorOFF; + Pannel_Leds(THREAD_JOGGING,MODE_OFF); + jog.state = sttDISABLE; + } + } + break; + case sttJOGGING: + if (jog.Action == SHORTPB) //PB is OFF + { + ReportWithPackageFilter(GeneralFilter,"------------ joggingMachine: sttJOGGING action->SHORTPB-----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); jog.state = sttJOGGING; + ThreadAbortJoggingFunc(); + jog.color = colorON; + Pannel_Leds(THREAD_JOGGING, MODE_ON); + jog.state = sttENABLE; + } + else if (jog.Action == LONGPB) + { + ReportWithPackageFilter(GeneralFilter,"------------ joggingMachine: sttJOGGING action->LONGPB-----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); jog.state = sttJOGGING; + jog.state = sttLONG_JOGGING; + if (JobIsActive() == false) // added because sometimes the jog stops because of another reason and the button s stucked blinking + { + jog.color = colorON; + Pannel_Leds(THREAD_JOGGING, MODE_ON); + jog.state = sttENABLE; + } + + } + break; + case sttLONG_JOGGING: + if (jog.Action == COUNTPB) + { + ReportWithPackageFilter(GeneralFilter,"------------ joggingMachine: sttLONG_JOGGING action->COUNTPB-----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); jog.state = sttJOGGING;ThreadAbortJoggingFunc(); // to do!!!! + ThreadAbortJoggingFunc(); + jog.color = colorON; + Pannel_Leds(THREAD_JOGGING, MODE_ON); + jog.state = sttENABLE; + } + break; + default: + break; } return OK; } + + uint32_t ButtonLoadCBFunction(uint32_t IfIndex, uint32_t ReadValue) { switch (load.Action) @@ -266,6 +339,13 @@ uint32_t ButtonLoadCBFunction(uint32_t IfIndex, uint32_t ReadValue) LoadLongPress( &load ); break; default: + if (ThreadLoadingActive() == false) + { + if (JobIsActive()) + load.color = colorOFF; + else + load.color = colorON; + } break; } return OK; @@ -308,10 +388,10 @@ uint32_t ShortLongOffPB(uint8_t OnOffPB, button *pBtn) case COUNTPB: // last OnOffPBstate was COUNTPB if (OnOffPB) { - if( pBtn->count > SECOND2 ) + if( pBtn->count > SECOND1 ) { pBtn->Action = SHORTPB ; - ReportWithPackageFilter(GeneralFilter,"------------ 2 seconds count PB Power -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); + ReportWithPackageFilter(GeneralFilter,"------------ 1 seconds count PB Power -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); } } else @@ -444,138 +524,6 @@ return OK; } - - - - /*-----------------------------------------------------------------------------------*/ - - - /* int rdJoggingEnableCondition() - * read if we can enabl the thraed jogging - * - * return 0 or 1 - * disable OFF(0) - the machine is working now you cannot jogging the thread. - * enable ON(1) - joggin thread is enable - */ - - - -//uint32_t setJoggingEnableCondition( button *pBtn) -//{ -// uint8_t parameter = 3; -// -// if (0 -//// to do : what are the conditions for enable / disable -//// 1. -//// 2. -//// 3. -//// ... -// ) -// { -// pBtn->state = sttDISABLE; -// REPORT_MSG(parameter," ------------ Jogging : setJoggingEnableCondition sttDISABLE ----------------- "); -// pBtn->color = colorOFF; -// Pannel_Leds(THREAD_JOGGING, MODE_OFF); //AVI+ -// // ThreadAbortJoggingFunc(); -// } -// -// else -// { -// pBtn->state = sttENABLE; -//// REPORT_MSG(parameter," ------------ Jogging : setJoggingEnableCondition sttENABLE ----------------- "); -// pBtn->color = BLUE; -// Pannel_Leds(THREAD_JOGGING, MODE_ON); //AVI+ -// //ThreadJoggingFunc(40); -// } -// -//return 0; -//} - - - - - -/*int joggingMachine() - * state machine for thread jogging button: - * 1. OFF - when the machine is working - * 2. blue - when the machin is not workig so we can jog thread - * 3. blink - when pushing the jog thread button and jogigthread - * - */ - - -uint32_t joggingMachine( button *pBtn) //uint8_t OnOffPB, -{ - -// uint8_t parameter = 4; - - if (sttDISABLE == pBtn->state) - { - // jogging is disable - ReportWithPackageFilter(GeneralFilter,"------------ joggingMachine: Jogging is Disable -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); - pBtn->Action = OFFPB; - pBtn->color = colorOFF; - Pannel_Leds(THREAD_JOGGING,MODE_OFF);//AVI+ - } - else - { - if ( (pBtn->Action != OFFPB) && (pBtn->bttn_status == RELEASE)) - { - ReportWithPackageFilter(GeneralFilter,"------------ joggingMachine: Jogging OnOffPB == 0 -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); - ReportWithPackageFilter(GeneralFilter,"------------ joggingMachine: stop Jogging -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); - pBtn->Action = OFFPB; - ThreadAbortJoggingFunc(); // to do!!!! - pBtn->color = colorON; - Pannel_Leds(THREAD_JOGGING, MODE_ON);//AVI+ - } - else if ((pBtn->Action == OFFPB) && (pBtn->bttn_status == PRESS)) - { - pBtn->Action = LONGPB; - ReportWithPackageFilter(GeneralFilter,"------------ joggingMachine: Jogging OnOffPB == 1 -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); - ReportWithPackageFilter(GeneralFilter,"------------ joggingMachine: start Jogging -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); - pBtn->color = BLINK; - ThreadJoggingFunc(40); - } -// if (pBtn->bttn_status == press)ThreadJoggingFunc(40); -// else -// { -// pBtn->Action = OFFPB; -// REPORT_MSG(parameter," ??????????????????? joggingMachine: start Jogging ???????????????????"); -// } - } - - - -// if (OnOffPB == release) -// { -// REPORT_MSG(parameter," ------------joggingMachine: Jogging OnOffPB == 00----------------- "); -// REPORT_MSG(parameter," ------------joggingMachine: stop Jogging ----------------- "); -// pBtn->Action = OFFPB; -// ThreadAbortJoggingFunc(); // to do!!!! -// pBtn->color = BLUE; -// Pannel_Leds(THREAD_JOGGING, MODE_ON);//AVI+ -// } -// else -// { -// if (pBtn->Action == OFFPB) -// { -// pBtn->Action = LONGPB; -// REPORT_MSG(parameter," ------------joggingMachine: Jogging OnOffPB == 1 ----------------- "); -// REPORT_MSG(parameter," ------------joggingMachine: start Jogging ----------------- "); -// pBtn->color = BLINK; -// ThreadJoggingFunc(40); -// } -// else -// { -// REPORT_MSG(parameter," ??????????????????? joggingMachine: start Jogging ???????????????????"); -// } -// -// } -// } -return OK; -} - - /*------------------------------------------------------------------------------*/ /*------ THREAD LOAD/UNLOAD ----------*/ @@ -588,29 +536,29 @@ uint32_t LoadStatMachine( button *pBtn) switch (pBtn->state) { case sttRDY : - ReportWithPackageFilter(GeneralFilter,"------------ load.state = sttRDY -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); -/* switch (pBtn->Action) - { - case (SHORTPB): - case (LONGPB): - case (REPLONGPB): - pBtn->state = sttPRELOAD; - pBtn->color = BLINK;*/ - if (ThreadLoadButton( THREAD_LOAD_INIT)) - { - pBtn->state = sttPRELOAD ; // to do - pBtn->color = colorON; - Pannel_Leds(THREAD_LOAD, MODE_ON);//AVI+ - } - else - { - // pBtn->state = sttDISABLE ; - Pannel_Leds(THREAD_LOAD, MODE_OFF);//AVI+ - } - /*break; - default : - break; - }*/ +// ReportWithPackageFilter(GeneralFilter,"------------ load.state = sttRDY -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); +///* switch (pBtn->Action) +// { +// case (SHORTPB): +// case (LONGPB): +// case (REPLONGPB): +// pBtn->state = sttPRELOAD; +// pBtn->color = BLINK;*/ +// if (ThreadLoadButton( THREAD_LOAD_INIT)== OK) +// { +// pBtn->state = sttPRELOAD ; // to do +// pBtn->color = colorON; +// Pannel_Leds(THREAD_LOAD, MODE_ON);//AVI+ +// } +// else +// { +// // pBtn->state = sttDISABLE ; +// Pannel_Leds(THREAD_LOAD, MODE_OFF);//AVI+ +// } +// /*break; +// default : +// break; +// }*/ break; case sttPRELOAD: ReportWithPackageFilter(GeneralFilter,"------------ load.state = sttPRELOAD -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); @@ -621,7 +569,7 @@ uint32_t LoadStatMachine( button *pBtn) case (REPLONGPB): pBtn->color = BLUE; Pannel_Leds(THREAD_LOAD, MODE_ON);//AVI+*/ - if (ThreadLoadButton( THREAD_LOAD_INITIAL_TENSION)) + if (ThreadLoadButton( THREAD_LOAD_INITIAL_TENSION)== OK) { pBtn->state = sttRDY ; // to do pBtn->color = colorON; @@ -641,7 +589,7 @@ uint32_t LoadStatMachine( button *pBtn) ReportWithPackageFilter(GeneralFilter,"------------ load.state = sttLOADING -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); pBtn->color = fastBILNK; Pannel_Leds(THREAD_LOAD, MODE_ON);//AVI+ - if (ThreadLoadButton( THREAD_LOAD_END)) + if (ThreadLoadButton( THREAD_LOAD_END)== OK) { pBtn->state = sttRDY ; // to do pBtn->color = colorON; @@ -710,7 +658,25 @@ void test_avi() uint32_t LoadLongPress( button *pBtn) { ReportWithPackageFilter(GeneralFilter,"------------ load.state = LoadLongPress -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); - Thread_Load_End(); + switch (pBtn->state) + { + case sttRDY : + ReportWithPackageFilter(GeneralFilter,"------------ load.state = sttRDY -----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); + if (ThreadLoadButton( THREAD_LOAD_INIT)== OK) + { + pBtn->state = sttPRELOAD ; // to do + pBtn->color = colorON; + Pannel_Leds(THREAD_LOAD, MODE_ON);//AVI+ + } + else + { + // pBtn->state = sttDISABLE ; + Pannel_Leds(THREAD_LOAD, MODE_OFF);//AVI+ + } + break; + default: + Thread_Load_End(); + } return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/General/buttons.h b/Software/Embedded_SW/Embedded/Modules/General/buttons.h index f7dbbb25f..646861bc7 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/buttons.h +++ b/Software/Embedded_SW/Embedded/Modules/General/buttons.h @@ -34,6 +34,7 @@ typedef enum sttDISABLE, sttENABLE, sttJOGGING, + sttLONG_JOGGING, sttRDY, sttPRELOAD, @@ -44,10 +45,10 @@ typedef enum typedef struct Button { - char bttn_name[10]; //option - int bttn_status; // 0=RELEASE 1=PRESS - PBstat Action; // enum : offPB,shortPB,longPB,countPB,replongPB - PBcolor color; // enum : off, blue, blink, bithing + char bttn_name[10]; //option + PB_Status bttn_status; // 0=RELEASE 1=PRESS + PBstat Action; // enum : offPB,shortPB,longPB,countPB,replongPB + PBcolor color; // enum : off, blue, blink, bithing PBmachineState state; // enum : sttOFF, sttON, sttDISABLE, sttENABLE, sttIDLE, sttJOGGING uint32_t count; }button; diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.c b/Software/Embedded_SW/Embedded/Modules/General/process.c index b74ba79b3..1ef4a0931 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/process.c +++ b/Software/Embedded_SW/Embedded/Modules/General/process.c @@ -20,7 +20,6 @@ #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" #include "modules/ids/ids_ex.h" -#include "third_party/fatfs/src/ffconf.h" #include "Common/SWUpdate/FileSystem.h" #include "StateMachines/Initialization/PowerIdle.h" @@ -65,9 +64,9 @@ void HeatersStopControlOnHeatersOff(ProcessParameters* ProcessParams) REPORT_MSG(temp_sum,"Heating control off - temperatures off"); } } -uint32_t HandleProcessParameters(ProcessParameters* ProcessParams) +uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData) { - uint32_t status = 0; + uint32_t status = 0,Bytes = 0; if (ProcessParams==NULL) { status = ERROR_CODE__INVALID_PARAMETER; @@ -89,7 +88,19 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams) { memcpy (&ProcessParametersKeep,ProcessParams,sizeof(ProcessParameters)); } - if (ProcessParams->mixertemp) + if (saveData == true) + { + if ((ProcessParams->dryerzone1temp > 0.1)&&(ProcessParams->headzone2temp > 0.1)&&(ProcessParams->headzone3temp > 0.1)&&(ProcessParams->headzone4temp > 0.1))//NOT turning off heaters + { + Bytes = sizeof(ProcessParameters); + FileWrite(ProcessParams,Bytes,ProcessParamsConfigPath,BIOS_WAIT_FOREVER); + EraseFlashSection(PROCESS_PARAMETERS_MAP_IN_FLASH,Bytes+4); + ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); + ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH+4, Bytes, ProcessParams); + REPORT_MSG(Bytes,"Bytes write to flash"); + } + } + if (ProcessParams->mixertemp>1) status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__MixerHeater, true, ProcessParams->mixertemp); @@ -97,55 +108,95 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams) status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__MixerHeater, false, ProcessParams->mixertemp); - if (ProcessParams->headzone1temp) - status |= HeaterCommandRequestMessage( - HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, true, - ProcessParams->headzone1temp); + if (ProcessParams->headzone1temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, true,ProcessParams->headzone1temp); +#ifdef Use_Head_Card + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, true,ProcessParams->headzone1temp); + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, true,ProcessParams->headzone1temp); +#endif + } else - status |= HeaterCommandRequestMessage( - HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, false, - ProcessParams->headzone1temp); - if (ProcessParams->headzone2temp) - status |= HeaterCommandRequestMessage( - HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, true, - ProcessParams->headzone2temp); + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1, false,ProcessParams->headzone1temp); +#ifdef Use_Head_Card + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, false,ProcessParams->headzone1temp); + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, false,ProcessParams->headzone1temp); +#endif + } + if (ProcessParams->headzone2temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, true,ProcessParams->headzone2temp); +#ifdef Use_Head_Card + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, true,ProcessParams->headzone2temp); + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, true,ProcessParams->headzone2temp); +#endif + } else - status |= HeaterCommandRequestMessage( - HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, false, - ProcessParams->headzone2temp); - if (ProcessParams->headzone3temp) - status |= HeaterCommandRequestMessage( - HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, true, - ProcessParams->headzone3temp); + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ2, false,ProcessParams->headzone2temp); +#ifdef Use_Head_Card + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, false,ProcessParams->headzone2temp); + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, false,ProcessParams->headzone2temp); +#endif + } + if (ProcessParams->headzone3temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, true,ProcessParams->headzone3temp); +#ifdef Use_Head_Card + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ9, true,ProcessParams->headzone3temp); +#endif + } else - status |= HeaterCommandRequestMessage( - HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, false, - ProcessParams->headzone3temp); - if (ProcessParams->headzone4temp) - status |= HeaterCommandRequestMessage( - HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, true, - ProcessParams->headzone4temp); + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ3, false,ProcessParams->headzone3temp); +#ifdef Use_Head_Card + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ9, false,ProcessParams->headzone3temp); +#endif + } + if (ProcessParams->headzone4temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, true,ProcessParams->headzone4temp); +#ifdef Use_Head_Card + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, true,ProcessParams->headzone4temp); +#endif + } else - status |= HeaterCommandRequestMessage( - HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, false, - ProcessParams->headzone4temp); - if (ProcessParams->headzone5temp) - status |= HeaterCommandRequestMessage( - HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, true, - ProcessParams->headzone5temp); + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ4, false,ProcessParams->headzone4temp); +#ifdef Use_Head_Card + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, false,ProcessParams->headzone4temp); +#endif + } + if (ProcessParams->headzone5temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, true,ProcessParams->headzone5temp); +#ifdef Use_Head_Card + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, true,ProcessParams->headzone5temp); +#endif + } else - status |= HeaterCommandRequestMessage( - HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, false, - ProcessParams->headzone5temp); - if (ProcessParams->headzone6temp) - status |= HeaterCommandRequestMessage( - HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, true, - ProcessParams->headzone6temp); + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5, false,ProcessParams->headzone5temp); +#ifdef Use_Head_Card + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, false,ProcessParams->headzone5temp); +#endif + } + if (ProcessParams->headzone6temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, true,ProcessParams->headzone6temp); +#ifdef Use_Head_Card + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ12, true,ProcessParams->headzone6temp); +#endif + } else - status |= HeaterCommandRequestMessage( - HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, false, - ProcessParams->headzone6temp); - if (ProcessParams->dryerzone1temp) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6, false,ProcessParams->headzone6temp); +#ifdef Use_Head_Card + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ12, false,ProcessParams->headzone6temp); +#endif + } + if (ProcessParams->dryerzone1temp>1) status |= HeaterCommandRequestMessage( HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature, true, ProcessParams->dryerzone1temp); @@ -170,6 +221,71 @@ uint32_t HandleProcessParameters(ProcessParameters* ProcessParams) HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, false, ProcessParams->dryerzone3temp); */ + /* if (ProcessParams->headzone7temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, true,ProcessParams->headzone7temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ7, false,ProcessParams->headzone7temp); + } + if (ProcessParams->headzone8temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, true,ProcessParams->headzone8temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ8, false,ProcessParams->headzone8temp); + } + if (ProcessParams->headzone9temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ9, true,ProcessParams->headzone9temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ9, false,ProcessParams->headzone9temp); + } + if (ProcessParams->headzone10temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, true,ProcessParams->headzone10temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ10, false,ProcessParams->headzone10temp); + } + if (ProcessParams->headzone11temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, true,ProcessParams->headzone11temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ11, false,ProcessParams->headzone11temp); + } + if (ProcessParams->headzone12temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ12, true,ProcessParams->headzone12temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ12, false,ProcessParams->headzone12temp); + } + if (ProcessParams->stspzone1temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, true,ProcessParams->stspzone1temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater1, false,ProcessParams->stspzone1temp); + } + if (ProcessParams->stspzone2temp>1) + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, true,ProcessParams->stspzone2temp); + } + else + { + status |= HeaterCommandRequestMessage(HARDWARE_PID_CONTROL_TYPE__HeadCoverHeater2, false,ProcessParams->stspzone2temp); + } +*/ HeatersStopControlOnHeatersOff(ProcessParams); dyeingspeed = ProcessParams->dyeingspeed; dryerbufferlength = ProcessParams->dryerbufferlength; @@ -193,20 +309,9 @@ void ProcessRequestFunc(MessageContainer* requestContainer) MessageContainer responseContainer; uint8_t* container_buffer; uint32_t status = 0; - uint32_t Bytes = 0; UploadProcessParametersRequest* request = upload_process_parameters_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); ProcessParameters* ProcessParams = request->processparameters; - if ((ProcessParams->dryerzone1temp > 0.1)&&(ProcessParams->headzone2temp > 0.1)&&(ProcessParams->headzone3temp > 0.1)&&(ProcessParams->headzone4temp > 0.1))//NOT turning off heaters - { - FileWrite(requestContainer->data.data, requestContainer->data.len,ProcessParamsConfigPath,BIOS_WAIT_FOREVER); - Bytes = sizeof(ProcessParameters); - EraseFlashSection(PROCESS_PARAMETERS_MAP_IN_FLASH,Bytes+4); - ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH, 4,&Bytes); - ReadAppAndProgram(PROCESS_PARAMETERS_MAP_IN_FLASH+4, Bytes, ProcessParams); - REPORT_MSG(Bytes,"Bytes write to flash"); - - } //////////////////////////////////////////////////////////////////////// /*UploadProcessParametersRequest* requesttest; uint8_t* buffer = NULL; @@ -234,7 +339,7 @@ void ProcessRequestFunc(MessageContainer* requestContainer) PowerIdleOutOfIdleState(); if (status == 0) - status = HandleProcessParameters(ProcessParams); + status = HandleProcessParameters(ProcessParams,true); if (status) { responseContainer.has_error = true; @@ -255,10 +360,9 @@ uint32_t LoadProcessParamsFromFile(void) Fresult = FileRead(ProcessParamsConfigPath, &Bytes, &buffer); if (Fresult == FR_OK) { - UploadProcessParametersRequest* request = upload_process_parameters_request__unpack(NULL, Bytes, buffer); - ProcessParameters* ProcessParams = request->processparameters; + ProcessParameters* ProcessParams = (ProcessParameters*)buffer; - if ((request!= NULL)&&(ProcessParams!=NULL)) + if (ProcessParams!=NULL) { if ((ProcessParams->dryerzone1temp > 0.1)&&(ProcessParams->headzone2temp > 0.1)&&(ProcessParams->headzone3temp > 0.1)&&(ProcessParams->headzone4temp > 0.1))//NOT turning off heaters { @@ -272,7 +376,7 @@ uint32_t LoadProcessParamsFromFile(void) } else { - Report("process parameters not loaded",__FILE__,__LINE__,(int)request,RpWarning,(int)request,0); + Report("process parameters not loaded",__FILE__,__LINE__,(int)0,RpWarning,(int)0,0); return ERROR; } } @@ -290,7 +394,7 @@ uint32_t ProcessParamsInit(void) if ((Bytes)&&(Bytes < 1000)) { ProcessParameters* ProcessParams = (ProcessParameters *)(PROCESS_PARAMETERS_MAP_IN_FLASH+4); - Fresult = HandleProcessParameters(ProcessParams); + Fresult = HandleProcessParameters(ProcessParams,false); } else { @@ -302,7 +406,7 @@ uint32_t ProcessParamsInit(void) if ((Bytes)&&(Bytes < 1000)) { ProcessParameters* ProcessParams = (ProcessParameters *)(PROCESS_PARAMETERS_MAP_IN_FLASH+4); - Fresult = HandleProcessParameters(ProcessParams); + Fresult = HandleProcessParameters(ProcessParams,false); } } } diff --git a/Software/Embedded_SW/Embedded/Modules/General/process.h b/Software/Embedded_SW/Embedded/Modules/General/process.h index 2b02c28c7..97d28f1ef 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/process.h +++ b/Software/Embedded_SW/Embedded/Modules/General/process.h @@ -25,7 +25,7 @@ extern double dryerbufferCentimeters; extern ProcessParameters ProcessParametersKeep; extern void ProcessRequestFunc(MessageContainer* requestContainer); -extern uint32_t HandleProcessParameters(ProcessParameters* ProcessParams); +extern uint32_t HandleProcessParameters(ProcessParameters* ProcessParams,bool saveData); uint32_t ProcessParamsInit(void); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h index b25c3e5c7..05425cc45 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h @@ -4,6 +4,7 @@ #include "PMR/Hardware/HardwarePidControl.pb-c.h" #include "PMR/Hardware/HardwarePidControlType.pb-c.h" #include "heaters_ex.h" +#include "Drivers/Heater/Heater.h" /******************** DEFINITIONS ********************************************/ #define MAX_AC_HEATERS (HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary+1) #define MAX_TIMESLICES 200 @@ -12,7 +13,7 @@ extern uint32_t OutputProportionalSingleStep; //A/C Heaters step size from one extern uint32_t OutputProportionalCycleTime; //A/C Heaters Cycle time in milliseconds - one for all heaters //extern uint32_t Heater_timerBase; //Timer handle extern char TimeSliceAllocation[MAX_TIMESLICES]; -extern int DCTimeSliceAllocation[MAX_HEATERS_NUM]; +extern int DCTimeSliceAllocation[HEATER_TYPE_MAX_HEATERS]; extern int NumberOFSlicesInUse; extern uint32_t MillisecondsPerChange; @@ -48,13 +49,13 @@ typedef struct HeaterCommandstruc }HeaterCommand; -extern HeaterPIDControlConfig HeaterControl[MAX_HEATERS_NUM]; -extern HeaterCommand HeaterCmd[MAX_HEATERS_NUM]; +extern HeaterPIDControlConfig HeaterControl[HEATER_TYPE_MAX_HEATERS]; +extern HeaterCommand HeaterCmd[HEATER_TYPE_MAX_HEATERS]; extern uint32_t Heater_timerBase; uint32_t HeaterRecalculateSharedHeatersParams(uint32_t deviceId, uint32_t new_outputproportionalpowerlimit); uint32_t HeaterRecalculateHeaterParams(uint32_t deviceId, uint32_t new_outputproportionalpowerlimit); -uint32_t HeatersSingleHeaterEnd(HardwarePidControlType HeaterId); +uint32_t HeatersSingleHeaterEnd(int HeaterId); #endif diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h index 0b65d9e5e..bcc19bd6f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_ex.h @@ -1,10 +1,17 @@ +#include "Drivers/Heater/Heater.h" + #include "PMR/common/MessageContainer.pb-c.h" #include "PMR/Hardware/HardwarePidControl.pb-c.h" #include "PMR/Diagnostics/HeaterType.pb-c.h" #include "PMR/Diagnostics/HeaterState.pb-c.h" +#include "PMR/Diagnostics/EventType.pb-c.h" #define MAX_HEATERS_NUM HARDWARE_PID_CONTROL_TYPE__MixerHeater+1 +extern EventType HeaterEventType[HEATER_TYPE_MAX_HEATERS]; +extern EventType HeaterUnderEventType[HEATER_TYPE_MAX_HEATERS]; +extern EventType HeaterUnderEventType_B[HEATER_TYPE_MAX_HEATERS]; + //uint32_t HeaterCommandRequestMessage(MessageContainer* requestContainer); uint32_t HeaterConfigRequestMessage(HardwarePidControl* request); uint32_t HeaterConfigSetSharedHeatersParams (uint32_t outputproportionalcycletime, uint32_t outputproportionalsinglestep); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c index 350236708..78ae37eef 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c @@ -25,7 +25,7 @@ #include "heaters.h" #include "Drivers/Heater/Heater.h" #include "Drivers/Heater/TemperatureSensor.h" -#include "Drivers/I2C_Communication/Head_Card/PT100/PT100_ADC.h" +#include "Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.h" /******************** STRUCTURES AND ENUMs ********************************************/ @@ -45,7 +45,7 @@ typedef enum { }HEATERS_EVENTS_ENUM; */ /******************** GLOBAL PARAMETERS ********************************************/ -HeaterPIDControlConfig HeaterControl[MAX_HEATERS_NUM] = {0,0,0,0,0,0,0,0,0,0,0,0}; +HeaterPIDControlConfig HeaterControl[HEATER_TYPE_MAX_HEATERS] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; bool AcHeaterConfigured[MAX_AC_HEATERS] = {0,0,0}; int NumberOFSlicesInUse = 0; @@ -64,12 +64,16 @@ uint32_t Heaters_Init(void) //ROM_TimerDisable(Heater_timerBase, TIMER_A); #ifdef Use_Head_Card - HeadADCPT100_SensorInitConfig(); + HeadADCPT100_SensorInitConfig();//OK #endif FPGA_SensorInitConfig(); memset(HeaterControl,0,sizeof(HeaterControl)); +#ifdef Use_Head_Card + for (i = 0;i<HEATER_TYPE_MAX_HEATERS; i++) +#else for (i = 0;i<MAX_HEATERS_NUM; i++) +#endif DeActivateHeater(i); return OK; } @@ -82,10 +86,10 @@ uint32_t HeaterConfigRequestMessage(HardwarePidControl* request) //uint32_t status = OK; HardwarePidControlType HeaterId; - HeaterId = request->hardwarepidcontroltype; + HeaterId = getHeaterId(request->hardwarepidcontroltype); //int ValidationError = 0; - if (HeaterId< MAX_HEATERS_NUM) + if (HeaterId< HEATER_TYPE_MAX_HEATERS) { HeaterControl[HeaterId].configured = true; HeaterControl[HeaterId].id = HeaterId; @@ -95,10 +99,10 @@ uint32_t HeaterConfigRequestMessage(HardwarePidControl* request) HeaterControl[HeaterId].ProportionalErrorMultiplier = request->outputonoffhysteresisvalue; if (HeaterId == HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature) { - HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain].sensormaxvalue = request->sensormaxvalue*100; - HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain].sensorminvalue = request->sensorminvalue*100; - HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary].sensormaxvalue = request->sensormaxvalue*100; - HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary].sensorminvalue = request->sensorminvalue*100; + HeaterControl[HEATER_TYPE__DryerMainHeater].sensormaxvalue = request->sensormaxvalue*100; + HeaterControl[HEATER_TYPE__DryerMainHeater].sensorminvalue = request->sensorminvalue*100; + HeaterControl[HEATER_TYPE__DryerSecondaryHeater].sensormaxvalue = request->sensormaxvalue*100; + HeaterControl[HEATER_TYPE__DryerSecondaryHeater].sensorminvalue = request->sensorminvalue*100; } HeaterControl[HeaterId].sensormaxvalue = 0; HeaterControl[HeaterId].sensorminvalue = 0; @@ -157,8 +161,8 @@ uint32_t HeaterConfigSetSharedHeatersParams(uint32_t outputproportionalcycletime } // all numbers are rounded down. better to have carefully calculated numbers - Heater1000Slices = HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain].outputproportionalpowerlimit * NumberOFSlicesInUse / 100; - Heater200aSlices = HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary].outputproportionalpowerlimit * NumberOFSlicesInUse / 100; + Heater1000Slices = HeaterControl[HEATER_TYPE__DryerMainHeater].outputproportionalpowerlimit * NumberOFSlicesInUse / 100; + Heater200aSlices = HeaterControl[HEATER_TYPE__DryerSecondaryHeater].outputproportionalpowerlimit * NumberOFSlicesInUse / 100; if ((Heater1000Slices + Heater200aSlices +2)>NumberOFSlicesInUse) { @@ -168,8 +172,8 @@ uint32_t HeaterConfigSetSharedHeatersParams(uint32_t outputproportionalcycletime //mark the time slices for heaters operation as empty / Heater1000 / Heater 200 memset (TimeSliceAllocation,0xFF,sizeof(TimeSliceAllocation)); - for (Slice_i = 0; Slice_i < Heater1000Slices;Slice_i++ ) TimeSliceAllocation[Slice_i] = HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain; - for (Slice_i = Heater1000Slices+1; Slice_i <= Heater1000Slices+Heater200aSlices;Slice_i++ ) TimeSliceAllocation[Slice_i] = HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary; + for (Slice_i = 0; Slice_i < Heater1000Slices;Slice_i++ ) TimeSliceAllocation[Slice_i] = HEATER_TYPE__DryerMainHeater; + for (Slice_i = Heater1000Slices+1; Slice_i <= Heater1000Slices+Heater200aSlices;Slice_i++ ) TimeSliceAllocation[Slice_i] = HEATER_TYPE__DryerSecondaryHeater; return OK; @@ -193,8 +197,8 @@ uint32_t HeaterRecalculateSharedHeatersParams(uint32_t deviceId, uint32_t new_ou // all numbers are rounded down. better to have carefully calculated numbers HeaterControl[deviceId].outputproportionalpowerlimit = new_outputproportionalpowerlimit;///100; - Heater1000Slices = HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain].outputproportionalpowerlimit * NumberOFSlicesInUse / 100; - Heater200aSlices = HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary].outputproportionalpowerlimit * NumberOFSlicesInUse / 100; + Heater1000Slices = HeaterControl[HEATER_TYPE__DryerMainHeater].outputproportionalpowerlimit * NumberOFSlicesInUse / 100; + Heater200aSlices = HeaterControl[HEATER_TYPE__DryerSecondaryHeater].outputproportionalpowerlimit * NumberOFSlicesInUse / 100; //#warning temporary disable time slice control as we are working with one heater in run time /* if ((Heater1000Slices + Heater200aSlices +2)>NumberOFSlicesInUse) @@ -205,8 +209,8 @@ uint32_t HeaterRecalculateSharedHeatersParams(uint32_t deviceId, uint32_t new_ou */ //mark the time slices for heaters operation as empty / Heater1000 / Heater 200 memset (TimeSliceAllocation,0xFF,sizeof(TimeSliceAllocation)); - for (Slice_i = 0; Slice_i < Heater1000Slices;Slice_i++ ) TimeSliceAllocation[Slice_i] = HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain; - for (Slice_i = Heater1000Slices+1; Slice_i <= Heater1000Slices+Heater200aSlices;Slice_i++ ) TimeSliceAllocation[Slice_i] = HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary; + for (Slice_i = 0; Slice_i < Heater1000Slices;Slice_i++ ) TimeSliceAllocation[Slice_i] = HEATER_TYPE__DryerMainHeater; + for (Slice_i = Heater1000Slices+1; Slice_i <= Heater1000Slices+Heater200aSlices;Slice_i++ ) TimeSliceAllocation[Slice_i] = HEATER_TYPE__DryerSecondaryHeater; 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 e12d108ef..3baa81193 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -35,8 +35,11 @@ #include "Drivers/I2C_Communication/DAC/blower.h" #include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" +#include "drivers/I2C_Communication/Head_Card/ADC/Head_ADC.h" +#include "Drivers/I2C_Communication/I2C.h" #include "StateMachines/Printing/PrintingSTM.h" +#include "StateMachines/Initialization/PowerIdle.h" /******************** Data Structures ********************************************/ @@ -72,15 +75,15 @@ typedef struct bool m_isReady; PID_Config_Params m_params; }HeaterControlConfig_t; -HeaterControlConfig_t HeaterPIDConfig[MAX_HEATERS_NUM] = {0,0,0,0,0,0,0,0,0,0,0,0}; +HeaterControlConfig_t HeaterPIDConfig[HEATER_TYPE_MAX_HEATERS] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //PID_Config_Params temp_params; /******************** GLOBAL PARAMETERS ********************************************/ -HeaterCommand HeaterCmd[MAX_HEATERS_NUM]; -uint32_t ControlIdtoHeaterId [MAX_HEATERS_NUM] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; -uint32_t ControlIdtoMaxHeaterId [MAX_HEATERS_NUM] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; -uint32_t OverHeatCounter [MAX_HEATERS_NUM] = {0,0,0,0,0,0,0,0,0,0}; -uint32_t UnderHeatCounter [MAX_HEATERS_NUM] = {0,0,0,0,0,0,0,0,0,0}; +HeaterCommand HeaterCmd[HEATER_TYPE_MAX_HEATERS]; +uint32_t ControlIdtoHeaterId [HEATER_TYPE_MAX_HEATERS] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; +uint32_t ControlIdtoMaxHeaterId [HEATER_TYPE_MAX_HEATERS] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; +uint32_t OverHeatCounter [HEATER_TYPE_MAX_HEATERS] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +uint32_t UnderHeatCounter [HEATER_TYPE_MAX_HEATERS] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; uint32_t MainDryerHeaterMaxTempControl = 0xFF; uint32_t SecondDryerHeaterMaxTempControl = 0xFF; uint32_t DisasterControlId = 0xFF; @@ -90,42 +93,50 @@ uint32_t DisasterControlId = 0xFF; #define MINIMUM_HEATER_READ 9.0 #define MAXIMUM_HEATER_READ 283 -//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_CURRENT_HEATERS,HEATER_DRYER_CURRENT_1,HEATER_DRYER_CURRENT_2,HEATER_HEAD_CURRENT_ZONE_1,HEATER_HEAD_CURRENT_ZONE_2,HEATER_HEAD_CURRENT_ZONE_3,HEATER_HEAD_CURRENT_ZONE_4,HEATER_HEAD_CURRENT_ZONE_5_6,HEATER_HEAD_CURRENT_ZONE_5_6,HEATER_MIXCHIP_CURRENT}; +#ifdef Use_Head_Card +uint32_t HeaterId2PT100Id[HEATER_TYPE_MAX_HEATERS] = {DRYER_AIR_PT100,DRYER_MAIN_PT100,DRYER_SECONDARY_PT100,HEAD_PT100_ZONE_1_0X80_0, HEAD_PT100_ZONE_2_0X80_1, HEAD_PT100_ZONE_3_0X82_0, + HEAD_PT100_ZONE_4_0X82_1, HEAD_PT100_ZONE_5_0X84_0, HEAD_PT100_ZONE_6_0X84_1,HEAD_PT100_MIXER_0X8E_0, HEAD_PT100_ZONE_7_0X86_0, HEAD_PT100_ZONE_8_0X86_1, + HEAD_PT100_ZONE_9_0X88_0, HEAD_PT100_ZONE_10_0X88_1, HEAD_PT100_ZONE_11_0X8A_0, HEAD_PT100_ZONE_12_0X8A_1,HEAD_PT100_AIR_HEATER_1_0X8C_0,HEAD_PT100_AIR_HEATER_2_0X8C_1 }; +HEATERS_CURRENT HeaterId2CurrentId[HEATER_TYPE_MAX_HEATERS] = {NUM_OF_CURRENT_HEATERS,HEATER_DRYER_CURRENT_1,HEATER_DRYER_CURRENT_2,HEAD_CURRENT_ZONE_1, HEAD_CURRENT_ZONE_2, + HEAD_CURRENT_ZONE_3, HEAD_CURRENT_ZONE_4, HEAD_CURRENT_ZONE_5, HEAD_CURRENT_ZONE_6, HEAD_CURRENT_MIXER, HEAD_CURRENT_ZONE_7, + HEAD_CURRENT_ZONE_8, HEAD_CURRENT_ZONE_9, HEAD_CURRENT_ZONE_10, HEAD_CURRENT_ZONE_11, HEAD_CURRENT_ZONE_12,HEAD_CURRENT_HTIN_1,HEAD_CURRENT_HTOT_1}; +#else +uint32_t HeaterId2PT100Id[HEATER_TYPE_MAX_HEATERS] = {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,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; +HEATERS_CURRENT HeaterId2CurrentId[HEATER_TYPE_MAX_HEATERS] = {NUM_OF_CURRENT_HEATERS,HEATER_DRYER_CURRENT_1,HEATER_DRYER_CURRENT_2,HEATER_HEAD_CURRENT_ZONE_1,HEATER_HEAD_CURRENT_ZONE_2,HEATER_HEAD_CURRENT_ZONE_3,HEATER_HEAD_CURRENT_ZONE_4,HEATER_HEAD_CURRENT_ZONE_5_6,HEATER_HEAD_CURRENT_ZONE_5_6,HEATER_MIXCHIP_CURRENT}; +#endif uint32_t DryerInternalPT100Id = DRYER_AIR_PT100; bool HeatersRestart = false; -bool HeaterMaxTempFlag[MAX_HEATERS_NUM] = {false,false,false,false,false,false,false,false,false,false}; -bool HeaterMinTempFlag[MAX_HEATERS_NUM] = {true,true,true,true,true,true,true,true,true,true}; +bool HeaterMaxTempFlag[HEATER_TYPE_MAX_HEATERS] = {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false}; +bool HeaterMinTempFlag[HEATER_TYPE_MAX_HEATERS] = {true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true}; uint32_t OutputProportionalSingleStep = 0; //A/C Heaters step size from one decision point to another - in cpu clocks. 120000 = 1 millisecod -uint32_t Heater_timerBase = TIMER2_BASE; //Timer handle +uint32_t Heater_timerBase = TIMER2_BASE; //Timer handle uint32_t OutputProportionalCycleTime = 0; //A/C Heaters Cycle time in milliseconds - one for all heaters char TimeSliceAllocation[MAX_TIMESLICES] = {0xFF}; -int DCTimeSliceAllocation[MAX_HEATERS_NUM] = {0}; +int DCTimeSliceAllocation[HEATER_TYPE_MAX_HEATERS] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; bool TimerActivated = false; char ACheatstr[100]; -Mailbox_Handle HeatersControlMsgQ = NULL; +Mailbox_Handle HeatersControlMsgQ = NULL; //bool InitialHeating = true; -//bool DCInitialHeating[MAX_HEATERS_NUM] = {true}; -bool HeaterReady[MAX_HEATERS_NUM] = {true}; -bool HeaterAtTemp[MAX_HEATERS_NUM] = {true}; -uint32_t HeaterPreviousRead[MAX_HEATERS_NUM] = {0,0,0,0,0,0,0,0,0,0}; //A/C Heaters Cycle time in milliseconds - one for all heaters -EventType HeaterEventType[MAX_HEATERS_NUM] = {EVENT_TYPE__DRYER_ZONE_1_OVERTEMPERATURE,EVENT_TYPE__DRYER_ZONE_2_OVERTEMPERATURE,EVENT_TYPE__DRYER_ZONE_1_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_1_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_2_OVERTEMPERATURE, - EVENT_TYPE__DYEING_HEAD_ZONE_3_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_4_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_5_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_6_OVERTEMPERATURE, - EVENT_TYPE__MIXER_OVERTEMPERATURE}; -EventType HeaterUnderEventType[MAX_HEATERS_NUM] = {EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_A,EVENT_TYPE__DRYER_ZONE_2_UNDERTEMPERATURE_A,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_A,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_A,EVENT_TYPE__DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_A, +//bool DCInitialHeating[HEATER_TYPE_MAX_HEATERS] = {true}; +bool HeaterReady[HEATER_TYPE_MAX_HEATERS] = {true}; +bool HeaterAtTemp[HEATER_TYPE_MAX_HEATERS] = {true}; +uint32_t HeaterPreviousRead[HEATER_TYPE_MAX_HEATERS] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //A/C Heaters Cycle time in milliseconds - one for all heaters +EventType HeaterEventType[HEATER_TYPE_MAX_HEATERS] = {EVENT_TYPE__DRYER_ZONE_1_OVERTEMPERATURE,EVENT_TYPE__DRYER_ZONE_2_OVERTEMPERATURE,EVENT_TYPE__DRYER_ZONE_1_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_1_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_2_OVERTEMPERATURE, + EVENT_TYPE__DYEING_HEAD_ZONE_3_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_4_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_5_OVERTEMPERATURE,EVENT_TYPE__DYEING_HEAD_ZONE_6_OVERTEMPERATURE, + EVENT_TYPE__MIXER_OVERTEMPERATURE,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None}; +EventType HeaterUnderEventType[HEATER_TYPE_MAX_HEATERS] = {EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_A,EVENT_TYPE__DRYER_ZONE_2_UNDERTEMPERATURE_A,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_A,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_A,EVENT_TYPE__DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_A, EVENT_TYPE__DYEING_HEAD_ZONE_3_UNDERTEMPERATURE_A,EVENT_TYPE__DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_A,EVENT_TYPE__DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_A,EVENT_TYPE__DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_A, - EVENT_TYPE__MIXER_UNDERTEMPERATURE_A}; + EVENT_TYPE__MIXER_UNDERTEMPERATURE_A,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None}; -EventType HeaterUnderEventType_B[MAX_HEATERS_NUM] = {EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_B,EVENT_TYPE__DRYER_ZONE_2_UNDERTEMPERATURE_B,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_B,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_B,EVENT_TYPE__DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_B, +EventType HeaterUnderEventType_B[HEATER_TYPE_MAX_HEATERS] = {EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_B,EVENT_TYPE__DRYER_ZONE_2_UNDERTEMPERATURE_B,EVENT_TYPE__DRYER_ZONE_1_UNDERTEMPERATURE_B,EVENT_TYPE__DYEING_HEAD_ZONE_1_UNDERTEMPERATURE_B,EVENT_TYPE__DYEING_HEAD_ZONE_2_UNDERTEMPERATURE_B, EVENT_TYPE__DYEING_HEAD_ZONE_3_UNDERTEMPERATURE_B,EVENT_TYPE__DYEING_HEAD_ZONE_4_UNDERTEMPERATURE_B,EVENT_TYPE__DYEING_HEAD_ZONE_5_UNDERTEMPERATURE_B,EVENT_TYPE__DYEING_HEAD_ZONE_6_UNDERTEMPERATURE_B, - EVENT_TYPE__MIXER_UNDERTEMPERATURE_B}; + EVENT_TYPE__MIXER_UNDERTEMPERATURE_B,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None,EVENT_TYPE__None}; -int HeaterDisasterCounter[HARDWARE_PID_CONTROL_TYPE__MixerHeater+1] = {0,0,0,0,0,0,0,0,0,0}; +int HeaterDisasterCounter[HEATER_TYPE_MAX_HEATERS] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; #define DISASTER_COUNTER_LIMIT 10 /******************** FUNCTIONS ********************************************/ @@ -155,7 +166,7 @@ void HeatersControlInit(void) ROM_IntEnable(INT_TIMER2A); ROM_TimerIntEnable(Heater_timerBase, TIMER_TIMA_TIMEOUT); - for (i = 0; i < MAX_HEATERS_NUM; i++) + for (i = 0; i < HEATER_TYPE_MAX_HEATERS; i++) { //DCInitialHeating[i] = true; HeaterReady[i] = true; @@ -206,9 +217,11 @@ uint32_t InternalId2PT100Id[MAX_INTERNAL_ALARMS] = {TEMP_SENSE_AN_ENCLOSURETEMP1 int32_t InternalOverHeatCounter [MAX_INTERNAL_ALARMS] = {0,0,0}; bool InternalAlarmActive[MAX_INTERNAL_ALARMS] = {false,false,false}; uint32_t ControlIdtoInternalId[MAX_INTERNAL_ALARMS] = {0xFF,0xFF,0xFF}; +EventType InternalTempEventType[MAX_INTERNAL_ALARMS] = {EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE,EVENT_TYPE__ELECTRICAL_CABINET_OVERTEMPERATURE,EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE_2}; + uint32_t HeatersTestInternalAlarmsCBFunction(uint32_t IfIndex, uint32_t readValue) { - int index=MAX_HEATERS_NUM; + int index=HEATER_TYPE_MAX_HEATERS; if (IfIndex>>8 != IfTypeHeaters) { @@ -223,7 +236,7 @@ uint32_t HeatersTestInternalAlarmsCBFunction(uint32_t IfIndex, uint32_t readValu } readValue = MillisecGetTemperatures(InternalId2PT100Id[index]); - if((MINIMUM_HEATER_READ*100>=readValue)||(MAXIMUM_HEATER_READ*100 < readValue)) + if((MINIMUM_HEATER_READ*100>=readValue)||(270.00*100 < readValue)) { //ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HeaterId,RpError, 0,0); return ERROR; @@ -240,7 +253,7 @@ uint32_t HeatersTestInternalAlarmsCBFunction(uint32_t IfIndex, uint32_t readValu InternalAlarmActive[index] = true; ReportWithPackageFilter(HeatersFilter,"Internal Over the max temperature, turned off",__FILE__,index,readValue,RpWarning, 0,0); - AlarmHandlingSetAlarm(EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE, true); + AlarmHandlingSetAlarm(InternalTempEventType[index], true); } } } @@ -254,7 +267,7 @@ uint32_t HeatersTestInternalAlarmsCBFunction(uint32_t IfIndex, uint32_t readValu InternalAlarmActive[index] = true; ReportWithPackageFilter(HeatersFilter,"Internal Over the max temperature, turned off",__FILE__,index,readValue,RpWarning, 0,0); - AlarmHandlingSetAlarm(EVENT_TYPE__MACHINE_INTERNAL_OVERTEMPERATURE, false); + AlarmHandlingSetAlarm(InternalTempEventType[index], false); } } @@ -276,7 +289,7 @@ void HeatersControlStart(void) { if (ControlIdtoInternalId [i] == 0xFF) { - ControlIdtoInternalId [i] = AddControlCallback( HeatersTestInternalAlarmsCBFunction, eOneSecond,MillisecGetTemperatures,(IfTypeHeaters*0x100+i),0,0); + ControlIdtoInternalId [i] = AddControlCallback("Internal Heaters", HeatersTestInternalAlarmsCBFunction, eOneSecond,MillisecGetTemperatures,(IfTypeHeaters*0x100+i),0,0); } } } @@ -284,7 +297,7 @@ void HeatersControlStart(void) } uint32_t LoadHeaterSetPoint(HeaterType HeaterType) { - if (HeaterType >= MAX_HEATERS_NUM) + if (HeaterType >= HEATER_TYPE_MAX_HEATERS) { ReportWithPackageFilter(HeatersFilter,"Wrong Heater Id",__FILE__,__LINE__,HeaterType,RpError, 0,0); return 0; @@ -310,22 +323,24 @@ void LoadHeaterState(HeaterType HeaterType,HeaterState *HeaterState) HeaterState->isrampingup = 1-HeaterAtTemp[HeaterId]; HeaterState->has_isinsetpoint = true; HeaterState->isinsetpoint = HeaterReady[HeaterId]; - if (HeaterId == HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain) + if (HeaterId == HEATER_TYPE__DryerMainHeater) { - HeaterState->setpoint = HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain].outputproportionalpowerlimit; + HeaterState->setpoint = HeaterControl[HEATER_TYPE__DryerMainHeater].outputproportionalpowerlimit; //HeaterState->isrampingup = InitialHeating; } - if (HeaterId == HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary) + if (HeaterId == HEATER_TYPE__DryerSecondaryHeater) { - HeaterState->setpoint = HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary].outputproportionalpowerlimit; + HeaterState->setpoint = HeaterControl[HEATER_TYPE__DryerSecondaryHeater].outputproportionalpowerlimit; //HeaterState->isrampingup = InitialHeating; } return; } -uint32_t HeatersSingleHeaterEnd(HardwarePidControlType HeaterId) +uint32_t HeatersSingleHeaterEnd(int HeaterId) { int status = OK; - ReportWithPackageFilter(HeatersFilter,"HeatersSingleHeaterEnd ", __FILE__,__LINE__,HeaterId, RpMessage, 0, 0); + assert(HeaterId < HEATER_TYPE_MAX_HEATERS); + //HEATER_TYPE_ENUM HeaterId = HeaterPidtoHeaterId(HeaterPID_Id); + ReportWithPackageFilter(HeatersFilter,"HeatersSingleHeaterEnd ", __FILE__,__LINE__,HeaterId, RpMessage, HeaterPIDConfig[HeaterId].m_SetParam, 0); if (HeaterId >= MAX_AC_HEATERS) //DC Heaters { if (ControlIdtoHeaterId [HeaterId]!=0xFF) @@ -341,6 +356,7 @@ uint32_t HeatersSingleHeaterEnd(HardwarePidControlType HeaterId) HeaterRecalculateHeaterParams(HeaterId, 0); DeActivateHeater(HeaterId); HeaterPIDConfig[HeaterId].m_SetParam = 0; + HeaterCmd[HeaterId].targettemperatue = 0; HeaterReady[HeaterId] = true; HeaterAtTemp[HeaterId] = true; Disable_Reading_Heaters_Current(HeaterId2CurrentId[HeaterId]); @@ -357,8 +373,8 @@ uint32_t HeatersSingleHeaterEnd(HardwarePidControlType HeaterId) status |= RemoveControlCallback(ControlIdtoMaxHeaterId [HeaterId], DcHeaterMaxTempCBFunction); ControlIdtoMaxHeaterId [HeaterId]=0xFF; } - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,0); - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,0); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerMainHeater,0); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerSecondaryHeater,0); if (MainDryerHeaterMaxTempControl) { status |=RemoveControlCallback(MainDryerHeaterMaxTempControl ,HeaterMaxTempCBFunction); @@ -369,11 +385,12 @@ uint32_t HeatersSingleHeaterEnd(HardwarePidControlType HeaterId) status |=RemoveControlCallback(SecondDryerHeaterMaxTempControl ,HeaterMaxTempCBFunction); SecondDryerHeaterMaxTempControl=0xFF; } - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); - Disable_Reading_Heaters_Current(HeaterId2CurrentId[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]); - Disable_Reading_Heaters_Current(HeaterId2CurrentId[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]); + DeActivateHeater(HEATER_TYPE__DryerMainHeater); + DeActivateHeater(HEATER_TYPE__DryerSecondaryHeater); + Disable_Reading_Heaters_Current(HeaterId2CurrentId[HEATER_TYPE__DryerMainHeater]); + Disable_Reading_Heaters_Current(HeaterId2CurrentId[HEATER_TYPE__DryerSecondaryHeater]); HeaterPIDConfig[HeaterId].m_SetParam = 0; + HeaterCmd[HeaterId].targettemperatue = 0; HeaterReady[HeaterId] = true; HeaterAtTemp[HeaterId] = true; } @@ -391,9 +408,10 @@ uint32_t HeatersEnd(void) HardwarePidControlType i; uint32_t status = OK; HeatersControlStop(); - for (i=0;i<MAX_HEATERS_NUM;i++) + for (i=0;i<HEATER_TYPE_MAX_HEATERS;i++) { - status = HeatersSingleHeaterEnd(i); + if(HeaterIdtoHeaterpid[i]!=HEATER_TYPE_MAX_HEATERS) + status = HeatersSingleHeaterEnd(i); } return status; @@ -442,11 +460,13 @@ int GetFilteredHeaterRead(int HeaterId) * called by: Communication from host * initialized all global data *************************************************************************************/ -bool HeaterRestarted[MAX_HEATERS_NUM] = {false,false,false,false,false,false,false,false,false,false}; -uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature) +bool HeaterRestarted[HEATER_TYPE_MAX_HEATERS] = {false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false}; +uint32_t HeaterCommandRequestMessage(int HeaterNum, bool OnOff, int Temperature) { //uint32_t status = NOT_SUPPORTED; //MessageContainer responseContainer; + int HeaterId = getHeaterId(HeaterNum); + if (HeaterControl[HeaterId].configured == false) { ReportWithPackageFilter(HeatersFilter,"HeaterControl not configured",__FILE__,__LINE__,HeaterId,RpError, 0,0); @@ -454,7 +474,7 @@ uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature) } // Turn_the_Blower_On(); - if (HeaterId< MAX_HEATERS_NUM) + if (HeaterId< HEATER_TYPE_MAX_HEATERS) { if (HeaterControl[HeaterId].id != HeaterId) // heater configuration missing { @@ -465,10 +485,6 @@ uint32_t HeaterCommandRequestMessage(int HeaterId, bool OnOff, int Temperature) HeaterCmd[HeaterId].command = OnOff; HeaterCmd[HeaterId].targettemperatue = Temperature*100; } -#ifdef DEMO_TEMPERATURE - if (OnOff == false) - HeaterTestActive[HeaterId] = false; -#endif bool HeaterState; if ( ControlIdtoHeaterId [HeaterId] == 0xFF) { @@ -535,17 +551,17 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue) { if (ControlIdtoHeaterId [HeaterId] == 0xFF) { - ControlIdtoHeaterId [HeaterId] = AddControlCallback( HeaterControlCBFunction, Frequency/*eOneSecond*/,MillisecGetTemperatures,(IfTypeHeaters*0x100+HeaterId),DryerInternalPT100Id,0); + ControlIdtoHeaterId [HeaterId] = AddControlCallback("HeatersControl", HeaterControlCBFunction, Frequency/*eOneSecond*/,MillisecGetTemperatures,(IfTypeHeaters*0x100+HeaterId),DryerInternalPT100Id,0); //HeaterPreviousRead[HeaterId] = MillisecGetTemperatures(DryerInternalPT100Id); HeaterPreviousRead[HeaterId] = MillisecGetTemperatures(HeaterId2PT100Id[HeaterId]);// //ReportWithPackageFilter(HeatersFilter,"PrepareHeater AC Read", __FILE__,HeaterId, SetTemperatue, RpWarning,HeaterPreviousRead[HeaterId], 0); - HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] = MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]);//MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]); - HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary] = MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]);// = MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]); - if((HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]<=MINIMUM_HEATER_READ*100)||(MAXIMUM_HEATER_READ*100<=HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain])|| - (HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]<=MINIMUM_HEATER_READ*100)||(MAXIMUM_HEATER_READ*100<=HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary])) + HeaterPreviousRead[HEATER_TYPE__DryerMainHeater] = MillisecGetTemperatures(HeaterId2PT100Id[HEATER_TYPE__DryerMainHeater]);//MillisecGetTemperatures(HeaterId2PT100Id[HEATER_TYPE__DryerMainHeater]); + HeaterPreviousRead[HEATER_TYPE__DryerSecondaryHeater] = MillisecGetTemperatures(HeaterId2PT100Id[HEATER_TYPE__DryerSecondaryHeater]);// = MillisecGetTemperatures(HeaterId2PT100Id[HEATER_TYPE__DryerSecondaryHeater]); + if((HeaterPreviousRead[HEATER_TYPE__DryerMainHeater]<=MINIMUM_HEATER_READ*100)||(MAXIMUM_HEATER_READ*100<=HeaterPreviousRead[HEATER_TYPE__DryerMainHeater])|| + (HeaterPreviousRead[HEATER_TYPE__DryerSecondaryHeater]<=MINIMUM_HEATER_READ*100)||(MAXIMUM_HEATER_READ*100<=HeaterPreviousRead[HEATER_TYPE__DryerSecondaryHeater])) { - ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,RpError, HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain],0); - ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,RpError, HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary],0); + ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HEATER_TYPE__DryerMainHeater,RpError, HeaterPreviousRead[HEATER_TYPE__DryerMainHeater],0); + ReportWithPackageFilter(HeatersFilter,"PT100 not working properly",__FILE__,__LINE__,HEATER_TYPE__DryerSecondaryHeater,RpError, HeaterPreviousRead[HEATER_TYPE__DryerSecondaryHeater],0); if (ControlIdtoMaxHeaterId [HeaterId] != 0xFF) { RemoveControlCallback(ControlIdtoMaxHeaterId [HeaterId], DcHeaterMaxTempCBFunction); @@ -558,6 +574,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(HeaterEventType[HeaterId], true); return; @@ -569,8 +586,8 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue) ReportWithPackageFilter(HeatersFilter,"PrepareACHeater control still running",__FILE__,HeaterId,ControlIdtoHeaterId [HeaterId],RpError, HeaterCmd[HeaterId].targettemperatue,0); HeaterPreviousRead[HeaterId] = MillisecGetTemperatures(HeaterId2PT100Id[HeaterId]);// //ReportWithPackageFilter(HeatersFilter,"PrepareHeater AC Read", __FILE__,HeaterId, SetTemperatue, RpWarning,HeaterPreviousRead[HeaterId], 0); - HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] = MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]);//MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]); - HeaterPreviousRead[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary] = MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]);// = MillisecGetTemperatures(HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]); + HeaterPreviousRead[HEATER_TYPE__DryerMainHeater] = MillisecGetTemperatures(HeaterId2PT100Id[HEATER_TYPE__DryerMainHeater]);//MillisecGetTemperatures(HeaterId2PT100Id[HEATER_TYPE__DryerMainHeater]); + HeaterPreviousRead[HEATER_TYPE__DryerSecondaryHeater] = MillisecGetTemperatures(HeaterId2PT100Id[HEATER_TYPE__DryerSecondaryHeater]);// = MillisecGetTemperatures(HeaterId2PT100Id[HEATER_TYPE__DryerSecondaryHeater]); } //turn all alarms off @@ -579,17 +596,17 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue) AlarmHandlingSetAlarm(HeaterEventType[HeaterId], false); if (ControlIdtoMaxHeaterId [HeaterId] == 0xFF) - ControlIdtoMaxHeaterId [HeaterId] = AddControlCallback( DcHeaterMaxTempCBFunction, eOneSecond,MillisecGetTemperatures,(IfTypeHeaters*0x100+HeaterId),HeaterId2PT100Id[HeaterId],0); + ControlIdtoMaxHeaterId [HeaterId] = AddControlCallback("HeatersMax", DcHeaterMaxTempCBFunction, eOneSecond,MillisecGetTemperatures,(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]); + Enable_Reading_Heaters_Current(HeaterId2CurrentId[HEATER_TYPE__DryerMainHeater]); + Enable_Reading_Heaters_Current(HeaterId2CurrentId[HEATER_TYPE__DryerSecondaryHeater]); - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, 0); - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, 0); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerMainHeater, 0); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerSecondaryHeater, 0); if (MainDryerHeaterMaxTempControl == 0xFF) - MainDryerHeaterMaxTempControl = AddControlCallback( HeaterMaxTempCBFunction, eOneSecond,MillisecGetTemperatures,(IfTypeHeaters*0x100+HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain),HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain],0); + MainDryerHeaterMaxTempControl = AddControlCallback("HeatersMax", HeaterMaxTempCBFunction, eOneSecond,MillisecGetTemperatures,(IfTypeHeaters*0x100+HEATER_TYPE__DryerMainHeater),HeaterId2PT100Id[HEATER_TYPE__DryerMainHeater],0); if (SecondDryerHeaterMaxTempControl == 0xFF) - SecondDryerHeaterMaxTempControl = AddControlCallback( HeaterMaxTempCBFunction, eOneSecond,MillisecGetTemperatures,(IfTypeHeaters*0x100+HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary),HeaterId2PT100Id[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary],0); + SecondDryerHeaterMaxTempControl = AddControlCallback("HeatersMax", HeaterMaxTempCBFunction, eOneSecond,MillisecGetTemperatures,(IfTypeHeaters*0x100+HEATER_TYPE__DryerSecondaryHeater),HeaterId2PT100Id[HEATER_TYPE__DryerSecondaryHeater],0); //InitialHeating = true; HeaterReady[HeaterId] = false; HeaterAtTemp[HeaterId] = false; @@ -616,7 +633,7 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue) int PrepareDCHeater(int HeaterId, uint32_t Frequency, uint32_t SetTemperatue) { if (DisasterControlId == 0xFF) - DisasterControlId = AddControlCallback( HeatersDisasterControl, eOneSecond,TemplateDataReadCBFunction,0,0, 0); + DisasterControlId = AddControlCallback("Heaters Disaster", HeatersDisasterControl, eOneSecond,TemplateDataReadCBFunction,0,0, 0); HeaterPreviousRead[HeaterId] = MillisecGetTemperatures(HeaterId2PT100Id[HeaterId]);//MillisecGetTemperatures(HeaterId2PT100Id[HeaterId]); if((HeaterPreviousRead[HeaterId]<=MINIMUM_HEATER_READ*100)||(MAXIMUM_HEATER_READ*100<=HeaterPreviousRead[HeaterId])) @@ -639,7 +656,7 @@ int PrepareDCHeater(int HeaterId, uint32_t Frequency, uint32_t SetTemperatue) return ERROR; } if (ControlIdtoHeaterId [HeaterId] == 0xFF) - ControlIdtoHeaterId [HeaterId] = AddControlCallback( DCHeaterControlCBFunction, Frequency/*eOneSecond*/,MillisecGetTemperatures,(IfTypeHeaters*0x100+HeaterId),HeaterId2PT100Id[HeaterId],0); + ControlIdtoHeaterId [HeaterId] = AddControlCallback("DCHeatersControl", DCHeaterControlCBFunction, Frequency/*eOneSecond*/,MillisecGetTemperatures,(IfTypeHeaters*0x100+HeaterId),HeaterId2PT100Id[HeaterId],0); //HeaterPIDConfig[HeaterId].m_params.dt *=10; //DCInitialHeating[HeaterId] = true; HeaterReady[HeaterId] = false; @@ -655,7 +672,7 @@ int PrepareDCHeater(int HeaterId, uint32_t Frequency, uint32_t SetTemperatue) //ReportWithPackageFilter(HeatersFilter,"PrepareHeater Read", __FILE__,HeaterId, SetTemperatue, RpWarning,HeaterPreviousRead[HeaterId], 0); if (ControlIdtoMaxHeaterId [HeaterId] == 0xFF) - ControlIdtoMaxHeaterId [HeaterId] = AddControlCallback( DcHeaterMaxTempCBFunction, eOneSecond,MillisecGetTemperatures,(IfTypeHeaters*0x100+HeaterId),HeaterId2PT100Id[HeaterId],0); + ControlIdtoMaxHeaterId [HeaterId] = AddControlCallback("DcHeatersMax", DcHeaterMaxTempCBFunction, eOneSecond,MillisecGetTemperatures,(IfTypeHeaters*0x100+HeaterId),HeaterId2PT100Id[HeaterId],0); return OK; } @@ -668,7 +685,7 @@ uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue) { double temp ; CTRL_TIMING_ENUM Frequency = eOneSecond; - if(HeaterId >= MAX_HEATERS_NUM) + if(HeaterId >= HEATER_TYPE_MAX_HEATERS) { ReportWithPackageFilter(HeatersFilter,"HeaterId too high",__FILE__,__LINE__,HeaterId,RpError, 0,0); return ERROR; @@ -697,7 +714,7 @@ uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue) int band = 10; if (HeaterControl[HeaterId].outputproportionalband) { - band = HeaterControl[HeaterId].outputproportionalband; + band = HeaterControl[HeaterId].outputproportionalband+2; //sometimes after PID is started the temp is falling a little bit. we want to avoid an alarm } temp = SetTemperatue*(100+band); //temp = SetTemperatue*110.0; @@ -714,12 +731,13 @@ uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue) } if (HeaterId >= MAX_AC_HEATERS) //DC Heaters { - ReportWithPackageFilter(HeatersFilter,"call PrepareDCHeater",__FILE__,HeaterId,Frequency,RpWarning,HeaterPIDConfig[HeaterId].m_params.dt, 0); + ReportWithPackageFilter(HeatersFilter,"call PrepareDCHeater",__FILE__,HeaterId,SetTemperatue,RpWarning,HeaterPreviousRead[HeaterId], 0); if (PrepareDCHeater(HeaterId,Frequency,SetTemperatue)!=OK) return ERROR; } - else if (HeaterId == HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature) //AC Heaters + else if (HeaterId == HEATER_TYPE__DryerAirHeater) //AC Heaters { + ReportWithPackageFilter(HeatersFilter,"call PrepareACHeater",__FILE__,HeaterId,SetTemperatue,RpWarning,HeaterPreviousRead[HeaterId], 0); PrepareACHeater(HeaterId,Frequency,SetTemperatue); } return OK; @@ -727,7 +745,7 @@ uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue) bool HeaterCheckReady(void) { int i; - for (i=0;i<MAX_HEATERS_NUM;i++) + for (i=0;i<HEATER_TYPE_MAX_HEATERS;i++) { if (HeaterAtTemp[i] == false) { @@ -743,7 +761,7 @@ void HeaterPrepareReady(void) { return; } - for (i=0;i<MAX_HEATERS_NUM;i++) + for (i=0;i<HEATER_TYPE_MAX_HEATERS;i++) { if (HeaterAtTemp[i] == false) { @@ -760,28 +778,28 @@ void HeaterPrepareReady(void) */ bool HeaterGetOverTemperatureState(uint8_t HeaterId) { - if (HeaterId > MAX_HEATERS_NUM) return false; + if (HeaterId > HEATER_TYPE_MAX_HEATERS) return false; return HeaterMaxTempFlag[HeaterId]; } uint32_t MainPT100Read = 0,SecondaryPT100Read = 0; -#ifndef max - #define max(a,b) ((a) > (b) ? (a) : (b)) -#endif -#ifndef min - #define min(a,b) ((a) < (b) ? (a) : (b)) -#endif +int MinuteCallerMaxAc = 0,MinuteCallerMaxDc = 0,MinuteCallerAc = 0,MinuteCallerDc = 0; uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) { - int index=MAX_HEATERS_NUM; + int index=HEATER_TYPE_MAX_HEATERS; int32_t MaxreadValue; + if (MinuteCallerMaxAc++ >= 60) + { + MinuteCallerMaxAc = 0; + ReportWithPackageFilter(HeatersFilter, "MinuteCallerMaxAc",__FILE__,__LINE__,IfIndex,RpError, readValue,0); + } if (IfIndex>>8 != IfTypeHeaters) { ReportWithPackageFilter(HeatersFilter, "Wrong Interface type",__FILE__,__LINE__,IfIndex,RpError, 0,0); return 0xFFFFFFFF; } index = IfIndex&0xFF; - if ((index != HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain)&&(index != HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary)) //AC Heaters + if ((index != HEATER_TYPE__DryerMainHeater)&&(index != HEATER_TYPE__DryerSecondaryHeater)) //AC Heaters { ReportWithPackageFilter(HeatersFilter, "Wrong Interface ",__FILE__,__LINE__,IfIndex,RpError, 0,0); return 0xFFFFFFFF; @@ -792,18 +810,18 @@ uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) { ReportWithPackageFilter(HeatersFilter,"Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); HeaterMaxTempFlag[index] = true; - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,0); - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,0); + DeActivateHeater(HEATER_TYPE__DryerMainHeater); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerMainHeater,0); + DeActivateHeater(HEATER_TYPE__DryerSecondaryHeater); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerSecondaryHeater,0); return ERROR; } HeaterPreviousRead[index] = readValue; - if (index == HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain) + if (index == HEATER_TYPE__DryerMainHeater) { MainPT100Read = readValue; } - if (index == HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary) + if (index == HEATER_TYPE__DryerSecondaryHeater) { SecondaryPT100Read = readValue; } @@ -817,12 +835,12 @@ uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) //LOG_ERROR (MaxreadValue/100, "Heater Over the max temperature, turned off"); //ReportWithPackageFilter(HeatersFilter," AC Heater Over the max temperature, turned off",__FILE__,index,HeaterReady[index],RpWarning,HeaterControl[index].sensormaxvalue, 0); } - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); + DeActivateHeater(HEATER_TYPE__DryerMainHeater); HeaterMaxTempFlag[index] = true; - //HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,0); - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); - //HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary] = true; - //HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,0); + //HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerMainHeater,0); + DeActivateHeater(HEATER_TYPE__DryerSecondaryHeater); + //HeaterMaxTempFlag[HEATER_TYPE__DryerSecondaryHeater] = true; + //HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerSecondaryHeater,0); return OK; } if (MaxreadValue <= (HeaterControl[index].sensormaxvalue-HeaterControl[index].sensorminvalue)) //was MinreadValue @@ -831,15 +849,15 @@ uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) { if (HeaterMaxTempFlag[index] == true) { - /* ActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); - if (HeaterReady[HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature]==false) + /* ActivateHeater(HEATER_TYPE__DryerMainHeater); + if (HeaterReady[HEATER_TYPE__DryerAirHeater]==false) { - ActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); + ActivateHeater(HEATER_TYPE__DryerSecondaryHeater); }*/ //ReportWithPackageFilter(HeatersFilter, "Heater Cooled Off max temperature, turned on",__FILE__,__LINE__,(MinreadValue/100),RpError, 0,0); } - HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] = false; - HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary] = false; + HeaterMaxTempFlag[HEATER_TYPE__DryerMainHeater] = false; + HeaterMaxTempFlag[HEATER_TYPE__DryerSecondaryHeater] = false; } return OK; } @@ -847,7 +865,12 @@ uint32_t HeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) } uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) { - int index=MAX_HEATERS_NUM; + int index=HEATER_TYPE_MAX_HEATERS; + if (MinuteCallerMaxDc++ >= 60*10) + { + MinuteCallerMaxDc = 0; + ReportWithPackageFilter(HeatersFilter, "MinuteCallerMaxDc",__FILE__,__LINE__,IfIndex,RpError, readValue,0); + } if (IfIndex>>8 != IfTypeHeaters) { ReportWithPackageFilter(HeatersFilter, "Wrong Interface type",__FILE__,__LINE__,IfIndex,RpError, 0,0); @@ -879,7 +902,8 @@ uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) HeaterMaxTempFlag[index] = true; //ReportWithPackageFilter(HeatersFilter,(MinreadValue/100), "Heater Over the max temperature, turned off"); ReportWithPackageFilter(HeatersFilter,"DC Heater Over the max temperature, turned off",__FILE__,index,HeaterPreviousRead[index],RpWarning, HeaterReady[index],0); - AlarmHandlingSetAlarm(HeaterEventType[index], true); + if (getIdleState() == false) + AlarmHandlingSetAlarm(HeaterEventType[index], true); return OK; } else if ((HeaterPreviousRead[index]) < (HeaterControl[index].sensorminvalue)) @@ -939,26 +963,31 @@ uint32_t DcHeaterMaxTempCBFunction(uint32_t IfIndex, uint32_t readValue) } uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) { - int index=MAX_HEATERS_NUM; + int index=HEATER_TYPE_MAX_HEATERS; //uint8_t len = 0; + if (MinuteCallerAc++ >= 60) + { + MinuteCallerAc = 0; + ReportWithPackageFilter(HeatersFilter, "MinuteCallerAc",__FILE__,__LINE__,IfIndex,RpError, readValue,0); + } if (IfIndex>>8 != IfTypeHeaters) { ReportWithPackageFilter(HeatersFilter, "Wrong Interface type",__FILE__,__LINE__,IfIndex,RpError, 0,0); return ERROR; } index = IfIndex&0xFF; - if (index != HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature) //AC Heaters + if (index != HEATER_TYPE__DryerAirHeater) //AC Heaters { ReportWithPackageFilter(HeatersFilter, "Wrong Interface ",__FILE__,__LINE__,IfIndex,RpError, 0,0); return ERROR; } if (HeaterCmd[index].targettemperatue == 0) { - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); + DeActivateHeater(HEATER_TYPE__DryerSecondaryHeater); + DeActivateHeater(HEATER_TYPE__DryerMainHeater); //Heaters OFF until coming into the proportional band - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,0); - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,0); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerMainHeater,0); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerSecondaryHeater,0); //ReportWithPackageFilter(HeatersFilter, "unconfigured",__FILE__,__LINE__,0,RpError, 0,0); return ERROR; } @@ -967,20 +996,20 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) ReportWithPackageFilter(HeatersFilter,"AC Temperature Spike",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); if (readValue > HeaterCmd[index].targettemperatue) { - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,0); - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,0); + DeActivateHeater(HEATER_TYPE__DryerSecondaryHeater); + DeActivateHeater(HEATER_TYPE__DryerMainHeater); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerMainHeater,0); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerSecondaryHeater,0); } return ERROR; } if (HeaterDisasterCounter[index] >= DISASTER_COUNTER_LIMIT) { ReportWithPackageFilter(HeatersFilter,"AC Temperature disaster",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,0); - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,0); + DeActivateHeater(HEATER_TYPE__DryerSecondaryHeater); + DeActivateHeater(HEATER_TYPE__DryerMainHeater); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerMainHeater,0); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerSecondaryHeater,0); return ERROR; } HeaterPreviousRead[index] = readValue; @@ -994,11 +1023,11 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) { if (readValue > ((HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100)) { - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); + DeActivateHeater(HEATER_TYPE__DryerSecondaryHeater); + DeActivateHeater(HEATER_TYPE__DryerMainHeater); //Heaters OFF until coming into the proportional band - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,0); - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,0); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerMainHeater,0); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerSecondaryHeater,0); ReportWithPackageFilter(HeatersFilter, "AC OverHeat - turned off",__FILE__,readValue,HeaterReady[index],RpError, HeaterAtTemp[index],0); return OK; } @@ -1006,12 +1035,12 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) //if (readValue < (/*HeaterCmd[index].targettemperatue * AcHeatersLoweroperationLimit/1000*/HeaterCmd[index].targettemperatue-800)) { //ReportWithPackageFilter(HeatersFilter,"AC Activating",__FILE__,index,HeaterPreviousRead[index],RpWarning,readValue, index); - if ((HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary] == false)&&(HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] == false)) + if ((HeaterMaxTempFlag[HEATER_TYPE__DryerSecondaryHeater] == false)&&(HeaterMaxTempFlag[HEATER_TYPE__DryerMainHeater] == false)) { - ActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); - ActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,100); - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,100); + ActivateHeater(HEATER_TYPE__DryerSecondaryHeater); + ActivateHeater(HEATER_TYPE__DryerMainHeater); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerMainHeater,100); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerSecondaryHeater,100); } return OK; } @@ -1021,8 +1050,8 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) ////////////////// ReportWithPackageFilter(HeatersFilter,"AC Turn Off secondary",__FILE__,__LINE__,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); //InitialHeating = false; - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, 0); + DeActivateHeater(HEATER_TYPE__DryerSecondaryHeater); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerSecondaryHeater, 0); HeatersControlStart(); //////////////////////// @@ -1042,8 +1071,8 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) { //InitialHeating = false; ReportWithPackageFilter(HeatersFilter,"AC PID Activating",__FILE__,__LINE__,readValue,RpWarning,(HeaterCmd[index].targettemperatue), 0); - DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary, 0); + DeActivateHeater(HEATER_TYPE__DryerSecondaryHeater); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerSecondaryHeater, 0); HeatersControlStart(); AlarmHandlingSetAlarm(HeaterUnderEventType[index], false); if (BlowerCfg.enabled == true) @@ -1054,8 +1083,8 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) Control_Voltage_To_Blower(BlowerCfg.voltage); } HeaterReady[index] = true; - Disable_Reading_Heaters_Current(HeaterId2CurrentId[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain]); - Disable_Reading_Heaters_Current(HeaterId2CurrentId[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary]); + Disable_Reading_Heaters_Current(HeaterId2CurrentId[HEATER_TYPE__DryerMainHeater]); + Disable_Reading_Heaters_Current(HeaterId2CurrentId[HEATER_TYPE__DryerSecondaryHeater]); } return OK; @@ -1077,12 +1106,12 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) { if (readValue < ((HeaterCmd[index].targettemperatue * (100-HeaterControl[index].outputproportionalband))/100)) //below proportional band { - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, 100); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerMainHeater, 100); //REPORT_MSG (readValue,"AC HEATER Over temperature"); } else if (readValue > ((HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100)) { - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, 0); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerMainHeater, 0); //REPORT_MSG (readValue,"AC HEATER Under temperature"); } } @@ -1102,28 +1131,20 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) } else { - if (HeaterPIDConfig[index].m_params.IntegralErrorMultiplier == 0) - { - HeaterPIDConfig[index].m_calculatedError = PIDAlgorithmCalculation(HeaterPIDConfig[index].m_SetParam , HeaterPIDConfig[index].m_mesuredParam, - &HeaterPIDConfig[index].m_params, &HeaterPIDConfig[index].m_preError, &HeaterPIDConfig[index].m_integral); - } - else - { - HeaterPIDConfig[index].m_calculatedError = AdvancedPIDAlgorithmCalculation(HeaterPIDConfig[index].m_SetParam , HeaterPIDConfig[index].m_mesuredParam, - &HeaterPIDConfig[index].m_params, &HeaterPIDConfig[index].m_preError, &HeaterPIDConfig[index].m_integral); - } + HeaterPIDConfig[index].m_calculatedError = PIDAlgorithmCalculation(HeaterPIDConfig[index].m_SetParam , HeaterPIDConfig[index].m_mesuredParam, + &HeaterPIDConfig[index].m_params, &HeaterPIDConfig[index].m_preError, &HeaterPIDConfig[index].m_integral); //} // len = usnprintf(ACheatstr, 254, "ACD Id, Temp , Integral, Output{ %d, %d ,%d, %d} ",index,(int)HeaterPIDConfig[index].m_mesuredParam ,(int)HeaterPIDConfig[index].m_integral,(int)HeaterPIDConfig[index].m_calculatedError); // ReportWithPackageFilter(HeatersFilter,logmsg[index],__FILE__,__LINE__,index,RpWarning,index, Counter[index]); // #warning PID is now only proportional (above) // ReportWithPackageFilter(HeatersFilter,ACheatstr,__FILE__,__LINE__,index,RpWarning,readValue, HeaterPIDConfig[index].m_calculatedError); //ReportWithPackageFilter(HeatersFilter,"AC PID",__FILE__,__LINE__,HeaterPIDConfig[index].m_calculatedError/100,RpWarning,readValue, index); - if (HeaterRestarted[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] == true) + if (HeaterRestarted[HEATER_TYPE__DryerMainHeater] == true) { - ReportWithPackageFilter(HeatersFilter,"Restarting same temperature Heater Temp",__FILE__,HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,HeaterPIDConfig[index].m_calculatedError,RpWarning,readValue, 0); - HeaterRestarted[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] = false; + ReportWithPackageFilter(HeatersFilter,"Restarting same temperature Heater Temp",__FILE__,HEATER_TYPE__DryerMainHeater,HeaterPIDConfig[index].m_calculatedError,RpWarning,readValue, 0); + HeaterRestarted[HEATER_TYPE__DryerMainHeater] = false; } - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, (int)(HeaterPIDConfig[index].m_calculatedError/100)); + HeaterRecalculateSharedHeatersParams(HEATER_TYPE__DryerMainHeater, (int)(HeaterPIDConfig[index].m_calculatedError/100)); } } @@ -1135,19 +1156,24 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) * called by: Communication from host * initialized all global data */ -//float error[HARDWARE_PID_CONTROL_TYPE__MixerHeater][100]; -//float integral[HARDWARE_PID_CONTROL_TYPE__MixerHeater][100]; -//float output[HARDWARE_PID_CONTROL_TYPE__MixerHeater][100]; -//int Counter[HARDWARE_PID_CONTROL_TYPE__MixerHeater] = {0,0,0,0,0,0,0}; -//char logmsg[HARDWARE_PID_CONTROL_TYPE__MixerHeater][254]; +//float error[HEATER_TYPE__HeadCoverHeater2][100]; +//float integral[HEATER_TYPE__HeadCoverHeater2][100]; +//float output[HEATER_TYPE__HeadCoverHeater2][100]; +//int Counter[HEATER_TYPE__HeadCoverHeater2] = {0,0,0,0,0,0,0}; +//char logmsg[HEATER_TYPE__HeadCoverHeater2][254]; char heatstr[100]; //float temp_calculatedError=0,temp_preError = 0, temp_integral = 0; uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) { - int index=MAX_HEATERS_NUM; + int index=HEATER_TYPE_MAX_HEATERS; //int len; //uint8_t len = 0; + if (MinuteCallerDc++ >= 60*10) + { + MinuteCallerDc = 0; + ReportWithPackageFilter(HeatersFilter, "MinuteCallerDc",__FILE__,__LINE__,IfIndex,RpError, readValue,0); + } if (IfIndex>>8 != IfTypeHeaters) { ReportWithPackageFilter(HeatersFilter, "Wrong Interface type",__FILE__,__LINE__,IfIndex,RpError, 0,0); @@ -1185,7 +1211,7 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) } if (readValue>(HeaterCmd[index].targettemperatue+500)) { - ReportWithPackageFilter(HeatersFilter, "DC OverHeating in progress",__FILE__,readValue,HeaterReady[index],RpError, HeaterAtTemp[index],0); + ReportWithPackageFilter(HeatersFilter, "DC OverHeating in progress",__FILE__,index,readValue,RpError, HeaterReady[index],0); } // check if the read value is within the proportional band @@ -1264,16 +1290,8 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) } else { - if (HeaterPIDConfig[index].m_params.IntegralErrorMultiplier == 0) - { - HeaterPIDConfig[index].m_calculatedError = PIDAlgorithmCalculation(HeaterPIDConfig[index].m_SetParam , HeaterPIDConfig[index].m_mesuredParam, - &HeaterPIDConfig[index].m_params, &HeaterPIDConfig[index].m_preError, &HeaterPIDConfig[index].m_integral); - } - else - { - HeaterPIDConfig[index].m_calculatedError = AdvancedPIDAlgorithmCalculation(HeaterPIDConfig[index].m_SetParam , HeaterPIDConfig[index].m_mesuredParam, - &HeaterPIDConfig[index].m_params, &HeaterPIDConfig[index].m_preError, &HeaterPIDConfig[index].m_integral); - } + HeaterPIDConfig[index].m_calculatedError = PIDAlgorithmCalculation(HeaterPIDConfig[index].m_SetParam , HeaterPIDConfig[index].m_mesuredParam, + &HeaterPIDConfig[index].m_params, &HeaterPIDConfig[index].m_preError, &HeaterPIDConfig[index].m_integral); } // error[index][Counter[index]] = HeaterPIDConfig[index].m_preError; @@ -1333,16 +1351,16 @@ void EightMilliSecondHeatersInterrupt(UArg arg0) return ; } -int HeaterDisasterTemp[HARDWARE_PID_CONTROL_TYPE__MixerHeater+1] = {28000,28000,28000,17000,17000,17000,17000,17000,17000,11000}; -//int HeaterDisasterTemp[HARDWARE_PID_CONTROL_TYPE__MixerHeater+1] = {8100,8100,8200,8100,8100,8100,8100,8100,8100,8100}; +int HeaterDisasterTemp[HEATER_TYPE__HeadCoverHeater2+1] = {27000,27000,27000,17000,17000,17000,17000,17000,17000,11000,17000,17000,17000,17000,17000,17000,17000,17000}; +//int HeaterDisasterTemp[HEATER_TYPE__HeadCoverHeater2+1] = {8100,8100,8200,8100,8100,8100,8100,8100,8100,8100}; uint32_t HeatersDisasterControl(uint32_t x,uint32_t y) { int HeaterId,temperature; - for ( HeaterId = HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature; HeaterId<= HARDWARE_PID_CONTROL_TYPE__MixerHeater;HeaterId++) + for ( HeaterId = HEATER_TYPE__DryerAirHeater; HeaterId<= HEATER_TYPE__HeadCoverHeater2;HeaterId++) { temperature = MillisecGetTemperatures(HeaterId2PT100Id[HeaterId]); - if (temperature>=HeaterDisasterTemp[HeaterId]) + if ((temperature>=HeaterDisasterTemp[HeaterId])&&(temperature<28300)) { ReportWithPackageFilter(HeatersFilter,"Disaster Temperature ",__FILE__,HeaterId,temperature,RpWarning,HeaterDisasterTemp[HeaterId], 0); if (HeaterDisasterCounter[HeaterId]++ >= DISASTER_COUNTER_LIMIT) @@ -1373,63 +1391,63 @@ uint32_t HeatersControlLoop(uint32_t tick) ,SliceCounter,TimeSliceAllocation[SliceCounter],HeatersRestart,NumberOFSlicesInUse); ReportWithPackageFilter(HeatersFilter,str, __FILE__,__LINE__,0, RpMessage, SliceCounter, TimeSliceAllocation[SliceCounter]); */ - if (HeaterDisasterCounter[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] >= DISASTER_COUNTER_LIMIT) + if (HeaterDisasterCounter[HEATER_TYPE__DryerMainHeater] >= DISASTER_COUNTER_LIMIT) { - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); + DeActivateHeater (HEATER_TYPE__DryerMainHeater); + DeActivateHeater (HEATER_TYPE__DryerSecondaryHeater); AcHeaterDisaster = true; } - if (HeaterDisasterCounter[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary] >= DISASTER_COUNTER_LIMIT) + if (HeaterDisasterCounter[HEATER_TYPE__DryerSecondaryHeater] >= DISASTER_COUNTER_LIMIT) { - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); + DeActivateHeater (HEATER_TYPE__DryerMainHeater); + DeActivateHeater (HEATER_TYPE__DryerSecondaryHeater); AcHeaterDisaster = true; } if (AcHeaterDisaster == false) { - if (HeaterReady[HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature] == true) + if (HeaterReady[HEATER_TYPE__DryerAirHeater] == true) { - if (TimeSliceAllocation[SliceCounter] == HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain) + if (TimeSliceAllocation[SliceCounter] == HEATER_TYPE__DryerMainHeater) { - if (HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain] == false) + if (HeaterMaxTempFlag[HEATER_TYPE__DryerMainHeater] == false) { - //If HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain should be active - //Activate HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain - ActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); - //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary - //DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); + //If HEATER_TYPE__DryerMainHeater should be active + //Activate HEATER_TYPE__DryerMainHeater + ActivateHeater (HEATER_TYPE__DryerMainHeater); + //DeActivate HEATER_TYPE__DryerSecondaryHeater + //DeActivateHeater (HEATER_TYPE__DryerSecondaryHeater); } - if (HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary] == false) + if (HeaterMaxTempFlag[HEATER_TYPE__DryerSecondaryHeater] == false) { #warning trial use both heaters in drier - ActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); - //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary - //DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); + ActivateHeater (HEATER_TYPE__DryerSecondaryHeater); + //DeActivate HEATER_TYPE__DryerSecondaryHeater + //DeActivateHeater (HEATER_TYPE__DryerSecondaryHeater); } } - /*else if (TimeSliceAllocation[SliceCounter] == HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary) + /*else if (TimeSliceAllocation[SliceCounter] == HEATER_TYPE__DryerSecondaryHeater) { - if (HeaterMaxTempFlag[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary] == false) + if (HeaterMaxTempFlag[HEATER_TYPE__DryerSecondaryHeater] == false) { - //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); - //If HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary should be active - //Activate HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary - ActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); + //DeActivate HEATER_TYPE__DryerMainHeater + DeActivateHeater (HEATER_TYPE__DryerMainHeater); + //If HEATER_TYPE__DryerSecondaryHeater should be active + //Activate HEATER_TYPE__DryerSecondaryHeater + ActivateHeater (HEATER_TYPE__DryerSecondaryHeater); } }*/ else { - //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain); - //DeActivate HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary - DeActivateHeater (HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary); + //DeActivate HEATER_TYPE__DryerMainHeater + DeActivateHeater (HEATER_TYPE__DryerMainHeater); + //DeActivate HEATER_TYPE__DryerSecondaryHeater + DeActivateHeater (HEATER_TYPE__DryerSecondaryHeater); } } } - for ( DcHeaterId = HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ1; DcHeaterId<= HARDWARE_PID_CONTROL_TYPE__MixerHeater;DcHeaterId++) + for ( DcHeaterId = HEATER_TYPE__HeaterZone1; DcHeaterId<= HEATER_TYPE__HeaterZone12;DcHeaterId++) { if (HeaterDisasterCounter[DcHeaterId] >= DISASTER_COUNTER_LIMIT) { diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h index a919ce4e1..41e729b9b 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h @@ -12,12 +12,13 @@ extern uint32_t DispenserPrepareSpeed ; extern double DispenserPreparePressure ; extern uint32_t DispenserPrepareTimeout ; extern uint32_t DispenserPrepareTimeLag ; +extern uint32_t InitialDispenserSpeed; -extern int32_t CurrentDispenserSpeed[MAX_SYSTEM_DISPENSERS]; extern uint32_t DispenserIdToMotorId[MAX_SYSTEM_DISPENSERS]; extern float DispenserPressure[MAX_SYSTEM_DISPENSERS]; uint32_t DispenserConfigMessage(HardwareDispenser * request); + extern HardwareDispenser DispensersCfg[ MAX_SYSTEM_DISPENSERS]; extern bool DispensersAlarmState[ MAX_SYSTEM_DISPENSERS]; @@ -25,6 +26,7 @@ extern bool DispensersAlarmState[ MAX_SYSTEM_DISPENSERS]; extern uint32_t DispenserIdToMotorId[MAX_SYSTEM_DISPENSERS]; extern bool HomingActive[MAX_SYSTEM_DISPENSERS]; +extern bool PrimingActive[MAX_SYSTEM_DISPENSERS]; uint32_t IDS_Dispenser_EmptyCBFunction(uint32_t IfIndex, uint32_t ReadValue); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c index 2a1a8fa31..bdde05b43 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_Cleaning.c @@ -17,7 +17,7 @@ #include "drivers/valves/valve.h" int SaveLeftRockerSpeed = 50, SaveRightRockerSpeed = 50; -#define CLEANING_DISPENSER_ID 6 + uint32_t IDS_Cleaning_Move_Rockers (int LeftRockerSpeed,int RightRockerSpeed) { uint32_t status = OK; @@ -43,8 +43,8 @@ uint32_t IDS_Cleaning_Center_And_Stop_Rockers (int timeout,callback_fptr callbac uint32_t IDS_Cleaning_Spray_Cleaning_Solution (int dispenserSpeed,callback_fptr callback) { uint32_t status = OK; - status = IDS_Dispenser_Start_Motor_and_Open_Valve(CLEANING_DISPENSER_ID, dispenserSpeed, callback); - Report("IDS_Cleaning_Spray_Cleaning_Solution", __FILE__, __LINE__, CLEANING_DISPENSER_ID, RpWarning, dispenserSpeed, 0); + status = IDS_Dispenser_Start_Motor_and_Open_Valve(CLEANER_DISPENSER, dispenserSpeed, callback); + Report("IDS_Cleaning_Spray_Cleaning_Solution", __FILE__, __LINE__, CLEANER_DISPENSER, RpWarning, dispenserSpeed, 0); return status; @@ -52,8 +52,8 @@ uint32_t IDS_Cleaning_Spray_Cleaning_Solution (int dispenserSpeed,callback_fptr uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback) { uint32_t status = OK; - status = IDS_Dispenser_Close_Valve_And_Stop_Motor(CLEANING_DISPENSER_ID,callback); - Report("IDS_Cleaning_Stop_Cleaning_Solution", __FILE__, __LINE__, CLEANING_DISPENSER_ID, RpWarning, status, 0); + status = IDS_Dispenser_Close_Valve_And_Stop_Motor(CLEANER_DISPENSER,callback); + Report("IDS_Cleaning_Stop_Cleaning_Solution", __FILE__, __LINE__, CLEANER_DISPENSER, RpWarning, status, 0); return status; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index b9ab97714..1984420f3 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -25,8 +25,8 @@ #define CloseValve MidTank_Dispenser #define OpenValve Dispenser_Mixer -uint32_t CloseValveTimeout = 250; -uint32_t OpenValveTimeout = 250; +uint32_t CloseValveTimeout = 10; +uint32_t OpenValveTimeout = 10; #define DISPENSER_BUILD_PRESSURE_SPEED 900 #define DISPENSER_BUILD_PRESSURE_LIMIT 1.5 #define DISPENSER_BUILD_PRESSURE_TIMEOUT 60000 @@ -54,8 +54,10 @@ void IDS_Dispenser_SetPrepareValues( uint32_t DispenserBuildPressureSpeed, } void IDS_Dispenser_SetTimeOutValues(uint32_t CloseTimeout, uint32_t OpenTimeout) { +#ifndef SPECIAL_DISPENSERS CloseValveTimeout = CloseTimeout; OpenValveTimeout = OpenTimeout; +#endif Report("IDS_Dispenser_SetTimeOutValues ",__FILE__,__LINE__,OpenValveTimeout,RpWarning,(int)CloseValveTimeout,0); } @@ -111,7 +113,7 @@ uint32_t IDS_Dispenser_Build_Pressure_Callback(uint32_t DispenserId, uint32_t Re { Report("Cannot Add control callback",__FILE__,(int)DispenserId,GetControlCallbackFuncPtr(DispenserControlId[DispenserId]),RpWarning,(int)DispenserControlId[DispenserId],0); } - DispenserControlId[DispenserId] = AddControlCallback( IDS_Dispenser_Build_Pressure_Callback, DispenserPrepareTimeLag,TemplateDataReadCBFunction ,DispenserId, DispenserId, 0 ); + DispenserControlId[DispenserId] = AddControlCallback(NULL, IDS_Dispenser_Build_Pressure_Callback, DispenserPrepareTimeLag,TemplateDataReadCBFunction ,DispenserId, DispenserId, 0 ); if (DispenserControlId[DispenserId] == 0xFF) Report("Add control callback failed",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); else @@ -156,11 +158,11 @@ uint32_t IDS_Dispenser_Build_Pressure_Callback(uint32_t DispenserId, uint32_t Re if (DispenserControlId[DispenserId] != 0xFF) Report("Cannot Add control callback",__FILE__,(int)DispenserId,GetControlCallbackFuncPtr(DispenserControlId[DispenserId]),RpWarning,(int)DispenserControlId[DispenserId],0); - DispenserControlId[DispenserId] = AddControlCallback( IDS_Dispenser_StopMotorCallback, CloseValveTimeout, TemplateDataReadCBFunction,DispenserId, DispenserId, 0 ); + DispenserControlId[DispenserId] = AddControlCallback(NULL, IDS_Dispenser_StopMotorCallback, CloseValveTimeout, 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); + //else + // Report("Add control callback",__FILE__,__LINE__,(int)DispenserId,RpWarning,(int)DispenserControlId[DispenserId],0); return OK; } @@ -189,7 +191,7 @@ uint32_t IDS_Dispenser_Start_Motor_and_Open_Valve(int DispenserId, int MotorSpee DispenserCallback[DispenserId] = callback; TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[DispenserId]; - if (CurrentDispenserSpeed[DispenserId]) //motor already running + /*if (CurrentDispenserSpeed[DispenserId]) //motor already running { MotorSetSpeed(HW_Motor_Id, MotorSpeed); CurrentDispenserSpeed[DispenserId] = MotorSpeed; @@ -200,41 +202,47 @@ uint32_t IDS_Dispenser_Start_Motor_and_Open_Valve(int DispenserId, int MotorSpee } } else - { + {*/ MotorSetSpeed(HW_Motor_Id, MotorSpeed); CurrentDispenserSpeed[DispenserId] = MotorSpeed; if (DispenserControlId[DispenserId] != 0xFF) Report("Cannot Add control callback",__FILE__,(int)DispenserId,GetControlCallbackFuncPtr(DispenserControlId[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 ); + DispenserControlId[DispenserId] = AddControlCallback(NULL, 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; } DispenserRunningData IDS_Dispenser_Data[MAX_SYSTEM_DISPENSERS]; -DispenserData IDSDispenserData; +DispenserData StoreDispenserData; DispenserRunningData **dispenserdata; char DispenserStorePath[50] = "0://SysInfo//DispStor.cfg"; void IDS_Dispenser_Content_Init (void) { int i; - FRESULT Fresult = FR_OK; + //FRESULT Fresult = FR_OK; void* buffer = NULL; TimerMotors_t HW_Motor_Id; uint32_t Bytes = 0; - dispenser_data__init(&IDSDispenserData); + dispenser_data__init(&StoreDispenserData); dispenserdata = (DispenserRunningData**)my_malloc(sizeof(DispenserRunningData *)*(MAX_SYSTEM_DISPENSERS)); for(i=0;i<MAX_SYSTEM_DISPENSERS;i++) { HW_Motor_Id = DispenserIdToMotorId[i]; dispenser_running_data__init(&IDS_Dispenser_Data[i]); dispenserdata[i] = &IDS_Dispenser_Data[i]; + IDS_Dispenser_Data[i].has_consumedinnanolitter = true; + IDS_Dispenser_Data[i].has_direction = true; + IDS_Dispenser_Data[i].has_microsteps = true; + IDS_Dispenser_Data[i].has_nanolitterperpulse = true; + IDS_Dispenser_Data[i].has_numberofrefills = true; + IDS_Dispenser_Data[i].has_totalconsumedinnanolitter = true; IDS_Dispenser_Data[i].nanolitterperpulse = DEFAULT_NANOLITER_PER_PULSE; IDS_Dispenser_Data[i].microsteps = MotorsCfg[HW_Motor_Id].microstep; } @@ -242,11 +250,17 @@ void IDS_Dispenser_Content_Init (void) memcpy(&Bytes,(void *)DISPENSERS_MAP_IN_FLASH,sizeof(Bytes)); bool havedata = false; - DispenserRunningData* StoredDispenserData; - if ((Bytes)&&(Bytes < 4000)) + DispenserData* StoredDispenserData; + if ((Bytes)&&(Bytes < 500)) { - StoredDispenserData = (DispenserRunningData*)(DISPENSERS_MAP_IN_FLASH+4); - havedata = true; + buffer = my_malloc (Bytes); + if (buffer) + { + memcpy(buffer, (void *)(DISPENSERS_MAP_IN_FLASH+4),Bytes); + StoredDispenserData = dispenser_data__unpack(NULL,Bytes,buffer); + havedata = true; + free(buffer); + } } /*else { @@ -261,18 +275,25 @@ void IDS_Dispenser_Content_Init (void) { for(i=0;i<MAX_SYSTEM_DISPENSERS;i++) { - memcpy (&IDS_Dispenser_Data[i],&StoredDispenserData[i],sizeof(DispenserRunningData)); + //memcpy (&IDS_Dispenser_Data[i],&StoredDispenserData->dispenserinfo[i],sizeof(DispenserRunningData)); IDS_Dispenser_Data[i].has_consumedinnanolitter = true; IDS_Dispenser_Data[i].has_totalconsumedinnanolitter = true; IDS_Dispenser_Data[i].has_direction = true; IDS_Dispenser_Data[i].has_microsteps = true; IDS_Dispenser_Data[i].has_numberofrefills = true; IDS_Dispenser_Data[i].has_nanolitterperpulse = true; + IDS_Dispenser_Data[i].consumedinnanolitter = StoredDispenserData->dispenserinfo[i]->consumedinnanolitter; + IDS_Dispenser_Data[i].totalconsumedinnanolitter = StoredDispenserData->dispenserinfo[i]->totalconsumedinnanolitter; + IDS_Dispenser_Data[i].direction = StoredDispenserData->dispenserinfo[i]->direction; + IDS_Dispenser_Data[i].microsteps = StoredDispenserData->dispenserinfo[i]->microsteps; + IDS_Dispenser_Data[i].numberofrefills = StoredDispenserData->dispenserinfo[i]->numberofrefills; + IDS_Dispenser_Data[i].nanolitterperpulse = StoredDispenserData->dispenserinfo[i]->nanolitterperpulse; + Report("IDS_Dispenser load data ",__FILE__,i,(int)IDS_Dispenser_Data[i].totalconsumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[i].consumedinnanolitter,0); } - Report("IDS_Dispenser_Init ",__FILE__,__LINE__,(int)Bytes,RpWarning,(int)IDS_Dispenser_Data[0].nanolitterperpulse*100,0); - + dispenser_data__free_unpacked(StoredDispenserData,NULL); free (buffer); } + //Report("IDS_Dispenser load data ",__FILE__,__LINE__,(int)Bytes,RpWarning,(int)IDS_Dispenser_Data[0].nanolitterperpulse*100,0); return; //================================== @@ -281,26 +302,31 @@ uint16_t seconds_counter = 0; bool DispenserDataUpdated = false; uint32_t IDS_Dispenser_Store_Data (void) { - uint32_t timing = msec_millisecondCounter; + //uint32_t timing = msec_millisecondCounter; FRESULT Status = FR_OK; - IDSDispenserData.n_dispenserinfo = MAX_SYSTEM_DISPENSERS; - IDSDispenserData.dispenserinfo = dispenserdata; + StoreDispenserData.n_dispenserinfo = MAX_SYSTEM_DISPENSERS; + StoreDispenserData.dispenserinfo = dispenserdata; + uint8_t dispensers_container_buffer[500]; + - size_t response_size = sizeof(DispenserRunningData)*8; + size_t response_size;// = sizeof(DispenserRunningData)*8; int i; for(i=0;i<MAX_SYSTEM_DISPENSERS;i++) { - IDSDispenserData.dispenserinfo[i] = &IDS_Dispenser_Data[i]; + StoreDispenserData.dispenserinfo[i] = &IDS_Dispenser_Data[i]; + Report("IDS_Dispenser store data ",__FILE__,i,(int)IDS_Dispenser_Data[i].totalconsumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[i].consumedinnanolitter,0); } // Report("IDS_Dispenser_Store_Data 0",__FILE__,(int)IDS_Dispenser_Data[0].totalconsumedinnanolitter,(int)IDS_Dispenser_Data[0].consumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[0].microsteps,0); // Report("IDS_Dispenser_Store_Data 4",__FILE__,(int)IDS_Dispenser_Data[4].totalconsumedinnanolitter,(int)IDS_Dispenser_Data[4].consumedinnanolitter,RpWarning,(int)IDS_Dispenser_Data[4].microsteps,0); - //response_size = dispenser_data__pack(&IDSDispenserData, response_buffer); + if (JobIsActive()==false) { + response_size = dispenser_data__pack(&StoreDispenserData, dispensers_container_buffer); EraseFlashSection(DISPENSERS_MAP_IN_FLASH,response_size+4); ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH, 4,&response_size); - ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH+4, response_size, IDS_Dispenser_Data); + ReadAppAndProgram(DISPENSERS_MAP_IN_FLASH+4, response_size, dispensers_container_buffer); + //Report("IDS_Dispenser_Store ",__FILE__,__LINE__,(int)response_size,RpWarning,(int)StoreDispenserData.dispenserinfo[4]->nanolitterperpulse *100,0); /*Status = FileWrite(IDS_Dispenser_Data,response_size,DispenserStorePath,BIOS_NO_WAIT); if (Status == FR_OK) @@ -308,6 +334,7 @@ uint32_t IDS_Dispenser_Store_Data (void) DispenserDataUpdated = false; REPORT_MSG(msec_millisecondCounter - timing, "Updating dispensers file - time"); }*/ + } return Status; @@ -339,7 +366,7 @@ void IDS_Dispenser_Content_Calculation (char DispenserId) } if (DispenserId == 0) { - if ((seconds_counter++>=36000)&&(DispenserDataUpdated == true))//36000)// - one hour) + if ((seconds_counter++>=900)&&(DispenserDataUpdated == true))//9000)// - one hour) { seconds_counter = 0; if (IDS_Dispenser_Data[DispenserId].consumedinnanolitter) diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h index ac3928c3e..a819448a8 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h @@ -43,10 +43,12 @@ extern bool EnableLubrication; extern bool EnableIntersegment; extern double IntersegmentLength; extern DispenserRunningData IDS_Dispenser_Data[MAX_SYSTEM_DISPENSERS]; -extern DispenserData IDSDispenserData; +//extern DispenserData IDSDispenserData; extern DispenserRunningData **dispenserdata; extern bool DispenserUsedInJob[MAX_SYSTEM_DISPENSERS]; +extern int32_t CurrentDispenserSpeed[MAX_SYSTEM_DISPENSERS]; + bool IDS_MapDispenserUsedinJob(void *JobDetails); void IDS_ModuleInit (void); @@ -66,11 +68,13 @@ uint32_t IDS_StartLubrication(void); uint32_t IDS_StopLubrication(void); uint32_t IDS_DispenserPidRequestMessage(HardwarePidControl* request); -uint32_t IDS_DispenserControlInit(); +//uint32_t IDS_DispenserControlInit(); +void IDS_Dispenser_Init(uint8_t DispenserId); uint32_t IDS_HomeDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback); uint32_t IDS_StopHomeDispenser (uint32_t deviceID); uint32_t IDS_HomeDispenserWaitForHomingEnd(uint32_t DispenserId, uint32_t timeout , callback_fptr callback); +bool IDS_IsHomingActive(uint32_t DispenserId); uint32_t IDS_EmptyDispenser (uint32_t deviceID, uint32_t speed , callback_fptr callback); uint32_t IDS_Dispenser_Alarm_On (uint8_t deviceID); @@ -100,4 +104,7 @@ float GetDispenserPressure(int DispenserId); int32_t IdsGetMotorSpeed(uint32_t DispenserId); void DispenserDataRequestFunc(MessageContainer* requestContainer); +void IDS_Start_Pid_Testing(int DispenserId); +void IDS_Stop_Pid_Testing(int DispenserId); + #endif /* MODULES_IDS_IDS_EX_H_ */ diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index 1302d262a..1ea37a07e 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -82,6 +82,8 @@ uint32_t InitialDispenserTimeout = INITIAL_DISPENSER_TIMEOUT_LIMIT; uint32_t InitialDispenserTimeLag = INITIAL_DISPENSER_TIMEOUT; uint32_t InitialDispenserSpeed = INITIAL_DISPENSER_SPEED; +uint32_t ControlIdtoInactiveDispenserId [MAX_SYSTEM_DISPENSERS] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; + uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t deviceID); AutoHoming_Config_enum AutoHoming_Config = AutoHoming_off; @@ -136,14 +138,14 @@ uint32_t IDS_HomeDispenserWaitForHomingEnd(uint32_t DispenserId, uint32_t timeo DispenserBacklashControlId[DispenserId] = 0xFF; //return ERROR; } - DispenserBacklashControlId[DispenserId] = AddControlCallback( IDS_HomeDispenserWaitForHomingEnd,eOneSecond , TemplateDataReadCBFunction,DispenserId,0, 0 ); + DispenserBacklashControlId[DispenserId] = AddControlCallback("Wait for Homing", IDS_HomeDispenserWaitForHomingEnd,eOneSecond , TemplateDataReadCBFunction,DispenserId,0, 0 ); if ( DispenserBacklashControlId[DispenserId] == 0xFF) return ERROR; return OK; } -uint32_t IDS_HomeDispenserBackMoveCallback(uint32_t motorId, uint32_t ReadValue) +/*uint32_t IDS_HomeDispenserBackMoveCallback(uint32_t motorId, uint32_t ReadValue) { uint8_t DispenserId = motorId-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; if ((GetDispenserPressure(DispenserId)>=InitialDispenserPressure)||(DispenserHomingTime[DispenserId]>InitialDispenserTimeout)) @@ -152,7 +154,7 @@ uint32_t IDS_HomeDispenserBackMoveCallback(uint32_t motorId, uint32_t ReadValue) CurrentDispenserSpeed[DispenserId] = 0; if (Extended_Motor_Param == true) Power_Step_01_Dispenser_Mode(DispenserId,Voltage); - MotorSetMicroStep(motorId, KeepMicrostep[DispenserId]); + //MotorSetMicroStep(motorId, KeepMicrostep[DispenserId]); HomingActive[DispenserId]= false; PrimingActive[DispenserId]= false; Control_TCA9534ByPass(DispenserId,DISABLE);// use ENABLE or DISABLE @@ -173,7 +175,7 @@ uint32_t IDS_HomeDispenserBackMoveCallback(uint32_t motorId, uint32_t ReadValue) DispenserHomingTime[DispenserId]+=InitialDispenserTimeLag; } return OK; -} +}*/ uint32_t IDS_HomeDispenserCallback(uint32_t motorId, uint32_t ReadValue) { uint8_t DispenserId = motorId-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; @@ -190,15 +192,31 @@ uint32_t IDS_HomeDispenserCallback(uint32_t motorId, uint32_t ReadValue) } // HomingActive[DispenserId]= false; IDS_Dispenser_RefillEnded ( DispenserId, MotorsCfg[motorId].microstep); - Report("Start backlash",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,(int)DispenserHomingTime[DispenserId],0); - DispenserHomingControlId[DispenserId] = AddControlCallback( IDS_HomeDispenserBackMoveCallback, InitialDispenserTimeLag, GetDispenserPressure,motorId, motorId, 0 ); + Report("Homing ended",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,(int)DispenserHomingTime[DispenserId],0); +// DispenserHomingControlId[DispenserId] = AddControlCallback( IDS_HomeDispenserBackMoveCallback, InitialDispenserTimeLag, GetDispenserPressure,motorId, motorId, 0 ); MotorSetDirection(motorId,MotorsCfg[motorId].directionthreadwize); Task_sleep(10); - MotorSetSpeed(motorId, InitialDispenserSpeed); - CurrentDispenserSpeed[DispenserId] = InitialDispenserSpeed; +// MotorSetSpeed(motorId, InitialDispenserSpeed); + CurrentDispenserSpeed[DispenserId] = 0; +///////////////////////////////////////////////////////////// + if (Extended_Motor_Param == true) + Power_Step_01_Dispenser_Mode(DispenserId,Voltage); + //MotorSetMicroStep(motorId, KeepMicrostep[DispenserId]); + HomingActive[DispenserId]= false; + PrimingActive[DispenserId]= false; + Control_TCA9534ByPass(DispenserId,DISABLE);// use ENABLE or DISABLE + + //close dry air valve in the dispenser + Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_OFF); + Disable_MidTank_Pressure_Reading(DispenserId); + + //////////////////////////////////////////////////////// return OK; } - +bool IDS_IsHomingActive(uint32_t DispenserId) +{ + return HomingActive[DispenserId]; +} uint32_t IDS_HomeDispenser (uint32_t DispenserId, uint32_t speed , callback_fptr callback) { assert(DispenserId < MAX_SYSTEM_DISPENSERS); @@ -209,11 +227,17 @@ uint32_t IDS_HomeDispenser (uint32_t DispenserId, uint32_t speed , callback_fptr if (FPGA_Read_limit_Switches(Dispenser_Id_to_LS_Id[DispenserId]) == LIMIT) { Report("IDS_HomeDispenser - Disp is full",__FILE__,Dispenser_Id_to_LS_Id[DispenserId],(int)DispenserId,RpWarning,LIMIT,0); - return OK; + return ERROR; } if (Get_MidTank_Pressure_Sensor(DispenserId)<0.2) { - Report("IDS_HomeDispenser - Midtank is empty",__FILE__,Get_MidTank_Int100_Sensor(DispenserId),(int)DispenserId,RpWarning,LIMIT,0); + Report("IDS_HomeDispenser - Midtank is empty",__FILE__,Get_MidTank_Int1000_Sensor(DispenserId),(int)DispenserId,RpWarning,LIMIT,0); + return ERROR; + } + midTankContent = Read_MidTank_Pressure_Sensor(DispenserId); + if (midTankContent < 0.2) //midtank is empty - abort!!!! + { + Report("IDS_HomeDispenser - Mid Tank Empty!!! ",__FILE__,__LINE__,(int)(midTankContent * 1000),RpWarning,DispenserId,0); return ERROR; } //if Safety is active @@ -223,8 +247,6 @@ uint32_t IDS_HomeDispenser (uint32_t DispenserId, uint32_t speed , callback_fptr Report("IDS_HomeDispenser - Homing/priming already active",__FILE__,HomingActive[DispenserId],(int)DispenserId,RpWarning,PrimingActive[DispenserId],0); return ERROR; } - else - HomingActive[DispenserId] = true; if (Check_Disp_Safety_Stop_Indication(DispenserId) == true) { @@ -239,62 +261,35 @@ uint32_t IDS_HomeDispenser (uint32_t DispenserId, uint32_t speed , callback_fptr TimerMotors_t MotorId = HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1 + DispenserId; if ( Dispenser_Id_to_LS_Id[DispenserId] != MAX_GPI) { + HomingActive[DispenserId] = true; //open dispenser valve dispenser to midtank direction Control3WayValvesWithCallback ((Valves_t)DispenserId, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer - KeepMicrostep[DispenserId] = MotorsCfg[MotorId].microstep; if (Extended_Motor_Param == true) Power_Step_01_Dispenser_Mode(DispenserId,Current); - MotorSetMicroStep(MotorId, 1); - SysCtlDelay(180000); + KeepMicrostep[DispenserId] = MotorsCfg[MotorId].microstep; + //MotorSetMicroStep(MotorId, 1); //open dry air valve in the dispenser Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_ON); Enable_MidTank_Pressure_Reading(DispenserId); - SysCtlDelay(1200000); - midTankContent = Read_MidTank_Pressure_Sensor(DispenserId); - if (midTankContent < 0.2) //midtank is empty - abort!!!! - { - Report("IDS_HomeDispenser - Mid Tank Empty!!! ",__FILE__,__LINE__,(int)(midTankContent * 1000),RpWarning,DispenserId,0); - Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_OFF); - STATUS_GREEN_LED_OFF; - STATUS_RED_LED_ON; - - return ERROR; - } IDS_Dispenser_RefillStarted(DispenserId,1); - MotorMovetoLimitSwitch (MotorId,1-MotorsCfg[MotorId].directionthreadwize, speed, Dispenser_Id_to_LS_Id[DispenserId], IDS_HomeDispenserCallback,0); - CurrentDispenserSpeed[DispenserId] = speed; + if (DispenserId== LUBRICANT_DISPENSER) + { + MotorMovetoLimitSwitch (MotorId,1-MotorsCfg[MotorId].directionthreadwize, speed/2, Dispenser_Id_to_LS_Id[DispenserId], IDS_HomeDispenserCallback,0); + CurrentDispenserSpeed[DispenserId] = speed/2; + Report("IDS_HomeDispenser ",__FILE__,__LINE__,(int)DispenserId,RpWarning,speed/2,0); + } + else + { + MotorMovetoLimitSwitch (MotorId,1-MotorsCfg[MotorId].directionthreadwize, speed, Dispenser_Id_to_LS_Id[DispenserId], IDS_HomeDispenserCallback,0); + CurrentDispenserSpeed[DispenserId] = speed; + Report("IDS_HomeDispenser ",__FILE__,__LINE__,(int)DispenserId,RpWarning,speed,0); + } CurrentDispenserSpeed[DispenserId] = (-1*CurrentDispenserSpeed[DispenserId]); - Report("IDS_HomeDispenser ",__FILE__,__LINE__,(int)DispenserId,RpWarning,speed,0); return OK; } return ERROR; } -uint32_t IDS_Dispenser_Alarm_On (uint8_t DispenserId) -{ - uint32_t status = OK; - Report("IDS_Dispenser_Alarm_On",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,0,0); - DispensersAlarmState[DispenserId] = true; - TimerMotors_t MotorId = HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1 + DispenserId; - status |= MotorAbortMovetoLimitSwitch(MotorId); - Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_OFF); - Enable_MidTank_Pressure_Reading(DispenserId); - if (Extended_Motor_Param == true) - Power_Step_01_Dispenser_Mode(DispenserId,Voltage); - status |= MotorSetMicroStep(MotorId, KeepMicrostep[DispenserId]); - status |= MotorStop(DispenserId, Hard_Hiz); - CurrentDispenserSpeed[DispenserId] = 0; - JobEndReason = JOB_OUT_OF_DYE; - return status; -} -uint32_t IDS_Dispenser_Alarm_Off (uint8_t DispenserId) -{ - uint32_t status = OK; - DispensersAlarmState[DispenserId] = false; - Report("IDS_Dispenser_Alarm_Off",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,0,0); - return status; -} - uint32_t IDS_StopHomeDispenser (uint32_t DispenserId) { assert(DispenserId < MAX_SYSTEM_DISPENSERS); @@ -313,24 +308,24 @@ uint32_t IDS_StopHomeDispenser (uint32_t DispenserId) Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_OFF); Control3WayValvesWithCallback ((Valves_t)DispenserId, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer - if (HomingActive[DispenserId] == true) +/* if (HomingActive[DispenserId] == true) { IDS_StopHomeDispenserBuildPressure(DispenserId); - } - if (PrimingActive[DispenserId] == true) + }*/ + if (HomingActive[DispenserId] == true) { if (DispenserId == LUBRICANT_DISPENSER) { Lubricant_2Way_Valve (STOP); } - PrimingActive[DispenserId] = false; - Control_TCA9534ByPass(DispenserId,DISABLE);// use ENABLE or DISABLE - if (Extended_Motor_Param == true) - Power_Step_01_Dispenser_Mode(DispenserId,Voltage); - MotorSetMicroStep(MotorId, KeepMicrostep[DispenserId]); - CurrentDispenserSpeed[DispenserId] = 0; - CurrentDispenserSpeed[DispenserId] = 0; } + HomingActive[DispenserId] = false; + PrimingActive[DispenserId] = false; + Control_TCA9534ByPass(DispenserId,DISABLE);// use ENABLE or DISABLE + if (Extended_Motor_Param == true) + Power_Step_01_Dispenser_Mode(DispenserId,Voltage); + //MotorSetMicroStep(MotorId, KeepMicrostep[DispenserId]); + CurrentDispenserSpeed[DispenserId] = 0; return OK; } uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t DispenserId) @@ -362,13 +357,17 @@ uint32_t IDS_StopHomeDispenserBuildPressure (uint32_t DispenserId) HomingRequestCallback[DispenserId] = NULL; } // HomingActive[DispenserId]= false; - Report("Start backlash",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,(int)DispenserHomingTime[DispenserId],0); - DispenserHomingControlId[DispenserId] = AddControlCallback( IDS_HomeDispenserBackMoveCallback, InitialDispenserTimeLag, GetDispenserPressure,motorId, motorId, 0 ); - Task_sleep(10); - MotorSetDirection(motorId,MotorsCfg[motorId].directionthreadwize); - Task_sleep(10); - MotorSetSpeed(motorId, 1000); - CurrentDispenserSpeed[DispenserId] = 1000; + Report("End homing for job start",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,(int)DispenserHomingTime[DispenserId],0); + /* else + { + Report("homing aborted,start backlash",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,(int)DispenserHomingTime[DispenserId],0); + DispenserHomingControlId[DispenserId] = AddControlCallback( IDS_HomeDispenserBackMoveCallback, InitialDispenserTimeLag, GetDispenserPressure,motorId, motorId, 0 ); + Task_sleep(10); + MotorSetDirection(motorId,MotorsCfg[motorId].directionthreadwize); + Task_sleep(10); + MotorSetSpeed(motorId, 1000); + CurrentDispenserSpeed[DispenserId] = 1000; + }*/ //IDS_Dispenser_RefillEnded ( DispenserId, MotorsCfg[motorId].microstep); return OK; @@ -403,7 +402,7 @@ uint32_t IDS_EmptyDispenserCallback(uint32_t motorId, uint32_t ReadValue) CurrentDispenserSpeed[DispenserId] = 0; if (Extended_Motor_Param == true) Power_Step_01_Dispenser_Mode(DispenserId,Voltage); - MotorSetMicroStep(motorId, KeepMicrostep[DispenserId]); + //MotorSetMicroStep(motorId, KeepMicrostep[DispenserId]); PrimingActive[DispenserId]= false; Control_TCA9534ByPass(DispenserId,DISABLE);// use ENABLE or DISABLE if (DispenserId == LUBRICANT_DISPENSER) @@ -427,10 +426,10 @@ uint32_t IDS_EmptyDispenser (uint32_t DispenserId, uint32_t speed , callback_fpt //if (DispensersAlarmState[DispenserId] == true) // return ERROR; if ((HomingActive[DispenserId] == true)||(PrimingActive[DispenserId] == true)) + { + Report("IDS_HomeDispenser - Homing/priming already active",__FILE__,HomingActive[DispenserId],(int)DispenserId,RpWarning,PrimingActive[DispenserId],0); return ERROR; - else - PrimingActive[DispenserId] = true; - HomingRequestCallback[DispenserId] = callback; + } if (Check_Disp_Safety_Stop_Indication(DispenserId) == true) { if ((Get_Notification_Disp_Down(DispenserId) == false)||(Get_Notification_Over_Press(DispenserId) == false)) @@ -442,13 +441,15 @@ uint32_t IDS_EmptyDispenser (uint32_t DispenserId, uint32_t speed , callback_fpt TimerMotors_t MotorId = HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1 + DispenserId; if ( Dispenser_Id_to_LS_Empty_Id[DispenserId] != MAX_GPI) { + PrimingActive[DispenserId] = true; + HomingRequestCallback[DispenserId] = callback; //open dispenser valve dispenser to midtank direction Control3WayValvesWithCallback ((Valves_t)DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer if (Extended_Motor_Param == true) Power_Step_01_Dispenser_Mode(DispenserId,Current); //Valve_Set((Valves_t) request->index, Dispenser_Mixer); KeepMicrostep[DispenserId] = MotorsCfg[MotorId].microstep; - MotorSetMicroStep(MotorId, 1); + //MotorSetMicroStep(MotorId, 1); Task_sleep(100); //open dry air valve in the dispenser //Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_ON); @@ -462,3 +463,75 @@ uint32_t IDS_EmptyDispenser (uint32_t DispenserId, uint32_t speed , callback_fpt } return ERROR; } +uint32_t IDS_Dispenser_Alarm_On (uint8_t DispenserId) +{ + uint32_t status = OK; + Report("IDS_Dispenser_Alarm_On",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,0,0); + assert(DispenserId < MAX_SYSTEM_DISPENSERS); + DispensersAlarmState[DispenserId] = true; + TimerMotors_t MotorId = HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1 + DispenserId; + status |= MotorAbortMovetoLimitSwitch(MotorId); + Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_OFF); + Disable_MidTank_Pressure_Reading(DispenserId); + if (Extended_Motor_Param == true) + Power_Step_01_Dispenser_Mode(DispenserId,Voltage); + //status |= MotorSetMicroStep(MotorId, KeepMicrostep[DispenserId]); + status |= MotorStop(MotorId, Hard_Hiz); + IDS_Dispenser_Init(DispenserId); + JobEndReason = JOB_OUT_OF_DYE; + return status; +} +uint32_t IDS_Dispenser_Alarm_Off (uint8_t DispenserId) +{ + uint32_t status = OK; + assert(DispenserId < MAX_SYSTEM_DISPENSERS); + DispensersAlarmState[DispenserId] = false; + Report("IDS_Dispenser_Alarm_Off",__FILE__,millisecondCounter,(int)DispenserId,RpWarning,0,0); + return status; +} +uint32_t IDS_ReCheck_Pressure_Callback(uint32_t DispenserId, uint32_t ReadValue) +{ + Report("Pulling dispenser down result",__FILE__,DispenserId,(int)(GetDispenserPressure(DispenserId)*100),RpWarning,200,0); + SafeRemoveControlCallback(GetControlLowDevice_i(), IDS_ReCheck_Pressure_Callback ); + +} +uint32_t IDS_Check_Pressure_Callback(uint32_t DispenserId, uint32_t ReadValue) +{ + TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[DispenserId]; + if (JobIsActive()) + { + if (DispenserUsedInJob[DispenserId] == true) + { + //LOG_ERROR(DispenserId,"IDS_Check_Pressure_Callback active in a job"); + return ERROR; + } + } + if ((HomingActive[DispenserId] == true)||(PrimingActive[DispenserId] == true)) + { + //LOG_ERROR(DispenserId,"IDS_Check_Pressure_Callback active in a job"); + return ERROR; + } + + if (GetDispenserPressure(DispenserId)>3.0) + { + Report("Pulling dispenser down to reduce pressure",__FILE__,DispenserId,(int)(GetDispenserPressure(DispenserId)*100),RpWarning,200,0); + MotorMove(HW_Motor_Id,1-MotorsCfg[HW_Motor_Id].directionthreadwize,200*MotorsCfg[HW_Motor_Id].microstep); + AddControlCallback("IDS_ReCheck_Pressure", IDS_ReCheck_Pressure_Callback, eOneSecond*4,TemplateDataReadCBFunction ,DispenserId, 0, 0 ); + } + return OK; +} + + +void IDS_Dispenser_Init(uint8_t DispenserId) +{ + assert(DispenserId < MAX_SYSTEM_DISPENSERS); + Report("IDS_Dispenser_Init",__FILE__,DispenserId,HomingActive[DispenserId],RpWarning,PrimingActive[DispenserId],0); + CurrentDispenserSpeed[DispenserId] = 0; + HomingActive[DispenserId]= false; + PrimingActive[DispenserId]= false; + Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_OFF); + Control3WayValvesWithCallback ((Valves_t)DispenserId, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer + if (ControlIdtoInactiveDispenserId[DispenserId] == 0xFF) + ControlIdtoInactiveDispenserId[DispenserId] = AddControlCallback("IDS_Check_Pressure", IDS_Check_Pressure_Callback, eOneMinute,TemplateDataReadCBFunction ,DispenserId, 0, 0 ); + +} diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index c42014556..ad9d75941 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -41,13 +41,14 @@ typedef struct PID_Config_Params m_params; }DispenserControlConfig_t; HardwarePidControl *DispensersControl; +HardwarePidControl DispensersCtrl[MAX_SYSTEM_DISPENSERS]; #define MAX_DYE_DISPENSERS 6 int32_t DispenserSamples[MAX_SYSTEM_DISPENSERS][MAX_CONTROL_SAMPLES] = {0}; int DispenserSamplePointer[MAX_SYSTEM_DISPENSERS] = {0}; double DispenserNormalizedErrorCoEfficient[MAX_SYSTEM_DISPENSERS] = {0}; double lubricant_speed = 0.0; HardwarePidControlType ThreadDispenserIdToControlId[MAX_SYSTEM_DISPENSERS] = { HARDWARE_PID_CONTROL_TYPE__Dispenser1,HARDWARE_PID_CONTROL_TYPE__Dispenser2,HARDWARE_PID_CONTROL_TYPE__Dispenser3,HARDWARE_PID_CONTROL_TYPE__Dispenser4,HARDWARE_PID_CONTROL_TYPE__Dispenser5,HARDWARE_PID_CONTROL_TYPE__Dispenser6,HARDWARE_PID_CONTROL_TYPE__Dispenser7,HARDWARE_PID_CONTROL_TYPE__Dispenser8}; - +JobUploadStrategy uploadstrategy = JOB_UPLOAD_STRATEGY__Default; bool DispenserReady[MAX_SYSTEM_DISPENSERS] = {true}; bool IDS_Active = false; /******************** STRUCTURES AND ENUMs ********************************************/ @@ -80,7 +81,7 @@ int lInterSegmentLength = 0; uint32_t InterSegmentStartWFCFDispensers; uint32_t WFCF = 80; bool EnableCleaning = true; - +bool JobEndSequence = false; void IDS_Dispenser_SetPreSegmentWFCFValues(double dispenserpresegmentwfcf, double ids_presegment_wfcf_timebeforesegment) { if (ids_presegment_wfcf_timebeforesegment) @@ -114,12 +115,14 @@ int lInterSegmentLength = 0; uint32_t BrushStopControlId = 0xFF; uint32_t PreSegmentControlId = 0xFF; -uint32_t IDS_DispenserControlInit() +/*uint32_t IDS_DispenserControlInit() { DispensersControl = (void *)(DISPENSERS_MAP_IN_FLASH); + DispensersControl = DispensersCtrl; + //EraseFlashSection(DispensersControl,sizeof(HardwarePidControl)*MAX_SYSTEM_DISPENSERS); return OK; -} +}*/ uint32_t IDS_DispenserPidRequestMessage(HardwarePidControl* request) { @@ -133,20 +136,59 @@ uint32_t IDS_DispenserPidRequestMessage(HardwarePidControl* request) break; } } - if (request->pvinputfilterfactormode > MAX_CONTROL_SAMPLES) - request->pvinputfilterfactormode = MAX_CONTROL_SAMPLES; + memcpy (&DispensersCtrl[Dispenser_i],request,sizeof(HardwarePidControl)); + //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); - temp = 1<<(DancersCfg[ThreadDispenserIdToDancerId[Dispenser_i]].resolutionbits); - temp=(100*(temp-1)*DancersCfg[ThreadDispenserIdToDancerId[Dispenser_i]].maximalmovementmm); - DispenserNormalizedErrorCoEfficient[Dispenser_i] = DispenserNormalizedErrorCoEfficient[Dispenser_i] / temp;*/ + + DispenserControlConfig[Dispenser_i].m_params.MAX = 1; + DispenserControlConfig[Dispenser_i].m_params.MIN = DispensersCtrl[Dispenser_i].outputproportionalpowerlimit*-1; + DispenserControlConfig[Dispenser_i].m_params.Kd = DispensersCtrl[Dispenser_i].derivativetime; + DispenserControlConfig[Dispenser_i].m_params.Kp = DispensersCtrl[Dispenser_i].proportionalgain; + DispenserControlConfig[Dispenser_i].m_params.Ki = DispensersCtrl[Dispenser_i].integraltime; + DispenserControlConfig[Dispenser_i].m_params.IntegralErrorMultiplier = DispensersCtrl[Dispenser_i].setpointramprateorsoftstartramp; + DispenserControlConfig[Dispenser_i].m_params.ProportionalErrorMultiplier = DispensersCtrl[Dispenser_i].outputonoffhysteresisvalue; + DispenserControlConfig[Dispenser_i].m_params.epsilon = DispensersCtrl[Dispenser_i].epsilon; + DispenserControlConfig[Dispenser_i].m_params.dt = DispensersCtrl[Dispenser_i].controloutputtype; + //DispenserControlConfig[Dispenser_i].m_ingnoreValue = DispensersCtrl[Dispenser_i].sensorcorrectionadjustment; // the minimal change required to change the motor speed in pulses + DispenserControlConfig[Dispenser_i].m_calculatedError = 0; + DispenserControlConfig[Dispenser_i].m_integral = 0; + DispenserControlConfig[Dispenser_i].m_isEnabled = true; + DispenserControlConfig[Dispenser_i].m_isReady = true; + DispenserControlConfig[Dispenser_i].m_mesuredParam = 0; + DispenserControlConfig[Dispenser_i].m_preError = 0; + DispenserControlConfig[Dispenser_i].m_SetParam = DispensersCtrl[Dispenser_i].outputproportionalcycletime;//need to update SetParams on presegment stage + return OK; } +uint32_t DispenserPidControlId[MAX_SYSTEM_DISPENSERS] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; +uint32_t IDS_Pid_Testing_Func(uint32_t DispenserId, uint32_t ReadValue) +{ + float calculated_speed; + DispenserControlConfig[DispenserId].m_mesuredParam = MillisecGetPressures(DispenserId); + DispenserControlConfig[DispenserId].m_calculatedError = PIDAlgorithmCalculation((float)DispenserControlConfig[DispenserId].m_SetParam , (float)DispenserControlConfig[DispenserId].m_mesuredParam, + &DispenserControlConfig[DispenserId].m_params, &DispenserControlConfig[DispenserId].m_preError, &DispenserControlConfig[DispenserId].m_integral); + DispenserControlConfig[DispenserId].m_calculatedError = (-1*DispenserControlConfig[DispenserId].m_calculatedError); + calculated_speed = (1-DispenserControlConfig[DispenserId].m_calculatedError)*CurrentDispenserSpeed[DispenserId]; + Report("IDS_Pid_Testing_Func ",__FILE__,DispenserId,(int)(DispenserControlConfig[DispenserId].m_mesuredParam*1000),RpWarning,(int)calculated_speed,0); + return OK; +} +void IDS_Start_Pid_Testing(int DispenserId) +{ + DispenserPidControlId[DispenserId] = AddControlCallback(NULL, IDS_Pid_Testing_Func,eOneSecond , TemplateDataReadCBFunction,DispenserId,DispenserId, DispenserId ); + Report("IDS_Start_Pid_Testing ",__FILE__,__LINE__,DispenserId,RpWarning,(int)DispenserPidControlId[DispenserId],0); +} +void IDS_Stop_Pid_Testing(int DispenserId) +{ + //stop this control loop + RemoveControlCallback(DispenserPidControlId[DispenserId], IDS_Pid_Testing_Func ); + DispenserPidControlId[DispenserId] = 0xFF; + Report("IDS_Stop_Pid_Testing ",__FILE__,__LINE__,DispenserId,RpWarning,(int)DispenserPidControlId[DispenserId],0); +} /* * IDS Printing support * Prepare: build pressure in all participating dispensers @@ -168,7 +210,9 @@ JobDescriptionFileBrushStop *GetNextBrushStopFromJobFile(); void FreeBrushStopFileData(JobDescriptionFileBrushStop *BrushStop); */ - //******************************************************************************************************************** +JobDescriptionFileBrushStop *FirstBrushStop = NULL; + +//******************************************************************************************************************** //************************** IDS JOB BUILDUP ************************************************************************* //******************************************************************************************************************** /************************************************************************************************************************************/ @@ -184,7 +228,7 @@ void FreeBrushStopFileData(JobDescriptionFileBrushStop *BrushStop); int brushCounter = 0; - GeneralHwReady = false; + //GeneralHwReady = false; for (Dispenser_i = 0;Dispenser_i<MAX_SYSTEM_DISPENSERS;Dispenser_i++) { DispenserUsedInJob[Dispenser_i] = false; @@ -212,6 +256,8 @@ void FreeBrushStopFileData(JobDescriptionFileBrushStop *BrushStop); BrushStop = GetNextBrushStopFromJobFile(); if (BrushStop) { + if (FirstBrushStop == NULL) + FirstBrushStop = BrushStop; if ((brushCounter % 100)==0) { SendJobProgress(0.0,0,false, "Processing file"); @@ -254,7 +300,8 @@ void FreeBrushStopFileData(JobDescriptionFileBrushStop *BrushStop); { LOG_ERROR (BrushStop->index, "no dispensers in brushstop"); } - FreeBrushStopFileData(BrushStop); + if (FirstBrushStop!= BrushStop) + FreeBrushStopFileData(BrushStop); BrushStop = NULL; } else @@ -270,7 +317,7 @@ void FreeBrushStopFileData(JobDescriptionFileBrushStop *BrushStop); FreeSegmentFileData(Segment); CloseJobFile(); } - GeneralHwReady = true; + //GeneralHwReady = true; int ActiveDispensers = 0; for (Dispenser_i = 0; Dispenser_i < MAX_DYE_DISPENSERS; Dispenser_i++) { @@ -284,21 +331,7 @@ void FreeBrushStopFileData(JobDescriptionFileBrushStop *BrushStop); } /*************************************************************************************************************************************/ - /************************************************************************************************************************************ - uint32_t IDS_MapDispenserUsedinFileJob(void *JobDetails) - { - JobTicket* JobTicket = JobDetails; - uint8_t *SegmentPtr = 0, *BrushStopPtr = 0; - JobDescriptionFileBrushStop *BrushStop = NULL; - JobDescriptionFileSegment *Segment = NULL; - int Dispenser_i, Brush_i,DispenserId; - uint32_t Bytes = 0,readBytes = 0,ImmediateRead = 0,SegmentSize = 0,BrushStopSize = 0; - uint32_t status = OK; - FRESULT Fresult = FR_OK; - FIL *FileHandle = 0; //the system supports a single active file - bool lookForLubrication = false; - int brushCounter = 0; -/`* + /* Parsing the job description file. The job description file simply contains an array of segments and their brush stops. The job description file is meant to be read brush stop by brush stop while the job is in progress. @@ -318,184 +351,13 @@ a. Read brush stop message length. b. Read brush stop message. c. Go to step 2.a x Segment.BrushStopsCount. 3. Go to step 1 until end of file. - *`/ - GeneralHwReady = false; - for (Dispenser_i = 0;Dispenser_i<MAX_SYSTEM_DISPENSERS;Dispenser_i++) - { - DispenserUsedInJob[Dispenser_i] = false; - } - n_segments = 0; -// if (EnableCleaning == true) -// DispenserUsedInJob[CLEANER_DISPENSER] = true; - if (JobTicket->enablelubrication == true) - { - //DispenserUsedInJob[LUBRICANT_DISPENSER] = true; - lookForLubrication = true; - } - if (JobTicket->uploadstrategy == JOB_UPLOAD_STRATEGY__JobDescriptionFile) - { - FileHandle = my_malloc(sizeof(FIL)); - - Fresult = FileOpen(JobTicket->jobdescriptionfile, &Bytes, FileHandle); - if (Fresult == FR_OK) - { - while((readBytes < Bytes)&&(status == OK)) - { - Fresult = f_read(FileHandle,&SegmentSize,4,&ImmediateRead ); - if (Fresult == FR_OK) - { - readBytes += ImmediateRead; - SegmentPtr = my_malloc (SegmentSize); - if (SegmentPtr) - { - Fresult = f_read(FileHandle,SegmentPtr,SegmentSize,&ImmediateRead ); - if (Fresult == FR_OK) - { - readBytes += ImmediateRead; - n_segments++; - Segment = job_description_file_segment__unpack(NULL, SegmentSize, SegmentPtr); - if ((Segment->has_brushstopscount)&&(Segment->brushstopscount)) - { - //REPORT_MSG (Segment->brushstopscount, "Segment->brushstopscount"); - for (Brush_i=0;Brush_i<Segment->brushstopscount;Brush_i++) - { - if (status == ERROR) - break; - Fresult = f_read(FileHandle,&BrushStopSize,4,&ImmediateRead ); - if (Fresult == FR_OK) - { - readBytes += ImmediateRead; - BrushStopPtr = my_malloc (BrushStopSize); - if (BrushStopPtr) - { - Fresult = f_read(FileHandle,BrushStopPtr,BrushStopSize,&ImmediateRead ); - if (Fresult == FR_OK) - { - readBytes += ImmediateRead; - BrushStop = job_description_file_brush_stop__unpack(NULL, BrushStopSize, BrushStopPtr); - //REPORT_MSG (BrushStopSize, "BrushStop"); - if ((brushCounter % 100)==0) - { - SendJobProgress(0.0,0,false, "Processing file"); - Control_WD(ENABLE,55); //activate heaters/dispenser watchdog, 0.5 seconds - } - brushCounter++; - if (BrushStop->n_dispensers) - { - for (Dispenser_i = 0;Dispenser_i < BrushStop->n_dispensers;Dispenser_i++) - { - //prepare the SW structures - DispenserId = BrushStop->dispensers[Dispenser_i]->index; - if (BrushStop->dispensers[Dispenser_i]->nanolitterpersecond>0.0) - { - DispenserUsedInJob[DispenserId] = true; - } - if ((lookForLubrication == true)&&(DispenserId == LUBRICANT_DISPENSER)) - { - lookForLubrication = false; - lubricant_speed = BrushStop->dispensers[Dispenser_i]->nanolitterpersecond/BrushStop->dispensers[Dispenser_i]->nanoliterperpulse; - REPORT_MSG (BrushStop->dispensers[Dispenser_i]->nanolitterpersecond*100, "LUBRICANT nl / sec"); - REPORT_MSG (BrushStop->dispensers[Dispenser_i]->nanoliterperpulse*100, "LUBRICANT nl / pulse"); - REPORT_MSG (BrushStop->dispensers[Dispenser_i]->dispenserstepdivision, "step division"); - if (BrushStop->dispensers[Dispenser_i]->dispenserstepdivision - != DISPENSER_STEP_DIVISION__Auto) - { - //MotorSetMicroStep(HW_Motor_Id, Dispensers[Dispenser_i]->dispenserstepdivision); - lubricant_speed /= - BrushStop->dispensers[Dispenser_i]->dispenserstepdivision; //the dye supply is calculated based on a 1/8 microstep - } - else - { - lubricant_speed/=8;//MotorsCfg[HW_Motor_Id].microstep; //the dye supply is calculated based on a 1/8 microstep - } - REPORT_MSG (lubricant_speed*100, "LUBRICANT_SPEED*100"); - } - }//for dispenser - }//if dispensers - else - { - LOG_ERROR (BrushStop->index, "no dispensers in brushstop"); - } - job_description_file_brush_stop__free_unpacked (BrushStop,NULL); - BrushStop = NULL; - } //read brush stop data - else - { - LOG_ERROR (Fresult, "f_read error"); - status = ERROR; - } - my_free(BrushStopPtr); - BrushStopPtr = NULL; - }//brushstop malloc ok - else - { - LOG_ERROR (BrushStopPtr, "malloc error"); - status = ERROR; - } - }//brushstop size read ok - else - { - LOG_ERROR (Fresult, "f_read error"); - status = ERROR; - } - }//for brushstops - }// if brush stop count - else - { - LOG_ERROR (0, "no brushstops error"); - status = ERROR; - } - job_description_file_segment__free_unpacked(Segment,NULL); - Segment = NULL; - }// read segment data - my_free(SegmentPtr); - SegmentPtr = NULL; - Task_sleep(10); - }//segment malloc - else - { - LOG_ERROR (SegmentPtr, "malloc error"); - status = ERROR; - } - }//segment read size - else - { - LOG_ERROR (Fresult, "f_read error"); - status = ERROR; - } - }//while(readBytes < Bytes) - } - else - { - LOG_ERROR (Fresult, "FileOpen error"); - status = ERROR; - } - }//file job - - if (SegmentPtr) - my_free(SegmentPtr); - SegmentPtr = NULL; - if (BrushStopPtr) - my_free(BrushStopPtr); - BrushStopPtr = NULL; - if (Segment != NULL) - job_description_file_segment__free_unpacked(Segment,NULL); - Segment = NULL; - if (BrushStop != NULL) - job_description_file_brush_stop__free_unpacked (BrushStop,NULL); - BrushStop = NULL; - Fresult = f_close(FileHandle); - GeneralHwReady = true; - REPORT_MSG (n_segments, "Finished checking the file"); - return status; - - } ************************************************************************************************************************************/ bool IDS_MapDispenserUsedinJob(void *JobDetails) { JobTicket* JobTicket = JobDetails; int Dispenser_i, Segment_i,Brush_i,DispenserId; + uploadstrategy = JobTicket->uploadstrategy; if (JobTicket->uploadstrategy == JOB_UPLOAD_STRATEGY__JobDescriptionFile) { return (IDS_MapDispenserUsedinFileJob(JobDetails)); @@ -560,6 +422,22 @@ c. Go to step 2.a x Segment.BrushStopsCount. int NumOfActiveDispensers = 0; int DispenserBuildTimeCounter = 0; #define PRESSURE_READ_TIME_GAP 100 +uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) +{ + if (AutoHoming_Config >= AutoHoming_JobEnd_PowerOn_off) + { + if ((HomingActive[DispenserId] == false)&&(PrimingActive[DispenserId] == false)) + { + Report("Homing Inactive dispenser",__FILE__,DispenserId,HomingActive[DispenserId],RpWarning,PrimingActive[DispenserId],0); + IDS_HomeDispenser (DispenserId, 1000 , NULL); + } + else + { + Report("Inactive dispenser already homing",__FILE__,DispenserId,HomingActive[DispenserId],RpWarning,PrimingActive[DispenserId],0); + } + } + return OK; +} void DispenserPrepareReady(void) { int i; @@ -572,6 +450,17 @@ c. Go to step 2.a x Segment.BrushStopsCount. } REPORT_MSG(Module_IDS,"All Dispensers Prepare Ready"); PrepareReady(Module_IDS,ModuleDone); + for (i=0;i<MAX_SYSTEM_DISPENSERS;i++)//close valve and home inactive dispensers + { + if (DispenserUsedInJob[i] == false) + { + if ((HomingActive[i] == false)&&(PrimingActive[i] == false)) + { + Report("Inactive dispenser close valve",__FILE__,i,HomingActive[i],RpWarning,PrimingActive[i],0); + Control3WayValvesWithCallback (i, MidTank_Dispenser, InactiveDispenserHome); //direction: MidTank_Dispenser or Dispenser_Mixer + } + } + } } //******************************************************************************************************************** uint32_t IDS_PrepareReady(uint32_t deviceID, uint32_t ReadValue) @@ -587,61 +476,192 @@ c. Go to step 2.a x Segment.BrushStopsCount. return OK; // all configured heaters are ready } + char IdsMessage[100]; + int SegmentPrepareWFCFCounter = 0; + bool pressureReady = false,endOfPrepareWCF = false; //******************************************************************************************************************** uint32_t IDS_Prepare_Callback(uint32_t DispenserId, uint32_t ReadValue) { - bool pressureReady = false; int i; int NumofReadyDispensers = 0; TimerMotors_t HW_Motor_Id; float updatedSpeed,tempSpeed; + JobDispenser **Dispensers; + //set the speed only before the first segment, speed is constant accros job + int Dispenser_i,n_dispensers; + double segmentfirst_speed; + //REPORT_MSG((int)DispenserPrepareControlId, "Prepare Callback"); DispenserBuildTimeCounter+=PRESSURE_READ_TIME_GAP; - if (DispenserBuildTimeCounter<(2*eOneSecond)) - { - //REPORT_MSG(DispenserBuildTimeCounter,"waiting 2 seconds for pressure changes"); - return OK; - } - for (i = 0; i < MAX_DYE_DISPENSERS; i++) + if (pressureReady == false) { - //IDS_StopHomeDispenser(i); - if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers +#ifndef SPECIAL_DISPENSERS + if (DispenserBuildTimeCounter<(2*eOneSecond)) { - HW_Motor_Id = DispenserIdToMotorId[i]; - if (GetDispenserPressure(i) > DispenserPreparePressure) - { - NumofReadyDispensers++; - tempSpeed = CurrentDispenserSpeed[i]; - updatedSpeed = (tempSpeed*0.985>100)?tempSpeed*0.985:100; - MotorSetSpeed(HW_Motor_Id, updatedSpeed); - CurrentDispenserSpeed[i] = updatedSpeed; - //Report("IDS reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); - } - else + //REPORT_MSG(DispenserBuildTimeCounter,"waiting 2 seconds for pressure changes"); + return OK; + } +#endif + for (i = 0; i < MAX_DYE_DISPENSERS; i++) + { + //IDS_StopHomeDispenser(i); + if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { - tempSpeed = CurrentDispenserSpeed[i]; - updatedSpeed = (tempSpeed*1.02<1000)?tempSpeed*1.02:1000; - MotorSetSpeed(HW_Motor_Id, updatedSpeed); - CurrentDispenserSpeed[i] = updatedSpeed; - //Report("IDS accelerate speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); + HW_Motor_Id = DispenserIdToMotorId[i]; + if (GetDispenserPressure(i) > DispenserPreparePressure) + { + NumofReadyDispensers++; + CurrentDispenserSpeed[i] = 0; +#ifdef SPECIAL_DISPENSERS + MotorStop(HW_Motor_Id, Hard_Hiz); + //Report("IDS stopped ready",__FILE__,i,(int)(DispenserPreparePressure*100),RpWarning,(int)NumofReadyDispensers,0); +#else + tempSpeed = CurrentDispenserSpeed[i]; + updatedSpeed = (tempSpeed*0.985>100)?tempSpeed*0.985:100; + MotorSetSpeed(HW_Motor_Id, updatedSpeed); + CurrentDispenserSpeed[i] = updatedSpeed; + //Report("IDS reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); +#endif + } + else + { +#ifdef SPECIAL_DISPENSERS + tempSpeed = (DispenserPreparePressure-GetDispenserPressure(i))*InitialDispenserSpeed; + if (tempSpeed<300) + tempSpeed = 300; +#else + tempSpeed = CurrentDispenserSpeed[i]; +#endif + updatedSpeed = (tempSpeed*1.02<InitialDispenserSpeed)?tempSpeed*1.02:InitialDispenserSpeed; + MotorSetSpeed(HW_Motor_Id, updatedSpeed); + CurrentDispenserSpeed[i] = updatedSpeed; +#ifdef SPECIAL_DISPENSERS + //Report("IDS accelerate speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); +#endif + } } } - } - if ((NumofReadyDispensers)&&(DispenserBuildTimeCounter%1000 == 0)) - Report("IDS_Prepare_Callback",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); + if ((NumofReadyDispensers)&&(DispenserBuildTimeCounter%1000 == 0)) + { + Report("IDS_Prepare_Callback",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); + } + if (NumofReadyDispensers>=NumOfActiveDispensers) + { + pressureReady = true; + Report("pressureReady = true;",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); + } + if ((DispenserBuildTimeCounter >= DispenserPrepareTimeout)||(pressureReady == true)) + { + DispenserBuildTimeCounter = 0; + pressureReady = true; + Report("pressureReady = true or timeout;",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); + } + } +#ifndef SPECIAL_DISPENSERS + else if (endOfPrepareWCF == false) + { + if ((DispenserBuildTimeCounter == PRESSURE_READ_TIME_GAP)&&(FirstBrushStop)) + { + Report("start prepare dispensers at rate * WFCF",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); + if (FirstBrushStop) + { + REPORT_MSG(FirstBrushStop->index,"WFCFBrushStopRead Index"); + Dispensers = FirstBrushStop->dispensers; + n_dispensers = FirstBrushStop->n_dispensers; + if (n_dispensers) + { + for (Dispenser_i = 0; Dispenser_i < n_dispensers; Dispenser_i++) + { + DispenserId = Dispensers[Dispenser_i]->index; + HW_Motor_Id = DispenserIdToMotorId[DispenserId]; + if (MotorsCfg[HW_Motor_Id].hardwaremotortype + != DispenserIdToMotorId[DispenserId]) + continue; + if ((DispenserId == CLEANER_DISPENSER)||(DispenserId == LUBRICANT_DISPENSER)) + { + continue; + } + //(Speed*uStep*PPR)/((2*PI*Dispenser_Radius) + segmentfirst_speed = Dispensers[Dispenser_i]->nanolitterpersecond + / Dispensers[Dispenser_i]->nanoliterperpulse; + if (Dispensers[Dispenser_i]->dispenserstepdivision + != DISPENSER_STEP_DIVISION__Auto) + { + //MotorSetMicroStep(HW_Motor_Id, Dispensers[Dispenser_i]->dispenserstepdivision); + segmentfirst_speed /= + Dispensers[Dispenser_i]->dispenserstepdivision; //the dye supply is calculated based on a 1/8 microstep + } + else + { + segmentfirst_speed/=8;//MotorsCfg[HW_Motor_Id].microstep; //the dye supply is calculated based on a 1/8 microstep + } + if (segmentfirst_speed > MINIMAL_MOTOR_SPEED) + { + char IdMessage[100]; + segmentfirst_speed *= (100+WFCF); + segmentfirst_speed /= 100; + DispenserSegmentReady[DispenserId] = false; + //Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer + //IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId,segmentfirst_speed,NULL); + MotorSetSpeed(HW_Motor_Id, segmentfirst_speed); + CurrentDispenserSpeed[Dispenser_i] = segmentfirst_speed; - if (NumofReadyDispensers>=NumOfActiveDispensers) - pressureReady = true; + usnprintf(IdMessage, 80, + "WFCF Dispenser %d nl/sec %d nl/pulse %d Pulse/sec %d speed %d", + DispenserId, + (int) Dispensers[Dispenser_i]->nanolitterpersecond, + (int) Dispensers[Dispenser_i]->nanoliterperpulse, + (int) Dispensers[Dispenser_i]->pulsepersecond*1000, + (int) segmentfirst_speed*1000); + //REPORT_MSG(segmentfirst_speed,IdsMessage); + Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); + //SendJobProgress(0.0, 0, false, IdsMessage); + } + else + { + if (DispenserUsedInJob[DispenserId] == true) + { + MotorStop(HW_Motor_Id, Hard_Hiz); + CurrentDispenserSpeed[Dispenser_i] = 0; + usnprintf(IdsMessage, 80,"Presegment Prepare Dispenser %d stopped",DispenserId,(int) segmentfirst_speed); + Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); + } + } + }//for + }//if n_dis + } + } + if ((InterSegmentStartWFCFDispensers > 0)&&((InterSegmentStartWFCFDispensers-1000) == DispenserBuildTimeCounter)) + { + //close waste valve one second before segment - trial + Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Head); + } + if (DispenserBuildTimeCounter >= InterSegmentStartWFCFDispensers) + { + endOfPrepareWCF = true; + FreeBrushStopFileData(FirstBrushStop); + FirstBrushStop =NULL; + Report("endOfPrepareWCF = true;",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); - if ((DispenserBuildTimeCounter >= DispenserPrepareTimeout)||(pressureReady == true)) + } + } +#endif +#ifdef SPECIAL_DISPENSERS + if (pressureReady == true) +#else + //start new stage + if (endOfPrepareWCF == true) +#endif { SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback ); DispenserPrepareControlId = 0xFF; Report("IDS_Prepare_Callback SafeRemoveControlCallback",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); setRapidPressureRead(false); + pressureReady = false; + endOfPrepareWCF = false; //DispenserPrepareReady(); PrepareReady(Module_IDS,ModuleDone); } @@ -659,11 +679,18 @@ c. Go to step 2.a x Segment.BrushStopsCount. //JobTicket* JobTicket = JobDetails; + JobEndSequence = false; if ((feedertension>0.1)&&(feedertension<1.5)) { Report("Setting pressure from RML feeder tension",__FILE__,__LINE__,(int)(feedertension*100),RpWarning,(int)(DispenserPreparePressure*100),0); DispenserPreparePressure = feedertension; } + if ((pullertension>200)&&(pullertension<1150)) + { + Report("Setting pressure from RML feeder tension",__FILE__,__LINE__,(int)(pullertension),RpWarning,(int)CleaningDispenserSpeed,0); + CleaningDispenserSpeed = pullertension; + } + for (Motor_i = 0;Motor_i < MAX_SYSTEM_DISPENSERS;Motor_i++) { TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[Motor_i]; @@ -699,19 +726,7 @@ c. Go to step 2.a x Segment.BrushStopsCount. } return OK; } - uint32_t IDSPrepareStartDispenserAfterHoming(uint32_t DispenserId, uint32_t Result) - { - double dispenserspeed = 0; - Report("IDSPrepare Start Dispenser After Homing",__FILE__,__LINE__,DispenserId,RpWarning,(int)Result,0); - dispenserspeed = DispenserPrepareSpeed; - if (DispenserUsedInJob[DispenserId] == true) //we actually should check for all dispensers - { - Report("Prepare Speed",__FILE__,__LINE__,DispenserId,RpWarning,(int)dispenserspeed,0); - IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId,dispenserspeed, NULL); - } - return OK; - } void IDSPrepareStart(void) { int i; @@ -724,19 +739,34 @@ c. Go to step 2.a x Segment.BrushStopsCount. } NumOfActiveDispensers = 0; + if (lubricant_speed > 0.1) + IDS_StopHomeDispenser(LUBRICANT_DISPENSER); + if ((EnableIntersegment == true)&&(IntersegmentLength>0)) + IDS_StopHomeDispenser(CLEANER_DISPENSER); for (i = 0; i < MAX_DYE_DISPENSERS; i++) { if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { - IDS_StopHomeDispenser(i); NumOfActiveDispensers++; + if (HomingActive[i] == true) + { + Report("Stop active dispenser homing ",__FILE__,i,HomingActive[i],RpWarning,CurrentDispenserSpeed[i],0); + IDS_StopHomeDispenser(i); + } } else { if (AutoHoming_Config >= AutoHoming_JobEnd_PowerOn_off) { - REPORT_MSG((int)i, "Homing inactive dispenser"); - IDS_HomeDispenser (i, 1000 , NULL); + if ((HomingActive[i] == false)&&(PrimingActive[i] == false)) + { + Report("Homing Inactive dispenser",__FILE__,i,HomingActive[i],RpWarning,PrimingActive[i],0); + IDS_HomeDispenser (i, 1000 , NULL); + } + else + { + Report("Inactive dispenser already homing",__FILE__,i,HomingActive[i],RpWarning,PrimingActive[i],0); + } } } } @@ -750,22 +780,26 @@ c. Go to step 2.a x Segment.BrushStopsCount. if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { - if (HomingActive[i] == false) + //if (HomingActive[i] == false) { - Report("Prepare Speed",__FILE__,__LINE__,i,RpWarning,(int)dispenserspeed,0); + Report("Prepare Speed",__FILE__,HomingActive[i],i,RpWarning,(int)dispenserspeed,0); MotorSetDirection((TimerMotors_t)HW_Motor_Id,MotorsCfg[HW_Motor_Id].directionthreadwize); //set the dispenser to the +#ifdef SPECIAL_DISPENSERS + MotorSetSpeed((TimerMotors_t)HW_Motor_Id,dispenserspeed); //set the dispenser to the +#else IDS_Dispenser_Start_Motor_and_Open_Valve(i,dispenserspeed, NULL); +#endif } - else + /*else { Report("IDSPrepare Stop Dispenser Homing",__FILE__,__LINE__,i,RpWarning,(int)HomingActive[i],0); IDS_HomeDispenserWaitForHomingEnd(i, DispenserPrepareTimeout/2 , IDSPrepareStartDispenserAfterHoming); - } + }*/ } } } DispenserBuildTimeCounter = 0; - DispenserPrepareControlId = AddControlCallback( IDS_Prepare_Callback, PRESSURE_READ_TIME_GAP,TemplateDataReadCBFunction ,0, 0, 0 ); + DispenserPrepareControlId = AddControlCallback(NULL, IDS_Prepare_Callback, PRESSURE_READ_TIME_GAP,TemplateDataReadCBFunction ,0, 0, 0 ); setRapidPressureRead(true); } @@ -889,11 +923,17 @@ c. Go to step 2.a x Segment.BrushStopsCount. } else { - MotorStop(HW_Motor_Id, Hard_Hiz); - CurrentDispenserSpeed[Dispenser_i] = 0; - usnprintf(IdsMessage, 80,"Presegment Prepare Dispenser %d stopped",DispenserId,(int) segmentfirst_speed); - Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); - + if (DispenserUsedInJob[DispenserId] == true) + { +#ifdef SPECIAL_DISPENSERS + IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL); +#else + MotorStop(HW_Motor_Id, Hard_Hiz); +#endif + CurrentDispenserSpeed[Dispenser_i] = 0; + usnprintf(IdsMessage, 80,"Presegment Prepare Dispenser %d stopped",DispenserId,(int) segmentfirst_speed); + Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); + } } } DispenserBuildTimeCounter = 0; @@ -981,6 +1021,8 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); Report("End of Pre-segment Handling",__FILE__,__LINE__,InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); //PreSegmentReady(Module_IDS,ModuleDone); SafeRemoveControlCallback(DispenserPreSegmentControlId,IDSPreSegmentStateCallbackRunner); + if (CurrentDispenserSpeed[CLEANER_DISPENSER]>0) + IDS_Cleaning_Stop_Cleaning_Solution (NULL); setRapidPressureRead(false); } if (EnableCleaning == true) @@ -1007,7 +1049,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); //cleaning return OK; } - +#ifndef SPECIAL_DISPENSERS if ((InterSegmentStartWFCFDispensers > 12000)&&(InterSegmentStartWFCFDispensers == (InterSegmentStepsCount+12000))) { //start prepare 4 seconds before wcf @@ -1068,11 +1110,12 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); CurrentDispenserSpeed[Dispenser_i] = segmentfirst_speed; usnprintf(IdMessage, 80, - "WFCF Dispenser %d nl/sec %d nl/pulse %d speed %d", + "WFCF Dispenser %d nl/sec %d nl/pulse %d Pulse/sec %d speed %d", DispenserId, (int) Dispensers[Dispenser_i]->nanolitterpersecond, (int) Dispensers[Dispenser_i]->nanoliterperpulse, - (int) segmentfirst_speed); + (int) Dispensers[Dispenser_i]->pulsepersecond*1000, + (int) segmentfirst_speed*1000); //REPORT_MSG(segmentfirst_speed,IdsMessage); Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); //SendJobProgress(0.0, 0, false, IdsMessage); @@ -1087,6 +1130,7 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); //close waste valve one second before segment - trial Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Head); } +#endif return OK; } uint32_t IDSCheckSegmentData(void *SegmentDetails, int SegmentId) @@ -1158,13 +1202,13 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) lInterSegmentLength = ((IntersegmentLength*100)*1000/dyeingspeed); lInterSegmentLength-=(lInterSegmentLength%100); //round to a 100 multiplication InterSegmentStepsCount = 0; - DispenserPreSegmentControlId = AddControlCallback( IDSPreSegmentStateCallbackRunner, 100,TemplateDataReadCBFunction ,0, 0, 0 ); + DispenserPreSegmentControlId = AddControlCallback(NULL,IDSPreSegmentStateCallbackRunner, 100,TemplateDataReadCBFunction ,0, 0, 0 ); if (DispenserPreSegmentControlId == 0xFF) { Report("Add control callback failed",__FILE__,__LINE__,(int)100,RpWarning,(int)0,0); return ERROR; } - Report("Add control callback ",__FILE__,__LINE__,(int)100,RpWarning,(int)IntersegmentLength,0); + Report("Add control callback ",__FILE__,__LINE__,(int)100,RpWarning,(int)lInterSegmentLength,0); /*if (EnableCleaning == true) { InterSegmentStartSprayCleaner = 500; @@ -1228,7 +1272,7 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) } else { - LOG_ERROR(FileBrushStop,"BrushStopReadError"); + LOG_ERROR(FileBrushStop,"End run - BrushStopReadError"); JobEndReason = JOB_OUT_OF_DYE; PreSegmentReady(Module_IDS,ModuleFail); } @@ -1270,12 +1314,19 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) } if ((EnableIntersegment == true)&&(IntersegmentLength>0.1)&&(SegmentId>0)) { - MotorStop(HW_Motor_Id,Soft_Hiz); //26/03/19 test without valves - CurrentDispenserSpeed[DispenserId] = 0; - //MotorSetSpeed(HW_Motor_Id, 5); - //CurrentDispenserSpeed[Dispenser_i] = 5; - DispenserPreSegmentReady[DispenserId] = true; //27/03/19 check if job should be stopped - REPORT_MSG(DispenserId,"Dispenser stopped pre Segment"); + if (DispenserUsedInJob[DispenserId] == true) + { +#ifdef SPECIAL_DISPENSERS + IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL); +#else + MotorStop(HW_Motor_Id,Soft_Hiz); //26/03/19 test without valves +#endif + CurrentDispenserSpeed[DispenserId] = 0; + //MotorSetSpeed(HW_Motor_Id, 5); + //CurrentDispenserSpeed[Dispenser_i] = 5; + DispenserPreSegmentReady[DispenserId] = true; //27/03/19 check if job should be stopped + REPORT_MSG(DispenserId,"Dispenser stopped pre Segment"); + } } IDS_Valve_PresegmentReady(DispenserId,0); //27/03/19 to be removed when the presegment handler will be added } @@ -1283,7 +1334,7 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) //Task_sleep(5); PreSegmentWCFStarted = false; PreSegmentPrepareStarted = false; - REPORT_MSG(PreSegmentWCFStarted,"START IDSPresegmentPrepareStart"); + //REPORT_MSG(PreSegmentWCFStarted,"START IDSPresegmentPrepareStart"); // IDSPresegmentPrepareStart(); return OK; @@ -1292,6 +1343,7 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) uint32_t SegmentNumOfBrushStops = 0; double BrushStopTime = 0; +uint32_t BrushStopCounter = 0; void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) { @@ -1334,13 +1386,18 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) segmentfirst_speed, NULL);*/ //Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer +#ifdef SPECIAL_DISPENSERS + IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId,segmentfirst_speed, NULL); +#else MotorSetSpeed(HW_Motor_Id, segmentfirst_speed); +#endif CurrentDispenserSpeed[DispenserId] = segmentfirst_speed; usnprintf(IdsMessage, 80, - "Dispenser %d nl/sec %d nl/pulse %d speed %d steps %d/%d", + "Dispenser %d nl/sec %d nl/pulse %d Pulse/sec %d speed %d steps %d/%d", DispenserId, (int) Dispensers[Dispenser_i]->nanolitterpersecond, (int) Dispensers[Dispenser_i]->nanoliterperpulse, + (int) Dispensers[Dispenser_i]->pulsepersecond*1000, (int) (segmentfirst_speed*1000),Dispensers[Dispenser_i]->dispenserstepdivision,MotorsCfg[HW_Motor_Id].microstep); //REPORT_MSG(segmentfirst_speed,IdsMessage); Report(IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); @@ -1350,8 +1407,15 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) { DispenserSegmentReady[DispenserId] = true; //IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL);*/ - MotorStop(HW_Motor_Id, Hard_Hiz); - CurrentDispenserSpeed[DispenserId] = 0; + if (DispenserUsedInJob[DispenserId] == true) + { +#ifdef SPECIAL_DISPENSERS + IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL); +#else + MotorStop(HW_Motor_Id, Hard_Hiz); +#endif + CurrentDispenserSpeed[DispenserId] = 0; + } //Report("inActive dispenser stopped", __FILE__, __LINE__, DispenserId, RpWarning, segmentfirst_speed, 0); } } @@ -1363,6 +1427,19 @@ uint32_t IDSBrushStopRestartCallback(uint32_t IfIndex, uint32_t readValue) int n_dispensers = 0; JobSegment* Segment = (void *)IfIndex; + if(BrushStopCounter++ < BrushStopTime) + { + return OK; + } + BrushStopCounter = 0; + + + if (JobEndSequence == true) + { + Report("JobEndSequence",__FILE__,__LINE__,(int)JobBrushStopId,RpWarning,(int)SegmentNumOfBrushStops,0); + SafeRemoveControlCallback(BrushStopControlId,IDSBrushStopRestartCallback); + BrushStopControlId = 0Xff; + } if (uploadstrategy == JOB_UPLOAD_STRATEGY__Default) { Dispensers = Segment->brushstops[JobBrushStopId]->dispensers; @@ -1400,6 +1477,18 @@ uint32_t IDSBrushStopRestartCallback(uint32_t IfIndex, uint32_t readValue) } return OK; } +#define VALVE_DELAY 1 +#ifdef VALVE_DELAY + +uint32_t IDSValveControlId = 0xFF; +uint32_t IDSSegmentStateSetValve(uint32_t IfIndex, uint32_t BusyFlag) +{ + SafeRemoveControlCallback(IDSValveControlId,IDSSegmentStateSetValve); + Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Head); + Report("IDSSegmentState set valve after 1 second",__FILE__,__LINE__,(int)0,RpWarning,(int)0,0); + return OK; +} +#endif //******************************************************************************************************************** uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) { @@ -1407,13 +1496,17 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) JobDispenser **Dispensers; int n_dispensers; +#ifdef VALVE_DELAY + IDSValveControlId = AddControlCallback("VALVE_DELAY",IDSSegmentStateSetValve, eOneSecond,TemplateDataReadCBFunction,0,0,0); +#else Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Head); - +#endif + //IDS_Cleaning_Stop_Cleaning_Solution(NULL); SegmentNumOfBrushStops = Segment->n_brushstops; - BrushStopTime = Segment->length/SegmentNumOfBrushStops; //brushstop in meters + BrushStopTime = Segment->length*1000/(double)SegmentNumOfBrushStops; //brushstop in meters //brushstop in millisecond BrushStopTime = ((BrushStopTime*100)/dyeingspeed);//brushstop in seconds - BrushStopTime *= 1000; //brushstop in millisecond - Report("IDSSegmentState",__FILE__,__LINE__,(int)BrushStopTime,RpWarning,(int)SegmentNumOfBrushStops,0); + //BrushStopTime *= 1000; + Report("IDSSegmentState",__FILE__,__LINE__,(int)(BrushStopTime*1000),RpWarning,(int)SegmentNumOfBrushStops,0); if (uploadstrategy == JOB_UPLOAD_STRATEGY__Default) { Dispensers = Segment->brushstops[JobBrushStopId]->dispensers; @@ -1431,12 +1524,21 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) LOG_ERROR(FileBrushStop,"BrushStopReadError"); } } +//handle ending of presegment + if (DispenserPreSegmentControlId != 0xFF) + { + Report("IDS presegment not yet ended!!",__FILE__,__LINE__,(int)InterSegmentStepsCount,RpWarning,(int)lInterSegmentLength,0); + IDS_Cleaning_Stop_Cleaning_Solution (NULL); + RemoveControlCallback(DispenserPreSegmentControlId, IDSPreSegmentStateCallbackRunner ); + DispenserPreSegmentControlId = 0xFF; + } IDS_StartBrushStop(n_dispensers, Dispensers); JobBrushStopId++; if ((BrushStopTime)&&(SegmentNumOfBrushStops > 1)) { - BrushStopControlId = AddControlCallback( IDSBrushStopRestartCallback, BrushStopTime,TemplateDataReadCBFunction ,SegmentDetails, 0, 0 ); + BrushStopCounter = BrushStopTime+10; //move the IDS brush stop handling to highest priority in timing + BrushStopControlId = AddControlCallback(NULL, IDSBrushStopRestartCallback, eOneMillisecond,TemplateDataReadCBFunction ,SegmentDetails, 0, 0 ); if (BrushStopControlId == 0xFF) { Report("Add control callback failed",__FILE__,__LINE__,(int)BrushStopTime,RpWarning,(int)0,0); @@ -1493,7 +1595,11 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) if (DispenserUsedInJob[Dispenser_i]==false)//unconfigured dispenser continue; DispenserDistanceToSpoolReady[Dispenser_i] = false; +#ifdef SPECIAL_DISPENSERS + IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,NULL); +#else MotorStop(DispenserIdToMotorId[Dispenser_i],Hard_Hiz); +#endif Control3WayValvesWithCallback ((Valves_t)Dispenser_i, MidTank_Dispenser, IDS_Valve_DistanceToSpoolValveReady); //direction: MidTank_Dispenser or Dispenser_Mixer CurrentDispenserSpeed[Dispenser_i] = 0; //IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,IDS_Valve_DistanceToSpoolValveReady); @@ -1503,11 +1609,11 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) if (FileBrushStop) FreeBrushStopFileData(FileBrushStop); FileBrushStop = NULL; - + JobEndSequence = true; lInterSegmentLength = (dryerbufferCentimeters*1000/dyeingspeed); lInterSegmentLength-=(lInterSegmentLength%100); //round to a 100 multiplication InterSegmentStepsCount = 0; - DispenserPreSegmentControlId = AddControlCallback( IDSPreSegmentStateCallbackRunner, 100,TemplateDataReadCBFunction ,0, 0, 0 ); + DispenserPreSegmentControlId = AddControlCallback(NULL, IDSPreSegmentStateCallbackRunner, 100,TemplateDataReadCBFunction ,0, 0, 0 ); if (DispenserPreSegmentControlId == 0xFF) { Report("Add control callback failed",__FILE__,__LINE__,(int)100,RpWarning,(int)0,0); @@ -1535,7 +1641,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) { Report("IDS_Valve_EndValveReady start homing",__FILE__,deviceID,(int)AutoHoming_Config,RpWarning,(int)AutoHoming_JobEnd_PowerOn_off,0); - if (deviceID!=LUBRICANT_DISPENSER) + //if (deviceID!=LUBRICANT_DISPENSER) IDS_HomeDispenser (deviceID, 1000 , NULL); } return OK; @@ -1555,6 +1661,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) if (FileBrushStop) FreeBrushStopFileData(FileBrushStop); FileBrushStop = NULL; + FirstBrushStop = NULL; if (DispenserPrepareControlId != 0xFF) { RemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback ); @@ -1566,11 +1673,17 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) DispenserPreSegmentControlId = 0xFF; } + IDS_Dispenser_Store_Data (); + for ( Dispenser_i = 0;Dispenser_i < MAX_SYSTEM_DISPENSERS;Dispenser_i++) { if (DispenserUsedInJob[Dispenser_i] == true) { +#ifdef SPECIAL_DISPENSERS + IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,NULL); +#else MotorStop(DispenserIdToMotorId[Dispenser_i],Hard_Hiz); +#endif Control3WayValvesWithCallback (Dispenser_i, MidTank_Dispenser, IDS_Valve_EndValveReady); //direction: MidTank_Dispenser or Dispenser_Mixer CurrentDispenserSpeed[Dispenser_i] = 0; @@ -1578,6 +1691,8 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) } else { +// RemoveControlCallback(ControlIdtoInactiveDispenserId[Dispenser_i], IDS_Check_Pressure_Callback ); +// ControlIdtoInactiveDispenserId[Dispenser_i] = 0xFF; IDS_Valve_EndValveReady(Dispenser_i,false); } diff --git a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c index 6b29405a8..a358bd724 100644 --- a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c +++ b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c @@ -18,6 +18,7 @@ #include "include.h" #include "Modules/Waste/Waste.h" +#include "Modules/IDS/ids_ex.h" #include "Modules/IFS/ifs.h" #include "Modules/AlarmHandling/AlarmHandling.h" #include "CartridgeValidationRequest.pb-c.h" @@ -25,11 +26,20 @@ #include <PMR/Diagnostics/EventType.pb-c.h> #include "drivers/Valves/Valve.h" #include "Modules/Waste/Waste.h" +#include "../control/control.h" -bool IFS_TimeOutAlarm(); +bool IFS_TimeOutAlarm(bool status); bool ColorMatch(); bool MidTankValvesAction(bool action); +bool IFS_MidTankFilling(void) +{ + return (IFS_info.Ink.time_out > 0); +} +MidTank_t IFS_MidTankIsActive(void) +{ + return (IFS_info.Ink.cart_color); +} //RfidTagContent TagContent[MAX_CARTRIDGES]; NFC_Tag NFCTag[MAX_CARTRIDGES]; @@ -49,8 +59,37 @@ void IFS_Init(void) }*/ +/** + * + * @brief detect cartridge INK Empty + * this function detect changes in IFS INK cartridge + * when MidTank average is bigger the 98% of midtank pressure + * the INK cartridge is empty + * @return bool ret OK = 0 , CartridgeFinished = 1 + */ +bool DetectIfCartridgeFinished(int int_MidTank_Pressure_1000) +{ + +#define CartridgeFinished 1 + bool ret = OK; + static int measure_midtank[5] ; + static int count_measure_midtank = 0; + int i=0; + int sum = 0; + int average = 0; + if ( count_measure_midtank == 5) count_measure_midtank = 0; + measure_midtank[count_measure_midtank] = int_MidTank_Pressure_1000; + count_measure_midtank += 1; + for (i=0;i<5;i++) + sum += measure_midtank[i]; + average = sum/5; + if (abs(average - int_MidTank_Pressure_1000)<10) ret = CartridgeFinished; + //if (average > (int_MidTank_Pressure_1000 * 0.98) ) ret = CartridgeFinished; + + return ret; +} @@ -99,14 +138,18 @@ WHS_sensor CartridgeInkTimeOutCallBackFunction() { WHS_sensor ret = WHS_no_event; double MidTank_Pressure = 0; + int int_MidTank_Pressure_1000 = 0; + + //Enable_MidTank_Pressure_Reading(IFS_info.Ink.cart_color); MidTank_Pressure = Read_MidTank_Pressure_Sensor(IFS_info.Ink.cart_color);// Get_MidTank_Pressure_Sensor(IFS_info.Ink.cart_color); - ReportWithPackageFilter(WasteFilter,"------------ IFS_info.Ink.time_out and Pressure -----------------", __FILE__,__LINE__,(IFS_info.Ink.time_out * SECONDS_5), RpMessage, (int)(MidTank_Pressure*1000), 0); + //Disable_MidTank_Pressure_Reading(IFS_info.Ink.cart_color); + int_MidTank_Pressure_1000 = ((int)(MidTank_Pressure*1000)); + ReportWithPackageFilter(WasteFilter,"------------ IFS_info.Ink.time_out and Pressure -----------------", __FILE__,__LINE__,(IFS_info.Ink.time_out * SECONDS_5), RpMessage, (int_MidTank_Pressure_1000), 0); if (IFS_info.Ink.time_out) IFS_info.Ink.time_out += 1; /*** counter ***/ -//#ifdef timeout_capacity /*** detect the MidTank capacity is full ***/ //Read_MidTank_Pressure_Sensor(IFS_info.Ink.cart_color); if (MidTank_Pressure >= IFS_info.MidTank_capacity + CARTRIDGE_CAPATICY) @@ -115,7 +158,18 @@ WHS_sensor CartridgeInkTimeOutCallBackFunction() WHS_info.event = IFS_MidTankFull; return IFS_MidTankFull; } -//#endif + + /**** detect if the MidTank_Pressure is the same, 5 times ****/ + if (DetectIfCartridgeFinished(int_MidTank_Pressure_1000)) + { + ReportWithPackageFilter(WasteFilter,"------------ INK Cartrigde is empty (by average) -----------------", __FILE__,__LINE__,(IFS_info.Ink.time_out * SECONDS_5), RpMessage, (int_MidTank_Pressure_1000), 0); + IFS_info.Ink.time_out = 0; + WHS_info.event = IFS_MidTankFull; + return IFS_MidTankFull; + } + + + /*** first TimeOut ***/ if (IFS_info.Ink.time_out == CARTRIDGE_INK_TIMEOUT) { @@ -128,7 +182,9 @@ WHS_sensor CartridgeInkTimeOutCallBackFunction() // start timeout // close and open the correct valves + IFS_info.Ink.time_out = 0; MidTankValvesAction(Cartridge_MidTank_OFF); + IFS_info.Ink.time_out = CARTRIDGE_INK_TIMEOUT; } if (IFS_info.Ink.time_out == (CARTRIDGE_INK_TIMEOUT + 1)) //need to open the valve for second chance @@ -141,6 +197,7 @@ WHS_sensor CartridgeInkTimeOutCallBackFunction() { REPORT_MSG(WHS_full," ------------ IFS_Timeout_Second_Time ----------------- "); IFS_info.Ink.time_out = 0; + MidTankValvesAction(Cartridge_MidTank_OFF); WHS_info.event = IFS_Timeout_Second; return IFS_Timeout_Second; } @@ -153,39 +210,12 @@ WHS_sensor CartridgeInkTimeOutCallBackFunction() * * @return OK */ -bool IFS_TimeOutAlarm() +bool IFS_TimeOutAlarm(bool status) { bool ret = OK; - switch (IFS_info.Ink.cart_color) //todo enter the correct color from RFID - { - case 1 : - AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_1_FILL_TIMEOUT, true); - break; - case 2 : - AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_2_FILL_TIMEOUT, true); - break; - case 3 : - AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_3_FILL_TIMEOUT, true); - break; - case 4 : - AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_4_FILL_TIMEOUT, true); - break; - case 5 : - AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_5_FILL_TIMEOUT, true); - break; - case 6 : - AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_6_FILL_TIMEOUT, true); - break; - case 7 : - AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_7_FILL_TIMEOUT, true); - break; - case 8 : - AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_8_FILL_TIMEOUT, true); - break; - default: //wrong color - ret = notOK; - break; - } + + AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_1_FILL_TIMEOUT+IFS_info.Ink.cart_color, status); + return ret; } @@ -211,7 +241,8 @@ bool MidTankValvesAction(bool action) //Cartridge_MidTank_ON of Cartridge_MidTan { Disable_MidTank_Pressure_Reading(IFS_info.Ink.cart_color); } - Valve_Set(IDS_Id_to_AirValve[IFS_info.Ink.cart_color], action ); //Atm_MidTank_OFF/ON + if (IDS_IsHomingActive(IFS_info.Ink.cart_color)==false) + Valve_Set(IDS_Id_to_AirValve[IFS_info.Ink.cart_color], action ); //Atm_MidTank_OFF/ON Valve_Set(IDS_Id_to_CartrideValve[IFS_info.Ink.cart_color], action ); //Atm_MidTank_OFF/ON ret = true; @@ -330,6 +361,58 @@ void ResponseDemo(int MidtankId) IFS_info.Ink.cart_color = MidtankId; WasteTankCBFunction();//call cart is ok } +uint32_t MidTankReadControlId = 0xFF; +int MidTankCounter = 0; +uint32_t MidTankCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) +{ + int MidTankOpenAir = 8; + int MidTankReadPressure = 16; + int MidTankCloseAir = 40; + int MidTankEnd = 48; + int portId; + + if (MidTankCounter >= MidTankEnd) + { + SafeRemoveControlCallback(MidTankReadControlId, MidTankCallBackFunction); + } + else if (MidTankCounter >= MidTankCloseAir) + { + //close air valve for midtank (MidTankCounter-MidTankCloseAir) + portId = (MidTankCounter - MidTankCloseAir) ; //0-7 + if (IDS_IsHomingActive(portId) == false) + { + Disable_MidTank_Pressure_Reading(portId); + Valve_Set(IDS_Id_to_AirValve[portId], Atm_MidTank_OFF ); //Atm_MidTank_OFF/ON + } + } + else if (MidTankCounter >= MidTankReadPressure) + { + //read pressure for midtank (MidTankCounter-MidTankCloseAir) + for (portId = 0;portId < MAX_SYSTEM_DISPENSERS;portId++) + { + Read_MidTank_Pressure_Sensor(portId); + } + } + else if (MidTankCounter >= MidTankOpenAir) + { + //open air valve for midtank (MidTankCounter-MidTankOpenAir) + portId = (MidTankCounter - MidTankOpenAir) ; //0-7 + Enable_MidTank_Pressure_Reading(portId); + Valve_Set(IDS_Id_to_AirValve[portId], Atm_MidTank_ON ); //Atm_MidTank_OFF/ON + } + MidTankCounter++; + return OK; +} + +uint32_t MidTankReading(void) +{ + MidTankCounter = 0; + if (IFS_info.Ink.time_out > 0) + return ERROR; + MidTankReadControlId = AddControlCallback("MidTankReading", MidTankCallBackFunction, 300/*eHundredMillisecond*/, TemplateDataReadCBFunction,0,0, 0 ); + + return OK; +} bool INKCartridgeAuthentication(cartridge_name cart_name) { diff --git a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.h b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.h index 941220425..5304edd93 100644 --- a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.h +++ b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.h @@ -50,10 +50,13 @@ uint32_t ReadCartridgeData(cartridge_name cart_name); bool INKCartridgeAuthentication(cartridge_name cart_name); bool MidTankValvesAction(bool action); //Cartridge_MidTank_ON of Cartridge_MidTank_OFF bool ColorMatch(); -bool IFS_TimeOutAlarm(); +bool IFS_TimeOutAlarm(bool status); void ResponseDemo(int MidtankId); +bool IFS_MidTankFilling(void); +MidTank_t IFS_MidTankIsActive(void); bool CartridgeValidationResponseFunc(MessageContainer* requestContainer); +uint32_t MidTankReading(void); #endif /* MODULES_IFS_IFS_H_ */ diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index 79e4b202a..cef7e5af0 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -6,6 +6,8 @@ #include "include.h" #include "driverlib/gpio.h" +#include "Communication/Connection.h" + #include "Drivers/USB_Communication/USBCDCD.h" #include "StateMachines/Initialization/PowerOffSequence.h" @@ -14,15 +16,38 @@ #include "drivers/adc_sampling/adc.h" #include "drivers/Heater/TemperatureSensor.h" #include "drivers/ADC_Sampling/adc.h" +#include "drivers/Flash_ram/MCU_E2Prom.h" -#include "Drivers/I2C_Communication/Head_Card/PT100/PT100_ADC.h" +#include "Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.h" +#include "Drivers/I2C_Communication/Head_Card/Fan/fan_click.h" +#include "Drivers/I2C_Communication/Head_Card/Fan/Head_Fan.h" #include "drivers/Motors/Motor.h" #include "drivers/FPGA/FPGA_SPI_Comm.h" #include "Modules/IFS/ifs.h" +#include "Modules/IDS/ids_ex.h" +#include "Modules/Control/MillisecTask.h" +#include "modules/thread/thread_ex.h" +#include <Drivers/I2C_Communication/I2C.h> +#include <Drivers/I2C_Communication/Head_Card/I2C_Head_Mux.h> +#include <Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h> +#include "drivers/adc_sampling/adc.h" +#include <Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.h> +#include <Drivers/I2C_Communication/WHS_Card/WHS_data.h> +#include <Drivers/I2C_Communication/WHS_Card/IO_Ports_TCA9555/WHS_IO.h> +#include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC/WHS_Blower.h> +#include <Drivers/I2C_Communication/I2C_Task.h> +#include <Drivers/I2C_Communication/WHS_Card/D_MAX11614/WHS_MAX11614_A2D.h> +#include <Drivers/I2C_Communication/WHS_Card/D_AD5272/WHS_Rheostat.h> + +extern float NumberOfRotationPerPassage; // how many rotations per spool passage //#include "graphics_adapter.h" extern uint8_t Input_Voltage; extern uint8_t Test_Read_Buf[4]; + +extern uint8_t Head_Fan_PWM_Command[2]; +extern uint16_t Head_Fan_Tach[2]; + void Stub_ProgressRequest(MessageContainer* requestContainer) { MessageContainer responseContainer; @@ -33,26 +58,130 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) ProgressResponse response = PROGRESS_RESPONSE__INIT; - if((request->amount == 0xDE) && (request->delay < 8) && (request->delay >= 0)) // read dispenser type + LS status +// uint8_t high_byte = 0; +// uint8_t low_byte = 0; + + uint8_t addr = 0; + uint8_t port = 0; + uint8_t pin = 0; + uint8_t value= 0; + +#ifdef Use_WHS_Card + if(request->amount == 0x3E9) // set TCA9555 u3 or u4 { - response.progress = ((Dispenser_struct[request->delay].Type) << 8) + Dispenser_struct[request->delay].Status; + if (request->delay & 0x8000) // bit15 select the chip address + { + addr = I2CExp2_ADDRESS; + } + else + { + addr = I2CExp1_ADDRESS; + } + + if (request->delay & 0x4000) // bit 14 select port 0 or 1 + { + port = D_TCA9555_PORT_1; + } + else + { + port = D_TCA9555_PORT_0; + } + + pin = ((request->delay & 0x0F00) >> 8); // 8..11 + + if (request->delay & 0x0001) + { + value = 1; + } + else + { + value = 0; + } + response.progress = Write_WHS_9555_io_value( addr, port, pin, value); response.has_progress = true; } else - if((request->amount == 0xAD) && (request->delay == 0xAD01)) //undef AUTO_HOME_DISPENSERS + if((request->amount == 0x3E8) && (request->delay <= 0x0fff))// set WHS Blower speed 0x00-0xfff { - #undef AUTO_HOME_DISPENSERS - response.progress = 01; + //Trigger_WHS_Set_Volt_Blower_Control(request->delay); + Trigger_SetWHSBlowerVoltage (request->delay); + response.progress = 0; response.has_progress = true; } - else - if((request->amount == 0xAD) && (request->delay == 0xAD00)) //define AUTO_HOME_DISPENSERS + else + if(request->amount == 0x3EA) + { + uint16_t tempu16; + switch(request->delay )// set WHS Blower speed 0x00-0xfff + { + case 0: + get_orf_1(&tempu16); + break; + case 1: + get_orf_2(&tempu16); + break; + case 2: + get_orf_3(&tempu16); + break; + case 3: + get_vlev1(&tempu16); + break; + case 4: + get_vlev2(&tempu16); + break; + case 5: + get_gas_out(&tempu16); + break; + case 6: + get_cur_fan(&tempu16); + break; + case 7: + get_cur_vlv1(&tempu16); + break; + case 8: + tempu16 = 0; //get_cur_vlv2(&tempu16); + break; + default : + tempu16 = 0x500; //get_cur_vlv2(&tempu16); + break; + + + } + response.progress = (double)tempu16; + response.has_progress = true; + } + else // + if(request->amount == 0x3EB) { - #define AUTO_HOME_DISPENSERS - response.progress = 01; + uint16_t tempu16; + if (request->delay <= 0x03FF) + { + Trigger_WHS_Set_RDAC(request->delay); // 0 -> 0x03FF + } + else + { + Trigger_WHS_set_Rheostat_to_CLEAN_AIR(); + } + get_gas_out(&tempu16); + response.progress = (double)tempu16; response.has_progress = true; } - else + else +#endif + if((request->amount == 0xDE) && (request->delay < 8) && (request->delay >= 0)) // read dispenser type + LS status + { + response.progress = ((Dispenser_struct[request->delay].Type) << 8) + Dispenser_struct[request->delay].Status; + response.has_progress = true; + } + else + if(request->amount == 0xAD) //undef AUTO_HOME_DISPENSERS + { + if ((request->delay >=AutoHoming_off )&&(request->delay<=AutoHoming_JobEnd_PowerOn_off )) + IDS_Dispenser_SetAutoHoming_Config(request->delay); + response.progress = 01; + response.has_progress = true; + } + else if((request->amount == 0x01) && ((request->delay &0x010000) == 0x010000)) //change mode powerset01 { response.progress = Power_Step_01_Mode(((request->delay &0x00FF00)>>8), request->delay &0x0000FF); @@ -73,23 +202,107 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) } else - if((request->amount == 0x0A) && ((request->delay >= 0) && (request->delay < 8))) //read the midtank calibration - { - response.progress = Initial_Offset_A[request->delay]; + if((request->amount == 0xAC) && (request->delay == 0xAC)) //VAC + { + response.progress = ReadVAC(); response.has_progress = true; - } - else - if((request->amount == 0xB) && ((request->delay >= 0) && (request->delay < 8))) //read the midtank calibration + } + else + if(request->amount == 0x0EAD) //Head Card I/O + { + uint8_t Write_Buf[2] = {0,0}; + uint8_t Script_Slave_Add = request -> delay >> 16; + Write_Buf[0] = request -> delay >> 8; + Write_Buf[1] = request -> delay & 0x0000FF; + + Select_Main_Head_Mux_Channel(); + I2C_Write(I2C_ID_HEAD_CARD, Script_Slave_Add, Write_Buf, 2); + + delayms(1); + + uint8_t Read_Buf[2] = {0,0}; + I2C_Read(I2C_ID_HEAD_CARD, Script_Slave_Add + 1, Read_Buf, 2); + response.progress = Read_Buf[1] << 8 | Read_Buf[0]; + response.has_progress = true; + + } + else + if(request->amount == 0xFEAD) //functions Head Card I/O + { + Select_Main_Head_Mux_Channel(); + + if((request -> delay & 0xFFF000) == 0xCAF000)//Actuator { - response.progress = Slope_B[request->delay]; + HeadCard_Actuators_Control((ACTUATORS)((request -> delay & 0x100)>>8), (bool)((request -> delay & 0x10)>>4), (bool)((request -> delay & 0x01)));//Actuators: ID, power, Direction + response.progress = HeadCard_Actuators_Status((ACTUATORS)(request -> delay & 0x100)>>8); response.has_progress = true; } else - if((request->amount == 0x5C4E) && (request->delay == 0x5C4E)) //Screw Home Pos dir + if((request -> delay & 0xFF0000) == 0xCA0000)//control all heaters { - test_Home_Pos(); + if(request -> delay & 0x01) + { + Disconnect_Mixer_and_12_Heaters_Latch(); + HeadCard_Control_Heaters((request -> delay & 0xFF00)>>8, TRUE); + Connect_Mixer_and_12_Heaters_Latch(); + } + else + HeadCard_Control_Heaters((request -> delay & 0xFF00)>>8, FALSE); } + + } + else + if((request->amount == 0xFAC0) /*&& (request->delay == 0xFAC)*/) //Head Fan control + { + //Head_Fan_PWM_Command[0] = (request->delay & 0xFF) ; + //Test_Head_fan_Click(); + + Head_Fan_PWM_Control(0, request->delay & 0xFF); + + + //response.progress = Fan_Click_Info.Product_ID; + response.progress = Head_Fan_Tach[0]; + response.has_progress = true; + + } + else + if((request->amount == 0xFAC1) /*&& (request->delay == 0xFAC)*/) //Head Fan control + { + Head_Fan_PWM_Control(1, request->delay & 0xFF); + + response.progress = Head_Fan_Tach[1]; + response.has_progress = true; + } + else +#ifdef Use_WHS_Card + if ((request->amount & 0x0000FFF0) == 0xFAC0) //WHS Fan control + { + uint16_t fan_tacho = 0; + + WHS_set_fan_speed(((request->amount & 0x0000000F)-1) , request->delay & 0x000000FF); + WHS_Read_fan_tach(((request->amount & 0x0000000F)-1), &fan_tacho); + response.progress = fan_tacho; + response.has_progress = true; + } + else +#endif + if((request->amount == 0x0A) && ((request->delay >= 0) && (request->delay < 8))) //read the midtank calibration + { + response.progress = Initial_Offset_A[request->delay]; + response.has_progress = true; + } + else + if((request->amount == 0xB) && ((request->delay >= 0) && (request->delay < 8))) //read the midtank calibration + { + response.progress = Slope_B[request->delay]; + response.has_progress = true; + } + else + if((request->amount == 0x5C4E) && (request->delay == 0x5C4E)) //Screw Home Pos dir + { + test_Home_Pos(); + } else if((request->amount == 0x100) && (request->delay == 0x100)) //head card PT100 { @@ -128,6 +341,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if((request->amount == 0xDD) && (request->delay == 0xDD)) //Read Input Voltage { + LOG_ERROR(request->delay,"CheckAcInputVoltage"); CheckAcInputVoltage(); response.progress = (double)Input_Voltage; @@ -136,6 +350,7 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if((request->amount == 0x0CE) && (request->delay == 0x0CE)) //Get Gas Sensor { + LOG_ERROR(request->delay,"FlashInitAndLoad"); FlashInitAndLoad(); response.progress = (double)OK; response.has_progress = true; @@ -144,16 +359,87 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) else if(request->amount == 0x0CC) //Cùøàøïâò÷ Vùêïâùàïíî ø÷ãôíîã÷ { + LOG_ERROR(request->delay,"ResponseDemo"); ResponseDemo(request->delay); response.progress = (double)OK; response.has_progress = true; + } + else + if(request->amount == 0xE0) //fast refresh for pressure + { + LOG_ERROR(request->delay,"setRapidPressureRead"); + setRapidPressureRead(request->delay); + response.progress = (double)OK; + response.has_progress = true; + } + else + if(request->amount == 0xE1) //fast refresh for pressure + { + LOG_ERROR(request->delay,"Starting Dispenser PID"); + IDS_Start_Pid_Testing(request->delay); + response.progress = (double)OK; + response.has_progress = true; + } + else + if(request->amount == 0xE2) //fast refresh for pressure + { + LOG_ERROR(request->delay,"Stoping Dispenser PID"); + IDS_Stop_Pid_Testing(request->delay); + response.progress = (double)OK; + response.has_progress = true; + } + else + if(request->amount == 0xB1) //fast refresh for pressure + { + LOG_ERROR(request->delay,"Set loading arm center"); + Read_Dryer_ENC_Position(); + Task_sleep(500); + Read_Dryer_ENC_Position(); + Task_sleep(500); + + response.progress = (double)MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CENTER,Read_Dryer_ENC_Position(0,0)); + response.has_progress = true; + } + else + if(request->amount == 0xB2) //fast refresh for pressure + { + LOG_ERROR(request->delay,"Set loading arm cycles"); + response.progress = (double)MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,request->delay); + response.has_progress = true; } - else if((request->amount == 0xDF) && (request->delay == 0xDF)) //Power off + + else + if(request->amount == 0xB3) //fast refresh for pressure + { + LOG_ERROR(request->amount,"keep alive test"); + //keepalivetest = true; + response.progress = keepalivetest; + response.has_progress = true; + + } + else + if(request->amount == 0xB4) //fast refresh for pressure + { + LOG_ERROR(request->amount,"IDS_Dispenser_Content_Init"); + IDS_Dispenser_Content_Init(); + //keepalivetest = true; + response.progress = keepalivetest; + response.has_progress = true; + + } + else + if((request->amount == 0xDF) && (request->delay == 0xDF)) //Power off { PowerOffInit(); } else + if(request->amount == 0xF1) + { + LOG_ERROR(request->delay,"NumberOfRotationPerPassage"); + NumberOfRotationPerPassage = (float)(request->delay)/1000; + } + else { response.has_progress = true; int i = 0; diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_FPGARWReg.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_FPGARWReg.c index 2fd85db09..5dcabc576 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_FPGARWReg.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_FPGARWReg.c @@ -24,6 +24,8 @@ #include "drivers/FPGA/FPGA.h" #include "drivers/FPGA/FPGA_Comm.h" +#include "control/control.h" + void Stub_FpgaReadRegRequest(MessageContainer* requestContainer) { @@ -67,10 +69,19 @@ void Stub_FpgaReadRegRequest(MessageContainer* requestContainer) //free(requestContainer); } +uint32_t value = 0,ctlId; +uint32_t ResetCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) +{ + SafeRemoveControlCallback(ctlId, ResetCallBackFunction ); + volatile short *ptr = (volatile short *)(FPGA3_BASE | 0x3D0); + *ptr = (value & 0xFFFF); + return OK; +} void Stub_FpgaWriteRegRequest(MessageContainer* requestContainer) { uint32_t status = PASSED; + volatile short *ptr; MessageContainer responseContainer; @@ -82,9 +93,14 @@ void Stub_FpgaWriteRegRequest(MessageContainer* requestContainer) } else { - volatile short *ptr; + value = request->value; ptr = (volatile short *) (request->address); - *ptr = (request->value & 0xFFFF); + if (request->address == (FPGA3_BASE | 0x3D0)) + { + ctlId = AddControlCallback("Reset", ResetCallBackFunction, 2* eOneSecond, TemplateDataReadCBFunction,ptr,ptr, 0 ); + } + else + *ptr = (request->value & 0xFFFF); } StubFpgaWriteRegResponse response = STUB_FPGA_WRITE_REG_RESPONSE__INIT; diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_MidTankPressureSensor.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_MidTankPressureSensor.c index 20c4806e6..0fab4fdec 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_MidTankPressureSensor.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_MidTankPressureSensor.c @@ -27,6 +27,8 @@ #include "drivers/I2C_Communication/ADC_MUX/ADC_MUX.h" +#include "drivers/I2C_Communication/Head_Card/ADC/Head_ADC.h" + void Stub_MidTankPressureSensorRequest(MessageContainer* requestContainer) { @@ -36,10 +38,20 @@ void Stub_MidTankPressureSensorRequest(MessageContainer* requestContainer) StubMidTankPressureSensorResponse response = STUB_MID_TANK_PRESSURE_SENSOR_RESPONSE__INIT; - response.midtankid = request->midtankid; - response.has_midtankid = true; - response.pressure = Read_MidTank_Pressure_Sensor((MidTank_t)request->midtankid); + + if((MidTank_t)request->midtankid < NUM_OF_MIDTANKS) + { + response.midtankid = request->midtankid; + response.has_midtankid = true; + response.pressure = Read_MidTank_Pressure_Sensor((MidTank_t)request->midtankid); + } + else if((request->midtankid & 0x8000) == 0x8000)//Head ADC + { + response.midtankid = request->midtankid - 0x8000; + response.has_midtankid = true; + response.pressure = Read_Head_ADC(response.midtankid); // Head Current + } response.has_pressure = true; diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c index 701c7b1fc..2baa6bb2d 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Motor.c @@ -41,6 +41,7 @@ #include "driverlib/ssi.h" #include "drivers/SPI/SPI_Comm.h" #include "Modules/Thread/Thread_ex.h" +#include "Modules/Ids/Ids_ex.h" #include "Modules/thread/thread.h" @@ -209,6 +210,14 @@ void Stub_MotorRunRequest(MessageContainer* requestContainer) MotorSetDirection(Motor_Id,Direction); MotorSetSpeed(Motor_Id, Run_Value); + if ((Motor_Id >= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1)&&(Motor_Id <= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8)) + { + CurrentDispenserSpeed[Motor_Id-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1] = Run_Value; + if(request->direction == 0) + CurrentDispenserSpeed[Motor_Id-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1] *= (-1); + + } + #endif @@ -278,6 +287,10 @@ void Stub_MotorStopRequest(MessageContainer* requestContainer) TimerMotors_t Motor_Id = (TimerMotors_t)request->motor_id; //to remove warning MotorStop(Motor_Id, Stop_Command); #endif + if ((Motor_Id >= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1)&&(Motor_Id <= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8)) + { + CurrentDispenserSpeed[Motor_Id-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1] = 0; + } //status = FPGA_ReadVersion((unsigned char)request->fpgaid, &Version, &Year, &Month, &Day); diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_TempSensor.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_TempSensor.c index c320cca80..f4384ab94 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_TempSensor.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_TempSensor.c @@ -1,3 +1,4 @@ + /* * Stub_TempSensor.c * @@ -37,7 +38,8 @@ #include "drivers/Heater/TemperatureSensor.h" #include "Modules/thread/thread.h" - +#include "Drivers/I2C_Communication/Head_Card/PT100/Head_PT100_ADC.h" +#include "Drivers/I2C_Communication/Head_Card/PT100/ADS122X04.h" void Stub_TempSensorRequest(MessageContainer* requestContainer) { @@ -60,10 +62,18 @@ void Stub_TempSensorRequest(MessageContainer* requestContainer) if(first_time_flag == TRUE) { FPGA_SensorInitConfig(); + HeadADCPT100_InitConfigReg(); first_time_flag = FALSE; } - response.temperature_c_mult_by_100 = Test_ADS1220_Internal_Temperature_Sensor(request->stemp_sensor_id); + if(request->stemp_sensor_id < MAX_MAIN_CARD_TEMP_SENS_ID) + { + response.temperature_c_mult_by_100 = Test_ADS1220_Internal_Temperature_Sensor(request->stemp_sensor_id); //main + } + else if(request->stemp_sensor_id < MAX_HEAD_CARD_TEMP_SENS_ID) + { + response.temperature_c_mult_by_100 = Test_ADS122X_Internal_Temperature_Sensor(request->stemp_sensor_id) *100;//head / WHS + } response.has_temperature_c_mult_by_100 = true; /* TemperatureSensorsReset(); @@ -74,21 +84,70 @@ void Stub_TempSensorRequest(MessageContainer* requestContainer) first_time_flag = TRUE; } - else + else if(request->stemp_sensor_id & 0x8000) //Init + Read the temperature from ADC { + request->stemp_sensor_id = request->stemp_sensor_id &~0x8000; response.temp_sensor_id = request->stemp_sensor_id; response.has_temp_sensor_id = true; + if(first_time_flag == TRUE) + { + FPGA_SensorInitConfig(); + HeadADCPT100_SensorInitConfig(); + first_time_flag = FALSE; + } + if(request->stemp_sensor_id < MAX_MAIN_CARD_TEMP_SENS_ID) + { + } + else + if(request->stemp_sensor_id < MAX_HEAD_CARD_TEMP_SENS_ID) + { + control_HeadCard_PT100(HEAD_CONFIG_ODD_PT100_MUX); + delayms(50);//must use deley + control_HeadCard_PT100(HEAD_CONFIG_EVEN_PT100_MUX); + //delayms(5000);//must use deley + //control_HeadCard_PT100(HEAD_CONFIG_ODD_PT100_MUX); + + //response.temperature_c_mult_by_100 = TempSensorResponse[request->stemp_sensor_id].PT100_ADC_Reading_Bits; + //response.temperature_c_mult_by_100 = TempSensorResponse[12].Temperature_C_mult_by_100; + } + } + else // + { + + response.temp_sensor_id = request->stemp_sensor_id; + response.has_temp_sensor_id = true; - //Debug_Start_PT00(request->stemp_sensor_id); if(first_time_flag == TRUE) { FPGA_SensorInitConfig(); + HeadADCPT100_SensorInitConfig(); first_time_flag = FALSE; } + //Debug_Start_PT00(request->stemp_sensor_id); + + if(request->stemp_sensor_id < MAX_MAIN_CARD_TEMP_SENS_ID) + { + response.temperature_c_mult_by_100 = TempSensorResponse[request->stemp_sensor_id].Temperature_C_mult_by_100; + } + else if(request->stemp_sensor_id < MAX_HEAD_CARD_TEMP_SENS_ID) + { + /* + //-------------------------------------------------------------------------------------- + if(request->stemp_sensor_id < HEAD_PT100_ZONE_2_0X80_1) + control_HeadCard_PT100(HEAD_CONFIG_ODD_PT100_MUX); + else + control_HeadCard_PT100(HEAD_CONFIG_EVEN_PT100_MUX); + //--------------------------------------------------------------------------------------- + + */ + //response.temperature_c_mult_by_100 = TempSensorResponse[request->stemp_sensor_id].PT100_ADC_Reading_Bits; + //delayms(1000); + response.temperature_c_mult_by_100 = TempSensorResponse[request->stemp_sensor_id].Temperature_C_mult_by_100; + } @@ -113,13 +172,15 @@ void Stub_TempSensorRequest(MessageContainer* requestContainer) first_flag =1; }*/ //SysCtlDelay(1000); + + /* ----------------- use the last measurement --------------------- TemperatureSensorSync((TEMPERATURE_SENSOR_ID_ENUM)request->stemp_sensor_id); SysCtlDelay(300); TemperatureSendSensorDummyClk((TEMPERATURE_SENSOR_ID_ENUM)request->stemp_sensor_id); SysCtlDelay(400); TemperatureSensorReadFromFPGA_Res((TEMPERATURE_SENSOR_ID_ENUM)request->stemp_sensor_id); + */ - response.temperature_c_mult_by_100 = TempSensorResponse[request->stemp_sensor_id].Temperature_C_mult_by_100; response.has_temperature_c_mult_by_100 = true; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h index 56fb79c23..d1d23598f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread.h @@ -82,6 +82,7 @@ void SetKeepWindingCone(bool value); void SetWinderBackToBaseTime(uint32_t value); uint32_t DancerConfigMessage(HardwareDancer * request); +uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Read); void SetOriginMotorSpeed(float process_speed); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index 5a1bb9063..b9bbf3aab 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -18,6 +18,7 @@ #include "Modules/control/pidalgo.h" #include "Modules/heaters/heaters_ex.h" +#include "Modules/General/buttons.h" #include "StateMachines/Initialization/InitSequence.h" #include "PMR/Hardware/HardwareMotor.pb-c.h" @@ -29,11 +30,18 @@ #include "drivers/I2C_Communication/DAC/Blower.h" #include "drivers/SSI_Comm/Dancer/Dancer.h" #include "drivers/motors/motor.h" +#include "drivers/Flash_ram/MCU_E2Prom.h" #include "PMR/Stubs/StubHeatingTestRequest.pb-c.h" #include "PMR/Stubs/StubHeatingTestResponse.pb-c.h" #include "PMR/Stubs/StubHeatingTestPollRequest.pb-c.h" #include "PMR/Stubs/StubHeatingTestPollResponse.pb-c.h" +#include "PMR/ThreadLoading/StartThreadLoadingRequest.pb-c.h" +#include "PMR/ThreadLoading/StartThreadLoadingResponse.pb-c.h" +#include "PMR/ThreadLoading/ContinueThreadLoadingRequest.pb-c.h" +#include "PMR/ThreadLoading/ContinueThreadLoadingResponse.pb-c.h" +#include "PMR/ThreadLoading/StopThreadLoadingRequest.pb-c.h" +#include "PMR/ThreadLoading/StopThreadLoadingResponse.pb-c.h" //#include <stdint.h> //#include <stdbool.h> @@ -60,17 +68,29 @@ THREAD_LOAD_STAGES_ENUM LoadStages = THREAD_LOAD_INIT; ProcessParameters ProcessParametersClear,ProcessParametersRecover; + uint32_t LoadStatus = OK; + char LoadErrorMsg[100]; int32_t keepmicrostep; int32_t keepkvalrun,keepkvalhold; uint8_t CallbackCounter = 0; uint8_t TimeoutsCounter = 0; + bool SecondTry = false,TryAgain = false; + int MessageState = 0; //0 - none, 1 = start, 2 = continue + uint32_t UnloadingStart = 0; uint8_t NumberOfDrierLoaderCycles = 0; uint32_t status = OK; - uint32_t LoadingControlId = 0xFF,PullerControlId = 0xFF,WinderControlId = 0xFF; + uint32_t LoadingControlId = 0xFF,PullerControlId = 0xFF,WinderControlId = 0xFF, SpeedTControlId = 0xFF; + uint32_t previousPosition = 0, currentPosition = 0,Tinitialpos = 0xFFFF; + uint32_t LoadCounter = 0; + double TotalLoadedLen = 0.0; + double LengthCalculationMultiplier; uint32_t ThreadLoadStateMachine( THREAD_LOAD_STAGES_ENUM LoadStages); uint32_t ThreadLoadControlCBFunction(uint32_t index, uint32_t ReadValue); + uint32_t ThreadLoadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue); uint32_t Thread_Load_Dryer_UnLoading(void); + uint32_t ThreadLoadingReport(void); + bool ThreadLoaded(void); typedef struct { @@ -78,7 +98,7 @@ uint32_t LoadArmBackLash; }LoadArmInfoStruc; LoadArmInfoStruc LoadArmInfo; - char LoadArmPath[50] = "0://SysInfo//LoadArm.cfg"; + //char LoadArmPath[50] = "0://SysInfo//LoadArm.cfg"; //RUN MOTOR TO SWITCH WITH TIMEOUT //RUN MOTOR TO BREAK SENSOR @@ -94,16 +114,31 @@ else return false; } - uint32_t Thread_Load_Init(void) + bool InitCalled = false; + uint32_t Thread_Load_Init(THREAD_LOAD_STAGES_ENUM Stage) { - void* buffer = NULL; - uint32_t Bytes = 0; - FRESULT Fresult = FR_OK; + //void* buffer = NULL; + //uint32_t Bytes = 0; + //FRESULT Fresult = FR_OK; REPORT_MSG(LoadStages, "Thread Load State Machine step"); + load.color = BLINK; + LoadStatus = OK; + LoadArmInfo.LoadArmBackLash = MCU_E2PromDryerBacklashRead(); + REPORT_MSG(LoadArmInfo.LoadArmBackLash, "Thread Load MCU_E2PromDryerBacklashRead"); + if (LoadArmInfo.LoadArmBackLash > 10) + LoadArmInfo.LoadArmBackLash = 5; + //LoadArmInfo.LoadArmRounds = 0xFF; + //EEPROM_STORAGE_DRYER_CYCLES + MCU_E2PromRead(EEPROM_STORAGE_DRYER_CYCLES,&LoadArmInfo.LoadArmRounds); - LoadArmInfo.LoadArmBackLash = 5; - LoadArmInfo.LoadArmRounds = 0xFF; - Fresult = f_mkdir(SW_INFO_DIR); + + Report("Read_Dryer_ENC_Position()",__FILE__,__LINE__,0,RpWarning,Read_Dryer_ENC_Position(),0); + + //if (LoadArmInfo.LoadArmRounds <= 2) + // LoadArmInfo.LoadArmRounds = 20; + Report("MotorMovetoEncoderPosition",__FILE__,__LINE__,LoadArmInfo.LoadArmRounds,RpWarning,LoadArmInfo.LoadArmBackLash,0); + + /*Fresult = f_mkdir(SW_INFO_DIR); if ((Fresult == FR_OK)||(Fresult == FR_EXIST)) { @@ -114,14 +149,18 @@ memcpy (&LoadArmInfo,buffer,sizeof(LoadArmInfo)); free (buffer); } - } + }*/ - Report("Thread_Load_Init",__FILE__,__LINE__,LoadArmInfo.LoadArmBackLash,RpMessage,LoadArmInfo.LoadArmRounds,0); + Report("Thread_Load_Init",__FILE__,__LINE__,LoadArmInfo.LoadArmRounds,RpMessage,LoadArmInfo.LoadArmRounds,0); StopInitSequence(); memcpy (&ProcessParametersRecover,&ProcessParametersKeep,sizeof(ProcessParameters)); //NumberOfDrierLoaderCycles = loadLoadArmParameters(); - LoadStages++; - ThreadLoadStateMachine(LoadStages); + if (Stage == THREAD_LOAD_INIT) + { + LoadStages++; + ThreadLoadStateMachine(LoadStages); + } + InitCalled = true; return OK; } @@ -143,9 +182,12 @@ ProcessParametersClear.headzone6temp = 0; ProcessParametersClear.dyeingspeed = 40; ProcessParametersClear.dryerbufferlength = ProcessParametersKeep.dryerbufferlength; - if (HandleProcessParameters(&ProcessParametersClear)!= OK) + if (HandleProcessParameters(&ProcessParametersClear,false)!= OK) { LOG_ERROR (LoadStages, "Thread_Load_Init failed"); + strcpy(LoadErrorMsg,"Thread_Load_Init failed"); + LoadStatus = ERROR; + TryAgain = true; } else { @@ -160,18 +202,18 @@ } return OK; } - uint32_t Thread_Load_Set_Load_Arm_To_Start_Position_Callback(uint32_t deviceID, uint32_t BusyFlag) + /*uint32_t Thread_Load_Set_Load_Arm_To_Start_Position_Callback(uint32_t deviceID, uint32_t BusyFlag) { // Report("Thread Load State Machine Callback.",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); - /*NumberOfDrierLoaderCycles--; + /`*NumberOfDrierLoaderCycles--; if (NumberOfDrierLoaderCycles) { Report("Thread_Load_Set_Load_Arm_To_Start_Position_Callback",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); status |= MotorMoveWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, (1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize), MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround, Thread_Load_Set_Load_Arm_To_Start_Position_Callback,1000); } - else*/ + else*`/ { Report("Thread_Load_Set_Load_Arm_To_Start_Position_Callback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); //storeLoadArmParameters(); @@ -180,7 +222,7 @@ ThreadLoadStateMachine(LoadStages); } return OK; - } + }*/ uint32_t Thread_Load_Set_Load_Arm_To_Stopper_Callback(uint32_t deviceID, uint32_t BusyFlag) { @@ -196,6 +238,8 @@ RemoveControlCallback(WinderControlId, ThreadLoadControlCBFunction ); WinderControlId = 0xFF; } + + MotorAbortMovetoLimitSwitch(HARDWARE_MOTOR_TYPE__MOTO_SCREW); /*Task_sleep(5) MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz); MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz);*/ @@ -204,6 +248,8 @@ //move to exact location? // Report("Thread Load State Machine Callback.",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); CallbackCounter = 0; + Report("Thread_Load_Set_Load_Arm_To_Stopper time",__FILE__,msec_millisecondCounter - UnloadingStart,msec_millisecondCounter,RpMessage,UnloadingStart,0); + Report("Thread_Load_Set_Load_Arm_To_Stopper_Callback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); NumberOfDrierLoaderCycles=0; //storeLoadArmParameters(); @@ -213,7 +259,7 @@ ThreadLoadStateMachine(LoadStages); return OK; } - uint32_t Thread_Load_Set_Load_Arm_To_Start_Position(void) + /*uint32_t Thread_Load_Set_Load_Arm_To_Start_Position(void) { uint32_t numberOfSteps = 0; REPORT_MSG(LoadStages, "Thread Load State Machine step"); @@ -230,27 +276,66 @@ { Report("Thread_Load_Set_Load_Arm_To_Start_Position",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); status |= MotorMoveToStopper(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, (1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize), - MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/2, Thread_Load_Set_Load_Arm_To_Stopper_Callback,LoadArmInfo.LoadArmBackLash,1000); + MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/4*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep, Thread_Load_Set_Load_Arm_To_Stopper_Callback,LoadArmInfo.LoadArmBackLash,1000); } //Use Notation How Many Rotations In The Drier, Or Check Against Stopper. Move Slowly return OK; - } - uint32_t Thread_Load_Jog_Feeder_To_Middle_Point_Callback(uint32_t deviceID, uint32_t BusyFlag) + }*/ + uint32_t Thread_Load_Jog_Feeder_To_Middle_Point_Callback(uint32_t deviceID, uint32_t Condition) { - CallbackCounter--; - Report("Thread_Load_Jog_Feeder_To_Middle_Point_Callback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); - //storeLoadArmParameters(); - LoadStages++; - ThreadLoadStateMachine(LoadStages); + if (Condition == true) + { + CallbackCounter--; + Report("Thread_Load_Jog_Feeder_To_Middle_Point_Callback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); + //storeLoadArmParameters(); + LoadStages++; + ThreadLoadStateMachine(LoadStages); + } + else + { + CallbackCounter--; + Report("Thread_Load_Jog_Feeder_To_Middle_Point TimeOut!",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); + //storeLoadArmParameters(); + if (SecondTry == true) + { + LoadStages++; + ThreadLoadStateMachine(LoadStages); + LoadStatus = OK; + } + else + { + TimeoutsCounter = 0; + load.color = fastBILNK; + usnprintf(LoadErrorMsg, 100, "Thread_Load_Jog_Feeder_To_Middle_Point TimeOut!"); + LoadStatus = ERROR; + ThreadLoadingReport(); + TryAgain = true; + } + } return OK; } uint32_t Thread_Load_HomingCallback(uint32_t MotorId, uint32_t ReadValue) { - Report("Thread_Load_HomingCallback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); + Report("Thread_Load_HomingCallback",__FILE__,MotorId,LoadStages,RpMessage,CallbackCounter,0); // REPORT_MSG(MotorId, "Thread_Load_HomingCallback Motor Id"); + if ((LoadStages == THREAD_LOAD_CLOSE_ROCKERS)||(LoadStages == THREAD_LOAD_LIFT_ROCKERS)) + { + if((MotorId == HARDWARE_MOTOR_TYPE__MOTO_RLOADING)||(MotorId == HARDWARE_MOTOR_TYPE__MOTO_LLOADING)) + { + if(LoadStages == THREAD_LOAD_CLOSE_ROCKERS) + { + MotorMove(MotorId,MotorsCfg[MotorId].directionthreadwize,400); + Report("Move rockers further down",__FILE__,__LINE__,MotorId,RpMessage,400,0); + Task_sleep(200); + } + MotorSetMicroStep(MotorId, keepmicrostep); + MotorSetKvalRun(MotorId, keepkvalrun); + } + } + if (CallbackCounter) { CallbackCounter--; @@ -265,17 +350,16 @@ { LOG_ERROR(LoadStages,"Load sequence timeout"); TimeoutsCounter = 0; + load.color = fastBILNK; + usnprintf(LoadErrorMsg, 100, "Load sequence timeout %d motor %d",LoadStages, MotorId); + LoadStatus = ERROR; + ThreadLoadingReport(); + TryAgain = true; } else { LoadStages++; - if (LoadStages == THREAD_LOAD_CLOSE_ROCKERS) - { - MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, keepmicrostep); - MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, keepmicrostep); - MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, keepkvalrun); - MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, keepkvalrun); - } + LoadStatus = OK; if (LoadStages == THREAD_LOAD_CLOSE_DANCERS) { MotorSetKvalHold(HARDWARE_MOTOR_TYPE__MOTO_RDANCER, keepkvalhold); @@ -284,6 +368,11 @@ { ThreadLoadStateMachine(LoadStages); } + else + { + load.color = colorON; + ThreadLoadingReport(); + } } } } @@ -311,16 +400,18 @@ MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_LID,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_LID].directionthreadwize, 200, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DH_LID], Thread_Load_HomingCallback,10000); CallbackCounter++; //MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID].directionthreadwize, 200, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID], Thread_Load_HomingCallback,10000); - MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, 0, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID], Thread_Load_HomingCallback,4000); + MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, 0, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID], Thread_Load_HomingCallback,10000); + HeadCard_Actuators_Control(ACTOT, LOW,true); + return OK; } uint32_t Thread_Load_Lift_Dancers(void) { REPORT_MSG(LoadStages, "Thread Load State Machine step"); - keepkvalhold = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].kvalhold; + /*keepkvalhold = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].kvalhold; MotorSetKvalHold(HARDWARE_MOTOR_TYPE__MOTO_RDANCER, 40); CallbackCounter++; - MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RDANCER,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize, 15, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_RDANCER], Thread_Load_HomingCallback,15000); + MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RDANCER,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize, 15, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_RDANCER], Thread_Load_HomingCallback,15000);*/ CallbackCounter++; MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LDANCER1,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1].directionthreadwize, 500, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1], Thread_Load_HomingCallback,25000); @@ -331,6 +422,19 @@ { keepmicrostep = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].microstep; keepkvalrun = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].kvalrun; + if (keepkvalrun>=25) + keepkvalrun = 25; + + Report("Read_Dryer_ENC_Position()",__FILE__,__LINE__,0,RpWarning,Read_Dryer_ENC_Position(),0); + + Report("Thread_Load_Lift_Rockers",__FILE__,__LINE__,keepkvalrun,RpMessage,keepmicrostep,0); + + Report("Thread_Load_Lift_right dancer",__FILE__,__LINE__,0,RpMessage,0,0); + keepkvalhold = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].kvalhold; + MotorSetKvalHold(HARDWARE_MOTOR_TYPE__MOTO_RDANCER, 40); + CallbackCounter++; + MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RDANCER,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize, 22, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_RDANCER], Thread_Load_HomingCallback,15000); + REPORT_MSG(LoadStages, "Thread Load State Machine step"); MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 8); MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 8); @@ -347,10 +451,11 @@ uint32_t Thread_Load_Initial_Tension(void) //Check Spool Presence, run Winder Until Break Sensor Is Identifieing Movement For A Second { REPORT_MSG(LoadStages, "Thread Load State Machine step"); + load.color = BLINK; if (FPGA_Read_limit_Switches(GPI_SW_SPOOL_EXISTS)==LIMIT) { REPORT_MSG(LIMIT, "No cone in winder"); - return ERROR; + //return ERROR; } CallbackCounter++; MotorMovetoBreakSensor (HARDWARE_MOTOR_TYPE__MOTO_WINDER,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].directionthreadwize, 500, Thread_Load_HomingCallback,10000); @@ -360,6 +465,17 @@ } uint32_t Thread_Load_Close_Rockers(void) { + keepmicrostep = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].microstep; + keepkvalrun = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].kvalrun; + if (keepkvalrun>=25) + keepkvalrun = 25; + Report("Thread_Load_Close_Rockers",__FILE__,__LINE__,keepkvalrun,RpMessage,keepmicrostep,0); + + MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 8); + MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 8); + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 70); + MotorSetKvalRun(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 70); + REPORT_MSG(LoadStages, "Thread Load State Machine step"); CallbackCounter++; MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].directionthreadwize, 250, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_RLOADING], Thread_Load_HomingCallback,25000); @@ -376,7 +492,10 @@ CallbackCounter++; MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RDANCER,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize, 15, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_RDANCER], Thread_Load_HomingCallback,10000); CallbackCounter++; - MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LDANCER1,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1].directionthreadwize, 500, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1], Thread_Load_HomingCallback,25000); + MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_LDANCER1, 500); + +// MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LDANCER1,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1].directionthreadwize, 500, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1], Thread_Load_HomingCallback,25000); + MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_LDANCER1, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1].directionthreadwize, (5000*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1].microstep), Thread_Load_HomingCallback,20000); return OK; } @@ -390,7 +509,8 @@ MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DH_LID,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_LID].directionthreadwize, 200, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DH_LID], Thread_Load_HomingCallback,10000); CallbackCounter++; // MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID].directionthreadwize, 200, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID], Thread_Load_HomingCallback,10000); - MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, 2, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID], Thread_Load_HomingCallback,4000); + MotorGotoWithCallback(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID, 2, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID], Thread_Load_HomingCallback,10000); + HeadCard_Actuators_Control(ACTOT, LOW,false); return OK; } @@ -399,7 +519,7 @@ REPORT_MSG(LoadStages, "Thread Load State Machine step"); ActivateHeadMagnet(); - if (HandleProcessParameters(&ProcessParametersRecover)!= OK) + if (HandleProcessParameters(&ProcessParametersRecover,false)!= OK) { LOG_ERROR (LoadStages, "Thread_Load_Resume_Heating failed"); } @@ -416,7 +536,7 @@ { REPORT_MSG(LoadStages, "Thread Load State Machine step"); CallbackCounter++; - MotorMovetoDancerPosition (HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].directionthreadwize, 100, FEEDER_DANCER ,true, Thread_Load_Jog_Feeder_To_Middle_Point_Callback,2000); + MotorMovetoDancerPosition (HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].directionthreadwize, 100, FEEDER_DANCER ,true, Thread_Load_Jog_Feeder_To_Middle_Point_Callback,4000); return OK; } @@ -430,11 +550,20 @@ RemoveControlCallback(LoadingControlId, ThreadLoadControlCBFunction ); LoadingControlId = 0xFF; } + if (SpeedTControlId != 0xFF) + { + RemoveControlCallback(SpeedTControlId, ThreadLoadLengthCBFunction ); + SpeedTControlId = 0xFF; + } + Report("Total Feeder load",__FILE__,__LINE__,dryerbufferCentimeters,RpMessage,TotalLoadedLen,0); + if (CallbackCounter) { CallbackCounter--; if (CallbackCounter == 0) { + LoadStatus = OK; + LoadStages++; if (LoadStages != THREAD_LOAD_INITIAL_TENSION) //on this satge we should wait for user call { @@ -447,34 +576,87 @@ return OK; } + float numberOfSteps = 0; + float numberOfCycles = 0; + double DrierPrevLocation = 0; uint32_t Thread_Load_Dryer_Loading_Callback(uint32_t MotorId, uint32_t ReadValue) { - Report("Thread_Load_Dryer_Loading_Callback",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); - Report("Thread_Load_Dryer_Loading_Callback details",__FILE__,__LINE__,MotorId,RpMessage,CallbackCounter,0); - /*if(LoadingControlId != 0xFF) + numberOfCycles++; + + Report("Thread_Load_Dryer_Loading_Callback",__FILE__,(int)TotalLoadedLen,(int)DrierPrevLocation,RpMessage,ReadValue,0); + + if ((fabs (TotalLoadedLen -DrierPrevLocation)>50 )&&(ReadValue == NOTBUSY)) { - MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz); - RemoveControlCallback(LoadingControlId, ThreadLoadControlCBFunction ); - LoadingControlId = 0xFF; - }*/ - MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Thread_Load_Dryer_MovetoEncoderPosition_Callback,10000); + DrierPrevLocation = TotalLoadedLen ; + //Report("Thread_Load_Dryer_Loading_Callback",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); + //Report("Thread_Load_Dryer_Loading_Callback details",__FILE__,(int)(TotalLoadedLen),numberOfCycles,RpMessage,CallbackCounter,0); + if (LoadStages != THREAD_LOAD_DRYER_LOADING) + { + return OK; + } + if (numberOfCycles<LoadArmInfo.LoadArmRounds) + { + MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize, + numberOfSteps, Thread_Load_Dryer_Loading_Callback, 10000); + } + else + { + MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Thread_Load_Dryer_MovetoEncoderPosition_Callback,10000); + MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,numberOfCycles); + Report("Store Number of cycles in drier",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmInfo.LoadArmRounds,0); + } + } + else + { + LOG_ERROR(LoadStages,"Load sequence timeout - drier loading"); + TryAgain = true; + SecondTry = false; + Report("Store Number of cycles in drier - halted",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmInfo.LoadArmRounds,0); + MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,numberOfCycles); + TimeoutsCounter = 0; + load.color = fastBILNK; + usnprintf(LoadErrorMsg, 100, "Load sequence timeout %d motor %d",LoadStages, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM); + LoadStatus = ERROR; + MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, 200); + if(LoadingControlId != 0xFF) + { + MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz); + RemoveControlCallback(LoadingControlId, ThreadLoadControlCBFunction ); + LoadingControlId = 0xFF; + } + if (SpeedTControlId != 0xFF) + { + RemoveControlCallback(SpeedTControlId, ThreadLoadLengthCBFunction ); + SpeedTControlId = 0xFF; + } + Report("Total Feeder load",__FILE__,__LINE__,dryerbufferCentimeters,RpMessage,TotalLoadedLen,0); + + ThreadLoadingReport(); + } return OK; } uint32_t Thread_Load_Dryer_Loading(void) { REPORT_MSG(LoadStages, "Thread Load State Machine step"); - LoadArmInfo.LoadArmRounds = (int)dryerbufferlength; + + if (dryerbufferlength) + LoadArmInfo.LoadArmRounds = (int)dryerbufferlength; if (LoadArmInfo.LoadArmRounds <= 2) - LoadArmInfo.LoadArmRounds = 20; - float numberOfSteps = 0; + LoadArmInfo.LoadArmRounds = 30; //Start Feeder Pid, Rotate Loading Arm Counter Thread Direction X Circles According To Rml. Feeder Speed Is 40 SetOriginMotorSpeed(19); // OriginalMotorSpd_2PPS[FEEDER_MOTOR] = 1000; // CurrentControlledSpeed[FEEDER_MOTOR] = 1000; - numberOfSteps = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround*LoadArmInfo.LoadArmRounds*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius; - numberOfSteps -= 100; + //MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,LoadArmInfo.LoadArmRounds); + ThreadMotorIdToMotorId[FEEDER_MOTOR] = HARDWARE_MOTOR_TYPE__MOTO_RDRIVING ; + ThreadMotorIdToMotorId[DRYER_MOTOR] = HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING; + + MCU_E2PromRead(EEPROM_STORAGE_DRYER_CENTER,&DrierPrevLocation); + numberOfCycles = 0; + numberOfSteps = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/**LoadArmInfo.LoadArmRounds*/*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius; +// numberOfSteps -= 100; //numberOfSteps = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround*3.3*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius; Report("Thread Load State Machine step.",__FILE__,LoadStages,numberOfSteps,RpMessage,(int)(MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius),0); MotorControlConfig[FEEDER_MOTOR].m_params.MAX = 1; @@ -498,16 +680,27 @@ MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/4*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius); - LoadingControlId = AddControlCallback(ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+FEEDER_MOTOR),FEEDER_DANCER,FEEDER_MOTOR); + LoadingControlId = AddControlCallback(NULL,ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+FEEDER_MOTOR),FEEDER_DANCER,FEEDER_MOTOR); Report("AddControlCallback feeder",__FILE__,__LINE__,LoadingControlId,RpMessage,IfTypeThread*0x100+FEEDER_MOTOR,0); + if (SpeedTControlId != 0xFF) + { + RemoveControlCallback(SpeedTControlId,ThreadLoadLengthCBFunction); + SpeedTControlId = 0xFF; + } + //SetMotHome(ThreadMotorIdToMotorId[Motor_i]); + LengthCalculationMultiplier = (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].pulleyradius*2*PI)/(MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].pulseperround*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].microstep); + TotalLoadedLen = 0; + DrierPrevLocation = 200; //initial safe value + SpeedTControlId = AddControlCallback("Thread length",ThreadLoadLengthCBFunction, eHundredMillisecond,MotorGetPositionFromFPGA,(IfTypeThread*0x100+HARDWARE_MOTOR_TYPE__MOTO_RDRIVING),HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,0); + Tinitialpos = 0xFFFF;previousPosition = 0; currentPosition = 0; CallbackCounter++; Report("Thread_Load_Dryer_Loading",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize, - numberOfSteps, Thread_Load_Dryer_Loading_Callback, 100000); - + numberOfSteps-400, Thread_Load_Dryer_Loading_Callback, 10000); +//shlomo //Keep Notation How Many Rotations In The Dryer //LoadArmInfo.LoadArmBackLash = 0; - LoadArmInfo.LoadArmRounds = (int)dryerbufferlength; + //LoadArmInfo.LoadArmRounds = (int)dryerbufferlength; //FileWrite(&LoadArmInfo, sizeof(LoadArmInfo),LoadArmPath,BIOS_WAIT_FOREVER); return OK; } @@ -526,12 +719,13 @@ { REPORT_MSG(LoadStages, "Thread Load State Machine step"); ThreadJoggingFunc(20); - LoadingControlId = AddControlCallback(Thread_Load_Jog_ThreadStop, eOneSecond*5,Control_Read_Dancer_Position,(IfTypeThread*0x100+FEEDER_MOTOR),FEEDER_DANCER,FEEDER_MOTOR); + LoadingControlId = AddControlCallback("Load jog",Thread_Load_Jog_ThreadStop, eOneSecond*25,Control_Read_Dancer_Position,(IfTypeThread*0x100+FEEDER_MOTOR),FEEDER_DANCER,FEEDER_MOTOR); return OK; } uint32_t Thread_Load_End(void) { REPORT_MSG(LoadStages,"Loading Ended"); + ThreadLoadingReport(); if(LoadingControlId != 0xFF) { MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz); @@ -550,6 +744,11 @@ RemoveControlCallback(WinderControlId, ThreadLoadControlCBFunction ); WinderControlId = 0xFF; } + if (SpeedTControlId != 0xFF) + { + RemoveControlCallback(SpeedTControlId, ThreadLoadLengthCBFunction ); + SpeedTControlId = 0xFF; + } MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM); MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_RLOADING); @@ -559,21 +758,102 @@ MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID); MotorStopAction(HARDWARE_MOTOR_TYPE__MOTO_DH_LID); MotorStop(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Hard_Stop); + if (LoadStages!=THREAD_LOAD_END) + { + usnprintf(LoadErrorMsg, 100, "Load sequence stopped by user on stage %d",LoadStages); + LoadStatus = ERROR; + } + LoadStages = THREAD_LOAD_INIT; + load.color = colorON; + return OK; + } + FPGA_GPI_ENUM screw[2] = {GPI_LS_SCREW_LEFT,GPI_LS_SCREW_RIGHT}; + int Screw_Dir = false; + + uint32_t Thread_Load_switchCallback(uint32_t deviceID, uint32_t BusyFlag) + { + if (LoadStages != THREAD_LOAD_SET_LOAD_ARM_TO_START_POSITION) + { + return OK; + } + Screw_Dir = 1-Screw_Dir; + status = MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_SCREW,Screw_Dir, 80, screw[Screw_Dir], Thread_Load_switchCallback,13000); + + return OK; + } + uint32_t Thread_Load_Dryer_UnLoading_Callback(uint32_t MotorId, uint32_t ReadValue) + { + numberOfCycles++; + uint32_t temp = Read_Dryer_ENC_Position(); + Report("Thread_Load_Dryer_UnLoading_Callback",__FILE__,ReadValue,temp,RpMessage,DrierPrevLocation,0); + //Report("Thread_Load_Dryer_UnLoading_Callback details",__FILE__,(int)(TotalLoadedLen),numberOfCycles,RpMessage,CallbackCounter,0); + if ((abs (temp -DrierPrevLocation)>1000 )&&(ReadValue == NOTBUSY)) + { + DrierPrevLocation = temp; + if (LoadStages != THREAD_LOAD_SET_LOAD_ARM_TO_START_POSITION) + { + return OK; + } + if (numberOfCycles<LoadArmInfo.LoadArmRounds) + { + MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize, + numberOfSteps, Thread_Load_Dryer_UnLoading_Callback, 10000); + } + else + { + MotorMovetoEncoderPosition(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM,Thread_Load_Set_Load_Arm_To_Stopper_Callback,10000); + MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,LoadArmInfo.LoadArmRounds-numberOfCycles); + Report("Store Number of cycles in drier",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmInfo.LoadArmRounds,0); + } + } + else + { + LOG_ERROR(LoadStages,"Load sequence timeout - drier Unloading"); + Report("Store Number of cycles in drier - halted",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmInfo.LoadArmRounds,0); + MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,LoadArmInfo.LoadArmRounds-(numberOfCycles-2));//it takes two cycles to identify a stop of the arm + TimeoutsCounter = 0; + CallbackCounter = 0; + if(PullerControlId != 0xFF) + { + MotorStop(ThreadMotorIdToMotorId[POOLER_MOTOR],Hard_Hiz); + RemoveControlCallback(PullerControlId, ThreadLoadControlCBFunction ); + PullerControlId = 0xFF; + } + if(WinderControlId != 0xFF) + { + MotorStop(ThreadMotorIdToMotorId[WINDER_MOTOR],Hard_Hiz); + RemoveControlCallback(WinderControlId, ThreadLoadControlCBFunction ); + WinderControlId = 0xFF; + } + + MotorAbortMovetoLimitSwitch(HARDWARE_MOTOR_TYPE__MOTO_SCREW); + /*Task_sleep(5) + MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz); + MotorStop(ThreadMotorIdToMotorId[FEEDER_MOTOR],Hard_Hiz);*/ + + MotorStop(HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING,Hard_Hiz); + load.color = fastBILNK; + usnprintf(LoadErrorMsg, 100, "Load sequence timeout %d motor %d",LoadStages, HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM); + LoadStatus = ERROR; + TryAgain = true; + ThreadLoadingReport(); + } return OK; } uint32_t Thread_Load_Dryer_UnLoading(void) { + uint32_t temp; REPORT_MSG(LoadStages, "Thread UnLoad State Machine step"); - LoadArmInfo.LoadArmRounds = 0; + //LoadArmInfo.LoadArmRounds = 0; //uint32_t numberOfSteps = 0; //Start Feeder Pid, Rotate Loading Arm Counter Thread Direction X Circles According To Rml. Feeder Speed Is 40 - SetOriginMotorSpeed(19); + SetOriginMotorSpeed(22); // OriginalMotorSpd_2PPS[FEEDER_MOTOR] = 1000; // CurrentControlledSpeed[FEEDER_MOTOR] = 1000; //numberOfSteps = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround*LoadArmInfo.LoadArmRounds*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius; - MotorControlConfig[POOLER_MOTOR].m_params.MAX = 1; + /*MotorControlConfig[POOLER_MOTOR].m_params.MAX = 1; MotorControlConfig[POOLER_MOTOR].m_params.MIN = MotorsControl[POOLER_MOTOR].outputproportionalpowerlimit*-1; MotorControlConfig[POOLER_MOTOR].m_params.Kd = MotorsControl[POOLER_MOTOR].derivativetime; MotorControlConfig[POOLER_MOTOR].m_params.Kp = MotorsControl[POOLER_MOTOR].proportionalgain; @@ -593,7 +873,7 @@ MotorSetDirection(HARDWARE_MOTOR_TYPE__MOTO_LDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDRIVING].directionthreadwize); PullerControlId = AddControlCallback(ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+POOLER_MOTOR),POOLER_DANCER,POOLER_MOTOR); - Report("AddControlCallback Puller",__FILE__,__LINE__,PullerControlId,RpMessage,IfTypeThread*0x100+POOLER_MOTOR,0); + Report("AddControlCallback Puller",__FILE__,__LINE__,PullerControlId,RpMessage,IfTypeThread*0x100+POOLER_MOTOR,0);*/ //////////////////////// MotorControlConfig[WINDER_MOTOR].m_params.MAX = 1; MotorControlConfig[WINDER_MOTOR].m_params.MIN = MotorsControl[WINDER_MOTOR].outputproportionalpowerlimit*-1; @@ -614,7 +894,7 @@ MotorControlConfig[WINDER_MOTOR].m_SetParam = 0;//need to update SetParams on presegment stage MotorSetDirection(HARDWARE_MOTOR_TYPE__MOTO_WINDER,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].directionthreadwize); - WinderControlId = AddControlCallback(ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+WINDER_MOTOR),WINDER_DANCER,WINDER_MOTOR); + WinderControlId = AddControlCallback(NULL,ThreadLoadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+WINDER_MOTOR),WINDER_DANCER,WINDER_MOTOR); Report("AddControlCallback Winder",__FILE__,__LINE__,WinderControlId,RpMessage,IfTypeThread*0x100+WINDER_MOTOR,0); //////////////////////// @@ -624,33 +904,60 @@ CallbackCounter++; //MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize, // numberOfSteps, Thread_Load_Dryer_Loading_Callback, 100000); - Report("Thread_Load_Set_Load_Arm_To_Start_Position",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0); - LoadArmInfo.LoadArmBackLash = 5; + //Report("Store Number of cycles in drier - halted",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmInfo.LoadArmRounds,0); + //MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,numberOfCycles); +//shlomo + UnloadingStart = msec_millisecondCounter; + numberOfSteps = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/**LoadArmInfo.LoadArmRounds*/*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].microstep*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius; + numberOfCycles = 0; + + MCU_E2PromRead(EEPROM_STORAGE_DRYER_CENTER,&temp); + MCU_E2PromRead(EEPROM_STORAGE_DRYER_CYCLES,&LoadArmInfo.LoadArmRounds); + DrierPrevLocation = temp; + Report("Thread_Load_Set_Load_Arm_To_Start_Position",__FILE__,UnloadingStart,DrierPrevLocation,RpMessage, LoadArmInfo.LoadArmRounds,0); + MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/4*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius); +// status |= MotorMoveToStopper(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, (1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize), +// MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/4, Thread_Load_Set_Load_Arm_To_Stopper_Callback,LoadArmInfo.LoadArmBackLash,1000); + MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize, + numberOfSteps-400, Thread_Load_Dryer_UnLoading_Callback, 10000); - status |= MotorMoveToStopper(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, (1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize), - MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/4, Thread_Load_Set_Load_Arm_To_Stopper_Callback,LoadArmInfo.LoadArmBackLash,1000); + Screw_Dir = 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize; + status = MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_SCREW,Screw_Dir, 80, screw[Screw_Dir], Thread_Load_switchCallback,20000); //Keep Notation How Many Rotations In The Dryer - //LoadArmInfo.LoadArmBackLash = 0; - LoadArmInfo.LoadArmRounds = (int)dryerbufferlength; - FileWrite(&LoadArmInfo, sizeof(LoadArmInfo),LoadArmPath,BIOS_WAIT_FOREVER); + //LoadArmInfo.LoadArmRounds = (int)dryerbufferlength; + load.color = BLINK; return OK; } uint32_t ThreadLoadStateMachine( THREAD_LOAD_STAGES_ENUM ReadValue) { REPORT_MSG(ReadValue,"ThreadLoadStateMachine"); + ThreadLoaded(); if (LoadStages!=ReadValue) LoadStages = ReadValue; switch (ReadValue) { case THREAD_LOAD_INIT: //LoadStages++; - Thread_Load_Init(); + MessageState = 1; + + Thread_Load_Init(ReadValue); break; case THREAD_LOAD_REDUCE_HEAT: //HEATERS OFF, DRYER BLOWER OFF, BLOWER LOW, //LoadStages++; + MessageState = 1; + if (InitCalled == false) + { + REPORT_MSG(ReadValue,"Thread_Load_Init called from 1"); + Thread_Load_Init(ReadValue); + } + else + { + REPORT_MSG(ReadValue,"Thread_Load_Init called from 0"); + } Thread_Load_Reduce_Heat(); + InitCalled = false; break; case THREAD_LOAD_SET_LOAD_ARM_TO_START_POSITION://USE NOTATION HOW MANY ROTATIONS IN THE DRYER, OR CHECK AGAINS STOPPER. MOVE SLOWLY //LoadStages++; @@ -705,6 +1012,7 @@ case THREAD_LOAD_JOG_THREAD: //JOG THREAD SHORTLY TO MAKE SURE SPOOL IS RUNNING. REPORT END OF LOADING //LoadStages++; Thread_Load_Jog_Thread(); + ThreadLoadingReport(); break; case THREAD_LOAD_END: LoadStages = THREAD_LOAD_END; @@ -723,19 +1031,90 @@ uint32_t ThreadLoadButton(THREAD_LOAD_STAGES_ENUM ReadValue) Report("ThreadLoadButton called on job",__FILE__,__LINE__,LoadStages,RpMessage,ReadValue,0); return ERROR; } + if (CallbackCounter) + { + Report("ThreadLoadButton called when the loading is active",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0); + return ERROR; + } Report("ThreadLoadButton",__FILE__,__LINE__,LoadStages,RpMessage,ReadValue,0); - if (LoadStages > ReadValue) + Report("ThreadLoadButton params",__FILE__,LoadStatus,TryAgain,RpMessage,SecondTry,0); + if (LoadStatus == ERROR) { - ThreadLoadStateMachine(LoadStages+1); + if ((SecondTry == false)&&(TryAgain == true)) + { + LoadStatus = OK; + SecondTry = true; + Report("Calling State machine",__FILE__,LoadStages,LoadStatus,RpMessage,SecondTry,0); + ThreadLoadStateMachine(LoadStages); + } + else + { + SecondTry = false; + Report("Calling State machine",__FILE__,LoadStages,LoadStatus,RpMessage,SecondTry,0); + ThreadLoadStateMachine(LoadStages+1); + } } else { - ThreadLoadStateMachine(ReadValue); + Report("Calling State machine status OK",__FILE__,ReadValue,LoadStatus,RpMessage,SecondTry,0); + ThreadLoadStateMachine(LoadStages); } return OK; } -uint32_t LoadCounter = 0; +uint32_t ThreadLoadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) +{ + uint32_t positionDiff = 0,prevprev; + double length = 0.0; + char lenstr[150]; + static int counter = 0; + int index = MAX_THREAD_MOTORS_NUM; + if (IfIndex>>8 != IfTypeThread) + { + LOG_ERROR (IfIndex, "Wrong Interface type"); + return 0xFFFFFFFF; + } + index = IfIndex&0xFF; +// if (CurrentRequestedLength == 0.0) +// return OK; + if (index != HARDWARE_MOTOR_TYPE__MOTO_RDRIVING) + { + LOG_ERROR (IfIndex, "Wrong Motor"); + return 0xFFFFFFFF; + } + currentPosition = MotorGetPosition(HARDWARE_MOTOR_TYPE__MOTO_RDRIVING); + if (currentPosition != 0) + { + if (Tinitialpos == 0xFFFF) + { + previousPosition = currentPosition; + Tinitialpos = 0; + } + prevprev = previousPosition; + positionDiff = Control_Delta_Position_Pass(currentPosition,previousPosition); + //positionDiff = positionDiff / MotorsCfg[ThreadMotorIdToMotorId[index]].microstep; + previousPosition = currentPosition; + + // total length = (position diff / full cycle) * pulley perimeter + //(positionDiff/pulseperround)*((2*PI*motor_Radius) + + //positionDiff = positionDiff / MotorsCfg[ThreadMotorIdToMotorId[index]].microstep; + length = (double)(positionDiff)*LengthCalculationMultiplier; + + if (counter++ % 50 == 0) + { + usnprintf(lenstr, 100, " length %d, diff 0x%x, pos 0x%x prev 0x%x TotalLoadedLen %d",(int)length*100,(int)positionDiff,previousPosition,prevprev, (int)TotalLoadedLen); +// SendJobProgress(0.0,0,false, lenstr); + ReportWithPackageFilter(ThreadFilter,lenstr,__FILE__,__LINE__,(int)TotalLoadedLen,RpWarning,(int)TotalLoadedLen,0); +// length = 0; + + } + + } + TotalLoadedLen += length; + + return OK; +} uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) { //read value is the dancer angle @@ -782,7 +1161,7 @@ uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) NormalizedError = avreageSampleValue*NormalizedErrorCoEfficient[index]; MotorControlConfig[index].m_mesuredParam = NormalizedError; - MotorControlConfig[index].m_calculatedError = AdvancedPIDAlgorithmCalculation((float)MotorControlConfig[index].m_SetParam , (float)MotorControlConfig[index].m_mesuredParam, + 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 { @@ -794,6 +1173,37 @@ uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) CurrentControlledSpeed[index] = calculated_speed; MotorSetSpeed(ThreadMotorIdToMotorId[index], calculated_speed); } + /* + + if (index == POOLER_MOTOR) + { + if ((TranslatedReadValue)<(-1200)) + { + if(PullerControlId != 0xFF) + { + Report("Puller stoped",__FILE__,__LINE__,ReadValue,RpWarning,(int)DancersCfg[DancerId].zeropoint,0); + MotorStop(ThreadMotorIdToMotorId[POOLER_MOTOR],Hard_Hiz); + RemoveControlCallback(PullerControlId, ThreadLoadControlCBFunction ); + PullerControlId = 0xFF; + } + } + + } + if (index == WINDER_MOTOR) + { + if ((TranslatedReadValue)<(-1200)) + { + if(WinderControlId != 0xFF) + { + Report("Winder stoped",__FILE__,__LINE__,ReadValue,RpWarning,(int)DancersCfg[DancerId].zeropoint,0); + MotorStop(ThreadMotorIdToMotorId[WINDER_MOTOR],Hard_Hiz); + RemoveControlCallback(WinderControlId, ThreadLoadControlCBFunction ); + WinderControlId = 0xFF; + } + + } + + }*/ /* LoadCounter++; if ((LoadCounter % 5001) == 0) { @@ -801,6 +1211,33 @@ uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) }*/ return OK; } +bool ThreadLoaded(void) +{ + uint32_t ReadValue; + + int32_t PoolerValue,WinderValue,FeederValue; + //this function tests if there is a thread in the machine. all dancers are in lowermost position then there is no thread. + + ReadValue = Control_Read_Dancer_Position(FEEDER_DANCER,0); + FeederValue = ReadValue - DancersCfg[FEEDER_DANCER].zeropoint; + Report("Feeder out",__FILE__,FeederValue,ReadValue,RpWarning,(int)DancersCfg[FEEDER_DANCER].zeropoint,0); + ReadValue = Control_Read_Dancer_Position(WINDER_DANCER,0); + WinderValue = ReadValue - DancersCfg[WINDER_DANCER].zeropoint; + Report("Winder out",__FILE__,WinderValue,ReadValue,RpWarning,(int)DancersCfg[WINDER_DANCER].zeropoint,0); + ReadValue = Control_Read_Dancer_Position(POOLER_DANCER,0); + PoolerValue = ReadValue - DancersCfg[POOLER_DANCER].zeropoint; + //pooler dancer is right sided: data is opposite + PoolerValue = (-1*PoolerValue); + Report("Puller out",__FILE__,PoolerValue,ReadValue,RpWarning,(int)DancersCfg[POOLER_DANCER].zeropoint,0); + + if (((PoolerValue)<(-1200))&&((WinderValue)<(-1200))&&((FeederValue)<(-1200))) + { + Report("Thread is out",__FILE__,(-1*PoolerValue),(-1*WinderValue),RpWarning,(-1*FeederValue),0); + return true; + } + else + return false; +} void ThreadLoadRequest(MessageContainer* requestContainer) { //#ifdef DEBUG_TEST_FUNCTIONS @@ -835,6 +1272,7 @@ void ThreadLoadRequest(MessageContainer* requestContainer) // return ERROR; //#endif } + void ThreadLoadPollRequest(MessageContainer* requestContainer) { uint8_t* container_buffer; @@ -860,3 +1298,130 @@ void ThreadLoadPollRequest(MessageContainer* requestContainer) SendChars(container_buffer, container_size); stub_heating_test_poll_request__free_unpacked(request,NULL); } +char ThreadLoadingToken[36+1] = {0}; +char DefaultErrSrt[] = "OK"; +uint32_t ThreadLoadingReport(void) +{ + MessageContainer responseContainer; + bool last = false; + StartThreadLoadingResponse response = START_THREAD_LOADING_RESPONSE__INIT; + + if (ThreadLoadingToken[0] == 0) + return OK; + + if (MessageState == 0) + { + response.has_state = true; + response.state = THREAD_LOADING_STATE__None; + response.errorreason = DefaultErrSrt; + + } + else if (MessageState == 1) + { + response.has_state = true; + if (LoadStatus == OK) + { + response.state = THREAD_LOADING_STATE__Preparing; + if (LoadStages == THREAD_LOAD_INITIAL_TENSION) + { + response.state = THREAD_LOADING_STATE__ReadyForLoading; + response.errorreason = DefaultErrSrt; + } + } + else + { + response.state = THREAD_LOADING_STATE__PreparationError; + response.errorreason = LoadErrorMsg; + } + } + else if (MessageState == 2) + { + response.has_state = true; + if (LoadStatus == OK) + { + response.state = THREAD_LOADING_STATE__Finalizing; + if (LoadStages > THREAD_LOAD_JOG_THREAD) + { + response.state = THREAD_LOADING_STATE__Completed; + response.errorreason = DefaultErrSrt; + //last = true; + } + } + else + { + response.state = THREAD_LOADING_STATE__FinalizationError; + response.errorreason = LoadErrorMsg; + } + } + else return ERROR; + Report("ThreadLoadingReport",__FILE__,MessageState,response.state,RpWarning,(int)LoadStages,0); + + //------------------------------------------------------------------------------------------- + responseContainer = createContainer(MESSAGE_TYPE__StartThreadLoadingResponse, ThreadLoadingToken, last, &response, &start_thread_loading_response__pack, &start_thread_loading_response__get_packed_size); + responseContainer.continuous = true; + uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); + size_t container_size = message_container__pack(&responseContainer, container_buffer); + my_free(responseContainer.data.data); + SendChars((char*)container_buffer, container_size); + + return OK; + +} + +uint32_t StartThreadLoadingFunc(MessageContainer* requestContainer) +{ + StartThreadLoadingRequest *request = start_thread_loading_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + ustrncpy (ThreadLoadingToken, requestContainer->token,36); + //MessageState = 1; + Report("StartThreadLoadingFunc",__FILE__,__LINE__,0,RpWarning,(int)LoadStages,0); + ThreadLoadingReport(); + return OK; + +} + +uint32_t ContinueThreadLoadingFunc(MessageContainer* requestContainer) +{ + ContinueThreadLoadingRequest *request = continue_thread_loading_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + ContinueThreadLoadingResponse Cresponse = CONTINUE_THREAD_LOADING_RESPONSE__INIT; + MessageContainer responseContainer; + MessageState = 2; + ThreadLoadingReport(); + if (request->processparameters) + { + dryerbufferlength = request->processparameters->dryerbufferlength; + LoadArmInfo.LoadArmRounds = (int)(request->processparameters->dryerbufferlength); + + } + Report("ContinueThreadLoadingFunc",__FILE__,__LINE__,(int)(request->processparameters->dryerbufferlength),RpWarning,(int)LoadStages,0); + + responseContainer = createContainer(MESSAGE_TYPE__ContinueThreadLoadingResponse, requestContainer->token, true, &Cresponse, &continue_thread_loading_response__pack, &continue_thread_loading_response__get_packed_size); + responseContainer.continuous = false; + uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); + size_t container_size = message_container__pack(&responseContainer, container_buffer); + my_free(responseContainer.data.data); + SendChars((char*)container_buffer, container_size); + if (LoadStages == THREAD_LOAD_INITIAL_TENSION) //on this satge we should wait for user call + { + ThreadLoadStateMachine(LoadStages); + } + return OK; + +} +uint32_t StopThreadLoadingFunc(MessageContainer* requestContainer) +{ + StopThreadLoadingRequest *request = stop_thread_loading_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + StopThreadLoadingResponse Cresponse = STOP_THREAD_LOADING_RESPONSE__INIT; + MessageContainer responseContainer; + MessageState = 2; + Thread_Load_End(); + Report("StopThreadLoadingFunc",__FILE__,__LINE__,0xFF,RpWarning,(int)LoadStages,0); + + responseContainer = createContainer(MESSAGE_TYPE__StopThreadLoadingResponse, requestContainer->token, true, &Cresponse, &stop_thread_loading_response__pack, &stop_thread_loading_response__get_packed_size); + responseContainer.continuous = false; + uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); + size_t container_size = message_container__pack(&responseContainer, container_buffer); + my_free(responseContainer.data.data); + SendChars((char*)container_buffer, container_size); + return OK; + +} diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 9d57cd29f..78092ae2b 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -61,11 +61,13 @@ static bool KeepWindingCone = false; static uint32_t WindingConeLocation; static uint32_t WinderBackToBaseTime = 800; +float NumberOfRotationPerPassage = 0.0; InternalWinderConfigStruc InternalWinderCfg = {0}; -#define READ_SCREW_ENCODER +//#define READ_SCREW_ENCODER #ifdef READ_SCREW_ENCODER uint32_t ScrewLocationLimitSwitch = 0,ScrewLocationStart = 0; uint32_t ScrewLocationRun[3]; +uint32_t ScrewLocationPrev[3]; float WinderRunAverage = 0.0,WinderRunSum = 0.0; int WinderRunSamples = 0; #endif @@ -105,10 +107,17 @@ uint32_t InternalWindingConfigMessage(JobSpool* request) InternalWinderCfg.spoolbackingrate = request->backingrate; InternalWinderCfg.startoffsetpulses = request->startoffsetpulses; InternalWinderCfg.SpoolBottomBackingRate = request->bottombackingrate; - InternalWinderCfg.NumberOfRotationPerPassage = 3.1415926*2;//request->rotationsperpassage; + InternalWinderCfg.NumberOfRotationPerPassage = 3.1415926*3;//request->rotationsperpassage; + if (request->rotationsperpassage > 6.1) + InternalWinderCfg.NumberOfRotationPerPassage = request->rotationsperpassage; + if (NumberOfRotationPerPassage > 1) + { + InternalWinderCfg.NumberOfRotationPerPassage = NumberOfRotationPerPassage; + Report("Rotation per passage set from stub",__FILE__,__LINE__,(int)(request->rotationsperpassage*1000),RpWarning,(int)(InternalWinderCfg.NumberOfRotationPerPassage*1000), 0); + } InternalWinderCfg.diameter = request->diameter; usnprintf(ScrewStr, 150, "WindingConfig start,offset,head,tail {, %d, %d, %d, %d, %d}",InternalWinderCfg.startoffsetpulses,(int)InternalWinderCfg.segmentoffsetpulses, - (int)InternalWinderCfg.spoolbackingrate,(int)InternalWinderCfg.SpoolBottomBackingRate); + (int)InternalWinderCfg.spoolbackingrate,(int)InternalWinderCfg.SpoolBottomBackingRate,(int)(InternalWinderCfg.NumberOfRotationPerPassage*1000)); Report(ScrewStr,__FILE__,__LINE__,(int)InternalWinderCfg.diameter,RpWarning,(int)(InternalWinderCfg.NumberOfRotationPerPassage*1000), 0); return status; @@ -137,13 +146,13 @@ uint32_t Winder_Prepare(void *JobDetails) * report ready to the job STM */ - /*if (FPGA_Read_limit_Switches(GPI_SW_SPOOL_EXISTS)==LIMIT) + if (FPGA_Read_limit_Switches(GPI_SW_SPOOL_EXISTS)==LIMIT) { REPORT_MSG(LIMIT, "No cone in winder"); PrepareReady(Module_Winder,ModuleFail); AlarmHandlingSetAlarm(EVENT_TYPE__WINDER_CONE_DOES_NOT_EXIST,true); return ERROR; - }*/ + } #ifdef READ_SCREW_ENCODER ScrewLocationRun[0] = 0; @@ -278,7 +287,6 @@ numOfSteps = InternalWinderCfg.startoffsetpulses*MotorsCfg[HARDWARE_MOTOR_TYPE__ double WinderReferenceSpeed=0; double TotalWinderSpeed=0; bool Add100 = false; -double Rotations = 6.0; int flipflop = 0; uint32_t motspeed; float speedf; @@ -287,14 +295,8 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) { //uint32_t Steps; double temp,tempScrewSpeed; - double screw_horizontal_speed = 0; - double RotationsPerSecond; - //double Averagewinderspeed = 0; - -// { -// TotalWinderSpeed-=WinderMotorSpeed[WinderMotorSpeedCounter]; -// WinderMotorSpeed[WinderMotorSpeedCounter] = CurrentControlledSpeed[WINDER_MOTOR]; -// TotalWinderSpeed+=WinderMotorSpeed[WinderMotorSpeedCounter]; + //double screw_horizontal_speed = 0; + //double RotationsPerSecond; if (WinderMotorSpeedCounter++>=MAX_WINDER_SPEED_CALCULATION) { if (WinderMotorSpeedRollOver == false) @@ -304,21 +306,10 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) } // WinderMotorSpeedCounter=0; } -// } - if (flipflop == 0) - { - MotorGetSpeedFromFPGA1(HARDWARE_MOTOR_TYPE__MOTO_SCREW); - } - else if (flipflop == 1) - { - speedf = MotorGetSpeedFromFPGA_Res(HARDWARE_MOTOR_TYPE__MOTO_SCREW); - } - flipflop ++; - if (ScrewDirectionChangeCounter == CalculationDirectionChangeCounter) return OK; //deley TODO - flipflop = 0; + //flipflop = 0; ScrewCurrentDirection = 1-ScrewCurrentDirection; CalculationDirectionChangeCounter++; @@ -342,16 +333,16 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); } } - //else - // Report("winder run error value" ,__FILE__,WinderRun,ScrewLocationRun[0],RpWarning,ScrewLocationRun[1], 0); - - //Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); - //REPORT_MSG(abs(ScrewLocationRun[1] - ScrewLocationRun[0]), "Screw Run NumberOfSteps"); - //usnprintf(ScrewStr, 100, "Winder Encoder: 0 0x%x 1 0x%x diff %d intent %d rot %d",ScrewLocationRun[0],ScrewLocationRun[1],abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,Rotations*10); - //usnprintf(ScrewStr, 150, "Winder Encoder:id, diff, intended, winderspeed, rotation, speed, time, mot speed {, %d, %d, %d, %d, %d, %d, %d, %d, }",CalculationDirectionChangeCounter, - // abs(ScrewLocationRun[1] - ScrewLocationRun[0]),ScrewNumberOfSteps,(int)(WinderReferenceSpeed),(int)(Rotations*10),(int)ScrewSpeed,(int)ScrewRunningTime,(int)speedf); - //usnprintf(ScrewStr, 100, "Winder Encoder: 0 %d 1 %d diff %d ",ScrewLocationRun[0],ScrewLocationRun[1],ScrewLocationRun[1] - ScrewLocationRun[0]); - //Report(ScrewStr,__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewLocationStart, 0); + if (abs(ScrewLocationPrev[1]-ScrewLocationRun[1])>21) + { + Report("Winder difference",__FILE__,CalculationDirectionChangeCounter,ScrewLocationPrev[1],RpWarning,ScrewLocationRun[1], 0); + } + ScrewLocationPrev[1] = ScrewLocationRun[1]; + if (abs(ScrewLocationPrev[0]-ScrewLocationRun[0])>21) + { + Report("Winder difference",__FILE__,CalculationDirectionChangeCounter,ScrewLocationPrev[0],RpWarning,ScrewLocationRun[0], 0); + } + ScrewLocationPrev[0] = ScrewLocationRun[0]; #endif if (ScrewCurrentDirection == 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize) //next time going out { @@ -377,24 +368,6 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag) // Report("Bottom Backing ",__FILE__,__LINE__,CalculationDirectionChangeCounter,RpWarning,ScrewNumberOfSteps, 0); } } - /* if (WinderMotorSpeedRollOver) - { - if (WinderCalculation%60000 == 0)//100 minutes - { - Averagewinderspeed = TotalWinderSpeed/MAX_WINDER_SPEED_CALCULATION; - //Report("WinderSpeedUpdated",__FILE__,__LINE__,(int)TotalWinderSpeed,RpWarning,(int)Averagewinderspeed,0); - WinderReferenceSpeed = Averagewinderspeed; - } - WinderCalculation++; - }*/ - //WinderReferenceSpeed = 1000; - //ScrewNumberOfSteps = 1000; - screw_horizontal_speed = ScrewNumberOfSteps / Rotations;//InternalWinderCfg.NumberOfRotationPerPassage; - // if (Rotations > 6.6)//7.0) - // Rotations = 6.0; - RotationsPerSecond = WinderReferenceSpeed / (double)MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_WINDER].pulseperround; - tempScrewSpeed = screw_horizontal_speed*RotationsPerSecond; - //ROM_IntMasterDisable(); tempScrewSpeed = ScrewSpeed; CurrentControlledSpeed[SCREW_MOTOR] = ScrewSpeed; @@ -457,7 +430,6 @@ uint32_t Winder_Presegment(void *SegmentDetails, uint32_t SegmentId) InternalWinderCfg.SpoolBottomBackingRate = 2000; //no cone shape for samples InternalWinderCfg.NumberOfRotationPerPassage = 100; // a very slow movement of the screw JobSegment* Segment = SegmentDetails; - InternalWinderCfg.NumberOfRotationPerPassage = 100; // a very slow movement of the screw ScrewSpeed = InternalWinderCfg.segmentoffsetpulses/(((Segment->length *100)/dyeingspeed)/3); ScrewNumberOfSteps = InternalWinderCfg.segmentoffsetpulses;//*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; @@ -470,7 +442,6 @@ uint32_t Winder_Presegment(void *SegmentDetails, uint32_t SegmentId) InternalWinderCfg.SpoolBottomBackingRate = 2000; //no cone shape for samples InternalWinderCfg.NumberOfRotationPerPassage = 100; // a very slow movement of the screw JobSegment* Segment = SegmentDetails; - InternalWinderCfg.NumberOfRotationPerPassage = 100; // a very slow movement of the screw ScrewSpeed = InternalWinderCfg.segmentoffsetpulses/(((Segment->length *100)/dyeingspeed)/20); ScrewNumberOfSteps = InternalWinderCfg.segmentoffsetpulses;//*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].microstep; } @@ -547,7 +518,7 @@ uint32_t Winder_Presegment(void *SegmentDetails, uint32_t SegmentId) } if (SegmentId == 0) { - ScrewControlId = AddControlCallback(Screw100msecDirectionChange, eHundredMillisecond,TemplateDataReadCBFunction,0,0,0); + ScrewControlId = AddControlCallback("screw control",Screw100msecDirectionChange, eHundredMillisecond,TemplateDataReadCBFunction,0,0,0); } PreSegmentReady(Module_Winder,ModuleDone); @@ -583,7 +554,7 @@ uint32_t WinderDistanceToSpoolState(void ) double DTS_Time = (dryerbufferCentimeters/dyeingspeed)*1000;//distance to spool time in milliseconds REPORT_MSG ((int)DTS_Time,"WinderDistanceToSpoolState"); - ScrewDTSControlId = AddControlCallback(ScrewDTSCallback, DTS_Time-WinderBackToBaseTime,TemplateDataReadCBFunction,0,0,0); + ScrewDTSControlId = AddControlCallback("screw DTS",ScrewDTSCallback, DTS_Time-WinderBackToBaseTime,TemplateDataReadCBFunction,0,0,0); REPORT_MSG ((int)msec_millisecondCounter,"ScrewDTSCallback start"); return OK; diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h index 99117ca5d..420b782b5 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h @@ -42,6 +42,8 @@ uint32_t StoreDancerConfigMessage(void); uint32_t LoadDancerConfigMessage(void); //uint32_t MotorPidRequestMessage(HardwarePidControl* request); +extern float NumberOfRotationPerPassage; //debug for rotation per passage trials + uint32_t Winder_Init(void); uint32_t Winder_Prepare(void *JobDetails); uint32_t Winder_Presegment(void *JobDetails, uint32_t SegmentId); @@ -50,22 +52,22 @@ uint32_t Winder_End(void); typedef enum { - /*01*/ THREAD_LOAD_INIT, - /*02*/ THREAD_LOAD_REDUCE_HEAT, //HEATERS OFF, DRYER BLOWER OFF, BLOWER LOW, - /*03*/ THREAD_LOAD_SET_LOAD_ARM_TO_START_POSITION,//USE NOTATION HOW MANY ROTATIONS IN THE DRYER, OR CHECK AGAINST STOPPER. MOVE SLOWLY - /*04*/ THREAD_LOAD_OPEN_COVERS, //OPEN DYEING HEAD COVER AND DRYER LID - /*05*/ THREAD_LOAD_LIFT_DANCERS, - /*06*/ THREAD_LOAD_LIFT_ROCKERS, //MACHINE IS READY. SEND MESSAGE, START TIMER TO CLOSE LIDS, WAIT FOR OPERATOR RESPONSE - /*07*/ THREAD_LOAD_INITIAL_TENSION,//CHECK SPOOL PRESENCERUN WINDER UNTIL BREAK SENSOR IS IDENTIFIEING MOVEMENT FOR A SECOND - /*08*/ THREAD_LOAD_CLOSE_ROCKERS, - /*09*/ THREAD_LOAD_CLOSE_DANCERS, //SEND DANCER MOTORS TO PRESET LOCATION, CHECK THAT THE DANCERS ARE ON THE THREAD - /*10*/ THREAD_LOAD_CLOSE_LIDS, - /*11*/ THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT,//JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION - /*12*/ THREAD_LOAD_DRYER_LOADING, //START FEEDER PID, ROTATE LOADING ARM COUNTER THREAD DIRECTION X CIRCLES ACCORDING TO RML. FEEDER SPEED IS 40 + /*00*/ THREAD_LOAD_INIT, + /*01*/ THREAD_LOAD_REDUCE_HEAT, //HEATERS OFF, DRYER BLOWER OFF, BLOWER LOW, + /*05*/ THREAD_LOAD_LIFT_ROCKERS, //MACHINE IS READY. SEND MESSAGE, START TIMER TO CLOSE LIDS, WAIT FOR OPERATOR RESPONSE + /*02*/ THREAD_LOAD_SET_LOAD_ARM_TO_START_POSITION,//USE NOTATION HOW MANY ROTATIONS IN THE DRYER, OR CHECK AGAINST STOPPER. MOVE SLOWLY + /*03*/ THREAD_LOAD_OPEN_COVERS, //OPEN DYEING HEAD COVER AND DRYER LID + /*04*/ THREAD_LOAD_LIFT_DANCERS, + /*06*/ THREAD_LOAD_INITIAL_TENSION,//CHECK SPOOL PRESENCERUN WINDER UNTIL BREAK SENSOR IS IDENTIFIEING MOVEMENT FOR A SECOND + /*07*/ THREAD_LOAD_CLOSE_ROCKERS, + /*08*/ THREAD_LOAD_CLOSE_DANCERS, //SEND DANCER MOTORS TO PRESET LOCATION, CHECK THAT THE DANCERS ARE ON THE THREAD + /*09*/ THREAD_LOAD_CLOSE_LIDS, + /*10*/ THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT,//JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION + /*11*/ THREAD_LOAD_DRYER_LOADING, //START FEEDER PID, ROTATE LOADING ARM COUNTER THREAD DIRECTION X CIRCLES ACCORDING TO RML. FEEDER SPEED IS 40 //KEEP NOTATION HOW MANY ROTATIONS IN THE DRYER - /*13*/ THREAD_LOAD_RESUME_HEATING, - /*14*/ THREAD_LOAD_JOG_THREAD, //JOG THREAD SHORTLY TO MAKE SURE SPOOL IS RUNNING. REPORT END OF LOADING - /*15*/ THREAD_LOAD_END + /*12*/ THREAD_LOAD_RESUME_HEATING, + /*13*/ THREAD_LOAD_JOG_THREAD, //JOG THREAD SHORTLY TO MAKE SURE SPOOL IS RUNNING. REPORT END OF LOADING + /*14*/ THREAD_LOAD_END }THREAD_LOAD_STAGES_ENUM; uint32_t ThreadLoadButton(THREAD_LOAD_STAGES_ENUM ReadValue); bool ThreadLoadingActive(void); @@ -74,6 +76,10 @@ bool ThreadLoadingActive(void); void ThreadLoadPollRequest(MessageContainer* requestContainer); void ThreadLoadRequest(MessageContainer* requestContainer); +uint32_t StartThreadLoadingFunc(MessageContainer* requestContainer); +uint32_t ContinueThreadLoadingFunc(MessageContainer* requestContainer); +uint32_t StopThreadLoadingFunc(MessageContainer* requestContainer); + uint32_t Thread_Load_End(void); #endif diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index 88d62a495..fb3b78752 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -11,7 +11,7 @@ #include "PMR/Hardware/HardwareDancer.pb-c.h" #include "PMR/Hardware/HardwareWinder.pb-c.h" #include "PMR/Hardware/HardwareBreakSensor.pb-c.h" -#include <PMR/Diagnostics/EventType.pb-c.h> +#include "PMR/Diagnostics/EventType.pb-c.h" #include "Modules/AlarmHandling/AlarmHandling.h" #include "PMR/Printing/JobSpool.pb-c.h" @@ -23,6 +23,7 @@ #include "drivers/Flash_ram/FlashProgram.h" #include "drivers/Flash_ram/MCU_E2Prom.h" +#include "modules/ids/ids_ex.h" #include "thread.h" MotorDriverConfigStruc MotorsCfg[NUM_OF_MOTORS]={0}; @@ -105,6 +106,10 @@ uint32_t MotorsConfigMessage(HardwareConfiguration * HWrequest) MotorsCfg[Motor_i].toffmin = request->toffmin ; status = MotorConfig( Motor_i, &MotorsCfg[Motor_i]); + if ((Motor_i >= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1)&&(Motor_i <= HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8)) + { + IDS_Dispenser_Init(Motor_i-HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1); + } // if (Motor_i == MOTOR_RDRIVING) // ThreadInitialTestStub(request); } @@ -148,11 +153,12 @@ char DancerConfigPath[50] = "0://SysInfo//DancCfg.cfg"; uint32_t StoreDancerConfigMessage() { - FRESULT Fresult = FR_OK; + uint32_t status = OK; + // FRESULT Fresult = FR_OK; HardwareConfiguration DancerConfig; HardwareDancer Dancers[MAX_SYSTEM_DANCERS]; - uint8_t* response_buffer; - size_t response_size = 0; + // uint8_t* response_buffer; + // size_t response_size = 0; int Dancer_i; hardware_configuration__init(&DancerConfig); @@ -164,15 +170,16 @@ uint32_t StoreDancerConfigMessage() Dancers[Dancer_i].has_zeropoint = true; Dancers[Dancer_i].hardwaredancertype = Dancer_i; Dancers[Dancer_i].has_hardwaredancertype = true; - DancerConfig.dancers[Dancer_i]->zeropoint=Control_Read_Dancer_Position(Dancer_i,0,0); + DancerConfig.dancers[Dancer_i]->zeropoint=Control_Read_Dancer_Position(Dancer_i,0); DancerConfig.n_dancers++; DancersCfg[Dancer_i].zeropoint = DancerConfig.dancers[Dancer_i]->zeropoint; } - MCU_E2PromProgram(EEPROM_STORAGE_DANCER_0,DancersCfg[0].zeropoint); - MCU_E2PromProgram(EEPROM_STORAGE_DANCER_1,DancersCfg[1].zeropoint); - MCU_E2PromProgram(EEPROM_STORAGE_DANCER_2,DancersCfg[2].zeropoint); - Report("Store eeprom 0",__FILE__,DancersCfg[0].zeropoint,(int)DancersCfg[1].zeropoint,RpWarning,(int)DancersCfg[2].zeropoint,0); + status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_0,DancersCfg[0].zeropoint); + status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_1,DancersCfg[1].zeropoint); + status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_2,DancersCfg[2].zeropoint); + Report("~~~~~~Store eeprom 0",__FILE__,DancersCfg[0].zeropoint,(int)DancersCfg[1].zeropoint,RpWarning,(int)DancersCfg[2].zeropoint,0); +/* response_buffer = my_malloc(hardware_configuration__get_packed_size(&DancerConfig)); if (response_buffer) { @@ -187,43 +194,23 @@ uint32_t StoreDancerConfigMessage() my_free(response_buffer); - - return Fresult; +*/ + return status; } uint32_t LoadDancerConfigMessage() { - void* buffer = NULL; - uint32_t Bytes = 0; - FRESULT Fresult = FR_OK; - - HardwareConfiguration *DancerConfig; - int Dancer_i; - HardwareDancer DancersCfg1[MAX_SYSTEM_DANCERS] = {0}; - HardwareDancer DancersCfg2[MAX_SYSTEM_DANCERS] = {0}; - - memcpy(DancersCfg1,(void *)DANCERS_MAP_IN_FLASH,sizeof(DancersCfg1)); + uint32_t status = OK; - Fresult = FileRead(DancerConfigPath, &Bytes, &buffer); - if (Fresult == FR_OK) - { - DancerConfig = hardware_configuration__unpack(NULL, Bytes, buffer); - for (Dancer_i = 0; Dancer_i < DancerConfig->n_dancers ; Dancer_i++) - { - DancersCfg2[Dancer_i].zeropoint = DancerConfig->dancers[Dancer_i]->zeropoint; - } - hardware_configuration__free_unpacked(DancerConfig,NULL); - free (buffer); - } MCU_E2PromRead(EEPROM_STORAGE_DANCER_0,&DancersCfg[0].zeropoint); MCU_E2PromRead(EEPROM_STORAGE_DANCER_1,&DancersCfg[1].zeropoint); MCU_E2PromRead(EEPROM_STORAGE_DANCER_2,&DancersCfg[2].zeropoint); - Report("Dancer 0 Store data flash, internal flash, eeprom ",__FILE__,DancersCfg[0].zeropoint,(int)DancersCfg1[0].zeropoint,RpWarning,(int)DancersCfg2[0].zeropoint,0); - Report("Dancer 1 Store data flash, internal flash, eeprom ",__FILE__,DancersCfg[1].zeropoint,(int)DancersCfg1[1].zeropoint,RpWarning,(int)DancersCfg2[1].zeropoint,0); - Report("Dancer 2 Store data flash, internal flash, eeprom ",__FILE__,DancersCfg[2].zeropoint,(int)DancersCfg1[2].zeropoint,RpWarning,(int)DancersCfg2[2].zeropoint,0); + status |= Report("Dancer 0 Store data eeprom ",__FILE__,__LINE__,0,RpWarning,(int)DancersCfg[0].zeropoint,0); + status |= Report("Dancer 1 Store data eeprom ",__FILE__,__LINE__,1,RpWarning,(int)DancersCfg[1].zeropoint,0); + status |= Report("Dancer 2 Store data eeprom ",__FILE__,__LINE__,2,RpWarning,(int)DancersCfg[2].zeropoint,0); - return Fresult; + return status; } diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 47fc37081..2484b9444 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -49,6 +49,7 @@ uint32_t PoolerSpeedControlId=0xFF; double DancerError[NUM_OF_DANCERS] = {0.0}; double OriginalMotorSpd_2PPS[MAX_THREAD_MOTORS_NUM] = {0}; +double InitialDryerSpeed = 0.0; uint32_t JobCounter = 0; MotorControlConfig_t MotorControlConfig[MAX_THREAD_MOTORS_NUM]; @@ -116,8 +117,8 @@ uint32_t Control_Delta_Position_Pass(uint32_t Current_Read,uint32_t Previous_Rea if (Current_Read < Previous_Read) { + ReportWithPackageFilter(ThreadFilter,"Length rollover",__FILE__,__LINE__,(int)Current_Read,RpWarning,(int)Previous_Read,0); Time_Pass = (MAX_COUNTER - Previous_Read) + Current_Read + 1; - Report("Length rollover",__FILE__,__LINE__,(int)Current_Read,RpWarning,(int)Previous_Read,0); } else Time_Pass = Current_Read - Previous_Read; @@ -142,7 +143,7 @@ void ThreadUpdateProcessLength (double length, void *Funcptr) CurrentProcessedLength = 0; ProcessedLengthFuncPtr = (ProcessedLengthFunc)Funcptr; } -char Lenstr[150]; +char Lenstr[160]; uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) { uint32_t positionDiff = 0,prevprev; @@ -157,7 +158,7 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) #endif if (IfIndex>>8 != IfTypeThread) { - LOG_ERROR (IfIndex, "Wrong Interface type"); + ReportWithPackageFilter(ThreadFilter,"Wrong Interface type",__FILE__,__LINE__,(int)IfIndex,RpError,(int)PoolerTotalProcessedLength,0); return 0xFFFFFFFF; } index = IfIndex&0xFF; @@ -165,7 +166,7 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) // return OK; if (index != FEEDER_MOTOR) { - LOG_ERROR (IfIndex, "Wrong Motor"); + ReportWithPackageFilter(ThreadFilter,"Wrong Motor",__FILE__,__LINE__,(int)IfIndex,RpError,(int)index,0); return 0xFFFFFFFF; } CurrentPosition = MotorGetPosition(ThreadMotorIdToMotorId[index]); @@ -191,7 +192,7 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) { usnprintf(Lenstr, 100, "length huge: length %d, diff 0x%x, pos 0x%x prev 0x%x",(int)length*100,(int)positionDiff,PreviousPosition,prevprev); SendJobProgress(0.0,0,false, Lenstr); - Report(Lenstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); + ReportWithPackageFilter(ThreadFilter,Lenstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); length = 0; } @@ -223,7 +224,7 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) { usnprintf(Lenstr, 100, "Total processed length: Feeder: %d Pooler %d",(int)TotalProcessedLength,(int)PoolerTotalProcessedLength); SendJobProgress(0.0,0,false, Lenstr); - Report(Lenstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); + ReportWithPackageFilter(ThreadFilter,Lenstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); // segment/intersegment/distance to spool finished if (ProcessedLengthFuncPtr) ProcessedLengthFuncPtr(); @@ -247,7 +248,7 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) #endif if (IfIndex>>8 != IfTypeThread) { - LOG_ERROR (IfIndex, "Wrong Interface type"); + ReportWithPackageFilter(ThreadFilter,"Wrong Interface type",__FILE__,__LINE__,(int)IfIndex,RpError,(int)PoolerTotalProcessedLength,0); return 0xFFFFFFFF; } index = IfIndex&0xFF; @@ -255,7 +256,7 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) // return OK; if (index != POOLER_MOTOR) { - LOG_ERROR (IfIndex, "Wrong Motor"); + ReportWithPackageFilter(ThreadFilter,"Wrong Motor",__FILE__,__LINE__,(int)IfIndex,RpError,(int)index,0); return 0xFFFFFFFF; } PoolerCurrentPosition = MotorGetPosition(ThreadMotorIdToMotorId[index]); @@ -281,7 +282,7 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) { usnprintf(Lenstr, 100, "length huge: length %d, diff 0x%x, pos 0x%x prev 0x%x",(int)length*100,(int)positionDiff,PreviousPosition,prevprev); SendJobProgress(0.0,0,false, Lenstr); - Report(Lenstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); + ReportWithPackageFilter(ThreadFilter,Lenstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); length = 0; } @@ -299,9 +300,12 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) { if (PrepareState == true) { +//#ifdef Use_Head_Card +// strcpy(Lenstr,"Heating up"); +//#else //later - add temperatures TemperatureListString(Lenstr); - +//#endif SendJobProgress(0.0,0,false, Lenstr); } else @@ -314,7 +318,7 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) { usnprintf(Lenstr, 100, "Total processed length: Feeder: %d Pooler %d",(int)TotalProcessedLength,(int)PoolerTotalProcessedLength); SendJobProgress(0.0,0,false, Lenstr); - Report(Lenstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); + ReportWithPackageFilter(ThreadFilter,Lenstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); // segment/intersegment/distance to spool finished if (ProcessedLengthFuncPtr) ProcessedLengthFuncPtr(); @@ -339,7 +343,7 @@ uint32_t ThreadSpeedControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) float speed = getSensorSpeedData(); if (IfIndex>>8 != IfTypeThread) { - LOG_ERROR (IfIndex, "Wrong Interface type"); + ReportWithPackageFilter(ThreadFilter,"Wrong Interface type",__FILE__,__LINE__,(int)IfIndex,RpError,(int)PoolerTotalProcessedLength,0); return 0xFFFFFFFF; } index = IfIndex&0xFF; @@ -371,7 +375,7 @@ uint32_t ThreadControlSpeedReadFunction(uint32_t IfIndex, uint32_t ReadValue) int index; if (IfIndex>>8 != IfTypeThread) { - LOG_ERROR (IfIndex, "Wrong Interface type"); + ReportWithPackageFilter(ThreadFilter,"Wrong Interface type",__FILE__,__LINE__,(int)IfIndex,RpError,(int)PoolerTotalProcessedLength,0); return 0xFFFFFFFF; } index = IfIndex&0xFF; @@ -420,7 +424,7 @@ void testDancersControl() len = usnprintf(time, 150, "params: speed 50, divider %d p %d * %d i %d * %d Dt*1000 %d Norm Coef %d initial speed %d",NORMAL_COEF_DIVIDER,(int)MotorsControl[FEEDER_MOTOR].proportionalgain,(int)MotorsControl[FEEDER_MOTOR].outputonoffhysteresisvalue, (int)MotorsControl[FEEDER_MOTOR].integraltime,(int)MotorsControl[FEEDER_MOTOR].setpointramprateorsoftstartramp,(int)(MotorsControl[FEEDER_MOTOR].controloutputtype*1000), (int)(NormalizedErrorCoEfficient[FEEDER_MOTOR]*1000000000),OriginalMotorSpd_2PPS[FEEDER_MOTOR]); - Report(time,__FILE__,__LINE__,111,RpError,111,0); + ReportWithPackageFilter(ThreadFilter,time,__FILE__,__LINE__,111,RpError,111,0); Task_sleep(100); ThreadControlCBFunction(IfTypeThread*0x100+FEEDER_MOTOR, DancersCfg[HARDWARE_DANCER_TYPE__RightDancer].zeropoint - mm20); ThreadControlCBFunction(IfTypeThread*0x100+FEEDER_MOTOR, DancersCfg[HARDWARE_DANCER_TYPE__RightDancer].zeropoint - mm10); @@ -442,6 +446,7 @@ char TMessage[150]; //char time[150]; uint16_t BreakSensorCounter = 0; uint16_t BreakSensorLatchCounter = 0; +bool FirstCalcInJob = true; uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) { //#define MAX_CONTROL_SAMPLES 6 @@ -449,7 +454,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) //extern int MotorSamplePointer[MAX_THREAD_MOTORS_NUM]; //read value is the dancer angle - int i,index=MAX_THREAD_MOTORS_NUM; + int i,index=MAX_THREAD_MOTORS_NUM,len; int DancerId; int32_t TranslatedReadValue, avreageSampleValue = 0;//,avreageMotorSampleValue = 0; //double tempcalcspeed = 0; @@ -464,7 +469,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) #endif if (IfIndex>>8 != IfTypeThread) { - LOG_ERROR (IfIndex, "Wrong Interface type"); + ReportWithPackageFilter(ThreadFilter,"Wrong Interface type",__FILE__,__LINE__,(int)IfIndex,RpError,(int)PoolerTotalProcessedLength,0); return 0xFFFFFFFF; } index = IfIndex&0xFF; @@ -477,7 +482,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) if (ReadValue < 10) { MotorFailedSample[index]++; - Report("Dancer value read too small.",__FILE__,__LINE__,DancerId,RpError,ReadValue,0); + ReportWithPackageFilter(ThreadFilter,"Dancer value read too small.",__FILE__,__LINE__,DancerId,RpError,ReadValue,0); return OK; } if (ReadValue == 0x3FFF) @@ -486,13 +491,17 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) if (dancerinvalid == false) { dancerinvalid = true; - LOG_ERROR(index, "Dancer value invalid."); + ReportWithPackageFilter(ThreadFilter,"Dancer value invalid.",__FILE__,__LINE__,(int)IfIndex,RpError,(int)ReadValue,0); } return OK; } KeepReadValue = ReadValue; TranslatedReadValue = ReadValue - DancersCfg[DancerId].zeropoint; - if (index == POOLER_MOTOR) + if (abs(TranslatedReadValue) > 0x2000) + { + TranslatedReadValue = 0x3FFF- TranslatedReadValue; //overcome zero environment + } + if ((index == POOLER_MOTOR)||((index == FEEDER_MOTOR)&&(DancersCfg[DancerId].assemblydirectionright == true))) { //pooler dancer is right sided: data is opposite TranslatedReadValue = (-1*TranslatedReadValue); @@ -532,7 +541,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) SendSegmentFail(); //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true); //EndState(CurrentJob,"ReadBreakSensor Error" ); - LOG_ERROR(index, "ReadBreakSensor Error"); + ReportWithPackageFilter(ThreadFilter,"ReadBreakSensor Error",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0); return OK; } //passed limit }//ReadBreakSensor()==ERROR @@ -540,7 +549,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) { if (BreakSensorCounter) { - LOG_ERROR(BreakSensorCounter, "ReadBreakSensor Spike"); + ReportWithPackageFilter(ThreadFilter,"ReadBreakSensor Spike",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0); } BreakSensorCounter = 0; } @@ -558,7 +567,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) SendSegmentFail(); //AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,true); //EndState(CurrentJob,"ReadBreakSensor Error" ); - LOG_ERROR(index, "thread speed too low Error"); + ReportWithPackageFilter(ThreadFilter,"thread speed too low Error",__FILE__,BreakSensorCounter,(int)index,RpError,(int)JobCounter,0); return OK; } } @@ -572,7 +581,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) { keepdata = false; usnprintf(TMessage, 60, "Dancer %d limit %d value %d Zero %d",DancerId,DancerStopActivityLimit[index],avreageSampleValue,DancersCfg[DancerId].zeropoint); - Report(TMessage,__FILE__,__LINE__,avreageSampleValue,RpWarning,DancerStopActivityLimit[index],0); + ReportWithPackageFilter(ThreadFilter,TMessage,__FILE__,__LINE__,avreageSampleValue,RpWarning,DancerStopActivityLimit[index],0); //JobAbortedByUser = true; ThreadControlActive = false; //MotorGetStatusFromFPGA(ThreadMotorIdToMotorId[index]); @@ -592,27 +601,28 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_WINDER_DANCER,true); break; }*/ - LOG_ERROR (DancerId, "Dancer Failure"); + ReportWithPackageFilter(ThreadFilter,"Dancer Failure",__FILE__,DancerId,(int)avreageSampleValue,RpError,(int)JobCounter,0); return OK; } NormalizedError = avreageSampleValue*NormalizedErrorCoEfficient[index]; + if ((index != FEEDER_MOTOR)||(MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].speedmaster == false)) //feeder unit handles errors opposite to left unit + { + NormalizedError = (-1*NormalizedError); + } + MotorControlConfig[index].m_mesuredParam = NormalizedError; DancerError[DancerId] = NormalizedError; - MotorControlConfig[index].m_calculatedError = AdvancedPIDAlgorithmCalculation((float)MotorControlConfig[index].m_SetParam , (float)MotorControlConfig[index].m_mesuredParam, + 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); - } - else + /*else { //KeepNormalizedError = NormalizedError; - } + }*/ /*if ((JobCounter % 100) == 0) { //if (index == WINDER_MOTOR) //feeder unit handles errors opposite to left unit //{ - // Report("MotorSpeedUpdated",__FILE__,index,OriginalMotorSpd_2PPS[index],RpWarning,CurrentControlledSpeed[index],0); + // ReportWithPackageFilter(ThreadFilter,"MotorSpeedUpdated",__FILE__,index,OriginalMotorSpd_2PPS[index],RpWarning,CurrentControlledSpeed[index],0); //} /`*if (JobCounter >= 3000) { @@ -623,23 +633,46 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) for (i=0;i<MAX_CONTROL_SAMPLES;i++) avreageMotorSampleValue += MotorSpeedSamples[index][i]; avreageMotorSampleValue = avreageMotorSampleValue / MAX_CONTROL_SAMPLES; - //Report("MotorSpeedUpdated",__FILE__,index,OriginalMotorSpd_2PPS[index],RpWarning,avreageMotorSampleValue,0); + //ReportWithPackageFilter(ThreadFilter,"MotorSpeedUpdated",__FILE__,index,OriginalMotorSpd_2PPS[index],RpWarning,avreageMotorSampleValue,0); OriginalMotorSpd_2PPS[index] = avreageMotorSampleValue; }*`/ }*/ calculated_speed = (1-MotorControlConfig[index].m_calculatedError)*OriginalMotorSpd_2PPS[index]; //calculated_speed = (1-MotorControlConfig[index].m_calculatedError)*CurrentControlledSpeed[index]; + if (FirstCalcInJob == true) + { + if (index == FEEDER_MOTOR) + { + FirstCalcInJob = false; + len = usnprintf(TMessage, 150, "read %d avg %d error(6) %d integral(9) %d,delta(9) %d, calc(3) %d speed %d", + ReadValue,avreageSampleValue,(int)(MotorControlConfig[index].m_mesuredParam*1000000), + (int)(MotorControlConfig[index].m_integral*1000000000),(int)((MotorControlConfig[index].m_mesuredParam*MotorControlConfig[index].m_params.dt)*1000000000), + (int)(MotorControlConfig[index].m_calculatedError*1000),(int)calculated_speed); + ReportWithPackageFilter(ThreadFilter,TMessage,__FILE__,__LINE__,DancerId,RpError,ReadValue,0); + + } + } + #ifndef TEST_PID_THREAD if (fabs(calculated_speed-CurrentControlledSpeed[index])> MotorControlConfig[index].m_ingnoreValue) #else if (index == FEEDER_MOTOR) //feeder unit handles errors opposite to left unit #endif { - CurrentControlledSpeed[index] = calculated_speed; - MotorSetSpeed(ThreadMotorIdToMotorId[index], calculated_speed); + if (calculated_speed>5.0) + { + CurrentControlledSpeed[index] = calculated_speed; + MotorSetSpeed(ThreadMotorIdToMotorId[index], calculated_speed); + } + else + { + if (calculated_speed<0) + ReportWithPackageFilter(ThreadFilter,"Negative speed",__FILE__,index,(int)OriginalMotorSpd_2PPS[index],RpWarning,(int)CurrentControlledSpeed[index],0); + } + /*if (((JobCounter % 2000) == index*100)&&(index == WINDER_MOTOR)) //feeder unit handles errors opposite to left unit { - Report("MotorSpeedUpdated",__FILE__,index,(int)OriginalMotorSpd_2PPS[index],RpWarning,(int)CurrentControlledSpeed[index],0); + ReportWithPackageFilter(ThreadFilter,"MotorSpeedUpdated",__FILE__,index,(int)OriginalMotorSpd_2PPS[index],RpWarning,(int)CurrentControlledSpeed[index],0); }*/ #ifdef TEST_PID_THREAD int len; @@ -658,7 +691,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) ReadValue,avreageSampleValue,(int)(MotorControlConfig[index].m_mesuredParam*1000000), (int)(MotorControlConfig[index].m_integral*1000000000),(int)((MotorControlConfig[index].m_mesuredParam*MotorControlConfig[index].m_params.dt)*1000000000), (int)(MotorControlConfig[index].m_calculatedError*1000),(int)calculated_speed); - Report(TMessage,__FILE__,__LINE__,DancerId,RpError,ReadValue,0); + ReportWithPackageFilter(ThreadFilter,TMessage,__FILE__,__LINE__,DancerId,RpError,ReadValue,0); //Task_sleep(100); //if (controlIndex++>=MAX_THREAD_CONTROL_LOG) // controlIndex = 0; @@ -711,26 +744,56 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request) //******************************************************************************************************************** uint32_t ThreadPrepareState(void *JobDetails) { - int Motor_i, HW_Motor_Id, Pid_Id; + int Motor_i,i, HW_Motor_Id, Pid_Id; JobTicket* JobTicket = JobDetails; CurrentSegmentId = 0; JobCounter = 0; TotalProcessedLength = 0.0; PoolerTotalProcessedLength = 0.0; + InitialProcess = true; + initialpos = 0xFFFF; + Poolerinitialpos = 0xFFFF; PrepareState = true; AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_BREAK,false); AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_PULLER_DANCER,false); AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_FEEDER_DANCER,false); AlarmHandlingSetAlarm(EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE_WINDER_DANCER,false); AlarmHandlingSetAlarm(EVENT_TYPE__WINDER_CONE_DOES_NOT_EXIST,false); + AlarmHandlingSetAlarm(EVENT_TYPE__FPGA_WATCHDOG_ACTIVATED,false); + EnableLubrication = JobTicket->enablelubrication; EnableIntersegment = JobTicket->enableintersegment; IntersegmentLength = JobTicket->intersegmentlength; + FirstCalcInJob = true; + if(MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].speedmaster == false) + { + ThreadMotorIdToMotorId[FEEDER_MOTOR] = HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING; + ThreadMotorIdToMotorId[DRYER_MOTOR] = HARDWARE_MOTOR_TYPE__MOTO_RDRIVING; + } + else + { + ThreadMotorIdToMotorId[FEEDER_MOTOR] = HARDWARE_MOTOR_TYPE__MOTO_RDRIVING ; + ThreadMotorIdToMotorId[DRYER_MOTOR] = HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING; + } MotorStop(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, Hard_Stop); + if (FPGA_Read_limit_Switches(Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DH_LID]) != LIMIT) + { + ReportWithPackageFilter(ThreadFilter,"Dyeing head is open!!!",__FILE__,__LINE__,HARDWARE_MOTOR_TYPE__MOTO_DH_LID,RpFatalError,LIMIT,0); + //JobEndReason = JOB_LIDS_OPEN; + //PrepareReady(Module_Thread,ModuleFail); + //return ERROR; + } + if (FPGA_Read_limit_Switches(Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID]) != LIMIT) + { + ReportWithPackageFilter(ThreadFilter,"Dryer lid is open!!!",__FILE__,__LINE__,HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID,RpFatalError,LIMIT,0); + //JobEndReason = JOB_LIDS_OPEN; + //PrepareReady(Module_Thread,ModuleFail); + //return ERROR; + } //start thread control for all motors for (Motor_i = 0;Motor_i < MAX_THREAD_MOTORS_NUM;Motor_i++) @@ -754,12 +817,22 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request) MotorControlConfig[Motor_i].m_mesuredParam = 0; MotorControlConfig[Motor_i].m_preError = 0; MotorControlConfig[Motor_i].m_SetParam = 0;//need to update SetParams on presegment stage - +////////////////////////////////////////////////// + for (i = 0;i < (int)MotorsControl[Motor_i].pvinputfilterfactormode; i++) + { + if (Motor_i == DRYER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled + MotorSamples[Motor_i][i] = Control_Read_Dancer_Position(ThreadMotorIdToDancerId[Motor_i],0); //reset the samples value for control beginning + else if ((Motor_i == POOLER_MOTOR)||(Motor_i == FEEDER_MOTOR)) + MotorSamples[Motor_i][i] = DancersCfg[ThreadMotorIdToDancerId[Motor_i]].zeropoint; + //MotorSpeedSamples[Motor_i][i] = 0; + } + MotorSamplePointer[Motor_i] = 0; +///////////////////////////////////////////////////// MotorSetDirection((TimerMotors_t)HW_Motor_Id,MotorsCfg[HW_Motor_Id].directionthreadwize); if (Motor_i == FEEDER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled { - Report("Feeder Control",__FILE__,Motor_i,MotorControlConfig[Motor_i].m_params.Kp,RpWarning,MotorControlConfig[Motor_i].m_params.Ki,0); + ReportWithPackageFilter(ThreadFilter,"Feeder Control",__FILE__,Motor_i,MotorControlConfig[Motor_i].m_params.Kp,RpWarning,MotorControlConfig[Motor_i].m_params.Ki,0); if (SpeedControlId != 0xFF) { RemoveControlCallback(SpeedControlId,ThreadLengthCBFunction); @@ -767,33 +840,33 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request) } //SetMotHome(ThreadMotorIdToMotorId[Motor_i]); LengthCalculationMultiplier = (MotorsCfg[ThreadMotorIdToMotorId[Motor_i]].pulleyradius*2*PI)/(MotorsCfg[ThreadMotorIdToMotorId[Motor_i]].pulseperround*MotorsCfg[ThreadMotorIdToMotorId[Motor_i]].microstep); - SpeedControlId = AddControlCallback(ThreadLengthCBFunction, eHundredMillisecond,MotorGetPositionFromFPGA,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToMotorId[Motor_i],Motor_i); + SpeedControlId = AddControlCallback(NULL,ThreadLengthCBFunction, eHundredMillisecond,MotorGetPositionFromFPGA,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToMotorId[Motor_i],Motor_i); } if (Motor_i == POOLER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled { - Report("Puller Control",__FILE__,Motor_i,MotorControlConfig[Motor_i].m_params.Kp,RpWarning,MotorControlConfig[Motor_i].m_params.Ki,0); + ReportWithPackageFilter(ThreadFilter,"Puller Control",__FILE__,Motor_i,MotorControlConfig[Motor_i].m_params.Kp,RpWarning,MotorControlConfig[Motor_i].m_params.Ki,0); if (PoolerSpeedControlId != 0xFF) { if (RemoveControlCallback(PoolerSpeedControlId,PoolerThreadLengthCBFunction)!=OK) - LOG_ERROR(Motor_i,"Remove Control Failed"); + ReportWithPackageFilter(ThreadFilter,"Remove Control Failed.",__FILE__,__LINE__,(int)Motor_i,RpError,(int)PoolerSpeedControlId,0); PoolerSpeedControlId = 0xFF; } //SetMotHome(ThreadMotorIdToMotorId[Motor_i]); PoolerLengthCalculationMultiplier = (MotorsCfg[ThreadMotorIdToMotorId[Motor_i]].pulleyradius*2*PI)/(MotorsCfg[ThreadMotorIdToMotorId[Motor_i]].pulseperround*MotorsCfg[ThreadMotorIdToMotorId[Motor_i]].microstep); - PoolerSpeedControlId = AddControlCallback(PoolerThreadLengthCBFunction, eHundredMillisecond,MotorGetPositionFromFPGA,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToMotorId[Motor_i],Motor_i); + PoolerSpeedControlId = AddControlCallback(NULL,PoolerThreadLengthCBFunction, eHundredMillisecond,MotorGetPositionFromFPGA,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToMotorId[Motor_i],Motor_i); } if (Motor_i == FEEDER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled { if (ControlIdtoMotorId[Motor_i] != 0xFF) { if(RemoveControlCallback(ControlIdtoMotorId[Motor_i],ThreadControlCBFunction)!=OK) - LOG_ERROR(Motor_i,"Remove Control Failed"); + ReportWithPackageFilter(ThreadFilter,"Remove Control Failed.",__FILE__,__LINE__,(int)Motor_i,RpError,(int)PoolerSpeedControlId,0); ControlIdtoMotorId[Motor_i] = 0xFF; CurrentControlledSpeed[Motor_i] = 0; } #ifndef TEST_PID_THREAD - ControlIdtoMotorId[Motor_i] = AddControlCallback(ThreadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToDancerId[Motor_i],Motor_i); - //AddControlCallback(ThreadControlSpeedReadFunction, eHundredMillisecond,MotorGetSpeedFromFPGA,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToMotorId[Motor_i],Motor_i); + ControlIdtoMotorId[Motor_i] = AddControlCallback(NULL,ThreadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToDancerId[Motor_i],Motor_i); + //AddControlCallback(NULL,ThreadControlSpeedReadFunction, eHundredMillisecond,MotorGetSpeedFromFPGA,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToMotorId[Motor_i],Motor_i); #endif } if (Motor_i == POOLER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will n//ot be controlled @@ -801,31 +874,31 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request) if (ControlIdtoMotorId[Motor_i] != 0xFF) { if(RemoveControlCallback(ControlIdtoMotorId[Motor_i],ThreadControlCBFunction)!=OK) - LOG_ERROR(Motor_i,"Remove Control Failed"); + ReportWithPackageFilter(ThreadFilter,"Remove Control Failed.",__FILE__,__LINE__,(int)Motor_i,RpError,(int)PoolerSpeedControlId,0); CurrentControlledSpeed[Motor_i] = 0; ControlIdtoMotorId[Motor_i] = 0xFF; } #ifndef TEST_PID_THREAD - ControlIdtoMotorId[Motor_i] = AddControlCallback(ThreadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToDancerId[Motor_i],Motor_i); + ControlIdtoMotorId[Motor_i] = AddControlCallback(NULL,ThreadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToDancerId[Motor_i],Motor_i); #endif } if (Motor_i == WINDER_MOTOR) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will n//ot be controlled { - Report("Winder Control",__FILE__,Motor_i,MotorControlConfig[Motor_i].m_params.Kp,RpWarning,MotorControlConfig[Motor_i].m_params.Ki,0); + ReportWithPackageFilter(ThreadFilter,"Winder Control",__FILE__,Motor_i,MotorControlConfig[Motor_i].m_params.Kp,RpWarning,MotorControlConfig[Motor_i].m_params.Ki,0); if (ControlIdtoMotorId[Motor_i] != 0xFF) { if(RemoveControlCallback(ControlIdtoMotorId[Motor_i],ThreadControlCBFunction)!=OK) - LOG_ERROR(Motor_i,"Remove Control Failed"); + ReportWithPackageFilter(ThreadFilter,"Remove Control Failed.",__FILE__,__LINE__,(int)Motor_i,RpError,(int)PoolerSpeedControlId,0); CurrentControlledSpeed[Motor_i] = 0; ControlIdtoMotorId[Motor_i] = 0xFF; } #ifndef TEST_PID_THREAD - ControlIdtoMotorId[Motor_i] = AddControlCallback(ThreadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToDancerId[Motor_i],Motor_i); + ControlIdtoMotorId[Motor_i] = AddControlCallback(NULL,ThreadControlCBFunction, eOneMillisecond,Control_Read_Dancer_Position,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToDancerId[Motor_i],Motor_i); #endif } // if (HW_Motor_Id == HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled // AddControlCallback(ThreadSpeedControlCBFunction, eOneMillisecond,TemplateDataReadCBFunction,(IfTypeThread*0x100+Motor_i),ThreadMotorIdToMotorId[Motor_i],0); - if (Motor_i == HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled + if (Motor_i == ThreadMotorIdToMotorId[DRYER_MOTOR]) // dryer motor is speed controlled. later a speed sensor will be utilized, but for now it will not be controlled continue; } #ifdef TEST_PID_THREAD @@ -833,9 +906,6 @@ uint32_t ThreadInitialTestStub(HardwareMotor * request) #endif PrepareReady(Module_Thread,ModuleDone); //set 3 dancers to the profile positions - InitialProcess = true; - initialpos = 0xFFFF; - Poolerinitialpos = 0xFFFF; return OK; } @@ -852,11 +922,13 @@ void SetOriginMotorSpeed(float process_speed) / (2 * PI * MotorsCfg[HW_Motor_Id].pulleyradius); //MotorControlConfig[Motor_i].m_SetParam = motor_speed; OriginalMotorSpd_2PPS[Motor_i] = (int) motor_speed; + InitialDryerSpeed = 0.0; CurrentControlledSpeed[Motor_i] = (int) motor_speed; - //Report("Original Speed",__FILE__,Motor_i,motor_speed,RpWarning,process_speed,0); + if (process_speed > 1) + ReportWithPackageFilter(ThreadFilter,"Original Speed",__FILE__,Motor_i,(int)motor_speed,RpWarning,process_speed,0); - for (i = 0; i <= MAX_CONTROL_SAMPLES; i++) - MotorSpeedSamples[Motor_i][i] = motor_speed; + // for (i = 0; i <= MAX_CONTROL_SAMPLES; i++) + // MotorSpeedSamples[Motor_i][i] = motor_speed; } } void ThreadPreSegmentEnded(void) @@ -865,6 +937,28 @@ void ThreadPreSegmentEnded(void) REPORT_MSG (0,"First ThreadPreSegmentEnded"); PreSegmentReady(Module_Thread,ModuleDone); } +int DrierDivider = 20; +uint32_t ThreadDryerRampUp(uint32_t IfIndex, uint32_t BusyFlag) +{ + InitialDryerSpeed += (OriginalMotorSpd_2PPS[DRYER_MOTOR]/DrierDivider); + if (InitialDryerSpeed >= OriginalMotorSpd_2PPS[DRYER_MOTOR]) + { + InitialDryerSpeed = OriginalMotorSpd_2PPS[DRYER_MOTOR]; + SafeRemoveControlCallback(ControlIdtoMotorId[DRYER_MOTOR], ThreadDryerRampUp ); + ControlIdtoMotorId[DRYER_MOTOR] = 0xFF; + //ReportWithPackageFilter(ThreadFilter,"ThreadDryerRampUp end",__FILE__,ControlIdtoMotorId[DRYER_MOTOR],(int)InitialDryerSpeed,RpWarning,(int)OriginalMotorSpd_2PPS[DRYER_MOTOR],0); + } + if (InitialDryerSpeed == 0) + { + //ReportWithPackageFilter(ThreadFilter,"ThreadDryerRampUp Stopped",__FILE__,ControlIdtoMotorId[DRYER_MOTOR],(int)InitialDryerSpeed,RpWarning,(int)OriginalMotorSpd_2PPS[DRYER_MOTOR],0); + return OK; + } + MotorSetSpeed(ThreadMotorIdToMotorId[DRYER_MOTOR],InitialDryerSpeed ); + //ReportWithPackageFilter(ThreadFilter,"ThreadDryerRampUp",__FILE__,ControlIdtoMotorId[DRYER_MOTOR],(int)InitialDryerSpeed,RpWarning,(int)OriginalMotorSpd_2PPS[DRYER_MOTOR],0); + + + return OK; +} //******************************************************************************************************************** uint32_t ThreadPreSegmentState(void *SegmentDetails, uint32_t SegmentId) @@ -875,10 +969,10 @@ uint32_t ThreadPreSegmentState(void *SegmentDetails, uint32_t SegmentId) float process_speed = dyeingspeed; if (dyeingspeed == 0) { - LOG_ERROR (dyeingspeed," job speed zero"); + ReportWithPackageFilter(ThreadFilter,"job speed zero.",__FILE__,__LINE__,(int)dyeingspeed,RpError,(int)SegmentId,0); return ERROR; } - REPORT_MSG (dyeingspeed," ThreadPreSegmentState"); + ReportWithPackageFilter(ThreadFilter,"ThreadPreSegmentState",__FILE__,__LINE__,(int)dyeingspeed,RpWarning,(int)SegmentId,0); if (SegmentId == 0) // do all this only in the beginning of the job. do not touch after that (assuming spool does not change mid job) { SetOriginMotorSpeed(process_speed); @@ -886,7 +980,18 @@ uint32_t ThreadPreSegmentState(void *SegmentDetails, uint32_t SegmentId) PrepareState = false; #ifndef TEST_PID_THREAD // 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]); + if(MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].speedmaster == false) + { + DrierDivider = dyeingspeed/3; //ramp up drier in 5 cm/sec steps + } + else + { + DrierDivider = dyeingspeed/5; //ramp up drier in 5 cm/sec steps + } + ReportWithPackageFilter(ThreadFilter,"Drier ramp up",__FILE__,__LINE__,(int)dyeingspeed,RpWarning,(int)DrierDivider,0); + InitialDryerSpeed = OriginalMotorSpd_2PPS[DRYER_MOTOR]/DrierDivider; + MotorSetSpeed(ThreadMotorIdToMotorId[DRYER_MOTOR],InitialDryerSpeed ); + ControlIdtoMotorId[DRYER_MOTOR] = AddControlCallback("DryerRampUp",ThreadDryerRampUp, 200,TemplateDataReadCBFunction,0,0,0); #endif #ifdef HUNDRED_MICROSECONDS_DANCER_READ MillisecLogInit(); @@ -1004,10 +1109,10 @@ char Endstr[150]; { int Motor_i; ThreadControlActive = false; - + uint32_t status = OK,tempCtl; usnprintf(Endstr, 100, "Total _processed length: Feeder: %d Pooler %d",(int)TotalProcessedLength,(int)PoolerTotalProcessedLength); SendJobProgress(0.0,0,false, Endstr); - Report(Endstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); + ReportWithPackageFilter(ThreadFilter,Endstr,__FILE__,__LINE__,(int)TotalProcessedLength,RpWarning,(int)PoolerTotalProcessedLength,0); ThreadUpdateProcessLength (0.0,(void *)NULL); //TotalProcessedLength = 0.0; @@ -1018,27 +1123,31 @@ char Endstr[150]; if (SpeedControlId != 0xFF) { if(RemoveControlCallback(SpeedControlId,ThreadLengthCBFunction)!=OK) - LOG_ERROR(SpeedControlId,"RemoveControl Failed"); + ReportWithPackageFilter(ThreadFilter,"Remove Control Failed.",__FILE__,__LINE__,(int)Motor_i,RpError,(int)SpeedControlId,0); SpeedControlId = 0xFF; } if (PoolerSpeedControlId != 0xFF) { if(RemoveControlCallback(PoolerSpeedControlId,PoolerThreadLengthCBFunction)!=OK) - LOG_ERROR(PoolerSpeedControlId,"RemoveControl Failed"); + ReportWithPackageFilter(ThreadFilter,"Remove Control Failed.",__FILE__,__LINE__,(int)Motor_i,RpError,(int)PoolerSpeedControlId,0); PoolerSpeedControlId = 0xFF; } for ( Motor_i = 0;Motor_i <= WINDER_MOTOR;Motor_i++) { + tempCtl = ControlIdtoMotorId[Motor_i]; if (ControlIdtoMotorId[Motor_i] != 0xFF) { - if(RemoveControlCallback(ControlIdtoMotorId[Motor_i],ThreadControlCBFunction) == OK) + status = RemoveControlCallback(ControlIdtoMotorId[Motor_i],ThreadControlCBFunction); + if(status == OK) ControlIdtoMotorId[Motor_i] = 0xFF; else - LOG_ERROR (ControlIdtoMotorId[Motor_i],"Remove Control failed"); + ReportWithPackageFilter(ThreadFilter,"Remove Control Failed.",__FILE__,__LINE__,(int)Motor_i,RpError,(int)ControlIdtoMotorId[Motor_i],0); } + //ReportWithPackageFilter(ThreadFilter,"Remove Control",__FILE__,Motor_i,(int)status,RpError,(int)tempCtl,0); + } - Task_sleep(10); + Task_sleep(100); for ( Motor_i = 0;Motor_i <= WINDER_MOTOR;Motor_i++) { MotorStop(ThreadMotorIdToMotorId[Motor_i],Hard_Hiz); diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c index c2451118d..504b43726 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_init.c @@ -17,6 +17,7 @@ #include "CartridgeValidationResponse.pb-c.h" #include "Modules/General/buttons.h" #include "Modules/IFS/ifs.h" +#include <Drivers/I2C_Communication/I2C_Task.h> // //#define CARTRIDGE_INK_TIMEOUT 60 //#define CARTRIDGE_INK_TIMEOUTx2 120 @@ -52,7 +53,7 @@ U8 CartridgeWasteFilling(bool status); U8 CartridgePrecenceCBFunction(); -U8 SetCartridgeLED(cartridge_name name,led_status led); +//U8 SetCartridgeLED(cartridge_name name,led_status led); bool SetWastePump( bool power); bool SetValveDirection(); @@ -70,61 +71,6 @@ bool SetActiveWastCartridge(); -//bool PowerOffInProcessGetState(); - - -//struct cartridge_params -//{ -// uint32_t serial_number; -// cartridge_status status; /*WasteEmpty, WasteFilling, WasteFail, WasteFull....... */ -// MidTank_t cart_color; -// bool autheticate; -// uint32_t time_out; -//}; - -//struct pump_params -//{ -// bool status; -// uint32_t time; -//}; - - -//struct WHS_sensors_status -//{ -// WHS_CarteidgeCoverSensorStatus cartridge_cover; /*open(1) ,close(0) */ -// WHS_CarteidgPrecenseSensorStatus IFS_Ink_precense_sensor; /*presence(1) ,not_precense(0) */ -// bool IFS_Ink_precense_sensor_flag; /* 1=event 0=no enent */ -// WHS_CarteidgPrecenseSensorStatus waste_cartridge1_precense_sensor; /*presence(1) ,not_precense(0) */ -// bool waste_cartridge1_precense_sensor_flag; /* 1=event 0=no enent */ -// WHS_CarteidgPrecenseSensorStatus waste_cartridge2_precense_sensor; /*presence(1) ,not_precense(0) */ -// bool waste_cartridge2_precense_sensor_flag; /* 1=event 0=no enent */ -// bool waste_tank_filter_sensor; /*presence(1) ,not_precense(0) */ -// WHS_EmptySensorStatus waste_tank_empty_sensor; /*enpty(1) ,not_empty(0) */ -// WHS_FullSensorStatus waste_tank_full_sensor; /*full(1) ,not_full(0) */ -// bool waste_tank_over_flow_sensor; /*over_flow(1) ,not_over_flow(0) */ -//}; - - - -//struct WHS_information -//{ -// WHS_sttMachin sttMachine; -// struct cartridge_params cartridge_1, cartridge_2; -// struct WHS_sensors_status WHS_sensors; -// struct pump_params WHS_pump; -// bool WHS_valve; -// WHS_sensor event; -// cartridge_name active_cartridge; -// uint32_t Cartridge_Ink_device_Id; -// uint32_t Cartridge_Ink_TimeOut_device_Id; -// uint32_t Cartridge_Waste1_device_Id; -// uint32_t Cartridge_Waste2_device_Id; -// uint32_t Cartridge_Cover_device_Id; -// //PBcolor Ink_Led, cartridge_1_Led, cartridge_2_Led; -// double MidTank_capacity; -//}; - -//struct WHS_information WHS_info; RfidTagContent cartridge_info; // function for RFID: @@ -147,44 +93,6 @@ bool WHS_IsValveOpen(){return WHS_info.WHS_valve;} bool RD_MID_TANK_Level(){return 0 /* FULL*/ ;} //bool ColorMatch(); //bool MidTankValvesAction(bool action); -//bool IFS_TimeOutAlarm(); - -//bool IFS_TimeOutAlarm() -//{ -// bool ret = OK; -// switch (WHS_info.Ink.cart_color) //todo enter the correct color from RFID -// { -// case 1 : -// AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_1_FILL_TIMEOUT, true); -// break; -// case 2 : -// AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_2_FILL_TIMEOUT, true); -// break; -// case 3 : -// AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_3_FILL_TIMEOUT, true); -// break; -// case 4 : -// AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_4_FILL_TIMEOUT, true); -// break; -// case 5 : -// AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_5_FILL_TIMEOUT, true); -// break; -// case 6 : -// AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_6_FILL_TIMEOUT, true); -// break; -// case 7 : -// AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_7_FILL_TIMEOUT, true); -// break; -// case 8 : -// AlarmHandlingSetAlarm( EVENT_TYPE__MID_TANK_8_FILL_TIMEOUT, true); -// break; -// default: //wrong color -// ret = notOK; -// break; -// } -// -// return ret; -//} @@ -419,7 +327,11 @@ bool SetWastePump( bool power) // if (( power == OPEN ) && (WHS_info.WHS_sensors.cartridge_cover == CLOSE)) if ( power == OPEN ) { +#ifdef Use_WHS_Card + Trigger_SetWHSPump(OPEN); +#else Pumps_Control(WHS_WTANKPUMP2, OPEN); //waste_pump_power_on(); +#endif REPORT_MSG(WHS_empty," ------------ WHS WHS_empty start PUMP ----------------- "); WHS_info.WHS_pump.status = OPEN; WHS_info.WHS_pump.time = STARTCOUNT; @@ -427,7 +339,11 @@ bool SetWastePump( bool power) } else { - Pumps_Control(WHS_WTANKPUMP2, CLOSE); //waste_pump_power_off(); +#ifdef Use_WHS_Card + Trigger_SetWHSPump(CLOSE); +#else + Pumps_Control(WHS_WTANKPUMP2, CLOSE); //waste_pump_power_on(); +#endif REPORT_MSG(WHS_empty," ------------ WHS WHS_empty stop PUMP ----------------- "); WHS_info.WHS_pump.status = CLOSE; WHS_info.WHS_pump.time = STOPCOUNT; @@ -452,7 +368,12 @@ bool SetValveDirection() else WHS_info.WHS_valve = VALVE_DIR_WASTE_CARTRIDGE2; ReportWithPackageFilter(WasteFilter,"------------WHS_info.WHS_valve -----------------", __FILE__,__LINE__,WHS_info.WHS_valve, RpMessage, 0 ,0); - Valve_Set(VALVE_WASTE_TANK, WHS_info.WHS_valve); + +#ifdef Use_WHS_Card + Trigger_SetWHSValveWatseCartridge(WHS_info.WHS_valve); +#else + Valve_Set(VALVE_WASTE_TANK, WHS_info.WHS_valve); +#endif //ret = OK; return ret; @@ -464,20 +385,22 @@ bool SetValveDirection() U8 CartridgeWasteFilling(bool status) { bool ret = notOK; - SetValveDirection(); + //SetValveDirection(); if ((status == ON) && (WHS_info.active_cartridge != no_waste_cartridge)) { - //SetValveDirection();//Valve_Set(VALVE_WASTE_TANK, WHS_info.active_cartridge); //set the valve direction + SetValveDirection();//Valve_Set(VALVE_WASTE_TANK, WHS_info.active_cartridge); //set the valve direction //Pannel_Leds(PANEL_BUTTON_OR_CRAT_ID Pannel_Led_Id, OPERATION_MODE LED_Mode); //set cartridge led color slow blink SetWastePump(OPEN); //WHS_info.WHS_pump.time = 0; REPORT_MSG(WHS_empty," ------------ WHS WHS_empty start PUMP ----------------- "); + AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, false); ret=OK; } else // stop Waste cartridge filling { SetWastePump(CLOSE); - //Valve_Set(VALVE_WASTE_TANK, VALVE_DIR_WAST_CARTRIDGE1); //set the valve direction set to low POWER !!! + Valve_Set(VALVE_WASTE_TANK, VALVE_DIR_WASTE_CARTRIDGE1); //set the valve direction set to low POWER !!! + AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, true); switch (WHS_info.active_cartridge) { @@ -589,7 +512,7 @@ bool initWHS_WasteTank() WHS_info.WHS_sensors.waste_tank_empty_sensor = RdWasteTankEmptySensor(); WHS_info.WHS_sensors.waste_tank_full_sensor = SENSORnotFULL; UpdateStateMachine(); - AddControlCallback(WasteTankCBFunction, WasteTankCallBackTime , WasteTankCallBackFunction, 0,0,0);//eOneMinute + AddControlCallback("Waste tank",WasteTankCBFunction, WasteTankCallBackTime , WasteTankCallBackFunction, 0,0,0);//eOneMinute return OK; } @@ -660,14 +583,6 @@ WHS_sensor WasteTankCallBackFunction() return ret; } -/* -bool start_WHS_machin() -{ - AddControlCallback( WasteTankCBFunction, eTenMillisecond, WasteTankCallBackFunction, 0,0,0 );// eOneMinute - return OK; -} - */ - bool WasteTankCBFunction() { @@ -700,7 +615,7 @@ bool WasteTankCBFunction() REPORT_MSG(WHS_filling," ------------ WHS_empty ----------------- "); ret = CartridgeWasteFilling(OFF); WHS_info.Cartridge_Cover_device_Id = RemoveControlCallback(WHS_info.Cartridge_Cover_device_Id, WasteTankCBFunction ); - WHS_info.Cartridge_Cover_device_Id = AddControlCallback( WasteTankCBFunction, CartridgeCoverCallBackTime, CartridgeCoverCallBackFunction, 0,0,0 );//eOneSecond + WHS_info.Cartridge_Cover_device_Id = AddControlCallback("Cartridge Cover Door", WasteTankCBFunction, CartridgeCoverCallBackTime, CartridgeCoverCallBackFunction, 0,0,0 );//eOneSecond WrRFIDStatus(WHS_info.active_cartridge, WasteFull);//write RFID status todo } else @@ -718,6 +633,8 @@ bool WasteTankCBFunction() REPORT_MSG(WHS_emptying," ------------ WHS_full , cartridge cover is open cant start the pump!!!! ----------------- "); REPORT_MSG(WHS_emptying," ------------ close the cartridge cover to start the pump!!!! ----------------- "); //pump_on_flag = OPEN; + AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, true); + WHS_info.WHS_sensors.waste_tank_full_sensor = SENSORnotFULL; break; } @@ -726,7 +643,7 @@ bool WasteTankCBFunction() WHS_info.sttMachine = WHS_full; REPORT_MSG(WHS_emptying," ------------ WHS_full ----------------- "); WHS_info.Cartridge_Cover_device_Id = RemoveControlCallback(WHS_info.Cartridge_Cover_device_Id, WasteTankCBFunction ); - WHS_info.Cartridge_Cover_device_Id = AddControlCallback( WasteTankCBFunction, CartridgeCoverCallBackFastTime , CartridgeCoverCallBackFunction, 0,0,0 );//eTenMillisecond + WHS_info.Cartridge_Cover_device_Id = AddControlCallback("Cartridge Cover Door", WasteTankCBFunction, CartridgeCoverCallBackFastTime , CartridgeCoverCallBackFunction, 0,0,0 );//eTenMillisecond if (RdRFIDStatus (WHS_info.active_cartridge) == WasteEmpty) { ret = WrRFIDStatus(WHS_info.active_cartridge, WasteFilling);//write RFID status todo @@ -794,9 +711,9 @@ bool WasteTankCBFunction() if ( !PowerOffInProcessGetState() ) { - IFS_info.Cartridge_Ink_device_Id = AddControlCallback( WasteTankCBFunction, CartridgeInkCallBackTime , CartridgeInkCallBackFunction , 0,0,0 ); //eOneSecond - WHS_info.Cartridge_Waste1_device_Id = AddControlCallback( WasteTankCBFunction, CartridgeWaste1CallBackTime, CartridgeWaste1CallBackFunction, 0,0,0 ); //eOneSecond - WHS_info.Cartridge_Waste2_device_Id = AddControlCallback( WasteTankCBFunction, CartridgeWaste2CallBackTime, CartridgeWaste2CallBackFunction, 0,0,0 ); //eOneSecond + IFS_info.Cartridge_Ink_device_Id = AddControlCallback("Ink_Cartridge", WasteTankCBFunction, CartridgeInkCallBackTime , CartridgeInkCallBackFunction , 0,0,0 ); //eOneSecond + WHS_info.Cartridge_Waste1_device_Id = AddControlCallback("Waste1 Cartridge", WasteTankCBFunction, CartridgeWaste1CallBackTime, CartridgeWaste1CallBackFunction, 0,0,0 ); //eOneSecond + WHS_info.Cartridge_Waste2_device_Id = AddControlCallback("Waste2 Cartridge", WasteTankCBFunction, CartridgeWaste2CallBackTime, CartridgeWaste2CallBackFunction, 0,0,0 ); //eOneSecond } else { @@ -830,13 +747,11 @@ bool WasteTankCBFunction() { IFS_info.INK_isOK_flag = false;//0 REPORT_MSG(WHS_full," ------------ change INK cartridge status to color Used ----------------- "); - MidTankValvesAction(Cartridge_MidTank_ON); // test the Mid-tank capacity is not at Nadav sequence - // Enable_MidTank_Pressure_Reading(IFS_info.Ink.cart_color); - MidTank_Pressure = Read_MidTank_Pressure_Sensor(IFS_info.Ink.cart_color); + MidTank_Pressure = Get_MidTank_Pressure_Sensor(IFS_info.Ink.cart_color); if ( MidTank_Pressure > MidTank_Pressure_EMPTY ) { - ReportWithPackageFilter(WasteFilter,"------------ close door MidTank_Pressure > MidTank_Pressure_EMPTY -----------------", __FILE__,__LINE__,(MidTank_Pressure_EMPTY), RpMessage, (int)(MidTank_Pressure*1000), 0); + ReportWithPackageFilter(WasteFilter,"------------ close door MidTank_Pressure > MidTank_Pressure_EMPTY -----------------", __FILE__,__LINE__,(int)(MidTank_Pressure_EMPTY*1000), RpMessage, (int)(MidTank_Pressure*1000), 0); MidTankValvesAction(Cartridge_MidTank_OFF); //Disable_MidTank_Pressure_Reading(IFS_info.Ink.cart_color); REPORT_MSG(WHS_full," ------------ Mid-tank not empty ----------------- "); @@ -844,15 +759,18 @@ bool WasteTankCBFunction() } IFS_info.MidTank_capacity = MidTank_Pressure; REPORT_MSG(WHS_full," ------------ Mid-tank filling in process ----------------- "); + ReportWithPackageFilter(WasteFilter,"------------ Mid-tank filling in process -----------------", __FILE__,__LINE__,(int)(MidTank_Pressure_EMPTY*1000), RpMessage, (int)(MidTank_Pressure*1000), 0); Pannel_Leds(CART_1, MODE_ON); cart1.color = BLINK; + MidTankValvesAction(Cartridge_MidTank_ON); //add timeout + IFS_TimeOutAlarm(false); IFS_info.Ink.time_out = 1; - IFS_info.Cartridge_Ink_TimeOut_device_Id = AddControlCallback( WasteTankCBFunction, CartridgeInkTimeOutCallBackTime, CartridgeInkTimeOutCallBackFunction, 0,0,0 ); //eOneSecond + IFS_info.Cartridge_Ink_TimeOut_device_Id = AddControlCallback("Ink Cartridge TimeOut", WasteTankCBFunction, CartridgeInkTimeOutCallBackTime, CartridgeInkTimeOutCallBackFunction, 0,0,0 ); //eOneSecond // //add callback for midtank status is full -// IFS_info.Cartridge_Ink_TimeOut_device_Id = AddControlCallback( WasteTankCBFunction, CartridgeInkTimeOutCallBackTime, CartridgeInkTimeOutCallBackFunction, 0,0,0 ); //eOneSecond +// IFS_info.Cartridge_Ink_TimeOut_device_Id = AddControlCallback(NULL, WasteTankCBFunction, CartridgeInkTimeOutCallBackTime, CartridgeInkTimeOutCallBackFunction, 0,0,0 ); //eOneSecond // Enable_MidTank_Pressure_Reading(IFS_info.Ink.cart_color); // Read_MidTank_Pressure_Sensor(IFS_info.Ink.cart_color); // if ( Get_MidTank_Pressure_Sensor(IFS_info.Ink.cart_color) > MidTank_Pressure_FULL ) @@ -930,6 +848,7 @@ bool WasteTankCBFunction() { //WHS_info.cartridge_1.autheticate = PASSED; //='0' //???WHS_info.WHS_valve = waste_cartridge1; // or we should do it only before pumping???? + AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, false); } else { @@ -958,6 +877,7 @@ bool WasteTankCBFunction() //WHS_info.cartridge_2.autheticate = PASSED; //='0' //???WHS_info.WHS_valve = waste_cartridge2; // or we should do it only before pumping???? //???SetValveDirection(); // or we should do it only before pumping???? + AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, false); } else { @@ -1017,12 +937,12 @@ bool WasteTankCBFunction() REPORT_MSG(WHS_full," ------------ call customer support ----------------- "); Pannel_Leds(CART_1, MODE_ON); cart1.color = fastBILNK; - //IFS_TimeOutAlarm(); + IFS_TimeOutAlarm(true); break; case IFS_MidTankFull: // Disable_MidTank_Pressure_Reading(IFS_info.Ink.cart_color); - WHS_info.Cartridge_Ink_TimeOut_device_Id = RemoveControlCallback(WHS_info.Cartridge_Ink_TimeOut_device_Id, WasteTankCBFunction ); + IFS_info.Cartridge_Ink_TimeOut_device_Id = RemoveControlCallback(IFS_info.Cartridge_Ink_TimeOut_device_Id, WasteTankCBFunction ); REPORT_MSG(WHS_full," ------------ Change cartridge status to Waste Empty ----------------- "); Pannel_Leds(CART_1, MODE_OFF); cart1.color = colorOFF; @@ -1257,11 +1177,11 @@ bool InitCartStatus() if (WHS_info.WHS_sensors.cartridge_cover == WHS_CartridgeCoverOPEN) { REPORT_MSG(parameter," ------------ WHS_CartridgeCoverOPEN : add callback for cart1 and cart 2 ----------------- "); - IFS_info.Cartridge_Ink_device_Id = AddControlCallback( WasteTankCBFunction, eOneSecond, CartridgeInkCallBackFunction, 0,0,0 ); - WHS_info.Cartridge_Waste1_device_Id = AddControlCallback( WasteTankCBFunction, eOneSecond, CartridgeWaste1CallBackFunction, 0,0,0 ); - WHS_info.Cartridge_Waste2_device_Id = AddControlCallback( WasteTankCBFunction, eOneSecond, CartridgeWaste2CallBackFunction, 0,0,0 ); + IFS_info.Cartridge_Ink_device_Id = AddControlCallback("Ink Cartridge CB" , WasteTankCBFunction, eOneSecond, CartridgeInkCallBackFunction , 0,0,0 ); + WHS_info.Cartridge_Waste1_device_Id = AddControlCallback("Waste1 Cartridge CB", WasteTankCBFunction, eOneSecond, CartridgeWaste1CallBackFunction, 0,0,0 ); + WHS_info.Cartridge_Waste2_device_Id = AddControlCallback("Waste2 Cartridge CB", WasteTankCBFunction, eOneSecond, CartridgeWaste2CallBackFunction, 0,0,0 ); } - WHS_info.Cartridge_Cover_device_Id = AddControlCallback( WasteTankCBFunction, eOneSecond, CartridgeCoverCallBackFunction, 0,0,0 ); + WHS_info.Cartridge_Cover_device_Id = AddControlCallback("Cartridge Cover Door", WasteTankCBFunction, eOneSecond, CartridgeCoverCallBackFunction, 0,0,0 ); return OK; } @@ -1301,138 +1221,32 @@ bool SetActiveWastCartridge() uint8_t parameter = 5; bool ret = notOK; - if (( WHS_info.WHS_sensors.waste_cartridge1_precense_sensor == PRECENSE ) && - (WHS_info.cartridge_1.autheticate == PASSED)) + if (( WHS_info.WHS_sensors.waste_cartridge1_precense_sensor == PRECENSE ) + && (WHS_info.cartridge_1.autheticate == PASSED) + && (WHS_info.cartridge_1.status == WasteEmpty)) { REPORT_MSG(parameter," ------------ WHS : active_cartridge = waste_cartridge 1 ----------------- "); WHS_info.active_cartridge = waste_cartridge1; + AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, false); } - else if (( WHS_info.WHS_sensors.waste_cartridge2_precense_sensor == PRECENSE) && - (WHS_info.cartridge_2.autheticate == PASSED)) + else if (( WHS_info.WHS_sensors.waste_cartridge2_precense_sensor == PRECENSE) + && (WHS_info.cartridge_2.autheticate == PASSED) + && (WHS_info.cartridge_2.status == WasteEmpty)) { REPORT_MSG(parameter," ------------ WHS : active_cartridge = waste_cartridge 2 ----------------- "); WHS_info.active_cartridge = waste_cartridge2; + AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, false); } else { REPORT_MSG(parameter," ------------ WHS : NO active_cartridge ----------------- "); WHS_info.active_cartridge = no_waste_cartridge; + AlarmHandlingSetAlarm( EVENT_TYPE__NO_WASTE_CARTRIDGE_AVAILABLE, true); } return ret; } -/* -U8 RdWastePrecenseSensor(cartridge_name name) -{ - - // we have 2 waste_cartridge (waste_cartridge1 and waste_cartridge2) - // bool Is_Cartridge_Present(PANEL_BUTTON_OR_CRAT_ID Cartridge); //use CART_2 or CART_3 - - WHS_Read_GPI_Registers(); - switch (name) - { - case waste_cartridge1: - if (WHS_info.WHS_sensors.waste_cartridge1_precense_sensor != Is_Cartridge_Present(CART_2)) - { - WHS_info.WHS_sensors.waste_cartridge1_precense_sensor = !WHS_info.WHS_sensors.waste_cartridge1_precense_sensor; - WHS_info.event = WHS_waste1_presence_sensor; - } - break; - case waste_cartridge2: - if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor != Is_Cartridge_Present(CART_3)) - { - WHS_info.WHS_sensors.waste_cartridge2_precense_sensor = !WHS_info.WHS_sensors.waste_cartridge2_precense_sensor; - WHS_info.event = WHS_waste2_presence_sensor; - } - break; - default : - break; - } - return OK; -} -*/ -/* -U8 cartridge_handeling() -{ - AddControlCallback( CartridgePrecenceCBFunction, eOneMinute, CartridgePrecenceCallBackFunction, 0,0,0 ); // - return OK; -} -*/ - -//U8 SetCartridgeLED(cartridge_name name,led_status led) -//{ -// bool ret = notOK; -// return ret; -//} - -/* -U8 CartridgePrecenceCBFunction() -{ - if ( WHS_info.WHS_sensors.waste_cartridge1_precense_sensor_flag ) // if we have changes at cartridge1: - { - if (WHS_info.WHS_sensors.waste_cartridge1_precense_sensor) // if new cartridge is presence: - { - if (rd_waste_cartridge_param()== OK) //read parameter from RFID - SetCartridgeLED(waste_cartridge1,led_on); //change led status to ON - } - else // if the cartridge is removed - { - SetCartridgeLED(waste_cartridge1, led_off); //change led status to OFF - } - WHS_info.WHS_sensors.waste_cartridge1_precense_sensor_flag = 0; //remove the flag - - } - else if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor_flag ) - { - if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor) - { - - } - else - { - - } - } - return OK; -}*/ -/* -U8 CartridgePrecenceCallBackFunction() -{ - bool ret = notOK; - return ret; -} -*/ - - - - - - - - -//bool CartridgeCoverCBFunction() -//{ -// bool ret = notOK; -// if (WHS_info.WHS_sensors.cartridge_cover == OPEN) -// { -// //if (WHS_info.WHS_pump == ON) -// //{ -// SetWastePump(CLOSE); //pump OFF -// //} -// // prevent NEW Job -// // Display "Close cartridge cover" -// // pop up message in GUI -// } -// else -// { -// // can do a NEW Job -// // remove message "Close cartridge cover" -// // remove pop up message in GUI -// } -// WHS_info.event = WHS_no_event; -// return ret; -//} /*------------------------------------------------------------------------------------------------*/ @@ -1442,6 +1256,7 @@ U8 CartridgePrecenceCallBackFunction() U8 WHS_init(void) { SetWastePump(CLOSE); + Valve_Set(VALVE_WASTE_TANK, VALVE_DIR_WASTE_CARTRIDGE1); InitCartStatus(); initWHS_WasteTank(); @@ -1578,343 +1393,6 @@ U8 WHS_HW_test() } - - - - - - -/*------------------------------------------------------------------------------------------------*/ - -/* -//U8 WasteCartridgeCallBackFunction(); -//U8 WasteCartridgeCBFunction(); - -bool start_WHS_machin(); -U8 CartridgePrecenceCallBackFunction(); -uint32_t EmptyWasteTankFullCBFunction(); -U8 cartridge_handeling(); - -U8 RdWastePrecenseSensor(cartridge_name name); - -U8 rd_waste_cartridge_param(); -U8 set_cartridge_1(U8 cartridge_status); -U8 set_cartridge_2(U8 cartridge_status); -U8 check_sensors_before_start_emptying(); -bool check_RFID_authentication(); - -uint32_t waste_tank_init(void); -uint32_t EmptyWasteTankCBFunction(); - - - -U8 WasteCartridgeCallBackFunction() -{ - bool ret = notOK; - - ret = RdWastePrecenseSensor(waste_cartridge1); - ret = RdWastePrecenseSensor(waste_cartridge2); - return ret; -} - - -U8 Wr_cartridge_RFid(cartridge_name cartridge, cartridge_status status); -WHS_sttMachin UpdateStateMachine(); - -*/ - -// uint32_t updateWasteTankStruct(); -//uint32_t WasteTankFullCallBackFunction(uint32_t IfIndex, uint32_t ReadValue); - -/*--- functipons not in use ----*/ - -/* -U8 check_sensors_before_start_emptying() ???????????????????? -{ - bool ret = notOK; - - if ((WHS_info.WHS_sensors.cartridge_cover == CLOSE) && - (( WHS_info.WHS_sensors.waste_cartridge1_precense_sensor == precense) || - (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor == precense)) && - (WHS_info.WHS_sensors.waste_tank_filter_sensor == 1 )) - { - ret = OK; - } - return ret; -} - - - - -uint32_t updateWasteTankStruct() //----------what is the timing??????----------------- -{ -// bool waste_number =1; - - rd_waste_precense_sensor( ); - RdWasteTankFilterSensor(); - rd_whs_cartridge_cover(); - -// rd_waste_tank_RdWasteTankEmptySensor_sensor(); -// RdWasteTankFullSensor(); -// rd_waste_tank_over_flow_sensor(); - return OK; -} - - - - -uint32_t WasteTankFullCallBackFunction(uint32_t IfIndex, uint32_t ReadValue) -{ - if ( RdWasteTankFullSensor() != WHS_info.WHS_sensors.waste_tank_full_sensor ) - { - WHS_info.event = WHS_full_sensor; - WHS_info.WHS_sensors.waste_tank_full_sensor = !WHS_info.WHS_sensors.waste_tank_full_sensor; - } - return OK; -} - - -uint32_t WasteTankEmptyCallBackFunction(uint32_t IfIndex, uint32_t ReadValue) -{ - if (RdWasteTankEmptySensor() != WHS_info.WHS_sensors.waste_tank_empty_sensor) - { - WHS_info.event = WHS_empty_sensor; - WHS_info.WHS_sensors.waste_tank_empty_sensor = !WHS_info.WHS_sensors.waste_tank_empty_sensor; - } - return OK; -} - -uint32_t WasteTankOverflowCallBackFunction(uint32_t IfIndex, uint32_t ReadValue) -{ - if (rd_waste_tank_over_flow_sensor() != WHS_info.WHS_sensors.waste_tank_over_flow_sensor) - { - WHS_info.event = WHS_overflow_sensor; - WHS_info.WHS_sensors.waste_tank_over_flow_sensor = !(WHS_info.WHS_sensors.waste_tank_over_flow_sensor); - } - return OK; -} - - -U8 CartridgeCoverCallBackFunction() -{ - bool ret = notOK; - return ret; -} - - -U8 CartridgeCoverCBFunction() -{ - bool ret = notOK; - return ret; -} - - - - -uint32_t WHS_machin() -{ - switch( WHS_info.sttMachine ) - { - case WHS_empty: // last OnOffPBstate was OFF - - break; - case WHS_filling : // last OnOffPBstate was COUNTPB - - break; - case WHS_emptying: // last OnOffPBstate was SHORTPB - - break; - case WHS_full: - - break; - case WHS_overflow: - - break; - default: // WHS_sttError - break; - } - return OK; -} - - - - -uint32_t EmptyWasteTankCBFunction() -{ - bool ret = notOK; -//--------try state machine------- - if (WHS_info.event == WHS_no_event) - return OK; - else - { -// WHS_info.sttMachine = UpdateStateMachine(); -// WHS_info.event = WHS_no_event; - switch (WHS_info.event) - { - case WHS_empty_sensor: - if (WHS_info.WHS_sensors.waste_tank_empty_sensor) - { - - } - else - { - ret = CartridgeWasteFilling(OFF); - } - break; - case WHS_full_sensor: - if (WHS_info.WHS_sensors.waste_tank_full_sensor) - { - ret = CartridgeWasteFilling(ON); - // cant start a new Job - } - else - { - // can start a new JOB - WHS_info.sttMachine = WHS_empty; - } - break; - case WHS_overflow_sensor: - if (WHS_info.WHS_sensors.waste_tank_empty_sensor) - { - - // 1.StopMacine - // 2. - - WHS_info.sttMachine = WHS_overflow; - } - else - { - WHS_info.sttMachine = WHS_full; - } - break; - default: //error state - break; - } - WHS_info.event = WHS_no_event;; - } - return ret; -} - - - -uint32_t start_WHS_machin() -{ - switch( WHS_info.sttMachine ) - { - case WHS_empty: // last OnOffPBstate was OFF - AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankEmptyCallBackFunction, 0,0,0 ); // - break; - case WHS_filling : // last OnOffPBstate was COUNTPB - AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankFullCallBackFunction, 0,0,0 ); // - AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankEmptyCallBackFunction, 0,0,0 ); // - break; - case WHS_emptying: // last OnOffPBstate was SHORTPB - AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankEmptyCallBackFunction, 0,0,0 ); // - AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankFullCallBackFunction, 0,0,0 ); // - break; - case WHS_full: - AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankFullCallBackFunction, 0,0,0 ); // - AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankOverflowCallBackFunction, 0,0,0 ); // - break; - case WHS_overflow: - AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankFullCallBackFunction, 0,0,0 ); // - AddControlCallback( EmptyWasteTankCBFunction, eOneMinute, WasteTankOverflowCallBackFunction, 0,0,0 ); // - break; - default: // WHS_sttError - break; - } - return OK; -} - -*/ - -//U8 WasteCartridgeCBFunction() -//{ -// bool ret = notOK; -// switch (WHS_info.event) -// { -// /*case WHS_waste1_presence_sensor : -// if (WHS_info.WHS_sensors.waste_cartridge1_precense_sensor ) // waste cartridge 1 is inserted . -// { -// SetCartridgeLED(waste_cartridge1, led_on); -// RdCartridgeParam(waste_cartridge1); -// if ( CartridgeAuthentication(waste_cartridge1)) // to define authentication -// { -// //WHS_info.cartridge_1.autheticate = PASSED; //='0' -// //???WHS_info.WHS_valve = waste_cartridge1; // or we should do it only before pumping???? -// //???SetValveDirection(); // or we should do it only before pumping???? -// } -// else -// { -// //WHS_info.cartridge_1.autheticate = FAILED; //='1' -// SetCartridgeLED(waste_cartridge1, led_off); -// } -// } -// else // waste cartridge 1 take out -// { -// WHS_info.cartridge_1.autheticate = FAILED; -// //???if (WHS_info.cartridge_2.autheticate == PASSED) // or we should do it only before pumping???? -// //???{ -// //???WHS_info.WHS_valve = waste_cartridge; -// //???SetValveDirection(); -// //???} -// //???else -// //???{ -// //??? -// //???} -// //??? RdCartridgeParam(waste_cartridge2); -// //???WHS_info.WHS_valve = waste_cartridge1; -// } -// -// break; -// case WHS_waste2_presence_sensor : -// if (WHS_info.WHS_sensors.waste_cartridge2_precense_sensor ) // waste cartridge is inserted . -// { -// SetCartridgeLED(waste_cartridge2, led_on); -// RdCartridgeParam(waste_cartridge2); -// if ( CartridgeAuthentication(waste_cartridge2)) // to define authentication -// { -// //WHS_info.cartridge_2.autheticate = PASSED; //='0' -// //???WHS_info.WHS_valve = waste_cartridge2; // or we should do it only before pumping???? -// //???SetValveDirection(); // or we should do it only before pumping???? -// } -// else -// { -// //WHS_info.cartridge_2.autheticate = FAILED; //='1' -// SetCartridgeLED(waste_cartridge2, led_off); -// } -// } -// else // waste cartridge 2 take out -// { -// WHS_info.cartridge_2.autheticate = FAILED; -// -// if (WHS_info.cartridge_2.autheticate == PASSED) // or we should do it only before pumping???? -// { -// WHS_info.WHS_valve = waste_cartridge; -// SetValveDirection(); -// } -// else -// { -// -// } -// RdCartridgeParam(waste_cartridge2); -// WHS_info.WHS_valve = waste_cartridge1; -// -// } -// break;*/ -// default: -// break; -// } -// -// WHS_info.event = WHS_no_event; -// -// return ret; -//} - - -//IDS_Dispenser_Build_Pressure_Callback - - /*------------------------------------------------------------------------------------------------*/ diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c b/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c new file mode 100644 index 000000000..f04756afd --- /dev/null +++ b/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.c @@ -0,0 +1,97 @@ + + + + +#include "include.h" +#include <DataDef.h> +#include <Modules/Waste/newWHS_init.h> + +#include <Drivers/I2C_Communication/WHS_Card/IO_Ports_TCA9555/WHS_IO.h> +#include <Drivers/I2C_Communication/WHS_Card/I2C_WHS_Mux.h> +#include <Drivers/I2C_Communication/I2C.h> +#include "Drivers/I2C_Communication/WHS_Card/WHS_data.h" +#include <Drivers/I2C_Communication/WHS_Card/EEPROM/WHS_EEPROM.h> +#include <Drivers/I2C_Communication/WHS_Card/D_EMC2302_Fan/WHS_Fan.h> +#include <Drivers/I2C_Communication/WHS_Card/D_MAX11614/WHS_MAX11614_A2D.h> +#include <Drivers/I2C_Communication/WHS_Card/D_AD5272/WHS_Rheostat.h> +#include <Drivers/I2C_Communication/WHS_Card/D_ADS122/WHS_PT100_ADC.h> +#include <Drivers/I2C_Communication/I2C_Task.h> +#include <Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC/WHS_Blower.h> + +bool test_9555(void); +bool WHS_I2C_EEprom_Write_Ch_shai_taest(void); + +bool newWHS_init(void) +{ + bool status = OK; + Main_Mux_Flag = 0; + + +// delayms(4000); +// status = Select_Main_WHS_Mux_Channel(); + Trigger_WHS_init_IO(); + Trigger_WHS_init_fan(); + Trigger_WHS_init_PT100(); + Trigger_WHS_init_Blower(); + Trigger_WHS_MAX11614_Init(); + Trigger_WHS_Rheostat_init(); + //status |= WHS_IO_Init(); + //status |= init_WHS_fan(); + // + //status |= WHS_PT100_InitConfigReg(); +// if (Test_WHS_EEPROM()!= OK) +// { +// ReportWithPackageFilter(WasteFilter,"------------ Test_WHS_EEPROM U32: test is failed-----------------", __FILE__,__LINE__,0, RpMessage, 0, 0); +// } +// status = Test_WHS_Fan(); +// status = Test_WHS_blower(); +// status |= Test_WHS_valve(); +// status |= Test_WHS_pump(); +// status |= Test_WHS_max11614(); +// status |= Test_WHS_AD5272_A2D(); +// status |= Test_WHS_PT100_ADC(); +// //test_9555(); +// status |= WHS_I2C_EEprom_Write_Ch_shai_taest(); + return status; +} + + +bool test_9555(void) +{ + bool status = OK; + + status = WHS_Write_IO(I2CExp1_ADDRESS, D_TCA9555_PORT_0); + + return status; +} + +uint8_t WHS_Write_Buf[9]; +uint8_t WHS_Read_Buf[9]; + +bool WHS_I2C_EEprom_Write_Ch_shai_taest() +{ + bool status= OK; + +// uint8_t i = 0; + uint8_t address_high_byte = 0x00; + uint8_t address_low_byte = 0x00; + + status |= Select_Main_WHS_Mux_Channel(); + + WHS_Write_Buf[0] = address_high_byte; + WHS_Write_Buf[1] = address_low_byte; + WHS_Write_Buf[2] = 0xAA; + WHS_Write_Buf[4] = 0xAA; + WHS_Write_Buf[6] = 0xAA; + WHS_Write_Buf[8] = 0xAA; + WHS_Write_Buf[3] = 0x55; + WHS_Write_Buf[5] = 0x55; + WHS_Write_Buf[7] = 0x55; + + + status |= I2C_Write(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS, WHS_Write_Buf, 9); + SysCtlDelay(5000000);//Must delay for at least 5 milli. !!! (See data sheet ) + status |= I2C_Write(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS, WHS_Write_Buf, 2); + status |= I2C_Read(I2C_ID_WHS_CARD, I2CEEPROM_ADDRESS + 1, WHS_Read_Buf, 7); + return status; +} diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.h b/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.h new file mode 100644 index 000000000..ca2894499 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Modules/Waste/newWHS_init.h @@ -0,0 +1,20 @@ +/* + * newWHS_init.h + * + * Created on: Dec 11, 2019 + * Author: Shai + */ + +#ifndef newWHS_init_H_ +#define newWHS_init_H_ + +//#include <Drivers/I2C_Communication/WHS_Card/IO_Ports_TCA9555/TCA9555_Driver.h> +//#include <Drivers/I2C_Communication/WHS_Card/WHS_data.h> + + + + +bool newWHS_init(void); + + +#endif |
