浏览代码

plus版本上库

yidong 2 月之前
父节点
当前提交
c83ce163fb

+ 17 - 2
BoardInterface/onechip_devinf_define.h

@@ -112,7 +112,6 @@ typedef struct {
 	uint32_t QRBeepTimeer;
 	uint32_t QRBeepFlash;
 	uint32_t QRBeepFlashAll;
-    uint32_t error_delay; 
 	float cabinTem;
 	
 	ProcessStateMachine_t psmMaster;
@@ -128,13 +127,29 @@ typedef struct {
 	char password[WIFI_AP_PWD_MAX_LEN];
 	char TCP_IP_Addr[16];
 	char TCP_IP_PORT[8];
+
+
+#ifdef ONECHIP_MINI_ONE
 	float lysis_offset;
 	float lysis_overHeat;
 	float lysis_overHeatTime;
 	float lysis_Kp;
 	float lysis_Ki;
 	float lysis_Kd;
-	
+#endif	
+#ifdef ONECHIP_MINI_PLUS
+	float amplif_Kp_Slave;
+	float amplif_Ki_Slave;
+	float amplif_Kd_Slave;
+	float PreHeatTime_Slave;
+	float holdTemp_Slave;
+	float readyTemp_Slave;
+	float PresetTempVal_Slave;
+	float PresetTempTime_Slave;
+    float adJTarget_Slave;	  //低温温度
+	float SetTempVal_Slave;
+#endif	
+
 	float amplif_Kp;
 	float amplif_Ki;
 	float amplif_Kd;

+ 5 - 1
BoardInterface/onechip_load_inf.c

@@ -139,7 +139,6 @@ Return value: 无
 ***********************************************************************************/
 void dev_load_allinf (void)
 {
-
 	dev_load_description();	
 	sysinf.com_led_pin = MINI7_V2_SYS_R_Pin;	
 	sysinf.com_led_port = MINI7_V2_SYS_R_GPIO_Port;	
@@ -151,6 +150,11 @@ void dev_load_allinf (void)
 	sysinf.beep_port = MINI7_V2_BEEPER_GPIO_Port;
 	sysinf.ms_conter = 0;
 	sysinf.heaterMaster.pwdId = MINI7_SUB_FUN_HEATER1;
+	sysinf.heaterSlave.pwdId = MINI7_SUB_FUN_HEATER2;
+	sysinf.psmMaster.card_port = MINI7_V2_DEC_S1_GPIO_Port;
+	sysinf.psmMaster.card_pin = MINI7_V2_DEC_S1_Pin;
+	sysinf.psmSlave.card_port = MINI7_V2_DEC_S2_GPIO_Port;
+	sysinf.psmSlave.card_pin = MINI7_V2_DEC_S2_Pin;	
 	sysinf.lysis.pwdId = MINI7_SUB_FUN_HEATER2;
 	sysinf.pc_link_timeout = OFFLINE_TIME;
 }

+ 1 - 1
BoardInterface/onechip_load_inf.h

@@ -8,7 +8,7 @@
 #define SOFT_VERSION_1  7	//软件版本号
 #define SOFT_VERSION_2  4	//软件版本号
 #define SOFT_VERSION_3  0	//软件版本号
-#define SOFT_VERSION_4  13	//软件版本号
+#define SOFT_VERSION_4  14	//软件版本号
 
 
 

+ 1 - 1
Core/Inc/iwdg.h

@@ -42,7 +42,7 @@ void MX_IWDG_Init(void);
 
 /* USER CODE BEGIN Prototypes */
 void Refresh_IWDG(void);
-unsigned int CheckIsIwdgReset();
+unsigned int CheckIsIwdgReset(void);
 /* USER CODE END Prototypes */
 
 #ifdef __cplusplus

+ 1 - 1
Core/Src/iwdg.c

@@ -63,7 +63,7 @@ void Refresh_IWDG(void){
 }
 
 
-unsigned int  CheckIsIwdgReset()
+unsigned int  CheckIsIwdgReset(void)
 {
 	if(__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST)){
 		__HAL_RCC_CLEAR_RESET_FLAGS();

+ 58 - 13
Core/Src/main.c

@@ -80,15 +80,18 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
 					if(sysinf.ms_conter%1000 == 0){
 						sysinf.s1_flag = 1;
 						if(sysinf.ms_conter%SAMPLE_TIME == 0){
-							sysinf.samp_flag = 1;
+							sysinf.psmMaster.samp_flag = 1;
+							sysinf.psmSlave.samp_flag = 1;
 						}
             if (!(sysinf.skip_CheckOrRun & SKIP_FARSTRUN)){
                 if(sysinf.ms_conter%SAMPLE_TIME == 0){
-                  sysinf.samp_flag = 1;
+                sysinf.psmMaster.samp_flag = 1;
+                sysinf.psmSlave.samp_flag = 1;
                 }
             }else{
-                if(sysinf.ms_conter%FAST_SAMPLE_TIME == 0){
-                  sysinf.samp_flag = 1;
+                if(sysinf.ms_conter%FAST_SAMPLE_TIME == 0){                  
+                  sysinf.psmMaster.samp_flag = 1;
+                  sysinf.psmSlave.samp_flag = 1;
                 }
             }  
 						if(sysinf.ms_conter%10000 == 0){
@@ -139,7 +142,6 @@ int main(void)
 {
 
   /* USER CODE BEGIN 1 */
-  float temp;
 #ifndef MINI7_V2_DEBUG
    SCB->VTOR = 0x8010000;
     __enable_irq();
@@ -220,25 +222,51 @@ int main(void)
   }
   cfg_param_init();
   Motor_Init();
-  updatParm_lysis();
   updatParm_heater_master();
+  
+#ifdef ONECHIP_MINI_ONE
+  updatParm_lysis();
+#endif
 	if (HAL_TIM_Base_Start_IT(&htim2) != HAL_OK) {
 			/* 启动失败,可在此处添加错误处理 */
 			Error_Handler();
 	}
-	if(	SensorSelfCheckPass()){
+	if(	SensorSelfCheckPass(0)){
 		Van_Device_Printf(VAN_LOG_ALLPRINT, "SensorSelfCheck pass\n\r");	
     sysinf.psmMaster.state = SW_Read_To_Board_Selftest;
+#ifdef ONECHIP_MINI_ONE
     sysinf.lysis.thermostat_st = THERMOSTAT_PWRON;
     sysinf.lysis.firstin = True;
+#endif
     beep_set(BEEP_SCANOK);
 	}else{
 		Van_Device_Printf(VAN_LOG_ALLPRINT, "SensorSelfCheck failed\n\r");
-    error_set(ERROR_SENSOR_SELF_CHECK);
-    updateAmplifState(SYS_STATE_ERROR_HW); 
+    error_set(ERROR_SENSOR_SELF_CHECK,0);
+    updateAmplifState(SYS_STATE_ERROR_HW,0); 
     sysinf.psmMaster.state =  SW_SystemError;
+#ifdef ONECHIP_MINI_ONE
+    sysinf.lysis.thermostat_st = THERMOSTAT_PWRON;
+    sysinf.lysis.firstin = True;
+#endif
+	}
+#ifdef ONECHIP_MINI_PLUS
+  updatParm_Slave_master();
+	if(	SensorSelfCheckPass(1)){
+		Van_Device_Printf(VAN_LOG_ALLPRINT, "Sensor_SlaveSelfCheck pass\n\r");	
+    sysinf.psmSlave.state = SW_Read_To_Board_Selftest;
+    beep_set(BEEP_SCANOK);
+	}else{
+		Van_Device_Printf(VAN_LOG_ALLPRINT, "Sensor_SlaveSelfCheck failed\n\r");
+    error_set(ERROR_SENSOR_SELF_CHECK,1);
+    updateAmplifState(SYS_STATE_ERROR_HW,1); 
+    sysinf.psmSlave.state =  SW_SystemError;
     beep_set(BEEP_ERR_HW);
 	}
+  if((sysinf.psmMaster.state ==  SW_SystemError)||
+    (sysinf.psmSlave.state == SW_SystemError)){    
+    beep_set(BEEP_ERR_HW);
+  }
+#endif
   
 	PackDeviceNum();
 
@@ -275,9 +303,13 @@ int main(void)
 			HAL_GPIO_TogglePin((GPIO_TypeDef *)sysinf.run_led_port, sysinf.run_led_pin); /*green*/      
       update_work();
       resetSampleData(&sysinf.psmMaster);
+      resetSampleData(&sysinf.psmSlave);
       MTS01_ReadTemp(0,&sysinf.cabinTem); 
-      if(sysinf.error_delay){
-        sysinf.error_delay--;
+      if(sysinf.psmMaster.error_delay){
+        sysinf.psmMaster.error_delay--;
+      }
+      if(sysinf.psmSlave.error_delay){
+        sysinf.psmSlave.error_delay--;
       }
 		}
     if(sysinf.resendFlag == 1 ){
@@ -302,18 +334,31 @@ int main(void)
       float temp = getADC_Chanel_value(0);
       sysinf.heaterMaster.pid.realtemp = temp + sysinf.heaterMaster.offset;
       heater_work(&sysinf.heaterMaster);
+#ifdef ONECHIP_MINI_PLUS
+      temp = getADC_Chanel_value(1);
+      sysinf.heaterSlave.pid.realtemp = temp + sysinf.heaterSlave.offset;
+      heater_work(&sysinf.heaterSlave);
+#endif
     }
     if(sysinf.lysis_flag){
-      sysinf.lysis_flag = 0;    
+      sysinf.lysis_flag = 0; 
+#ifdef ONECHIP_MINI_ONE
       lysis_work();
+#endif   
+     
     }
-       
+    
+
     if(sysinf.light_flag){
     sysinf.light_flag = 0;
       light_ctrl();
     }		
 
     usr_state_machine(&sysinf.psmMaster,&sysinf.heaterMaster);
+    
+#ifdef ONECHIP_MINI_PLUS
+     usr_state_machine(&sysinf.psmSlave,&sysinf.heaterSlave);
+#endif
   }
   /* USER CODE END 3 */
 }

+ 92 - 36
DriverInterface/communication.c

@@ -259,7 +259,7 @@ int wifi_action(unsigned char cmd, unsigned char *parg)
 int setState_action(unsigned char cmd, unsigned char *parg)
 {
 	unsigned char block = *parg++;
-	unsigned char nextState = *parg;
+	// unsigned char nextState = *parg;
     // if(SYS_STATE_WORKEND == nextState)
     {
         if(block==0){
@@ -267,8 +267,15 @@ int setState_action(unsigned char cmd, unsigned char *parg)
                 sysinf.psmMaster.controlword = result_move_card;
         }else{
             /*下发命令,改变从模块状态*/
-            sysinf.lysis.thermostat_st = THERMOSTAT_END;
-            sysinf.lysis.firstin = true;
+#ifdef ONECHIP_MINI_ONE
+       sysinf.lysis.thermostat_st = THERMOSTAT_END;
+        sysinf.lysis.firstin = true;
+#endif 
+#ifdef ONECHIP_MINI_PLUS
+        sysinf.psmSlave.state = SW_result_report;
+        sysinf.psmSlave.controlword = result_move_card;
+#endif
+           
         }
     }
     return 1;
@@ -477,7 +484,7 @@ int confirm_qrcode_action(unsigned char cmd, unsigned char *parg)
 		    Van_Device_Printf(VAN_LOG_INFO,"Master rec start\n\r:");
     	    return 0;
         }else {   
-#ifdef ONECHIP_MINI_PLUSE         
+#ifdef ONECHIP_MINI_PLUS         
             if((sysinf.psmSlave.state == SW_Scan_Qrcode || sysinf.psmSlave.state == SW_Chip_Id  )){
                 sysinf.psmSlave.controlword = Scan_Qrcode_cmd;                
                 Van_Device_Printf(VAN_LOG_INFO,"Slave rec start\n\r:");
@@ -792,7 +799,7 @@ int con_heat_action(uint8_t cmd, uint8_t *parg )
 {
 //    CmdMessage *pMsg = (CmdMessageDef *)parg;
     CmdMessage *pMsg = (CmdMessage *)parg;;
-    miniConfigPram *pram = (miniConfigPram *)pMsg->data;
+    // miniConfigPram *pram = (miniConfigPram *)pMsg->data;
     uint8_t * pdata = (uint8_t *)pMsg->data;
     switch(pMsg->cmd){
         case UINON_CMD_MOTORMOVE:{	
@@ -826,6 +833,7 @@ int con_heat_action(uint8_t cmd, uint8_t *parg )
         }break;				
         case UINON_CMD_THEROM_GET:{		
             char data[40];
+#ifdef ONECHIP_MINI_ONE
             *(float *)(data+0) = 0;
             *(float *)(data+4) = sysinf.lysis_offset;	
             *(float *)(data+8) = sysinf.lysis_overHeat;	
@@ -836,60 +844,100 @@ int con_heat_action(uint8_t cmd, uint8_t *parg )
             *(float *)(data+28) = sysinf.lysis.lastgaol;	
             *(float *)(data+32) = sysinf.lysis.idletemp;	
             *(float *)(data+36) = sysinf.lysis.worktime/10;	
+#endif  
             pMsg->data = data;
             pMsg->len = sizeof(data);
             data_send_to_pc( (pc_cmd_type)pMsg->cmd, pMsg->data,	pMsg->len);
         }break;			
         case UINON_CMD_THEROM_OFFSET:{		
-					
+
+#ifdef ONECHIP_MINI_ONE		
             sysinf.lysis_Kp  = *(float *)(pdata+4);
             sysinf.lysis_Ki = *(float *)(pdata+8);
             sysinf.lysis_Kd     = *(float *)(pdata+12);
             sysinf.lysis_overHeat  = *(float *)(pdata+16);
             sysinf.lysis_overHeatTime = *(float *)(pdata+20);
             sysinf.lysis_offset  = *(float *)(pdata+24);
-					
-            data_send_to_pc((pc_cmd_type)pMsg->cmd, pMsg->data,	pMsg->len);
             updatParm_lysis();
             cfg_save_cfg_param();
+#endif  						
+            data_send_to_pc((pc_cmd_type)pMsg->cmd, pMsg->data,	pMsg->len);
         }break;		
         case UINON_CMD_AMPLIF_GET:{		
-            char data[44];
-            *(float *)(data+0) = 0;
-            *(float *)(data+4) = sysinf.amplif_Kp;	
-            *(float *)(data+8) = sysinf.amplif_Ki;	
-            *(float *)(data+12) = sysinf.amplif_Kd;	
-            *(float *)(data+16) = sysinf.PreHeatTime;	
-            *(float *)(data+20) = sysinf.holdTemp;	
-            *(float *)(data+24) = sysinf.readyTemp;		
-            *(float *)(data+28) = sysinf.PresetTempVal;	
-            *(float *)(data+32) = sysinf.PresetTempTime;	
-            *(float *)(data+36) = sysinf.adJTarget;	
-            *(float *)(data+40) = sysinf.SetTempVal;	
+            char data[44];	
+			unsigned int ch = 	*(int *)(pdata);
+            if(ch==0){               
+                *(float *)(data+0) = 0;
+                *(float *)(data+4) = sysinf.amplif_Kp;	
+                *(float *)(data+8) = sysinf.amplif_Ki;	
+                *(float *)(data+12) = sysinf.amplif_Kd;	
+                *(float *)(data+16) = sysinf.PreHeatTime;	
+                *(float *)(data+20) = sysinf.holdTemp;	
+                *(float *)(data+24) = sysinf.readyTemp;		
+                *(float *)(data+28) = sysinf.PresetTempVal;	
+                *(float *)(data+32) = sysinf.PresetTempTime;	
+                *(float *)(data+36) = sysinf.adJTarget;	
+                *(float *)(data+40) = sysinf.SetTempVal; 
+            }else{    
+#ifdef ONECHIP_MINI_PLUS      
+                if(ch==1){          
+                    *(float *)(data+0) = 1;
+                    *(float *)(data+4) = sysinf.amplif_Kp_Slave;	
+                    *(float *)(data+8) = sysinf.amplif_Ki_Slave;	
+                    *(float *)(data+12) = sysinf.amplif_Kd_Slave;	
+                    *(float *)(data+16) = sysinf.PreHeatTime_Slave;	
+                    *(float *)(data+20) = sysinf.holdTemp_Slave;	
+                    *(float *)(data+24) = sysinf.readyTemp_Slave;		
+                    *(float *)(data+28) = sysinf.PresetTempVal_Slave;	
+                    *(float *)(data+32) = sysinf.PresetTempTime_Slave;	
+                    *(float *)(data+36) = sysinf.adJTarget_Slave;	
+                    *(float *)(data+40) = sysinf.SetTempVal_Slave;                     
+                }     
+#endif
+            }	
             pMsg->data = data;
             pMsg->len = sizeof(data);
             data_send_to_pc( (pc_cmd_type)pMsg->cmd, pMsg->data,	pMsg->len);
         }break;			
         case UINON_CMD_AMPLIF_SET:{		
-					
-            sysinf.amplif_Kp  = *(float *)(pdata+4);
-            sysinf.amplif_Ki = *(float *)(pdata+8);
-            sysinf.amplif_Kd     = *(float *)(pdata+12);
-            sysinf.PreHeatTime  = *(float *)(pdata+16);
-            sysinf.holdTemp = *(float *)(pdata+20);
-            sysinf.readyTemp  = *(float *)(pdata+24);
-            sysinf.PresetTempVal  = *(float *)(pdata+28);
-            sysinf.PresetTempTime  = *(float *)(pdata+32);
-            sysinf.adJTarget  = *(float *)(pdata+36);
-            sysinf.SetTempVal  = *(float *)(pdata+40);
-					
+			unsigned int ch = 	*(int *)(pdata);
+            if(ch==0){                
+                sysinf.amplif_Kp  = *(float *)(pdata+4);
+                sysinf.amplif_Ki = *(float *)(pdata+8);
+                sysinf.amplif_Kd     = *(float *)(pdata+12);
+                sysinf.PreHeatTime  = *(float *)(pdata+16);
+                sysinf.holdTemp = *(float *)(pdata+20);
+                sysinf.readyTemp  = *(float *)(pdata+24);
+                sysinf.PresetTempVal  = *(float *)(pdata+28);
+                sysinf.PresetTempTime  = *(float *)(pdata+32);
+                sysinf.adJTarget  = *(float *)(pdata+36);
+                sysinf.SetTempVal  = *(float *)(pdata+40);   
+                updatParm_heater_master();
+            }else{    
+#ifdef ONECHIP_MINI_PLUS      
+                if(ch==1){
+                    sysinf.amplif_Kp_Slave  = *(float *)(pdata+4);
+                    sysinf.amplif_Ki_Slave = *(float *)(pdata+8);
+                    sysinf.amplif_Kd_Slave     = *(float *)(pdata+12);
+                    sysinf.PreHeatTime_Slave  = *(float *)(pdata+16);
+                    sysinf.holdTemp_Slave = *(float *)(pdata+20);
+                    sysinf.readyTemp_Slave  = *(float *)(pdata+24);
+                    sysinf.PresetTempVal_Slave  = *(float *)(pdata+28);
+                    sysinf.PresetTempTime_Slave  = *(float *)(pdata+32);
+                    sysinf.adJTarget_Slave  = *(float *)(pdata+36);
+                    sysinf.SetTempVal_Slave  = *(float *)(pdata+40); 
+                    updatParm_Slave_master();
+                } 
+#endif
+            }					
             data_send_to_pc((pc_cmd_type)pMsg->cmd, pMsg->data,	pMsg->len);
-            updatParm_heater_master();
             cfg_save_cfg_param();
         }break;
-        case UINON_CMD_THEROM_GOAL:{					
-            float goal =  *(float *)(pMsg->data+4) ;
+        case UINON_CMD_THEROM_GOAL:{	
+#ifdef ONECHIP_MINI_ONE   				
+            float goal =  *(float *)(pMsg->data+4) ; 
             set_lysis(goal);
+#endif
             data_send_to_pc((pc_cmd_type)pMsg->cmd, pMsg->data,	pMsg->len);
         }break;
         // case UINON_CMD_THEROM_CHECK:{
@@ -1008,9 +1056,17 @@ void update_work(void) {
         get_master_st(&temp,&st); 
         *(unsigned int *)(data+0) = st;
         *(float *)(data+4) =temp;
+#ifdef ONECHIP_MINI_ONE
         get_lysis_st(&temp,&st);
         *(unsigned int *)(data+8) = st; 
-        *(float *)(data+12) = temp;
+        *(float *)(data+12) = temp; 
+#endif   
+#ifdef ONECHIP_MINI_PLUS
+        get_slave_st(&temp,&st);
+        *(unsigned int *)(data+8) = st; 
+        *(float *)(data+12) = temp; 
+#endif   
+       
         *(float *)(data+16) = sysinf.cabinTem;    
         data_send_to_pc(PC_CMD_UPDATETEMP, data,sizeof(data));        
     }

+ 3 - 3
DriverInterface/onchip_flash.c

@@ -194,7 +194,8 @@ void cfg_load_default_param(void)
 	sysinf.lysis_Kp = 5;
 	sysinf.lysis_Ki = 0.01;
 	sysinf.lysis_Kd = 0;
-#else
+#endif	
+#ifdef ONECHIP_MINI_PLUS
 	sysinf.amplif_Kp_Slave = 20;
 	sysinf.amplif_Ki_Slave = 0.05;
 	sysinf.amplif_Kd_Slave = 0;
@@ -204,7 +205,6 @@ void cfg_load_default_param(void)
 	sysinf.holdTemp_Slave = 63.5;
 	sysinf.PreHeatTime_Slave = 10;
 	sysinf.readyTemp_Slave = 65.5;
-	sysinf.adjtemp = -0.5;
 #endif	
 
 	sysinf.amplif_Kp = 20;
@@ -328,4 +328,4 @@ void iap_load_app(uint32_t appxaddr)
         /* 跳转到APP */
         jump2app();
     }
-}
+}

+ 152 - 107
DriverInterface/rgb381.c

@@ -17,6 +17,8 @@
 
 ColorSensor CS[CS_MAX] = {0};	//检测孔
 
+ColorSensor CS_Slave[CS_MAX] = {0};	//检测孔
+
 uint8_t SensorState1=0,SensorState2=0,SensorState3=0,SensorState4=0,SensorState5=0,
 		SensorState6=0,SensorState7=0,SensorState8=0,SensorState9=0,SensorState10=0;
 //extern uint8_t I2C_data;
@@ -54,7 +56,7 @@ uint8_t I2CReadOneByte(I2C_HandleTypeDef *hi2c, uint8_t u8SlaveAddr, uint8_t u8D
 
 
     uint8_t I2C_data = 0;
-void TCA9548A_SetChannel(uint8_t ID)
+void TCA9548A_SetChannel(ColorSensor *CS)
 {
 	/********************************************************/
 	/**************background light--PA0*********************/
@@ -71,88 +73,88 @@ void TCA9548A_SetChannel(uint8_t ID)
     /***********************LED--PF4*************************/
     /***********************DEC--PB15************************/
 
-    switch(ID)
+    switch(CS->ID)
     {
         case 0:
         	I2C_data = TCA9548A_CHANNEL_0;
-            I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,ID);
+            I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,CS->ID);
             break;
         case 1:
         	I2C_data = TCA9548A_CHANNEL_0;
-            I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
+            I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
             HAL_Delay(50);
         	I2C_data = TCA9548A_CHANNEL_2;
-            I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
+            I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
             break;
         case 2:
         	I2C_data = TCA9548A_CHANNEL_3;
-            I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
+            I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
             break;
         case 3:
         	I2C_data = TCA9548A_CHANNEL_4;
-            I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
+            I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
             break;
         case 4:
         	I2C_data = TCA9548A_CHANNEL_5;
-            I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
+            I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
             break;
         case 5:
         	I2C_data = TCA9548A_CHANNEL_6;
-            I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
+            I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
             break;
         case 6:
         	I2C_data = TCA9548A_CHANNEL_7;
-            I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
+            I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
             break;
         case 7:
         	I2C_data = TCA9548A_CHANNEL_8;
-            I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
+            I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
             break;
         case 8:
 
         	I2C_data = TCA9548A_CHANNEL_1;
-            I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
+            I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR,I2C_data,I2C_data);
             HAL_Delay(50);
         	I2C_data = TCA9548A_CHANNEL_0;
-            I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
+            I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
             HAL_Delay(50);
             I2C_data = TCA9548A_CHANNEL_2;
-            I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
+            I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
             break;
         case 9:
 //        	I2C_data = TCA9548A_CHANNEL_0;
 //            I2CWriteOneByte(I2C0,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
 //            DelayMS(100);
         	I2C_data = TCA9548A_CHANNEL_3;
-            I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
+            I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
             break;
         case 10:
 //        	I2C_data = TCA9548A_CHANNEL_0;
 //            I2CWriteOneByte(I2C0,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
 //            DelayMS(100);
         	I2C_data = TCA9548A_CHANNEL_4;
-            I2CWriteOneByte(&hi2c1,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
+            I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,TCA9548A_SLAVE_ADDR1,I2C_data,I2C_data);
             break;
         default:
             break;
     }
 }
 
-void SensorMeasurementFactor(uint8_t measfactor)
+void SensorMeasurementFactor(ColorSensor *CS, uint8_t measfactor)
 {
-	I2CWriteOneByte(&hi2c1,RGB381_ADDR,RGB381_MeasRate,measfactor);
+	I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_MeasRate,measfactor);
 }
 
-void SensorSetGain(uint8_t gain)
+void SensorSetGain(ColorSensor *CS, uint8_t gain)
 {
-	I2CWriteOneByte(&hi2c1,RGB381_ADDR,RGB381_Gain,gain);
+	I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_Gain,gain);
 }
 
-uint8_t SensorGetID(uint8_t ID)
+uint8_t SensorGetID(ColorSensor *CS)
 {
-	TCA9548A_SetChannel(ID);
+	TCA9548A_SetChannel(CS);
 	HAL_Delay(100);
-	return I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_PartID);
+	return I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_PartID);
 //	return I2CReadOneByte(I2C0,RGB381_ADDR,RGB381_PartID);
 }
 
@@ -165,11 +167,11 @@ void SensorGetRawData(ColorSensor *CS)
 	uint32_t u32LastTick;
 	uint32_t time;
 
-	TCA9548A_SetChannel(CS->ID);
+	TCA9548A_SetChannel(CS);
 	HAL_Delay(40);
 	u32LastTick = sysinf.ms_conter;
 	time = u32LastTick - u32StartTick;
-	while((I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_MainState)&0x08)==0x08){
+	while((I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_MainState)&0x08)==0x08){
 	        // 超时检测
 	      u32LastTick = sysinf.ms_conter;
 			 time = u32LastTick - u32StartTick;
@@ -186,14 +188,14 @@ void SensorGetRawData(ColorSensor *CS)
 	};
 	HAL_Delay(10);
 //	LOG_E("error_state :%d\n",time);
-	CS->RDR=(I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_R_DataLow)|
-			(I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_R_DataMid)<<8)|
-			(I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_R_DataHIG)<<16));
+	CS->RDR=(I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_R_DataLow)|
+			(I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_R_DataMid)<<8)|
+			(I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_R_DataHIG)<<16));
 	if(CS->RDR == 0){
 		HAL_Delay(10);
-		CS->RDR=(I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_R_DataLow)|
-				(I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_R_DataMid)<<8)|
-				(I2CReadOneByte(&hi2c1,RGB381_ADDR,RGB381_R_DataHIG)<<16));
+		CS->RDR=(I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_R_DataLow)|
+				(I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_R_DataMid)<<8)|
+				(I2CReadOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_R_DataHIG)<<16));
 		if(CS->RDR == 0){
 			Van_Device_Printf(VAN_LOG_ERROR, "error_Data\n");
 		}
@@ -208,9 +210,9 @@ void SensorGetRawData(ColorSensor *CS)
 
 }
 
-void SensorEnable(void)
+void SensorEnable(ColorSensor *CS)
 {
-	 I2CWriteOneByte(&hi2c1,RGB381_ADDR,RGB381_MainCtrl,CS_Modle|ALS_Active);
+	 I2CWriteOneByte((I2C_HandleTypeDef *)CS->IICPort,RGB381_ADDR,RGB381_MainCtrl,CS_Modle|ALS_Active);
 	 HAL_Delay(10);
 }
 
@@ -218,11 +220,11 @@ uint8_t SensorInit(ColorSensor *CS)
 {
 	
      Refresh_IWDG();
-	if(SensorGetID(CS->ID)==0xC2)// device id is 0xC2
+	if(SensorGetID(CS)==0xC2)// device id is 0xC2
 	{
-		SensorEnable();
-		SensorMeasurementFactor(ALS_MeasRes_17B|ALS_MeasRate_50ms);
-		SensorSetGain(ALS_Gain_9X);
+		SensorEnable(CS);
+		SensorMeasurementFactor(CS,ALS_MeasRes_17B|ALS_MeasRate_50ms);
+		SensorSetGain(CS,ALS_Gain_9X);
 		CS->TtMax=0.0;
 //		CS->TtNow=0.0;
 //		CS->ColDifInit=0.0;
@@ -251,24 +253,26 @@ uint8_t SensorInit(ColorSensor *CS)
 		return 1;
 }
 
-int SensorSelfCheckPass(void)
+int SensorSelfCheckPass(uint8_t number)                                 
 {
-	SensorState1=SensorInit(&CS[0]);
-	SensorState2=SensorInit(&CS[1]);
-	SensorState3=SensorInit(&CS[2]);
-	SensorState4=SensorInit(&CS[3]);
-	SensorState5=SensorInit(&CS[4]);
-	SensorState6=SensorInit(&CS[5]);
-	SensorState7=SensorInit(&CS[6]);
-	SensorState8=SensorInit(&CS[7]);
-	SensorState9=SensorInit(&CS[8]);
-	SensorState10=SensorInit(&CS[9]);
+	ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
+	SensorState1=SensorInit(&pGroup[0]);
+	SensorState2=SensorInit(&pGroup[1]);
+	SensorState3=SensorInit(&pGroup[2]);
+	SensorState4=SensorInit(&pGroup[3]);
+	SensorState5=SensorInit(&pGroup[4]);
+	SensorState6=SensorInit(&pGroup[5]);
+	SensorState7=SensorInit(&pGroup[6]);
+	SensorState8=SensorInit(&pGroup[7]);
+	SensorState9=SensorInit(&pGroup[8]);
+	SensorState10=SensorInit(&pGroup[9]);
 
     if(SensorState1|SensorState2|SensorState3|SensorState4|SensorState5|SensorState6|SensorState7|SensorState8|SensorState9|SensorState10)
     	 return 0;
     else return 1;
 }
 
+
 void SensorGetCalData(ColorSensor *CS)
 {
 //	SensorGetRawData(CS);
@@ -278,6 +282,10 @@ void SensorGetCalData(ColorSensor *CS)
 
 void SensorInitial(void)
 {
+	for (int i = 0; i < CS_MAX; i++)
+	{
+		CS[i].IICPort = &hi2c1;
+	}
 	CS[0].ID = Sensor1;
 	CS[1].ID = Sensor2;
 	CS[2].ID = Sensor3;
@@ -288,6 +296,23 @@ void SensorInitial(void)
 	CS[7].ID = Sensor8;
 	CS[8].ID = Sensor9;
 	CS[9].ID = Sensor10;
+
+#ifdef ONECHIP_MINI_PLUS
+	for (int i = 0; i < CS_MAX; i++)
+	{
+		CS_Slave[i].IICPort = &hi2c2;
+	}
+	CS_Slave[0].ID = Sensor1;
+	CS_Slave[1].ID = Sensor2;
+	CS_Slave[2].ID = Sensor3;
+	CS_Slave[3].ID = Sensor4;
+	CS_Slave[4].ID = Sensor5;
+	CS_Slave[5].ID = Sensor6;
+	CS_Slave[6].ID = Sensor7;
+	CS_Slave[7].ID = Sensor8;
+	CS_Slave[8].ID = Sensor9;
+	CS_Slave[9].ID = Sensor10;
+#endif	
 }
 int Returntozero(ColorSensor *CS)                                     //lxx-add-2022.12.26
 {
@@ -368,75 +393,76 @@ void Sensor_calibration_data(ColorSensor *CS)        //lxx_add_2023.07.27
 {
 	CS->RtR = (CS->CDR-CS->RDR)*CS->gain;
 }
-
-void sample_first_zero(void)
+void sample_first_zero(uint8_t number)
 {
+    ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
 	for (int i = 0; i < CS_MAX; i++)
 	{
-		Returntozero(&CS[i]);
+		Returntozero(&pGroup[i]);
 		//从零点输出
-		Sensor_calibration_data(&CS[i]);
+		Sensor_calibration_data(&pGroup[i]);
 	}
 }
-int check_first_zero(void)
+int check_first_zero(uint8_t number)
 {
 	int noAlignNum = 0;
-   
+    ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
 	for (int i = 0; i < CS_MAX; i++)
 	{
-		if(Returntozero(&CS[i]) == 1){			
+		if(Returntozero(&pGroup[i]) == 1){			
 			noAlignNum ++;
 		}
 	}
 	if(noAlignNum == 0){		
 		error_clear();
    		return 0;
-	}else{
-		error_set(ERROR_SENSOR_CARD_CHECK);
+	}else{		
 		return 1;
 	}
 }
 
-void sample_calibrate_calc(uint32_t times)
+void sample_calibrate_calc(uint32_t times,uint8_t number)
 {
+	ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
 	for (int i = 0; i < CS_MAX; i++)
 	{
-	
     	Refresh_IWDG();
-		SensorGetRawData(&CS[i]); // get the original data every 1S
+		SensorGetRawData(&pGroup[i]); // get the original data every 1S
 		if(CS->RDR == 0){
 			// if(!(g_cfg.skip_CheckOrRun & SKIP_CHECK_CARDINSERT)){				
 			// 	error_set(ERROR_SENSOR_SELF_CHECK);
 			// 	return;
 			// }
 		}
-		Sensor_calibration_data(&CS[i]);
+		Sensor_calibration_data(&pGroup[i]);
 	}
 
 	if (times < 19)
 	{
 		for (int i = 0; i < CS_MAX; i++)
 		{
-			Get_SAMP_DATA(&CS[i]);// save the returntozero data in 30minutes
+			Get_SAMP_DATA(&pGroup[i]);// save the returntozero data in 30minutes
 		}
 		// samp_num++;
 	}
 }
 
-void sample_calc_avg_std(void)
+void sample_calc_avg_std(uint8_t number)
 {
+	ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
 	for (int i = 0; i < CS_MAX; i++)
 	{
-		Get_average(&CS[i]);
-		Get_STD(&CS[i]);
+		Get_average(&pGroup[i]);
+		Get_STD(&pGroup[i]);
 	}
 }
 
-void sample_calc_tt(void)
+void sample_calc_tt(uint8_t number)
 {
+	ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
 	for (int i = 0; i < CS_MAX; i++)
 	{
-		Get_Tt(&CS[i]);
+		Get_Tt(&pGroup[i]);
 	}
 }
 void SingleChannelJudge(ColorSensor *CS)
@@ -451,11 +477,12 @@ void SingleChannelJudge(ColorSensor *CS)
 	}
 
 }
-void SystemResaultJudge(void)
+void SystemResaultJudge(uint8_t number)
 {
+	
 	int nc_index = 0;	//内参
 	uint8_t *p = &result.hole1_result;	//孔结果
-
+	ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
 	result.Devicenum = 0;
 	strcpy(result.card_num,sysinf.psmMaster.card_param_info.pid);
 //	result.card_num = card_param_info.pid;
@@ -471,41 +498,47 @@ void SystemResaultJudge(void)
 	result.hole9_item = sysinf.psmMaster.card_param_info.hole_info[8].item;
 	result.hole10_item = sysinf.psmMaster.card_param_info.hole_info[9].item;
 
-	result.hole1_Tt[0] = (uint8_t)CS[0].Tt;
-	result.hole1_Tt[1] = (uint8_t)((CS[0].Tt-(uint8_t)CS[0].Tt)*100);
-	result.hole2_Tt[0] = (uint8_t)CS[1].Tt;
-	result.hole2_Tt[1] = (uint8_t)((CS[1].Tt-(uint8_t)CS[1].Tt)*100);
-	result.hole3_Tt[0] = (uint8_t)CS[2].Tt;
-	result.hole3_Tt[1] = (uint8_t)((CS[2].Tt-(uint8_t)CS[2].Tt)*100);
-	result.hole4_Tt[0] = (uint8_t)CS[3].Tt;
-	result.hole4_Tt[1] = (uint8_t)((CS[3].Tt-(uint8_t)CS[3].Tt)*100);
-	result.hole5_Tt[0] = (uint8_t)CS[4].Tt;
-	result.hole5_Tt[1] = (uint8_t)((CS[4].Tt-(uint8_t)CS[4].Tt)*100);
-	result.hole6_Tt[0] = (uint8_t)CS[5].Tt;
-	result.hole6_Tt[1] = (uint8_t)((CS[5].Tt-(uint8_t)CS[5].Tt)*100);
-	result.hole7_Tt[0] = (uint8_t)CS[6].Tt;
-	result.hole7_Tt[1] = (uint8_t)((CS[6].Tt-(uint8_t)CS[6].Tt)*100);
-	result.hole8_Tt[0] = (uint8_t)CS[7].Tt;
-	result.hole8_Tt[1] = (uint8_t)((CS[7].Tt-(uint8_t)CS[7].Tt)*100);
-	result.hole9_Tt[0] = (uint8_t)CS[8].Tt;
-	result.hole9_Tt[1] = (uint8_t)((CS[8].Tt-(uint8_t)CS[8].Tt)*100);
-	result.hole10_Tt[0] = (uint8_t)CS[9].Tt;
-	result.hole10_Tt[1] = (uint8_t)((CS[9].Tt-(uint8_t)CS[9].Tt)*100);
+	result.hole1_Tt[0] = (uint8_t)pGroup[0].Tt;
+	result.hole1_Tt[1] = (uint8_t)((pGroup[0].Tt-(uint8_t)pGroup[0].Tt)*100);
+	result.hole2_Tt[0] = (uint8_t)pGroup[1].Tt;
+	result.hole2_Tt[1] = (uint8_t)((pGroup[1].Tt-(uint8_t)pGroup[1].Tt)*100);
+	result.hole3_Tt[0] = (uint8_t)pGroup[2].Tt;
+	result.hole3_Tt[1] = (uint8_t)((pGroup[2].Tt-(uint8_t)pGroup[2].Tt)*100);
+	result.hole4_Tt[0] = (uint8_t)pGroup[3].Tt;
+	result.hole4_Tt[1] = (uint8_t)((pGroup[3].Tt-(uint8_t)pGroup[3].Tt)*100);
+	result.hole5_Tt[0] = (uint8_t)pGroup[4].Tt;
+	result.hole5_Tt[1] = (uint8_t)((pGroup[4].Tt-(uint8_t)pGroup[4].Tt)*100);
+	result.hole6_Tt[0] = (uint8_t)pGroup[5].Tt;
+	result.hole6_Tt[1] = (uint8_t)((pGroup[5].Tt-(uint8_t)pGroup[5].Tt)*100);
+	result.hole7_Tt[0] = (uint8_t)pGroup[6].Tt;
+	result.hole7_Tt[1] = (uint8_t)((pGroup[6].Tt-(uint8_t)pGroup[6].Tt)*100);
+	result.hole8_Tt[0] = (uint8_t)pGroup[7].Tt;
+	result.hole8_Tt[1] = (uint8_t)((pGroup[7].Tt-(uint8_t)pGroup[7].Tt)*100);
+	result.hole9_Tt[0] = (uint8_t)pGroup[8].Tt;
+	result.hole9_Tt[1] = (uint8_t)((pGroup[8].Tt-(uint8_t)pGroup[8].Tt)*100);
+	result.hole10_Tt[0] = (uint8_t)pGroup[9].Tt;
+	result.hole10_Tt[1] = (uint8_t)((pGroup[9].Tt-(uint8_t)pGroup[9].Tt)*100);
 
 	//判断孔结果
 	for (int i = 0; i < CS_MAX; i++)
 	{
-		SingleChannelJudge(&CS[i]);
-		*p = CS[i].Result;
+		SingleChannelJudge(&pGroup[i]);
+		*p = pGroup[i].Result;
 		p += 5;
 	}
 
 	
 	//找id == -1
 	for(nc_index = 0; nc_index < 10; nc_index++)
-	{
-		if(sysinf.psmMaster.card_param_info.hole_info[nc_index].item == 0xFF)
-			break;
+	{	if((number == 0)){
+			
+			if(sysinf.psmMaster.card_param_info.hole_info[nc_index].item == 0xFF)
+				break;
+		}else{
+			
+			if(sysinf.psmSlave.card_param_info.hole_info[nc_index].item == 0xFF)
+				break;
+		}
 	}
 	if(nc_index == 10)
 	{
@@ -514,11 +547,11 @@ void SystemResaultJudge(void)
 	
 	//判断最终检测结果
 	p = &result.hole1_item_result;	//检测结果
-	if(CS[nc_index].Result == ResultPositive)	//内参结果为阳
+	if(pGroup[nc_index].Result == ResultPositive)	//内参结果为阳
 	{
 		for (int i = 0; i < CS_MAX; i++)
 		{
-			if(CS[i].Result==ResultPositive)	//孔结果为阳,最终结果为阳
+			if(pGroup[i].Result==ResultPositive)	//孔结果为阳,最终结果为阳
 			{
 				*p = ResultPositive;
 			}
@@ -533,7 +566,7 @@ void SystemResaultJudge(void)
 	{
 		for (int i = 0; i < CS_MAX; i++)
 		{
-			if(CS[i].Result==ResultPositive)	//孔结果为阳,最终结果为阳
+			if(pGroup[i].Result==ResultPositive)	//孔结果为阳,最终结果为阳
 			{
 				*p = ResultPositive;
 			}
@@ -548,27 +581,39 @@ void SystemResaultJudge(void)
 	//内参自身检测结果,等于孔结果
 	p = &result.hole1_item_result;	//检测结果
 	p += 5*nc_index;
-	*p = CS[nc_index].Result;
+	*p = pGroup[nc_index].Result;
 
 
 
 }
-void sample_calc_result(void)
+void sample_calc_result(uint8_t number)
 {
-	for (int i = 0; i < CS_MAX; i++)
-	{	
-		//从二维码获取Tt范围	
-		CS[i].TtMax = sysinf.psmMaster.card_param_info.hole_info[i].TtMax[0] + sysinf.psmMaster.card_param_info.hole_info[i].TtMax[1] / 100.0f;
-		CS[i].TtMin = sysinf.psmMaster.card_param_info.hole_info[i].TtMin[0] + sysinf.psmMaster.card_param_info.hole_info[i].TtMin[1] / 100.0f;
+	if(number == 0){	
+		for (int i = 0; i < CS_MAX; i++)
+		{	
+			//从二维码获取Tt范围	
+			CS[i].TtMax = sysinf.psmMaster.card_param_info.hole_info[i].TtMax[0] + sysinf.psmMaster.card_param_info.hole_info[i].TtMax[1] / 100.0f;
+			CS[i].TtMin = sysinf.psmMaster.card_param_info.hole_info[i].TtMin[0] + sysinf.psmMaster.card_param_info.hole_info[i].TtMin[1] / 100.0f;
+		}
+	}else{	
+		for (int i = 0; i < CS_MAX; i++)
+		{	
+			//从二维码获取Tt范围	
+			CS_Slave[i].TtMax = sysinf.psmSlave.card_param_info.hole_info[i].TtMax[0] + sysinf.psmSlave.card_param_info.hole_info[i].TtMax[1] / 100.0f;
+			CS_Slave[i].TtMin = sysinf.psmSlave.card_param_info.hole_info[i].TtMin[0] + sysinf.psmSlave.card_param_info.hole_info[i].TtMin[1] / 100.0f;
+		}
+
+	
 	}
 
-	 SystemResaultJudge();
+	 SystemResaultJudge(number);
 }
-void calc_balance(void)
+void calc_balance(uint8_t number)
 {
+	ColorSensor *pGroup = (number == 0) ? CS : CS_Slave;
 	// 获取插卡前白平衡值
 	for (int i = 0; i < CS_MAX; i++)
 	{
-		Get_GAIN(&CS[i]);
+		Get_GAIN(&pGroup[i]);
 	}
 }

+ 14 - 12
DriverInterface/rgb381.h

@@ -76,6 +76,7 @@
 /****************************************************/
 typedef struct
 {
+	void *IICPort; //I2C端口句柄
 	uint32_t RDC; //color data clear raw data	原始值
 	uint32_t RDR; //color data red   raw data	原始值带小数
 //	uint32_t RDG; //color data green raw data
@@ -107,28 +108,29 @@ typedef struct
 	uint8_t  ID; //color sensor ID
 }ColorSensor;
 extern ColorSensor CS[CS_MAX];
+extern ColorSensor CS_Slave[CS_MAX];
 extern uint8_t SensorState1,SensorState2,SensorState3,SensorState4,SensorState5,SensorState6,SensorState7,SensorState8,SensorState9,SensorState10;
 //extern uint8_t SensorState1,SensorState2,SensorState3,SensorState4,SensorState5,SensorState6,SensorState7,SensorState8,SensorState9;
 /**************************************************/
-void SensorMeasurementFactor(uint8_t measfactor);
-void SensorSetGain(uint8_t gain);
-uint8_t SensorGetID(uint8_t ID);
+void SensorMeasurementFactor(ColorSensor *CS, uint8_t measfactor);
+void SensorSetGain(ColorSensor *CS, uint8_t gain);
+uint8_t SensorGetID(ColorSensor *CS);
 void SensorGetRawData(ColorSensor *CS);
 void SensorCalculatedCalibrationFactor(ColorSensor *CS);
 void RGBtoHSV(ColorSensor *CS);
-void SensorEnable(void);
+void SensorEnable(ColorSensor *CS);
 uint8_t SensorInit(ColorSensor *CS);
-int SensorSelfCheckPass(void);
+int SensorSelfCheckPass(uint8_t number);
 void SensorRGBInit(ColorSensor *CS);
 void SensorGetCalData(ColorSensor *CS);
-void sample_first_zero(void);
+void sample_first_zero(uint8_t number);
 void SensorInitial(void);
-int check_first_zero(void);
-void sample_calibrate_calc(uint32_t times);
-void sample_calc_avg_std(void);
-void sample_calc_tt(void);
-void sample_calc_result(void);
-void calc_balance(void);
+int check_first_zero(uint8_t number);
+void sample_calibrate_calc(uint32_t times,uint8_t number);
+void sample_calc_avg_std(uint8_t number);
+void sample_calc_tt(uint8_t number);
+void sample_calc_result(uint8_t number);
+void calc_balance(uint8_t number);
 /**************************************************/
 
 #endif /* RGB381_H_ */

+ 118 - 78
DriverInterface/state_mini.c

@@ -75,15 +75,33 @@ float get_max_min(float value[10])
 	
 	return (max - min);
 }
-void DatascopeSend(float value1,float value2, float value3, float value4, float value5,
+void DatascopeSend(int number,float value1,float value2, float value3, float value4, float value5,
 					float value6,float value7,float value8,float value9,float value10,float value11)//date_scope 10ch driver
 {	
     unsigned char SendCount;
-     uint16_t check;
-     CmdMessage msg;
 	float temp;
+#ifdef ONECHIP_MINI_PLUS
+	uint8_t DataScopeOutPutBuffer[60]; // Serial port send buffer
+    *(uint32_t*)&DataScopeOutPutBuffer[0] =  number;
+	*(uint32_t*)&DataScopeOutPutBuffer[4] = *(uint32_t*)&value1;
+	*(uint32_t*)&DataScopeOutPutBuffer[8] = *(uint32_t*)&value2;
+	*(uint32_t*)&DataScopeOutPutBuffer[12] = *(uint32_t*)&value3;
+	*(uint32_t*)&DataScopeOutPutBuffer[16] = *(uint32_t*)&value4;
+	*(uint32_t*)&DataScopeOutPutBuffer[20] = *(uint32_t*)&value5;
+	*(uint32_t*)&DataScopeOutPutBuffer[24] = *(uint32_t*)&value6;
+	*(uint32_t*)&DataScopeOutPutBuffer[28] = *(uint32_t*)&value7;
+	*(uint32_t*)&DataScopeOutPutBuffer[32] = *(uint32_t*)&value8;
+	*(uint32_t*)&DataScopeOutPutBuffer[36] = *(uint32_t*)&value9;
+	*(uint32_t*)&DataScopeOutPutBuffer[40] = *(uint32_t*)&value10;
+	*(uint32_t*)&DataScopeOutPutBuffer[44] = *(uint32_t*)&value11;	//时间
+	temp = get_max_min((float*)DataScopeOutPutBuffer);
+	*(uint32_t*)&DataScopeOutPutBuffer[48] = *(uint32_t*)&temp;	//极差
+	temp = get_std_avg((float*)DataScopeOutPutBuffer);
+	*(uint32_t*)&DataScopeOutPutBuffer[52] = *(uint32_t*)&temp;	//离散系数
+    SendCount=56;
+    DataScopeOutPutBuffer[SendCount] = ckeck_sum(DataScopeOutPutBuffer, SendCount);
+#else
 	uint8_t DataScopeOutPutBuffer[56]; // Serial port send buffer
-
 	*(uint32_t*)&DataScopeOutPutBuffer[0] = *(uint32_t*)&value1;
 	*(uint32_t*)&DataScopeOutPutBuffer[4] = *(uint32_t*)&value2;
 	*(uint32_t*)&DataScopeOutPutBuffer[8] = *(uint32_t*)&value3;
@@ -95,20 +113,23 @@ void DatascopeSend(float value1,float value2, float value3, float value4, float
 	*(uint32_t*)&DataScopeOutPutBuffer[32] = *(uint32_t*)&value9;
 	*(uint32_t*)&DataScopeOutPutBuffer[36] = *(uint32_t*)&value10;
 	*(uint32_t*)&DataScopeOutPutBuffer[40] = *(uint32_t*)&value11;	//时间
-
 	temp = get_max_min((float*)DataScopeOutPutBuffer);
 	*(uint32_t*)&DataScopeOutPutBuffer[44] = *(uint32_t*)&temp;	//极差
 	temp = get_std_avg((float*)DataScopeOutPutBuffer);
 	*(uint32_t*)&DataScopeOutPutBuffer[48] = *(uint32_t*)&temp;	//离散系数
     SendCount=52;
     DataScopeOutPutBuffer[SendCount] = ckeck_sum(DataScopeOutPutBuffer, SendCount);
+
+#endif
+
+
     SendCount++;
-	data_send_to_pc(PC_CMD_DATASCOPE,DataScopeOutPutBuffer,SendCount);
+	data_send_to_pc(PC_CMD_DATASCOPE,(char *)DataScopeOutPutBuffer,SendCount);
 }
 
-int TrigStateCheck(void)
+int TrigStateCheck(ProcessStateMachine_t *sts)
 {
-	 return (HAL_GPIO_ReadPin(MINI7_V2_DEC_S1_GPIO_Port,MINI7_V2_DEC_S1_Pin)) ? 1 : 0; // 
+	 return (HAL_GPIO_ReadPin((GPIO_TypeDef *)sts->card_port,sts->card_pin)) ? 1 : 0; // 
 }
 uint32_t get_master_st(float *temp,unsigned int *st) {
 	*temp = sysinf.heaterMaster.pid.realtemp;
@@ -133,11 +154,11 @@ void updateData(ProcessStateMachine_t *psm)
 	if(psm->cursendok == 0){
 		return;
 	}
-	if (check_to_pc_busy()){		
-		psm->cursendok = 0;
-		psm->sendTime = 3;
+	if (check_to_pc_busy()){
 		if(psm->DataSendHeader != psm->DataSendLast){ 			
-				/*1.5s 无应答,或者当前发送完成*/
+				/*1.5s 无应答,或者当前发送完成*/		
+                psm->cursendok = 0;
+                psm->sendTime = 3;
 				char data[55] = {0};
 				memcpy(&data[1], psm->card_param_info.pid, 10);
 				memcpy(&data[11],&psm->DataBufRDR[psm->DataSendHeader], 40);
@@ -209,29 +230,34 @@ void clean_reult_next(unsigned char * part)
  *返回:错误码
  *其他:无
  ********************************************************************/
-uint8_t error_set(uint8_t error)
+uint8_t error_set(uint8_t error,uint8_t id)
 {
        
-    if(error_info.error_code == error)
+    if(error_info.error_code == error && error_info.id == id)
         return error;
 
-    if(error == ERROR_SAMP_MOVE_CARD)   //检测中拔卡,需等待60S才能消除
-    {
-       sysinf.error_delay = 60; 
-    }    
     error_info.error_code = error;
-    error_info.id = 0;
-    if((error_info.error_code == ERROR_HEATFUC_EER)||(error_info.error_code == ERROR_TEMPSENSOR_EER)){
-       error_info.id = 1; 
+    error_info.id = id;
+    if(error_info.id == 0){        
+        sysinf.psmMaster.state = SW_Fault;
+        Van_Device_Printf(VAN_LOG_ERROR, "error_set: %d %d %d\n", 0, error,sysinf.psmMaster.state);
+        if(error == ERROR_SAMP_MOVE_CARD)   //检测中拔卡,需等待60S才能消除
+        {
+            sysinf.psmMaster.error_delay = 60; 
+        }    
+    }else{            
+        sysinf.psmSlave.state = SW_Fault;
+        Van_Device_Printf(VAN_LOG_ERROR, "error_set: %d %d %d\n", 1, error,sysinf.psmSlave.state);
+        if(error == ERROR_SAMP_MOVE_CARD)   //检测中拔卡,需等待60S才能消除
+        {
+            sysinf.psmSlave.error_delay = 60; 
+        }    
     }
     sysinf.updateError = 1;
-
-    Van_Device_Printf(VAN_LOG_ERROR, "error_set: %d %d %d\n", 0, error,sysinf.psmMaster.state);
     memcpy(error_info.SN, &sysinf.SN, 7);
 	error_info.SN[7] = 0;
     error_info.error_report = 1;
     data_send_to_pc(PC_CMD_REPORT_REEOR, (char*)&error_info, sizeof(str_error_info_t));
-    sysinf.psmMaster.state = SW_Fault;
 //    if(error != ERROR_MOTOR_FIALED){
 // 	   sysinf.psmMaster.state = SW_Fault;
 // 	//    mcu_ack_ctrl.re_send_card = ACK_TIMEOUT;
@@ -273,16 +299,33 @@ void re_send_state(void){
   
 
 
-void updateAmplifState(uint8_t newset){
-    if(sysinf.amplifState != newset){
-        sysinf.amplifState = newset;
-        if(newset == SYS_STATE_ERROR_HW){
+void updateAmplifState(uint8_t newset,uint8_t id){
+    if(id==0){
+        if(sysinf.amplifState != newset){
+            sysinf.amplifState = newset;
+            if(newset == SYS_STATE_ERROR_HW){
+                sysinf.lysisState = newset;
+                
+#ifdef ONECHIP_MINI_ONE
+                beep_set(BEEP_ERR_HW);
+#endif
+                
+            }else if(newset == SYS_STATE_ERROR_HM){
+                beep_set(BEEP_ERR_HM);
+            }
+            sysinf.updateSt = 1;
+        }    
+    }else{
+        if(sysinf.lysisState != newset){
             sysinf.lysisState = newset;
-            beep_set(BEEP_ERR_HW);
-        }else if(newset == SYS_STATE_ERROR_HM){
-            beep_set(BEEP_ERR_HM);
+            if(newset == SYS_STATE_ERROR_HW){
+                sysinf.lysisState = newset;
+                beep_set(BEEP_ERR_HW);
+            }else if(newset == SYS_STATE_ERROR_HM){
+                beep_set(BEEP_ERR_HM);
+            }
+            sysinf.updateSt = 1;
         }
-        sysinf.updateSt = 1;
     }
 }
         
@@ -290,30 +333,28 @@ void updateLysisState(uint8_t newset){
     if(sysinf.lysisState != newset){
         sysinf.lysisState = newset;
         if(newset == SYS_STATE_ERROR_HW){
-            sysinf.amplifState = newset;
+            sysinf.lysisState = newset;
             beep_set(BEEP_ERR_HW);
         }else if(newset == SYS_STATE_ERROR_HM){
             beep_set(BEEP_ERR_HM);
         }
         sysinf.updateSt = 1;
     }
-
 }
 
 void usr_state_machine(ProcessStateMachine_t *sts, heat_ctrl_def *heater)
 {
     sts->statusword = 0x0000;
     static uint8_t state = 0;
-    static uint32_t delay = 0;
     //采样前,3秒发一次加热指令
     if((sts->state < SW_Chip_Id) && (sts->state != SW_Fault)){
-        if (TrigStateCheck() == CardON){    
+        if (TrigStateCheck(sts) == CardON){    
             if(sts->state == SW_Target_reached){
-                 error_set(ERROR_HEAT_INSERT_CARD);
+                 error_set(ERROR_HEAT_INSERT_CARD,heater->number);
             }else {
-                 error_set(ERROR_NO_QRCODE);
+                 error_set(ERROR_NO_QRCODE,heater->number);
             }               
-            updateAmplifState(SYS_STATE_ERROR_HM);
+            updateAmplifState(SYS_STATE_ERROR_HM,heater->number);
         }
     }
     switch (sts->state)
@@ -334,10 +375,10 @@ void usr_state_machine(ProcessStateMachine_t *sts, heat_ctrl_def *heater)
         // 采样没有完成,拔卡检测        
         sts->sampleStart = 0;
 
-        if(error_info.error_code < ERROR_SENSOR_SELF_CHECK && sysinf.error_delay == 0)
+        if(error_info.error_code < ERROR_SENSOR_SELF_CHECK && sts->error_delay == 0)
         {
             //拔卡消除故障
-            if (TrigStateCheck() == CardOFF)
+            if (TrigStateCheck(sts) == CardOFF)
             {
                 sts->statusword |= SW_move_card;
                 sts->state = SW_move_card;
@@ -366,25 +407,25 @@ void usr_state_machine(ProcessStateMachine_t *sts, heat_ctrl_def *heater)
         if (heater->temp_stable_sta == 1)
         {
             sts->controlword = Target_reached_cmd;
-             updateAmplifState(SYS_STATE_READY); 
+             updateAmplifState(SYS_STATE_READY,heater->number); 
         	/*************lxx-add-20232.11.30****************/
-            if (SensorSelfCheckPass()==0)
+            if (SensorSelfCheckPass(heater->number)==0)
         	{   
-                updateAmplifState(SYS_STATE_ERROR_HW); 
-                error_set(ERROR_SENSOR_SELF_CHECK);
+                updateAmplifState(SYS_STATE_ERROR_HW,heater->number); 
+                error_set(ERROR_SENSOR_SELF_CHECK,heater->number);
         	}
         }
 		if ((sysinf.skip_CheckOrRun & SKIP_HEATONCHECK_OK))
         {
            /*跳过温度判断*/
             sts->controlword = Target_reached_cmd;
-            if (SensorSelfCheckPass()==0)
+            if (SensorSelfCheckPass(heater->number)==0)
         	{
-                error_set(ERROR_SENSOR_SELF_CHECK);
+                error_set(ERROR_SENSOR_SELF_CHECK,heater->number);
         	}
-        	sysinf.heaterMaster.HeatState = SystemPreHeat;
-            sysinf.heaterMaster.temp_stable_sta = 0;
-            updateAmplifState(SYS_STATE_READY); 
+        	heater->HeatState = SystemPreHeat;
+            heater->temp_stable_sta = 0;
+            updateAmplifState(SYS_STATE_READY,heater->number); 
 
         }
 
@@ -407,29 +448,30 @@ void usr_state_machine(ProcessStateMachine_t *sts, heat_ctrl_def *heater)
         // }
         if (is_command(sts->controlword, Scan_Qrcode_cmd))
         {
-            calc_balance();
+            calc_balance(heater->number);
             sts->statusword |= SW_Chip_Id;
             sts->state = SW_Chip_Id;
-             updateAmplifState(SYS_STATE_CHECK); 
+             updateAmplifState(SYS_STATE_CHECK,heater->number); 
         }
 		if((sysinf.skip_CheckOrRun & SKIP_SCANQRCODE)){
 	         sts->statusword |= SW_Chip_Id;
 	         sts->state = SW_Chip_Id;
-             updateAmplifState(SYS_STATE_CHECK); 
+             updateAmplifState(SYS_STATE_CHECK,heater->number); 
 		}
     }
         break;
     // 插卡,通道检测
     case SW_Chip_Id:
     {
-        if (TrigStateCheck() == CardON)
+        if (TrigStateCheck(sts) == CardON)
         {		
       		Refresh_IWDG();
 			HAL_Delay(1000);/*插卡后延时1s检测*/		
       		Refresh_IWDG();
 			if(!(sysinf.skip_CheckOrRun & SKIP_CHECK_CARDINSERT)){
-				if(check_first_zero() == 1){                    
-                    updateAmplifState(SYS_STATE_ERROR_HM); 
+				if(check_first_zero(heater->number) == 1){       
+                    error_set(ERROR_SENSOR_CARD_CHECK,heater->number);             
+                    updateAmplifState(SYS_STATE_ERROR_HM,heater->number); 
                     break;
                 }
 			}
@@ -438,15 +480,15 @@ void usr_state_machine(ProcessStateMachine_t *sts, heat_ctrl_def *heater)
 	            // mcu_ack_ctrl.re_send_card = ACK_TIMEOUT;
 	            // Card_State_Send(HEAT_ON);
                 
-        	    sysinf.heaterMaster.HeatState = SysPreHeatUP;
-                sysinf.heaterMaster.timenum=0;
+        	    heater->HeatState = SysPreHeatUP;
+                heater->timenum=0;
 	            g_heat_ctrl.temp_stable_sta=0;
 	            g_card_tick_s = 0;
 				if (is_command(sts->controlword, Qrcode_publish_cmd))
 				{
 					sts->statusword |= SW_Sample_timeout;
 					sts->state = SW_Sample_timeout;
-                     updateAmplifState(SYS_STATE_RUNING); 
+                     updateAmplifState(SYS_STATE_RUNING,heater->number); 
 				}
 				};
         }
@@ -456,33 +498,36 @@ void usr_state_machine(ProcessStateMachine_t *sts, heat_ctrl_def *heater)
     case SW_Sample_timeout:
     {
         if(!(sysinf.skip_CheckOrRun & SKIP_CHECK_CARDREMOVE))
-         if (TrigStateCheck() == CardOFF){            
-            error_set(ERROR_SAMP_MOVE_CARD);
-            updateAmplifState(SYS_STATE_ERROR_HM);
+         if (TrigStateCheck(sts) == CardOFF){            
+            error_set(ERROR_SAMP_MOVE_CARD,heater->number);
+            updateAmplifState(SYS_STATE_ERROR_HM,heater->number);
         }
     	if(((heater->temp_stable_sta==2)||(sysinf.skip_CheckOrRun & SKIP_HEATONCHECK_OK))&& sts->sampleStart == 0)
     	{
 			// 启动定时器计时
 			sts->sampleTimes = 0;
 			sts->sampleStart = 1;
+            sts->DataSendHeader = 0;
+            sts->DataSendLast = 0;
     	}
-     	if(sysinf.samp_flag == 1 && sts->sampleStart)
+     	if(sts->samp_flag == 1 && sts->sampleStart)
     	{
-			sysinf.samp_flag = 0;
+			sts->samp_flag = 0;
 		
 			if (sts->sampleTimes == 0)
 			{
-				sample_first_zero();    //计算校零值	
+				sample_first_zero(heater->number);    //计算校零值	
 				// sts->samp_num = 0;
 				sts->cursendok = 1;
 			}
 			else
 			{
-				sample_calibrate_calc(sts->sampleTimes);     //采样,前18组计算均值
+				sample_calibrate_calc(sts->sampleTimes,heater->number);     //采样,前18组计算均值
                 //输出原始数据
               
 			}
-            DatascopeSend(CS[0].RDR,CS[1].RDR,CS[2].RDR,CS[3].RDR,CS[4].RDR,CS[5].RDR,CS[6].RDR,CS[7].RDR,CS[8].RDR,CS[9].RDR,(sysinf.ms_conter/1000.0));
+            ColorSensor *pGroup = (heater->number == 0) ? CS : CS_Slave;
+            DatascopeSend(heater->number,pGroup[0].RDR,pGroup[1].RDR,pGroup[2].RDR,pGroup[3].RDR,pGroup[4].RDR,pGroup[5].RDR,pGroup[6].RDR,pGroup[7].RDR,pGroup[8].RDR,pGroup[9].RDR,(sysinf.ms_conter/1000.0));
 
             //上报采样数据
 //            sample_send_rt_data();
@@ -528,12 +573,7 @@ void usr_state_machine(ProcessStateMachine_t *sts, heat_ctrl_def *heater)
         {
             sts->statusword |= SW_result_report;
             sts->state = SW_result_report;
-             sample_calc_result();
-            delay = 0;
-            // datasope_flag = 0;
-            
-            // mcu_ack_ctrl.re_send_card = ACK_TIMEOUT;
-        	// Card_State_Send(HEAT_OFF);              //降温至40°C,不开风扇
+             sample_calc_result(heater->number);
         	sts->updateresult = 1;
 			
         }
@@ -575,7 +615,7 @@ void usr_state_machine(ProcessStateMachine_t *sts, heat_ctrl_def *heater)
         {
             sts->statusword |= SW_move_card;
             sts->state = SW_move_card;
-            updateAmplifState(SYS_STATE_WORKEND);             
+            updateAmplifState(SYS_STATE_WORKEND,heater->number);             
 			beep_set(BEEP_WORKEND);
         }
     }
@@ -583,7 +623,7 @@ void usr_state_machine(ProcessStateMachine_t *sts, heat_ctrl_def *heater)
     case SW_move_card:
     {
         //等待拔卡进入下一次循环
-        if (TrigStateCheck() != CardON)
+        if (TrigStateCheck(sts) != CardON)
         {
             //跳转到等待扫码状态
             sts->statusword = SW_Target_reached;
@@ -595,10 +635,10 @@ void usr_state_machine(ProcessStateMachine_t *sts, heat_ctrl_def *heater)
             datasope_flag = 0;
             sts->heat_timeout = 0;
             memset(&sts->card_param_info, 0 ,sizeof(sts->card_param_info));
-        	sysinf.heaterMaster.HeatState = SystemPreHeat;
-            sysinf.heaterMaster.temp_stable_sta = 0;
+        	heater->HeatState = SystemPreHeat;
+            heater->temp_stable_sta = 0;
             sts->controlword = Board_Selftest_cmd; 
-             updateAmplifState(SYS_STATE_PREPARE); 
+             updateAmplifState(SYS_STATE_PREPARE,heater->number); 
         }
     }
         break;

+ 7 - 3
DriverInterface/state_mini.h

@@ -228,18 +228,22 @@ typedef struct ProcessStateMachine
     unsigned int  scan_qrcode_done;
     unsigned int  statusword; 
     unsigned int  controlword;     
-	str_card_param_info_t card_param_info; 
+	str_card_param_info_t card_param_info;     	
+	uint16_t  card_pin;	
+	void * card_port;	
+    unsigned int samp_flag;
+    unsigned int error_delay;
 } ProcessStateMachine_t;
 
 void resend_error_update(void);
 void re_send_state(void);
 uint32_t get_master_st(float *temp,unsigned int *st);
 uint32_t get_slave_st(float *temp,unsigned int *st);
-void updateAmplifState(uint8_t newset);
+void updateAmplifState(uint8_t newset,uint8_t id);
 void updateLysisState(uint8_t newset);
 void updateData_next(unsigned int recdex,unsigned char * part);
 void clean_reult_next(unsigned char * part);
-uint8_t error_set(uint8_t error);
+uint8_t error_set(uint8_t error,uint8_t id);
 void error_clear(void);
 void usr_state_machine(ProcessStateMachine_t *sts, heat_ctrl_def *heater);
 void resetSampleData(ProcessStateMachine_t *psm);

+ 39 - 26
DriverInterface/user_heater.c

@@ -20,17 +20,17 @@ uint32_t get_heater_slave_st(float *temp,unsigned int *st) {
 	return 0;
 }
 
-uint32_t check_heater_master_needPreheat(void) {
+uint32_t check_heater_master_needPreheat(heat_ctrl_def *heater) {
         
-    float temp = getADC_Chanel_value(0);
-    sysinf.heaterMaster.pid.realtemp = temp + sysinf.heaterMaster.offset;
-    if(sysinf.heaterMaster.pid.realtemp < HEATER_NEED_PREHEAT){
-        sysinf.heaterMaster.needpreheat = 1;
-        sysinf.heaterMaster.HeatState = SysPreHeatUP;
-        sysinf.heaterMaster.stabletime = 0;
+    // float temp = getADC_Chanel_value(0);
+    // heater->pid.realtemp = temp + sysinf.heaterMaster.offset;
+    if( heater->pid.realtemp < HEATER_NEED_PREHEAT){
+         heater->needpreheat = 1;
+         heater->HeatState = SysPreHeatUP;
+         heater->stabletime = 0;
     }else{
-        sysinf.heaterMaster.needpreheat = 0;
-        sysinf.heaterMaster.HeatState = SystemPreHeat;
+         heater->needpreheat = 0;
+         heater->HeatState = SystemPreHeat;
     }
 	return 0;
 }
@@ -46,11 +46,25 @@ void updatParm_heater_master(void) {
 	sysinf.heaterMaster.pid.Kp = sysinf.amplif_Kp;
 	sysinf.heaterMaster.pid.Ki = sysinf.amplif_Ki ;
 	sysinf.heaterMaster.pid.Kd = sysinf.amplif_Kd;
+    sysinf.heaterMaster.number = 0;
+}
 
-
-
-
+    
+#ifdef ONECHIP_MINI_PLUS
+void updatParm_Slave_master(void) {
+	sysinf.heaterSlave.PreHeatTime = sysinf.PreHeatTime_Slave;
+	sysinf.heaterSlave.HoldTemp = sysinf.holdTemp_Slave;
+	sysinf.heaterSlave.readyTemp =  sysinf.readyTemp_Slave;
+	sysinf.heaterSlave.PresetTempVal = sysinf.PresetTempVal_Slave;
+	sysinf.heaterSlave.PresetTempTime = sysinf.PresetTempTime_Slave*10;
+	sysinf.heaterSlave.adJTarget =  sysinf.adJTarget_Slave;
+	sysinf.heaterSlave.SetTempVal =  sysinf.SetTempVal_Slave;
+	sysinf.heaterSlave.pid.Kp = sysinf.amplif_Kp_Slave;
+	sysinf.heaterSlave.pid.Ki = sysinf.amplif_Ki_Slave ;
+	sysinf.heaterSlave.pid.Kd = sysinf.amplif_Kd_Slave;
+    sysinf.heaterSlave.number = 1;
 }
+#endif
 
 void heater_work(heat_ctrl_def *heater)
 {
@@ -58,9 +72,9 @@ void heater_work(heat_ctrl_def *heater)
         heater->stabletime ++;
         if(heater->stabletime > heater->PreHeatTime * 600){
             /*提前预热阶段完成,进入正式控温流程*/
-            sysinf.heaterMaster.needpreheat = 0;
-            sysinf.heaterMaster.HeatState = SystemPreHeat;
-            sysinf.heaterMaster.stabletime = 0;  
+            heater->needpreheat = 0;
+            heater->HeatState = SystemPreHeat;
+            heater->stabletime = 0;  
         }
     }
     
@@ -68,8 +82,8 @@ void heater_work(heat_ctrl_def *heater)
         /*稍后添加*/
          com_pwm_Set(heater->pwdId,0);  
          heater->HeatState = SysERRORHeat;
-         error_set(ERROR_HEAT_SELF_CHECK);
-         updateAmplifState(SYS_STATE_ERROR_HW);
+         error_set(ERROR_HEAT_SELF_CHECK,heater->number);
+         updateAmplifState(SYS_STATE_ERROR_HW,heater->number);
          return;
     }
     if((heater->pid.realtemp < HEATER_MIN_TEMP) || (heater->pid.realtemp > HEATER_MAX_TEMP)){
@@ -81,8 +95,7 @@ void heater_work(heat_ctrl_def *heater)
     }
     heater->timenum ++;
     switch (heater->HeatState)
-    {
-        
+    {        
         case SystemCheckHeat:{
             if(heater->firstIn == 0){
                 com_pwm_Set(heater->pwdId,100);   
@@ -91,10 +104,10 @@ void heater_work(heat_ctrl_def *heater)
                 heater->firstIn = 1;            
             }         
             if((heater->pid.realtemp > 70) || ((heater->pid.realtemp - heater->lastTemp) > 0.2)){                
-                check_heater_master_needPreheat();
+                check_heater_master_needPreheat(heater);
             }   else if (heater->timenum > 60)       {
-                error_set(ERROR_HEAT_TIMEOUT);
-                updateAmplifState(SYS_STATE_ERROR_HW);
+                error_set(ERROR_HEAT_TIMEOUT,heater->number);
+                updateAmplifState(SYS_STATE_ERROR_HW,heater->number);
                 Van_Device_Printf(VAN_LOG_ERROR, "HEAT_TIMEOUT at:%d\n\r",__LINE__);
                 heater->HeatState = SysERRORHeat;
             } 
@@ -160,8 +173,8 @@ void heater_work(heat_ctrl_def *heater)
                     /*TODO 加热模块故障*/
                     com_pwm_Set(heater->pwdId,0);      
                         Van_Device_Printf(VAN_LOG_ERROR, "HEAT_TIMEOUT at:%d\n\r",__LINE__);              
-                    error_set(ERROR_HEAT_TIMEOUT);
-                    updateAmplifState(SYS_STATE_ERROR_HW);
+                    error_set(ERROR_HEAT_TIMEOUT,heater->number);
+                    updateAmplifState(SYS_STATE_ERROR_HW,heater->number);
                     heater->HeatState = SysERRORHeat;
                     return;
                 }
@@ -210,8 +223,8 @@ void heater_work(heat_ctrl_def *heater)
                     if(heater->overtempnum>=3)
                     {
                         com_pwm_Set(heater->pwdId,0);
-                        error_set(ERROR_HEAT_TIMEOUT);
-                        updateAmplifState(SYS_STATE_ERROR_HW);
+                        error_set(ERROR_HEAT_TIMEOUT,heater->number);
+                        updateAmplifState(SYS_STATE_ERROR_HW,heater->number);
                         Van_Device_Printf(VAN_LOG_ERROR, "HEAT_TIMEOUT at:%d\n\r",__LINE__);
                         heater->HeatState = SysERRORHeat;
                         return;

+ 3 - 2
DriverInterface/user_heater.h

@@ -38,13 +38,14 @@ typedef struct
     pid_def  pid;	
     unsigned int pwdId; 
     unsigned int needpreheat;  
-    unsigned int firstIn;
+    unsigned int firstIn; 
+    unsigned int number;
 }heat_ctrl_def;
 
 
 uint32_t get_heater_master_st(float *temp,unsigned int *st);
 uint32_t get_heater_slave_st(float *temp,unsigned int *st);
-uint32_t check_heater_master_needPreheat(void);
 void updatParm_heater_master(void);
+void updatParm_Slave_master(void);
 void heater_work(heat_ctrl_def *heater);
 #endif

+ 5 - 5
DriverInterface/usr_lysis.c

@@ -9,7 +9,7 @@
 
 #include "onechip_include_header.h"
 
-
+#ifdef ONECHIP_MINI_ONE
 
 #define MIN_TEMPERATUARE 5
 #define MAX_TEMPERATUARE 120 
@@ -182,7 +182,7 @@ uint32_t lysis_work(void) {
 
   temp = getADC_Chanel_value(1);  
   if(temp < MIN_TEMPERATUARE || temp > MAX_TEMPERATUARE){
-	error_set(ERROR_TEMPSENSOR_EER);		
+	error_set(ERROR_TEMPSENSOR_EER,1);		
 	updateLysisState(SYS_STATE_ERROR_HW);
 	ptherm->thermostat_st = THERMOSTAT_ERROR;
 	ptherm->firstin = true;
@@ -212,7 +212,7 @@ uint32_t lysis_work(void) {
 				/*超时判断*/
 				ptherm->thermostat_st = THERMOSTAT_ERROR;
 				updateLysisState(SYS_STATE_ERROR_HW);
-				error_set(ERROR_HEATFUC_EER);
+				error_set(ERROR_HEATFUC_EER,1);
 				ptherm->firstin = true;
 			}
 		}	
@@ -283,7 +283,7 @@ uint32_t lysis_work(void) {
 					/*目标温差大于10,加热启动30s之内没升温2.5° 超时判断*/
 					ptherm->thermostat_st = THERMOSTAT_ERROR;
 					updateLysisState(SYS_STATE_ERROR_HW);
-					error_set(ERROR_HEATFUC_EER);
+					error_set(ERROR_HEATFUC_EER,1);
 					ptherm->firstin = true;
 			  }
 		}
@@ -361,4 +361,4 @@ uint32_t Close_Therm_work(void) {
   ptherm->firstin = true;
   return 0;
 }
-
+#endif  

+ 3 - 2
DriverInterface/usr_motor.c

@@ -508,8 +508,9 @@ uint32_t Motor_mix_work(void) {
   		/*电机不动,返回报错*/
   		SetMotorPwm(MOTOR_REV, 0);
   		sw_st = SWING_ERR;
-		error_set(ERROR_MOTOR_FIALED);		
-        updateAmplifState(SYS_STATE_ERROR_HW);
+		error_set(ERROR_MOTOR_FIALED,0);		
+        updateAmplifState(SYS_STATE_ERROR_HW,0);
+        updateAmplifState(SYS_STATE_ERROR_HW,1);
   		return 1;
   	  }
     } 

+ 14 - 11
DriverInterface/van_BSP_Scanner.c

@@ -127,17 +127,20 @@ void svanner_receive_analysis(void)
 					memcpy(&sysinf.psmMaster.card_param_info, &m_str_card_param_info, sizeof(str_card_param_info_t));
 					sysinf.resendeQRtimer = 1;				       
 					// beep_set(BEEP_SCANOK);
-				}
-				else{	
-					svanner_receive_Rec_Start(sysinf.scannerUart);
-#ifdef ONECHIP_MINI_PLUSE
-				if((sysinf.psmSlave.state == SW_Scan_Qrcode || sysinf.psmSlave.state == SW_Chip_Id  )){
-
-					}
-#endif
-				}
-				// sysinf.resendeQRtimer = 1;
-				       
+				}else{	
+#ifdef ONECHIP_MINI_PLUS
+					if((sysinf.psmSlave.state == SW_Scan_Qrcode || sysinf.psmSlave.state == SW_Chip_Id  )){
+						svanner_receive_Rec_Stop(sysinf.scannerUart);
+						sysinf.updateQR = true;
+						data_send_to_pc(PC_CMD_QRCODE,(char *)g_uart2_rx_buf, received_len);	
+						memcpy(&sysinf.psmSlave.card_param_info, &m_str_card_param_info, sizeof(str_card_param_info_t));
+						sysinf.resendeQRtimer = 1;	
+					}else
+#endif					
+					{
+						svanner_receive_Rec_Start(sysinf.scannerUart);
+					}					
+				}				       
 				beep_set(BEEP_SCANOK);
 			}
 			else{

+ 1 - 1
DriverInterface/van_BSP_Temp_mts01.c

@@ -31,7 +31,7 @@ VAN_TEMP_CHANNEl_CON_ST_Def gTemp_channel_demo_V1[] = {
 
 const unsigned int gTemp_channel_demo_V1_Num = ARR_LEN(gTemp_channel_demo_V1);
 
-static float mst01_samp[ARR_LEN(gTemp_mts01_demo_V1)] = {0};  //传感器采集数据
+// static float mst01_samp[ARR_LEN(gTemp_mts01_demo_V1)] = {0};  //传感器采集数据
 static unsigned short last_valve[ARR_LEN(gTemp_mts01_demo_V1)] = {0};
 static uint32_t count[ARR_LEN(gTemp_mts01_demo_V1)] = {0};
 static uint32_t errorConter[ARR_LEN(gTemp_mts01_demo_V1)] = {0};

+ 16 - 4
DriverInterface/ws2812.c

@@ -94,13 +94,21 @@ void beep_set(BEEPTYPE beep){
 
     switch(beep){
         case BEEP_ERR_HW:{
-	        sysinf.QRBeepTimeer = 0xfffffff;
-	        sysinf.QRBeepFlash = 250; 
+#ifdef ONECHIP_MINI_PLUS
+            sysinf.QRBeepTimeer = 30*1000;
+#else
+            sysinf.QRBeepTimeer = 0xfffffff;
+#endif
+            sysinf.QRBeepFlash = 250; 
 	        sysinf.QRBeepFlashAll = 500;
         }
         break;
         case BEEP_ERR_HM:{
-	        sysinf.QRBeepTimeer = 0xfffffff;
+#ifdef ONECHIP_MINI_PLUS
+            sysinf.QRBeepTimeer = 30*1000;
+#else
+            sysinf.QRBeepTimeer = 0xfffffff;
+#endif
 	        sysinf.QRBeepFlash = 250; 
 	        sysinf.QRBeepFlashAll = 500;
         }
@@ -176,8 +184,10 @@ void light_update(void){
     if(sysinf.amplifState == SYS_STATE_ERROR_HM){
         light_set(MODE_BLINK,500, COLOR_RED,0);	//
     }else if(sysinf.amplifState == SYS_STATE_ERROR_HW){
-        light_set(MODE_NORMAL,1000, COLOR_RED,0);	//仪器故障,双边同步
+        light_set(MODE_NORMAL,1000, COLOR_RED,0);	//仪器故障,双边同步 
+#ifdef ONECHIP_MINI_ONE
         light_set(MODE_NORMAL,1000, COLOR_RED,1);	//
+#endif
         return ;
     } else   if(sysinf.pc_link_timeout == OFFLINE_TIME){
         light_set(MODE_BLINK,1000, COLOR_YELLOW,0);	//
@@ -208,7 +218,9 @@ void light_update(void){
     if(sysinf.lysisState == SYS_STATE_ERROR_HM){
         light_set(MODE_BLINK,500, COLOR_RED,1);	//离线,黄色1S闪烁
     }else if(sysinf.lysisState == SYS_STATE_ERROR_HW){
+#ifdef ONECHIP_MINI_ONE
         light_set(MODE_NORMAL,1000, COLOR_RED,0);	//仪器故障,双边同步
+#endif
         light_set(MODE_NORMAL,1000, COLOR_RED,1);	//
     }   else if(sysinf.pc_link_timeout < OFFLINE_TIME){
         switch (sysinf.lysisState){

+ 1 - 2
MDK-ARM/RTE/_mini7_V2/RTE_Components.h

@@ -1,6 +1,6 @@
 
 /*
- * Auto generated Run-Time-Environment Configuration File
+ * Auto generated Run-Time-Environment Component Configuration File
  *      *** Do not modify ! ***
  *
  * Project: 'mini7_V2' 
@@ -17,5 +17,4 @@
 #define CMSIS_device_header "stm32f10x.h"
 
 
-
 #endif /* RTE_COMPONENTS_H */

文件差异内容过多而无法显示
+ 7 - 7
MDK-ARM/mini7_V2.uvguix.Administrator


+ 5 - 0
MDK-ARM/mini7_V2.uvoptx

@@ -527,6 +527,11 @@
           <WinNumber>1</WinNumber>
           <ItemText>timerBuf</ItemText>
         </Ww>
+        <Ww>
+          <count>11</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>sysinf</ItemText>
+        </Ww>
       </WatchWindow1>
       <WatchWindow2>
         <Ww>

+ 9 - 9
MDK-ARM/mini7_V2.uvprojx

@@ -16,8 +16,8 @@
         <TargetCommonOption>
           <Device>STM32F103RE</Device>
           <Vendor>STMicroelectronics</Vendor>
-          <PackID>Keil.STM32F1xx_DFP.2.4.1</PackID>
-          <PackURL>https://www.keil.com/pack/</PackURL>
+          <PackID>Keil.STM32F1xx_DFP.2.4.0</PackID>
+          <PackURL>http://www.keil.com/pack/</PackURL>
           <Cpu>IRAM(0x20000000-0x2000FFFF) IROM(0x8000000-0x807FFFF)  CLOCK(8000000) CPUTYPE("Cortex-M3") TZ</Cpu>
           <FlashUtilSpec></FlashUtilSpec>
           <StartupFile></StartupFile>
@@ -82,7 +82,7 @@
           <AfterMake>
             <RunUserProg1>1</RunUserProg1>
             <RunUserProg2>1</RunUserProg2>
-            <UserProg1Name>C:\Keil_v5\ARM\ARMCC\bin\fromelf   --bin --output ./mini7_V2/mini7_V2.bin ./mini7_V2/mini7_V2.axf</UserProg1Name>
+            <UserProg1Name>F:\Keil_v5\ARM\ARMCC\bin\fromelf   --bin --output ./mini7_V2/mini7_V2.bin ./mini7_V2/mini7_V2.axf</UserProg1Name>
             <UserProg2Name></UserProg2Name>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
             <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
@@ -336,7 +336,7 @@
             <v6Rtti>0</v6Rtti>
             <VariousControls>
               <MiscControls></MiscControls>
-              <Define>USE_HAL_DRIVER,STM32F103xE,ONECHIP_MINI_ONE</Define>
+              <Define>USE_HAL_DRIVER,STM32F103xE,ONECHIP_MINI_PLUS</Define>
               <Undefine></Undefine>
               <IncludePath>../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;../BoardInterface;../DriverInterface;../tshell</IncludePath>
             </VariousControls>
@@ -781,8 +781,8 @@
         <TargetCommonOption>
           <Device>STM32F103RE</Device>
           <Vendor>STMicroelectronics</Vendor>
-          <PackID>Keil.STM32F1xx_DFP.2.4.1</PackID>
-          <PackURL>https://www.keil.com/pack/</PackURL>
+          <PackID>Keil.STM32F1xx_DFP.2.4.0</PackID>
+          <PackURL>http://www.keil.com/pack/</PackURL>
           <Cpu>IRAM(0x20000000-0x2000FFFF) IROM(0x8000000-0x807FFFF)  CLOCK(8000000) CPUTYPE("Cortex-M3") TZ</Cpu>
           <FlashUtilSpec></FlashUtilSpec>
           <StartupFile></StartupFile>
@@ -845,8 +845,8 @@
             <nStopB2X>0</nStopB2X>
           </BeforeMake>
           <AfterMake>
-            <RunUserProg1>1</RunUserProg1>
-            <RunUserProg2>1</RunUserProg2>
+            <RunUserProg1>0</RunUserProg1>
+            <RunUserProg2>0</RunUserProg2>
             <UserProg1Name>C:\Keil_v5\ARM\ARMCC\bin\fromelf   --bin --output ./mini7_V2/mini7_V2.bin ./mini7_V2/mini7_V2.axf</UserProg1Name>
             <UserProg2Name></UserProg2Name>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
@@ -1101,7 +1101,7 @@
             <v6Rtti>0</v6Rtti>
             <VariousControls>
               <MiscControls></MiscControls>
-              <Define>USE_HAL_DRIVER,STM32F103xE,ONECHIP_MINI_ONE,MINI7_V2_DEBUG</Define>
+              <Define>USE_HAL_DRIVER,STM32F103xE,ONECHIP_MINI_PLUS,MINI7_V2_DEBUG</Define>
               <Undefine></Undefine>
               <IncludePath>../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;../BoardInterface;../DriverInterface;../tshell</IncludePath>
             </VariousControls>

+ 2 - 2
MDK-ARM/startup_stm32f103xe.lst

@@ -544,8 +544,8 @@ ARM Macro Assembler    Page 9
               00000000 
 Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw
 ork --depend=mini7_v2\startup_stm32f103xe.d -omini7_v2\startup_stm32f103xe.o -I
-.\RTE\_mini7_V2 -IC:\Keil_v5\ARM\PACK\ARM\CMSIS\5.4.0\CMSIS\Core\Include -IC:\K
-eil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.1\Device\Include --predefine="__MICROLIB
+.\RTE\_mini7_V2 -IF:\Keil_v5\ARM\PACK\ARM\CMSIS\5.4.0\CMSIS\Core\Include -IF:\K
+eil_v5\ARM\PACK\Keil\STM32F1xx_DFP\2.4.0\Device\Include --predefine="__MICROLIB
  SETA 1" --predefine="__UVISION_VERSION SETA 526" --predefine="_RTE_ SETA 1" --
 predefine="STM32F10X_HD SETA 1" --list=startup_stm32f103xe.lst startup_stm32f10
 3xe.s

+ 1 - 1
tshell/van_com_algorithm.c

@@ -414,4 +414,4 @@ int Decode(CmdMessage *pMessage, const  unsigned char *pInBuffer, int uLen)
     // checksum
 
     return uMsgLen;
-}
+}

部分文件因为文件数量过多而无法显示