#include "ReadDeviceData.h" #include "math.h" #include "para.h" #include "e2p.h" #include "ex_rtc.h" #include "data_write_local.h" #include "1gprs.h" #include "1billing.h" #include "1ValveControl.h" #include "mbcrc.h" #include "devicegpioinit.h" #include "rs485.h" #include "1powermanage.h" FRAME LLJ_Msg; MODBUS_LLJ ModbusDlg; PARM_ACCESS parmAccess; uint8_t ddr_index_2,Last_Data_DDR=0,NOW_Data_DDR=0; uint32_t NumDataStored; uint8_t DataStoredFlag; uint8_t Beginflag; void LLJ_sendFrame(u8 slaveAddress,u16 dataAddress,u16 readDataNum) { u16 crc; u8 sendFrame[8]; LLJ_Msg.HandlePtr = LLJ_Msg.WritePtr ; //Çå¿Õ½ÓÊÕ»º³åÇø sendFrame[0] = slaveAddress; //´Ó»úµØÖ· sendFrame[1] = 0x03; //¹¦ÄܺŠsendFrame[2] = dataAddress>>8; //Êý¾ÝµØÖ·¸ß8λ sendFrame[3] = dataAddress&0x00FF; //Êý¾ÝµØÖ·µÍ8λ sendFrame[4] = readDataNum>>8; //¶ÁÈ¡Êý¾Ý¸öÊý¸ß8λ sendFrame[5] = readDataNum&0x00FF; //¶ÁÈ¡Êý¾Ý¸öÊýµÍ8λ crc = usMBCRC16(0xFFFF,sendFrame,6); sendFrame[6] = crc&0x00FF; //CRC16УÑé¸ß8λ sendFrame[7] = crc>>8; //CRC16УÑéµÍ8λ RS485_Send_Data(sendFrame,8); } void Pressure_alarm() { uint32 Pressure_addr; if((LLJ_data_g.Pressure < system_alarm.fPressureLowLimit)||(LLJ_data_g.Pressure > system_alarm.fPressureHighLimit)) { Pressure_addr = FIRST_ALARM_RECORD_ADDR + (uint32)system_alarm.u16AlarmStoreNum * ALARM_RECORD_LENGTH; FM25V02_data_write(calendar.year&0x00FF, Pressure_addr ); FM25V02_data_write(calendar.month&0xFF, Pressure_addr + 1 ); FM25V02_data_write(calendar.date&0xFF, Pressure_addr + 2 ); FM25V02_data_write(calendar.hour&0xFF, Pressure_addr + 3 ); FM25V02_data_write(calendar.min&0xFF, Pressure_addr + 4 ); FM25V02_data_write(calendar.sec&0xFF, Pressure_addr + 5 ); FM25V02_data_write_uint16( Pressure_addr + 6 ,PRESSURE_ABNORMAL_ALARM_CODE); system_alarm.alarm_l ++; system_alarm.u16AlarmStoreNum ++; if(system_alarm.u16AlarmStoreNum >= ALARM_RECORD_NUM) { system_alarm.u16AlarmStoreNum = 0; system_alarm.u8AlarmStoreFullFlag = 1; FM25V02_data_write(system_alarm.u8AlarmStoreFullFlag,ALARM_RECORD_FULL_FLAG_ADDR); } FM25V02_data_write_uint16(CURRENT_ALARM_RECORD_NUM_ADDR,system_alarm.u16AlarmStoreNum); system_alarm.alarm_PRE = 1; //GPRS_sendFlag = 1; //ζÈÒì³££¬Ö±½Ó·¢Ë;¯±¨ } else { system_alarm.alarm_PRE = 0; } } void Temperature_alarm() { uint32 Temperature_addr; if((LLJ_data_g.Temperature system_alarm.fTempratureHighLimit) ) { Temperature_addr = FIRST_ALARM_RECORD_ADDR + (uint32)system_alarm.u16AlarmStoreNum * ALARM_RECORD_LENGTH; FM25V02_data_write(calendar.year&0x00FF, Temperature_addr ); FM25V02_data_write(calendar.month&0xFF, Temperature_addr + 1 ); FM25V02_data_write(calendar.date&0xFF, Temperature_addr + 2 ); FM25V02_data_write(calendar.hour&0xFF, Temperature_addr + 3 ); FM25V02_data_write(calendar.min&0xFF, Temperature_addr + 4 ); FM25V02_data_write(calendar.sec&0xFF, Temperature_addr + 5 ); FM25V02_data_write_uint16( Temperature_addr + 6 ,TEMPERATURE_ABNORMAL_ALARM_CODE); system_alarm.alarm_l ++; system_alarm.u16AlarmStoreNum ++; if(system_alarm.u16AlarmStoreNum >= ALARM_RECORD_NUM) { system_alarm.u16AlarmStoreNum = 0; system_alarm.u8AlarmStoreFullFlag = 1; FM25V02_data_write(system_alarm.u8AlarmStoreFullFlag,ALARM_RECORD_FULL_FLAG_ADDR); } FM25V02_data_write_uint16(CURRENT_ALARM_RECORD_NUM_ADDR,system_alarm.u16AlarmStoreNum); system_alarm.alarm_TEM = 1; //GPRS_sendFlag = 1; //ζÈÒì³££¬Ö±½Ó·¢Ë;¯±¨ } else { system_alarm.alarm_TEM = 0; } } uint8_t LLJ_ModbusHandle( uint16_t address ) { u16 crc; unsigned char retflag = 0 ; unsigned short i ; unsigned char temp; float Temp; int i32Temperature; int i32Pressure; int i32SC_instant; int i32WC_instant; while(1) { temp = LLJ_Msg.WritePtr ; delay_ms(10); if(temp == LLJ_Msg.WritePtr) { break; } } LLJ_Msg.TempPtr = LLJ_Msg.HandlePtr ; //¼Ç¼´¦ÀíÖ¸ÕëµÄλÖ㬿ªÊ¼·ÖÎöÖ®ºóµÄÊý¾Ý LLJ_Msg.NewLen = (LLJ_Msg.WritePtr - LLJ_Msg.HandlePtr) & LLJRXDBOUND ; //ÐÂÊÕµ½µÄÊý¾Ý³¤¶È if(LLJ_Msg.NewLen > 0x02) //½ÓÊÕ»º´æÇøÄÚÓÐÊý¾Ý { LLJ_Msg.TempPtr = LLJ_Msg.HandlePtr ; //¼Ç¼´¦ÀíÖ¸ÕëµÄλÖ㬿ªÊ¼·ÖÎöÖ®ºóµÄÊý¾Ý memset((char *)LLJ_Msg.HandBuff,0,sizeof(LLJ_Msg.HandBuff)); for(i=0;i= NumStoredLength) { NumDataStored = 0; DataStoredFlag =1; FM25V02_data_write(DataStoredFlag,DataStoredFlag_Addr); } FM25V02_data_write_uint16(NumDataStored_Addr,NumDataStored); retflag = 0x01; LLJ_Msg.HandlePtr = (LLJ_Msg.HandlePtr + LLJ_Msg.NewLen) & LLJRXDBOUND ; ModbusDlg.RepeadTime = 0 ; ModbusDlg.RepeadNum = REPEATNUM ; ModbusDlg.HandleStep = MODBUS_WAIT; memset(LLJ_Msg.UartBuff,0,sizeof(LLJ_Msg.UartBuff)); memset(LLJ_Msg.HandBuff,0,sizeof(LLJ_Msg.HandBuff)); LLJ_Msg.WritePtr=0; LLJ_Msg.HandlePtr=0; Beginflag = 0; FirstTimeRunFlag = 0; system_alarm.alarm_Sample = 0x00; system_alarm.u8ReadSuccessfullyTimes ++; system_alarm.u8ReadfailedTimes = 0; } } else if(address==parmAccess.u32VbTAddr) { if(parmAccess.decoding_Type == 5) { if(parmAccess.u16MeterTypeCode==SIZHUMODBUS1) { (*(uint8_t *)(&LLJ_data_g.SC_Accumulation_long))=LLJ_Msg.HandBuff[4]; (*((uint8_t *)(&LLJ_data_g.SC_Accumulation_long) + 1))=LLJ_Msg.HandBuff[3]; (*((uint8_t *)(&LLJ_data_g.SC_Accumulation_long) + 2))=LLJ_Msg.HandBuff[6]; (*((uint8_t *)(&LLJ_data_g.SC_Accumulation_long) + 3))=LLJ_Msg.HandBuff[5]; } else { (*(uint8_t *)(&LLJ_data_g.SC_Accumulation))=LLJ_Msg.HandBuff[4]; (*((uint8_t *)(&LLJ_data_g.SC_Accumulation) + 1))=LLJ_Msg.HandBuff[3]; (*((uint8_t *)(&LLJ_data_g.SC_Accumulation) + 2))=LLJ_Msg.HandBuff[6]; (*((uint8_t *)(&LLJ_data_g.SC_Accumulation) + 3))=LLJ_Msg.HandBuff[5]; LLJ_data_g.SC_Accumulation_long = LLJ_data_g.SC_Accumulation; } } else{} if(parmAccess.u16MeterTypeCode!=TIANXINMODBUS) { FM25V02_data_write_uint32_WRCheck(SCACC_addr + 4*NumDataStored, LLJ_data_g.SC_Accumulation_long); ModbusDlg.dataAddress = parmAccess.u32PMESAddr; if(parmAccess.Vbt_Flag) { ModbusDlg.dataAddress = parmAccess.u32VbT2Addr; } retflag = 0x01; LLJ_Msg.HandlePtr = (LLJ_Msg.HandlePtr + LLJ_Msg.NewLen) & LLJRXDBOUND ; } else { FM25V02_data_write_uint32(WCACC_addr + 4*NumDataStored, LLJ_data_g.WC_Accumulation_long); FM25V02_data_write_uint32_WRCheck(SCACC_addr + 4*NumDataStored, LLJ_data_g.SC_Accumulation_long); FM25V02_data_write_float(PRE_addr + 4*NumDataStored, LLJ_data_g.Pressure); FM25V02_data_write_float(TEM_addr + 4*NumDataStored, LLJ_data_g.Temperature); FM25V02_data_write_float(WCINS_addr + 4*NumDataStored, LLJ_data_g.WC_instant); FM25V02_data_write_float(SCINS_addr + 4*NumDataStored, LLJ_data_g.SC_instant); Pressure_alarm(); Temperature_alarm(); ddr_index_2 ++; NumDataStored ++; if(NumDataStored >= NumStoredLength) { NumDataStored = 0; DataStoredFlag =1; FM25V02_data_write(DataStoredFlag,DataStoredFlag_Addr); } FM25V02_data_write_uint16(NumDataStored_Addr,NumDataStored); retflag = 0x01; LLJ_Msg.HandlePtr = (LLJ_Msg.HandlePtr + LLJ_Msg.NewLen) & LLJRXDBOUND ; ModbusDlg.RepeadTime = 0 ; ModbusDlg.RepeadNum = REPEATNUM ; ModbusDlg.HandleStep = MODBUS_WAIT; memset(LLJ_Msg.UartBuff,0,sizeof(LLJ_Msg.UartBuff)); memset(LLJ_Msg.HandBuff,0,sizeof(LLJ_Msg.HandBuff)); LLJ_Msg.WritePtr=0; LLJ_Msg.HandlePtr=0; Beginflag = 0; FirstTimeRunFlag = 0; system_alarm.alarm_Sample = 0x00; system_alarm.u8ReadSuccessfullyTimes ++; system_alarm.u8ReadfailedTimes = 0; } } else if(address==parmAccess.u32VbT2Addr && parmAccess.Vbt_Flag == 1) { FM25V02_data_write_uint32_WRCheck(SCACC_addr + 4*NumDataStored, LLJ_data_g.SC_Accumulation_long); ModbusDlg.dataAddress = parmAccess.u32PMESAddr; retflag = 0x01; LLJ_Msg.HandlePtr = (LLJ_Msg.HandlePtr + LLJ_Msg.NewLen) & LLJRXDBOUND ; } else if(address==parmAccess.u32PMESAddr) { if(parmAccess.decoding_Type == 5) { if(parmAccess.u16MeterTypeCode==SIZHUMODBUS1) { (*(uint8_t *)(&LLJ_data_g.Pressure))=LLJ_Msg.HandBuff[4]; (*((uint8_t *)(&LLJ_data_g.Pressure) + 1))=LLJ_Msg.HandBuff[3]; (*((uint8_t *)(&LLJ_data_g.Pressure) + 2))=LLJ_Msg.HandBuff[6]; (*((uint8_t *)(&LLJ_data_g.Pressure) + 3))=LLJ_Msg.HandBuff[5]; } else { (*(uint8_t *)(&LLJ_data_g.Pressure))=LLJ_Msg.HandBuff[4]; (*((uint8_t *)(&LLJ_data_g.Pressure) + 1))=LLJ_Msg.HandBuff[3]; (*((uint8_t *)(&LLJ_data_g.Pressure) + 2))=LLJ_Msg.HandBuff[6]; (*((uint8_t *)(&LLJ_data_g.Pressure) + 3))=LLJ_Msg.HandBuff[5]; } } else{} FM25V02_data_write_float(PRE_addr + 4*NumDataStored, LLJ_data_g.Pressure); Pressure_alarm(); ModbusDlg.dataAddress = parmAccess.u32TMESAddr; retflag = 0x01; LLJ_Msg.HandlePtr = (LLJ_Msg.HandlePtr + LLJ_Msg.NewLen) & LLJRXDBOUND ; } else if(address==parmAccess.u32TMESAddr) { if(parmAccess.decoding_Type == 5) { if(parmAccess.u16MeterTypeCode==SIZHUMODBUS1) { (*(uint8_t *)(&LLJ_data_g.Temperature))=LLJ_Msg.HandBuff[4]; (*((uint8_t *)(&LLJ_data_g.Temperature) + 1))=LLJ_Msg.HandBuff[3]; (*((uint8_t *)(&LLJ_data_g.Temperature) + 2))=LLJ_Msg.HandBuff[6]; (*((uint8_t *)(&LLJ_data_g.Temperature) + 3))=LLJ_Msg.HandBuff[5]; } else { (*(uint8_t *)(&LLJ_data_g.Temperature))=LLJ_Msg.HandBuff[4]; (*((uint8_t *)(&LLJ_data_g.Temperature) + 1))=LLJ_Msg.HandBuff[3]; (*((uint8_t *)(&LLJ_data_g.Temperature) + 2))=LLJ_Msg.HandBuff[6]; (*((uint8_t *)(&LLJ_data_g.Temperature) + 3))=LLJ_Msg.HandBuff[5]; } } else{} FM25V02_data_write_float(TEM_addr + 4*NumDataStored, LLJ_data_g.Temperature); Temperature_alarm(); if(parmAccess.Q_permission == 1) { ModbusDlg.dataAddress = parmAccess.u32QAddr; } else { ModbusDlg.dataAddress = parmAccess.u32QbAddr; } retflag = 0x01; LLJ_Msg.HandlePtr = (LLJ_Msg.HandlePtr + LLJ_Msg.NewLen) & LLJRXDBOUND ; } else if(address==parmAccess.u32QAddr) { if(parmAccess.decoding_Type == 5) { if(parmAccess.u16MeterTypeCode==SIZHUMODBUS1) { (*(uint8_t *)(&LLJ_data_g.WC_instant))=LLJ_Msg.HandBuff[4]; (*((uint8_t *)(&LLJ_data_g.WC_instant) + 1))=LLJ_Msg.HandBuff[3]; (*((uint8_t *)(&LLJ_data_g.WC_instant) + 2))=LLJ_Msg.HandBuff[6]; (*((uint8_t *)(&LLJ_data_g.WC_instant) + 3))=LLJ_Msg.HandBuff[5]; } else { (*(uint8_t *)(&LLJ_data_g.WC_instant))=LLJ_Msg.HandBuff[4]; (*((uint8_t *)(&LLJ_data_g.WC_instant) + 1))=LLJ_Msg.HandBuff[3]; (*((uint8_t *)(&LLJ_data_g.WC_instant) + 2))=LLJ_Msg.HandBuff[6]; (*((uint8_t *)(&LLJ_data_g.WC_instant) + 3))=LLJ_Msg.HandBuff[5]; } } else{} FM25V02_data_write_float(WCINS_addr + 4*NumDataStored, LLJ_data_g.WC_instant); if(parmAccess.Qb_permission == 1) { ModbusDlg.dataAddress = parmAccess.u32QbAddr; retflag = 0x01; LLJ_Msg.HandlePtr = (LLJ_Msg.HandlePtr + LLJ_Msg.NewLen) & LLJRXDBOUND ; } else { ddr_index_2++; //ËùÓÐÊý¾ÝµØÖ·Í³Ò»¼Ó£¬Ä³Ò»¸öÊý¾Ý¶Áȡʧ°Ü×÷·Ï¡£ NumDataStored ++; if(NumDataStored >= NumStoredLength) { NumDataStored = 0; DataStoredFlag =1; FM25V02_data_write(DataStoredFlag,DataStoredFlag_Addr); } FM25V02_data_write_uint16(NumDataStored_Addr,NumDataStored); retflag = 0x01; LLJ_Msg.HandlePtr = (LLJ_Msg.HandlePtr + LLJ_Msg.NewLen) & LLJRXDBOUND ; ModbusDlg.RepeadTime = 0 ; //ÖØ·¢Ê±¼äÇåÁã ModbusDlg.RepeadNum = REPEATNUM ; //ÖØÖÃÖØ·¢´ÎÊý ModbusDlg.HandleStep = MODBUS_WAIT; memset(LLJ_Msg.UartBuff,0,sizeof(LLJ_Msg.UartBuff)); memset(LLJ_Msg.HandBuff,0,sizeof(LLJ_Msg.HandBuff)); LLJ_Msg.WritePtr=0; LLJ_Msg.HandlePtr=0; Beginflag = 0; FirstTimeRunFlag = 0; system_alarm.alarm_Sample = 0x00; system_alarm.u8ReadSuccessfullyTimes ++; system_alarm.u8ReadfailedTimes = 0; } } else if(address==parmAccess.u32QbAddr) { if(parmAccess.decoding_Type == 5) { if(parmAccess.u16MeterTypeCode==SIZHUMODBUS1) { (*(uint8_t *)(&LLJ_data_g.SC_instant))=LLJ_Msg.HandBuff[4]; (*((uint8_t *)(&LLJ_data_g.SC_instant) + 1))=LLJ_Msg.HandBuff[3]; (*((uint8_t *)(&LLJ_data_g.SC_instant) + 2))=LLJ_Msg.HandBuff[6]; (*((uint8_t *)(&LLJ_data_g.SC_instant) + 3))=LLJ_Msg.HandBuff[5]; } else { (*(uint8_t *)(&LLJ_data_g.SC_instant))=LLJ_Msg.HandBuff[4]; (*((uint8_t *)(&LLJ_data_g.SC_instant) + 1))=LLJ_Msg.HandBuff[3]; (*((uint8_t *)(&LLJ_data_g.SC_instant) + 2))=LLJ_Msg.HandBuff[6]; (*((uint8_t *)(&LLJ_data_g.SC_instant) + 3))=LLJ_Msg.HandBuff[5]; } } else{} FM25V02_data_write_float(SCINS_addr + 4*NumDataStored, LLJ_data_g.SC_instant); ddr_index_2 ++; NumDataStored ++; if(NumDataStored >= NumStoredLength) { NumDataStored = 0; DataStoredFlag =1; FM25V02_data_write(DataStoredFlag,DataStoredFlag_Addr); } FM25V02_data_write_uint16(NumDataStored_Addr,NumDataStored); retflag = 0x01; LLJ_Msg.HandlePtr = (LLJ_Msg.HandlePtr + LLJ_Msg.NewLen) & LLJRXDBOUND ; ModbusDlg.RepeadTime = 0 ; ModbusDlg.RepeadNum = REPEATNUM ; ModbusDlg.HandleStep = MODBUS_WAIT; memset(LLJ_Msg.UartBuff,0,sizeof(LLJ_Msg.UartBuff)); memset(LLJ_Msg.HandBuff,0,sizeof(LLJ_Msg.HandBuff)); LLJ_Msg.WritePtr=0; LLJ_Msg.HandlePtr=0; Beginflag = 0; FirstTimeRunFlag = 0; system_alarm.alarm_Sample = 0x00; system_alarm.u8ReadSuccessfullyTimes ++; system_alarm.u8ReadfailedTimes = 0; } else { retflag = 0x01; LLJ_Msg.HandlePtr = (LLJ_Msg.HandlePtr + LLJ_Msg.NewLen) & LLJRXDBOUND ; memset(LLJ_Msg.UartBuff,0,sizeof(LLJ_Msg.UartBuff)); memset(LLJ_Msg.HandBuff,0,sizeof(LLJ_Msg.HandBuff)); LLJ_Msg.WritePtr=0; LLJ_Msg.HandlePtr=0; } } else//CRC16УÑé³ö´í { LLJ_Msg.HandlePtr = (LLJ_Msg.HandlePtr + LLJ_Msg.NewLen) & LLJRXDBOUND ; for(i=0;i= NumStoredLength) { NumDataStored = 0; DataStoredFlag =1; FM25V02_data_write(DataStoredFlag,DataStoredFlag_Addr); } FM25V02_data_write_uint16(NumDataStored_Addr,NumDataStored); retflag = 0x01; LLJ_Msg.HandlePtr = (LLJ_Msg.HandlePtr + LLJ_Msg.NewLen) & LLJRXDBOUND ; ModbusDlg.RepeadTime = 0 ; ModbusDlg.RepeadNum = REPEATNUM ; ModbusDlg.HandleStep = MODBUS_WAIT; memset(LLJ_Msg.UartBuff,0,sizeof(LLJ_Msg.UartBuff)); memset(LLJ_Msg.HandBuff,0,sizeof(LLJ_Msg.HandBuff)); LLJ_Msg.WritePtr=0; LLJ_Msg.HandlePtr=0; Beginflag = 0; FirstTimeRunFlag = 0; system_alarm.alarm_Sample = 0x00; system_alarm.u8ReadSuccessfullyTimes ++; system_alarm.u8ReadfailedTimes = 0; return retflag; } uint8_t LLJ_ModbusHandle_CRCData( uint16_t address ) { u16 crc; unsigned char retflag = 0 ; unsigned short i ; unsigned char temp; float Temp; int i32Temperature; int i32Pressure; int i32SC_instant; int i32WC_instant; while(1) { temp = LLJ_Msg.WritePtr ; delay_ms(10); if(temp == LLJ_Msg.WritePtr) { break; } } LLJ_Msg.TempPtr = LLJ_Msg.HandlePtr ; //¼Ç¼´¦ÀíÖ¸ÕëµÄλÖ㬿ªÊ¼·ÖÎöÖ®ºóµÄÊý¾Ý LLJ_Msg.NewLen = (LLJ_Msg.WritePtr - LLJ_Msg.HandlePtr) & LLJRXDBOUND ; //ÐÂÊÕµ½µÄÊý¾Ý³¤¶È if(LLJ_Msg.NewLen > 0x02) //½ÓÊÕ»º´æÇøÄÚÓÐÊý¾Ý { LLJ_Msg.TempPtr = LLJ_Msg.HandlePtr ; //¼Ç¼´¦ÀíÖ¸ÕëµÄλÖ㬿ªÊ¼·ÖÎöÖ®ºóµÄÊý¾Ý memset((char *)LLJ_Msg.HandBuff,0,sizeof(LLJ_Msg.HandBuff)); for(i=0;i=6000) //½ÓÊÕ´¦Àíº¯ÊýµÄµØ·½ÓиöÑÓʱ100000£¬ÅäºÏÕâ¸öÊýÖµ´ó¸ÅÀÛ»ý1·ÖÖÓ×óÓÒ»¹ÔÚwhileÑ­»·µÄ»°£¬Ç¿ÖÆbreakÌø³öÑ­»·¡£ { index_break=0; Beginflag=0; break; } if(ModbusDlg.HandleStep == MODBUS_WAIT) { Parameter_assignment(); //Á÷Á¿¼ÆÅäÖà if(parmAccess.VT_permission == 1) { ModbusDlg.dataAddress = parmAccess.u32VTAddr; } else { ModbusDlg.dataAddress = parmAccess.u32VbTAddr; } ModbusDlg.RepeadNum = REPEATNUM; LLJ_Msg.WritePtr = LLJ_Msg.HandlePtr; ModbusDlg.HandleStep = MODBUS_TX; } else if(ModbusDlg.HandleStep == MODBUS_TX) { if(!ModbusDlg.RepeadTime) { if(ModbusDlg.RepeadNum) { ModbusDlg.RepeadNum -- ; ModbusDlg.RepeadTime = REPEATUNIT ; if(parmAccess.u16MeterTypeCode==SIZHUMODBUS1) { ModbusDlg.dataAddress = parmAccess.u32VTAddr; LLJ_sendFrame(parmAccess.u8deviceAdress,ModbusDlg.dataAddress,14); } else if(parmAccess.u16MeterTypeCode==SIZHUMODBUS2) { ModbusDlg.dataAddress = parmAccess.u32VTAddr; LLJ_sendFrame(parmAccess.u8deviceAdress,ModbusDlg.dataAddress,28); } else if(parmAccess.u16MeterTypeCode == SIZHUMODBUSV2_0) { LLJ_sendFrame(parmAccess.u8deviceAdress,ModbusDlg.dataAddress,26); } else { LLJ_sendFrame(parmAccess.u8deviceAdress,ModbusDlg.dataAddress,0x02); } } else { ModbusDlg.RepeadTime = 0 ; //ÖØ·¢Ê±¼äÇåÁã ModbusDlg.HandleStep = MODBUS_WAIT; //Æô¶¯Ê§°Ü£¬ÖØÐÂÆô¶¯ memset(LLJ_Msg.UartBuff,0,sizeof(LLJ_Msg.UartBuff)); memset(LLJ_Msg.HandBuff,0,sizeof(LLJ_Msg.HandBuff)); LLJ_Msg.HandlePtr = LLJ_Msg.WritePtr = 0;; //Çå¿Õ½ÓÊÕ»º³åÇø //¶Áȡʧ°ÜËùÓÐΪ0 FM25V02_data_write_uint32(WCACC_addr + 4*NumDataStored, 0); FM25V02_data_write_uint32_WRCheck(SCACC_addr + 4*NumDataStored, 0); FM25V02_data_write_float(PRE_addr + 4*NumDataStored, 0); FM25V02_data_write_float(TEM_addr + 4*NumDataStored, 0); FM25V02_data_write_float(WCINS_addr + 4*NumDataStored, 0); FM25V02_data_write_float(SCINS_addr + 4*NumDataStored, 0); ddr_index_2 ++; NumDataStored++; if(NumDataStored >= NumStoredLength) { NumDataStored = 0; DataStoredFlag =1; FM25V02_data_write(DataStoredFlag,DataStoredFlag_Addr ); } FM25V02_data_write_uint16(NumDataStored_Addr,NumDataStored); system_alarm.u8ReadSuccessfullyTimes =0; system_alarm.u8ReadfailedTimes ++; Beginflag = 0; Read_flag = 1; //¶Áȡʧ°ÜµÄ break; } } else { if(ret == 0x01) //485¶ÁÈ¡Êý¾ÝÕýÈ·£¬½øÐÐÏÂÒ»´ÎÊÕ·¢ { ret = 0 ; ModbusDlg.RepeadTime = 0 ; ModbusDlg.RepeadNum = REPEATNUM ; } } } if(ModbusDlg.HandleStep != MODBUS_WAIT) { if((parmAccess.u16MeterTypeCode==SIZHUMODBUS1)||(parmAccess.u16MeterTypeCode==SIZHUMODBUS2)) { ret = LLJ_ModbusHandle(ModbusDlg.dataAddress); } else if(parmAccess.u16MeterTypeCode == SIZHUMODBUSV2_0) { ret = LLJ_ModbusHandle_CRCData(ModbusDlg.dataAddress); } else { ret = LLJ_ModbusHandle(ModbusDlg.dataAddress); } } } if(Read_flag==0) //¶ÁÈ¡ ³É¹¦£¬´æÈë¼Æ·ÑУÑéÇøÓò£¬ÓÃ×÷½áËãУÑéÓᣲ¢ÇÒ½øÐÐÒ»´Î½áËãУÑé { RS485Settlement(); } //Óà¶îÓÃÆøÁ¿µÈ´æ´¢Òª·Åµ½RS485½áËãÖ®ºó£¬ ֮ǰNumDataStored++¹ý£¬ËùÒÔÕâÀïµÃ-1£» if(NumDataStored == 0) { FM25V02_data_write_double(CUMULATIVE_GAS_USAGE_ADDR + 8*(NumDataStored + NumStoredLength-1), Settlement_Para.fCumulativeGasUsage); FM25V02_data_write_double(CUMULATIVE_FEE_USAGE_ADDR + 8*(NumDataStored + NumStoredLength-1), Settlement_Para.fCumulativeFeeUsage); FM25V02_data_write_double(BALANCE_ADDR + 8*(NumDataStored + NumStoredLength-1), Settlement_Para.fBalance); } else if(NumDataStored > 0) { FM25V02_data_write_double(CUMULATIVE_GAS_USAGE_ADDR + 8*(NumDataStored -1), Settlement_Para.fCumulativeGasUsage); FM25V02_data_write_double(CUMULATIVE_FEE_USAGE_ADDR + 8*(NumDataStored -1), Settlement_Para.fCumulativeFeeUsage); FM25V02_data_write_double(BALANCE_ADDR + 8*(NumDataStored -1), Settlement_Para.fBalance); } } /*********485¶ÁÈ¡ÒDZíÊý¾ÝÁ÷³Ì***********/ void Read485_process(void) { uint32 Sample_alarm_addr; uint8_t i = 0, Vcc_Out_State = 0; RS485_GPIO_Init(); POWER_EX_GPIO_Init(); OUTPUT_EN_GPIO_Init(); if(awaken_flag == Key_awaken) //°´¼ü»½ÐÑ { GPRS_sendFlag = 1; } Get_Time(); // »ñȡʱ¼ä FM25V02_data_write(calendar.year&0x00FF, YEAR_addr + NumDataStored ); FM25V02_data_write(calendar.month&0xFF, MONTH_addr + NumDataStored); FM25V02_data_write(calendar.date&0xFF, DAY_addr + NumDataStored ); FM25V02_data_write(calendar.hour&0xFF, HOUR_addr + NumDataStored); FM25V02_data_write(calendar.min&0xFF, MIN_addr + NumDataStored); FM25V02_data_write(calendar.sec&0xFF, SEC_addr + NumDataStored); if(Settlement_Para.fBalance<=parameter_bil.iBalanceInsufAlarmAmount) { system_alarm.alarm_Balance_Small_LCDFLAG = 0x01; } else { system_alarm.alarm_Balance_Small_LCDFLAG = 0x00; } RS485_POWER_ON; //¿ªÆô485¹©µç Vcc_Out_State = RS485_SYNC_READ; while (Vcc_Out_State) //Vcc_Out_State != 0ÓеçÔ´Êä³ö { i++; powerEX_OFF; OUTPUT1_EN_OFF; OUTPUT2_EN_OFF; delay_ms(100); Vcc_Out_State = RS485_SYNC_READ; if (i > 5) break; } if(!Vcc_Out_State) { if((Bat_Alka_status==0)||(HWID0_READ==0)) //¼îµçÓеã»òÕßÓÐÍ⹩µçµÄʱºò¿ªÆô¶ÔÍâÒÇ±í¹©µç { if((parmAccess.u8EXPVoltageCode&0xf0)==0x10) { //¿ªÆôµÚ¶þ·V2Êä³ö OUTPUT2_EN_ON; OUTPUT1_EN_OFF; }else { //¿ªÆôµÚһ·V1Êä³ö OUTPUT2_EN_OFF; OUTPUT1_EN_ON; } powerEX_ON; //¿ªÆôÍ⹩µç } if((parmAccess.u16MeterTypeCode==SIZHUMODBUS1)||(parmAccess.u16MeterTypeCode==SIZHUMODBUS2)||(parmAccess.u16MeterTypeCode==SIZHUMODBUSV2_0)) // modbus { RS485_Usart_Init(parmAccess.u8BaudRateCode,parmAccess.u8RS485Parity); EXPower_Control(parmAccess.u8EXPVoltageCode); IWDT_Clr(); delay_ms(1000); delay_ms(200); IWDT_Clr(); } else { RS485_Usart_Init(parmAccess.u8BaudRateCode,parmAccess.u8RS485Parity); EXPower_Control(parmAccess.u8EXPVoltageCode); } /*read data from 485*/ Modbus_RS485B(); ///modbus /********·¢ËÍÃüÁîºÍ½âÎöÊý¾Ý******/ power12V_OFF; power9V_OFF; powerEX_OFF; OUTPUT2_EN_OFF; OUTPUT1_EN_OFF; RS485_POWER_OFF; } else { power12V_OFF; power9V_OFF; powerEX_OFF; OUTPUT2_EN_OFF; OUTPUT1_EN_OFF; RS485_POWER_OFF; } if((system_alarm.u8ReadfailedTimes>0)&&(system_alarm.u8ReadfailedTimes <3)) { Get_Time(); // »ñȡʱ¼ä Sample_alarm_addr = FIRST_ALARM_RECORD_ADDR + (uint32)system_alarm.u16AlarmStoreNum * ALARM_RECORD_LENGTH; FM25V02_data_write(calendar.year&0x00FF, Sample_alarm_addr ); FM25V02_data_write(calendar.month&0xFF, Sample_alarm_addr + 1 ); FM25V02_data_write(calendar.date&0xFF, Sample_alarm_addr + 2 ); FM25V02_data_write(calendar.hour&0xFF, Sample_alarm_addr + 3 ); FM25V02_data_write(calendar.min&0xFF, Sample_alarm_addr + 4 ); FM25V02_data_write(calendar.sec&0xFF, Sample_alarm_addr + 5 ); FM25V02_data_write_uint16(Sample_alarm_addr + 6, RS485_READ_FLOW_FAILED_ALARM_CODE); system_alarm.alarm_l ++; system_alarm.u16AlarmStoreNum ++; if(system_alarm.u16AlarmStoreNum >= ALARM_RECORD_NUM) { system_alarm.u16AlarmStoreNum = 0; system_alarm.u8AlarmStoreFullFlag = 1; FM25V02_data_write(system_alarm.u8AlarmStoreFullFlag,ALARM_RECORD_FULL_FLAG_ADDR); } FM25V02_data_write_uint16(CURRENT_ALARM_RECORD_NUM_ADDR,system_alarm.u16AlarmStoreNum); system_alarm.alarm_Sample = 0x01; } } /****************************************** * func: Parameter_assignment * desc: Parameter assignment * input: * output: none * return: none *****************************************/ void Parameter_assignment(void) { if(parmAccess.u16MeterTypeCode==SIZHUMODBUS1) // { parmAccess.decoding_Type = 5; parmAccess.Vbt_Flag = 0; parmAccess.VT_permission = 1; parmAccess.VbT_permission = 1; parmAccess.Q_permission = 1; parmAccess.Qb_permission = 1; parmAccess.TEMP_permission = 1; parmAccess.PRES_permission = 1; parmAccess.u8deviceAdress = parmAccess.u8slaveAddress;//0x01 parmAccess.u32VTAddr = 3501; parmAccess.u32VbTAddr = 3504; parmAccess.u32VbT2Addr = 3003; parmAccess.u32QAddr = 3507; parmAccess.u32QbAddr = 3509; parmAccess.u32TMESAddr = 3511; parmAccess.u32PMESAddr = 3513; parmAccess.u32P_Bar = 1; } else if(parmAccess.u16MeterTypeCode==SIZHUMODBUS2) // { parmAccess.decoding_Type = 5; parmAccess.Vbt_Flag = 0; parmAccess.VT_permission = 1; parmAccess.VbT_permission = 1; parmAccess.Q_permission = 1; parmAccess.Qb_permission = 1; parmAccess.TEMP_permission = 1; parmAccess.PRES_permission = 1; parmAccess.u8deviceAdress = parmAccess.u8slaveAddress;//0x01 parmAccess.u32VTAddr = 3001; parmAccess.u32VbTAddr = 3003; parmAccess.u32VbT2Addr = 3003; parmAccess.u32QAddr = 3005; parmAccess.u32QbAddr = 3007; parmAccess.u32TMESAddr = 3025; parmAccess.u32PMESAddr = 3027; parmAccess.u32P_Bar = 1; } else if(parmAccess.u16MeterTypeCode==SIZHUMODBUSV2_0) // { parmAccess.decoding_Type = 5; //SIZHUMODBUS2 parmAccess.Vbt_Flag = 0; parmAccess.VT_permission = 1; parmAccess.VbT_permission = 1; parmAccess.Q_permission = 1; parmAccess.Qb_permission = 1; parmAccess.TEMP_permission = 1; parmAccess.PRES_permission = 1; parmAccess.u8deviceAdress = parmAccess.u8slaveAddress;//parmAccess.u8deviceAdress = 0x01; parmAccess.u32VTAddr = 504; parmAccess.u32VbTAddr = 507; parmAccess.u32QAddr = 510; parmAccess.u32QbAddr = 512; parmAccess.u32TMESAddr = 514; parmAccess.u32PMESAddr = 516; parmAccess.u32P_Bar = 1; } else { parmAccess.u16MeterTypeCode = SIZHUMODBUS1; parmAccess.decoding_Type = 5; parmAccess.Vbt_Flag = 0; parmAccess.VT_permission = 1; parmAccess.VbT_permission = 1; parmAccess.Q_permission = 1; parmAccess.Qb_permission = 1; parmAccess.TEMP_permission = 1; parmAccess.PRES_permission = 1; parmAccess.u8deviceAdress = parmAccess.u8slaveAddress;//0x01 parmAccess.u32VTAddr = 3501; parmAccess.u32VbTAddr = 3504; parmAccess.u32VbT2Addr = 3003; parmAccess.u32QAddr = 3507; parmAccess.u32QbAddr = 3509; parmAccess.u32TMESAddr = 3511; parmAccess.u32PMESAddr = 3513; parmAccess.u32P_Bar = 1; } } void PULSE_Recording(void) { if((parameter_bil.cDataObtainType & RS485_MODE)!= RS485_MODE)//ûÓÐ485¶ÁÈ¡ { Get_Time();// »ñȡʱ¼ä FM25V02_data_write(calendar.year&0x00FF, YEAR_addr + NumDataStored ); FM25V02_data_write(calendar.month&0xFF, MONTH_addr + NumDataStored); FM25V02_data_write(calendar.date&0xFF, DAY_addr + NumDataStored ); FM25V02_data_write(calendar.hour&0xFF, HOUR_addr + NumDataStored); FM25V02_data_write(calendar.min&0xFF, MIN_addr + NumDataStored); FM25V02_data_write(calendar.sec&0xFF, SEC_addr + NumDataStored); FM25V02_data_write_uint32(WCACC_addr + 4*NumDataStored, 0); FM25V02_data_write_uint32_WRCheck(SCACC_addr + 4*NumDataStored, 0); FM25V02_data_write_float(PRE_addr + 4*NumDataStored, 0); FM25V02_data_write_float(TEM_addr + 4*NumDataStored, 0); FM25V02_data_write_float(WCINS_addr + 4*NumDataStored, 0); FM25V02_data_write_float(SCINS_addr + 4*NumDataStored, 0); // parmAccess.Vbt_Flag = 0; // parmAccess.VT_permission = 0; // parmAccess.VbT_permission = 0; // parmAccess.Q_permission = 0; // parmAccess.Qb_permission = 0; // parmAccess.TEMP_permission = 0; // parmAccess.PRES_permission = 0; } if(Settlement_Para.fBalance<=parameter_bil.iBalanceInsufAlarmAmount) { system_alarm.alarm_Balance_Small_LCDFLAG = 0x01; } else { system_alarm.alarm_Balance_Small_LCDFLAG = 0x00; } FM25V02_data_write_double(CUMULATIVE_GAS_USAGE_ADDR + 8*NumDataStored, Settlement_Para.fCumulativeGasUsage); FM25V02_data_write_double(CUMULATIVE_FEE_USAGE_ADDR + 8*NumDataStored, Settlement_Para.fCumulativeFeeUsage); FM25V02_data_write_double(BALANCE_ADDR + 8*NumDataStored, Settlement_Para.fBalance); ddr_index_2 ++; NumDataStored++; if(NumDataStored >= NumStoredLength) { NumDataStored = 0; DataStoredFlag =1; FM25V02_data_write(DataStoredFlag,DataStoredFlag_Addr ); } FM25V02_data_write_uint16(NumDataStored_Addr,NumDataStored); }