#include "para.h"
|
|
#include "1gprs.h"
|
#include "ReadDeviceData.h"
|
#include "1billing.h"
|
#include "ex_rtc.h"
|
#include "AES128.h"
|
#include "menu.h"
|
#include "1ValveControl.h"
|
#include "e2p.h"
|
#include "devicegpioinit.h"
|
#include "RS232.h"
|
#include "RW_Verification.h"
|
#include "1lcd.h"
|
#include "1lcd_new.h"
|
#include "mbcrc.h"
|
#include "systaskinit.h"
|
#include "1powermanage.h"
|
|
/* Private_Macros -------------------------------------------------------------*/
|
//
|
#define YEAR ((((__DATE__ [7] - '0') * 10 + (__DATE__ [8] - '0')) * 10 \
|
+ (__DATE__ [9] - '0')) * 10 + (__DATE__ [10] - '0'))
|
|
#define MONTH (__DATE__ [2] == 'n' ? (__DATE__ [1] == 'a' ? 1 : 6) \
|
: __DATE__ [2] == 'b' ? 2 \
|
: __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M' ? 3 : 4) \
|
: __DATE__ [2] == 'y' ? 5 \
|
: __DATE__ [2] == 'l' ? 7 \
|
: __DATE__ [2] == 'g' ? 8 \
|
: __DATE__ [2] == 'p' ? 9 \
|
: __DATE__ [2] == 't' ? 10 \
|
: __DATE__ [2] == 'v' ? 11 : 12)
|
|
#define DAY ((__DATE__ [4] == ' ' ? 0 : __DATE__ [4] - '0') * 10 \
|
+ (__DATE__ [5] - '0'))
|
|
#define DATE_AS_INT (((YEAR - 2000) * 12 + MONTH) * 31 + DAY)
|
|
|
|
#define TRUE 1
|
#define FALSE 0
|
u32 Power_ON_cnt =0;
|
u8 Power_ON_flag = 0;
|
u8 BalanceSaveType; //¼Æ·Ñģʽ±êÖ¾£¬0-±í¶Ë¼Æ·Ñ 1-·þÎñ¶Ë¼Æ·Ñ
|
|
volatile LLJ_DATA LLJ_data_g;
|
DEVICE_PARM device_Parm;
|
PARAMETER_BIL parameter_bil;
|
|
SYSTEM_ALARM system_alarm;
|
SYSTEM_RECORD system_record;
|
volatile MODBUS_DEV_PARA modbus_dev_para = {1,1};
|
|
uint16_t Time_For_valve_open = 0;
|
uint16_t Time_For_wakeup;
|
uint16_t LCD_sleepTime = 0;
|
uint8_t LCD_flag=0; //0:·Ç³¤ÁÁ£¨ÁÁ1·ÖÖÓ£© 1£º³¤ÁÁ
|
uint8_t LOGO_Flag = 0; //˼ÖþlogoÏÔʾ±êʶ£¬0´ú±íÏÔʾ£¬1´ú±í²»ÏÔʾ
|
uint32_t k_index; //??,????FLASH?????
|
uint8_t begin,LPM3_FLAG;
|
int num,sleepTime;
|
uint8_t total_dataGroupNum; //?????????
|
uint8_t yushu;
|
char Debug[150];
|
|
uint8_t FirstTimeRunFlag ;
|
|
|
VALVE_ABNORMAL_PARA valve_abnormal_para_g;
|
|
|
/*-------------------------------É豸ÐòÁкÅ------------------------------------*/
|
|
volatile deviceSerialNum_t regDevSerialNum;
|
|
|
u8 RS485_status,BT_status;
|
|
/******************************************
|
* func: HexToChar
|
* desc: CharToHex
|
* input: none
|
* output: none
|
* return: none
|
*****************************************/
|
uint8_t HexToChar(uint8_t bChar)
|
{
|
u8 temp;
|
temp = bChar;
|
if (temp < 10)
|
{
|
temp += 0x30;
|
}
|
else if (temp < 16) // Capital //??
|
{
|
temp = temp - 10 + 'A';
|
}
|
else
|
{
|
temp = 0;
|
}
|
return temp;
|
}
|
/******************************************
|
* func: CharToHex
|
* desc: CharToHex
|
* input: none
|
* output: none
|
* return: none
|
*****************************************/
|
uint8_t CharToHex(uint8_t bChar)
|
{
|
u8 temp;
|
temp = bChar;
|
if ((temp >= 0x30) && (temp <= 0x39))
|
{
|
temp -= 0x30;
|
}
|
else if ((temp >= 0x41) && (temp <= 0x46)) // Capital //??
|
{
|
temp -= 0x37;
|
}
|
else if ((temp >= 0x61) && (temp <= 0x66)) //littlecase
|
{
|
temp -= 0x57;
|
}
|
else
|
{
|
temp = 0xff;
|
}
|
return temp;
|
}
|
|
/******************************************
|
* func: arraya_2_arrayb
|
* desc: array A TO array B
|
* input: none
|
* output: none
|
* return: none
|
*****************************************/
|
void arraya_2_arrayb(u8 * aA , u8 * aB, u8 len, u8 mode) //mode 0 С¶Ëģʽ 1´ó¶Ëģʽ ÆäËûÔÚ¶¨Òå×Ö½Ú˳Ðò
|
{
|
u8 index;
|
u8 *ptra,*ptrb;
|
|
if(mode==0)
|
{
|
ptra = aA;
|
ptrb = aB;
|
for(index = 0; index < len; index ++)
|
{
|
*ptrb = *ptra;
|
ptrb ++;
|
ptra ++;
|
}
|
}else if(mode==1)
|
{
|
ptra = aA + len - 1;
|
ptrb = aB;
|
for(index = 0; index < len; index ++)
|
{
|
*ptrb = *ptra;
|
ptrb ++;
|
ptra --;
|
}
|
|
}
|
}
|
|
/******************************************
|
* func: Set_parameters
|
* desc: Set_parameters
|
* input: none
|
* output: none
|
* return: none
|
*****************************************/
|
uint8_t Set_parameters(uint8_t dev_or_bil)
|
{
|
float fPulseCoefficient;
|
float fSingleBillingFee;
|
// uint8_t index_i=0;
|
uint8_t ack_flag=0;
|
|
if(dev_or_bil == 0) //±í¾ß²ÎÊýÉèÖÃ
|
{
|
// if(GPRS_SEND_BUFF[0]==0x01) //±íºÅÐ޸ĵϰӦ¸ÃÔÚ±¾´ÎͨѶ½áÊøÖ®ºóÔÙÐ޸쬲»È»Í¨Ñ¶»áÓÐÎÊÌâ¡£
|
// {
|
// for(index_i=0;index_i<8;index_i++)
|
// {
|
// gprs_protocol_header.DeviceAddress[index_i] = GPRS_SEND_BUFF[index_i + 1]; //??????
|
// }
|
// #ifdef DEBUG_OUT
|
// sprintf(Debug, "DeviceAddress = %x %x %x %x %x %x %x %x \r\n" ,
|
// gprs_protocol_header.DeviceAddress[7],
|
// gprs_protocol_header.DeviceAddress[6],
|
// gprs_protocol_header.DeviceAddress[5],
|
// gprs_protocol_header.DeviceAddress[4],
|
// gprs_protocol_header.DeviceAddress[3],
|
// gprs_protocol_header.DeviceAddress[2],
|
// gprs_protocol_header.DeviceAddress[1],
|
// gprs_protocol_header.DeviceAddress[0]);
|
// UartDebugFun(Debug);
|
// #endif
|
// }
|
|
if(GPRS_SEND_BUFF[9]==0x01)
|
{
|
if(GPRS_SEND_BUFF[10]==0x04)
|
{
|
if((GPRS_SEND_BUFF[11] < 60)&&(GPRS_SEND_BUFF[11] > 0))
|
{
|
device_Parm.Tyf = GPRS_SEND_BUFF[10];
|
device_Parm.Tf = GPRS_SEND_BUFF[11];
|
}
|
else
|
{
|
ack_flag = 2;
|
}
|
}
|
else if(GPRS_SEND_BUFF[10]==0x05)
|
{
|
if((GPRS_SEND_BUFF[11] < 24)&&(GPRS_SEND_BUFF[11] > 0))
|
{
|
device_Parm.Tyf = GPRS_SEND_BUFF[10];
|
device_Parm.Tf = GPRS_SEND_BUFF[11];
|
}
|
else
|
{
|
ack_flag = 2;
|
}
|
}else if(GPRS_SEND_BUFF[10]==0x06)
|
{
|
if((GPRS_SEND_BUFF[11] < 29)&&(GPRS_SEND_BUFF[11] > 0))
|
{
|
device_Parm.Tyf = GPRS_SEND_BUFF[10];
|
device_Parm.Tf = GPRS_SEND_BUFF[11];
|
}
|
else
|
{
|
ack_flag = 2;
|
}
|
}
|
else
|
{
|
ack_flag = 2;
|
}
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "device_Parm.Tyf = %d \r\n" ,device_Parm.Tyf);
|
UartDebugFun(Debug);
|
#endif
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "device_Parm.Tf = %d \r\n" ,device_Parm.Tf);
|
UartDebugFun(Debug);
|
#endif
|
}
|
|
if(GPRS_SEND_BUFF[12]==0x01)
|
{
|
if(GPRS_SEND_BUFF[13] == 0x84)
|
{
|
if((GPRS_SEND_BUFF[14] < 60)&&(GPRS_SEND_BUFF[14] > 0))
|
{
|
device_Parm.Typ = GPRS_SEND_BUFF[13];
|
device_Parm.Tp = GPRS_SEND_BUFF[14];
|
}
|
else
|
{
|
ack_flag = 3;
|
}
|
}
|
else if(GPRS_SEND_BUFF[13] == 0x85)
|
{
|
if((GPRS_SEND_BUFF[14] < 24)&&(GPRS_SEND_BUFF[14] > 0))
|
{
|
device_Parm.Typ = GPRS_SEND_BUFF[13];
|
device_Parm.Tp = GPRS_SEND_BUFF[14];
|
}
|
else
|
{
|
ack_flag = 3;
|
}
|
}
|
else if(GPRS_SEND_BUFF[13] == 0x86)
|
{
|
if((GPRS_SEND_BUFF[14] < 29)&&(GPRS_SEND_BUFF[14] > 0))
|
{
|
device_Parm.Typ = GPRS_SEND_BUFF[13];
|
device_Parm.Tp = GPRS_SEND_BUFF[14];
|
}
|
else
|
{
|
ack_flag = 3;
|
}
|
}
|
else if(GPRS_SEND_BUFF[13] == 0x00)
|
{
|
device_Parm.Typ = GPRS_SEND_BUFF[13];
|
device_Parm.Tp = GPRS_SEND_BUFF[14];
|
}
|
else
|
{
|
ack_flag = 3;
|
}
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "device_Parm.Typ = %d \r\n" ,device_Parm.Typ);
|
UartDebugFun(Debug);
|
#endif
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "device_Parm.Tp = %d \r\n" ,device_Parm.Tp);
|
UartDebugFun(Debug);
|
#endif
|
}
|
|
|
|
if(GPRS_SEND_BUFF[15]==0x01)
|
{
|
if((GPRS_SEND_BUFF[16]&0x80)==0x80)
|
{
|
//device_Parm.time1_flag = 0x80;
|
if(( ((GPRS_SEND_BUFF[16]&0x7f)>>4)*10 + (GPRS_SEND_BUFF[16]&0x0f) )<24)
|
{
|
if(( (GPRS_SEND_BUFF[17]>>4)*10 + (GPRS_SEND_BUFF[17]&0x0f) )< 60 )
|
{
|
device_Parm.time1_flag = 0x80;
|
device_Parm.sendTiming_hour = GPRS_SEND_BUFF[16]&0x7f;
|
device_Parm.sendTiming_min = GPRS_SEND_BUFF[17];
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "dingshi time 1 = %x : %x \r\n" ,
|
device_Parm.sendTiming_hour,device_Parm.sendTiming_min);
|
UartDebugFun(Debug);
|
#endif
|
}
|
else
|
{
|
ack_flag = 4;
|
}
|
}
|
else
|
{
|
ack_flag = 4;
|
}
|
}
|
else
|
{
|
device_Parm.time1_flag = 0x00;
|
#ifdef DEBUG_OUT
|
UartDebugFun("time1_flag = 0 \r\n");
|
#endif
|
}
|
}
|
|
if(GPRS_SEND_BUFF[18]==0x01)
|
{
|
if((GPRS_SEND_BUFF[19]&0x80)==0x80)
|
{
|
if(( ((GPRS_SEND_BUFF[19]&0x7f)>>4)*10 + (GPRS_SEND_BUFF[19]&0x0f) )<24)
|
{
|
if(( (GPRS_SEND_BUFF[20]>>4)*10 + (GPRS_SEND_BUFF[20]&0x0f) )< 60)
|
{
|
device_Parm.time2_flag = 0x80;
|
device_Parm.sendTiming_hour2 = GPRS_SEND_BUFF[19]&0x7f;
|
device_Parm.sendTiming_min2 = GPRS_SEND_BUFF[20];
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "dingshi time 2 = %x : %x \r\n" ,
|
device_Parm.sendTiming_hour2,device_Parm.sendTiming_min2);
|
UartDebugFun(Debug);
|
#endif
|
}
|
else
|
{
|
ack_flag = 4;
|
}
|
}
|
else
|
{
|
ack_flag = 4;
|
}
|
}
|
else
|
{
|
device_Parm.time2_flag = 0x00;
|
device_Parm.time1_flag = 0x00;
|
#ifdef DEBUG_OUT
|
UartDebugFun("time2_flag = 0 \r\n");
|
#endif
|
}
|
}
|
|
if(GPRS_SEND_BUFF[21]==0x01)
|
{
|
if(GPRS_SEND_BUFF[22] > 10)
|
{
|
device_Parm.GPRS_RESTARTTIME = GPRS_SEND_BUFF[22];
|
FM25V02_data_write(device_Parm.GPRS_RESTARTTIME,GPRS_RestartTime_Addr);
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "GPRS_RESTARTTIME = %d \r\n" ,device_Parm.GPRS_RESTARTTIME);
|
UartDebugFun(Debug);
|
#endif
|
}
|
}
|
if(GPRS_SEND_BUFF[23]==0x01)
|
{
|
if(GPRS_SEND_BUFF[24] ==0)
|
{
|
parameter_bil.cDataObtainType = PULSE_MODE;
|
if(Settlement_Para.RS485SettlementFlag!=0)
|
{
|
Settlement_Para.RS485SettlementFlag = 0;
|
FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
ClearCardinalFlag();
|
}
|
}
|
else if(GPRS_SEND_BUFF[24] ==1)
|
{
|
parameter_bil.cDataObtainType = RS485_AND_PULSE_MODE;
|
if(Settlement_Para.RS485SettlementFlag==0)
|
{
|
Settlement_Para.RS485SettlementFlag = 1;
|
FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
ClearCardinalFlag();
|
}
|
}
|
else if(GPRS_SEND_BUFF[24] ==2)
|
{
|
parameter_bil.cDataObtainType = RS485_MODE;
|
if(Settlement_Para.RS485SettlementFlag==0)
|
{
|
Settlement_Para.RS485SettlementFlag = 1;
|
FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
ClearCardinalFlag();
|
}
|
|
system_alarm.alarm_Pulse_Broken_LCDFLAG = 0;
|
}
|
else
|
{
|
ack_flag = 5;
|
}
|
|
FM25V02_data_write(parameter_bil.cDataObtainType,DATA_OBTAIN_TYPE_ADDR);
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "cDataObtainType = %d \r\n" ,
|
parameter_bil.cDataObtainType);
|
UartDebugFun(Debug);
|
#endif
|
|
if((parameter_bil.cDataObtainType & RS485_MODE)!= RS485_MODE)
|
{
|
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;
|
|
}
|
else
|
{
|
parmAccess.u16MeterTypeCode = 256*((u16)GPRS_SEND_BUFF[26])+GPRS_SEND_BUFF[25];
|
FM25V02_data_write_uint16(METER_TYPE_CODE_ADDR,parmAccess.u16MeterTypeCode);
|
|
if((parameter_bil.cDataObtainType & PULSE_MODE)== PULSE_MODE)
|
{
|
if((parmAccess.u16MeterTypeCode==ASMODBUS)||(parmAccess.u16MeterTypeCode==AS100MODBUS)||(parmAccess.u16MeterTypeCode==SIARGO_MODBUS)) //ÅжÏÊÇ·ñ°®ÖªÁ÷Á¿¼Æ£¬°®ÖªÁ÷Á¿¼ÆÂö³åʶ±ð²ÉÓ÷½²¨ÉÏÉýÑØÊ¶±ð·½Ê½
|
{
|
LOW_PULSE_Rising_config();
|
Low_Pluse_GPIO_Init();
|
}
|
else
|
{
|
LOW_PULSE_config();
|
Low_Pluse_GPIO_Init();
|
}
|
}else
|
{
|
LOW_PULSE_Rising_disconfig();
|
Low_Pluse_GPIO_sleep_Init();
|
}
|
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "parmAccess.u16MeterTypeCode = %x \r\n" ,
|
parmAccess.u16MeterTypeCode);
|
UartDebugFun(Debug);
|
#endif
|
|
if(GPRS_SEND_BUFF[27]<9)
|
{
|
parmAccess.u8BaudRateCode =GPRS_SEND_BUFF[27];
|
FM25V02_data_write(parmAccess.u8BaudRateCode ,BAUD_RATE_CODE_ADDR);
|
}
|
else
|
{
|
ack_flag = 5;
|
}
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "parmAccess.u8BaudRateCode = %d \r\n" ,
|
parmAccess.u8BaudRateCode);
|
UartDebugFun(Debug);
|
#endif
|
|
if(GPRS_SEND_BUFF[28]<3)
|
{
|
parmAccess.u8RS485Parity =GPRS_SEND_BUFF[28];
|
FM25V02_data_write(parmAccess.u8RS485Parity ,RS485_PARITY_ADDR);
|
}
|
else
|
{
|
ack_flag = 5;
|
}
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "parmAccess.u8RS485Parity = %d \r\n" ,
|
parmAccess.u8RS485Parity);
|
UartDebugFun(Debug);
|
#endif
|
|
if(GPRS_SEND_BUFF[29]<3)
|
{
|
parmAccess.u8EXPVoltageCode =GPRS_SEND_BUFF[29];
|
FM25V02_data_write(parmAccess.u8EXPVoltageCode ,EXP_VOLTAGE_CODE_ADDR);
|
}
|
else
|
{
|
ack_flag = 5;
|
}
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "parmAccess.u8EXPVoltageCode = %d \r\n" ,parmAccess.u8EXPVoltageCode);
|
UartDebugFun(Debug);
|
#endif
|
}
|
|
}
|
if(GPRS_SEND_BUFF[30]==1)
|
{
|
if(GPRS_SEND_BUFF[31] >= 10 )
|
{
|
parameter_bil.u8PulseWidth = GPRS_SEND_BUFF[31];
|
FM25V02_data_write(parameter_bil.u8PulseWidth,PULSE_WITDH_ADDR);
|
}
|
else
|
{
|
ack_flag = 6;
|
}
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "parameter_bil.u8PulseWidth = %d \r\n" ,parameter_bil.u8PulseWidth);
|
UartDebugFun(Debug);
|
#endif
|
|
}
|
|
if(GPRS_SEND_BUFF[32]==1)
|
{
|
if(GPRS_SEND_BUFF[33] < 0x10 )
|
{
|
parmAccess.u8LowPowerAlarmLine = GPRS_SEND_BUFF[33];
|
FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR);
|
}
|
else
|
{
|
ack_flag = 7;
|
}
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "parmAccess.u8LowPowerAlarmLine = %d \r\n" ,parmAccess.u8LowPowerAlarmLine);
|
UartDebugFun(Debug);
|
#endif
|
|
}
|
|
if(GPRS_SEND_BUFF[34]==1)
|
{
|
if(GPRS_SEND_BUFF[35] < 2 )
|
{
|
LCD_flag = GPRS_SEND_BUFF[35];
|
FM25V02_data_write(LCD_flag,LCD_FLAG_ADDR);
|
}
|
else
|
{
|
ack_flag = 8;
|
}
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "LCD_flag = %d \r\n" ,LCD_flag);
|
UartDebugFun(Debug);
|
#endif
|
}
|
if(GPRS_SEND_BUFF[36]!=0)
|
{
|
parmAccess.u8slaveAddress = GPRS_SEND_BUFF[36];
|
FM25V02_data_write(parmAccess.u8slaveAddress,SLAVE_ADDRESS_ADDR);
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "parmAccess.u8slaveAddress = %d \r\n" ,parmAccess.u8slaveAddress);
|
UartDebugFun(Debug);
|
#endif
|
}
|
if((device_Parm.time1_flag == 0x00)&&(device_Parm.time2_flag == 0x00)&&(device_Parm.Typ==0x00))
|
{
|
#ifdef DEBUG_OUT
|
UartDebugFun("time12_flag Typ error\r\n");
|
#endif
|
if(device_Parm.Tyf == 0x04)
|
{
|
device_Parm.Typ = 0x84;
|
}else if(device_Parm.Tyf == 0x05)
|
{
|
device_Parm.Typ = 0x85;
|
}else if(device_Parm.Tyf == 0x06)
|
{
|
device_Parm.Typ = 0x86;
|
}
|
device_Parm.Tp = device_Parm.Tf ;
|
}
|
|
// if((device_Parm.time1_flag == 0x80)||(device_Parm.time2_flag == 0x80))
|
// {
|
// device_Parm.Typ=0x00; //????????????????
|
// }
|
|
// if((device_Parm.time1_flag == 0x80)&&(device_Parm.time2_flag == 0x80)) //??????????? ??2??????1
|
// {
|
// if(device_Parm.sendTiming_hour > device_Parm.sendTiming_hour2)
|
// {
|
// device_Parm.sendTiming_hour = GPRS_SEND_BUFF[139]&0x7f;
|
// device_Parm.sendTiming_min = GPRS_SEND_BUFF[140];
|
|
// device_Parm.sendTiming_hour2 = GPRS_SEND_BUFF[136]&0x7f;
|
// device_Parm.sendTiming_min2 = GPRS_SEND_BUFF[137];
|
// }
|
// else if((device_Parm.sendTiming_hour == device_Parm.sendTiming_hour2) &&(device_Parm.sendTiming_min > device_Parm.sendTiming_min2))
|
// {
|
// device_Parm.sendTiming_hour = GPRS_SEND_BUFF[139]&0x7f;
|
// device_Parm.sendTiming_min = GPRS_SEND_BUFF[140];
|
|
// device_Parm.sendTiming_hour2 = GPRS_SEND_BUFF[136]&0x7f;
|
// device_Parm.sendTiming_min2 = GPRS_SEND_BUFF[137];
|
// }
|
// else if((device_Parm.sendTiming_hour == device_Parm.sendTiming_hour2) &&(device_Parm.sendTiming_min == device_Parm.sendTiming_min2))
|
// {
|
// device_Parm.time2_flag = 0x00; //??????,??1
|
// }
|
// }
|
|
|
Get_Sample_Send_Interval();
|
|
FM25V02_data_write(device_Parm.Tyf,Tyf_Addr);
|
FM25V02_data_write(device_Parm.Tf,Ty_Addr);
|
FM25V02_data_write(device_Parm.Typ,Typ_Addr);
|
FM25V02_data_write(device_Parm.Tp,Tp_Addr);
|
FM25V02_data_write(device_Parm.time1_flag,Time1_Flag_Addr);
|
FM25V02_data_write(device_Parm.sendTiming_hour,SendTiming_Hour_Addr);
|
FM25V02_data_write(device_Parm.sendTiming_min,SendTiming_Min_Addr);
|
FM25V02_data_write(device_Parm.time2_flag,Time2_Flag_Addr);
|
FM25V02_data_write(device_Parm.sendTiming_hour2,SendTiming_Hour2_Addr);
|
FM25V02_data_write(device_Parm.sendTiming_min2,SendTiming_Min2_Addr);
|
|
/* if(device_Parm.Tyf==0x06)
|
{
|
if(device_Parm.Tf >=2)
|
{
|
|
device_Parm.time1_flag = 0x00;
|
device_Parm.time2_flag = 0x00;
|
|
device_Parm.Typ = 0X86; //???????
|
|
if(device_Parm.Tp <device_Parm.Tf)
|
{
|
UartDebugFun("Tp so short error\r\n");
|
}
|
}
|
}*/
|
}
|
else if(dev_or_bil==1) //¼Æ·Ñ²ÎÊýÉèÖÃ
|
{
|
if(GPRS_SEND_BUFF[1]==0x01)
|
{
|
|
// if((parameter_bil.cDataObtainType & PULSE_MODE) == PULSE_MODE)
|
// {
|
//parameter_bil.fPulseCoefficient = GPRS_SEND_BUFF[1];
|
(*(uint8_t *)(&fPulseCoefficient)) = GPRS_SEND_BUFF[2];
|
(*((uint8_t *)(&fPulseCoefficient) + 1)) = GPRS_SEND_BUFF[3];
|
(*((uint8_t *)(&fPulseCoefficient) + 2)) = GPRS_SEND_BUFF[4];
|
(*((uint8_t *)(&fPulseCoefficient) + 3)) = GPRS_SEND_BUFF[5];
|
|
if((fPulseCoefficient<100.1)&&(fPulseCoefficient>0))
|
{
|
parameter_bil.fPulseCoefficient = fPulseCoefficient;
|
FM25V02_data_write_float(PULSE_COE_ADDR,parameter_bil.fPulseCoefficient);
|
}
|
else
|
{
|
ack_flag = 1;
|
}
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "fPulseCoefficient = %.3f \r\n" ,
|
parameter_bil.fPulseCoefficient);
|
UartDebugFun(Debug);
|
#endif
|
//}
|
}
|
else if(GPRS_SEND_BUFF[0]==0x00)
|
{
|
}
|
else
|
{
|
ack_flag = 1;
|
}
|
|
if(GPRS_SEND_BUFF[6]==0x01)
|
{
|
if((GPRS_SEND_BUFF[7]==1)||(GPRS_SEND_BUFF[7]==2))
|
{
|
parameter_bil.cBillingType = GPRS_SEND_BUFF[7];
|
FM25V02_data_write(parameter_bil.cBillingType,BILLING_TYPE_ADDR);
|
}
|
else
|
{
|
ack_flag = 2;
|
}
|
|
(*(uint8_t *)(&fSingleBillingFee)) = GPRS_SEND_BUFF[8];
|
(*((uint8_t *)(&fSingleBillingFee) + 1)) = GPRS_SEND_BUFF[9];
|
(*((uint8_t *)(&fSingleBillingFee) + 2)) = GPRS_SEND_BUFF[10];
|
(*((uint8_t *)(&fSingleBillingFee) + 3)) = GPRS_SEND_BUFF[11];
|
if((fSingleBillingFee>=0)&&(fSingleBillingFee<100.0))
|
{
|
parameter_bil.fSingleBillingFee = fSingleBillingFee;
|
FM25V02_data_write_float(SINGLE_BILLING_FEE_ADDR,parameter_bil.fSingleBillingFee);
|
}
|
else
|
{
|
ack_flag = 2;
|
}
|
(*(uint8_t *)(¶meter_bil.fStepBilling_First)) = GPRS_SEND_BUFF[12];
|
(*((uint8_t *)(¶meter_bil.fStepBilling_First) + 1)) = GPRS_SEND_BUFF[13];
|
(*((uint8_t *)(¶meter_bil.fStepBilling_First) + 2)) = GPRS_SEND_BUFF[14];
|
(*((uint8_t *)(¶meter_bil.fStepBilling_First) + 3)) = GPRS_SEND_BUFF[15];
|
FM25V02_data_write_float(STEP_BILLING_FIRST_ADDR,parameter_bil.fStepBilling_First);
|
(*(uint8_t *)(¶meter_bil.fStepBillingFee_First)) = GPRS_SEND_BUFF[16];
|
(*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 1)) = GPRS_SEND_BUFF[17];
|
(*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 2)) = GPRS_SEND_BUFF[18];
|
(*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 3)) = GPRS_SEND_BUFF[19];
|
FM25V02_data_write_float(STEP_BILLING_FEE_FIRST_ADDR,parameter_bil.fStepBillingFee_First);
|
(*(uint8_t *)(¶meter_bil.fStepBilling_Second)) = GPRS_SEND_BUFF[20];
|
(*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 1)) = GPRS_SEND_BUFF[21];
|
(*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 2)) = GPRS_SEND_BUFF[22];
|
(*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 3)) = GPRS_SEND_BUFF[23];
|
FM25V02_data_write_float(STEP_BILLING_SECOND_ADDR,parameter_bil.fStepBilling_Second);
|
(*(uint8_t *)(¶meter_bil.fStepBillingFee_Second)) = GPRS_SEND_BUFF[24];
|
(*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 1)) = GPRS_SEND_BUFF[25];
|
(*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 2)) = GPRS_SEND_BUFF[26];
|
(*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 3)) = GPRS_SEND_BUFF[27];
|
FM25V02_data_write_float(STEP_BILLING_FEE_SECOND_ADDR,parameter_bil.fStepBillingFee_Second);
|
(*(uint8_t *)(¶meter_bil.fStepBilling_Third)) = GPRS_SEND_BUFF[28];
|
(*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 1)) = GPRS_SEND_BUFF[29];
|
(*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 2)) = GPRS_SEND_BUFF[30];
|
(*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 3)) = GPRS_SEND_BUFF[31];
|
FM25V02_data_write_float(STEP_BILLING_THIRD_ADDR,parameter_bil.fStepBilling_Third);
|
(*(uint8_t *)(¶meter_bil.fStepBillingFee_Third)) = GPRS_SEND_BUFF[32];
|
(*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 1)) = GPRS_SEND_BUFF[33];
|
(*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 2)) = GPRS_SEND_BUFF[34];
|
(*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 3)) = GPRS_SEND_BUFF[35];
|
FM25V02_data_write_float(STEP_BILLING_FEE_THIRD_ADDR,parameter_bil.fStepBillingFee_Third);
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "cBillingType = %d \r\n" ,
|
parameter_bil.cBillingType);
|
UartDebugFun(Debug);
|
|
sprintf(Debug, "fSingleBillingFee = %.3f \r\n" ,
|
parameter_bil.fSingleBillingFee);
|
UartDebugFun(Debug);
|
|
#endif
|
|
}
|
else if(GPRS_SEND_BUFF[6]==0x00)
|
{
|
}
|
else
|
{
|
ack_flag = 2;
|
}
|
|
if(GPRS_SEND_BUFF[36]==0x01)
|
{
|
if(GPRS_SEND_BUFF[37]==0x00)
|
{
|
|
// Settlement_Para.RS485SettlementFlag = 0;
|
// FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
// ClearCardinalFlag();
|
|
}else if(GPRS_SEND_BUFF[37]==0x01)
|
{
|
// if(Settlement_Para.RS485SettlementFlag==0)
|
// {
|
// Settlement_Para.RS485SettlementFlag = 1;
|
// FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
// ClearCardinalFlag();
|
// }
|
}else if(GPRS_SEND_BUFF[37]==0x02)
|
{
|
// if(Settlement_Para.RS485SettlementFlag==0)
|
// {
|
// Settlement_Para.RS485SettlementFlag = 1;
|
// FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
// ClearCardinalFlag();
|
// }
|
}
|
else
|
{
|
ack_flag = 3;
|
}
|
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "Settlement_Para.RS485SettlementFlag = %d \r\n" ,
|
Settlement_Para.RS485SettlementFlag);
|
UartDebugFun(Debug);
|
#endif
|
}
|
else if(GPRS_SEND_BUFF[36]==0x00) //ÎÞÐÞ¸Ä
|
{
|
}
|
else
|
{
|
ack_flag = 3;
|
}
|
|
if(GPRS_SEND_BUFF[38]==0x01)
|
{
|
if(GPRS_SEND_BUFF[39]==0x01)
|
{
|
ClearCardinalFlag();
|
#ifdef DEBUG_OUT
|
UartDebugFun("GPRS ClearCardinal\r\n ");
|
#endif
|
}
|
else
|
{
|
|
}
|
}
|
else if(GPRS_SEND_BUFF[38]==0x00)
|
{
|
|
}
|
else
|
{
|
ack_flag = 3;
|
}
|
|
|
|
if(GPRS_SEND_BUFF[41]==0x01)
|
{
|
parameter_bil.iBalanceInsufAlarmAmount = (uint16_t)GPRS_SEND_BUFF[43] * 256 + (uint16_t)GPRS_SEND_BUFF[42];
|
FM25V02_data_write_uint16(BALANCE_INSUF_ALARM_AMOUNT_ADDR,parameter_bil.iBalanceInsufAlarmAmount);
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "iBalanceInsufAlarmAmount = %d \r\n" ,
|
parameter_bil.iBalanceInsufAlarmAmount);
|
UartDebugFun(Debug);
|
#endif
|
}
|
else if(GPRS_SEND_BUFF[41]==0x00)
|
{
|
}
|
else
|
{
|
ack_flag = 4;
|
}
|
|
if(GPRS_SEND_BUFF[44]==0x01)
|
{
|
(*(uint8_t *)(¶meter_bil.fCredits)) = GPRS_SEND_BUFF[45];
|
(*((uint8_t *)(¶meter_bil.fCredits) + 1)) = GPRS_SEND_BUFF[46];
|
(*((uint8_t *)(¶meter_bil.fCredits) + 2)) = GPRS_SEND_BUFF[47];
|
(*((uint8_t *)(¶meter_bil.fCredits) + 3)) = GPRS_SEND_BUFF[48];
|
FM25V02_data_write_float(CREDITS_ADDR,parameter_bil.fCredits);
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "fCredits = %.3f \r\n" ,parameter_bil.fCredits);
|
UartDebugFun(Debug);
|
#endif
|
}
|
else if(GPRS_SEND_BUFF[44]==0x00)
|
{
|
|
}
|
else
|
{
|
ack_flag = 5;
|
}
|
|
if(Settlement_Para.fBalance<=parameter_bil.iBalanceInsufAlarmAmount)
|
{
|
system_alarm.alarm_Balance_Small_LCDFLAG = 0x01;
|
}
|
else
|
{
|
system_alarm.alarm_Balance_Small_LCDFLAG = 0x00;
|
}
|
|
|
/*Record the current parameters*/
|
BillRecord();
|
}
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "ack_flag = %d \r\n" ,
|
ack_flag);
|
UartDebugFun(Debug);
|
#endif
|
|
return ack_flag;
|
// if(ack_flag == 0)
|
// {
|
// return 0;
|
// }
|
// else
|
// {
|
// return 1;
|
// }
|
}
|
|
|
void parameters_2buff(uint8_t dev_or_bil ,uint8_t key)
|
{
|
uint8_t index_i;
|
|
if(dev_or_bil == 0)
|
{
|
for(index_i=0;index_i<100;index_i++)
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+index_i] = 0x00 ;
|
}
|
|
for(index_i=0;index_i<8;index_i++)
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + index_i] = gprs_protocol_header.DeviceAddress[index_i] ; //????
|
}
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+8] = device_Parm.Tyf;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+9] = device_Parm.Tf;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+10] = device_Parm.Typ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+11] = device_Parm.Tp;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+12] = (device_Parm.sendTiming_hour)|device_Parm.time1_flag;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+13] = device_Parm.sendTiming_min;
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+14] = (device_Parm.sendTiming_hour2)|device_Parm.time2_flag;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+15] = device_Parm.sendTiming_min2;
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+16] = device_Parm.GPRS_RESTARTTIME;
|
|
if(parameter_bil.cDataObtainType == PULSE_MODE)
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+17] = 0;
|
}
|
else if(parameter_bil.cDataObtainType == RS485_AND_PULSE_MODE)
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+17] = 1;
|
}
|
else if(parameter_bil.cDataObtainType == RS485_MODE)
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+17] = 2;
|
}
|
else
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+17] = 0;
|
}
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+18] = parmAccess.u16MeterTypeCode & 0xff;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+19] = (parmAccess.u16MeterTypeCode>>8) & 0xff;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+20] = parmAccess.u8BaudRateCode;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+21] = parmAccess.u8RS485Parity;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+22] = parmAccess.u8EXPVoltageCode;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+23] = parameter_bil.u8PulseWidth;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+24] = parmAccess.u8LowPowerAlarmLine;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+25] = LCD_flag;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+26] = parmAccess.u8slaveAddress;
|
|
for(index_i=0;index_i<11;index_i++)
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+27+index_i] = 0;
|
}
|
|
if((key&0x80) ==0x00) //???
|
{
|
|
}
|
else
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+38] = 0x80;//
|
for(index_i=0;index_i<9;index_i++)
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+39] = 0x00;
|
}
|
for(index_i=0;index_i<3;index_i++)
|
{
|
AES128_ECB_encrypt(&GPRS_SEND_BUFF[FIRST_DATA_SHIFT+index_i*16], KVer_AES_128, &GPRS_SEND_BUFF[FIRST_DATA_SHIFT+index_i*16]);
|
}
|
}
|
}
|
else if(dev_or_bil == 0x01)
|
{
|
for(index_i=0;index_i<100;index_i++)
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+index_i] = 0x00 ;
|
}
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT] = 0 ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 4] = (*((uint8_t *)(¶meter_bil.fPulseCoefficient) + 3)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 3] = (*((uint8_t *)(¶meter_bil.fPulseCoefficient) + 2)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 2] = (*((uint8_t *)(¶meter_bil.fPulseCoefficient) + 1)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 1] = (*(uint8_t *)(¶meter_bil.fPulseCoefficient)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 5] = parameter_bil.cBillingType ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 9] = (*((uint8_t *)(¶meter_bil.fSingleBillingFee) + 3)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 8] = (*((uint8_t *)(¶meter_bil.fSingleBillingFee) + 2)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 7] = (*((uint8_t *)(¶meter_bil.fSingleBillingFee) + 1)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 6] = (*(uint8_t *)(¶meter_bil.fSingleBillingFee)) ;
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 13] = (*((uint8_t *)(¶meter_bil.fStepBilling_First) + 3)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 12] = (*((uint8_t *)(¶meter_bil.fStepBilling_First) + 2)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 11] = (*((uint8_t *)(¶meter_bil.fStepBilling_First) + 1)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 10] = (*(uint8_t *)(¶meter_bil.fStepBilling_First)) ;
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 17] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 3)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 16] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 2)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 15] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 1)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 14] = (*(uint8_t *)(¶meter_bil.fStepBillingFee_First)) ;
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 21] = (*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 3)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 20] = (*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 2)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 19] = (*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 1)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 18] = (*(uint8_t *)(¶meter_bil.fStepBilling_Second)) ;
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 25] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 3)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 24] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 2)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 23] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 1)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 22] = (*(uint8_t *)(¶meter_bil.fStepBillingFee_Second)) ;
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 29] = (*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 3)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 28] = (*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 2)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 27] = (*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 1)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 26] = (*(uint8_t *)(¶meter_bil.fStepBilling_Third)) ;
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 33] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 3)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 32] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 2)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 31] = (*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 1)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 30] = (*(uint8_t *)(¶meter_bil.fStepBillingFee_Third)) ;
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 34] = (uint8_t)(parameter_bil.iBalanceInsufAlarmAmount);
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 35] = (uint8_t)(parameter_bil.iBalanceInsufAlarmAmount >>8);
|
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 39] = (*((uint8_t *)(¶meter_bil.fCredits) + 3)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 38] = (*((uint8_t *)(¶meter_bil.fCredits) + 2)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 37] = (*((uint8_t *)(¶meter_bil.fCredits) + 1)) ;
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 36] = (*(uint8_t *)(¶meter_bil.fCredits)) ;
|
|
if(Settlement_Para.RS485SettlementFlag ==0)
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 40] = 0x00;
|
}else if(Settlement_Para.RS485SettlementFlag ==1)
|
{
|
if((parameter_bil.cDataObtainType & PULSE_MODE)== PULSE_MODE)
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 40] = 0x02;
|
}else
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 40] = 0x01;
|
}
|
}
|
else
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT + 40] = 0x00;
|
}
|
|
|
for(index_i=0;index_i<15;index_i++)
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+41+index_i] = 0;
|
}
|
|
if((key&0x80) ==0x00) //???
|
{
|
|
}
|
else
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+56] = 0x80;//
|
for(index_i=0;index_i<7;index_i++)
|
{
|
GPRS_SEND_BUFF[FIRST_DATA_SHIFT+57] = 0x00;
|
}
|
for(index_i=0;index_i<4;index_i++)
|
{
|
AES128_ECB_encrypt(&GPRS_SEND_BUFF[FIRST_DATA_SHIFT+index_i*16], KVer_AES_128, &GPRS_SEND_BUFF[FIRST_DATA_SHIFT+index_i*16]);
|
}
|
}
|
}
|
}
|
|
void SendDataToSTM32()
|
{
|
int i_index;
|
while(RESET == UARTx_ISR_TXSE_Chk(UART3));
|
UARTx_TXBUF_Write(UART3, 0x67);
|
while(RESET == UARTx_ISR_TXSE_Chk(UART3));
|
UARTx_TXBUF_Write(UART3, (uint8_t)(CS_addr+2));
|
while(RESET == UARTx_ISR_TXSE_Chk(UART3));
|
UARTx_TXBUF_Write(UART3, (uint8_t)((CS_addr+2) >> 8));
|
|
for(i_index = 0;i_index < CS_addr+2;i_index ++)
|
{
|
while(RESET == UARTx_ISR_TXSE_Chk(UART3));
|
UARTx_TXBUF_Write(UART3, GPRS_SEND_BUFF[i_index]);
|
}
|
|
while(RESET == UARTx_ISR_TXSE_Chk(UART3));
|
|
// //VariaDlg.send_finish_ok = 1;
|
}
|
|
void calculate_Sample_Time(uint16_t NOW_year,uint8_t NOW_month,uint8_t NOW_day) //¼ÆËãÏ´βɼ¯Êý¾ÝµÄʱ¼ä
|
{
|
// uint8_t RealTime_D,RealTime_H,RealTime_M; //
|
uint8_t realTime_D,realTime_H,realTime_M; //Öмä·ÇBCDʱ¼ä
|
uint8_t real_last_Sample_D,real_last_Sample_H,real_last_Sample_M; //Éϴβɼ¯µÄ·ÇBCDʱ¼ä
|
|
real_last_Sample_D = ((Last_Sample_D&0x00FF)>>4)*10+(Last_Sample_D&0x000F);
|
real_last_Sample_H = ((Last_Sample_H&0x00FF)>>4)*10+(Last_Sample_H&0x000F); //
|
real_last_Sample_M = ((Last_Sample_M&0x00FF)>>4)*10+(Last_Sample_M&0x000F);
|
|
// RealTime_H = ((device_Parm.sendTiming_hour)>>4)*10 + (device_Parm.sendTiming_hour&0x0F);
|
// RealTime_M = ((device_Parm.sendTiming_min)>>4)*10 + (device_Parm.sendTiming_min&0x0F);
|
|
if(device_Parm.Tyf == 0x04) //·ÖÖÓ
|
{
|
realTime_H = real_last_Sample_H + (real_last_Sample_M + device_Parm.Tf)/60;
|
realTime_D = real_last_Sample_D;
|
//Next_real_Sample_D = ((NOW_day&0x00FF)>>4)*10+(NOW_day&0x000F);
|
while(realTime_H >= 24)
|
{
|
//Next_real_Sample_D = Next_real_Sample_D + 1;
|
realTime_D = realTime_D + 1;
|
realTime_H = realTime_H - 24;
|
}
|
|
realTime_M = real_last_Sample_M + device_Parm.Tf;
|
while(realTime_M >= 60)
|
realTime_M -= 60;
|
|
//Next_real_Sample_D = realTime_D;
|
Next_real_Sample_H = realTime_H;
|
Next_real_Sample_M = realTime_M;
|
|
}else if(device_Parm.Tyf == 0x05)//Сʱ
|
{
|
realTime_H = real_last_Sample_H + device_Parm.Tf;
|
|
//Next_real_Sample_D = ((NOW_day&0x00FF)>>4)*10+(NOW_day&0x000F);
|
realTime_D = real_last_Sample_D;
|
while(realTime_H >= 24)
|
{
|
//Next_real_Sample_D = Next_real_Sample_D + 1;
|
realTime_D = realTime_D + 1;
|
realTime_H = realTime_H - 24;
|
}
|
|
Next_real_Sample_H = realTime_H;
|
Next_real_Sample_M = 0;
|
|
}else if(device_Parm.Tyf == 0x06)//Ìì
|
{
|
realTime_D = real_last_Sample_D + device_Parm.Tf;
|
|
Next_real_Sample_H = 0;
|
Next_real_Sample_M = 0;
|
}
|
|
if((NOW_month== 1)||(NOW_month== 3)||(NOW_month== 5)||(NOW_month== 7)||(NOW_month== 8)||(NOW_month== 10)||(NOW_month== 12))
|
{
|
while(realTime_D > 31)
|
{
|
realTime_D = realTime_D - 31;
|
}
|
}
|
else if((NOW_month== 4)||(NOW_month== 6)||(NOW_month== 9)||(NOW_month== 11))
|
{
|
while(realTime_D > 30)
|
{
|
realTime_D = realTime_D - 30;
|
}
|
}
|
else if(NOW_month== 2)
|
{
|
if((NOW_year % 100) == 0 )
|
{
|
if((NOW_year % 400) == 0 )
|
{
|
while(realTime_D > 29)
|
{
|
realTime_D = realTime_D - 29;
|
}
|
}
|
else
|
{
|
while(realTime_D > 28)
|
{
|
realTime_D = realTime_D - 28;
|
}
|
}
|
}
|
else
|
{
|
if((NOW_year % 4) == 0 )
|
{
|
while(realTime_D > 29)
|
{
|
realTime_D = realTime_D - 29;
|
}
|
}
|
else
|
{
|
while(realTime_D > 28)
|
{
|
realTime_D = realTime_D - 28;
|
}
|
}
|
}
|
}
|
|
Next_real_Sample_D = realTime_D;
|
|
Next_Sample_D = 16*(Next_real_Sample_D/10)+Next_real_Sample_D%10;
|
Next_Sample_H = 16*(Next_real_Sample_H/10)+Next_real_Sample_H%10;
|
Next_Sample_M = 16*(Next_real_Sample_M/10)+Next_real_Sample_M%10;
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "Next_real_Sample =%d:%d:%d\r\n" ,
|
Next_real_Sample_D,Next_real_Sample_H,Next_real_Sample_M);
|
UartDebugFun(Debug);
|
#endif
|
|
}
|
|
void calculate_Send_Time(uint16_t NOW_year,uint8_t NOW_month,uint8_t NOW_day) //¼ÆËã·¢ËÍÊý¾ÝµÄʱ¼ä
|
{
|
uint8_t real_last_Send_D,real_last_Send_H,real_last_Send_M; //Éϴη¢ËÍʱ¼ä·ÇBCD
|
|
real_last_Send_D = ((Last_Send_D&0x00FF)>>4)*10+(Last_Send_D&0x000F);
|
real_last_Send_H = ((Last_Send_H&0x00FF)>>4)*10+(Last_Send_H&0x000F);
|
real_last_Send_M = ((Last_Send_M&0x00FF)>>4)*10+(Last_Send_M&0x000F);
|
|
if(device_Parm.Typ == 0x84)
|
{
|
device_Parm.real_sendTiming_hour = real_last_Send_H + (real_last_Send_M + device_Parm.Tp)/60;
|
|
device_Parm.real_sendTiming_day = real_last_Send_D;
|
while(device_Parm.real_sendTiming_hour >= 24)
|
{
|
device_Parm.real_sendTiming_day = real_last_Send_D + 1;
|
device_Parm.real_sendTiming_hour = device_Parm.real_sendTiming_hour - 24;
|
}
|
|
device_Parm.real_sendTiming_min = real_last_Send_M + device_Parm.Tp;
|
while(device_Parm.real_sendTiming_min >= 60)
|
device_Parm.real_sendTiming_min -= 60;
|
|
}
|
else if(device_Parm.Typ == 0x85)
|
{
|
device_Parm.real_sendTiming_hour = real_last_Send_H + device_Parm.Tp;
|
device_Parm.real_sendTiming_day = real_last_Send_D;
|
while(device_Parm.real_sendTiming_hour >= 24)
|
{
|
device_Parm.real_sendTiming_day = real_last_Send_D + 1;
|
device_Parm.real_sendTiming_hour = device_Parm.real_sendTiming_hour - 24;
|
}
|
device_Parm.real_sendTiming_min = 0;
|
}
|
else if(device_Parm.Typ == 0x86)
|
{
|
device_Parm.real_sendTiming_day = real_last_Send_D + device_Parm.Tp;
|
|
device_Parm.real_sendTiming_hour = 0;
|
device_Parm.real_sendTiming_min = 0;
|
}
|
|
if((NOW_month== 1)||(NOW_month== 3)||(NOW_month== 5)||(NOW_month== 7)||(NOW_month== 8)||(NOW_month== 10)||(NOW_month== 12))
|
{
|
while(device_Parm.real_sendTiming_day > 31)
|
{
|
device_Parm.real_sendTiming_day = device_Parm.real_sendTiming_day - 31;
|
}
|
}
|
else if((NOW_month== 4)||(NOW_month== 6)||(NOW_month== 9)||(NOW_month== 11))
|
{
|
while(device_Parm.real_sendTiming_day > 30)
|
{
|
device_Parm.real_sendTiming_day = device_Parm.real_sendTiming_day - 30;
|
}
|
}
|
else if(NOW_month== 2)
|
{
|
if((NOW_year % 100) == 0 )
|
{
|
if((NOW_year % 400) == 0 )
|
{
|
while(device_Parm.real_sendTiming_day > 29)
|
{
|
device_Parm.real_sendTiming_day = device_Parm.real_sendTiming_day - 29;
|
}
|
}
|
else
|
{
|
while(device_Parm.real_sendTiming_day > 28)
|
{
|
device_Parm.real_sendTiming_day = device_Parm.real_sendTiming_day - 28;
|
}
|
}
|
}
|
else
|
{
|
if((NOW_year % 4) == 0 )
|
{
|
while(device_Parm.real_sendTiming_day > 29)
|
{
|
device_Parm.real_sendTiming_day = device_Parm.real_sendTiming_day - 29;
|
}
|
}
|
else
|
{
|
while(device_Parm.real_sendTiming_day > 28)
|
{
|
device_Parm.real_sendTiming_day = device_Parm.real_sendTiming_day - 28;
|
}
|
}
|
}
|
}
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "jiange real_sendTiming =%d:%d:%d\r\n" ,
|
device_Parm.real_sendTiming_day,device_Parm.real_sendTiming_hour,device_Parm.real_sendTiming_min);
|
UartDebugFun(Debug);
|
#endif
|
}
|
|
void compara_Send_Sample(uint8_t NOW_year,uint8_t NOW_month,uint8_t NOW_day ,uint8_t NOW_hour,uint8_t NOW_min) //±È½ÏÏ´βɼ¯¸ü½ü»¹ÊÇ·¢Ë͸ü½ü²¢ÉèÖÃÄÖÖÓ
|
{
|
// uint8_t real_last_Sample_D,real_last_Sample_H,real_last_Sample_M;
|
uint16_t Send_interval = 0;
|
uint16_t Sample_interval = 0;
|
uint8_t RealTime_D,RealTime_H,RealTime_M; //µ±Ç°Ê±¼ä·ÇBCD
|
uint8_t RTCADAY,RTCAHOUR,RTCAMIN;
|
|
RealTime_D = ((NOW_day&0x00FF)>>4)*10+(NOW_day&0x000F);
|
RealTime_H = ((NOW_hour&0x00FF)>>4)*10+(NOW_hour&0x000F);
|
RealTime_M = ((NOW_min&0x00FF)>>4)*10+(NOW_min&0x000F);
|
|
if((device_Parm.time1_flag == 0x80)&&(device_Parm.time2_flag == 0x80))
|
{
|
if(NOW_hour < device_Parm.sendTiming_hour)
|
{
|
device_Parm.RTC_sendTiming_hour = device_Parm.sendTiming_hour;
|
device_Parm.RTC_sendTiming_min = device_Parm.sendTiming_min;
|
}
|
else if((NOW_hour == device_Parm.sendTiming_hour)&&(NOW_min < device_Parm.sendTiming_min ))
|
{
|
device_Parm.RTC_sendTiming_hour = device_Parm.sendTiming_hour;
|
device_Parm.RTC_sendTiming_min = device_Parm.sendTiming_min;
|
}
|
else if(NOW_hour > device_Parm.sendTiming_hour2)
|
{
|
device_Parm.RTC_sendTiming_hour = device_Parm.sendTiming_hour;
|
device_Parm.RTC_sendTiming_min = device_Parm.sendTiming_min;
|
}
|
else if((NOW_hour == device_Parm.sendTiming_hour2)&&(NOW_min >= device_Parm.sendTiming_min2 ))
|
{
|
device_Parm.RTC_sendTiming_hour = device_Parm.sendTiming_hour;
|
device_Parm.RTC_sendTiming_min = device_Parm.sendTiming_min;
|
}
|
else
|
{
|
device_Parm.RTC_sendTiming_hour = device_Parm.sendTiming_hour2;
|
device_Parm.RTC_sendTiming_min = device_Parm.sendTiming_min2;
|
}
|
}
|
else if(device_Parm.time1_flag == 0x80)
|
{
|
device_Parm.RTC_sendTiming_hour = device_Parm.sendTiming_hour;
|
device_Parm.RTC_sendTiming_min = device_Parm.sendTiming_min;
|
}
|
else if(device_Parm.time2_flag == 0x80)
|
{
|
device_Parm.RTC_sendTiming_hour = device_Parm.sendTiming_hour2;
|
device_Parm.RTC_sendTiming_min = device_Parm.sendTiming_min2;
|
}
|
else //??????? ???????
|
{
|
|
}
|
|
if((device_Parm.time1_flag == 0x80)||(device_Parm.time2_flag == 0x80)) //¶¨Ê±Éϸæ±È½Ï
|
{
|
device_Parm.real_sendTiming_hour = ((device_Parm.RTC_sendTiming_hour&0x00FF)>>4)*10+(device_Parm.RTC_sendTiming_hour&0x000F);
|
device_Parm.real_sendTiming_min = ((device_Parm.RTC_sendTiming_min&0x00FF)>>4)*10+(device_Parm.RTC_sendTiming_min&0x000F);
|
|
if((device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min)<=(RealTime_H * 60 + RealTime_M) )
|
{
|
Send_interval = (device_Parm.real_sendTiming_hour + 24 ) * 60 + device_Parm.real_sendTiming_min - (RealTime_H * 60 + RealTime_M);
|
}
|
else
|
{
|
Send_interval = device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_H * 60 + RealTime_M);
|
}
|
|
if((Next_real_Sample_H *60 + Next_real_Sample_M) <= (RealTime_H * 60 + RealTime_M))
|
{
|
Sample_interval = (Next_real_Sample_H+24) *60 + Next_real_Sample_M - (RealTime_H * 60 + RealTime_M);
|
}
|
else
|
{
|
Sample_interval = Next_real_Sample_H *60 + Next_real_Sample_M - (RealTime_H * 60 + RealTime_M);
|
}
|
|
if(Send_interval < Sample_interval) //Éϸæ¸ü½ü£¬Ï´ÎÄÖÖÓΪÉϸæÄÖÖÓ
|
{
|
Sending_flag = 0;
|
}
|
else if(Send_interval == Sample_interval) //ÉϸæºÍ²É¼¯Ê±¼äÒ»Ò»ÖÂ
|
{
|
Sending_flag = 2;
|
}
|
else //(Send_interval > Sample_interval) //²É¼¯¸ü½ü£¬Ï´ÎÄÖÖÓʱ¼äΪ²É¼¯
|
{
|
Sending_flag = 1;
|
}
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "dingshi real_sendTiming =%d:%d:%d\r\n" ,
|
device_Parm.real_sendTiming_day,device_Parm.real_sendTiming_hour,device_Parm.real_sendTiming_min);
|
UartDebugFun(Debug);
|
#endif
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "dingshi Sending_flag = %d ,%x:%x\r\n" ,
|
Sending_flag,RTCAHOUR&0x7f,RTCAMIN&0x7f);
|
UartDebugFun(Debug);
|
#endif
|
|
}
|
else
|
{
|
if((device_Parm.Typ == 0x84)||(device_Parm.Typ == 0x85))
|
{
|
if((device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min)<=(RealTime_H * 60 + RealTime_M))
|
{
|
Send_interval = (device_Parm.real_sendTiming_hour + 24 ) * 60 + device_Parm.real_sendTiming_min - (RealTime_H * 60 + RealTime_M);
|
}
|
else
|
{
|
Send_interval = device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_H * 60 + RealTime_M);
|
}
|
|
if((Next_real_Sample_H *60 + Next_real_Sample_M) <= (RealTime_H * 60 + RealTime_M))
|
{
|
Sample_interval = (Next_real_Sample_H+24) *60 + Next_real_Sample_M - (RealTime_H * 60 + RealTime_M);
|
}
|
else
|
{
|
Sample_interval = Next_real_Sample_H *60 + Next_real_Sample_M - (RealTime_H * 60 + RealTime_M);
|
}
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "send:Sample = %d:%d\r\n" ,
|
Send_interval,Sample_interval);
|
UartDebugFun(Debug);
|
#endif
|
|
if(Send_interval < Sample_interval)
|
{
|
Sending_flag = 0;
|
}
|
else if(Send_interval == Sample_interval)
|
{
|
Sending_flag = 2;
|
}
|
else //(Send_interval > Sample_interval)
|
{
|
Sending_flag = 1;
|
}
|
|
device_Parm.RTC_sendTiming_day = 16 * (device_Parm.real_sendTiming_day / 10) + device_Parm.real_sendTiming_day % 10;
|
device_Parm.RTC_sendTiming_hour = 16 * (device_Parm.real_sendTiming_hour / 10) + device_Parm.real_sendTiming_hour % 10;
|
device_Parm.RTC_sendTiming_min = 16 * (device_Parm.real_sendTiming_min / 10) + device_Parm.real_sendTiming_min % 10;
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "jiange8485 Sending_flag = %d ,%x:%x\r\n" ,
|
Sending_flag,device_Parm.RTC_sendTiming_hour&0x7f,device_Parm.RTC_sendTiming_min&0x7f);
|
UartDebugFun(Debug);
|
#endif
|
|
}
|
/* else if(device_Parm.Typ == 0x85)
|
{
|
|
}*/
|
else if(device_Parm.Typ == 0x86)
|
{
|
if((device_Parm.Tyf == 0x04) || (device_Parm.Tyf == 0x05))
|
{
|
if(device_Parm.real_sendTiming_day <= RealTime_D)
|
{
|
if((NOW_month== 1)||(NOW_month== 3)||(NOW_month== 5)||(NOW_month== 7)||(NOW_month== 8)||(NOW_month== 10)||(NOW_month== 12))
|
{
|
Send_interval = (device_Parm.real_sendTiming_day+31) *1440 + device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_D * 1440 + RealTime_H * 60 + RealTime_M);
|
}
|
else if((NOW_month== 4)||(NOW_month== 6)||(NOW_month== 9)||(NOW_month== 11))
|
{
|
Send_interval = (device_Parm.real_sendTiming_day+30) *1440 + device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_D * 1440 + RealTime_H * 60 + RealTime_M);
|
}
|
else if(NOW_month== 2)
|
{
|
if((NOW_year % 100) == 0 )
|
{
|
if((NOW_year % 400) == 0 )
|
{
|
Send_interval = (device_Parm.real_sendTiming_day+29) *1440 + device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_D * 1440 + RealTime_H * 60 + RealTime_M);
|
}
|
else
|
{
|
Send_interval = (device_Parm.real_sendTiming_day+28) *1440 + device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_D * 1440 + RealTime_H * 60 + RealTime_M);
|
}
|
}
|
else
|
{
|
if((NOW_year % 4) == 0 )
|
{
|
Send_interval = (device_Parm.real_sendTiming_day+29) *1440 + device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_D * 1440 + RealTime_H * 60 + RealTime_M);
|
}
|
else
|
{
|
Send_interval = (device_Parm.real_sendTiming_day+28) *1440 + device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_D * 1440 + RealTime_H * 60 + RealTime_M);
|
}
|
}
|
}
|
}
|
else
|
{
|
Send_interval = device_Parm.real_sendTiming_day *1440 + device_Parm.real_sendTiming_hour * 60 + device_Parm.real_sendTiming_min - (RealTime_D * 1440 + RealTime_H * 60 + RealTime_M);
|
}
|
|
if((Next_real_Sample_H *60 + Next_real_Sample_M) <= (RealTime_H * 60 + RealTime_M))
|
{
|
Sample_interval = (Next_real_Sample_H+24) *60 + Next_real_Sample_M - (RealTime_H * 60 + RealTime_M);
|
}
|
else
|
{
|
Sample_interval = Next_real_Sample_H *60 + Next_real_Sample_M - (RealTime_H * 60 + RealTime_M);
|
}
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "send:Sample = %d:%d\r\n" ,
|
Send_interval,Sample_interval);
|
UartDebugFun(Debug);
|
#endif
|
|
if(Send_interval < Sample_interval)
|
{
|
Sending_flag = 0;
|
}
|
else if(Send_interval == Sample_interval)
|
{
|
Sending_flag = 2;
|
}
|
else //(Send_interval > Sample_interval)
|
{
|
Sending_flag = 1;
|
}
|
|
device_Parm.RTC_sendTiming_day = 16 * (device_Parm.real_sendTiming_day / 10) + device_Parm.real_sendTiming_day % 10;
|
device_Parm.RTC_sendTiming_hour = 16 * (device_Parm.real_sendTiming_hour / 10) + device_Parm.real_sendTiming_hour % 10;
|
device_Parm.RTC_sendTiming_min = 16 * (device_Parm.real_sendTiming_min / 10) + device_Parm.real_sendTiming_min % 10;
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "jiange860405 Sending_flag = %d ,%x :%x:%x\r\n" ,
|
Sending_flag,device_Parm.RTC_sendTiming_day&0x7f,device_Parm.RTC_sendTiming_hour&0x7f,device_Parm.RTC_sendTiming_min&0x7f);
|
UartDebugFun(Debug);
|
#endif
|
|
}
|
else //(device_Parm.Tyf == 0x06)
|
{
|
//ÌìÊý»¹Ô£¬±ÈÈç½ñÌì31ºÅ£¬Ï´ÎÉϸæ1ºÅ£¬ÐèÒª°ÑÌìÊý±ä³É32ºÅ
|
if(device_Parm.real_sendTiming_day < RealTime_D)
|
{
|
if((NOW_month== 1)||(NOW_month== 3)||(NOW_month== 5)||(NOW_month== 7)||(NOW_month== 8)||(NOW_month== 10)||(NOW_month== 12))
|
{
|
Send_interval = device_Parm.real_sendTiming_day+31 - RealTime_D ;
|
}
|
else if((NOW_month== 4)||(NOW_month== 6)||(NOW_month== 9)||(NOW_month== 11))
|
{
|
Send_interval = device_Parm.real_sendTiming_day+30 - RealTime_D ;
|
}
|
else if(NOW_month== 2)
|
{
|
if((NOW_year % 100) == 0 )
|
{
|
if((NOW_year % 400) == 0 )
|
{
|
Send_interval = device_Parm.real_sendTiming_day+29 - RealTime_D ;
|
}
|
else
|
{
|
Send_interval = device_Parm.real_sendTiming_day+28 - RealTime_D ;
|
}
|
}
|
else
|
{
|
if((NOW_year % 4) == 0 )
|
{
|
Send_interval = device_Parm.real_sendTiming_day+29 - RealTime_D ;
|
}
|
else
|
{
|
Send_interval = device_Parm.real_sendTiming_day+28 - RealTime_D ;
|
}
|
}
|
}
|
}
|
else
|
{
|
Send_interval = device_Parm.real_sendTiming_day - RealTime_D ;
|
}
|
|
if(Next_real_Sample_D <= RealTime_D)
|
{
|
if((NOW_month== 1)||(NOW_month== 3)||(NOW_month== 5)||(NOW_month== 7)||(NOW_month== 8)||(NOW_month== 10)||(NOW_month== 12))
|
{
|
Sample_interval = Next_real_Sample_D+31 - RealTime_D ;
|
}
|
else if((NOW_month== 4)||(NOW_month== 6)||(NOW_month== 9)||(NOW_month== 11))
|
{
|
Sample_interval = Next_real_Sample_D+30 - RealTime_D ;
|
}
|
else if(NOW_month== 2)
|
{
|
if((NOW_year % 100) == 0 )
|
{
|
if((NOW_year % 400) == 0 )
|
{
|
Sample_interval = Next_real_Sample_D+29 - RealTime_D ;
|
}
|
else
|
{
|
Sample_interval = Next_real_Sample_D+28 - RealTime_D ;
|
}
|
}
|
else
|
{
|
if((NOW_year % 4) == 0 )
|
{
|
Sample_interval = Next_real_Sample_D + 29 - RealTime_D ;
|
}
|
else
|
{
|
Sample_interval = Next_real_Sample_D + 28 - RealTime_D ;
|
}
|
}
|
}
|
|
//Sample_interval = (Next_real_Sample_D+24) *60 + Next_real_Sample_M - (RealTime_H * 60 + RealTime_M);
|
}
|
else
|
{
|
Sample_interval = Next_real_Sample_D - RealTime_D ;
|
}
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "send:Sample = %d:%d\r\n" ,
|
Send_interval,Sample_interval);
|
UartDebugFun(Debug);
|
#endif
|
|
if(Send_interval < Sample_interval)
|
{
|
Sending_flag = 0;
|
}
|
else if(Send_interval == Sample_interval)
|
{
|
Sending_flag = 2;
|
}
|
else //(Send_interval > Sample_interval)
|
{
|
Sending_flag = 1;
|
}
|
device_Parm.RTC_sendTiming_day = 16 * (device_Parm.real_sendTiming_day / 10) + device_Parm.real_sendTiming_day % 10;
|
device_Parm.RTC_sendTiming_hour = 0x00;
|
device_Parm.RTC_sendTiming_min = 0x00;
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug, "jiange8606 Sending_flag = %d ,%x :%x:%x\r\n" ,
|
Sending_flag,device_Parm.RTC_sendTiming_day&0x7f,device_Parm.RTC_sendTiming_hour&0x7f,device_Parm.RTC_sendTiming_min&0x7f);
|
UartDebugFun(Debug);
|
#endif
|
}
|
}
|
else
|
{
|
}
|
}
|
}
|
|
void Variable_AllInit()
|
{
|
uint16_t NOW_year;
|
uint8_t NOW_month,NOW_day,NOW_hour,NOW_min;
|
|
|
/*************¶Á±í²ÎÊý**************/
|
k_index = 0; //Êý¾Ý¶ÁÈ¡µÄʱºò¼ÆÊýÓÃ
|
ddr_index_2 = 0;
|
|
RegisterInit(); //¹Ì¼þÈí¼þ°æ±¾µÈÐÅÏ¢
|
|
/***********¶ÁÈ¡´æ´¢µÄÖµ*****************/
|
|
/*******************·§ÃÅÏà¹Ø******************/
|
|
OpenValveAuthorizeFLAG = FM25V02_data_read(OPEN_VALVE_AUTHORIZE_FLAG_ADDR);
|
if(OpenValveAuthorizeFLAG==0x01)
|
{
|
}else if(((OpenValveAuthorizeFLAG&0x0f)==0x01)&&((OpenValveAuthorizeFLAG>>4)<9)&&((OpenValveAuthorizeFLAG>>4)>0)) //Ç¿ÖÆ¿ª·§£¬Ò쳣״̬ÏÂÒ²²»¹Ø·§
|
{
|
}
|
else
|
{
|
OpenValveAuthorizeFLAG = 0x00;
|
FM25V02_data_write(OpenValveAuthorizeFLAG,OPEN_VALVE_AUTHORIZE_FLAG_ADDR);
|
}
|
|
|
OpenValveAuthorizeTimeCnt = FM25V02_data_read_uint32(OPEN_VALVE_AUTHORIZE_TIME_CNT_ADDRA);
|
if(OpenValveAuthorizeTimeCnt>604800)
|
{
|
OpenValveAuthorizeTimeCnt = 0;
|
FM25V02_data_write_uint32(OPEN_VALVE_AUTHORIZE_TIME_CNT_ADDRA, OpenValveAuthorizeTimeCnt) ;
|
}
|
|
ValveOpenTimes = FM25V02_data_read_uint16(VALVE_OPEN_TIMES_ADDR);
|
if(ValveOpenTimes>65530)
|
{
|
ValveOpenTimes = 0;
|
FM25V02_data_write_uint16(VALVE_OPEN_TIMES_ADDR,ValveOpenTimes);
|
}
|
|
ValveCloseTimes = FM25V02_data_read_uint16(VALVE_CLOSE_TIMES_ADDR);
|
if(ValveCloseTimes>65530)
|
{
|
ValveCloseTimes = 0;
|
FM25V02_data_write_uint16(VALVE_CLOSE_TIMES_ADDR,ValveCloseTimes);
|
}
|
|
|
/***********¿ª»§×´Ì¬*****************/
|
device_Parm.AccountStatus = FM25V02_data_read(ACCOUNT_STATUS_ADDR);
|
device_Parm.AccountStatus = FM25V02_data_read(ACCOUNT_STATUS_ADDR);
|
if(device_Parm.AccountStatus>0x01)
|
{
|
device_Parm.AccountStatus = FM25V02_data_read(ACCOUNT_STATUS_ADDR);
|
if(device_Parm.AccountStatus>0x01)
|
{
|
device_Parm.AccountStatus = 0;
|
FM25V02_data_write(device_Parm.AccountStatus,ACCOUNT_STATUS_ADDR);
|
//Èç¹ûÊ×´ÎÆô¶¯£¬¿ª»§×´Ì¬ÎªÊÇ·Ç0ºÍ1µÄ£¬ÄǾͳõʼÓà¶îΪ10
|
Settlement_Para.fBalance = 10;
|
|
Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR);
|
|
}
|
}
|
|
|
/*************¾¯±¨²ÎÊý**************/
|
system_alarm.alarm_l = 0 ;
|
system_alarm.alarm_Send_failed_time = 0;
|
system_alarm.Data_Send_failed_time =0;
|
system_alarm.alarm_Sample = 0;
|
system_alarm.alarm_PRE = 0;
|
system_alarm.alarm_TEM = 0;
|
|
system_alarm.alarm_FlowPowerLOW = 0;
|
system_alarm.alarm_FlowUnderPower = 0;
|
system_alarm.alarm_FlowPowerDOWN = 0;
|
system_alarm.alarm_AlkaPowerDOWN = 0;
|
system_alarm.alarm_AlkaPowerLOW = 0;
|
system_alarm.alarm_LithPowerDOWN = 0;
|
system_alarm.alarm_LithPowerLOW = 0;
|
system_alarm.alarm_EXPowerIN = 0;
|
system_alarm.alarm_EXPowerRemove = 0;
|
|
system_alarm.alarm_Pulse_Broken = 0;
|
system_alarm.alarm_Pulse_Dismatch = 0;
|
system_alarm.alarm_Valve_close = 0;
|
system_alarm.alarm_Valve_open = 0;
|
system_alarm.alarm_Valve_Abnormal = 0;
|
system_alarm.alarm_Gas_Leak = 0;
|
system_alarm.alarm_Gas_Leak_time = 0;
|
|
system_alarm.alarm_Balance_Small = 0;
|
system_alarm.alarm_Balance_0 = 0;
|
system_alarm.alarm_Credits_0 = 0;
|
system_alarm.alarm_Credits_0Times = 0;
|
system_alarm.alarm_E2RW_read_abnormal =0;
|
system_alarm.alarm_E2RW_write_abnormal =0;
|
|
|
system_alarm.u16AlarmStoreNum = FM25V02_data_read_uint16(CURRENT_ALARM_RECORD_NUM_ADDR);
|
if(system_alarm.u16AlarmStoreNum >= ALARM_RECORD_NUM)
|
{
|
system_alarm.u16AlarmStoreNum = 0;
|
FM25V02_data_write_uint16(CURRENT_ALARM_RECORD_NUM_ADDR,system_alarm.u16AlarmStoreNum);
|
}
|
system_alarm.u8AlarmStoreFullFlag = FM25V02_data_read(ALARM_RECORD_FULL_FLAG_ADDR);
|
if(system_alarm.u8AlarmStoreFullFlag > 1)
|
{
|
system_alarm.u8AlarmStoreFullFlag = 0;
|
FM25V02_data_write(system_alarm.u8AlarmStoreFullFlag,ALARM_RECORD_FULL_FLAG_ADDR);
|
}
|
|
|
system_alarm.alarm_E2RW_read_abnormal_FLAG = FM25V02_data_read(E2RW_READ_ABNORMAL_FLAG_ADDR);
|
if(system_alarm.alarm_E2RW_read_abnormal_FLAG>1)
|
{
|
system_alarm.alarm_E2RW_read_abnormal_FLAG =0;
|
FM25V02_data_write(system_alarm.alarm_E2RW_read_abnormal_FLAG,E2RW_READ_ABNORMAL_FLAG_ADDR);
|
}
|
|
|
system_alarm.alarm_E2RW_write_abnormal_FLAG = FM25V02_data_read(E2RW_WRITE_ABNORMAL_FLAG_ADDR);
|
if(system_alarm.alarm_E2RW_write_abnormal_FLAG>1)
|
{
|
system_alarm.alarm_E2RW_write_abnormal_FLAG =0;
|
FM25V02_data_write(system_alarm.alarm_E2RW_write_abnormal_FLAG,E2RW_WRITE_ABNORMAL_FLAG_ADDR);
|
}
|
|
|
|
system_alarm.alarm_AlkaPowerLow_LCDFLAG=0;
|
system_alarm.alarm_LithPowerLow_LCDFLAG=0;
|
system_alarm.alarm_AlkaPowerDOWN_LCDFLAG=0;
|
system_alarm.alarm_LithPowerDOWN_LCDFLAG=0;
|
system_alarm.alarm_Pulse_Broken_LCDFLAG=0;
|
system_alarm.alarm_Pulse_Dismatch_LCDFLAG =0 ;
|
system_alarm.alarm_Sample_LCDFLAG=0;
|
system_alarm.alarm_PRE_LCDFLAG=0;
|
system_alarm.alarm_TEM_LCDFLAG=0;
|
system_alarm.alarm_Balance_Small_LCDFLAG=0;
|
system_alarm.alarm_RS485Cardinalityfree_LCDFLAG=0;
|
|
system_alarm.u8PulseBrokenTimes = 0;
|
system_alarm.alarm_Valve_Abnormal_time =0;
|
system_alarm.alarm_Gas_Leak_LCDFLAG = 0;
|
system_alarm.fPressureHighLimit = 5000.0;
|
system_alarm.fPressureLowLimit = -1.0;
|
system_alarm.fTempratureHighLimit = 100.0;
|
system_alarm.fTempratureLowLimit = -50.0;
|
|
/*************ÀúÊ·Êý¾Ý´æ´¢**************/
|
|
// FM25V02_data_write_uint16(NumDataStored_Addr,0x00);
|
NumDataStored = FM25V02_data_read_uint16(NumDataStored_Addr);
|
if(NumDataStored > NumStoredLength)
|
{
|
NumDataStored = 0;
|
FM25V02_data_write_uint16(NumDataStored_Addr,0);
|
}
|
|
|
DataStoredFlag = FM25V02_data_read(DataStoredFlag_Addr);
|
if(DataStoredFlag >1)
|
{
|
DataStoredFlag = 0;
|
FM25V02_data_write(0,DataStoredFlag_Addr);
|
}
|
|
|
/**********±í¾ß²ÎÊý¼°ÐÒéÍ·³õʼ»¯*******/
|
gprs_protocol_header.DeviceAddress[0] = FM25V02_data_read(DeviceAddress_Addr);
|
gprs_protocol_header.DeviceAddress[1] = FM25V02_data_read(DeviceAddress_Addr+1);
|
gprs_protocol_header.DeviceAddress[2] = FM25V02_data_read(DeviceAddress_Addr+2);
|
gprs_protocol_header.DeviceAddress[3] = FM25V02_data_read(DeviceAddress_Addr+3);
|
gprs_protocol_header.DeviceAddress[4] = FM25V02_data_read(DeviceAddress_Addr+4);
|
gprs_protocol_header.DeviceAddress[5] = FM25V02_data_read(DeviceAddress_Addr+5);
|
gprs_protocol_header.DeviceAddress[6] = FM25V02_data_read(DeviceAddress_Addr+6);
|
gprs_protocol_header.DeviceAddress[7] = FM25V02_data_read(DeviceAddress_Addr+7);
|
|
device_Parm.time1_flag = FM25V02_data_read(Time1_Flag_Addr); //
|
device_Parm.sendTiming_hour = FM25V02_data_read(SendTiming_Hour_Addr);
|
device_Parm.sendTiming_min = FM25V02_data_read(SendTiming_Min_Addr);
|
|
if((device_Parm.time1_flag != 0x80)&&(device_Parm.time1_flag != 0x00) )
|
{
|
device_Parm.time1_flag = 0x00;
|
}
|
if(((device_Parm.sendTiming_hour / 16 )*10 + device_Parm.sendTiming_hour % 16) > 23)
|
{
|
device_Parm.sendTiming_hour = 0x00; //???????
|
}
|
if(((device_Parm.sendTiming_min / 16 )*10 + device_Parm.sendTiming_min % 16) > 59)
|
{
|
device_Parm.sendTiming_min = 0x00; //???????
|
}
|
|
device_Parm.time2_flag = FM25V02_data_read(Time2_Flag_Addr);
|
device_Parm.sendTiming_hour2 = FM25V02_data_read(SendTiming_Hour2_Addr);
|
device_Parm.sendTiming_min2 = FM25V02_data_read(SendTiming_Min2_Addr);
|
|
if((device_Parm.time2_flag != 0x80)&&(device_Parm.time2_flag != 0x00) )
|
{
|
device_Parm.time2_flag = 0x00;
|
}
|
if(((device_Parm.sendTiming_hour2 / 16 )*10 + device_Parm.sendTiming_hour2 % 16) > 23)
|
{
|
device_Parm.sendTiming_hour2 = 0x00; //???????
|
}
|
if(((device_Parm.sendTiming_min2 / 16 )*10 + device_Parm.sendTiming_min2 % 16) > 59)
|
{
|
device_Parm.sendTiming_min2 = 0x00; //???????
|
}
|
|
device_Parm.Tyf = FM25V02_data_read(Tyf_Addr); //???? ??? 0x04? 0x05? 0x06?
|
device_Parm.Tf = FM25V02_data_read(Ty_Addr);
|
if((device_Parm.Tyf != 0x04)&&(device_Parm.Tyf != 0x05)&&(device_Parm.Tyf != 0x06))
|
{
|
device_Parm.Tyf = 0x05;
|
device_Parm.Tf = 0x01;
|
FM25V02_data_write(device_Parm.Tyf,Tyf_Addr);
|
FM25V02_data_write(device_Parm.Tf,Ty_Addr);
|
}
|
if(device_Parm.Tf == 0x00)
|
{
|
device_Parm.Tf = 0x01;
|
FM25V02_data_write(device_Parm.Tf,Ty_Addr);
|
}
|
|
device_Parm.Typ = FM25V02_data_read(Typ_Addr); //?????? ????? 0x84? 0x85? 0x86? 0x00???
|
device_Parm.Tp = FM25V02_data_read(Tp_Addr);
|
|
if((device_Parm.Typ != 0x84)&&(device_Parm.Typ != 0x85)&&(device_Parm.Typ != 0x86)&&(device_Parm.Typ != 0x00))
|
{
|
device_Parm.Typ = 0x86;
|
device_Parm.Tp = 0x01;
|
FM25V02_data_write(device_Parm.Typ,Typ_Addr);
|
FM25V02_data_write(device_Parm.Tp,Tp_Addr);
|
}
|
if(device_Parm.Tp == 0x00)
|
{
|
device_Parm.Tp = 0x01;
|
FM25V02_data_write(device_Parm.Tp,Tp_Addr);
|
|
}
|
|
device_Parm.show_balance_flag = FM25V02_data_read(SHOW_BALANCE_FLAG_ADDR);
|
if(device_Parm.show_balance_flag > 1)
|
{
|
device_Parm.show_balance_flag = 0;
|
FM25V02_data_write(device_Parm.show_balance_flag,SHOW_BALANCE_FLAG_ADDR);
|
}
|
|
device_Parm.show_price_flag = FM25V02_data_read(SHOW_PRICE_FLAG_ADDR);
|
if(device_Parm.show_price_flag > 1)
|
{
|
device_Parm.show_price_flag = 0;
|
FM25V02_data_write(device_Parm.show_price_flag,SHOW_PRICE_FLAG_ADDR);
|
}
|
|
Get_Sample_Send_Interval();
|
|
|
VariaDlg.ServerIP[0] = FM25V02_data_read(IP_Addr); //???IP ??
|
VariaDlg.ServerIP[1] = FM25V02_data_read(IP_Addr+1);
|
VariaDlg.ServerIP[2] = FM25V02_data_read(IP_Addr+2);
|
VariaDlg.ServerIP[3] = FM25V02_data_read(IP_Addr+3);
|
VariaDlg.ServerPort[0] = FM25V02_data_read(IP_Addr+4); //?????
|
VariaDlg.ServerPort[1] = FM25V02_data_read(IP_Addr+5);
|
|
|
device_Parm.GPRS_RESTARTTIME = FM25V02_data_read(GPRS_RestartTime_Addr);
|
if((device_Parm.GPRS_RESTARTTIME < 30)||(device_Parm.GPRS_RESTARTTIME==0xFF))
|
{
|
device_Parm.GPRS_RESTARTTIME = 30;
|
}
|
|
|
/*****************¶ÁÈ¡¼Æ·Ñ²ÎÊý********************/
|
parameter_bil.cDataObtainType = FM25V02_data_read(DATA_OBTAIN_TYPE_ADDR);
|
if((parameter_bil.cDataObtainType!=PULSE_MODE)&&(parameter_bil.cDataObtainType!=RS485_MODE)&&(parameter_bil.cDataObtainType!=RS485_AND_PULSE_MODE))
|
{
|
parameter_bil.cDataObtainType = PULSE_MODE;
|
FM25V02_data_write(parameter_bil.cDataObtainType,DATA_OBTAIN_TYPE_ADDR);
|
}
|
|
if((parameter_bil.cDataObtainType & RS485_MODE)!= RS485_MODE)
|
{
|
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;
|
|
}
|
|
|
|
parameter_bil.u8PulseWidth = FM25V02_data_read(PULSE_WITDH_ADDR);
|
if( parameter_bil.u8PulseWidth < 5 )
|
{
|
parameter_bil.u8PulseWidth = 50;
|
FM25V02_data_write(parameter_bil.u8PulseWidth,PULSE_WITDH_ADDR);
|
}
|
|
parameter_bil.fPulseCoefficient = FM25V02_data_read_float(PULSE_COE_ADDR);
|
if((parameter_bil.fPulseCoefficient > 10001.0)||(parameter_bil.fPulseCoefficient < 0))
|
{
|
parameter_bil.fPulseCoefficient = 1.0;
|
FM25V02_data_write_float(PULSE_COE_ADDR,parameter_bil.fPulseCoefficient);
|
}
|
parameter_bil.cBillingType = FM25V02_data_read(BILLING_TYPE_ADDR);
|
if((parameter_bil.cBillingType!=2)&&(parameter_bil.cBillingType!=1))
|
{
|
parameter_bil.cBillingType = 1;
|
FM25V02_data_write(parameter_bil.cBillingType,BILLING_TYPE_ADDR);
|
}
|
parameter_bil.fSingleBillingFee = FM25V02_data_read_float(SINGLE_BILLING_FEE_ADDR);
|
if((parameter_bil.fSingleBillingFee > 100.0)||(parameter_bil.fSingleBillingFee < 0))
|
{
|
parameter_bil.fSingleBillingFee = 3.0;
|
FM25V02_data_write_float(SINGLE_BILLING_FEE_ADDR,parameter_bil.fSingleBillingFee);
|
}
|
parameter_bil.fStepBilling_First = FM25V02_data_read_float(STEP_BILLING_FIRST_ADDR);
|
if((parameter_bil.fStepBilling_First > 99999999)||(parameter_bil.fStepBilling_First < 0))
|
{
|
parameter_bil.fStepBilling_First = 500;
|
FM25V02_data_write_float(STEP_BILLING_FIRST_ADDR,parameter_bil.fStepBilling_First);
|
}
|
parameter_bil.fStepBillingFee_First = FM25V02_data_read_float(STEP_BILLING_FEE_FIRST_ADDR);
|
if((parameter_bil.fStepBillingFee_First > 999.0)||(parameter_bil.fStepBillingFee_First < 0))
|
{
|
parameter_bil.fStepBillingFee_First = 1.0;
|
FM25V02_data_write_float(STEP_BILLING_FEE_FIRST_ADDR,parameter_bil.fStepBillingFee_First);
|
}
|
parameter_bil.fStepBilling_Second = FM25V02_data_read_float(STEP_BILLING_SECOND_ADDR);
|
if((parameter_bil.fStepBilling_Second > 99999999)||(parameter_bil.fStepBilling_Second < 0))
|
{
|
parameter_bil.fStepBilling_Second = 2000;
|
FM25V02_data_write_float(STEP_BILLING_SECOND_ADDR,parameter_bil.fStepBilling_Second);
|
}
|
parameter_bil.fStepBillingFee_Second = FM25V02_data_read_float(STEP_BILLING_FEE_SECOND_ADDR);
|
if((parameter_bil.fStepBillingFee_Second > 999.0)||(parameter_bil.fStepBillingFee_Second < 0))
|
{
|
parameter_bil.fStepBillingFee_Second = 1.5;
|
FM25V02_data_write_float(STEP_BILLING_FEE_SECOND_ADDR,parameter_bil.fStepBillingFee_Second);
|
}
|
parameter_bil.fStepBilling_Third = FM25V02_data_read_float(STEP_BILLING_THIRD_ADDR);
|
if((parameter_bil.fStepBilling_Third > 99999999)||(parameter_bil.fStepBilling_Third < 0))
|
{
|
parameter_bil.fStepBilling_Third = 5000;
|
FM25V02_data_write_float(STEP_BILLING_THIRD_ADDR,parameter_bil.fStepBilling_Third);
|
}
|
parameter_bil.fStepBillingFee_Third = FM25V02_data_read_float(STEP_BILLING_FEE_THIRD_ADDR);
|
if((parameter_bil.fStepBillingFee_Third > 999.0)||(parameter_bil.fStepBillingFee_Third < 0))
|
{
|
parameter_bil.fStepBillingFee_Third = 2.0;
|
FM25V02_data_write_float(STEP_BILLING_FEE_THIRD_ADDR,parameter_bil.fStepBillingFee_Third);
|
}
|
|
parameter_bil.iBalanceInsufAlarmAmount = FM25V02_data_read_uint16(BALANCE_INSUF_ALARM_AMOUNT_ADDR);
|
if(parameter_bil.iBalanceInsufAlarmAmount > 65000)
|
{
|
parameter_bil.iBalanceInsufAlarmAmount = 100;
|
FM25V02_data_write_uint16(BALANCE_INSUF_ALARM_AMOUNT_ADDR,parameter_bil.iBalanceInsufAlarmAmount);
|
}
|
|
parameter_bil.fCredits = FM25V02_data_read_float(CREDITS_ADDR);
|
if((parameter_bil.fCredits > 100000000.0)||(parameter_bil.fCredits < 0))
|
{
|
parameter_bil.fCredits = 0.0;
|
FM25V02_data_write_float(CREDITS_ADDR,parameter_bil.fCredits);
|
}
|
|
Settlement_Para.SettlementStorageFlag = 0;
|
|
|
Settlement_Para.fBalance = Read_Verification(REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR);
|
|
if((Settlement_Para.fBalance > BALANCE_UP_LIMIT)||(Settlement_Para.fBalance < BALANCE_LOWER_LIMIT))
|
{
|
|
|
Settlement_Para.fBalance = Read_Verification(REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR);
|
|
if((Settlement_Para.fBalance > BALANCE_UP_LIMIT)||(Settlement_Para.fBalance < BALANCE_LOWER_LIMIT))
|
{
|
Settlement_Para.fBalance = 0;
|
|
Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR);
|
}
|
}
|
|
|
Settlement_Para.fCumulativeFeeUsage = Read_Verification(REALTIME_CUMULATIVE_FEE_USAGE_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_B_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_C_ADDR);
|
if((Settlement_Para.fCumulativeFeeUsage>FEE_USAGE_UP_LIMIT)||(Settlement_Para.fCumulativeFeeUsage<0))
|
{
|
Settlement_Para.fCumulativeFeeUsage = Read_Verification(REALTIME_CUMULATIVE_FEE_USAGE_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_B_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_C_ADDR);
|
if((Settlement_Para.fCumulativeFeeUsage>FEE_USAGE_UP_LIMIT)||(Settlement_Para.fCumulativeFeeUsage<0))
|
{
|
Settlement_Para.fCumulativeFeeUsage = 0;
|
Write_Verification(Settlement_Para.fCumulativeFeeUsage,REALTIME_CUMULATIVE_FEE_USAGE_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_B_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_C_ADDR);
|
}
|
}
|
|
|
Settlement_Para.fCumulativeGasUsage = Read_Verification(REALTIME_CUMULATIVE_GAS_USAGE_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_B_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_C_ADDR);
|
if((Settlement_Para.fCumulativeGasUsage>GAS_USAGE_UP_LIMIT)||(Settlement_Para.fCumulativeGasUsage<0))
|
{
|
Settlement_Para.fCumulativeGasUsage = Read_Verification(REALTIME_CUMULATIVE_GAS_USAGE_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_B_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_C_ADDR);
|
if((Settlement_Para.fCumulativeGasUsage>GAS_USAGE_UP_LIMIT)||(Settlement_Para.fCumulativeGasUsage<0))
|
{
|
Settlement_Para.fCumulativeGasUsage = 0;
|
Write_Verification(Settlement_Para.fCumulativeGasUsage,REALTIME_CUMULATIVE_GAS_USAGE_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_B_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_C_ADDR);
|
}
|
}
|
|
|
Settlement_Para.u32PulseCounting = 0;
|
Settlement_Para.u32PulseCounting_last = 0;
|
Settlement_Para.RS485SettlementINGFlag = 0;
|
Settlement_Para.RS485BilDataReadableFlag = FM25V02_data_read(DATA_READABLE_FLAG_ADDR);
|
if(Settlement_Para.RS485BilDataReadableFlag > 1)
|
{
|
Settlement_Para.RS485BilDataReadableFlag = 0;
|
FM25V02_data_write(Settlement_Para.RS485BilDataReadableFlag,DATA_READABLE_FLAG_ADDR);
|
}
|
|
Settlement_Para.RS485SettlementFlag = FM25V02_data_read(RS485_SETTLEMENT_FLAG_ADDR);
|
if(Settlement_Para.RS485SettlementFlag > 1)
|
{
|
Settlement_Para.RS485SettlementFlag = 0;
|
FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
}
|
|
|
/*bil record*/
|
system_record.u16BilRecordNUM = FM25V02_data_read_uint16(CURRENT_BIL_RECORD_NUM_ADDR);
|
if(system_record.u16BilRecordNUM >= BIL_RECORD_NUM)
|
{
|
system_record.u16BilRecordNUM = 0;
|
FM25V02_data_write_uint16(CURRENT_BIL_RECORD_NUM_ADDR,system_record.u16BilRecordNUM);
|
}
|
|
system_record.u8BilStoreFullFlag = FM25V02_data_read(BIL_RECORD_FULL_FLAG_ADDR);
|
if(system_record.u8BilStoreFullFlag > 1)
|
{
|
system_record.u8BilStoreFullFlag = 0;
|
FM25V02_data_write(system_record.u8BilStoreFullFlag,BIL_RECORD_FULL_FLAG_ADDR);
|
}
|
|
|
/*Cumulants record*/
|
system_record.u16CumulantsRecordNUM = FM25V02_data_read_uint16(CUMULANTS_MODIFY_RECORD_NUM_ADDR);
|
if(system_record.u16CumulantsRecordNUM >= CUMULANTS_MODIFY_RECORD_NUM)
|
{
|
system_record.u16CumulantsRecordNUM = 0;
|
FM25V02_data_write_uint16(CUMULANTS_MODIFY_RECORD_NUM_ADDR,system_record.u16CumulantsRecordNUM);
|
}
|
|
system_record.u8CumulantsStoreFullFlag = FM25V02_data_read(CUMULANTS_MODIFY_RECORD_FULL_FLAG_ADDR);
|
if(system_record.u8CumulantsStoreFullFlag > 1)
|
{
|
system_record.u8CumulantsStoreFullFlag = 0;
|
FM25V02_data_write(system_record.u8CumulantsStoreFullFlag,CUMULANTS_MODIFY_RECORD_FULL_FLAG_ADDR);
|
}
|
|
|
//¼Æ·Ñģʽ
|
BalanceSaveType=FM25V02_data_read(BALANCE_SAVE_TYPE_ADDR);
|
if(BalanceSaveType > 1)
|
{
|
BalanceSaveType = 0;
|
FM25V02_data_write(BalanceSaveType,BALANCE_SAVE_TYPE_ADDR);
|
}
|
//modbus´Ó»úµØÖ·£¬±»Ö÷»ú¶ÁÈ¡
|
modbus_dev_para.slave_addr = FM25V02_data_read(MODBUS_SLAVE_ADDR);
|
if(modbus_dev_para.slave_addr == 0 )
|
{
|
modbus_dev_para.slave_addr = 1;
|
FM25V02_data_write(modbus_dev_para.slave_addr,MODBUS_SLAVE_ADDR);
|
}
|
|
|
/****************¶Ô½ÓÁ÷Á¿¼Æ²ÎÊý*********************/
|
parmAccess.u16MeterTypeCode = FM25V02_data_read_uint16(METER_TYPE_CODE_ADDR);
|
if(parmAccess.u16MeterTypeCode >= 0x9999)
|
{
|
parmAccess.u16MeterTypeCode = SIZHUMODBUSV2_0;
|
FM25V02_data_write_uint16(METER_TYPE_CODE_ADDR,parmAccess.u16MeterTypeCode);
|
}
|
#ifdef DEBUG_OUT
|
sprintf(Debug,"u16MeterTypeCode = %x \n",parmAccess.u16MeterTypeCode); //
|
UartDebugFun(Debug);
|
#endif
|
|
parmAccess.u8EXPVoltageCode = FM25V02_data_read(EXP_VOLTAGE_CODE_ADDR);
|
if((parmAccess.u8EXPVoltageCode!=0x00)&&(parmAccess.u8EXPVoltageCode!=0x01)&&(parmAccess.u8EXPVoltageCode!=0x02)&&(parmAccess.u8EXPVoltageCode!=0x10))
|
{
|
parmAccess.u8EXPVoltageCode = 0x00;
|
FM25V02_data_write(parmAccess.u8EXPVoltageCode,EXP_VOLTAGE_CODE_ADDR);
|
}
|
|
parmAccess.u8BaudRateCode = FM25V02_data_read(BAUD_RATE_CODE_ADDR);
|
parmAccess.u8BaudRateCode = FM25V02_data_read(BAUD_RATE_CODE_ADDR);
|
if(parmAccess.u8BaudRateCode > 0x08)
|
{
|
parmAccess.u8BaudRateCode = 0x08;
|
FM25V02_data_write(parmAccess.u8BaudRateCode,BAUD_RATE_CODE_ADDR);
|
}
|
|
parmAccess.u8RS485Parity = FM25V02_data_read(RS485_PARITY_ADDR);
|
if(parmAccess.u8RS485Parity > 0x02)
|
{
|
parmAccess.u8RS485Parity = 0x00;
|
FM25V02_data_write(parmAccess.u8RS485Parity,RS485_PARITY_ADDR);
|
}
|
|
parmAccess.u8slaveAddress = FM25V02_data_read(SLAVE_ADDRESS_ADDR);
|
if(parmAccess.u8slaveAddress==0xff)
|
{
|
parmAccess.u8slaveAddress = 1;
|
FM25V02_data_write(parmAccess.u8slaveAddress,SLAVE_ADDRESS_ADDR);
|
}
|
|
parmAccess.u8LowPowerAlarmLine = FM25V02_data_read(LOW_POWER_ALARM_LINE_ADDR);
|
if(parmAccess.u8LowPowerAlarmLine>0x10)
|
{
|
parmAccess.u8LowPowerAlarmLine = 0x00;
|
FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR);
|
}
|
|
/*************************************/
|
|
/*************Ö¡¸ñʽͷ²ÎÊý**************/
|
gprs_protocol_header.Framestart_symbol = 0x68;
|
gprs_protocol_header.Datastart_symbol = 0x68;
|
gprs_protocol_header.frameSeq = 1;
|
gprs_protocol_header.Protocol_version = PROTOCOL_VERSION;
|
gprs_data_package.Frameend_symbol = 0x16;
|
gprs_protocol_header.KVer = 0x80;
|
KVer_AES_128[0] = 0x08;
|
KVer_AES_128[1] = 0x07;
|
KVer_AES_128[2] = 0x06;
|
KVer_AES_128[3] = 0x05;
|
KVer_AES_128[4] = 0x04;
|
KVer_AES_128[5] = 0x03;
|
KVer_AES_128[6] = 0x02;
|
KVer_AES_128[7] = 0x01;
|
KVer_AES_128[8] = 0x00;
|
KVer_AES_128[9] = 0x00;
|
KVer_AES_128[10] = 0x00;
|
KVer_AES_128[11] = 0x00;
|
KVer_AES_128[12] = 0x00;
|
KVer_AES_128[13] = 0x00;
|
KVer_AES_128[14] = 0x00;
|
KVer_AES_128[15] = 0x00;
|
|
gprs_protocol_header.Signal_intensity = 20;
|
gprs_protocol_header.Send_type = 1;
|
gprs_protocol_header.Power_type = 1;
|
gprs_protocol_header.Data_Acq_type = parameter_bil.cDataObtainType;
|
gprs_protocol_header.Billing_type = parameter_bil.cBillingType;
|
gprs_protocol_header.AccountStatus_g = device_Parm.AccountStatus ;
|
gprs_protocol_header.Reserved1 = 0;
|
gprs_protocol_header.Reserved2 = 0;
|
gprs_protocol_header.Reserved3 = 0;
|
|
|
Valve_control_parm.Valve_Type = FM25V02_data_read(VALVE_TYPE_ADDR);
|
if(Valve_control_parm.Valve_Type == SZV102_VALVE)
|
{
|
gprs_protocol_header.Valve_Status = FM25V02_data_read(VALVE_STATE_ADDR);
|
if(gprs_protocol_header.Valve_Status>3)
|
{
|
gprs_protocol_header.Valve_Status = 2;
|
FM25V02_data_write(gprs_protocol_header.Valve_Status,VALVE_STATE_ADDR);
|
}
|
}else
|
{
|
if(Valve_control_parm.Valve_Type == SZV103_VALVE)
|
{
|
Valve_control_parm.Valve_Type = SZV103_VALVE;
|
// FM25V02_data_write(Valve_control_parm.Valve_Type,VALVE_TYPE_ADDR);
|
}
|
else
|
{
|
Valve_control_parm.Valve_Type = SZV101_VALVE;
|
FM25V02_data_write(Valve_control_parm.Valve_Type,VALVE_TYPE_ADDR);
|
}
|
//if((PCin(10)==0)&&(PCin(11)==1))
|
if(Motor_OP_PIN_READ ==0 &&Motor_CL_PIN_READ ==1)
|
{
|
gprs_protocol_header.Valve_Status = 1;
|
}
|
else if(Motor_OP_PIN_READ==1&& Motor_CL_PIN_READ ==0)
|
{
|
gprs_protocol_header.Valve_Status = 2;
|
}
|
else
|
{
|
gprs_protocol_header.Valve_Status = 3;
|
}
|
}
|
/************ÏÔʾģʽ****************/
|
LCD_flag = FM25V02_data_read(LCD_FLAG_ADDR);
|
if(LCD_flag>1)
|
{
|
LCD_flag = 0;
|
FM25V02_data_write(LCD_flag,LCD_FLAG_ADDR);
|
}
|
device_Parm.Logo_Display_Flag = FM25V02_data_read(LOGO_DISPLAY_FLAG_ADDR);
|
if(device_Parm.Logo_Display_Flag>1)
|
{
|
device_Parm.Logo_Display_Flag = 0;
|
FM25V02_data_write(device_Parm.Logo_Display_Flag,LOGO_DISPLAY_FLAG_ADDR);
|
}
|
|
if(LCD_TYPE_FLAG ==0)
|
{
|
LCD_Power_Init();
|
lcd_init();
|
LCD_DisplayAll();
|
LCD_sleepTime = 20;
|
}
|
else
|
{
|
LCD_Power_Init();
|
lcd_init_new();
|
LCD_DisplayAll_New1();
|
LCD_sleepTime = 20;
|
}
|
/************ÉèÖÃRTC¼ÆËã²ÎÊý****************/
|
|
//Get_Time();
|
//delay_ms(20);
|
set_RTC8025T_peroid_alarm();
|
//delay_ms(20);
|
//Time_Set(calendar.year,calendar.month,calendar.date,0x01,calendar.hour,calendar.min,calendar.sec);
|
delay_ms(20);
|
|
Get_Time();
|
device_Parm.Hour_Updata_flag = calendar.hour;
|
Last_Sample_D = calendar.date;
|
Last_Sample_H = calendar.hour;
|
Last_Sample_M = calendar.min;
|
Last_Send_D = Last_Sample_D;
|
Last_Send_H = Last_Sample_H; //???????
|
Last_Send_M = Last_Sample_M;
|
|
device_Parm.real_sendTiming_day = 1;
|
device_Parm.real_sendTiming_hour = 0;
|
device_Parm.real_sendTiming_min = 0;
|
|
|
NOW_year=(calendar.year>>12)*1000+((calendar.year&0x0FFF)>>8)*100+((calendar.year&0x00FF)>>4)*10+(calendar.year&0x000F);
|
NOW_month = ((calendar.month&0x00FF)>>4)*10+(calendar.month&0x000F);
|
NOW_day = calendar.date;
|
NOW_hour = calendar.hour;
|
NOW_min = calendar.min;
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug,"TIME = %02x-%02x-%02x %02x:%02x:%02x \n",calendar.year,calendar.month,calendar.date,calendar.hour,calendar.min,calendar.sec); // 266 3.9V 245 3.6V 68.2/V
|
UartDebugFun(Debug);
|
#endif
|
|
/***************¼ÆËãµÚÒ»´ÎÄÖÖÓʱ¼ä*********************/
|
// calculate_Sample_Time(NOW_year, NOW_month,NOW_day); //calculate next sampling time
|
// calculate_Send_Time(NOW_year, NOW_month,NOW_day); //calculate next sending time
|
// compara_Send_Sample(NOW_year,NOW_month,NOW_day ,NOW_hour,NOW_min) ; //compara next RTC alarm time is for sampling or sending
|
|
/************²É·¢¹ý³Ì²ÎÊý³õʼ»¯********************/
|
//strcpy((char *)VariaDlg.APN,"cmnet"); //SIM? APN?
|
|
//Sending_flag = 1; //compara_Send_Sampleº¯ÊýÖмÆËã¹ý£¬ËùÒÔÕâÀï²»Óø³Öµ
|
GPRS_sendFlag = 0; //
|
|
// pluse_count = 0; //
|
awaken_flag = dormancy_awaken;
|
system_alarm.u8ReadSuccessfullyTimes =0;
|
|
VariaDlg.ReceivedInstructionFlag = 0;
|
|
VariaDlg.Net_info = 0;
|
VariaDlg.send_finish_ok=0;
|
VariaDlg.HandleStep = SYS_DATA;
|
VariaDlg.RestartTime = RESTARTTIME ;
|
|
ModbusDlg.HandleStep = MODBUS_WAIT;
|
ModbusDlg.RepeadNum = REPEATNUM ; //??????
|
ModbusDlg.RepeadTime = 0 ;
|
|
LLJ_Msg.HandlePtr = 0;
|
LLJ_Msg.WritePtr = 0;
|
LLJ_Msg.TempPtr = 0;
|
LLJ_Msg.NewLen = 0;
|
memset((char *)LLJ_Msg.HandBuff,0,sizeof(LLJ_Msg.HandBuff));
|
memset((char *)LLJ_Msg.UartBuff,0,sizeof(LLJ_Msg.UartBuff));
|
}
|
|
void Variable_Reset()
|
{
|
uint16_t NOW_year;
|
uint8_t NOW_month,NOW_day,NOW_hour,NOW_min;
|
|
#ifdef BOARD_INITIALIZATION
|
// memset((u8 *)&gprs_protocol_header.DeviceAddress,0,8);
|
// EEPROM_MultipleWrite((u8 *)&gprs_protocol_header.DeviceAddress,DeviceAddress_Addr,8);
|
// memset((u8 *)®DevSerialNum.hardwareVerSn,0,6);
|
// FM25V02_data_write_uint16(HardwareVerSn1_ADDR, regDevSerialNum.hardwareVerSn[0]) ;
|
// FM25V02_data_write_uint16(HardwareVerSn2_ADDR, regDevSerialNum.hardwareVerSn[1]) ;
|
// FM25V02_data_write_uint16(HardwareVerSn3_ADDR, regDevSerialNum.hardwareVerSn[2]) ;
|
// regDevSerialNum.firmwareCRC=0;
|
// FM25V02_data_write_uint16(FirmwareCRC_ADDR,regDevSerialNum.firmwareCRC);
|
#endif
|
/*************¶Á±í²ÎÊý**************/
|
k_index = 0; //Êý¾Ý¶ÁÈ¡µÄʱºò¼ÆÊýÓÃ
|
ddr_index_2 = 0;
|
|
// RegisterInit(); //¹Ì¼þÈí¼þ°æ±¾µÈÐÅÏ¢
|
|
/***********¶ÁÈ¡´æ´¢µÄÖµ*****************/
|
|
/*******************·§ÃÅÏà¹Ø******************/
|
|
OpenValveAuthorizeFLAG = 0x00;
|
FM25V02_data_write(OpenValveAuthorizeFLAG,OPEN_VALVE_AUTHORIZE_FLAG_ADDR);
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug,"OpenValveAuthorizeFLAG = %x \n",OpenValveAuthorizeFLAG); //
|
UartDebugFun(Debug);
|
#endif
|
|
OpenValveAuthorizeTimeCnt = 0;
|
FM25V02_data_write_uint32(OPEN_VALVE_AUTHORIZE_TIME_CNT_ADDRA, OpenValveAuthorizeTimeCnt);
|
|
ValveOpenTimes = 0;
|
FM25V02_data_write_uint16(VALVE_OPEN_TIMES_ADDR,ValveOpenTimes);
|
|
ValveCloseTimes = 0;
|
FM25V02_data_write_uint16(VALVE_CLOSE_TIMES_ADDR,ValveCloseTimes);
|
|
#ifdef DEBUG_OUT
|
sprintf(Debug,"OpenValveAuthorizeTimeCnt = %d \n",OpenValveAuthorizeTimeCnt); //
|
UartDebugFun(Debug);
|
#endif
|
|
/***********¿ª»§×´Ì¬*****************/
|
device_Parm.AccountStatus = 0;
|
FM25V02_data_write(device_Parm.AccountStatus,ACCOUNT_STATUS_ADDR);
|
//Èç¹ûÊ×´ÎÆô¶¯£¬¿ª»§×´Ì¬ÎªÊÇ·Ç0ºÍ1µÄ£¬ÄǾͳõʼÓà¶îΪ10
|
Settlement_Para.fBalance = 10;
|
Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR);
|
FM25V02_data_write_double(BALANCE_BIL_ADDR, Settlement_Para.fBalance);
|
|
/*************¾¯±¨²ÎÊý**************/
|
system_alarm.alarm_l = 0 ;
|
system_alarm.alarm_Send_failed_time = 0;
|
system_alarm.Data_Send_failed_time =0;
|
system_alarm.alarm_Sample = 0;
|
system_alarm.alarm_PRE = 0;
|
system_alarm.alarm_TEM = 0;
|
|
system_alarm.alarm_FlowPowerLOW = 0;
|
system_alarm.alarm_FlowUnderPower = 0;
|
system_alarm.alarm_FlowPowerDOWN = 0;
|
system_alarm.alarm_AlkaPowerDOWN = 0;
|
system_alarm.alarm_AlkaPowerLOW = 0;
|
system_alarm.alarm_LithPowerDOWN = 0;
|
system_alarm.alarm_LithPowerLOW = 0;
|
system_alarm.alarm_EXPowerIN = 0;
|
system_alarm.alarm_EXPowerRemove = 0;
|
|
system_alarm.alarm_Pulse_Broken = 0;
|
system_alarm.alarm_Pulse_Dismatch = 0;
|
system_alarm.alarm_Valve_close = 0;
|
system_alarm.alarm_Valve_open = 0;
|
system_alarm.alarm_Valve_Abnormal = 0;
|
system_alarm.alarm_Gas_Leak = 0;
|
system_alarm.alarm_Gas_Leak_time = 0;
|
|
system_alarm.alarm_Balance_Small = 0;
|
system_alarm.alarm_Balance_0 = 0;
|
system_alarm.alarm_Credits_0 = 0;
|
system_alarm.alarm_Credits_0Times = 0;
|
system_alarm.alarm_E2RW_read_abnormal =0;
|
system_alarm.alarm_E2RW_write_abnormal =0;
|
|
|
system_alarm.u16AlarmStoreNum = 0;
|
FM25V02_data_write_uint16(CURRENT_ALARM_RECORD_NUM_ADDR,system_alarm.u16AlarmStoreNum);
|
|
system_alarm.alarm_E2RW_read_abnormal_FLAG =0;
|
FM25V02_data_write(system_alarm.alarm_E2RW_read_abnormal_FLAG,E2RW_READ_ABNORMAL_FLAG_ADDR);
|
|
system_alarm.alarm_E2RW_write_abnormal_FLAG =0;
|
FM25V02_data_write(system_alarm.alarm_E2RW_write_abnormal_FLAG,E2RW_WRITE_ABNORMAL_FLAG_ADDR);
|
|
system_alarm.alarm_AlkaPowerLow_LCDFLAG=0;
|
system_alarm.alarm_LithPowerLow_LCDFLAG=0;
|
system_alarm.alarm_AlkaPowerDOWN_LCDFLAG=0;
|
system_alarm.alarm_LithPowerDOWN_LCDFLAG=0;
|
system_alarm.alarm_Pulse_Broken_LCDFLAG=0;
|
system_alarm.alarm_Pulse_Dismatch_LCDFLAG =0 ;
|
system_alarm.alarm_Sample_LCDFLAG=0;
|
system_alarm.alarm_PRE_LCDFLAG=0;
|
system_alarm.alarm_TEM_LCDFLAG=0;
|
system_alarm.alarm_Balance_Small_LCDFLAG=0;
|
system_alarm.alarm_RS485Cardinalityfree_LCDFLAG=0;
|
|
system_alarm.u8PulseBrokenTimes = 0;
|
system_alarm.alarm_Valve_Abnormal_time =0;
|
system_alarm.alarm_Gas_Leak_LCDFLAG = 0;
|
system_alarm.fPressureHighLimit = 5000.0;
|
system_alarm.fPressureLowLimit = -1.0;
|
system_alarm.fTempratureHighLimit = 100.0;
|
system_alarm.fTempratureLowLimit = -50.0;
|
|
/*************ÀúÊ·Êý¾Ý´æ´¢**************/
|
NumDataStored = 0;
|
FM25V02_data_write_uint16(NumDataStored_Addr,0);
|
|
DataStoredFlag = 0;
|
FM25V02_data_write(0,DataStoredFlag_Addr);
|
|
// /**********±í¾ß²ÎÊý¼°ÐÒéÍ·³õʼ»¯*******/
|
// gprs_protocol_header.DeviceAddress[0] = FM25V02_data_read(DeviceAddress_Addr);
|
// gprs_protocol_header.DeviceAddress[1] = FM25V02_data_read(DeviceAddress_Addr+1);
|
// gprs_protocol_header.DeviceAddress[2] = FM25V02_data_read(DeviceAddress_Addr+2);
|
// gprs_protocol_header.DeviceAddress[3] = FM25V02_data_read(DeviceAddress_Addr+3);
|
// gprs_protocol_header.DeviceAddress[4] = FM25V02_data_read(DeviceAddress_Addr+4);
|
// gprs_protocol_header.DeviceAddress[5] = FM25V02_data_read(DeviceAddress_Addr+5);
|
// gprs_protocol_header.DeviceAddress[6] = FM25V02_data_read(DeviceAddress_Addr+6);
|
// gprs_protocol_header.DeviceAddress[7] = FM25V02_data_read(DeviceAddress_Addr+7);
|
|
device_Parm.time1_flag = 0x00;
|
FM25V02_data_write(device_Parm.time1_flag,Time1_Flag_Addr);
|
|
device_Parm.sendTiming_hour = 0x00; //???????
|
FM25V02_data_write(device_Parm.sendTiming_hour,SendTiming_Hour_Addr);
|
|
device_Parm.sendTiming_min = 0x00; //???????
|
FM25V02_data_write(device_Parm.sendTiming_min,SendTiming_Min_Addr);
|
|
device_Parm.time2_flag = 0x00;
|
FM25V02_data_write(device_Parm.time2_flag,Time2_Flag_Addr);
|
|
device_Parm.sendTiming_hour2 = 0x00; //???????
|
FM25V02_data_write(device_Parm.sendTiming_hour2,SendTiming_Hour2_Addr);
|
|
device_Parm.sendTiming_min2 = 0x00; //???????
|
FM25V02_data_write(device_Parm.sendTiming_min2,SendTiming_Min2_Addr);
|
|
device_Parm.Tyf = 0x05;
|
device_Parm.Tf = 0x01;
|
FM25V02_data_write(device_Parm.Tyf,Tyf_Addr);
|
FM25V02_data_write(device_Parm.Tf,Ty_Addr);
|
|
device_Parm.Typ = 0x86;
|
device_Parm.Tp = 0x01;
|
FM25V02_data_write(device_Parm.Typ,Typ_Addr);
|
FM25V02_data_write(device_Parm.Tp,Tp_Addr);
|
Get_Sample_Send_Interval();
|
VariaDlg.ServerIP[0] = 120; //???IP ??
|
VariaDlg.ServerIP[1] = 77;
|
VariaDlg.ServerIP[2] = 85;
|
VariaDlg.ServerIP[3] = 236;
|
VariaDlg.ServerPort[0] = 0xAA; //?????
|
VariaDlg.ServerPort[1] = 0x26;
|
FM25V02_data_write(VariaDlg.ServerIP[0],IP_Addr);
|
FM25V02_data_write(VariaDlg.ServerIP[1],IP_Addr+1);
|
FM25V02_data_write(VariaDlg.ServerIP[2],IP_Addr+2);
|
FM25V02_data_write(VariaDlg.ServerIP[3],IP_Addr+3);
|
FM25V02_data_write(VariaDlg.ServerPort[0],IP_Addr+4);
|
FM25V02_data_write(VariaDlg.ServerPort[1],IP_Addr+5);
|
|
device_Parm.GPRS_RESTARTTIME = 180;
|
FM25V02_data_write(device_Parm.GPRS_RESTARTTIME,GPRS_RestartTime_Addr);
|
|
device_Parm.show_balance_flag = 0;
|
FM25V02_data_write(device_Parm.show_balance_flag,SHOW_BALANCE_FLAG_ADDR);
|
|
device_Parm.show_price_flag = 0;
|
FM25V02_data_write(device_Parm.show_price_flag,SHOW_PRICE_FLAG_ADDR);
|
|
/*****************¶ÁÈ¡¼Æ·Ñ²ÎÊý********************/
|
parameter_bil.cDataObtainType = RS485_MODE;
|
FM25V02_data_write(parameter_bil.cDataObtainType,DATA_OBTAIN_TYPE_ADDR);
|
|
if((parameter_bil.cDataObtainType & RS485_MODE)!= RS485_MODE)
|
{
|
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;
|
}
|
|
parameter_bil.u8PulseWidth = 50;
|
FM25V02_data_write(parameter_bil.u8PulseWidth,PULSE_WITDH_ADDR);
|
|
parameter_bil.fPulseCoefficient = 1.0;
|
FM25V02_data_write_float(PULSE_COE_ADDR,parameter_bil.fPulseCoefficient);
|
|
parameter_bil.cBillingType = 1;
|
FM25V02_data_write(parameter_bil.cBillingType,BILLING_TYPE_ADDR);
|
|
parameter_bil.fSingleBillingFee = 3.0;
|
FM25V02_data_write_float(SINGLE_BILLING_FEE_ADDR,parameter_bil.fSingleBillingFee);
|
|
parameter_bil.fStepBilling_First = 500;
|
FM25V02_data_write_float(STEP_BILLING_FIRST_ADDR,parameter_bil.fStepBilling_First);
|
|
parameter_bil.fStepBillingFee_First = 1.0;
|
FM25V02_data_write_float(STEP_BILLING_FEE_FIRST_ADDR,parameter_bil.fStepBillingFee_First);
|
|
parameter_bil.fStepBilling_Second = 2000;
|
FM25V02_data_write_float(STEP_BILLING_SECOND_ADDR,parameter_bil.fStepBilling_Second);
|
|
parameter_bil.fStepBillingFee_Second = 1.5;
|
FM25V02_data_write_float(STEP_BILLING_FEE_SECOND_ADDR,parameter_bil.fStepBillingFee_Second);
|
|
parameter_bil.fStepBilling_Third = 5000;
|
FM25V02_data_write_float(STEP_BILLING_THIRD_ADDR,parameter_bil.fStepBilling_Third);
|
|
parameter_bil.fStepBillingFee_Third = 2.0;
|
FM25V02_data_write_float(STEP_BILLING_FEE_THIRD_ADDR,parameter_bil.fStepBillingFee_Third);
|
|
parameter_bil.iBalanceInsufAlarmAmount = 100;
|
FM25V02_data_write_uint16(BALANCE_INSUF_ALARM_AMOUNT_ADDR,parameter_bil.iBalanceInsufAlarmAmount);
|
|
parameter_bil.fCredits = 0.0;
|
FM25V02_data_write_float(CREDITS_ADDR,parameter_bil.fCredits);
|
|
Settlement_Para.SettlementStorageFlag = 0;
|
|
Settlement_Para.fBalance = 0;
|
Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR);
|
FM25V02_data_write_double(BALANCE_BIL_ADDR, Settlement_Para.fBalance);
|
|
Settlement_Para.fCumulativeFeeUsage = 0;
|
Write_Verification(Settlement_Para.fCumulativeFeeUsage,REALTIME_CUMULATIVE_FEE_USAGE_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_B_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_C_ADDR);
|
|
Settlement_Para.fCumulativeGasUsage = 0;
|
Write_Verification(Settlement_Para.fCumulativeGasUsage,REALTIME_CUMULATIVE_GAS_USAGE_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_B_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_C_ADDR);
|
|
Settlement_Para.u32PulseCounting = 0;
|
Settlement_Para.u32PulseCounting_last = 0;
|
Settlement_Para.RS485SettlementINGFlag = 0;
|
|
Settlement_Para.RS485BilDataReadableFlag = 0;
|
FM25V02_data_write(Settlement_Para.RS485BilDataReadableFlag,DATA_READABLE_FLAG_ADDR);
|
|
Settlement_Para.RS485SettlementFlag = 1;
|
FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
|
/*bil record*/
|
system_record.u16BilRecordNUM = 0;
|
FM25V02_data_write_uint16(CURRENT_BIL_RECORD_NUM_ADDR,system_record.u16BilRecordNUM);
|
|
system_record.u8BilStoreFullFlag = 0;
|
FM25V02_data_write(system_record.u8BilStoreFullFlag,BIL_RECORD_FULL_FLAG_ADDR);
|
|
system_record.u16CumulantsRecordNUM = 0;
|
FM25V02_data_write_uint16(CUMULANTS_MODIFY_RECORD_NUM_ADDR,system_record.u16CumulantsRecordNUM);
|
|
system_record.u8CumulantsStoreFullFlag = 0;
|
FM25V02_data_write(system_record.u8CumulantsStoreFullFlag,CUMULANTS_MODIFY_RECORD_FULL_FLAG_ADDR);
|
|
BalanceSaveType = 0;
|
FM25V02_data_write(BalanceSaveType,BALANCE_SAVE_TYPE_ADDR);
|
|
modbus_dev_para.slave_addr = 1;
|
FM25V02_data_write(modbus_dev_para.slave_addr,MODBUS_SLAVE_ADDR);
|
|
/****************¶Ô½ÓÁ÷Á¿¼Æ²ÎÊý*********************/
|
parmAccess.u16MeterTypeCode = SIZHUMODBUSV2_0;
|
FM25V02_data_write_uint16(METER_TYPE_CODE_ADDR,parmAccess.u16MeterTypeCode);
|
|
parmAccess.u8EXPVoltageCode = 0x00;
|
FM25V02_data_write(parmAccess.u8EXPVoltageCode,EXP_VOLTAGE_CODE_ADDR);
|
|
parmAccess.u8BaudRateCode = 0x08;
|
FM25V02_data_write(parmAccess.u8BaudRateCode,BAUD_RATE_CODE_ADDR);
|
|
parmAccess.u8RS485Parity = 0x00;
|
FM25V02_data_write(parmAccess.u8RS485Parity,RS485_PARITY_ADDR);
|
|
parmAccess.u8slaveAddress = 1;
|
FM25V02_data_write(parmAccess.u8slaveAddress,SLAVE_ADDRESS_ADDR);
|
|
parmAccess.u8LowPowerAlarmLine = 0x00;
|
FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR);
|
/*************************************/
|
|
/*************Ö¡¸ñʽͷ²ÎÊý**************/
|
gprs_protocol_header.Framestart_symbol = 0x68;
|
gprs_protocol_header.Datastart_symbol = 0x68;
|
gprs_protocol_header.frameSeq = 1;
|
gprs_protocol_header.Protocol_version = PROTOCOL_VERSION;
|
gprs_data_package.Frameend_symbol = 0x16;
|
gprs_protocol_header.KVer = 0x80;
|
KVer_AES_128[0] = 0x08;
|
KVer_AES_128[1] = 0x07;
|
KVer_AES_128[2] = 0x06;
|
KVer_AES_128[3] = 0x05;
|
KVer_AES_128[4] = 0x04;
|
KVer_AES_128[5] = 0x03;
|
KVer_AES_128[6] = 0x02;
|
KVer_AES_128[7] = 0x01;
|
KVer_AES_128[8] = 0x00;
|
KVer_AES_128[9] = 0x00;
|
KVer_AES_128[10] = 0x00;
|
KVer_AES_128[11] = 0x00;
|
KVer_AES_128[12] = 0x00;
|
KVer_AES_128[13] = 0x00;
|
KVer_AES_128[14] = 0x00;
|
KVer_AES_128[15] = 0x00;
|
|
gprs_protocol_header.Signal_intensity = 20;
|
gprs_protocol_header.Send_type = 1;
|
gprs_protocol_header.Power_type = 1;
|
gprs_protocol_header.Data_Acq_type = parameter_bil.cDataObtainType;
|
gprs_protocol_header.Billing_type = parameter_bil.cBillingType;
|
gprs_protocol_header.AccountStatus_g = device_Parm.AccountStatus ;
|
gprs_protocol_header.Reserved1 = 0;
|
gprs_protocol_header.Reserved2 = 0;
|
gprs_protocol_header.Reserved3 = 0;
|
|
Valve_control_parm.Valve_Type = SZV101_VALVE;
|
FM25V02_data_write(Valve_control_parm.Valve_Type,VALVE_TYPE_ADDR);
|
|
if(Motor_OP_PIN_READ ==0 && Motor_CL_PIN_READ == 1)
|
{
|
gprs_protocol_header.Valve_Status = 1;
|
}
|
else if(Motor_OP_PIN_READ==1 && Motor_OP_PIN_READ ==0)
|
{
|
gprs_protocol_header.Valve_Status = 2;
|
}
|
else
|
{
|
gprs_protocol_header.Valve_Status = 3;
|
}
|
|
/************ÏÔʾģʽ****************/
|
LCD_flag = 0;
|
FM25V02_data_write(LCD_flag,LCD_FLAG_ADDR);
|
|
if(LCD_TYPE_FLAG ==0)
|
{
|
LCD_Power_Init();
|
lcd_init();
|
LCD_DisplayAll();
|
LCD_sleepTime = 20;
|
}
|
else
|
{
|
LCD_Power_Init();
|
lcd_init_new();
|
LCD_DisplayAll_New1();
|
LCD_sleepTime = 20;
|
}
|
|
LOGO_Flag = 0;
|
FM25V02_data_write(LOGO_Flag,LCD_LOGO_ADDR);
|
|
device_Parm.Logo_Display_Flag = 0;
|
FM25V02_data_write(device_Parm.Logo_Display_Flag,LOGO_DISPLAY_FLAG_ADDR);
|
|
GPRS_sendFlag = 0; //
|
|
// pluse_count = 0; //
|
awaken_flag = dormancy_awaken;
|
system_alarm.u8ReadSuccessfullyTimes =0;
|
|
VariaDlg.ReceivedInstructionFlag = 0;
|
|
VariaDlg.Net_info = 0;
|
VariaDlg.send_finish_ok=0;
|
VariaDlg.HandleStep = SYS_DATA;
|
VariaDlg.RestartTime = RESTARTTIME ;
|
|
ModbusDlg.HandleStep = MODBUS_WAIT;
|
ModbusDlg.RepeadNum = REPEATNUM ; //??????
|
ModbusDlg.RepeadTime = 0 ;
|
|
LLJ_Msg.HandlePtr = 0;
|
LLJ_Msg.WritePtr = 0;
|
LLJ_Msg.TempPtr = 0;
|
LLJ_Msg.NewLen = 0;
|
memset((char *)LLJ_Msg.HandBuff,0,sizeof(LLJ_Msg.HandBuff));
|
memset((char *)LLJ_Msg.UartBuff,0,sizeof(LLJ_Msg.UartBuff));
|
|
regDevSerialNum.EquipmentCaliberAndModel = 8;
|
FM25V02_data_write(regDevSerialNum.EquipmentCaliberAndModel, EquipmentCaliberAndModel_ADDR) ;
|
}
|
/******************************************
|
* func: ReturnAfterSetting
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void ReturnAfterSetting(u8 SetResult,u8 FormCode) //ÉÏλ»úÉèÖúóµÄ·µ»Ø½á¹û
|
{
|
u16 ii_index;
|
u16 CrcCheck;
|
GPRS_SEND_BUFF[0] = 0x42;
|
GPRS_SEND_BUFF[1] = 0x42;
|
GPRS_SEND_BUFF[2] = FormCode;
|
GPRS_SEND_BUFF[3] = SetResult;
|
CrcCheck = usMBCRC16(0xFFFF,GPRS_SEND_BUFF,4);
|
|
GPRS_SEND_BUFF[4] = CrcCheck;
|
GPRS_SEND_BUFF[5] = CrcCheck>>8;
|
UTR_Send_Data(GPRS_SEND_BUFF,6);
|
// for(ii_index = 0; ii_index < 6; ii_index++)
|
// {
|
// UTR_sendbyte(GPRS_SEND_BUFF[ii_index]);
|
// }
|
}
|
|
/******************************************
|
* func: ReturnAfterSetting
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void ReturnAfterReading(u16 CrcLength,u8 FormCode) //ÉÏλ»ú¶ÁÈ¡·µ»ØÊý¾Ý
|
{
|
u16 ii_index;
|
u16 CrcCheck;
|
GPRS_SEND_BUFF[0] = 0x52;
|
GPRS_SEND_BUFF[1] = 0x52;
|
GPRS_SEND_BUFF[2] = FormCode;
|
CrcCheck = usMBCRC16(0xFFFF,GPRS_SEND_BUFF,CrcLength);
|
|
GPRS_SEND_BUFF[CrcLength] = CrcCheck;
|
GPRS_SEND_BUFF[CrcLength+1] = CrcCheck>>8;
|
|
UTR_Send_Data(GPRS_SEND_BUFF,CrcLength + 2);
|
|
// for(ii_index = 0; ii_index < (CrcLength + 2); ii_index++)
|
// {
|
// UTR_sendbyte(GPRS_SEND_BUFF[ii_index]);
|
// }
|
|
}
|
/******************************************
|
* func: HostComputerTimeSet
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void HostComputerTimeSet(u8 WriteOrRead,u8 FormCode)//ʱ¼ä
|
{
|
u16 count_i;
|
u16 CrcCheck;
|
u16 CrcLength;
|
u8 SetResult=0;
|
|
CrcLength = HOST_COMPUTER_DATA_INDEX + 6;
|
|
if(WriteOrRead==0)
|
{
|
CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength];
|
if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé
|
{
|
net_now_time.yearN = HEX2BCD(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX]);
|
net_now_time.monthN = HEX2BCD(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 1]);
|
net_now_time.dateN = HEX2BCD(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 2]);
|
net_now_time.hourN = HEX2BCD(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 3]);
|
net_now_time.minN = HEX2BCD(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 4]);
|
net_now_time.secN = HEX2BCD(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 5]);
|
Time_Set(net_now_time.yearN+0x2000,net_now_time.monthN,net_now_time.dateN,1,net_now_time.hourN,net_now_time.minN,net_now_time.secN);
|
delay_ms(10);
|
Get_Time();
|
}else
|
{
|
SetResult = 1;
|
}
|
ReturnAfterSetting(SetResult,FormCode);
|
|
|
}else if(WriteOrRead==1)
|
{
|
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX] = BCD2HEX(calendar.year-0x2000);
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 1] = BCD2HEX(calendar.month);
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 2] = BCD2HEX(calendar.date);
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 3] = BCD2HEX(calendar.hour);
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 4] = BCD2HEX(calendar.min);
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 5] = BCD2HEX(calendar.sec);
|
|
ReturnAfterReading(CrcLength,FormCode);
|
|
}
|
}
|
/******************************************
|
* func: ParameterSettingOfDockingEquipment
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void ParameterSettingOfDockingEquipment(u8 WriteOrRead,u8 FormCode)//¶Ô½ÓÉ豸²ÎÊý
|
{
|
u16 count_i;
|
u16 CrcCheck;
|
u16 CrcLength;
|
u8 SetResult=0;
|
|
CrcLength = HOST_COMPUTER_DATA_INDEX + 30;
|
|
if(WriteOrRead==0)
|
{
|
CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength];
|
if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé
|
{
|
arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX] ,(uint8_t *)¶meter_bil.fPulseCoefficient, 4, 1);
|
|
FM25V02_data_write_float(PULSE_COE_ADDR,parameter_bil.fPulseCoefficient);
|
|
if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 4] ==PULSE_MODE)
|
{
|
parameter_bil.cDataObtainType = PULSE_MODE;
|
if(Settlement_Para.RS485SettlementFlag!=0)
|
{
|
Settlement_Para.RS485SettlementFlag = 0;
|
FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
ClearCardinalFlag();
|
}
|
}
|
else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 4] ==RS485_MODE)
|
{
|
parameter_bil.cDataObtainType = RS485_MODE;
|
if(Settlement_Para.RS485SettlementFlag==0)
|
{
|
Settlement_Para.RS485SettlementFlag = 1;
|
FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
ClearCardinalFlag();
|
}
|
system_alarm.alarm_Pulse_Broken_LCDFLAG = 0;
|
}
|
else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 4] ==RS485_AND_PULSE_MODE)
|
{
|
parameter_bil.cDataObtainType = RS485_AND_PULSE_MODE;
|
if(Settlement_Para.RS485SettlementFlag==0)
|
{
|
Settlement_Para.RS485SettlementFlag = 1;
|
FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
ClearCardinalFlag();
|
}
|
}
|
else
|
{
|
|
}
|
|
FM25V02_data_write(parameter_bil.cDataObtainType,DATA_OBTAIN_TYPE_ADDR);
|
if((parameter_bil.cDataObtainType & RS485_MODE)!= RS485_MODE)
|
{
|
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;
|
}
|
|
arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 5] ,(uint8_t *)&parmAccess.u16MeterTypeCode, 2, 1);
|
FM25V02_data_write_uint16(METER_TYPE_CODE_ADDR,parmAccess.u16MeterTypeCode);
|
|
if((parameter_bil.cDataObtainType & PULSE_MODE)== PULSE_MODE)
|
{
|
if((parmAccess.u16MeterTypeCode==ASMODBUS)||(parmAccess.u16MeterTypeCode==AS100MODBUS)||(parmAccess.u16MeterTypeCode==SIARGO_MODBUS)) //ÅжÏÊÇ·ñ°®ÖªÁ÷Á¿¼Æ£¬°®ÖªÁ÷Á¿¼ÆÂö³åʶ±ð²ÉÓ÷½²¨ÉÏÉýÑØÊ¶±ð·½Ê½
|
{
|
LOW_PULSE_Rising_config();
|
Low_Pluse_GPIO_Init();
|
}
|
else
|
{
|
LOW_PULSE_config();
|
Low_Pluse_GPIO_Init();
|
}
|
}else
|
{
|
LOW_PULSE_Rising_disconfig();
|
Low_Pluse_GPIO_sleep_Init();
|
}
|
|
parmAccess.u8BaudRateCode =UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 7];
|
FM25V02_data_write(parmAccess.u8BaudRateCode ,BAUD_RATE_CODE_ADDR);
|
|
parmAccess.u8RS485Parity =UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 8];
|
FM25V02_data_write(parmAccess.u8RS485Parity ,RS485_PARITY_ADDR);
|
|
parmAccess.u8EXPVoltageCode =UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 9];
|
FM25V02_data_write(parmAccess.u8EXPVoltageCode ,EXP_VOLTAGE_CODE_ADDR);
|
|
parameter_bil.u8PulseWidth = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 10];
|
FM25V02_data_write(parameter_bil.u8PulseWidth,PULSE_WITDH_ADDR);
|
|
parmAccess.u8LowPowerAlarmLine = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 11];
|
FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR);
|
|
parmAccess.u8slaveAddress = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 12];
|
FM25V02_data_write(parmAccess.u8slaveAddress,SLAVE_ADDRESS_ADDR);
|
}else
|
{
|
SetResult = 1;
|
}
|
ReturnAfterSetting(SetResult,FormCode);
|
|
|
}else if(WriteOrRead==1)
|
{
|
|
arraya_2_arrayb((uint8_t *)¶meter_bil.fPulseCoefficient,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX], 4, 1);
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 4] = parameter_bil.cDataObtainType;
|
arraya_2_arrayb((uint8_t *)&parmAccess.u16MeterTypeCode , &GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 5], 2, 1);
|
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 7] = parmAccess.u8BaudRateCode;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 8] = parmAccess.u8RS485Parity;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 9] = parmAccess.u8EXPVoltageCode;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 10] = parameter_bil.u8PulseWidth;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 11] = parmAccess.u8LowPowerAlarmLine;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 12] = parmAccess.u8slaveAddress;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 13] = 0;//DataPackage_xinao.SubmachineNumber
|
|
for(count_i=0;count_i<16;count_i++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 14 + count_i] = 0;
|
}
|
|
ReturnAfterReading(CrcLength,FormCode);
|
|
}
|
}
|
/******************************************
|
* func: SerialNumberSet
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void SerialNumberSet(u8 WriteOrRead,u8 FormCode)//ÐòÁкš¢±àºÅ¡¢°æ±¾ºÅµÈÉèÖÃ
|
{
|
u16 count_i;
|
u16 CrcCheck;
|
u16 CrcLength;
|
u8 SetResult=0;
|
|
CrcLength = HOST_COMPUTER_DATA_INDEX + 92;
|
|
if(WriteOrRead==0)
|
{
|
|
CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength];
|
if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé
|
{
|
for(count_i=0;count_i<8;count_i++)
|
{
|
gprs_protocol_header.DeviceAddress[count_i] = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX +7-count_i];
|
FM25V02_data_write(gprs_protocol_header.DeviceAddress[count_i], DeviceAddress_Addr+count_i) ;
|
}
|
//·§ÃÅÐͺÅÅжÏ
|
if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x10) //50
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 4;
|
}
|
else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x20)//80
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 5;
|
}
|
else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x30)//100
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 6;
|
}
|
else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x40) //150
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 7;
|
}
|
else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x50) //200
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 8;
|
}
|
else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x60) //25
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 1;
|
}
|
else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x70) //32
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 2;
|
}
|
else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x80) //40
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 3;
|
}
|
else
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 8;
|
}
|
|
for(count_i=0;count_i<3;count_i++)
|
{
|
regDevSerialNum.hardwareVerSn[2-count_i] = ((uint16)UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+8+count_i*2]<<8) + ((uint16)UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+9+count_i*2]);
|
}
|
FM25V02_data_write_uint16(HardwareVerSn1_ADDR, regDevSerialNum.hardwareVerSn[0]) ;
|
FM25V02_data_write_uint16(HardwareVerSn2_ADDR, regDevSerialNum.hardwareVerSn[1]) ;
|
FM25V02_data_write_uint16(HardwareVerSn3_ADDR, regDevSerialNum.hardwareVerSn[2]) ;
|
|
for(count_i=0;count_i<3;count_i++)
|
{
|
regDevSerialNum.firmwareVer[2-count_i] = ((uint16)UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+16+count_i*2]<<8) + ((uint16)UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+17+count_i*2]);
|
}
|
FM25V02_data_write_uint16(FirmwareVerSn1_ADDR, regDevSerialNum.firmwareVer[0]) ;
|
FM25V02_data_write_uint16(FirmwareVerSn2_ADDR, regDevSerialNum.firmwareVer[1]) ;
|
FM25V02_data_write_uint16(FirmwareVerSn3_ADDR, regDevSerialNum.firmwareVer[2]) ;
|
|
arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 22] ,(uint8_t *)®DevSerialNum.firmwareCRC, 2, 1);
|
FM25V02_data_write_uint16(FirmwareCRC_ADDR, regDevSerialNum.firmwareCRC);
|
|
if(regDevSerialNum.EquipmentCaliberAndModel == UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 91])
|
{
|
|
}
|
else
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 91];
|
}
|
FM25V02_data_write(regDevSerialNum.EquipmentCaliberAndModel, EquipmentCaliberAndModel_ADDR) ;
|
}else
|
{
|
SetResult = 1;
|
}
|
ReturnAfterSetting(SetResult,FormCode);
|
|
}else if(WriteOrRead==1)
|
{
|
for(count_i=0;count_i<8;count_i++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 7 - count_i] = gprs_protocol_header.DeviceAddress[count_i];
|
}
|
|
for(count_i=0;count_i<3;count_i++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 8 + count_i*2] = regDevSerialNum.hardwareVerSn[2-count_i]>>8;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 9 + count_i*2] = regDevSerialNum.hardwareVerSn[2-count_i];
|
}
|
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 14 + 0] = 0;//regDevSerialNum.firmwareVer[count_i]
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 14 + 1] = 0;//regDevSerialNum.firmwareVer[count_i]
|
for(count_i=0;count_i<3;count_i++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 16 + count_i*2] = regDevSerialNum.firmwareVer[2-count_i]>>8;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 17 + count_i*2] = regDevSerialNum.firmwareVer[2-count_i];
|
}
|
|
arraya_2_arrayb((uint8_t *)®DevSerialNum.firmwareCRC ,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 22], 2, 1);
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 24] = HEX2BCD(regDevSerialNum.firmwareVerDate_year-2000); //¹Ì¼þÈÕÆÚ,´ó¸ÅÊÇ10½øÖÆÊ±¼ä£¬·ÇBCD
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 25] = HEX2BCD(regDevSerialNum.firmwareVerDate_month) ;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 26] = HEX2BCD(regDevSerialNum.firmwareVerDate_day) ;
|
|
for(count_i=0;count_i<64;count_i++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 27 + count_i] = 0;
|
}
|
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 91] = regDevSerialNum.EquipmentCaliberAndModel;
|
|
ReturnAfterReading(CrcLength,FormCode);
|
|
}
|
}
|
/******************************************
|
* func: ParameterSettingOfServer
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void ParameterSettingOfServer(u8 WriteOrRead,u8 FormCode)//˼Öþ·þÎñÆ÷Ïà¹Ø²ÎÊý101
|
{
|
u16 count_i;
|
u16 CrcCheck;
|
u16 CrcLength;
|
u8 SetResult=0;
|
|
CrcLength = HOST_COMPUTER_DATA_INDEX + 40;
|
|
if(WriteOrRead==0)
|
{
|
CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength];
|
if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé
|
{
|
for(count_i=0;count_i<4;count_i++)
|
{
|
VariaDlg.ServerIP[count_i] = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + count_i];
|
FM25V02_data_write(VariaDlg.ServerIP[count_i],IP_Addr + count_i);
|
}
|
|
arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 4] ,(uint8_t *)&VariaDlg.ServerPort[0], 2, 1);
|
FM25V02_data_write(VariaDlg.ServerPort[0],IP_Addr + 4);
|
FM25V02_data_write(VariaDlg.ServerPort[1],IP_Addr + 5);
|
|
device_Parm.Tyf = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 14];
|
device_Parm.Tf = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 15];
|
FM25V02_data_write(device_Parm.Tyf,Tyf_Addr);
|
FM25V02_data_write(device_Parm.Tf,Ty_Addr);
|
|
device_Parm.Typ = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 16];
|
device_Parm.Tp = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 17];
|
FM25V02_data_write(device_Parm.Typ,Typ_Addr);
|
FM25V02_data_write(device_Parm.Tp,Tp_Addr);
|
|
Get_Sample_Send_Interval();
|
|
device_Parm.time1_flag = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 18]&0x80;
|
device_Parm.sendTiming_hour = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 18]&0x7f;
|
device_Parm.sendTiming_min = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 19];
|
FM25V02_data_write(device_Parm.time1_flag,Time1_Flag_Addr);
|
FM25V02_data_write(device_Parm.sendTiming_hour,SendTiming_Hour_Addr);
|
FM25V02_data_write(device_Parm.sendTiming_min,SendTiming_Min_Addr);
|
|
device_Parm.time2_flag = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 20]&0x80;
|
device_Parm.sendTiming_hour2 = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 20]&0x7f;
|
device_Parm.sendTiming_min2 = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 21];
|
FM25V02_data_write(device_Parm.time2_flag,Time2_Flag_Addr);
|
FM25V02_data_write(device_Parm.sendTiming_hour2,SendTiming_Hour2_Addr);
|
FM25V02_data_write(device_Parm.sendTiming_min2,SendTiming_Min2_Addr);
|
|
if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 23]< 40)
|
{
|
device_Parm.GPRS_RESTARTTIME = 60;
|
}
|
else
|
{
|
device_Parm.GPRS_RESTARTTIME = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 23];
|
}
|
|
FM25V02_data_write(device_Parm.GPRS_RESTARTTIME,GPRS_RestartTime_Addr);
|
|
}else
|
{
|
SetResult = 1;
|
}
|
ReturnAfterSetting(SetResult,FormCode);
|
|
|
}else if(WriteOrRead==1)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX ] = VariaDlg.ServerIP[0] ;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 1] = VariaDlg.ServerIP[1] ;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 2] = VariaDlg.ServerIP[2] ;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 3] = VariaDlg.ServerIP[3] ;
|
|
arraya_2_arrayb((uint8_t *)&VariaDlg.ServerPort[0] ,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 4], 2, 1);
|
for(count_i=0;count_i<6;count_i++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 6 + count_i] = 0;
|
}
|
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 12] = 1;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 13] = 0;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 14] = device_Parm.Tyf;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 15] = device_Parm.Tf;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 16] = device_Parm.Typ;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 17] = device_Parm.Tp;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 18] = device_Parm.time1_flag | device_Parm.sendTiming_hour;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 19] = device_Parm.sendTiming_min;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 20] = device_Parm.time2_flag | device_Parm.sendTiming_hour2;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 21] = device_Parm.sendTiming_min2;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 22] = 0;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 23] = device_Parm.GPRS_RESTARTTIME;
|
|
for(count_i=0;count_i<16;count_i++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 24 + count_i] = 0;
|
}
|
|
ReturnAfterReading(CrcLength,FormCode);
|
|
}
|
}
|
/******************************************
|
* func: ValveStateSetting
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void ValveStateSetting(u8 WriteOrRead,u8 FormCode)//·§ÃÅ״̬ÉèÖÃ122
|
{
|
u16 count_i;
|
u16 CrcCheck;
|
u16 CrcLength;
|
u8 SetResult=0;
|
|
CrcLength = HOST_COMPUTER_DATA_INDEX + 32;
|
|
if(WriteOrRead==0)
|
{
|
CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength];
|
if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé
|
{
|
if((UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX ] == SZV101_VALVE)||(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX ] == SZV102_VALVE)||(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX ] == SZV103_VALVE))
|
{
|
Valve_control_parm.Valve_Type = UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX ];
|
FM25V02_data_write(Valve_control_parm.Valve_Type,VALVE_TYPE_ADDR);
|
}
|
|
if(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX + 2] == 2)
|
{
|
OpenValveAuthorizeFLAG = 0x01; //ÆÕͨÊÚȨ¿ª·§±êÖ¾
|
FM25V02_data_write(OpenValveAuthorizeFLAG,OPEN_VALVE_AUTHORIZE_FLAG_ADDR);
|
}
|
else if(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX + 2] == 1)
|
{
|
OpenValveAuthorizeFLAG = 0x00; //ÆÕͨÊÚȨ¿ª·§±êÖ¾
|
FM25V02_data_write(OpenValveAuthorizeFLAG,OPEN_VALVE_AUTHORIZE_FLAG_ADDR);
|
}
|
}else
|
{
|
SetResult = 1;
|
}
|
ReturnAfterSetting(SetResult,FormCode);
|
|
|
}else if(WriteOrRead==1)
|
{
|
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX ] = Valve_control_parm.Valve_Type;
|
if(OpenValveFLAG == 1) //¿ª·§ÖÐ
|
{
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 1] = 0x44;
|
}
|
else if(OpenValveFLAG == 2)
|
{
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 1] = 0x55; //Èç¹ûûÓз§ÃÅĬÈÏ0x11£¬·§ÃÅ´ò¿ª
|
}
|
else if(gprs_protocol_header.Valve_Status==1)
|
{
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 1] = 0x11; //Èç¹ûûÓз§ÃÅĬÈÏ0x11£¬·§ÃÅ´ò¿ª
|
}
|
else if(gprs_protocol_header.Valve_Status==2)
|
{
|
if(OpenValveAuthorizeFLAG == 0x01)
|
{
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 1] = 0x22;
|
}else
|
{
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 1] = 0x33;
|
}
|
}
|
else if(gprs_protocol_header.Valve_Status == 3)
|
{
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 1] = 0x66;
|
}
|
else
|
{
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 1] = 0x11;
|
}
|
if(OpenValveAuthorizeFLAG == 1)
|
{
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 2] = 2;
|
}
|
else if(OpenValveAuthorizeFLAG == 0)
|
{
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 2] = 1;
|
}
|
else
|
{
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX + 2] = 0;
|
}
|
for(count_i=0;count_i<29;count_i++)
|
{
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX +3 +count_i] = 0;
|
}
|
|
ReturnAfterReading(CrcLength,FormCode);
|
|
}
|
}
|
/******************************************
|
* func: ParameterSettingOfServer
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void FunctionParameterSetting(u8 WriteOrRead,u8 FormCode)//¹¦ÄܲÎÊý103
|
{
|
u16 count_i;
|
u16 CrcCheck;
|
u16 CrcLength;
|
u8 SetResult=0;
|
|
CrcLength = HOST_COMPUTER_DATA_INDEX + 51;
|
|
if(WriteOrRead==0)
|
{
|
CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength];
|
if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé
|
{
|
// if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX]&0x01)==0x01)
|
// {
|
// IOT_Parameter.HighAmbientTemAlarmFlag = 1;
|
// FM25V02_data_write(IOT_Parameter.HighAmbientTemAlarmFlag,HIGH_AMBIENT_TEM_ALARM_FLAG_ADDR);
|
// }else
|
// {
|
// IOT_Parameter.HighAmbientTemAlarmFlag = 0;
|
// FM25V02_data_write(IOT_Parameter.HighAmbientTemAlarmFlag,HIGH_AMBIENT_TEM_ALARM_FLAG_ADDR);
|
// }
|
|
// if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+2]&0x01)==0x01)
|
// {
|
// IOT_Parameter.ValveAbnormalCloseValveFlag = 1;
|
// FM25V02_data_write(IOT_Parameter.ValveAbnormalCloseValveFlag,VALVE_ABNORMAL_CLOSE_FLAG_ADDR);
|
// }else
|
// {
|
// IOT_Parameter.ValveAbnormalCloseValveFlag = 0;
|
// FM25V02_data_write(IOT_Parameter.ValveAbnormalCloseValveFlag,VALVE_ABNORMAL_CLOSE_FLAG_ADDR);
|
// }
|
|
|
// if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+4]&0x01)==0x01)
|
// {
|
// IOT_Parameter.PowerUpReportFlag = 1;
|
// FM25V02_data_write(IOT_Parameter.PowerUpReportFlag,POWER_UP_REPORT_FLAG_ADDR);
|
// }else
|
// {
|
// IOT_Parameter.PowerUpReportFlag = 0;
|
// FM25V02_data_write(IOT_Parameter.PowerUpReportFlag,POWER_UP_REPORT_FLAG_ADDR);
|
// }
|
|
if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+5]&0x01)==0x01)
|
{
|
if(device_Parm.AccountStatus!=1)
|
{
|
device_Parm.AccountStatus = 1;
|
Settlement_Para.fBalance = 0;
|
FM25V02_data_write(device_Parm.AccountStatus,ACCOUNT_STATUS_ADDR);
|
|
Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR);
|
|
BillRecord();
|
ClearCardinalFlag();
|
VariaDlg.ReceivedInstructionFlag = 1;//¼°Ê±Á˽âÓà¶î״̬
|
}
|
}else
|
{
|
if(device_Parm.AccountStatus!=0)
|
{
|
device_Parm.AccountStatus = 0;
|
Settlement_Para.fBalance = 10;
|
FM25V02_data_write(device_Parm.AccountStatus,ACCOUNT_STATUS_ADDR);
|
|
Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR);
|
|
BillRecord();
|
ClearCardinalFlag();
|
VariaDlg.ReceivedInstructionFlag = 1;//¼°Ê±Á˽âÓà¶î״̬
|
}
|
}
|
if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+6]&0x01)==0x01)
|
{
|
LCD_flag = 1;
|
FM25V02_data_write(LCD_flag,LCD_FLAG_ADDR);
|
}else
|
{
|
LCD_flag = 0;
|
FM25V02_data_write(LCD_flag,LCD_FLAG_ADDR);
|
}
|
|
if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+7]&0x01)==0x01)//й¶±¨¾¯
|
{
|
parmAccess.u8LowPowerAlarmLine = parmAccess.u8LowPowerAlarmLine | 0x04;
|
FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR);
|
}else
|
{
|
parmAccess.u8LowPowerAlarmLine = parmAccess.u8LowPowerAlarmLine & 0xFB;
|
FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR);
|
}
|
|
// if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+8]&0x01)==0x01)
|
// {
|
// IOT_Parameter.RS485AbnormalCloseValveFlag = 1;
|
// FM25V02_data_write(IOT_Parameter.RS485AbnormalCloseValveFlag,RS485_ABNORMAL_CLOSE_FLAG_ADDR);
|
// }else
|
// {
|
// IOT_Parameter.RS485AbnormalCloseValveFlag = 0;
|
// FM25V02_data_write(IOT_Parameter.RS485AbnormalCloseValveFlag,RS485_ABNORMAL_CLOSE_FLAG_ADDR);
|
// }
|
|
// if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+9]&0x01)==0x01)
|
// {
|
// IOT_Parameter.HourlyStorageFlag = 1;
|
// FM25V02_data_write(IOT_Parameter.HourlyStorageFlag,HOURLY_STORAGE_FLAG_ADDR);
|
// }else
|
// {
|
// IOT_Parameter.HourlyStorageFlag = 0;
|
// FM25V02_data_write(IOT_Parameter.HourlyStorageFlag,HOURLY_STORAGE_FLAG_ADDR);
|
// }
|
|
///jlcÂö³åÏß¶ÏÏß±¨¾¯¹Ø·§¹¦ÄÜ
|
|
///jlcÆøÌåй©¹Ø·§¹¦ÄÜ£¬Ä¬ÈÏÆôÓÃ
|
|
// if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+10] == 1) //³¤ÆÚÔÚÏß¹¦ÄÜ
|
// {
|
// IOT_Parameter.StayOnlineFlag = 1;
|
// FM25V02_data_write(IOT_Parameter.StayOnlineFlag,STAY_ONLINE_FLAG_ADDR);
|
// }else
|
// {
|
// IOT_Parameter.StayOnlineFlag = 0;
|
// FM25V02_data_write(IOT_Parameter.StayOnlineFlag,STAY_ONLINE_FLAG_ADDR);
|
// }
|
|
// if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+11] == 1) //ÐéÄâ¼Æ·Ñ¹¦ÄÜ
|
// {
|
// IOT_Parameter.BillingTypeFlag = 1;
|
// FM25V02_data_write(IOT_Parameter.BillingTypeFlag,BILLING_TYPE_FLAG_ADDR);
|
// }else
|
// {
|
// IOT_Parameter.BillingTypeFlag = 0;
|
// FM25V02_data_write(IOT_Parameter.BillingTypeFlag,BILLING_TYPE_FLAG_ADDR);
|
// }
|
|
///¶Ô½ÓÉ豸µÍµç±¨¾¯
|
if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+15]&0x01)==0x01)
|
{
|
parmAccess.u8LowPowerAlarmLine = parmAccess.u8LowPowerAlarmLine | 0x01;
|
FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR);
|
}else
|
{
|
parmAccess.u8LowPowerAlarmLine = parmAccess.u8LowPowerAlarmLine & 0xFE;
|
FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR);
|
}
|
|
///¶Ô½ÓÉ豸Ƿµç±¨¾¯
|
if((UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+16]&0x01)==0x01)
|
{
|
parmAccess.u8LowPowerAlarmLine = parmAccess.u8LowPowerAlarmLine | 0x02;
|
FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR);
|
}else
|
{
|
parmAccess.u8LowPowerAlarmLine = parmAccess.u8LowPowerAlarmLine & 0xFD;
|
FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR);
|
}
|
|
|
///·§¶Ë¼Æ·ÑģʽѡÔñ
|
if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+18]==0x00)
|
{
|
if(Settlement_Para.RS485SettlementFlag==1)
|
{
|
Settlement_Para.RS485SettlementFlag = 0;
|
FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
ClearCardinalFlag();
|
}
|
|
}else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+18]==0x01)
|
{
|
if(Settlement_Para.RS485SettlementFlag==1)
|
{
|
Settlement_Para.RS485SettlementFlag = 0;
|
FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
ClearCardinalFlag();
|
}
|
|
}else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+18]==0x02)
|
{
|
if(Settlement_Para.RS485SettlementFlag==0)
|
{
|
Settlement_Para.RS485SettlementFlag = 1;
|
FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
ClearCardinalFlag();
|
}
|
|
}else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+18]==0x03)
|
{
|
if(Settlement_Para.RS485SettlementFlag==0)
|
{
|
Settlement_Para.RS485SettlementFlag = 1;
|
FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
ClearCardinalFlag();
|
}
|
|
}
|
//¼Æ·ÑģʽѡÔñ 0-±í¶Ë 1-ºǫ́
|
if(__UPPER_DATA_ALTER(BalanceSaveType,UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 19]))
|
{
|
switch(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 19])
|
{
|
case 0:
|
BalanceSaveType = 0;
|
break;
|
case 1:
|
// BillingTypeFlag = 1;//ÐéÄâ¼Æ·Ñ
|
BalanceSaveType = 1;//¼Æ·ÑģʽѡÔñ
|
break;
|
default:break;
|
}
|
FM25V02_data_write(BalanceSaveType,BALANCE_SAVE_TYPE_ADDR);
|
}
|
|
if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+20]==0x00)
|
{
|
device_Parm.Logo_Display_Flag = 0;
|
FM25V02_data_write(device_Parm.Logo_Display_Flag,LOGO_DISPLAY_FLAG_ADDR);
|
}
|
else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+20]==0x01)
|
{
|
device_Parm.Logo_Display_Flag = 1;
|
FM25V02_data_write(device_Parm.Logo_Display_Flag,LOGO_DISPLAY_FLAG_ADDR);
|
}
|
|
if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+23]==0x00)
|
{
|
device_Parm.show_balance_flag = 0;
|
FM25V02_data_write(device_Parm.show_balance_flag,SHOW_BALANCE_FLAG_ADDR);
|
}
|
else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+23]==0x01)
|
{
|
device_Parm.show_balance_flag = 1;
|
FM25V02_data_write(device_Parm.show_balance_flag,SHOW_BALANCE_FLAG_ADDR);
|
}
|
|
if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+24]==0x00)
|
{
|
device_Parm.show_price_flag = 0;
|
FM25V02_data_write(device_Parm.show_price_flag,SHOW_PRICE_FLAG_ADDR);
|
}
|
else if(UTR_rec_buff[HOST_COMPUTER_DATA_INDEX+24]==0x01)
|
{
|
device_Parm.show_price_flag = 1;
|
FM25V02_data_write(device_Parm.show_price_flag,SHOW_PRICE_FLAG_ADDR);
|
}
|
|
}else
|
{
|
SetResult = 1;
|
}
|
ReturnAfterSetting(SetResult,FormCode);
|
|
|
}else if(WriteOrRead==1)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX ] = 0;//IOT_Parameter.HighAmbientTemAlarmFlag
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 1] = 0;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 2] = 0;//IOT_Parameter.ValveAbnormalCloseValveFlag
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 3] = 0;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 4] = 0;//IOT_Parameter.PowerUpReportFlag
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 5] = device_Parm.AccountStatus;//
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 6] = LCD_flag;
|
if((parmAccess.u8LowPowerAlarmLine&0x04)==0x04)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 7] = 1;
|
}else
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 7] = 0;
|
}
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 8] = 0;//IOT_Parameter.RS485AbnormalCloseValveFlag
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 9] = 0;//IOT_Parameter.HourlyStorageFlag
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 10] = 0;//IOT_Parameter.StayOnlineFlag
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 11] = 0;//IOT_Parameter.BillingTypeFlag
|
if((parameter_bil.cDataObtainType & PULSE_MODE) == PULSE_MODE)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 12] = 1;///jlcÂö³åÏß¶ÏÏß±¨¾¯¹Ø·§¹¦ÄÜ
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 13] = 1;///jlcÂö³åÏß¶ÏÏß±¨¾¯¹Ø·§¹¦ÄÜ
|
}else
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 12] = 0;///jlcÂö³åÏß¶ÏÏß±¨¾¯¹Ø·§¹¦ÄÜ
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 13] = 0;///jlcÂö³åÏß¶ÏÏß±¨¾¯¹Ø·§¹¦ÄÜ
|
}
|
if((parmAccess.u8LowPowerAlarmLine&0x04)==0x04)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 14] = 1;///jlcÆøÌåй©¹Ø·§¹¦ÄÜ
|
}else
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 14] = 0;
|
}
|
|
if((parmAccess.u8LowPowerAlarmLine&0x01)==0x01)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 15] = 1;
|
}else
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 15] = 0;
|
}
|
|
if((parmAccess.u8LowPowerAlarmLine&0x02)==0x02)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 16] = 1;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 17] = 1;
|
}else
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 16] = 0;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 17] = 0;
|
}
|
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 18] = 0;
|
if((parameter_bil.cDataObtainType & PULSE_MODE) == PULSE_MODE)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 18] = GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 18] | 0x01;
|
}
|
|
if(Settlement_Para.RS485SettlementFlag==1)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 18] = GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 18] | 0x02;
|
}
|
|
if(BalanceSaveType == 1)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 19] = 1;
|
}
|
else
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 19] = 0;
|
}
|
|
if(device_Parm.Logo_Display_Flag==0)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 20] =0;
|
}
|
else
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 20] =1;
|
}
|
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 21] = 0;
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 22] = 0;
|
|
if(device_Parm.show_balance_flag==0)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 23] =0;
|
}
|
else
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 23] =1;
|
}
|
|
if(device_Parm.show_price_flag==0)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 24] =0;
|
}
|
else
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 24] =1;
|
}
|
|
for(count_i=0;count_i<26;count_i++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 25 + count_i] = 0;
|
}
|
|
ReturnAfterReading(CrcLength,FormCode);
|
|
}
|
}
|
/******************************************
|
* func: AbnormalSetting
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void AbnormalSetting(u8 WriteOrRead,u8 FormCode)//Òì³£²Ù×÷123
|
{
|
u16 count_i;
|
u16 CrcCheck;
|
u16 CrcLength;
|
u8 SetResult=0;
|
|
CrcLength = HOST_COMPUTER_DATA_INDEX + 65;
|
|
if(WriteOrRead==0)
|
{
|
CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength];
|
if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé
|
{
|
if(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX ] == 0x01)
|
{
|
system_alarm.alarm_E2RW_read_abnormal_FLAG =0;
|
FM25V02_data_write(system_alarm.alarm_E2RW_read_abnormal_FLAG,E2RW_READ_ABNORMAL_FLAG_ADDR);
|
system_alarm.alarm_E2RW_write_abnormal_FLAG =0;
|
FM25V02_data_write(system_alarm.alarm_E2RW_write_abnormal_FLAG,E2RW_WRITE_ABNORMAL_FLAG_ADDR);
|
system_alarm.alarm_Gas_Leak_LCDFLAG = 0;
|
system_alarm.alarm_Gas_Leak_time = 0;
|
}else if(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX ] == 0x00)
|
{
|
if(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX +1] == 0x00)
|
{
|
system_alarm.alarm_E2RW_read_abnormal_FLAG =0;
|
FM25V02_data_write(system_alarm.alarm_E2RW_read_abnormal_FLAG,E2RW_READ_ABNORMAL_FLAG_ADDR);
|
}
|
|
if(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX +2] == 0x00)
|
{
|
system_alarm.alarm_E2RW_write_abnormal_FLAG =0;
|
FM25V02_data_write(system_alarm.alarm_E2RW_write_abnormal_FLAG,E2RW_WRITE_ABNORMAL_FLAG_ADDR);
|
}
|
if(UTR_rec_buff[ HOST_COMPUTER_DATA_INDEX +3] == 0x00)
|
{
|
system_alarm.alarm_Gas_Leak_LCDFLAG =0;
|
system_alarm.alarm_Gas_Leak_time = 0;
|
}
|
}
|
}else
|
{
|
SetResult = 1;
|
}
|
ReturnAfterSetting(SetResult,FormCode);
|
|
|
}else if(WriteOrRead==1)
|
{
|
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX ] = 0;
|
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX +1 ] = system_alarm.alarm_E2RW_read_abnormal_FLAG;
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX +2 ] = system_alarm.alarm_E2RW_write_abnormal_FLAG;
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX +3 ] = system_alarm.alarm_Gas_Leak_LCDFLAG;
|
|
for(count_i=0;count_i<61;count_i++)
|
{
|
GPRS_SEND_BUFF[ HOST_COMPUTER_DATA_INDEX +4 +count_i] = 0;
|
}
|
|
ReturnAfterReading(CrcLength,FormCode);
|
|
}
|
}
|
|
/******************************************
|
* func: ValveControlTimes
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void ValveControlTimes(u8 WriteOrRead,u8 FormCode)
|
{
|
u16 count_i;
|
u16 CrcCheck;
|
u16 CrcLength;
|
u8 SetResult=0;
|
|
CrcLength = HOST_COMPUTER_DATA_INDEX + 4;
|
|
if(WriteOrRead==0)
|
{
|
CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength];
|
if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé
|
{
|
}
|
else
|
{
|
SetResult = 1;
|
}
|
ReturnAfterSetting(SetResult,FormCode);
|
|
|
}else if(WriteOrRead==1)
|
{
|
arraya_2_arrayb((uint8_t *)&ValveOpenTimes,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX +0], 2, 1);
|
arraya_2_arrayb((uint8_t *)&ValveCloseTimes,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX +2], 2, 1);
|
ReturnAfterReading(CrcLength,FormCode);
|
}
|
}
|
|
/******************************************
|
* func: CumulantsModificationSetting
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void CumulantsModificationSetting(u8 WriteOrRead,u8 FormCode)//ÀÛ»ýÁ¿ÐÞ¸Ä106
|
{
|
u16 count_i;
|
u16 CrcCheck;
|
u16 CrcLength;
|
u8 SetResult=0;
|
|
u8 ModifyResult=0;
|
u8 GasModifyFlag=0;
|
u8 FeeModifyFlag=0;
|
double PreModifyGasValue ;
|
double PreModifyFeeValue ;
|
double ModifiedGasValue ;
|
double ModifiedFeeValue ;
|
|
CrcLength = HOST_COMPUTER_DATA_INDEX + 50;
|
|
if(WriteOrRead==0)
|
{
|
CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength];
|
if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé
|
{
|
|
PreModifyGasValue = Settlement_Para.fCumulativeGasUsage;
|
PreModifyFeeValue = Settlement_Para.fCumulativeFeeUsage;
|
|
GasModifyFlag = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX];
|
if(GasModifyFlag==1)
|
{
|
arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 1] ,(uint8_t *)&ModifiedGasValue, 8, 1);
|
|
if((ModifiedGasValue>=0)&&(ModifiedGasValue<=GAS_USAGE_UP_LIMIT))
|
{
|
Settlement_Para.fCumulativeGasUsage = ModifiedGasValue;
|
Write_Verification(Settlement_Para.fCumulativeGasUsage,REALTIME_CUMULATIVE_GAS_USAGE_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_B_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_C_ADDR);
|
FM25V02_data_write_double(GAS_USAGE_BIL_ADDR, Settlement_Para.fCumulativeGasUsage);
|
}else
|
{
|
SetResult = 1;
|
}
|
}
|
|
FeeModifyFlag = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 9];
|
if(FeeModifyFlag==1)
|
{
|
|
arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 10] ,(uint8_t *)&ModifiedFeeValue, 8, 1);
|
|
if((ModifiedFeeValue>=0)&&(ModifiedFeeValue<=FEE_USAGE_UP_LIMIT))
|
{
|
Settlement_Para.fCumulativeFeeUsage = ModifiedFeeValue;
|
Write_Verification(Settlement_Para.fCumulativeFeeUsage,REALTIME_CUMULATIVE_FEE_USAGE_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_B_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_C_ADDR);
|
FM25V02_data_write_double(FEE_USAGE_BIL_ADDR, Settlement_Para.fCumulativeFeeUsage);
|
}else
|
{
|
SetResult = 1;
|
}
|
}
|
|
if((FeeModifyFlag==1)||(GasModifyFlag==1))
|
{
|
CumulantsRecord(GasModifyFlag,PreModifyGasValue,FeeModifyFlag,PreModifyFeeValue);
|
}
|
|
}else
|
{
|
SetResult = 1;
|
}
|
ReturnAfterSetting(SetResult,FormCode);
|
|
|
}else if(WriteOrRead==1)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX ] = 0 ;
|
|
arraya_2_arrayb( (uint8_t *)&Settlement_Para.fCumulativeGasUsage,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 1], 8, 1);
|
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 9] = 0 ;
|
|
arraya_2_arrayb( (uint8_t *)&Settlement_Para.fCumulativeFeeUsage,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 10], 8, 1);
|
|
for(count_i=0;count_i<32;count_i++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 18 + count_i] = 0;
|
}
|
|
ReturnAfterReading(CrcLength,FormCode);
|
|
}
|
}
|
/******************************************
|
* func: BalanceModificationSetting
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void BalanceModificationSetting(u8 WriteOrRead,u8 FormCode)//Óà¶îÐÞ¸Ä107
|
{
|
u16 count_i;
|
u16 CrcCheck;
|
u16 CrcLength;
|
u8 SetResult=0;
|
|
u8 BalanceModifyFlag=0;
|
double ModifiedBalanceValue ;
|
|
CrcLength = HOST_COMPUTER_DATA_INDEX + 41;
|
|
if(WriteOrRead==0)
|
{
|
CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength];
|
if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé
|
{
|
|
BalanceModifyFlag = UTR_rec_buff[HOST_COMPUTER_DATA_INDEX];
|
if(BalanceModifyFlag==1)
|
{
|
arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX + 1] ,(uint8_t *)&ModifiedBalanceValue, 8, 1);
|
|
if((ModifiedBalanceValue>=BALANCE_LOWER_LIMIT)&&(ModifiedBalanceValue<=BALANCE_UP_LIMIT))
|
{
|
// Settlement_Para.fBalance = ModifiedBalanceValue;
|
// Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR);
|
// FM25V02_data_write_double(BALANCE_BIL_ADDR , Settlement_Para.fBalance);
|
|
//if(ModifiedBalanceValue==0)
|
if(1)
|
{
|
BalanceModify(ModifiedBalanceValue);
|
BillRecord();
|
VariaDlg.ReceivedInstructionFlag = 1;
|
|
if(Settlement_Para.fBalance<=parameter_bil.iBalanceInsufAlarmAmount)
|
{
|
system_alarm.alarm_Balance_Small_LCDFLAG = 0x01;
|
}
|
else
|
{
|
system_alarm.alarm_Balance_Small_LCDFLAG = 0x00;
|
}
|
}
|
else
|
{
|
SetResult = 1;
|
}
|
}else
|
{
|
SetResult = 1;
|
}
|
}
|
}else
|
{
|
SetResult = 1;
|
}
|
ReturnAfterSetting(SetResult,FormCode);
|
|
|
}else if(WriteOrRead==1)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX ] = 0 ;
|
|
arraya_2_arrayb( (uint8_t *)&Settlement_Para.fBalance,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 1], 8, 1);
|
for(count_i=0;count_i<32;count_i++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 9 + count_i] = 0;
|
}
|
|
ReturnAfterReading(CrcLength,FormCode);
|
|
}
|
}
|
/******************************************
|
* func: CumModify_Record_Read
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void CumModify_Record_Read(u8 WriteOrRead,u8 FormCode)//ÀÛ»ýÁ¿Ð޸ļǼ¶ÁÈ¡115
|
{
|
u16 count_i,count_j;
|
u16 CrcCheck;
|
u16 CrcLength;
|
u8 SetResult=0;
|
u32 current_para_record_addr;
|
u16 Read_index=0;
|
u16 ReadNum;
|
|
CrcLength = HOST_COMPUTER_DATA_INDEX + 160;
|
|
if(WriteOrRead==0)
|
{
|
CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength];
|
if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé
|
{
|
for(count_i=0;count_i<16;count_i++)
|
{
|
}
|
|
}else
|
{
|
SetResult = 1;
|
}
|
ReturnAfterSetting(SetResult,FormCode);
|
|
|
}else if(WriteOrRead==1)
|
{
|
for(count_i=0;count_i<8;count_i++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 7 - count_i] = gprs_protocol_header.DeviceAddress[count_i];
|
}
|
|
if(system_record.u8CumulantsStoreFullFlag == 1 )
|
{
|
ReadNum = 10; //ÏÈ×î¶à·µ»Ø10Ìõ¼Ç¼
|
}
|
else
|
{
|
if(system_record.u16CumulantsRecordNUM>=10)
|
{
|
ReadNum = 10;//ÏÈ×î¶à·µ»Ø10Ìõ¼Ç¼
|
}else
|
{
|
ReadNum = system_record.u16CumulantsRecordNUM;
|
}
|
}
|
|
CrcLength = HOST_COMPUTER_DATA_INDEX + ReadNum * 40 + 10;
|
|
if(ReadNum>system_record.u16CumulantsRecordNUM)
|
{
|
Read_index = system_record.u16CumulantsRecordNUM + CUMULANTS_MODIFY_RECORD_NUM - ReadNum;
|
}
|
else
|
{
|
Read_index = system_record.u16CumulantsRecordNUM - ReadNum;
|
}
|
|
//GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 9] = (u8)ReadNum;
|
//GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 8] = (u8)(ReadNum>>8);
|
arraya_2_arrayb((uint8_t *)&ReadNum ,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX +8], 2, 1);
|
|
for(count_i=0;count_i<ReadNum;count_i++)
|
{
|
current_para_record_addr = FIRST_CUMULANTS_MODIFY_RECORD_ADDR + Read_index * CUMULANTS_MODIFY_RECORD_LENGTH;
|
for(count_j=0;count_j<40;count_j++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 10 + count_i*40 + count_j] = FM25V02_data_read(current_para_record_addr + count_j );
|
}
|
|
BigSmallSwitch(&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 10 + count_i*40 + 7] , 8);
|
BigSmallSwitch(&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 10 + count_i*40 + 15] , 8);
|
BigSmallSwitch(&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 10 + count_i*40 + 24] , 8);
|
BigSmallSwitch(&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 10 + count_i*40 + 32] , 8);
|
Read_index++;
|
if(Read_index>=CUMULANTS_MODIFY_RECORD_NUM)
|
{
|
Read_index = 0;
|
}
|
|
|
}
|
|
ReturnAfterReading(CrcLength,FormCode);
|
|
}
|
}
|
/******************************************
|
* func: Alarm_Record_Read
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void Alarm_Record_Read(u8 WriteOrRead,u8 FormCode)//±¨¾¯¶ÁÈ¡112
|
{
|
u16 count_i,count_j;
|
u16 CrcCheck;
|
u16 CrcLength;
|
u8 SetResult=0;
|
u32 current_para_record_addr;
|
u16 Read_index=0;
|
u16 ReadNum;
|
u16 AlarmCode;
|
CrcLength = HOST_COMPUTER_DATA_INDEX + 160;
|
|
if(WriteOrRead==0)
|
{
|
CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength];
|
if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé
|
{
|
for(count_i=0;count_i<16;count_i++)
|
{
|
}
|
|
}else
|
{
|
SetResult = 1;
|
}
|
ReturnAfterSetting(SetResult,FormCode);
|
|
|
}else if(WriteOrRead==1)
|
{
|
for(count_i=0;count_i<8;count_i++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 7 - count_i] = gprs_protocol_header.DeviceAddress[count_i];
|
}
|
|
if(system_alarm.u8AlarmStoreFullFlag == 1 )
|
{
|
ReadNum = 50; //ÏÈ×î¶à·µ»Ø50Ìõ¼Ç¼
|
}
|
else
|
{
|
if(system_alarm.u16AlarmStoreNum>=50)
|
{
|
ReadNum = 50;//ÏÈ×î¶à·µ»Ø50Ìõ¼Ç¼
|
}else
|
{
|
ReadNum = system_alarm.u16AlarmStoreNum;
|
}
|
}
|
|
CrcLength = HOST_COMPUTER_DATA_INDEX + ReadNum * 8 + 10;
|
|
if(ReadNum>system_alarm.u16AlarmStoreNum)
|
{
|
Read_index = system_alarm.u16AlarmStoreNum + ALARM_RECORD_NUM - ReadNum;
|
}
|
else
|
{
|
Read_index = system_alarm.u16AlarmStoreNum - ReadNum;
|
}
|
|
//GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 9] = (u8)ReadNum;
|
//GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 8] = (u8)(ReadNum>>8);
|
arraya_2_arrayb((uint8_t *)&ReadNum ,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX +8], 2, 1);
|
|
for(count_i=0;count_i<ReadNum;count_i++)
|
{
|
current_para_record_addr = FIRST_ALARM_RECORD_ADDR + Read_index * ALARM_RECORD_LENGTH;
|
for(count_j=0;count_j<8;count_j++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 10 + count_i*8 + count_j] = FM25V02_data_read(current_para_record_addr + count_j );
|
}
|
BigSmallSwitch(&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 10 + count_i*8 + 6] , 2);
|
//AlarmCode = FM25V02_data_read_uint16(current_para_record_addr + 6);
|
//arraya_2_arrayb((uint8_t *)&AlarmCode ,&GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 10 + count_i*8 + 6], 2, 1);
|
|
Read_index++;
|
if(Read_index>=ALARM_RECORD_NUM)
|
{
|
Read_index = 0;
|
}
|
}
|
|
ReturnAfterReading(CrcLength,FormCode);
|
|
}
|
}
|
/******************************************
|
* func: XinaoKeySetting
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void XinaoKeySetting(u8 WriteOrRead,u8 FormCode)//аÂÃÜÔ¿ÉèÖÃ111
|
{
|
u16 count_i;
|
u16 CrcCheck;
|
u16 CrcLength;
|
u8 SetResult=0;
|
|
CrcLength = HOST_COMPUTER_DATA_INDEX + 160;
|
|
if(WriteOrRead==0)
|
{
|
CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength];
|
if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé
|
{
|
// for(count_i=0;count_i<144;count_i++)
|
// {
|
// KVer_AES_128_xinao[count_i/16][count_i%16] = UTR_rec_buff[count_i + HOST_COMPUTER_DATA_INDEX ];
|
// FM25V02_data_write(KVer_AES_128_xinao[count_i/16][count_i%16] , OPERATING_KEY_ADDR + count_i);
|
// }
|
//
|
// if(UTR_rec_buff[144 + HOST_COMPUTER_DATA_INDEX ]==0x01)
|
// {
|
// IOT_Parameter.OperatingKeyState = UTR_rec_buff[144 + HOST_COMPUTER_DATA_INDEX ]; ///
|
// FM25V02_data_write(IOT_Parameter.OperatingKeyState,OPERATING_KEY_STATE_ADDR);
|
// }else if(UTR_rec_buff[144 + HOST_COMPUTER_DATA_INDEX ]==0x00)
|
// {
|
// IOT_Parameter.OperatingKeyState = 0; ///
|
// FM25V02_data_write(IOT_Parameter.OperatingKeyState,OPERATING_KEY_STATE_ADDR);
|
// }
|
|
|
}else
|
{
|
SetResult = 1;
|
}
|
ReturnAfterSetting(SetResult,FormCode);
|
|
|
}else if(WriteOrRead==1)
|
{
|
|
for(count_i=0;count_i<16;count_i++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + count_i] = KVer_AES_128[count_i];
|
}
|
for(count_i=0;count_i<128;count_i++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 16 + count_i] = 0;
|
}
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 144] = 0;
|
|
for(count_i=0;count_i<15;count_i++)
|
{
|
GPRS_SEND_BUFF[HOST_COMPUTER_DATA_INDEX + 145 + count_i] = 0;
|
}
|
|
ReturnAfterReading(CrcLength,FormCode);
|
|
}
|
}
|
|
/******************************************
|
* func: OneClickInitXA
|
* desc:
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void OneClickInitXA(u8 WriteOrRead,u8 FormCode)//³äÖµÐÅÏ¢ÉèÖÃ116
|
{
|
u16 count_i;
|
u16 CrcCheck;
|
u16 CrcLength;
|
u8 SetResult=0;
|
u32 Password;
|
CrcLength = HOST_COMPUTER_DATA_INDEX + 4;
|
|
if(WriteOrRead==0)
|
{
|
CrcCheck = (u16)UTR_rec_buff[CrcLength+1]*256 + UTR_rec_buff[CrcLength];
|
if(CrcCheck == usMBCRC16(0xFFFF,UTR_rec_buff,CrcLength)) //УÑé
|
{
|
arraya_2_arrayb(&UTR_rec_buff[HOST_COMPUTER_DATA_INDEX ],(uint8_t *)&Password , 4, 1);
|
|
if(Password ==VAR_RESET_PASSWORD )
|
{
|
Variable_Reset();
|
}else
|
{
|
SetResult = 1;
|
}
|
|
|
}else
|
{
|
SetResult = 1;
|
}
|
ReturnAfterSetting(SetResult,FormCode);
|
|
if(SetResult==0)
|
{
|
//Èí¼þ×Ô¶¯¸´Î»
|
delay_ms(100);
|
// SystemReset(); //**¸´µ©Î¢Ð¾Æ¬µÄboot³ÌÐò²»ÊÇ֮ǰµÄ²Ù×÷£¬¹ÊÏÈ×¢ÊÍ
|
}
|
|
|
}else if(WriteOrRead==1)
|
{
|
|
|
}
|
}
|
/******************************************
|
* func: UART1_Set_SZ
|
* desc: ??UART1????,??DTU??,??????IP??????????
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void UART1_Set_SZ(void)
|
{
|
uint16_t NOW_year;
|
uint8_t NOW_month,NOW_day,NOW_hour,NOW_min;
|
uint8_t CalculateFlag = 0;
|
int i_index =0;
|
unsigned char temp;
|
uint16_t read_num;
|
// uint16_t cnt_break=0;
|
u8 write_return_buffer[3] = {0,0,0x16};
|
if((UTR_rec_buff[0] == 0x54)&&(UTR_rec_buff[1] == 0x54)&&(UTR_rec_cnt >= 10)&&(UTR_rec_buff[9]==0x16))
|
{
|
if((UTR_rec_cnt >= 10)&&(UTR_rec_buff[9]==0x16))
|
{
|
net_now_time.yearN = UTR_rec_buff[2];
|
net_now_time.monthN = UTR_rec_buff[3];
|
net_now_time.dateN = UTR_rec_buff[4];
|
net_now_time.hourN = UTR_rec_buff[5];
|
net_now_time.minN = UTR_rec_buff[6];
|
net_now_time.secN = UTR_rec_buff[7];
|
Time_Set(net_now_time.yearN+0x2000,net_now_time.monthN,net_now_time.dateN,1,net_now_time.hourN,net_now_time.minN,net_now_time.secN);
|
CalculateFlag = 1;
|
if(CalculateFlag ==1)
|
{
|
write_return_buffer[0] = write_return_buffer[1] = 0x55;
|
UTR_Send_Data(write_return_buffer,3);
|
// UTR_Send_Data((u8 *)0x55,1);
|
// UTR_Send_Data((u8 *)0x55,1);
|
// UTR_Send_Data((u8 *)0x16,1);
|
delay_ms(10);
|
}
|
|
UTR_rec_cnt = 0;
|
for(i_index=0;i_index<50;i_index++)
|
{
|
UTR_rec_buff[i_index] = 0;
|
}
|
}
|
}
|
else if((UTR_rec_buff[0] == 0x68)&&(UTR_rec_buff[1] == 0x68)&&(UTR_rec_cnt >= 41)&&(UTR_rec_buff[40]==0x16))
|
{
|
if((UTR_rec_cnt >= 41)&&(UTR_rec_buff[40]==0x16))
|
{
|
CalculateFlag = 1;
|
for(i_index = 0;i_index < 8;i_index ++)
|
{
|
gprs_protocol_header.DeviceAddress[i_index] = UTR_rec_buff[2+i_index];
|
FM25V02_data_write(gprs_protocol_header.DeviceAddress[i_index],DeviceAddress_Addr + i_index);
|
}
|
//·§ÃÅÐͺÅÅжÏ
|
if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x10) //50
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 4;
|
}
|
else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x20)//80
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 5;
|
}
|
else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x30)//100
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 6;
|
}
|
else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x40) //150
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 7;
|
}
|
else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x50) //200
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 8;
|
}
|
else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x60) //25
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 1;
|
}
|
else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x70) //32
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 2;
|
}
|
else if((gprs_protocol_header.DeviceAddress[6]&0xf0)==0x80) //40
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 3;
|
}
|
else
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 8;
|
}
|
FM25V02_data_write(regDevSerialNum.EquipmentCaliberAndModel, EquipmentCaliberAndModel_ADDR) ;
|
|
for(i_index=0;i_index<4;i_index++)
|
{
|
VariaDlg.ServerIP[i_index] = UTR_rec_buff[10+i_index];
|
FM25V02_data_write(VariaDlg.ServerIP[i_index],IP_Addr + i_index);
|
}
|
VariaDlg.ServerPort[0] = UTR_rec_buff[14]; //?????
|
VariaDlg.ServerPort[1] = UTR_rec_buff[15];
|
FM25V02_data_write(VariaDlg.ServerPort[0],IP_Addr + 4);
|
FM25V02_data_write(VariaDlg.ServerPort[1],IP_Addr + 5);
|
|
device_Parm.Tyf = UTR_rec_buff[16];
|
device_Parm.Tf = UTR_rec_buff[17];
|
FM25V02_data_write(device_Parm.Tyf,Tyf_Addr);
|
FM25V02_data_write(device_Parm.Tf,Ty_Addr);
|
|
device_Parm.Typ = UTR_rec_buff[18];
|
device_Parm.Tp = UTR_rec_buff[19];
|
FM25V02_data_write(device_Parm.Typ,Typ_Addr);
|
FM25V02_data_write(device_Parm.Tp,Tp_Addr);
|
|
Get_Sample_Send_Interval();
|
|
device_Parm.time1_flag = UTR_rec_buff[20]&0x80;
|
device_Parm.sendTiming_hour = UTR_rec_buff[20]&0x7f;
|
device_Parm.sendTiming_min = UTR_rec_buff[21];
|
FM25V02_data_write(device_Parm.time1_flag,Time1_Flag_Addr);
|
FM25V02_data_write(device_Parm.sendTiming_hour,SendTiming_Hour_Addr);
|
FM25V02_data_write(device_Parm.sendTiming_min,SendTiming_Min_Addr);
|
|
device_Parm.time2_flag = UTR_rec_buff[22]&0x80;
|
device_Parm.sendTiming_hour2 = UTR_rec_buff[22]&0x7f;
|
device_Parm.sendTiming_min2 = UTR_rec_buff[23];
|
FM25V02_data_write(device_Parm.time2_flag,Time2_Flag_Addr);
|
FM25V02_data_write(device_Parm.sendTiming_hour2,SendTiming_Hour2_Addr);
|
FM25V02_data_write(device_Parm.sendTiming_min2,SendTiming_Min2_Addr);
|
|
device_Parm.GPRS_RESTARTTIME = UTR_rec_buff[24];
|
if(device_Parm.GPRS_RESTARTTIME < 40)
|
{
|
device_Parm.GPRS_RESTARTTIME = 60;
|
}
|
FM25V02_data_write(device_Parm.GPRS_RESTARTTIME,GPRS_RestartTime_Addr);
|
|
if(UTR_rec_buff[25] ==0)
|
{
|
parameter_bil.cDataObtainType = PULSE_MODE;
|
if(Settlement_Para.RS485SettlementFlag!=0)
|
{
|
Settlement_Para.RS485SettlementFlag = 0;
|
FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
ClearCardinalFlag();
|
}
|
}
|
else if(UTR_rec_buff[25] ==1)
|
{
|
parameter_bil.cDataObtainType = RS485_AND_PULSE_MODE;
|
if(Settlement_Para.RS485SettlementFlag==0)
|
{
|
Settlement_Para.RS485SettlementFlag = 1;
|
FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
ClearCardinalFlag();
|
}
|
}
|
else if(UTR_rec_buff[25] ==2)
|
{
|
parameter_bil.cDataObtainType = RS485_MODE;
|
if(Settlement_Para.RS485SettlementFlag==0)
|
{
|
Settlement_Para.RS485SettlementFlag = 1;
|
FM25V02_data_write(Settlement_Para.RS485SettlementFlag,RS485_SETTLEMENT_FLAG_ADDR);
|
ClearCardinalFlag();
|
}
|
system_alarm.alarm_Pulse_Broken_LCDFLAG = 0;
|
}
|
else
|
{
|
}
|
|
FM25V02_data_write(parameter_bil.cDataObtainType,DATA_OBTAIN_TYPE_ADDR);
|
|
if((parameter_bil.cDataObtainType & RS485_MODE)!= RS485_MODE)
|
{
|
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;
|
}
|
|
parmAccess.u16MeterTypeCode = (u16)UTR_rec_buff[27]*256 + UTR_rec_buff[26];
|
FM25V02_data_write_uint16(METER_TYPE_CODE_ADDR,parmAccess.u16MeterTypeCode);
|
|
if((parameter_bil.cDataObtainType & PULSE_MODE)== PULSE_MODE)
|
{
|
if((parmAccess.u16MeterTypeCode==ASMODBUS)||(parmAccess.u16MeterTypeCode==AS100MODBUS)||(parmAccess.u16MeterTypeCode==SIARGO_MODBUS)) //ÅжÏÊÇ·ñ°®ÖªÁ÷Á¿¼Æ£¬°®ÖªÁ÷Á¿¼ÆÂö³åʶ±ð²ÉÓ÷½²¨ÉÏÉýÑØÊ¶±ð·½Ê½
|
{
|
LOW_PULSE_Rising_config();
|
Low_Pluse_GPIO_Init();
|
}
|
else
|
{
|
LOW_PULSE_config();
|
Low_Pluse_GPIO_Init();
|
}
|
}else
|
{
|
LOW_PULSE_Rising_disconfig();
|
Low_Pluse_GPIO_sleep_Init();
|
}
|
|
parmAccess.u8BaudRateCode =UTR_rec_buff[28];
|
FM25V02_data_write(parmAccess.u8BaudRateCode ,BAUD_RATE_CODE_ADDR);
|
|
parmAccess.u8RS485Parity =UTR_rec_buff[29];
|
FM25V02_data_write(parmAccess.u8RS485Parity ,RS485_PARITY_ADDR);
|
|
parmAccess.u8EXPVoltageCode =UTR_rec_buff[30];
|
FM25V02_data_write(parmAccess.u8EXPVoltageCode ,EXP_VOLTAGE_CODE_ADDR);
|
|
parameter_bil.u8PulseWidth = UTR_rec_buff[31];
|
FM25V02_data_write(parameter_bil.u8PulseWidth,PULSE_WITDH_ADDR);
|
|
parmAccess.u8LowPowerAlarmLine = UTR_rec_buff[32];
|
FM25V02_data_write(parmAccess.u8LowPowerAlarmLine,LOW_POWER_ALARM_LINE_ADDR);
|
if(UTR_rec_buff[33]==0)
|
{
|
LOGO_Flag = 0;
|
}else if(UTR_rec_buff[33]==1)
|
{
|
LOGO_Flag = 1;
|
}else
|
{
|
LOGO_Flag = 0;
|
}
|
FM25V02_data_write(LOGO_Flag,LCD_LOGO_ADDR);
|
if(UTR_rec_buff[34] != 0)
|
modbus_dev_para.slave_addr = UTR_rec_buff[34];
|
FM25V02_data_write(modbus_dev_para.slave_addr,MODBUS_SLAVE_ADDR);
|
|
UTR_rec_cnt = 0;
|
|
write_return_buffer[0] = write_return_buffer[1] = 0x69;
|
UTR_Send_Data(write_return_buffer,3);
|
// UTR_Send_Data((u8 *)0x69,1);
|
// UTR_Send_Data((u8 *)0x69,1);
|
// UTR_Send_Data((u8 *)0x16,1);
|
for(i_index=0;i_index<50;i_index++)
|
{
|
UTR_rec_buff[i_index] = 0;
|
}
|
|
}
|
}
|
else if((UTR_rec_buff[0] == 0x42)&&(UTR_rec_buff[1] == 0x42)&&(UTR_rec_cnt >= 4)&&(UTR_rec_buff[3]==0x16))
|
{
|
if((UTR_rec_cnt >= 4)&&(UTR_rec_buff[3]==0x16))
|
{
|
Send_ParaUp();
|
UTR_rec_cnt = 0;
|
for(i_index=0;i_index<50;i_index++)
|
{
|
UTR_rec_buff[i_index] = 0;
|
}
|
}
|
}
|
// else if((UTR_rec_buff[0] == 0x44)&&(UTR_rec_buff[1] == 0x44)&&(UTR_rec_cnt >= 64)&&(UTR_rec_buff[63]==0x16))
|
// {
|
// UTR_rec_cnt = 0;
|
// //Set_Billing_Para(); //´Ë¹¦ÄÜÉ÷ÖØÊ¹Óã¬ÔÝʱ²»ÔÊÐíÏÖ³¡Í¨¹ýÉÏλ»úÐ޸ļƷѲÎÊý£¬²»°²È«¡£
|
//
|
// for(i_index=0;i_index<80;i_index++)
|
// {
|
// UTR_rec_buff[i_index] = 0;
|
// }
|
// }
|
else if((UTR_rec_buff[0] == 0x41)&&(UTR_rec_buff[1] == 0x41)&&(UTR_rec_cnt >= 3)&&(UTR_rec_buff[2]==0x16))
|
{
|
if((UTR_rec_cnt >= 3)&&(UTR_rec_buff[2]==0x16))
|
{
|
UTR_rec_cnt = 0;
|
for(i_index=0;i_index<50;i_index++)
|
{
|
UTR_rec_buff[i_index] = 0;
|
}
|
//SendHistoricalData();
|
}
|
}
|
else if((UTR_rec_buff[0] == 0x46)&&(UTR_rec_buff[1] == 0x46)&&(UTR_rec_cnt >= 5)&&(UTR_rec_buff[5]==0x16))
|
{
|
UTR_rec_cnt = 0;
|
|
read_num = (u16)UTR_rec_buff[3] * 256;
|
read_num = read_num + UTR_rec_buff[2];
|
|
Send_Bil_Record(read_num);
|
|
for(i_index=0;i_index<10;i_index++)
|
{
|
UTR_rec_buff[i_index] = 0;
|
}
|
}
|
else if((UTR_rec_buff[0] == 0x48)&&(UTR_rec_buff[1] == 0x48)&&(UTR_rec_cnt >= 5)&&(UTR_rec_buff[5]==0x16))
|
{
|
UTR_rec_cnt = 0;
|
|
read_num = (u16)UTR_rec_buff[3] * 256;
|
read_num = read_num + UTR_rec_buff[2];
|
|
Send_Alarm_Record(read_num);
|
|
for(i_index=0;i_index<10;i_index++)
|
{
|
UTR_rec_buff[i_index] = 0;
|
}
|
}
|
else if((UTR_rec_buff[0] == 0x50)&&(UTR_rec_buff[1] == 0x50)&&(UTR_rec_cnt >= 40)&&(UTR_rec_buff[39]==0x16))
|
{
|
UTR_rec_cnt = 0;
|
|
VerRegisterSet();
|
write_return_buffer[0] = write_return_buffer[1] = 0x51;
|
UTR_Send_Data(write_return_buffer,3);
|
// UTR_Send_Data((u8 *)0x51,1);
|
// UTR_Send_Data((u8 *)0x51,1);
|
// UTR_Send_Data((u8 *)0x16,1);
|
|
for(i_index=0;i_index<50;i_index++)
|
{
|
UTR_rec_buff[i_index] = 0;
|
}
|
}
|
else if((UTR_rec_buff[0] == 0x52)&&(UTR_rec_buff[1] == 0x52)&&(UTR_rec_cnt >= 4)&&(UTR_rec_buff[3]==0x16))
|
{
|
UTR_rec_cnt = 0;
|
|
VerRegisterRead();
|
|
for(i_index=0;i_index<50;i_index++)
|
{
|
UTR_rec_buff[i_index] = 0;
|
}
|
}
|
else if((UTR_rec_buff[0] == 0x56)&&(UTR_rec_buff[1] == 0x56)&&(UTR_rec_cnt >= 21)&&(UTR_rec_buff[21]==0x16)) //ÐÞ¸ÄÀÛ»ýÁ¿
|
{
|
UTR_rec_cnt = 0;
|
|
CumulantsModify(); //ÀÛ»ýÁ¿ÐÞ¸Ä
|
for(i_index=0;i_index<50;i_index++)
|
{
|
UTR_rec_buff[i_index] = 0;
|
}
|
}
|
else if((UTR_rec_buff[0] == 0x58)&&(UTR_rec_buff[1] == 0x58)&&(UTR_rec_cnt >= 5)&&(UTR_rec_buff[5]==0x16)) //ÀÛ»ýÁ¿Ð޸ļǼ¶ÁÈ¡
|
{
|
UTR_rec_cnt = 0;
|
|
read_num = (u16)UTR_rec_buff[3] * 256;
|
read_num = read_num + UTR_rec_buff[2];
|
|
Send_Cumulants_Record(read_num);
|
for(i_index=0;i_index<50;i_index++)
|
{
|
UTR_rec_buff[i_index] = 0;
|
}
|
}
|
else if((UTR_rec_buff[0] == 0x60)&&(UTR_rec_buff[1] == 0x60)&&(UTR_rec_cnt >= 35)&&(UTR_rec_buff[35]==0x16)) //
|
{
|
UTR_rec_cnt = 0;
|
if((UTR_rec_buff[2]==SZV101_VALVE)||(UTR_rec_buff[2]==SZV102_VALVE)||(UTR_rec_buff[2]==SZV103_VALVE))
|
{
|
Valve_control_parm.Valve_Type = UTR_rec_buff[2];
|
}else
|
{
|
Valve_control_parm.Valve_Type = SZV101_VALVE;
|
}
|
FM25V02_data_write(Valve_control_parm.Valve_Type,VALVE_TYPE_ADDR);
|
|
write_return_buffer[0] = write_return_buffer[1] = 0x60;
|
UTR_Send_Data(write_return_buffer,3);
|
delay_ms(500);
|
// SystemReset(); //**¸´µ©Î¢Ð¾Æ¬µÄboot³ÌÐò²»ÊÇ֮ǰµÄ²Ù×÷£¬¹ÊÏÈ×¢ÊÍ
|
|
for(i_index=0;i_index<50;i_index++)
|
{
|
UTR_rec_buff[i_index] = 0;
|
}
|
}
|
else if((UTR_rec_buff[0] == 0x61)&&(UTR_rec_buff[1] == 0x61)&&(UTR_rec_cnt >= 3)&&(UTR_rec_buff[3]==0x16)) //
|
{
|
UTR_rec_cnt = 0;
|
|
Read_Valce_Para_Up();
|
for(i_index=0;i_index<50;i_index++)
|
{
|
UTR_rec_buff[i_index] = 0;
|
}
|
}
|
UTR_rec_cnt = 0;
|
for(i_index=0;i_index<RX232_LENGTH;i_index++)
|
{
|
UTR_rec_buff[i_index] = 0;
|
}
|
// else
|
// {
|
// UTR_rec_cnt = 0;
|
// for(i_index=0;i_index<80;i_index++)
|
// {
|
// UTR_rec_buff[i_index] = 0;
|
// }
|
// }
|
// if(CalculateFlag == 1)
|
// {
|
// CalculateFlag=0;
|
//
|
// Get_Time();//»ñÈ¡µ±Ç°Ê±¼ä
|
//
|
// Last_Sample_D = calendar.date&0x00FF;
|
// Last_Sample_H = calendar.hour&0x00FF;
|
// Last_Sample_M = calendar.min&0x00FF;
|
// Last_Send_D = Last_Sample_D;
|
// Last_Send_H = Last_Sample_H; //???????
|
// Last_Send_M = Last_Sample_M;
|
// NOW_year=(calendar.year>>12)*1000+((calendar.year&0x0FFF)>>8)*100+((calendar.year&0x00FF)>>4)*10+(calendar.year&0x000F);
|
// NOW_month = ((calendar.month&0x00FF)>>4)*10+(calendar.month&0x000F);
|
// NOW_day = calendar.date;
|
// NOW_hour = calendar.hour;
|
// NOW_min = calendar.min;
|
// calculate_Sample_Time(NOW_year, NOW_month,NOW_day); //calculate next sampling time
|
// calculate_Send_Time(NOW_year, NOW_month,NOW_day); //calculate next sending time
|
// compara_Send_Sample(NOW_year,NOW_month,NOW_day ,NOW_hour,NOW_min) ; //compara next RTC alarm time is for sampling or sending
|
// }
|
}
|
/******************************************
|
* func: UART1_Set_XA
|
* desc: ??UART1????,??DTU??,??????IP??????????
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void UART1_Set_XA(void)
|
{
|
int i_index =0;
|
|
if((UTR_rec_buff[0] == 0x42)&&(UTR_rec_buff[1] == 0x42)) //ÉèÖÃ
|
{
|
if((UTR_rec_buff[2] != 0x84) && (UTR_rec_buff[2] != 0xA4))
|
{
|
if(UTR_rec_buff[2]==1) //ÐòÁкÅ
|
{
|
SerialNumberSet(0,1); //ÐòÁкš¢±àºÅ¡¢°æ±¾ºÅµÈÉèÖÃ
|
|
}else if(UTR_rec_buff[2]==17)//ʱ¼äÉèÖÃ
|
{
|
HostComputerTimeSet(0,17);
|
|
}else if(UTR_rec_buff[2]==100)//¶Ô½ÓÉ豸²ÎÊý
|
{
|
ParameterSettingOfDockingEquipment(0,100);
|
|
}else if(UTR_rec_buff[2]==101)//˼Öþ·þÎñÆ÷ͨÐŲÎÊý
|
{
|
ParameterSettingOfServer(0,101);
|
|
}else if(UTR_rec_buff[2]==102)//а·þÎñÆ÷ͨÐŲÎÊý
|
{
|
// ParameterSettingOfXinAOServer(0,102);
|
}else if(UTR_rec_buff[2]==103)//¹¦ÄܲÎÊýÉèÖÃ
|
{
|
FunctionParameterSetting(0,103);
|
}else if(UTR_rec_buff[2]==104)//ÓàÁ¿±¨¾¯
|
{
|
// AllowanceAlarmSetting(0,104);
|
}else if(UTR_rec_buff[2]==105)//·§¿ØÉèÖÃ
|
{
|
// ValveControlSetting(0,105);
|
}else if(UTR_rec_buff[2]==106)//ÀÛ»ýÁ¿ÐÞ¸Ä
|
{
|
CumulantsModificationSetting(0,106);
|
}else if(UTR_rec_buff[2]==107)//Óà¶îÐÞ¸Ä
|
{
|
BalanceModificationSetting(0,107);
|
}else if(UTR_rec_buff[2]==108)//¼Û¸ñ°æ±¾ÉèÖÃ
|
{
|
// PriceVersionSetting(0,108);
|
}else if(UTR_rec_buff[2]==109)//Öն˱àºÅÉèÖÃ
|
{
|
// TerminalIDSetting(0,109);
|
}else if(UTR_rec_buff[2]==110)//Á÷Á¿¼Æ±àºÅÉèÖÃ
|
{
|
// FlowmeterIDSetting(0,110);
|
}else if(UTR_rec_buff[2]==111)//ÃÜÔ¿ÉèÖÃ
|
{
|
// XinaoKeySetting(0,111);
|
}
|
else if(UTR_rec_buff[2]==116)//³äÖµÐÅÏ¢
|
{
|
// RechargeSetting(0,116);
|
}
|
else if(UTR_rec_buff[2]==117)//²ÎÊýÖØÖÃ
|
{
|
OneClickInitXA(0,117);
|
}
|
else if(UTR_rec_buff[2]==122)//·§ÃÅÉèÖÃ
|
{
|
ValveStateSetting(0,122);
|
}
|
else if(UTR_rec_buff[2]==123)//Ò쳣״̬²Ù×÷
|
{
|
AbnormalSetting(0,123);
|
}
|
UTR_rec_cnt = 0;
|
for(i_index=0;i_index<RX232_LENGTH;i_index++)
|
{
|
UTR_rec_buff[i_index] = 0;
|
}
|
}
|
}
|
else if((UTR_rec_buff[0] == 0x52)&&(UTR_rec_buff[1] == 0x52)) //¶ÁÈ¡
|
{
|
if((UTR_rec_buff[2] != 0x84) && (UTR_rec_buff[2] != 0xA4))
|
{
|
if(UTR_rec_buff[2]==1) //ÐòÁкŶÁÈ¡
|
{
|
SerialNumberSet(1,1); //ÐòÁкš¢±àºÅ¡¢°æ±¾ºÅµÈ
|
|
}else if(UTR_rec_buff[2]==17)//ʱ¼ä¶ÁÈ¡
|
{
|
HostComputerTimeSet(1,17);
|
|
}else if(UTR_rec_buff[2]==100)//¶Ô½ÓÉ豸²ÎÊý¶ÁÈ¡
|
{
|
ParameterSettingOfDockingEquipment(1,100);
|
|
}else if(UTR_rec_buff[2]==101)//˼Öþ·þÎñÆ÷ͨÐŲÎÊý¶ÁÈ¡
|
{
|
ParameterSettingOfServer(1,101);
|
}else if(UTR_rec_buff[2]==102)//а·þÎñÆ÷ͨÐŲÎÊý¶ÁÈ¡
|
{
|
// ParameterSettingOfXinAOServer(1,102);
|
}else if(UTR_rec_buff[2]==103)//¹¦ÄܲÎÊý¶ÁÈ¡
|
{
|
FunctionParameterSetting(1,103);
|
}else if(UTR_rec_buff[2]==104)//ÓàÁ¿±¨¾¯¶ÁÈ¡
|
{
|
// AllowanceAlarmSetting(1,104);
|
}else if(UTR_rec_buff[2]==105)//·§¿ØÉèÖöÁÈ¡
|
{
|
// ValveControlSetting(1,105);
|
}else if(UTR_rec_buff[2]==106)//ÀÛ»ýÁ¿¶ÁÈ¡
|
{
|
CumulantsModificationSetting(1,106);
|
}else if(UTR_rec_buff[2]==107)//Óà¶î¶ÁÈ¡
|
{
|
BalanceModificationSetting(1,107);
|
}else if(UTR_rec_buff[2]==108)//¼Û¸ñ°æ±¾¶ÁÈ¡
|
{
|
// PriceVersionSetting(1,108);
|
}else if(UTR_rec_buff[2]==109)//Öն˱àºÅ¶ÁÈ¡
|
{
|
// TerminalIDSetting(1,109);
|
}else if(UTR_rec_buff[2]==110)//Á÷Á¿¼Æ±àºÅ¶ÁÈ¡
|
{
|
// FlowmeterIDSetting(1,110);
|
}else if(UTR_rec_buff[2]==111)//ÃÜÔ¿¶ÁÈ¡
|
{
|
XinaoKeySetting(1,111);
|
}else if(UTR_rec_buff[2]==112)//±¨¾¯ÈÕÖ¾¶ÁÈ¡
|
{
|
Alarm_Record_Read(1,112);
|
}
|
else if(UTR_rec_buff[2]==113)//³äÖµ¼Ç¼¶ÁÈ¡
|
{
|
// Recharge_Record_Read(1,113);
|
}
|
else if(UTR_rec_buff[2]==114)//µ÷¼Û¼Ç¼¶ÁÈ¡
|
{
|
// PriceAdjust_Record_Read(1,114);
|
}
|
else if(UTR_rec_buff[2]==115)//ÀÛ»ýÁ¿Ð޸ļǼ¶ÁÈ¡
|
{
|
CumModify_Record_Read(1,115);
|
}
|
else if(UTR_rec_buff[2]==116)//³äÖµÐÅÏ¢
|
{
|
// RechargeSetting(1,116);
|
}
|
else if(UTR_rec_buff[2]==117)//²ÎÊýÖØÖÃ
|
{
|
// OneClickInitXA(1,117);
|
}
|
else if(UTR_rec_buff[2]==122)//·§ÃÅÉèÖÃ
|
{
|
ValveStateSetting(1,122);
|
}
|
else if(UTR_rec_buff[2]==123)//Ò쳣״̬²Ù×÷
|
{
|
AbnormalSetting(1,123);
|
}
|
else if(UTR_rec_buff[2]==124)//Ò쳣״̬²Ù×÷
|
{
|
ValveControlTimes(1,124);
|
}
|
UTR_rec_cnt = 0;
|
for(i_index=0;i_index<RX232_LENGTH;i_index++)
|
{
|
UTR_rec_buff[i_index] = 0;
|
}
|
}
|
}
|
}
|
/******************************************
|
* func: UART1_set
|
* desc: ??UART1????,??DTU??,??????IP??????????
|
* input:
|
*
|
* output: none
|
* return:
|
*****************************************/
|
void UART1_set()
|
{
|
uint16 i_index=0;
|
if(UTR_rec_finish_flag)
|
{
|
UTR_rec_finish_flag = 0;
|
UART1_Set_XA();
|
UART1_Set_SZ();
|
}
|
}
|
/******************************************
|
* func: Send_ParaUp
|
* desc: Reply parameter command
|
* input:
|
* output:
|
* return: none
|
*****************************************/
|
void Send_ParaUp(void)//
|
{
|
int ii_index;
|
for(ii_index = 0; ii_index < 39; ii_index++)
|
{
|
GPRS_SEND_BUFF[ii_index] = 0;
|
}
|
GPRS_SEND_BUFF[0] = 0x43;
|
GPRS_SEND_BUFF[1] = 0x43;
|
for(ii_index = 0; ii_index < 8; ii_index++)
|
{
|
GPRS_SEND_BUFF[2+ii_index] = gprs_protocol_header.DeviceAddress[ii_index];
|
}
|
for(ii_index = 0; ii_index < 4; ii_index++)
|
{
|
GPRS_SEND_BUFF[10+ii_index] = VariaDlg.ServerIP[ii_index];
|
}
|
GPRS_SEND_BUFF[14] = VariaDlg.ServerPort[0];
|
GPRS_SEND_BUFF[15] = VariaDlg.ServerPort[1];
|
GPRS_SEND_BUFF[16] = device_Parm.Tyf;
|
GPRS_SEND_BUFF[17] = device_Parm.Tf;
|
GPRS_SEND_BUFF[18] = device_Parm.Typ;
|
GPRS_SEND_BUFF[19] = device_Parm.Tp;
|
GPRS_SEND_BUFF[20] = device_Parm.time1_flag | device_Parm.sendTiming_hour;
|
GPRS_SEND_BUFF[21] = device_Parm.sendTiming_min;
|
GPRS_SEND_BUFF[22] = device_Parm.time2_flag | device_Parm.sendTiming_hour2;
|
GPRS_SEND_BUFF[23] = device_Parm.sendTiming_min2;
|
GPRS_SEND_BUFF[24] = device_Parm.GPRS_RESTARTTIME;
|
//GPRS_SEND_BUFF[25] = LLJ_num;
|
|
|
if(parameter_bil.cDataObtainType == PULSE_MODE)
|
{
|
GPRS_SEND_BUFF[25] = 0;
|
}
|
else if(parameter_bil.cDataObtainType == RS485_AND_PULSE_MODE)
|
{
|
GPRS_SEND_BUFF[25] = 1;
|
}
|
else if(parameter_bil.cDataObtainType == RS485_MODE)
|
{
|
GPRS_SEND_BUFF[25] = 2;
|
}
|
else
|
{
|
GPRS_SEND_BUFF[25] = 0;
|
}
|
GPRS_SEND_BUFF[26] = parmAccess.u16MeterTypeCode&0x00ff;
|
GPRS_SEND_BUFF[27] = parmAccess.u16MeterTypeCode >>8;
|
GPRS_SEND_BUFF[28] = parmAccess.u8BaudRateCode;
|
GPRS_SEND_BUFF[29] = parmAccess.u8RS485Parity;
|
GPRS_SEND_BUFF[30] = parmAccess.u8EXPVoltageCode;
|
GPRS_SEND_BUFF[31] = parameter_bil.u8PulseWidth;
|
GPRS_SEND_BUFF[32] = parmAccess.u8LowPowerAlarmLine;
|
GPRS_SEND_BUFF[33] = LOGO_Flag;
|
GPRS_SEND_BUFF[34] = modbus_dev_para.slave_addr;
|
|
GPRS_SEND_BUFF[39] = 0 ;
|
for(ii_index = 0; ii_index < 39; ii_index++)
|
{
|
GPRS_SEND_BUFF[39] = GPRS_SEND_BUFF[39] + GPRS_SEND_BUFF[ii_index];
|
}
|
GPRS_SEND_BUFF[40] = 0x16;
|
|
// for(ii_index = 0; ii_index < 41; ii_index++)
|
// {
|
// UTR_sendbyte(GPRS_SEND_BUFF[ii_index]);
|
// }
|
UTR_Send_Data(GPRS_SEND_BUFF,41);
|
}
|
|
/******************************************
|
* func: Set_Billing_Para
|
* desc: Set_Billing_Para
|
* input:
|
* output:
|
* return: none
|
*****************************************/
|
void Set_Billing_Para(void)
|
{
|
// u8 ii_index;
|
|
// parameter_bil.cDataObtainType = UTR_rec_buff[2];
|
// FM25V02_data_write(parameter_bil.cDataObtainType,DATA_OBTAIN_TYPE_ADDR);
|
// if((parameter_bil.cDataObtainType & PULSE_MODE) == PULSE_MODE)
|
// {
|
// //parameter_bil.fPulseCoefficient = GPRS_SEND_BUFF[1];
|
// (*(uint8_t *)(¶meter_bil.fPulseCoefficient)) = UTR_rec_buff[3];
|
// (*((uint8_t *)(¶meter_bil.fPulseCoefficient) + 1)) = UTR_rec_buff[4];
|
// (*((uint8_t *)(¶meter_bil.fPulseCoefficient) + 2)) = UTR_rec_buff[5];
|
// (*((uint8_t *)(¶meter_bil.fPulseCoefficient) + 3)) = UTR_rec_buff[6];
|
// FM25V02_data_write_float(PULSE_COE_ADDR,parameter_bil.fPulseCoefficient);
|
// }
|
|
// parameter_bil.cBillingType = UTR_rec_buff[7];
|
// FM25V02_data_write(parameter_bil.cBillingType,BILLING_TYPE_ADDR);
|
//
|
// (*(uint8_t *)(¶meter_bil.fSingleBillingFee)) = UTR_rec_buff[8];
|
// (*((uint8_t *)(¶meter_bil.fSingleBillingFee) + 1)) = UTR_rec_buff[9];
|
// (*((uint8_t *)(¶meter_bil.fSingleBillingFee) + 2)) = UTR_rec_buff[10];
|
// (*((uint8_t *)(¶meter_bil.fSingleBillingFee) + 3)) = UTR_rec_buff[11];
|
// FM25V02_data_write_float(SINGLE_BILLING_FEE_ADDR,parameter_bil.fSingleBillingFee);
|
// (*(uint8_t *)(¶meter_bil.fStepBilling_First)) = UTR_rec_buff[12];
|
// (*((uint8_t *)(¶meter_bil.fStepBilling_First) + 1)) = UTR_rec_buff[13];
|
// (*((uint8_t *)(¶meter_bil.fStepBilling_First) + 2)) = UTR_rec_buff[14];
|
// (*((uint8_t *)(¶meter_bil.fStepBilling_First) + 3)) = UTR_rec_buff[15];
|
// FM25V02_data_write_float(STEP_BILLING_FIRST_ADDR,parameter_bil.fStepBilling_First);
|
// (*(uint8_t *)(¶meter_bil.fStepBillingFee_First)) = UTR_rec_buff[16];
|
// (*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 1)) = UTR_rec_buff[17];
|
// (*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 2)) = UTR_rec_buff[18];
|
// (*((uint8_t *)(¶meter_bil.fStepBillingFee_First) + 3)) = UTR_rec_buff[19];
|
// FM25V02_data_write_float(STEP_BILLING_FEE_FIRST_ADDR,parameter_bil.fStepBillingFee_First);
|
// (*(uint8_t *)(¶meter_bil.fStepBilling_Second)) = UTR_rec_buff[20];
|
// (*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 1)) = UTR_rec_buff[21];
|
// (*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 2)) = UTR_rec_buff[22];
|
// (*((uint8_t *)(¶meter_bil.fStepBilling_Second) + 3)) = UTR_rec_buff[23];
|
// FM25V02_data_write_float(STEP_BILLING_SECOND_ADDR,parameter_bil.fStepBilling_Second);
|
// (*(uint8_t *)(¶meter_bil.fStepBillingFee_Second)) = UTR_rec_buff[24];
|
// (*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 1)) = UTR_rec_buff[25];
|
// (*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 2)) = UTR_rec_buff[26];
|
// (*((uint8_t *)(¶meter_bil.fStepBillingFee_Second) + 3)) = UTR_rec_buff[27];
|
// FM25V02_data_write_float(STEP_BILLING_FEE_SECOND_ADDR,parameter_bil.fStepBillingFee_Second);
|
// (*(uint8_t *)(¶meter_bil.fStepBilling_Third)) = UTR_rec_buff[28];
|
// (*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 1)) = UTR_rec_buff[29];
|
// (*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 2)) = UTR_rec_buff[30];
|
// (*((uint8_t *)(¶meter_bil.fStepBilling_Third) + 3)) = UTR_rec_buff[31];
|
// FM25V02_data_write_float(STEP_BILLING_THIRD_ADDR,parameter_bil.fStepBilling_Third);
|
// (*(uint8_t *)(¶meter_bil.fStepBillingFee_Third)) = UTR_rec_buff[32];
|
// (*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 1)) = UTR_rec_buff[33];
|
// (*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 2)) = UTR_rec_buff[34];
|
// (*((uint8_t *)(¶meter_bil.fStepBillingFee_Third) + 3)) = UTR_rec_buff[35];
|
//
|
//
|
// FM25V02_data_write_float(STEP_BILLING_FEE_THIRD_ADDR,parameter_bil.fStepBillingFee_Third);
|
|
// (*(uint8_t *)(¶meter_bil.s32RechargeAmount)) = UTR_rec_buff[36];
|
// (*((uint8_t *)(¶meter_bil.s32RechargeAmount) + 1)) = UTR_rec_buff[37];
|
// (*((uint8_t *)(¶meter_bil.s32RechargeAmount) + 2)) = UTR_rec_buff[38];
|
// (*((uint8_t *)(¶meter_bil.s32RechargeAmount) + 3)) = UTR_rec_buff[39];
|
//
|
// if((parameter_bil.s32RechargeAmount>-999)&&(parameter_bil.s32RechargeAmount<=999999))
|
// {
|
// Settlement_Para.fBalance = Settlement_Para.fBalance + parameter_bil.s32RechargeAmount;
|
// Write_Verification(Settlement_Para.fBalance,REALTIME_BALANCE_ADDR,REALTIME_BALANCE_B_ADDR,REALTIME_BALANCE_C_ADDR);
|
// }
|
|
//
|
|
// parameter_bil.iBalanceInsufAlarmAmount = (uint16_t)UTR_rec_buff[41] * 256 + (uint16_t)UTR_rec_buff[40];
|
// FM25V02_data_write_uint16(BALANCE_INSUF_ALARM_AMOUNT_ADDR,parameter_bil.iBalanceInsufAlarmAmount);
|
|
// (*(uint8_t *)(¶meter_bil.fCredits)) = UTR_rec_buff[42];
|
// (*((uint8_t *)(¶meter_bil.fCredits) + 1)) = UTR_rec_buff[43];
|
// (*((uint8_t *)(¶meter_bil.fCredits) + 2)) = UTR_rec_buff[44];
|
// (*((uint8_t *)(¶meter_bil.fCredits) + 3)) = UTR_rec_buff[45];
|
// FM25V02_data_write_float(CREDITS_ADDR,parameter_bil.fCredits);
|
// write_return_buffer[0] = write_return_buffer[1] = 0x45;
|
// UTR_Send_Data((u8 *)0x45,1);
|
// UTR_Send_Data((u8 *)0x45,1);
|
// UTR_Send_Data((u8 *)0x16,1);
|
|
// #ifdef DEBUG_OUT
|
// sprintf(Debug, "cDataObtainType = %d \r\n" ,parameter_bil.cDataObtainType);
|
// UartDebugFun(Debug);
|
|
// sprintf(Debug, "fPulseCoefficient = %.3f \r\n" ,parameter_bil.fPulseCoefficient);
|
// UartDebugFun(Debug);
|
|
// sprintf(Debug, "cBillingType = %d \r\n" ,parameter_bil.cBillingType);
|
// UartDebugFun(Debug);
|
|
// sprintf(Debug, "fSingleBillingFee = %.3f \r\n" ,parameter_bil.fSingleBillingFee);
|
// UartDebugFun(Debug);
|
|
// sprintf(Debug, "fStepBilling_First = %.3f \r\n" ,parameter_bil.fStepBilling_First);
|
// UartDebugFun(Debug);
|
//
|
// sprintf(Debug, "fStepBillingFee_First = %.3f \r\n" ,parameter_bil.fStepBillingFee_First);
|
// UartDebugFun(Debug);
|
//
|
// sprintf(Debug, "fStepBilling_Second = %.3f \r\n" ,parameter_bil.fStepBilling_Second);
|
// UartDebugFun(Debug);
|
//
|
// sprintf(Debug, "fStepBillingFee_Second = %.3f \r\n" ,parameter_bil.fStepBillingFee_Second);
|
// UartDebugFun(Debug);
|
//
|
// sprintf(Debug, "fStepBilling_Third = %.3f \r\n" ,parameter_bil.fStepBilling_Third);
|
// UartDebugFun(Debug);
|
//
|
// sprintf(Debug, "fStepBillingFee_Third = %.3f \r\n" ,parameter_bil.fStepBillingFee_Third);
|
// UartDebugFun(Debug);
|
//
|
// sprintf(Debug, "s32RechargeAmount = %d \r\n" ,parameter_bil.s32RechargeAmount);
|
// UartDebugFun(Debug);
|
//
|
// sprintf(Debug, "iBalanceInsufAlarmAmount = %d \r\n" ,parameter_bil.iBalanceInsufAlarmAmount);
|
// UartDebugFun(Debug);
|
//
|
// sprintf(Debug, "fCredits = %.3f \r\n" ,parameter_bil.fCredits);
|
// UartDebugFun(Debug);
|
// #endif
|
}
|
|
void Alarm_record(uint16 AlarmCode)
|
{
|
uint32 current_alarm_addr;
|
|
Get_Time();//»ñÈ¡µ±Ç°Ê±¼ä
|
current_alarm_addr = (uint32)FIRST_ALARM_RECORD_ADDR + (uint32)system_alarm.u16AlarmStoreNum * ALARM_RECORD_LENGTH;
|
FM25V02_data_write(calendar.year&0x00FF, current_alarm_addr );
|
FM25V02_data_write(calendar.month&0xFF, current_alarm_addr + 1 );
|
FM25V02_data_write(calendar.date&0xFF, current_alarm_addr + 2 );
|
FM25V02_data_write(calendar.hour&0xFF, current_alarm_addr + 3 );
|
FM25V02_data_write(calendar.min&0xFF, current_alarm_addr + 4 );
|
FM25V02_data_write(calendar.sec&0xFF, current_alarm_addr + 5 );
|
|
FM25V02_data_write_uint16(current_alarm_addr + 6,AlarmCode );
|
// if(AlarmCode != EXTERNAL_PWR_ACCESS_ALARM_CODE && AlarmCode != EXTERNAL_PWR_DOWN_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);
|
|
|
awaken_flag = Alarm_awaken;
|
}
|
|
/******************************************
|
* func: Read_Valce_Para_Up
|
* desc: Reply parameter command
|
* input:
|
* output:
|
* return: none
|
*****************************************/
|
void Read_Valce_Para_Up(void)//
|
{
|
int ii_index;
|
u16 All_length = 36;
|
for(ii_index = 0; ii_index < All_length; ii_index++)
|
{
|
GPRS_SEND_BUFF[ii_index] = 0;
|
}
|
GPRS_SEND_BUFF[0] = 0x61;
|
GPRS_SEND_BUFF[1] = 0x61;
|
GPRS_SEND_BUFF[2] = Valve_control_parm.Valve_Type;
|
|
GPRS_SEND_BUFF[All_length-2] = 0 ;
|
for(ii_index = 0; ii_index < All_length-2; ii_index++)
|
{
|
GPRS_SEND_BUFF[All_length-2] = GPRS_SEND_BUFF[All_length-2] + GPRS_SEND_BUFF[ii_index];
|
}
|
GPRS_SEND_BUFF[All_length-1] = 0x16;
|
|
|
UTR_Send_Data(GPRS_SEND_BUFF,All_length);
|
}
|
|
|
void Alarm_analysis(void)
|
{
|
if(ReadVerificationData.ResultFlag==1)
|
{
|
ReadVerificationData.ResultFlag = 0;
|
if(system_alarm.alarm_E2RW_read_abnormal_FLAG==0)
|
{
|
system_alarm.alarm_E2RW_read_abnormal =1;
|
system_alarm.alarm_E2RW_read_abnormal_FLAG =1;
|
FM25V02_data_write(system_alarm.alarm_E2RW_read_abnormal_FLAG,E2RW_READ_ABNORMAL_FLAG_ADDR);
|
}
|
}
|
|
if(WriteVerificationData.ResultFlag==1)
|
{
|
WriteVerificationData.ResultFlag = 0;
|
if(system_alarm.alarm_E2RW_write_abnormal_FLAG==0)
|
{
|
system_alarm.alarm_E2RW_write_abnormal =1;
|
system_alarm.alarm_E2RW_write_abnormal_FLAG =1;
|
FM25V02_data_write(system_alarm.alarm_E2RW_write_abnormal_FLAG,E2RW_WRITE_ABNORMAL_FLAG_ADDR);
|
}
|
}
|
|
if(system_alarm.alarm_Sample)
|
{
|
system_alarm.alarm_Sample_LCDFLAG=0x01;
|
}
|
else if(system_alarm.alarm_Sample ==0x00)
|
{
|
system_alarm.alarm_Sample_LCDFLAG=0x00;
|
}
|
|
if(system_alarm.alarm_PRE)
|
{
|
system_alarm.alarm_PRE_LCDFLAG=0x01;
|
}
|
else if(system_alarm.alarm_PRE ==0x00)
|
{
|
system_alarm.alarm_PRE_LCDFLAG=0x00;
|
}
|
|
if(system_alarm.alarm_TEM)
|
{
|
system_alarm.alarm_TEM_LCDFLAG=0x01;
|
}
|
else if(system_alarm.alarm_TEM ==0x00)
|
{
|
system_alarm.alarm_TEM_LCDFLAG=0x00;
|
}
|
|
if(system_alarm.alarm_E2RW_read_abnormal==1)
|
{
|
Alarm_record(E2RW_READ_ABNORMAL_ALARM_CODE);
|
system_alarm.alarm_E2RW_read_abnormal = 0;
|
}
|
|
if(system_alarm.alarm_E2RW_write_abnormal==1)
|
{
|
Alarm_record(E2RW_WRITE_ABNORMAL_ALARM_CODE);
|
system_alarm.alarm_E2RW_write_abnormal = 0;
|
}
|
|
|
if(system_alarm.alarm_FlowPowerLOW)
|
{
|
Alarm_record(FLOW_LOW_PWR_ALARM_CODE);
|
system_alarm.alarm_FlowPowerLOW = 0;
|
}
|
|
if(system_alarm.alarm_FlowUnderPower)
|
{
|
Alarm_record(FLOW_UNDER_VOLTAGE_ALARM_CODE);
|
system_alarm.alarm_FlowUnderPower = 0;
|
}
|
|
if(system_alarm.alarm_FlowPowerDOWN)
|
{
|
Alarm_record(FLOW_PWR_DOWN_ALARM_CODE);
|
system_alarm.alarm_FlowPowerDOWN = 0;
|
}
|
|
if(system_alarm.alarm_Gas_Leak==1)
|
{
|
Alarm_record(GAS_LEAK_ALARM_CODE);
|
system_alarm.alarm_Gas_Leak = 0;
|
}
|
|
if(system_alarm.alarm_AlkaPowerDOWN)
|
{
|
Alarm_record(ALKA_PWR_DOWN_ALARM_CODE);
|
system_alarm.alarm_AlkaPowerDOWN = 0;
|
}
|
|
if(system_alarm.alarm_LithPowerDOWN)
|
{
|
Alarm_record(LITH_PWR_DOWN_ALARM_CODE);
|
system_alarm.alarm_LithPowerDOWN = 0;
|
}
|
|
if(system_alarm.alarm_AlkaPowerLOW)
|
{
|
Alarm_record(ALKA_PWR_LOW_ALARM_CODE);
|
system_alarm.alarm_AlkaPowerLOW = 0;
|
}
|
|
if(system_alarm.alarm_LithPowerLOW)
|
{
|
Alarm_record(LITH_PWR_LOW_ALARM_CODE);
|
system_alarm.alarm_LithPowerLOW = 0;
|
}
|
|
if(system_alarm.alarm_EXPowerIN)
|
{
|
Alarm_record(EXTERNAL_PWR_ACCESS_ALARM_CODE);
|
system_alarm.alarm_EXPowerIN = 0;
|
}
|
|
if(system_alarm.alarm_EXPowerRemove)
|
{
|
Alarm_record(EXTERNAL_PWR_DOWN_ALARM_CODE);
|
system_alarm.alarm_EXPowerRemove = 0;
|
}
|
|
if(system_alarm.alarm_Valve_close)
|
{
|
Alarm_record(FORCED_TO_CLOSE_VALVE_ALARM_CODE);
|
system_alarm.alarm_Valve_close = 0;
|
}
|
|
if(system_alarm.alarm_Valve_open)
|
{
|
Alarm_record(VALVE_OPEN_ALARM_CODE);
|
system_alarm.alarm_Valve_open = 0;
|
}
|
|
if(system_alarm.alarm_Valve_Abnormal)
|
{
|
Alarm_record(VALVE_ABNORMAL_ALARM_CODE);
|
system_alarm.alarm_Valve_Abnormal = 0;
|
}
|
|
if(system_alarm.alarm_Balance_Small)
|
{
|
Alarm_record(AMOUNT_SMALL_ALARM_CODE);
|
system_alarm.alarm_Balance_Small = 0;
|
}
|
|
if(system_alarm.alarm_Balance_0)
|
{
|
Alarm_record(AMOUNT_ARREARS_ALARM_CODE);
|
system_alarm.alarm_Balance_0 = 0;
|
}
|
|
if(system_alarm.alarm_Credits_0)
|
{
|
Alarm_record(AMOUNT_OVERDRAFT_ALARM_CODE);
|
system_alarm.alarm_Credits_0 = 0;
|
}
|
|
if(system_alarm.alarm_Pulse_Broken)
|
{
|
Alarm_record(PULSE_LINE_DISCONNECTED_ALARM_CODE);
|
system_alarm.alarm_Pulse_Broken = 0;
|
}
|
|
if(system_alarm.alarm_RS485_Abnormal_Small_Reading == 1)
|
{
|
Alarm_record(RS485_READ_ABNORMAL_SMALL_READING_CODE);
|
system_alarm.alarm_RS485_Abnormal_Small_Reading=0;
|
}
|
|
if(system_alarm.alarm_Cap_OPEN == 1)
|
{
|
Alarm_record(CAP_OPEN_ALARM_CODE);
|
system_alarm.alarm_Cap_OPEN = 0;
|
}
|
|
if(system_alarm.alarm_Valve_Force_Open == 1)
|
{
|
Alarm_record(VALVE_FORCE_OPEN_ALARM_CODE);
|
system_alarm.alarm_Valve_Force_Open = 0;
|
}
|
// if(system_alarm.alarm_Pulse_Dismatch) //Âö³å²»Æ¥Å䱨¾¯£¬Êµ¼Ê¹ý³ÌÖÐÂö³åµôÏ߾͹ط§£¬²»»áÓÐÂö³å²»Æ¥Å䱨¾¯
|
// {
|
// Alarm_record(PULSE_LINE_MISMATCH_ALARM_CODE);
|
// system_alarm.alarm_Pulse_Dismatch = 0;
|
// }
|
|
}
|
|
|
void Send_Bil_Record(u16 num)
|
{
|
u16 i_index=0,j_index=0;
|
u32 current_para_record_addr;
|
u16 Read_index=0;
|
u8 checksum=0;
|
|
GPRS_SEND_BUFF[0] = 0x47;
|
GPRS_SEND_BUFF[1] = 0x47;
|
for(i_index=0;i_index<8;i_index++)
|
{
|
GPRS_SEND_BUFF[2+i_index] = gprs_protocol_header.DeviceAddress[i_index];
|
|
}
|
if(system_record.u8BilStoreFullFlag == 1 )
|
{
|
if(num>BIL_RECORD_NUM)
|
{
|
num = BIL_RECORD_NUM;
|
}
|
}
|
else
|
{
|
if(num>system_record.u16BilRecordNUM)
|
{
|
num = system_record.u16BilRecordNUM;
|
}
|
}
|
|
if(num>system_record.u16BilRecordNUM)
|
{
|
Read_index = system_record.u16BilRecordNUM + BIL_RECORD_NUM - num;
|
}
|
else
|
{
|
Read_index = system_record.u16BilRecordNUM - num;
|
}
|
|
GPRS_SEND_BUFF[10] = (u8)num;
|
GPRS_SEND_BUFF[11] = (u8)(num>>8);
|
|
for(i_index=0;i_index<12;i_index++)
|
{
|
checksum = checksum + GPRS_SEND_BUFF[i_index];
|
}
|
|
UTR_Send_Data(GPRS_SEND_BUFF,12);
|
|
for(i_index=0;i_index<num;i_index++)
|
{
|
current_para_record_addr = FIRST_BIL_RECORD_ADDR + Read_index * BIL_RECORD_LENGTH;
|
for(j_index=0;j_index <50;j_index++)
|
{
|
GPRS_SEND_BUFF[j_index] = FM25V02_data_read(current_para_record_addr + j_index );
|
checksum = checksum + GPRS_SEND_BUFF[j_index];
|
}
|
|
Read_index++;
|
|
if(Read_index>=BIL_RECORD_NUM)
|
{
|
Read_index = 0;
|
}
|
|
if((Read_index%10)==0)
|
{
|
IWDT_Clr();
|
}
|
|
UTR_Send_Data(GPRS_SEND_BUFF,50);
|
|
}
|
|
GPRS_SEND_BUFF[0] = checksum;
|
GPRS_SEND_BUFF[1] = 0x16;
|
UTR_Send_Data(GPRS_SEND_BUFF,2);
|
|
}
|
|
|
void Send_Alarm_Record(u16 num)
|
{
|
u16 i_index=0,j_index=0;
|
u32 current_para_record_addr;
|
u16 Read_index=0;
|
u8 checksum=0;
|
|
GPRS_SEND_BUFF[0] = 0x49;
|
GPRS_SEND_BUFF[1] = 0x49;
|
for(i_index=0;i_index<8;i_index++)
|
{
|
GPRS_SEND_BUFF[2+i_index] = gprs_protocol_header.DeviceAddress[i_index];
|
|
}
|
if(system_alarm.u8AlarmStoreFullFlag == 1 )
|
{
|
if(num>ALARM_RECORD_NUM)
|
{
|
num = ALARM_RECORD_NUM;
|
}
|
}
|
else
|
{
|
if(num>system_alarm.u16AlarmStoreNum)
|
{
|
num = system_alarm.u16AlarmStoreNum;
|
}
|
}
|
|
if(num>system_alarm.u16AlarmStoreNum)
|
{
|
Read_index = system_alarm.u16AlarmStoreNum + ALARM_RECORD_NUM - num;
|
}
|
else
|
{
|
Read_index = system_alarm.u16AlarmStoreNum - num;
|
}
|
|
GPRS_SEND_BUFF[10] = (u8)num;
|
GPRS_SEND_BUFF[11] = (u8)(num>>8);
|
|
for(i_index=0;i_index<12;i_index++)
|
{
|
checksum = checksum + GPRS_SEND_BUFF[i_index];
|
}
|
|
UTR_Send_Data(GPRS_SEND_BUFF,12);
|
|
for(i_index=0;i_index<num;i_index++)
|
{
|
current_para_record_addr = FIRST_ALARM_RECORD_ADDR + Read_index * ALARM_RECORD_LENGTH;
|
for(j_index=0;j_index <8;j_index++)
|
{
|
GPRS_SEND_BUFF[j_index] = FM25V02_data_read(current_para_record_addr + j_index );
|
checksum = checksum + GPRS_SEND_BUFF[j_index];
|
}
|
|
Read_index++;
|
|
if(Read_index>=ALARM_RECORD_NUM)
|
{
|
Read_index = 0;
|
}
|
|
if((Read_index%10)==0)
|
{
|
IWDT_Clr();
|
}
|
|
UTR_Send_Data(GPRS_SEND_BUFF,8);
|
|
}
|
|
GPRS_SEND_BUFF[0] = checksum;
|
GPRS_SEND_BUFF[1] = 0x16;
|
UTR_Send_Data(GPRS_SEND_BUFF,2);
|
|
}
|
|
|
void LeakAlarmLine_Detection(void)//й©±¨¾¯Ïß
|
{
|
if((parmAccess.u8LowPowerAlarmLine&0x04)==0x04)
|
{
|
if(ALARM_LINE_READ==0)
|
{
|
delay_ms(10);
|
if(ALARM_LINE_READ==0)
|
{
|
delay_ms(10);
|
if(ALARM_LINE_READ==0)
|
{
|
//close the valve and alarm
|
if((device_Parm.AccountStatus== 0x01)||(device_Parm.TestStatus==1)) //¿ª»§×´Ì¬Ï¼ì²â¶Ô½ÓÉ豸Ƿѹ£¬Ôò¹Ø·§
|
{
|
if(((OpenValveAuthorizeFLAG&0x0f)==0x01)&&((OpenValveAuthorizeFLAG>>4)<9)&&((OpenValveAuthorizeFLAG>>4)>0)) //Ç¿ÖÆ¿ª·§£¬Ò쳣״̬ÏÂÒ²²»¹Ø·§
|
{
|
}else
|
{
|
if(gprs_protocol_header.Valve_Status != 2) //·§ÃÅ״̬²»ÊÇΪ¹Ø
|
{
|
Valve_close();
|
}
|
}
|
}
|
if(system_alarm.alarm_Gas_Leak_LCDFLAG==0)
|
{
|
system_alarm.alarm_Gas_Leak = 1;
|
system_alarm.alarm_Gas_Leak_LCDFLAG =1;
|
}
|
|
|
}
|
else
|
{
|
system_alarm.alarm_Gas_Leak_LCDFLAG =0;
|
system_alarm.alarm_Gas_Leak_time = 0;
|
}
|
}else
|
{
|
system_alarm.alarm_Gas_Leak_LCDFLAG =0;
|
system_alarm.alarm_Gas_Leak_time = 0;
|
}
|
}else
|
{
|
system_alarm.alarm_Gas_Leak_LCDFLAG =0;
|
system_alarm.alarm_Gas_Leak_time = 0;
|
}
|
}
|
else
|
{
|
system_alarm.alarm_Gas_Leak_LCDFLAG =0;
|
system_alarm.alarm_Gas_Leak_time = 0;
|
}
|
}
|
|
|
void PulseLine_Detection(void)//Âö³åÏß¼ì²â
|
{
|
float pulse_v;
|
|
if((parameter_bil.cDataObtainType & PULSE_MODE)== PULSE_MODE)
|
{
|
if((parmAccess.u16MeterTypeCode==ASMODBUS)||(parmAccess.u16MeterTypeCode==AS100MODBUS)||(parmAccess.u16MeterTypeCode==SIARGO_MODBUS))
|
{
|
system_alarm.alarm_Pulse_Broken_LCDFLAG = 0;
|
}else
|
{
|
IWDT_Clr();
|
|
if(PULSE_LINE_READ == 0)
|
{
|
|
delay_ms(100);
|
delay_ms(100);
|
delay_ms(100);
|
delay_ms(100);
|
delay_ms(100);
|
delay_ms(50);
|
|
|
if(PULSE_LINE_READ == 0)
|
{
|
delay_ms(5);
|
|
if(PULSE_LINE_READ == 0)
|
{
|
if((device_Parm.AccountStatus== 0x01)||(device_Parm.TestStatus==1)) //¿ª»§×´Ì¬Ï¼ì²âµ½Âö³åÏß¶Ï¿ª£¬Ôò¹Ø·§
|
{
|
if(system_alarm.alarm_Pulse_Broken_LCDFLAG!=1) //±ÜÃâÖØ¸´±¨¾¯
|
{
|
system_alarm.alarm_Pulse_Broken = 1;
|
}
|
if(((OpenValveAuthorizeFLAG&0x0f)==0x01)&&((OpenValveAuthorizeFLAG>>4)<9)&&((OpenValveAuthorizeFLAG>>4)>0)) //Ç¿ÖÆ¿ª·§£¬Ò쳣״̬ÏÂÒ²²»¹Ø·§
|
{
|
|
|
}else
|
{
|
if(gprs_protocol_header.Valve_Status != 2) //·§ÃÅ״̬²»ÊÇΪ¹Ø
|
{
|
Valve_close();
|
}
|
}
|
}
|
|
system_alarm.alarm_Pulse_Broken_LCDFLAG = 1;
|
|
|
}
|
else
|
{
|
system_alarm.alarm_Pulse_Broken_LCDFLAG = 0;
|
|
}
|
}
|
}
|
else
|
{
|
|
system_alarm.alarm_Pulse_Broken_LCDFLAG = 0;
|
}
|
}
|
}else
|
{
|
system_alarm.alarm_Pulse_Broken_LCDFLAG = 0;
|
}
|
}
|
|
/* Private_Functions ----------------------------------------------------------*/
|
|
/**
|
* @brief ¼Ä´æÆ÷³õʼ»¯
|
* @param ÎÞ
|
* @retval ÎÞ
|
*/
|
void RegisterInit(void)
|
{
|
|
//*******************************************************************************************//
|
|
regDevSerialNum.hardwareVerSn[0] = FM25V02_data_read_uint16(HardwareVerSn1_ADDR); //Ó²¼þ°æ±¾
|
regDevSerialNum.hardwareVerSn[1] = FM25V02_data_read_uint16(HardwareVerSn2_ADDR);
|
regDevSerialNum.hardwareVerSn[2] = FM25V02_data_read_uint16(HardwareVerSn3_ADDR);
|
|
// regDevSerialNum.firmwareVer[0] = FM25V02_data_read_uint16(FirmwareVerSn1_ADDR); //¹Ì¼þ°æ±¾
|
// regDevSerialNum.firmwareVer[1] = FM25V02_data_read_uint16(FirmwareVerSn2_ADDR);
|
// regDevSerialNum.firmwareVer[2] = FM25V02_data_read_uint16(FirmwareVerSn3_ADDR);
|
|
regDevSerialNum.firmwareVer[0] =FIRMWARE_VER_3; //¹Ì¼þ°æ±¾
|
regDevSerialNum.firmwareVer[1] =FIRMWARE_VER_2;
|
regDevSerialNum.firmwareVer[2] =FIRMWARE_VER_1;
|
|
regDevSerialNum.firmwareCRC = FM25V02_data_read_uint16(FirmwareCRC_ADDR); //¹Ì¼þCRC
|
|
/* regDevSerialNum.firmwareVerDate_year = FM25V02_data_read_uint16(FirmwareDateyear_ADDR); //¹Ì¼þÈÕÆÚ
|
regDevSerialNum.firmwareVerDate_month = FM25V02_data_read_uint16(FirmwareDatemonth_ADDR);
|
regDevSerialNum.firmwareVerDate_day = FM25V02_data_read_uint16(FirmwareDateday_ADDR); */
|
|
regDevSerialNum.firmwareVerDate_year = YEAR; //¹Ì¼þÈÕÆÚ,´ó¸ÅÊÇ10½øÖÆÊ±¼ä£¬·ÇBCD
|
regDevSerialNum.firmwareVerDate_month = MONTH;
|
regDevSerialNum.firmwareVerDate_day = DAY;
|
|
regDevSerialNum.EquipmentCaliberAndModel = FM25V02_data_read(EquipmentCaliberAndModel_ADDR); //É豸¿Ú¾¶ÐͺÅ
|
if(regDevSerialNum.EquipmentCaliberAndModel>8)
|
{
|
regDevSerialNum.EquipmentCaliberAndModel = 8;
|
FM25V02_data_write(regDevSerialNum.EquipmentCaliberAndModel, EquipmentCaliberAndModel_ADDR) ;
|
}
|
}
|
|
|
void VerRegisterSet(void) //°æ±¾ºÅÉèÖÃ
|
{
|
u8 i;
|
for(i=0;i<14;i++)
|
{
|
(*((uint8_t *)(®DevSerialNum.hardwareVerSn) + i)) = UTR_rec_buff[2+i];
|
|
}
|
FM25V02_data_write_uint16(HardwareVerSn1_ADDR, regDevSerialNum.hardwareVerSn[0]) ;
|
FM25V02_data_write_uint16(HardwareVerSn2_ADDR, regDevSerialNum.hardwareVerSn[1]) ;
|
FM25V02_data_write_uint16(HardwareVerSn3_ADDR, regDevSerialNum.hardwareVerSn[2]) ;
|
|
FM25V02_data_write_uint16(FirmwareVerSn1_ADDR, regDevSerialNum.firmwareVer[0]) ;
|
FM25V02_data_write_uint16(FirmwareVerSn2_ADDR, regDevSerialNum.firmwareVer[1]) ;
|
FM25V02_data_write_uint16(FirmwareVerSn3_ADDR, regDevSerialNum.firmwareVer[2]) ;
|
|
FM25V02_data_write_uint16(FirmwareCRC_ADDR, regDevSerialNum.firmwareCRC) ;
|
|
|
}
|
|
void VerRegisterRead(void) //°æ±¾ºÅ¶ÁÈ¡
|
{
|
u8 i;
|
|
GPRS_SEND_BUFF[0] = 0x53;
|
GPRS_SEND_BUFF[1] = 0x53;
|
for(i=0;i<20;i++)
|
{
|
|
GPRS_SEND_BUFF[2+i] = (*((uint8_t *)(®DevSerialNum.hardwareVerSn) + i)) ;
|
|
}
|
|
for(i=0;i<16;i++)
|
{
|
|
GPRS_SEND_BUFF[22+i] = 0 ;
|
|
}
|
|
GPRS_SEND_BUFF[38] = 0 ;
|
|
for(i=0;i<38;i++)
|
{
|
GPRS_SEND_BUFF[38] = GPRS_SEND_BUFF[38] + GPRS_SEND_BUFF[i] ;
|
|
}
|
|
GPRS_SEND_BUFF[39] = 0x16 ;
|
UTR_Send_Data(GPRS_SEND_BUFF,40);
|
}
|
|
|
void BillRecord(void)
|
{
|
|
u32 current_para_record_addr;
|
/*Record the current parameters*/
|
current_para_record_addr = (u32)FIRST_BIL_RECORD_ADDR + (u32)system_record.u16BilRecordNUM * BIL_RECORD_LENGTH;
|
FM25V02_data_write(calendar.year&0x00FF, current_para_record_addr );
|
FM25V02_data_write(calendar.month&0xFF, current_para_record_addr + 1 );
|
FM25V02_data_write(calendar.date&0xFF, current_para_record_addr + 2 );
|
FM25V02_data_write(calendar.hour&0xFF, current_para_record_addr + 3 );
|
FM25V02_data_write(calendar.min&0xFF, current_para_record_addr + 4 );
|
FM25V02_data_write(calendar.sec&0xFF, current_para_record_addr + 5 );
|
|
FM25V02_data_write((parameter_bil.cDataObtainType|(device_Parm.AccountStatus<<4)),current_para_record_addr+6);
|
FM25V02_data_write_float(current_para_record_addr + 7,parameter_bil.fPulseCoefficient);
|
FM25V02_data_write(parameter_bil.cBillingType,current_para_record_addr + 11);
|
FM25V02_data_write_float(current_para_record_addr + 12,parameter_bil.fSingleBillingFee);
|
FM25V02_data_write_float(current_para_record_addr + 16,parameter_bil.fStepBilling_First);
|
FM25V02_data_write_float(current_para_record_addr + 20,parameter_bil.fStepBillingFee_First);
|
FM25V02_data_write_float(current_para_record_addr + 24,parameter_bil.fStepBilling_Second);
|
FM25V02_data_write_float(current_para_record_addr + 28,parameter_bil.fStepBillingFee_Second);
|
FM25V02_data_write_float(current_para_record_addr + 32,parameter_bil.fStepBilling_Third);
|
FM25V02_data_write_float(current_para_record_addr + 36,parameter_bil.fStepBillingFee_Third);
|
FM25V02_data_write_uint32(current_para_record_addr + 40,parameter_bil.dRechargeAmount);
|
FM25V02_data_write_uint16(current_para_record_addr + 44,parameter_bil.iBalanceInsufAlarmAmount);
|
FM25V02_data_write_float(current_para_record_addr + 46,parameter_bil.fCredits);
|
// Settlement_Para.fCumulativeGasUsage =0; //ÀÛ»ýÁ¿ÇåÁãÔÝʱ²»ÖªµÀÔõô¼Ç¼
|
// Settlement_Para.fCumulativeFeeUsage =0;
|
// FM25V02_data_write_double(current_para_record_addr + 50,Settlement_Para.fCumulativeGasUsage);
|
|
|
system_record.u16BilRecordNUM ++;
|
if(system_record.u16BilRecordNUM >= BIL_RECORD_NUM)
|
{
|
system_record.u16BilRecordNUM = 0;
|
system_record.u8BilStoreFullFlag = 1;
|
FM25V02_data_write(system_record.u8BilStoreFullFlag,BIL_RECORD_FULL_FLAG_ADDR);
|
}
|
FM25V02_data_write_uint16(CURRENT_BIL_RECORD_NUM_ADDR,system_record.u16BilRecordNUM);
|
|
|
}
|
|
|
|
|
/******************************************
|
* func: CumulantsRecord
|
* desc: CumulantsRecord
|
* input: GasModifyFlag ------ 0:ÎÞÀÛ»ýÓÃÆøÁ¿Ð޸ģ»1£ºÀÛ¼ÆÓÃÆøÁ¿ÐÞ¸Ä
|
PreModifyGasValue-------ÐÞ¸ÄǰÀÛ»ýÓÃÆøÁ¿
|
FeeModifyFlag ------ 0:ÎÞÀÛ»ýÓÃÆø½ð¶îÐ޸ģ»1£ºÀÛ¼ÆÓÃÆø½ð¶îÐÞ¸Ä
|
PreModifyFeeValue-------ÐÞ¸ÄǰÀÛ¼ÆÓÃÆø½ð¶î
|
* output: none
|
* return: none
|
*****************************************/
|
void CumulantsRecord(u8 GasModifyFlag,double PreModifyGasValue,u8 FeeModifyFlag,double PreModifyFeeValue)
|
{
|
|
u32 current_para_record_addr;
|
/*Record the current parameters*/
|
current_para_record_addr = (u32)FIRST_CUMULANTS_MODIFY_RECORD_ADDR + (u32)system_record.u16CumulantsRecordNUM * CUMULANTS_MODIFY_RECORD_LENGTH;
|
Get_Time();
|
FM25V02_data_write(calendar.year&0x00FF, current_para_record_addr );
|
FM25V02_data_write(calendar.month&0xFF, current_para_record_addr + 1 );
|
FM25V02_data_write(calendar.date&0xFF, current_para_record_addr + 2 );
|
FM25V02_data_write(calendar.hour&0xFF, current_para_record_addr + 3 );
|
FM25V02_data_write(calendar.min&0xFF, current_para_record_addr + 4 );
|
FM25V02_data_write(calendar.sec&0xFF, current_para_record_addr + 5 );
|
|
FM25V02_data_write(GasModifyFlag,current_para_record_addr+6);
|
FM25V02_data_write_double(current_para_record_addr + 7,PreModifyGasValue);
|
FM25V02_data_write_double(current_para_record_addr + 15,Settlement_Para.fCumulativeGasUsage);
|
|
FM25V02_data_write(FeeModifyFlag,current_para_record_addr+23);
|
FM25V02_data_write_double(current_para_record_addr + 24,PreModifyFeeValue);
|
FM25V02_data_write_double(current_para_record_addr + 32,Settlement_Para.fCumulativeFeeUsage);
|
|
system_record.u16CumulantsRecordNUM ++;
|
if(system_record.u16CumulantsRecordNUM >= CUMULANTS_MODIFY_RECORD_NUM)
|
{
|
system_record.u16CumulantsRecordNUM = 0;
|
system_record.u8CumulantsStoreFullFlag = 1;
|
FM25V02_data_write(system_record.u8CumulantsStoreFullFlag,CUMULANTS_MODIFY_RECORD_FULL_FLAG_ADDR);
|
}
|
FM25V02_data_write_uint16(CUMULANTS_MODIFY_RECORD_NUM_ADDR,system_record.u16CumulantsRecordNUM);
|
|
|
}
|
|
|
void CumulantsModify(void) //ÀÛ»ýÁ¿ÐÞ¸Ä
|
{
|
u16 i_index;
|
u8 ModifyResult=0;
|
u8 GasModifyFlag=0;
|
u8 FeeModifyFlag=0;
|
double PreModifyGasValue ;
|
double PreModifyFeeValue ;
|
double ModifiedGasValue ;
|
double ModifiedFeeValue ;
|
PreModifyGasValue = Settlement_Para.fCumulativeGasUsage;
|
PreModifyFeeValue = Settlement_Para.fCumulativeFeeUsage;
|
|
GasModifyFlag = UTR_rec_buff[2];
|
if(GasModifyFlag==1)
|
{
|
for(i_index=0;i_index<8;i_index++)
|
{
|
(*((uint8_t *)(&ModifiedGasValue) + i_index)) = UTR_rec_buff[i_index + 3];
|
}
|
|
if((ModifiedGasValue>=0)&&(ModifiedGasValue<=GAS_USAGE_UP_LIMIT))
|
{
|
Settlement_Para.fCumulativeGasUsage = ModifiedGasValue;
|
Write_Verification(Settlement_Para.fCumulativeGasUsage,REALTIME_CUMULATIVE_GAS_USAGE_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_B_ADDR,REALTIME_CUMULATIVE_GAS_USAGE_C_ADDR);
|
FM25V02_data_write_double(GAS_USAGE_BIL_ADDR, Settlement_Para.fCumulativeGasUsage);
|
}else
|
{
|
ModifyResult = 1;
|
}
|
}
|
|
FeeModifyFlag = UTR_rec_buff[11];
|
if(FeeModifyFlag==1)
|
{
|
for(i_index=0;i_index<8;i_index++)
|
{
|
(*((uint8_t *)(&ModifiedFeeValue) + i_index)) = UTR_rec_buff[12 + i_index];
|
}
|
|
if((ModifiedFeeValue>=0)&&(ModifiedFeeValue<=FEE_USAGE_UP_LIMIT))
|
{
|
Settlement_Para.fCumulativeFeeUsage = ModifiedFeeValue;
|
Write_Verification(Settlement_Para.fCumulativeFeeUsage,REALTIME_CUMULATIVE_FEE_USAGE_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_B_ADDR,REALTIME_CUMULATIVE_FEE_USAGE_C_ADDR);
|
FM25V02_data_write_double(FEE_USAGE_BIL_ADDR, Settlement_Para.fCumulativeFeeUsage);
|
}else
|
{
|
ModifyResult = 1;
|
}
|
}
|
|
if((FeeModifyFlag==1)||(GasModifyFlag==1))
|
{
|
CumulantsRecord(GasModifyFlag,PreModifyGasValue,FeeModifyFlag,PreModifyFeeValue);
|
}
|
|
GPRS_SEND_BUFF[0] = 0x57;
|
GPRS_SEND_BUFF[1] = 0x57;
|
GPRS_SEND_BUFF[2] = ModifyResult;
|
for(i_index=0;i_index<8;i_index++)
|
{
|
GPRS_SEND_BUFF[i_index + 3] = (*((uint8_t *)(&Settlement_Para.fCumulativeGasUsage) + i_index));
|
}
|
|
for(i_index=0;i_index<8;i_index++)
|
{
|
|
GPRS_SEND_BUFF[i_index + 11] = (*((uint8_t *)(&Settlement_Para.fCumulativeFeeUsage) + i_index));
|
|
}
|
|
|
|
GPRS_SEND_BUFF[19] = 0 ;
|
|
for(i_index=0;i_index<19;i_index++)
|
{
|
GPRS_SEND_BUFF[19] = GPRS_SEND_BUFF[19] + GPRS_SEND_BUFF[i_index] ;
|
}
|
|
GPRS_SEND_BUFF[20] = 0x16 ;
|
UTR_Send_Data(GPRS_SEND_BUFF,21);
|
|
}
|
|
|
|
|
void Send_Cumulants_Record(u16 num)
|
{
|
u16 i_index=0,j_index=0;
|
u32 current_para_record_addr;
|
u16 Read_index=0;
|
u8 checksum=0;
|
|
GPRS_SEND_BUFF[0] = 0x59;
|
GPRS_SEND_BUFF[1] = 0x59;
|
for(i_index=0;i_index<8;i_index++)
|
{
|
GPRS_SEND_BUFF[2+i_index] = gprs_protocol_header.DeviceAddress[i_index];
|
}
|
|
if(system_record.u8CumulantsStoreFullFlag == 1 )
|
{
|
if(num>CUMULANTS_MODIFY_RECORD_NUM)
|
{
|
num = CUMULANTS_MODIFY_RECORD_NUM;
|
}
|
}
|
else
|
{
|
if(num>system_record.u16CumulantsRecordNUM)
|
{
|
num = system_record.u16CumulantsRecordNUM;
|
}
|
}
|
|
if(num>system_record.u16CumulantsRecordNUM)
|
{
|
Read_index = system_record.u16CumulantsRecordNUM + CUMULANTS_MODIFY_RECORD_NUM - num;
|
}
|
else
|
{
|
Read_index = system_record.u16CumulantsRecordNUM - num;
|
}
|
|
GPRS_SEND_BUFF[10] = (u8)num;
|
GPRS_SEND_BUFF[11] = (u8)(num>>8);
|
|
for(i_index=0;i_index<12;i_index++)
|
{
|
checksum = checksum + GPRS_SEND_BUFF[i_index];
|
}
|
|
UTR_Send_Data(GPRS_SEND_BUFF,12);
|
|
for(i_index=0;i_index<num;i_index++)
|
{
|
current_para_record_addr = FIRST_CUMULANTS_MODIFY_RECORD_ADDR + Read_index * CUMULANTS_MODIFY_RECORD_LENGTH;
|
for(j_index=0;j_index <40;j_index++)
|
{
|
GPRS_SEND_BUFF[j_index] = FM25V02_data_read(current_para_record_addr + j_index );
|
checksum = checksum + GPRS_SEND_BUFF[j_index];
|
}
|
|
Read_index++;
|
|
if(Read_index>=CUMULANTS_MODIFY_RECORD_NUM)
|
{
|
Read_index = 0;
|
}
|
|
if((Read_index%10)==0)
|
{
|
IWDT_Clr();
|
}
|
|
UTR_Send_Data(GPRS_SEND_BUFF,40);
|
|
}
|
|
GPRS_SEND_BUFF[0] = checksum;
|
GPRS_SEND_BUFF[1] = 0x16;
|
UTR_Send_Data(GPRS_SEND_BUFF,2);
|
}
|
|
void Condition_det(void)
|
{
|
if(device_Parm.Hour_Updata_flag != calendar.hour) //Сʱ·¢Éú±ä»¯
|
{
|
device_Parm.Hour_Updata_flag = calendar.hour;
|
|
if(device_Parm.Hour_Updata_flag ==0x00) //0µã¼ì²âµç³Ø
|
{
|
PulseLine_Detection();
|
Power_Detection(0); //µçÔ´¼ì²â
|
LeakAlarmLine_Detection();
|
|
dayly_flag_clear(); //²¿·Ö״̬ÐèҪÿÌìÇå³ýÒ»´Î
|
}
|
|
#ifdef DEBUG_OUT
|
UartDebugFun("Hour_Updata!\n");
|
#endif
|
}
|
|
if(device_Parm.Key_Power_Det ==1)
|
{
|
device_Parm.Key_Power_Det =0;
|
Power_Detection(0); //µçÔ´¼ì²â
|
}
|
}
|
|
void Get_Sample_Send_Interval(void)
|
{
|
/**************¸ù¾Ýtf tp²ÎÊý¼ÆËã²É¼¯ºÍ·¢Ëͼä¸ô**********************/
|
if(device_Parm.Tyf == 0x04)
|
{
|
device_Parm.Sample_Interval = device_Parm.Tf;
|
}else if(device_Parm.Tyf == 0x05)
|
{
|
device_Parm.Sample_Interval = (u16)device_Parm.Tf * 60;
|
}else if(device_Parm.Tyf == 0x06)
|
{
|
device_Parm.Sample_Interval = 1440;
|
}
|
|
if((device_Parm.Sample_Interval<1)||(device_Parm.Sample_Interval>1440))
|
{
|
device_Parm.Sample_Interval = 60;
|
}
|
|
if(device_Parm.Typ == 0x84)
|
{
|
device_Parm.Send_Interval = device_Parm.Tp;
|
}else if(device_Parm.Typ == 0x85)
|
{
|
device_Parm.Send_Interval = (u16)device_Parm.Tp * 60;
|
}else if(device_Parm.Typ == 0x86)
|
{
|
device_Parm.Send_Interval = 1440;
|
}else
|
{
|
device_Parm.Send_Interval = 0;
|
}
|
|
|
if(device_Parm.Send_Interval>1440)
|
{
|
device_Parm.Send_Interval = 1440;
|
|
}
|
|
device_Parm.Sample_Min_Time = 0;
|
}
|
void BigSmallSwitch(u8 * aA , u8 len) //Êý×é´óС¶ËÇл»£¬»òÕß½Ð×öÊý×éµ¹Ðò£¬Ä¿Ç°×Ϊ8×Ö½Ú
|
{
|
u8 index;
|
u8 MidValue[8];
|
for(index = 0; index < len; index ++)
|
{
|
MidValue[index] = * (aA + index);
|
}
|
|
for(index = 0; index < len; index ++)
|
{
|
* (aA + index) = MidValue[len-1-index];
|
}
|
|
|
}
|
unsigned char BCD2HEX(unsigned char bcd_data) //BCD??HEX???
|
{
|
unsigned char temp;
|
temp=((bcd_data/16)*10 + bcd_data%16);
|
return temp;
|
}
|
unsigned char HEX2BCD(unsigned char hex_data) //HEX??BCD???
|
{
|
unsigned char temp;
|
temp=((hex_data/10)*16 + hex_data%10);
|
return temp;
|
}
|
/******************************************
|
* func: IntervalReportingHandle
|
* desc: ¼ä¸ôÉÏ·¢Åжϴ¦Àíº¯Êý£¬·µ»Ø1±íʾµ½´ï¼ä¸ôÉÏ´«Ê±¼äµã
|
* input: IntervalReportingInterval¼ä¸ô IntervalReporting1TimeÊ×´Îʱ¼ä
|
* output: none
|
* return: none
|
*****************************************/
|
u8 IntervalReportingHandle(u16 IntervalReportingInterval,u16 IntervalReporting1Time)
|
{
|
//¼ä¸ôÉϱ¨ÔÝʱ²»¿¼ÂǼä¸ô³¬¹ý1440·ÖÖÓ£¬Ò²¾ÍÊdz¬¹ý1Ìì¡£
|
u16 FirstReportingTime; //Ê×´ÎÉϱ¨Ê±¼ä£¬·ÖÊý
|
u16 NextReportingTime; //Ï´ÎÉϱ¨Ê±¼ä£¬·ÖÊý
|
u16 CurrentTime;//µ±Ç°Ê±¼ä£¬·ÖÊý
|
u16 Count_i=0;
|
u16 ComparisonsNumber;
|
|
if(IntervalReportingInterval==0)
|
{
|
return 0;
|
}
|
|
FirstReportingTime = (u16)BCD2HEX((u8)(IntervalReporting1Time>>8)) *60 + BCD2HEX((u8)IntervalReporting1Time);
|
|
CurrentTime = (u16)BCD2HEX(calendar.hour) *60 + BCD2HEX(calendar.min);
|
NextReportingTime = FirstReportingTime; //Ï´ÎÉϱ¨ÏÈÈ¥Ê×´ÎÉϱ¨Ê±¼ä×ö±È½Ï
|
|
ComparisonsNumber =1440/IntervalReportingInterval +1; //±È½Ï´ÎÊý£¬¸úÉÏ´«¼ä¸ôÓйØ
|
if(calendar.sec<0x20) //ΪÁ˼õÉÙ×ÊÔ´ÀË·Ñ£¬Ö»ÓÐÔÚÃëÊýСÓÚ20µÄʱºòÅжϣ¬Êµ¼ÊÉϼä¸ô¶ÌµÄÇé¿öÏÂÐèÒªÍ⹩µç£¬²»¿¼Âǹ¦ºÄ
|
{
|
for(Count_i =0;Count_i<ComparisonsNumber;Count_i++) //´Ë´¦¿ÉÄÜ»áºÄ·ÑÒ»µãʱ¼ä
|
{
|
if(NextReportingTime == CurrentTime )
|
{
|
return 1;
|
}
|
else
|
{
|
NextReportingTime = NextReportingTime + IntervalReportingInterval; //Ï´ÎÉϱ¨Ê±¼äµã
|
if(NextReportingTime>=1440)
|
{
|
NextReportingTime -=1440;
|
}
|
}
|
}
|
}
|
|
return 0;
|
}
|
|
/******************************************
|
* func: send_control_NDCEP
|
* desc: ²É¼¯ºÍÉÏ·¢µÄʱ¼äµã¿ØÖÆ
|
* input: none
|
* output: none
|
* return: none
|
*****************************************/
|
void Sample_Send_Control(void)
|
{
|
|
u16 IntervalReporting1Time = 0;
|
|
// Get_Time();//»ñÈ¡µ±Ç°Ê±¼ä
|
// delay_ms(10);
|
|
|
if(device_Parm.Sample_Min_Time==0) //ÿ20ÃëÖ´ÐÐÅжÏÒ»´Î£¬Ò²¾ÍÊÇRTCÖжÏÀ´Ò»´ÎµÄʱºòÅжÏ
|
{
|
device_Parm.Sample_Min_Time = 20;
|
|
//²É¼¯Ê±¼ä¿ØÖÆ
|
if(IntervalReportingHandle(device_Parm.Sample_Interval,IntervalReporting1Time)==1)
|
{
|
awaken_flag = RTC_awaken;
|
|
if(VariaDlg.ReceivedInstructionFlag == 1) //²É¼¯µãµ½ÅжÏ֮ǰÊÇ·ñÖ´ÐйýÓà¶îÏà¹ØÖ¸ÁÓеϰֱ½ÓÉÏ·¢£¬¼°Ê±Á˽âÓà¶î״̬¡£
|
{
|
GPRS_sendFlag = 1;
|
gprs_protocol_header.Send_type = 1;
|
VariaDlg.ReceivedInstructionFlag = 0;
|
}
|
}
|
|
|
//¼ä¸ôÉÏ·¢Ê±¼ä¿ØÖÆ
|
if(device_Parm.Send_Interval>0)
|
{
|
if(IntervalReportingHandle(device_Parm.Send_Interval,IntervalReporting1Time)==1)
|
{
|
GPRS_sendFlag = 1;
|
gprs_protocol_header.Send_type = 1;
|
}
|
}
|
|
//¶¨Ê±ÉÏ·¢Ê±¼äµã¿ØÖÆ
|
if(device_Parm.time1_flag == 0x80)
|
{
|
if((calendar.hour==device_Parm.sendTiming_hour)&&(calendar.min==device_Parm.sendTiming_min)&&(calendar.sec<0x20))
|
{
|
GPRS_sendFlag = 1;
|
gprs_protocol_header.Send_type = 1;
|
}
|
}
|
|
if(device_Parm.time2_flag == 0x80)
|
{
|
if((calendar.hour==device_Parm.sendTiming_hour2)&&(calendar.min==device_Parm.sendTiming_min2)&&(calendar.sec<0x20))
|
{
|
GPRS_sendFlag = 1;
|
gprs_protocol_header.Send_type = 1;
|
}
|
}
|
}
|
}
|
|
|
|
void Valve_abnormal_judge(void)
|
{
|
if(Valve_control_parm.ValveHaveClosedTime >0)//·§ÃŹرռÆÊ±ÒѾÆô¶¯
|
{
|
if(gprs_protocol_header.Valve_Status ==2 ) //·§ÃŹرÕÇé¿öÏÂ
|
{
|
if(valve_abnormal_para_g.valveCloseFirstFlag ==1)
|
{
|
//Ê×´ÎÀÛ»ýÁ¿ÒѾ¼Ç¼µÄÇé¿öÏ£¬¿ªÊ¼ÅжϽÓÏÂÀ´µÄÀÛ¼ÆÁ¿¼Í¼ÓëÊ״μǼµÄ²îÖµÊÇ·ñ³¬¹ýãÐÖµ
|
if(valve_abnormal_para_g.valveCloseNextFlag !=1)
|
{
|
valve_abnormal_para_g.valveCloseNextFlag =1;
|
}
|
valve_abnormal_para_g.valveCloseNextCum = Settlement_Para.fCumulativeGasUsage;
|
|
if(valve_abnormal_para_g.valveCloseNextFlag ==1)
|
{
|
if((valve_abnormal_para_g.valveCloseNextCum - valve_abnormal_para_g.valveCloseFirstCum) > VALVE_ABNORMAL_THRESHOLD)
|
{
|
//ÀÛ»ýÁ¿²îÖµ³¬¹ýãÐÖµ£¬´ú±í·§ÃŹرÕ״̬ÏÂÓÐ×߯ø£¬Åж¨Îª·§ÃÅÒì³££¨Ã»¹Ø½ô»òÕ߯äËû£©
|
gprs_protocol_header.Valve_Status =3; //·§ÃÅ״̬±äΪ3£¨Òì³££©Ö®ºó£¬´Ë´¦µÄÅжϲ»»áÔÙÖ´ÐУ¬ÒòÎªÇ°ÃæÓиöifÌõ¼þÊÇ·§ÃÅ״̬Ϊ2£¨¹Ø£©¡£Òò´ËÔٴιط§Ö®ºó²ÅÄÜÖØÐÂÆô¶¯·§ÃÅÒì³£ÅжÏ
|
FM25V02_data_write(gprs_protocol_header.Valve_Status,VALVE_STATE_ADDR);
|
system_alarm.alarm_Valve_Abnormal_time ++;
|
if(system_alarm.alarm_Valve_Abnormal_time>=250)
|
{
|
system_alarm.alarm_Valve_Abnormal_time = 250;
|
}
|
if(system_alarm.alarm_Valve_Abnormal_time<=2) //ÿÌìÖ»±¨2´Î¡£
|
{
|
system_alarm.alarm_Valve_Abnormal = 1;
|
}
|
}
|
}
|
}
|
|
if(valve_abnormal_para_g.valveCloseFirstFlag !=1)
|
{
|
//¼Ç¼·§ÃŹرÕÖ®ºóµÄÊ×´ÎÀÛ»ýÁ¿
|
valve_abnormal_para_g.valveCloseFirstFlag = 1;
|
valve_abnormal_para_g.valveCloseFirstCum = Settlement_Para.fCumulativeGasUsage;
|
}
|
}else
|
{
|
valve_abnormal_para_g.valveCloseFirstFlag = 0;
|
Valve_control_parm.ValveHaveClosedTime = 0;
|
}
|
}else
|
{
|
|
valve_abnormal_para_g.valveCloseFirstCum =0;
|
valve_abnormal_para_g.valveCloseFirstFlag = 0;
|
valve_abnormal_para_g.valveCloseNextCum =0;
|
valve_abnormal_para_g.valveCloseNextFlag = 0;
|
|
}
|
|
|
}
|
|
|
|
//ÐèҪÿÌìÇå³ýµÄ±êÖ¾
|
void dayly_flag_clear(void)
|
{
|
|
system_alarm.alarm_FlowPowerLOW_time = 0;
|
system_alarm.alarm_Valve_Abnormal_time = 0;
|
}
|