int checkEnv (int sto_no, struct storage_info *p) { char flag = 0; static char a8_beep_status = 0; if (0 == tem_alarm_status[sto_no]) { if (p->temperature > p->temperatureMAX) { sendMsgQueue (MSG_LED, MSG_LED_TEM_ON); //fs210上的灯 sendMsgQueue (MSG_M0, MSG_M0_LED_ON | sto_no << 6);//MSG_M0 transfer to M0 sendMsgQueue (MSG_M0, MSG_M0_FAN_ON3 | sto_no << 6); p->fan_status = 3; tem_alarm_status[sto_no] = 2; flag = 1; } else if (p->temperature < p->temperatureMIN) { sendMsgQueue (MSG_LED, MSG_LED_TEM_ON); //fs210上的灯 sendMsgQueue (MSG_M0, MSG_M0_FAN_OFF | sto_no << 6); sendMsgQueue (MSG_M0, MSG_M0_LED_ON | sto_no << 6);//MSG_M0 transfer to M0 p->fan_status = 0; tem_alarm_status[sto_no] = 1; flag = 1; } if (flag) { pthread_mutex_lock (&mutex_sms); if (sto_no == 1) dev_sms_cmd = SMS_TEM |SMS_STRNO1; else dev_sms_cmd = SMS_TEM |SMS_STRNO2; pthread_mutex_unlock (&mutex_sms); pthread_cond_signal (&cond_sms); flag = 0; #if 1 if (beep_status[sto_no] == 0) { printf("*****345beep*****"); beep_status[sto_no] = 1; p->buzzer_status = 1; //9-16 sendMsgQueue (MSG_M0, MSG_M0_BEEP_ON | sto_no << 6); p->buzzer_status=1; } if (a8_beep_status == 0) { a8_beep_status = 1; sendMsgQueue (MSG_BEEP, MSG_M0_BEEP_ON); } #endif } } else { if (p->temperature < p->temperatureMAX && p->temperature > p->temperatureMIN) { sendMsgQueue (MSG_LED, MSG_LED_TEM_OFF); sendMsgQueue (MSG_M0, MSG_M0_FAN_OFF | sto_no << 6); sendMsgQueue (MSG_M0, MSG_M0_LED_OFF | sto_no << 6); p->fan_status = 0; tem_alarm_status[sto_no] = 0; if (!storageAllgood (sto_no)) { beep_status[sto_no] = 0; sendMsgQueue (MSG_M0, MSG_M0_BEEP_OFF | sto_no << 6); a8_beep_status = 0; sendMsgQueue (MSG_BEEP, MSG_BEEP_OFF); } } } if (0 == hum_alarm_status[sto_no]) { if (p->humidity > p->humidityMAX) { sendMsgQueue (MSG_LED, MSG_LED_HUM_ON); sendMsgQueue (MSG_M0, MSG_M0_LED_ON | sto_no << 6);//MSG_M0 transfer to M0 sendMsgQueue (MSG_M0, MSG_M0_FAN_ON3 | sto_no << 6); p->fan_status = 3; hum_alarm_status[sto_no] = 2; flag = 1; } else if (p->humidity < p->humidityMIN) { sendMsgQueue (MSG_LED, MSG_LED_HUM_ON); sendMsgQueue (MSG_M0, MSG_M0_LED_ON | sto_no << 6);//MSG_M0 transfer to M0 sendMsgQueue (MSG_M0, MSG_M0_FAN_OFF | sto_no << 6); p->fan_status = 0; hum_alarm_status[sto_no] = 1; flag = 1; } if (flag) { pthread_mutex_lock (&mutex_sms); if (sto_no == 1) dev_sms_cmd = SMS_HUM |SMS_STRNO1; else dev_sms_cmd = SMS_HUM |SMS_STRNO2; pthread_mutex_unlock (&mutex_sms); pthread_cond_signal (&cond_sms); flag = 0; if (beep_status[sto_no] == 0) { beep_status[sto_no] = 1; sendMsgQueue (MSG_M0, MSG_M0_BEEP_ON | sto_no << 6); p->buzzer_status=1; } if (a8_beep_status == 0) { a8_beep_status = 1; sendMsgQueue (MSG_BEEP, MSG_M0_BEEP_ON); } } } else { if (p->humidity < p->humidityMAX && p->humidity > p->humidityMIN) { sendMsgQueue (MSG_LED, MSG_LED_HUM_OFF); sendMsgQueue (MSG_M0, MSG_M0_FAN_OFF | sto_no << 6); sendMsgQueue (MSG_M0, MSG_M0_LED_OFF | sto_no << 6); p->fan_status = 0; hum_alarm_status[sto_no] = 0; if (!storageAllgood (sto_no)) { beep_status[sto_no] = 0; p->buzzer_status = 0; sendMsgQueue (MSG_M0, MSG_M0_BEEP_OFF | sto_no << 6); a8_beep_status = 0; sendMsgQueue (MSG_BEEP, MSG_BEEP_OFF); } } } if (0 == ill_alarm_status[sto_no]) { if(p->illumination !=0) { if (p->illumination > p->illuminationMAX) { sendMsgQueue (MSG_LED, MSG_LED_ILL_ON); sendMsgQueue (MSG_M0, MSG_M0_LED_ON | sto_no << 6); p->led_status = 0; ill_alarm_status[sto_no] = 2; flag = 1; } else if (p->illumination < p->illuminationMIN) { sendMsgQueue (MSG_LED, MSG_LED_ILL_ON); sendMsgQueue (MSG_M0, MSG_M0_LED_ON | sto_no << 6);//MSG_M0 transfer to M0 p->led_status = 1; ill_alarm_status[sto_no] = 1; flag = 1; } if (flag) { pthread_mutex_lock (&mutex_sms); if (sto_no == 1) dev_sms_cmd = SMS_ILL |SMS_STRNO1; else dev_sms_cmd = SMS_ILL |SMS_STRNO2; pthread_mutex_unlock (&mutex_sms); pthread_cond_signal (&cond_sms); flag = 0; if (beep_status[sto_no] == 0) { beep_status[sto_no] = 1; sendMsgQueue (MSG_M0, MSG_M0_BEEP_ON | sto_no << 6); p->buzzer_status=1; } if (a8_beep_status == 0) { a8_beep_status = 1; sendMsgQueue (MSG_BEEP, MSG_M0_BEEP_ON); } } } else ; } else if (ill_alarm_status[sto_no]) { printf("esle ill_alaarm ****"); if (p->illumination < p->illuminationMAX && p->illumination > p->illuminationMIN) { printf("12324 esle ill off"); sendMsgQueue (MSG_LED, MSG_LED_ILL_OFF); sendMsgQueue (MSG_M0, MSG_M0_LED_OFF | sto_no << 6); p->led_status = 0; ill_alarm_status[sto_no] = 0; if (!storageAllgood (sto_no)) { beep_status[sto_no] = 0; p->buzzer_status = 0; sendMsgQueue (MSG_M0, MSG_M0_BEEP_OFF | sto_no << 6); a8_beep_status = 0; sendMsgQueue (MSG_BEEP, MSG_BEEP_OFF); } } } if (0 == tri_alarm_status[sto_no]) // 判断是否有人闯入 { #if 0 if (( p->y == 0 && p->z == 0) != 1) { if (p->x > 15 || p->y > 0 /*|| p->z > 90*/) { printf("*******gao***"); sendMsgQueue (MSG_LED, MSG_LED_TRI_ON); sendMsgQueue (MSG_M0, MSG_M0_LED_ON | sto_no << 6);//MSG_M0 transfer to M0 sendMsgQueue (MSG_CAMERA, 1); tri_alarm_status[sto_no] = 2; //sendMsgQueue (MSG_M0, MSG_M0_BEEP_ON | sto_no << 6); flag = 1; } else if (p->x < -15 || p->y < -30 /*|| p->z < 50*/) { printf("&&&&&&tai di&&&&&&&&&&&"); sendMsgQueue (MSG_M0, MSG_M0_LED_ON | sto_no << 6);//MSG_M0 transfer to M0 sendMsgQueue (MSG_LED, MSG_LED_TRI_ON); tri_alarm_status[sto_no] = 1; //sendMsgQueue (MSG_M0, MSG_M0_BEEP_ON | sto_no << 6); flag = 1; } if (flag) { printf("******BRM******"); pthread_mutex_lock (&mutex_sms); if (sto_no == 1) dev_sms_cmd = SMS_BRE |SMS_STRNO1; else dev_sms_cmd = SMS_BRE |SMS_STRNO2; pthread_mutex_unlock (&mutex_sms); pthread_cond_signal (&cond_sms); flag = 0; /* if (beep_status[sto_no] == 0) { beep_status[sto_no] = 1; sendMsgQueue (MSG_M0, MSG_M0_BEEP_ON | sto_no << 6); } if (a8_beep_status == 0) { printf("*******a8******"); a8_beep_status = 1; sendMsgQueue (MSG_BEEP, MSG_M0_BEEP_ON); }*/ if (beep_status[sto_no] == 0) { beep_status[sto_no] = 1; sendMsgQueue (MSG_M0, MSG_M0_BEEP_ON | sto_no << 6); p->buzzer_status=1; } if (a8_beep_status == 0) { a8_beep_status = 1; sendMsgQueue (MSG_BEEP, MSG_M0_BEEP_ON); } } // } 9_16 else if(tri_alarm_status[sto_no] == 1||tri_alarm_status[sto_no]==2) //三轴警报标志位不正常,那么看看当前三轴是否正常.如果正常则恢复警报标志位 { printf("*********else*********"); if (((p->x < 15) && (p->x > -15)) && ((p->y < 0) && (p->y > -34)) /*&& ((p->z < 90) && (p->z > 65))*/) { printf("*********sanzhu*********"); sendMsgQueue (MSG_M0, MSG_M0_LED_OFF | sto_no << 6); sendMsgQueue (MSG_LED, MSG_LED_TRI_OFF); tri_alarm_status[sto_no] = 0; /* if (storageAllgood (sto_no)) { beep_status[sto_no] = 0; sendMsgQueue (MSG_M0, MSG_M0_BEEP_OFF | sto_no << 6); a8_beep_status = 0; sendMsgQueue (MSG_BEEP, MSG_BEEP_OFF); } */ if (!storageAllgood (sto_no)) { beep_status[sto_no] = 0; p->buzzer_status = 0; sendMsgQueue (MSG_M0, MSG_M0_BEEP_OFF | sto_no << 6); a8_beep_status = 0; sendMsgQueue (MSG_BEEP, MSG_BEEP_OFF); } } } } else ; #endif } return 0; }
/* 监测数据是否异常 */ int checkEnv (int sto_no, struct storage_info *p) { char flag = 0; static char a8_beep_status = 0; printf("sto_no: %d\n", sto_no); if (0 == tem_alarm_status[sto_no-1])//温度警报标志正常,看看是否有不正常的温度 { if (p->temperature > p->temperatureMAX) { sendMsgQueue (MSG_LED, MSG_LED_ON); sendMsgQueue (MSG_M0, MSG_M0_FAN_ON3 | sto_no << 6); p->fan_status = 3; tem_alarm_status[sto_no-1] = 2; flag = 1; } else if (p->temperature < p->temperatureMIN) { sendMsgQueue (MSG_LED, MSG_LED_ON); sendMsgQueue (MSG_M0, MSG_M0_FAN_OFF | sto_no << 6); p->fan_status = 0; tem_alarm_status[sto_no-1] = 1; flag = 1; } if (flag) { pthread_mutex_lock (&mutex_sms); if (sto_no == 1) dev_sms_cmd = SMS_TEM |SMS_STRNO1; else dev_sms_cmd = SMS_TEM |SMS_STRNO2; pthread_mutex_unlock (&mutex_sms); pthread_cond_signal (&cond_sms); flag = 0; if (beep_status[sto_no-1] == 0) { beep_status[sto_no-1] = 1; sendMsgQueue (MSG_M0, MSG_M0_BEEP_ON | sto_no << 6); } if (a8_beep_status == 0) { a8_beep_status = 1; sendMsgQueue (MSG_BEEP, MSG_M0_BEEP_ON); } } } else //温度警报标志位不正常,那么看看当前的温度是否正常.如果正常则恢复警报标志位 { if (p->temperature < p->temperatureMAX && p->temperature > p->temperatureMIN) { sendMsgQueue (MSG_LED, MSG_LED_OFF); sendMsgQueue (MSG_M0, MSG_M0_FAN_OFF | sto_no << 6); p->fan_status = 0; tem_alarm_status[sto_no-1] = 0; if (storageAllgood (sto_no-1)) { beep_status[sto_no-1] = 0; sendMsgQueue (MSG_M0, MSG_M0_BEEP_OFF | sto_no << 6); a8_beep_status = 0; sendMsgQueue (MSG_BEEP, MSG_BEEP_OFF); } } } if (0 == hum_alarm_status[sto_no-1])//湿度,同上 { if (p->humidity > p->humidityMAX) { sendMsgQueue (MSG_LED, MSG_LED_ON); sendMsgQueue (MSG_M0, MSG_M0_FAN_ON3 | sto_no << 6); p->fan_status = 3; hum_alarm_status[sto_no-1] = 2; flag = 1; } else if (p->humidity < p->humidityMIN) { sendMsgQueue (MSG_LED, MSG_LED_ON); sendMsgQueue (MSG_M0, MSG_M0_FAN_OFF | sto_no << 6); p->fan_status = 0; hum_alarm_status[sto_no-1] = 1; flag = 1; } if (flag) { pthread_mutex_lock (&mutex_sms); if(sto_no == 1) dev_sms_cmd = SMS_HUM|SMS_STRNO1; else dev_sms_cmd = SMS_HUM|SMS_STRNO2; pthread_mutex_unlock (&mutex_sms); pthread_cond_signal (&cond_sms); flag = 0; if (beep_status[sto_no-1] == 0) { beep_status[sto_no-1] = 1; sendMsgQueue (MSG_M0, MSG_M0_BEEP_ON | sto_no << 6); } if (a8_beep_status == 0) { a8_beep_status = 1; sendMsgQueue (MSG_BEEP, MSG_M0_BEEP_ON); } } } else//湿度,同上 { if (p->humidity < p->humidityMAX && p->humidity > p->humidityMIN) { sendMsgQueue (MSG_LED, MSG_LED_OFF); sendMsgQueue (MSG_M0, MSG_M0_FAN_OFF | sto_no << 6); p->fan_status = 0; hum_alarm_status[sto_no-1] = 0; if (storageAllgood (sto_no-1)) { beep_status[sto_no-1] = 0; sendMsgQueue (MSG_M0, MSG_M0_BEEP_OFF | sto_no << 6); a8_beep_status = 0; sendMsgQueue (MSG_BEEP, MSG_BEEP_OFF); } } } if (0 == ill_alarm_status[sto_no-1])//光照标志 ,同上 { if (p->illumination > p->illuminationMAX) { sendMsgQueue (MSG_LED, MSG_LED_ON); sendMsgQueue (MSG_M0, MSG_M0_LED_OFF | sto_no << 6); p->led_status = 0; ill_alarm_status[sto_no-1] = 2; flag = 1; } else if (p->illumination < p->illuminationMIN) { sendMsgQueue (MSG_LED, MSG_LED_ON); sendMsgQueue (MSG_M0, MSG_M0_LED_ON | sto_no << 6); p->led_status = 1; ill_alarm_status[sto_no-1] = 1; flag = 1; } if (flag) { pthread_mutex_lock (&mutex_sms); if(sto_no == 1) dev_sms_cmd = SMS_ILL|SMS_STRNO1; else dev_sms_cmd = SMS_ILL|SMS_STRNO2; pthread_mutex_unlock (&mutex_sms); pthread_cond_signal (&cond_sms); flag = 0; if (beep_status[sto_no-1] == 0) { beep_status[sto_no-1] = 1; sendMsgQueue (MSG_M0, MSG_M0_BEEP_ON | sto_no << 6); } if (a8_beep_status == 0) { a8_beep_status = 1; sendMsgQueue (MSG_BEEP, MSG_M0_BEEP_ON); } } } else if (ill_alarm_status[sto_no-1])//光照,同上 { if (p->illumination < p->illuminationMAX && p->illumination > p->illuminationMIN) { sendMsgQueue (MSG_LED, MSG_LED_OFF); sendMsgQueue (MSG_M0, MSG_M0_LED_OFF | sto_no << 6); p->led_status = 0; ill_alarm_status[sto_no-1] = 0; if (storageAllgood (sto_no-1)) { beep_status[sto_no-1] = 0; sendMsgQueue (MSG_M0, MSG_M0_BEEP_OFF | sto_no << 6); a8_beep_status = 0; sendMsgQueue (MSG_BEEP, MSG_BEEP_OFF); } } } if (0 == tri_alarm_status[sto_no-1]) // 判断是否有人闯入 { if (p->x > THRESHOD || p->y > THRESHOD || p->z >THRESHOD) { sendMsgQueue (MSG_LED, MSG_LED_ON); sendMsgQueue (MSG_CAMERA, 1); //sendMsgQueue (MSG_M0, MSG_M0_BEEP_ON | sto_no << 6); flag = 1; } else if (p->x < -THRESHOD || p->y < -THRESHOD || p->z < -THRESHOD) { sendMsgQueue (MSG_LED, MSG_LED_ON); //sendMsgQueue (MSG_M0, MSG_M0_BEEP_ON | sto_no << 6); flag = 1; } if (flag) { pthread_mutex_lock (&mutex_sms); if (sto_no == 1) dev_sms_cmd = SMS_BRE |SMS_STRNO1; else dev_sms_cmd = SMS_BRE |SMS_STRNO2; pthread_mutex_unlock (&mutex_sms); pthread_cond_signal (&cond_sms); flag = 0; if (beep_status[sto_no-1] == 0) { beep_status[sto_no-1] = 1; sendMsgQueue (MSG_M0, MSG_M0_BEEP_ON | sto_no << 6); } if (a8_beep_status == 0) { a8_beep_status = 1; sendMsgQueue (MSG_BEEP, MSG_M0_BEEP_ON); } } } else //三轴警报标志位不正常,那么看看当前三轴是否正常.如果正常则恢复警报标志位 { if (((p->x < THRESHOD) && (p->x > -THRESHOD)) && ((p->y < THRESHOD) && (p->y > -THRESHOD)) && ((p->z < THRESHOD) && (p->z > -THRESHOD))) { sendMsgQueue (MSG_LED, MSG_LED_OFF); //sendMsgQueue (MSG_M0, MSG_M0_FAN_OFF | sto_no << 6); tri_alarm_status[sto_no-1] = 0; if (storageAllgood (sto_no-1)) { beep_status[sto_no-1] = 0; sendMsgQueue (MSG_M0, MSG_M0_BEEP_OFF | sto_no << 6); a8_beep_status = 0; sendMsgQueue (MSG_BEEP, MSG_BEEP_OFF); } } } return 0; }