BOOL WEIGHT_Process(TICK timer, BYTE * argument)
{
DWORD Data;
static TICK tick = 0;
static BYTE cyclic = 0;
static BYTE flag_overflow = 0;
static BYTE flag_underflow = 1;
static LONG_VAL lWeight;
static long lTempWeight, lTempWeight2;
WORD_VAL wvDCID;
BYTE i, j, flag, bWeight[4];
static BYTE measure = 0;
long addr;
if((TickGetDiff(TickGet(), tick) >= timer) && AppFlag.bits.temp && !ModemGsm.Signal.Control.Process) tick = TickGet();
else return TRUE;
if((argument[0] && argument[1] && !argument[2]) || (argument[0] && argument[1])){
DelayMs(2000);
if(cyclic == 0){
#if defined(__SPI_AD77xx__)
if(SPI_AD77xx_ReadData(SPI_AD77xx_PORT_1, &Data)){
#else
if(HX711_ReadData(SPI_AD77xx_PORT_1, &Data)){
#endif
#if defined SYSTEM_DEBUG
sprintf(bTemp, "\r\nprocess segments A = %ld \r\n", Data);
UART_PutData(PRINT_TEXT, bTemp, strlen(bTemp));
#endif
#if defined OCWB_GW
if(Data & 0x800000) flag = 1;
else flag = 0;
Data = (DWORD)((long)(Data&0xff7fffff) + Weight[0].CalibZero);
if(flag && !(Data & 0x800000)) Data = 0;
else if(!flag && (Data & 0x800000)) Data = 0;
Data = Data&0xff7fffff;
#endif
if(CtmuTemperature[2].Error) lWeight.Val = Weight[0].CalibTemp;
else lWeight.Val = CtmuTemperature[2].Value;
lTempWeight2 = (long)round((double)((Weight[0].CalibTemp - lWeight.Val)/100.0 * Weight[0].TempConst));
lWeight.Val = (long) (((double) Data * 1000.0) / (double)Weight[0].Calib) + lTempWeight2 ; //1g
if((lWeight.Val - 10) < lTempWeight2) lWeight.Val = 0;
lWeight.Val = lWeight.Val - Weight[0].Tare;
if(lTempWeight < (lWeight.Val - 40L) || lTempWeight > (lWeight.Val + 40L)){
lTempWeight = lWeight.Val;
return TRUE;
}
Weight[0].Value = lWeight.Val;
// if(Weight[0].Value > Weight[0].Max) Weight[0].Value = Weight[0].Max;
measure |= 0x01;
if(WEIGHT_NumberActive == 2) cyclic = 1;
}
}
#if defined(WEIGHT2_ENABLE)
if(cyclic == 1 && (WEIGHT_NumberActive == 2 || WEIGHT_NumberActive == 3)){
#if defined(__SPI_AD77xx__)
if(SPI_AD77xx_ReadData(SPI_AD77xx_PORT_2, &Data)){
#else
if(HX711_ReadData(SPI_AD77xx_PORT_2, &Data)){
#endif
#if defined SYSTEM_DEBUG
sprintf(bTemp, "\r\nprocess segments B = %ld \r\n", Data);
UART_PutData(PRINT_TEXT, bTemp, strlen(bTemp));
#endif
#if defined OCWB_GW
if(Data & 0x800000) flag = 1;
else flag = 0;
Data = (DWORD)((long)(Data&0xff7fffff) + Weight[1].CalibZero);
if(flag && !(Data & 0x800000)) Data = 0;
else if(!flag && (Data & 0x800000)) Data = 0;
Data = Data&0xff7fffff;
#endif
if(CtmuTemperature[2].Error) lWeight.Val = Weight[1].CalibTemp;
else lWeight.Val = CtmuTemperature[2].Value;
lTempWeight2 = (long)round((double)((Weight[1].CalibTemp - lWeight.Val)/100.0 * Weight[1].TempConst));
lWeight.Val = (long) (((float) Data * 1000.0) / Weight[1].Calib) - Weight[1].Tare + lTempWeight2 ; //1g
if(lTempWeight < (lWeight.Val - 40L) || lTempWeight > (lWeight.Val + 40L)){
lTempWeight = lWeight.Val;
return TRUE;
}
Weight[1].Value = lWeight.Val;
// if(Weight[1].Value > Weight[1].Max) Weight[1].Value = Weight[1].Max;
measure |= 0x01;
if(WEIGHT_NumberActive == 3) cyclic = 2;
else cyclic = 0;
}
}
#endif
#if defined(WEIGHT3_ENABLE)
if(cyclic == 2 && WEIGHT_NumberActive == 3){
#if defined(__SPI_AD77xx__)
if(SPI_AD77xx_ReadData(SPI_AD77xx_PORT_3, &Data)){
#else
if(HX711_ReadData(SPI_AD77xx_PORT_1, &Data)){
#endif
if(CtmuTemperature[2].Error) lWeight.Val = Weight[2].CalibTemp;
else lWeight.Val = CtmuTemperature[2].Value;
lTempWeight2 = (long)round((double)((Weight[2].CalibTemp - lWeight.Val)/100.0 * Weight[2].TempConst));
lWeight.Val = (long) (((float) Data * 1000.0) / Weight[2].Calib) - Weight[2].Tare + lTempWeight2 ; //1g
if(lTempWeight < (lWeight.Val - 40L) || lTempWeight > (lWeight.Val + 40L)){
lTempWeight = lWeight.Val;
return TRUE;
}
Weight[2].Value = lWeight.Val;
if(Weight[2].Value > Weight[2].Max) Weight[2].Value = Weight[2].Max;
measure |= 0x01;
cyclic = 0;
}
}
#endif
}
if(argument[0] && argument[1]){
if(measure == 0x01) WEIGHT_Flag = TRUE;
if( WEIGHT_Flag ){
for(i=0; i<WEIGHT_NumberActive; i++){
if(i == 0){
wvDCID.byte.HB = DCID[SPI_AD77xx_ELEMENT_1][0];
wvDCID.byte.LB = DCID[SPI_AD77xx_ELEMENT_1][1];
}
#if defined(WEIGHT2_ENABLE)
else if(i == 1){
wvDCID.byte.HB = DCID[SPI_AD77xx_ELEMENT_2][0];
wvDCID.byte.LB = DCID[SPI_AD77xx_ELEMENT_2][1];
}
#endif
#if defined(WEIGHT3_ENABLE)
else if(i == 2){
wvDCID.byte.HB = DCID[SPI_AD77xx_ELEMENT_3][0];
wvDCID.byte.LB = DCID[SPI_AD77xx_ELEMENT_3][1];
}
#endif
lWeight.Val = Weight[i].Value;
bWeight[0] = lWeight.byte.MB;
bWeight[1] = lWeight.byte.UB;
bWeight[2] = lWeight.byte.HB;
bWeight[3] = lWeight.byte.LB;
for(j=0; j < 2; j++){
if(Weight[i].EventState[j] == WEIGHT_NO_INIT){
if(Weight[i].Value > Weight[i].RangeMax[j]) Weight[i].EventState[j] = WEIGHT_OVER;
else Weight[i].EventState[j] = WEIGHT_UNDER;
}
else if(Weight[i].EventState[j] == WEIGHT_UNDER){
if(Weight[i].Value > Weight[i].RangeMax[j]){
Weight[i].EventState[j] = WEIGHT_OVER;
API_PutEvent(wvDCID.Val, AE_WEIGHT_OVER, bWeight, 4);
}
}
else if(Weight[i].EventState[j] == WEIGHT_OVER){
if(Weight[i].Value < Weight[i].RangeMin[j]){
Weight[i].EventState[j] = WEIGHT_UNDER;
API_PutEvent(wvDCID.Val, AE_WEIGHT_UNDER, bWeight, 4);
}
}
}
}
AppFlag.bits.event_weight_ok = TRUE;
}
}
return TRUE;
}