| | |
| | | |
| | | /************¸÷ÐͺÅÊý¾Ý½âÎö*************************/ |
| | | //modbusÐÒé03¶ÁÈ¡ÏìÓ¦Êý¾Ýͳһ¼ì²é |
| | | ErrorStatus modbus03AnswerCheck(uint8_t * buf_p,uint8_t slaveAddress) |
| | | ErrorStatus modbus03AnswerCheck(uint8_t * buf_p,uint8_t slaveAddress,uint8_t *Byte_Num) |
| | | { |
| | | uint16_t crc; |
| | | uint8_t dataNum; |
| | | // uint8_t dataNum; |
| | | //Ö÷Òª¼ì²éCRC£¬¿¼ÂÇ´Ó»úµØÖ·ºÍ¹¦ÄÜÂëµÄ¼ì²é |
| | | if((slaveAddress!=buf_p[0])||(buf_p[1]!=0x03)) |
| | | return FAIL; |
| | | |
| | | |
| | | dataNum = buf_p[2]; |
| | | if(dataNum>250) |
| | | *Byte_Num = buf_p[2]; |
| | | if(*Byte_Num>250) |
| | | return FAIL; |
| | | crc = buf_p[3 + dataNum +1 ]; |
| | | crc = (crc<<8) +buf_p[3 + dataNum ]; |
| | | if(crc != usMBCRC16(0xFFFF,buf_p,3 + dataNum)) |
| | | crc = buf_p[3 + *Byte_Num +1 ]; |
| | | crc = (crc<<8) +buf_p[3 + *Byte_Num ]; |
| | | if(crc != usMBCRC16(0xFFFF,buf_p,3 + *Byte_Num)) |
| | | return FAIL; |
| | | |
| | | return PASS; |
| | |
| | | uint32_t u32temp_zs; |
| | | uint16_t u16temp_xs; |
| | | uint8_t status[12]; |
| | | uint8_t Byte_Num = 0; |
| | | |
| | | if(modbus03AnswerCheck(buf_p,slaveAddress) == FAIL) |
| | | if(modbus03AnswerCheck(buf_p,slaveAddress,&Byte_Num) == FAIL) |
| | | return FAIL; |
| | | |
| | | buf_p+=3; |
| | | arrayA_2_arrayB(buf_p, (uint8_t *)&flow_meter_data_g.time_BCD.year, 6, LITTLE_ENDIAN) ; |
| | | |
| | | arrayA_2_arrayB(buf_p + 6 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 10 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ; |
| | | flow_meter_data_g.cumulate_s.forward_cumulate_wc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs); |
| | | arrayA_2_arrayB(buf_p + 12 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 16 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ; |
| | | flow_meter_data_g.cumulate_s.forward_cumulate_sc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs); |
| | | if(Byte_Num >= 34){ |
| | | buf_p+=3; |
| | | arrayA_2_arrayB(buf_p, (uint8_t *)&flow_meter_data_g.time_BCD.year, 6, LITTLE_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 6 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 10 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ; |
| | | flow_meter_data_g.cumulate_s.forward_cumulate_wc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs); |
| | | arrayA_2_arrayB(buf_p + 12 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 16 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ; |
| | | flow_meter_data_g.cumulate_s.forward_cumulate_sc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs); |
| | | |
| | | arrayA_2_arrayB(buf_p + 18 , (uint8_t *)&flow_meter_data_g.instant_wc, 4, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 22 , (uint8_t *)&flow_meter_data_g.instant_sc, 4, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 26 , (uint8_t *)&flow_meter_data_g.temperature, 4, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 30, (uint8_t *)&flow_meter_data_g.pressure, 4, BIG_ENDIAN) ; |
| | | }else |
| | | { |
| | | return FAIL; |
| | | } |
| | | |
| | | arrayA_2_arrayB(buf_p + 18 , (uint8_t *)&flow_meter_data_g.instant_wc, 4, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 22 , (uint8_t *)&flow_meter_data_g.instant_sc, 4, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 26 , (uint8_t *)&flow_meter_data_g.temperature, 4, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 30, (uint8_t *)&flow_meter_data_g.pressure, 4, BIG_ENDIAN) ; |
| | | |
| | | arrayA_2_arrayB(buf_p + 34 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 38 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ; |
| | | flow_meter_data_g.cumulate_s.err_forward_cumulate_wc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs); |
| | | |
| | | arrayA_2_arrayB(buf_p + 40 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 44 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ; |
| | | flow_meter_data_g.cumulate_s.err_forward_cumulate_sc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs); |
| | | |
| | | arrayA_2_arrayB(buf_p + 70 , (uint8_t *)&flow_meter_data_g.cumulate_s.cal_cumulate_wc, 8, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 78 , (uint8_t *)&flow_meter_data_g.cumulate_s.cal_cumulate_sc, 8, BIG_ENDIAN) ; |
| | | |
| | | /*****״̬×Ö¡¢±¨¾¯×Ö½âÎö£¬°´Á÷Á¿¼ÆÐÒéÓ³É䵽˼ÖþµÄ¶¨Òå±í******/ |
| | | arrayA_2_arrayB(buf_p + 86 , status, 8, LITTLE_ENDIAN) ; |
| | | if(Byte_Num >= 98){ |
| | | arrayA_2_arrayB(buf_p + 34 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 38 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ; |
| | | flow_meter_data_g.cumulate_s.err_forward_cumulate_wc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs); |
| | | |
| | | arrayA_2_arrayB(buf_p + 40 , (uint8_t *)&u32temp_zs, 4, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 44 , (uint8_t *)&u16temp_xs, 2, BIG_ENDIAN) ; |
| | | flow_meter_data_g.cumulate_s.err_forward_cumulate_sc = ZS_2XS_2_DOUBLE(u32temp_zs,u16temp_xs); |
| | | |
| | | arrayA_2_arrayB(buf_p + 70 , (uint8_t *)&flow_meter_data_g.cumulate_s.cal_cumulate_wc, 8, BIG_ENDIAN) ; |
| | | arrayA_2_arrayB(buf_p + 78 , (uint8_t *)&flow_meter_data_g.cumulate_s.cal_cumulate_sc, 8, BIG_ENDIAN) ; |
| | | |
| | | /*****״̬×Ö¡¢±¨¾¯×Ö½âÎö£¬°´Á÷Á¿¼ÆÐÒéÓ³É䵽˼ÖþµÄ¶¨Òå±í******/ |
| | | arrayA_2_arrayB(buf_p + 86 , status, 12, LITTLE_ENDIAN) ; |
| | | |
| | | |
| | | }else{ |
| | | flow_meter_data_g.cumulate_s.err_forward_cumulate_wc = 0; |
| | | flow_meter_data_g.cumulate_s.err_forward_cumulate_sc = 0; |
| | | flow_meter_data_g.cumulate_s.cal_cumulate_wc = 0; |
| | | flow_meter_data_g.cumulate_s.cal_cumulate_sc = 0; |
| | | } |
| | | |
| | | |
| | | |
| | |
| | | uint32_t u32temp_zs; |
| | | // uint16_t u16temp_xs; |
| | | // uint8_t status[12]; |
| | | uint8_t Byte_Num = 0; |
| | | |
| | | if(modbus03AnswerCheck(buf_p,slaveAddress) == FAIL) |
| | | if(modbus03AnswerCheck(buf_p,slaveAddress,&Byte_Num) == FAIL) |
| | | return FAIL; |
| | | |
| | | buf_p+=3; |
| | | if(rs485_com_ctrl_pata_l.modbus_step_status ==MODBUS_STEP1) |
| | | if((rs485_com_ctrl_pata_l.modbus_step_status ==MODBUS_STEP1)&&(Byte_Num >=8)) |
| | | { |
| | | (*(uint8_t *)(&u32temp_zs))=buf_p[1]; |
| | | (*((uint8_t *)(&u32temp_zs) + 1))=buf_p[0]; |
| | |
| | | (*((uint8_t *)(&u32temp_zs) + 3))=buf_p[6]; |
| | | flow_meter_data_g.cumulate_s.forward_cumulate_sc = u32temp_zs; |
| | | |
| | | }else if(rs485_com_ctrl_pata_l.modbus_step_status ==MODBUS_STEP2) |
| | | }else if((rs485_com_ctrl_pata_l.modbus_step_status ==MODBUS_STEP2)&&(Byte_Num >=8)) |
| | | { |
| | | (*(uint8_t *)(&flow_meter_data_g.pressure))=buf_p[1]; |
| | | (*((uint8_t *)(&flow_meter_data_g.pressure) + 1))=buf_p[0]; |
| | |
| | | (*((uint8_t *)(&flow_meter_data_g.temperature) + 2))=buf_p[7]; |
| | | (*((uint8_t *)(&flow_meter_data_g.temperature) + 3))=buf_p[6]; |
| | | |
| | | }else if(rs485_com_ctrl_pata_l.modbus_step_status ==MODBUS_STEP3) |
| | | }else if((rs485_com_ctrl_pata_l.modbus_step_status ==MODBUS_STEP3)&&(Byte_Num >=8)) |
| | | { |
| | | (*(uint8_t *)(&flow_meter_data_g.instant_wc))=buf_p[1]; |
| | | (*((uint8_t *)(&flow_meter_data_g.instant_wc) + 1))=buf_p[0]; |