#ifndef __KEYSLAVE485_H
#define __KEYSLAVE485_H
#include "stm32f7xx_hal.h"


//必须配置三项参数：看门狗，液位计类型，油品类型。李伟修改  20210420

//0----关闭看门狗SP706   1----打开看门狗SP706--------------必须配置的参数1/3
#define WatchDogOn   						1   //是否打开看门狗 
//#define WatchDogOn   							0   //是否打开看门狗 

#define TIME_OF_Break_seal_cnt 		1  //30     连续破封判断次数


#define En_AnHuiKaiLe  						0     //安徽开乐产品试用增加温度  压力显示


#define En_XieYouFa_OverSample  	1     //卸油阀优化   增加一次读取


#define ElecFence_AutoSeal_EN   	1  //电子围栏自动施封

#define DisplaySensorData_En   		1   //是否允许模拟量传感器数据显示，比如温度压力等参数

#define Max_Usart2_ErrorTime   		32   //最大读取错误次数  


#define VoicePlay_En   						0   //串口4上的语音播报；已经有打印机、按键两个设备
#define Printer_En   							1   //串口4上的打印机是否启用   新疆项目则启用；北京部队试用不启用
#define KeyPad_Set_SealState_En   1   //允许按键修改电子铅封的状态

/* Base address of the Flash sectors */ 
#define ADDR_FLASH_SECTOR_0     ((uint32_t)0x08000000) /* Base address of Sector 0, 32 Kbytes */
#define ADDR_FLASH_SECTOR_1     ((uint32_t)0x08008000) /* Base address of Sector 1, 32 Kbytes */
#define ADDR_FLASH_SECTOR_2     ((uint32_t)0x08010000) /* Base address of Sector 2, 32 Kbytes */
#define ADDR_FLASH_SECTOR_3     ((uint32_t)0x08018000) /* Base address of Sector 3, 32 Kbytes */
#define ADDR_FLASH_SECTOR_4     ((uint32_t)0x08020000) /* Base address of Sector 4, 128 Kbytes */
#define ADDR_FLASH_SECTOR_5     ((uint32_t)0x08040000) /* Base address of Sector 5, 256 Kbytes */
#define ADDR_FLASH_SECTOR_6     ((uint32_t)0x08080000) /* Base address of Sector 6, 256 Kbytes */
#define ADDR_FLASH_SECTOR_7     ((uint32_t)0x080C0000) /* Base address of Sector 7, 256 Kbytes */

#define StartBytes_IAP     ((uint32_t)0xA55A55AA) //远程升级的起始字节
#define EndBytes_IAP     ((uint32_t)0x5AA5AA55) //远程升级的结束字节


#define New236Byte_En_0x1121   					0   //新增的236字节传输1-4仓、5-8仓协议
#define New150Byte_En_0x1193   					1   //新增的150字节传输每仓所有传感器的协议，一帧数据中传输每仓铅封、IO、模拟量数据
#define New64Byte_En_0x0013   					0   //阀门状态或运算之后进行传输
#define New80Byte_En_0x119B   					1   //新增的传输整车传感器，倾角、备电、等


#define New64Byte_En_0x0020   					1   //北京部队试用新增的一组64字节的阀门状态传输协议


#define ExtAddr_ControllBoard    	0x95020002   //控制板的4字节地址  扩展地址
#define ExtAddr_ControllBoard2   	0x95500002   //控制板的4字节地址  扩展地址

#define Length_Of_PayLoad_RemCali   44   //远程标定的有效载荷长度   帧长度64，有效载荷44字节
#define DataMode_For_RemCali   			0x01   //远程标定的数据模式，00=ASCII，01=HEX
#define Length_Of_Reply_RemCali   	67   //远程标定返回的数据长度，分别为131和67；十六进制模式下为67


#define F2_and_key4   	0xbffb

 
//20210120新增   液位计类型                   --------------必须配置的参数2/3
//01--磁致伸缩液位计； 02————雷达液位计
#define TypeOf_YeWeiJi		 0x02
//#define TypeOf_YeWeiJi		 0x01

/////////油品配置！！！必须要配置！！！       --------------必须配置的参数3/3
//0.08%为柴油的膨胀系数   0.12%为汽油的膨胀系数
//20210419   --56454为柴油车；54021为汽油车
#define SCL_Factor_diesel  ((float)0.08)    //柴油与汽油的膨胀系数    0808车为柴油，56454柴油
			
#define SCL_ControllToPlatForm (1000.00f)


//屏幕唤醒的休眠时间间隔 20210408 同北京迪文屏供应商联系之后确认40ms是屏幕的刷新间隔，留下10ms余量
#define LCD_TimeOfWake		 50 


#define ShowPassword_JieFeng_En   0  //是否在屏幕上显示密码 
#define ShowCang02_IO_EN   1  //是否在屏幕上显示2仓阀门开关信息 
#define Show_Sys_Info_EN   1  //是否在屏幕上显示运行信息 


//采集器上传给控制器的液位、温度数据，int16格式传输，精度为0.1mm  所以要缩小10倍
#define SCL_Yewei_Collect2Contr		 (0.1f)
#define SCL_Temp_Collect2Contr	   (0.1f)

#define SCL_Angle	   (180.0f/32768.0f)

//三点式温度传感器,1=启用；0=未安装或者未启用
#define TriTempSensorOn   1    

//是否打印日期和时间  调试比武期间不打印时间信息，手写出库、到站信息
#define PrintDateTime   0     

//读取采集器的时间间隔  单位为毫秒ms
#define READ_COLLECT_INTERVAL ((uint16_t)500U)
 
//远程标定的时间
//#define SPAN_RemoteCali_INTERVAL  ((uint32_t)(600000))   //600秒
#define SPAN_RemoteCali_INTERVAL  ((uint32_t)(10000))   //10秒


#define SPAN_ControllerAndCollector_INTERVAL_100  ((uint32_t)(100))   //150ms   采集器的命令响应时间
#define SPAN_ControllerAndCollector_INTERVAL_120  ((uint32_t)(120))   //120ms   采集器的命令响应时间
#define SPAN_ControllerAndCollector_INTERVAL_180  ((uint32_t)(180))   //180ms   采集器的命令响应时间

//手工输入温度制后默认的保持时间   20210303调整为60分钟
#define SPAN_Manual_Input_Temp    ((uint32_t)(3600000))   //40分钟=2400s换算为ms
//#define SPAN_Manual_Input_Temp    ((uint32_t)(1200000))   //20分钟=1200s换算为ms


//任何按键按下后默认的保持时间 ----控制屏幕强制唤醒的时间
#define SPAN_KeyPress_Time    ((uint32_t)(600000))   //600秒
 

///////异常状态标志
#define ADDR_DWIN_StateYiChang_CoverSmall 0x1046   //迪文屏幕人孔小盖地址
#define ADDR_DWIN_StateYiChang_CoverBig 0x1048   //迪文屏幕人孔大盖地址
#define ADDR_DWIN_StateYiChang_XieYouFa 0x1042   //迪文屏幕卸油阀地址
#define ADDR_DWIN_StateYiChang_HaiDiFa 0x1044   //迪文屏幕海底阀地址

#define ADDR_DWIN_Seal_Lock 0x100C   //迪文屏幕施封图标(关闭的锁)地址
#define ADDR_DWIN_Seal_UnLock 0x100F   //迪文屏幕破封图标(打开的锁)地址

#define ADDR_DWIN_Car_State 0x1022   //迪文屏幕车辆状态图标地址
#define ADDR_DWIN_Operation_State 0x1024   //迪文屏幕操作状态状态图标地址   装油   卸油  空闲
#define ADDR_DWIN_Loading_Oil_Mode 0x1028   //迪文屏幕装油模式图标地址   上装  下装
#define ADDR_DWIN_UnLoading_Oil_Mode 0x102a   //迪文屏幕卸油动画图标地址   上装  下装

#define ADDR_DWIN_Num_Of_CangId 0x103A   //迪文屏幕仓号图标地址   1--8


#define ADDR_DWIN_CoverSmall 0x1000   //迪文屏幕人孔小盖开关地址   打开或者关闭
#define ADDR_DWIN_CoverBig 0x1003   //迪文屏幕人孔大盖开关地址   打开或者关闭
#define ADDR_DWIN_HaiDiFa 0x1006   //迪文屏幕海底阀开关地址   打开或者关闭
#define ADDR_DWIN_XieYouFa 0x1009   //迪文屏幕卸油阀开关地址   打开或者关闭



#define ADDR_DWIN_Seal_UnLock 0x100F   //迪文屏幕破封图标(打开的锁)地址

#define ADDR_DWIN_Loading_Oil 0x1012   //迪文屏幕装油动画图标(打开的锁)地址第一仓，后边每仓地址+2


#define ADDR_DWIN_Text01 0x1070   //迪文屏幕显示文本框的地址
#define ADDR_DWIN_Text02 0x1270   //迪文屏幕显示文本框的地址

#define ADDR_DWIN_Text03_sysInfo 	0x1470   //迪文屏幕显示文本框的地址----------系统运行信息
#define ADDR_DWIN_Text04 					0x1670   //迪文屏幕显示文本框的地址
#define ADDR_DWIN_Text05 					0x1870   //迪文屏幕显示文本框的地址---启动界面的版本信息





//#define ADDR_DWIN_Title_IO 0x1B00   //阀门名称标志
//#define ADDR_DWIN_Cang01_IO 0x1C00   //仓1的阀门状态信息
//#define ADDR_DWIN_Cang02_IO 0x1A00   //仓2的阀门状态信息
//#define ADDR_DWIN_Cang03_IO 0x1D00   //仓3的阀门状态信息
//#define ADDR_DWIN_Cang04_IO 0x1E00   //仓4的阀门状态信息


#define ADDR_DWIN_Title_IO 			0x1A00   //阀门名称标志
#define ADDR_DWIN_Cang01_IO 		0x1B00   //仓1的阀门状态信息
#define ADDR_DWIN_Cang02_IO 		0x1C00   //仓2的阀门状态信息
#define ADDR_DWIN_Cang03_IO 		0x1D00   //仓3的阀门状态信息
#define ADDR_DWIN_Cang04_IO 		0x1E00   //仓4的阀门状态信息
#define ADDR_DWIN_SensorInfo 		0x2100   //模拟传感器类信息描述指针
#define ADDR_DWIN_SensorInfoAll 0x3100   //

#define ADDR_DWIN_Text01_SP 		0x5000   //迪文屏幕显示文本框的描述指针地址
#define ADDR_DWIN_Text02_SP 		0x5010   
																		 
#define ADDR_DWIN_Text03_SP 		0x5020   
#define ADDR_DWIN_Text04_SP 		0x5030   
#define ADDR_DWIN_Text05_SP 		0x5040 


#define ADDR_DWIN_Title_IO_SP 		0x5050   //阀门名称描述指针
#define ADDR_DWIN_Cang01_IO_SP 		0x5060   //仓1的阀门状态信息描述指针
#define ADDR_DWIN_Cang02_IO_SP 		0x5070   //仓2的阀门状态信息描述指针
#define ADDR_DWIN_Cang03_IO_SP 		0x5080   //仓3的阀门状态信息描述指针
#define ADDR_DWIN_Cang04_IO_SP 		0x5090   //仓4的阀门状态信息描述指针
#define ADDR_DWIN_SensorInfo_SP 	0x50A0   //模拟传感器类信息描述指针



#define ADDR_DWIN_Tempe01 0x2040    //1仓温度数据
#define ADDR_DWIN_Pressure01 0x2044    //1仓压力数据
#define ADDR_DWIN_Yewei01_Cang01 0x2048    //1仓液位数据
#define ADDR_DWIN_Qingjiao01 0x204c    //倾角1数据
#define ADDR_DWIN_Qingjiao02 0x207c    //倾角2数据
#define ADDR_DWIN_Zhongliang 0x2050    //1仓重量数据，或等于整车油品重量
#define ADDR_DWIN_TempeManualInput 0x2080    //手工输入的1仓温度；主要用于新疆现场比武

#define ADDR_DWIN_Yewei01_Cang02 0x2060    //2仓液位数据
#define ADDR_DWIN_Yewei01_Cang03 0x2064    //3仓液位数据
#define ADDR_DWIN_Yewei01_Cang04 0x2068    //4仓液位数据



#define ADDR_DWIN_Vt_Cang01 0x2054    //第1仓的Vt数据
#define ADDR_DWIN_Vt_Cang02 0x20A0    //第2仓的Vt数据
#define ADDR_DWIN_Vt_Cang03 0x20A4    //第3仓的Vt数据
#define ADDR_DWIN_Vt_Cang04 0x20A8    //第4仓的Vt数据


#define ADDR_DWIN_V20_Cang01 0x2058    //第一仓的V20数据

#define ADDR_DWIN_Tempe01_Cang01 0x2084    //第一仓的温度测量点1
#define ADDR_DWIN_Tempe02_Cang01 0x2088    //第一仓的温度测量点2
#define ADDR_DWIN_Tempe03_Cang01 0x208c    //第一仓的温度测量点3
 
#define ADDR_DWIN_Density_Cang01 0x2090    //第一仓的密度数据




/////////////////以下内容不需要修改！！！！！！！
//将会根据上述液位计类型修改相应的参数
/*
#if(TypeOf_YeWeiJi==0x02)     
    //注释掉柴油的膨胀系数则切换为汽油，否则自动切换为柴油
		#define SCL_Factor_diesel  ((float)0.08)    //柴油的膨胀系数    0808车为柴油
#endif	
*/	


//Fram中存储的所有参数
#define 	ADDR_Extended_ContBoard	0x0000	//	0	95010001	扩展地址
#define 	ADDR_Version_ContBoard	0x0004	//	4	STM32F746VGT6+2021v1.06	版本号
#define 	ADDR_AutoSealed_Time	0x0024	//	36		自动施封时长
#define 	ADDR_DataSource_LiquidoMeter	0x002C	//	44		液晶屏数据显示来源——液位参数
#define 	ADDR_DataSource_ElecSeal	0x0030	//	48		液晶屏数据显示来源——铅封参数
#define 	ADDR_V20_Point	0x0034	//	52		V20计算温度点的选择
#define 	ADDR_CarPlate_Number	0x0044	//	68		车牌号
#define 	ADDR_Zero_Of_LiquidMeter	0x0064	//	100	兼容8仓	液位计零点
#define 	ADDR_Zero_Of_TankCapacity	0x0084	//	132		罐容Vt零点
#define 	ADDR_ManHoLe_Number	0x00A4	//	164		人孔盖卸油阀数量
#define 	ADDR_OiLType_Data	0x00E4	//	228		油品参数   膨胀系数 0.0008  0.0012
#define 	ADDR_Zero_Of_TempSensor	0x0104	//	260		温度偏移参数
#define 	ADDR_TankShape_01	0x0124	//	292	1—4仓	罐车参数1
#define 	ADDR_TankShape_02	0x0164	//	356	5—8仓	罐车参数2
#define 	ADDR_SampIntervaL_Collector	0x01A4	//	420	单位为毫秒。取值范围为	同采集板的采样间隔
#define 	ADDR_CommuIntervaL_ScreenDwin	0x01B4	//	436		同迪文屏的通信间隔
#define 	ADDR_SleepTime_ScreenDwin	0x01C4	//	452		屏幕休眠时间
#define 	ADDR_RTC_ScreenDwin	0x01CC	//	460		屏幕RTC标定
#define 	ADDR_TiltAngle_Sensor	0x01DC	//	476		倾角补偿参数
#define 	ADDR_WarningOf_TiltAngle	0x01EC	//	492	x报警门限5度，y报警门限5度，启用报警。	倾角报警门限
#define 	ADDR_Auto_OilStatic_Judgement	0x01FC	//	508	10s滑动窗口时间,3mm液位波动，启用自动稳油	自动稳油参数/打印机自动稳油判断
#define 	ADDR_Restart_ContBoard	0x020C	//	524		复位指令
#define 	ADDR_Unique_ID_ContBoard	0x0210	//	528		唯一ID
#define 	ADDR_VersionOf_Software	0x0220	//	544	1.0.0.0	软件版本号
#define 	ADDR_VersionOf_Hardware	0x0240	//	576	1.0.0.1	硬件版本号
#define 	ADDR_VersionOf_LCD	0x0260		//608		
#define 	ADDR_FactoryParam_ContBoard	0x0280	//	640	所有参数恢复为默认值	出厂参数
#define 	ADDR_SelfTest_ContBoard	0x0284	//	644		自检结果
#define 	ADDR_BaudRate_ContBoard	0x0288	//	648		波特率
#define 	ADDR_Zero001_ContBoard	0x0298	//	664		零点参数
#define 	ADDR_Scale001_ContBoard	0x02A8	//	680		灵敏度参数
#define 	ADDR_ThreshHold001_ContBoard	0x02B8	//	696		阈值参数
#define 	ADDR_Precision_ContBoard	0x02C8	//	712		精度
#define 	ADDR_TempFactor_ContBoard	0x02D8	//	728		温度补偿系数
#define 	ADDR_YmodemMode_ContBoard	0x02E8	//	744		Ymodem模式
#define 	ADDR_Reserve001_ContBoard	0x02EC	//	748		Res001

//李伟修改  20211130   压力报警上限、下限、温度上限、下限、温度修正、压力窗口时长、压力正偏门限、负偏门限、压力修正、算法类型等
//数据格式统一标准化未浮点数，每个数据占用4字节。平台下发数据均为浮点数格式，控制板根据需要进行强制类型转换。
#define 	ADDR_RunAn_AlarmThreshold 	0x02EC	//	748		Res001  44个字节
//诸正龙增加 20220113 
#define   ADDR_USART1_RE_TIMEOUT			0x0318   //终端通信多少时间无接收重启 4字节
#define   ADDR_DISP_VT_TYPE           0x031C    //VT 20的显示数据来源

#define 	ADDR_Reserve002_ContBoard	0x02F0	//	752		Res002
#define 	ADDR_Reserve003_ContBoard	0x02F4	//	756		Res003
#define 	ADDR_Reserve004_ContBoard	0x02F8	//	760		Res004
#define 	ADDR_Reserve005_ContBoard	0x02FC	//	764		Res005
#define 	ADDR_Reserve006_ContBoard	0x0300	//	768		Res006
#define 	ADDR_Reserve007_ContBoard	0x0304	//	772		Res007
#define 	ADDR_Reserve008_ContBoard	0x0308	//	776		Res008
#define 	ADDR_ElecSealData_BulkTrans_ContBoard	0x030C	//	780		铅封液位批量上传
#define 	ADDR_Cabinet01_ContBoard	0x0310	//	784	32个浮点数参数或者64个int16类型数据，4字节对齐。一帧数据128*2=256字符上发给平台.	仓1
#define 	ADDR_Cabinet02_ContBoard	0x0390	//	912		仓2
#define 	ADDR_Cabinet03_ContBoard	0x0410	//	1040		仓3
#define 	ADDR_Cabinet04_ContBoard	0x0490	//	1168		仓4
#define 	ADDR_Cabinet05_ContBoard	0x0510	//	1296		仓5
#define 	ADDR_Cabinet06_ContBoard	0x0530	//	1328		仓6
#define 	ADDR_Cabinet07_ContBoard	0x0550	//	1360		仓7
#define 	ADDR_Cabinet08_ContBoard	0x0570	//	1392		仓8
#define 	ADDR_AuthorizeCode	0x0590	//	1424	8仓，每仓4字节	授权解封密码
#define 	ADDR_Is_In_ElecFence	0x05D0	//	1488		车是否在电子围栏内
#define 	ADDR_TankCapacity_Table	0x05D4	//	1492	200cm高度，200个u16数据	罐容表标定
#define 	ADDR_Auto_sealedOK_ID	0x0764	//	1892		原控制板兼容地址
#define 	ADDR_Break_sealing_Id	0x0768	//	1896		原控制板兼容地址
#define 	ADDR_Config_fun_id	0x076C	//	1900		原控制板兼容地址
#define 	ADDR_Auto_Seal_Time	0x0770	//	1904		原控制板兼容地址
#define 	ADDR_Baseval_ID	0x0774	//	1908		原控制板兼容地址
#define 	ADDR_StoreNumber	0x0778	//	1912		原控制板兼容地址
#define 	ADDR_ManHole_Big_info	0x077C	//	1916		原控制板兼容地址
#define 	ADDR_ManHole_small_info	0x0780	//	1920		原控制板兼容地址
#define 	ADDR_Dump_info	0x0784	//	1924		原控制板兼容地址
#define 	ADDR_Foot_info	0x0788	//	1928		原控制板兼容地址
#define 	ADDR_DebugControll	0x078C	//	1932		调试信息控制
#define 	ADDR_TotalRunTime	0x0794		//1940累计运行时间计数器
#define 	ADDR_State_ElecSeal_FSM	0x0798	//	1944		基于状态机的电子铅封状态
#define 	ADDR_SW_Voice_Printer	0x07A0	//	1952		是否开启打印机，语音播报-----每个bit表示一个外设；4个字节，最多支持32个外接设备

#define 	ADDR_Enable_BlankSeal	0x07A4     //	1956		是否允许空仓施封

#define 	ADDR_Enable_DispSysInfo	0x07A8	//	1960		是否允许显示系统信息等


//以下参数不用保存在FRAM中,地址跟实际的存储地址无关联，仅用于功能跳转   --开启液位传感器，压力传感器，断电保存，两边有油算法，允许重复施封，液晶类型，保留字，自动施封
#define 	ADDR_Enable_ReSeal	0x4000	//	16384		是否允许显示系统信息等


//////最高地址不大于0x07ff=2047




#define 	ADDR_Sw_VoicePlay	0x8000	//切换语音播报功能  
#define 	ADDR_Sw_ValveRaw	0x8001	////切换阀门的原始数据或者汉字数据 


//新增密码存储地址

//-----按键功能码
#define 	DebugFun_LCD_Version			90004	//	1920	版本信息
#define 	DebugFun_LCD_SleepTime			90002	//	LCD 休眠时间
#define 	DebugFun_DS1302Time				90003	//	1928		显示DS1302时间
#define 	DebugFun_CarLicensePlate	90068	//	显示车牌号
#define 	DebugFun_CarLicensePlate1	90005	//	显示车牌号	

#define 	DebugFun__Restart_ContBoard00	90523	//立即重启
#define 	DebugFun__Restart_ContBoard01	90524	//可以取消的重启
#define 	DebugFun_VersionOf_Software		90544	//软件版本号

//强制清除各仓的显示信息，避免乱码无法消除----因为正常只有39字符，原始数字较长，所以后边有残余
#define 	DebugFun_Clear_Valve_Info	99997	
#define 	DebugFun_Show_product_ID	99998	//显示产品ID
#define 	DebugFun_Show_Terminal		99999	//显示来自终端的命令信息




#define 	DebugFun_Sw_VoicePlay					98000	//切换语音播报功能
#define 	DebugFun_Sw_ValveRaw					98001	//切换阀门的原始数据或者汉字数据
#define 	DebugFun_Sw_DisplaySensorData		98002	//切换是否显示模拟量类的传感器数据  flag_Sw_DisplaySensorData
#define 	DebugFun_Refresh_Title_IO			98003	//强制刷新一次阀门名称显示
#define 	DebugFun_Sw_DispSysInfo				98004	//是否实时显示系统运行信息等
#define 	DebugFun_Disp_Valve_Info_Bit	98005	//在1仓的位置显示老协议的阀门信息，每个bit表示一个阀门状态,帧标志为0xA1


#define 	DebugFun_Set_Cang_NUM01	98101	//手动设定为1仓1阀门
#define 	DebugFun_Set_Cang_NUM02	98102	//手动设定为2仓2阀门
#define 	DebugFun_Set_Cang_NUM03	98103	//手动设定为3仓3阀门
#define 	DebugFun_Set_Cang_NUM04	98104	//手动设定为4仓4阀门
#define 	DebugFun_Set_Cang_NUM05	98105	//手动设定为5仓5阀门
#define 	DebugFun_Set_Cang_NUM06	98106	//手动设定为6仓6阀门
#define 	DebugFun_Set_Cang_NUM07	98107	//手动设定为7仓7阀门
#define 	DebugFun_Set_Cang_NUM08	98108	//手动设定为8仓8阀门

#define 	DebugFun_Set_BlankSeal_Enable 	98109	//手动设定空仓允许施封
#define 	DebugFun_Set_BlankSeal_Disable	98110	//手动设定空仓禁止施封



#define 	DebugFun_Set_Cang_NUM01_Seal	98111	//手动强制施封1仓
#define 	DebugFun_Set_Cang_NUM02_Seal	98112	//手动强制施封2仓
#define 	DebugFun_Set_Cang_NUM03_Seal	98113	//手动强制施封3仓
#define 	DebugFun_Set_Cang_NUM04_Seal	98114	//手动强制施封4仓
#define 	DebugFun_Set_Cang_NUM05_Seal	98115	//手动强制施封5仓
#define 	DebugFun_Set_Cang_NUM06_Seal	98116	//手动强制施封6仓
#define 	DebugFun_Set_Cang_NUM07_Seal	98117	//手动强制施封7仓
#define 	DebugFun_Set_Cang_NUM08_Seal	98118	//手动强制施封8仓


#define 	DebugFun_Set_Cang_NUM01_Broken	98121	//手动强制破封1仓
#define 	DebugFun_Set_Cang_NUM02_Broken	98122	//手动强制破封2仓
#define 	DebugFun_Set_Cang_NUM03_Broken	98123	//手动强制破封3仓
#define 	DebugFun_Set_Cang_NUM04_Broken	98124	//手动强制破封4仓
#define 	DebugFun_Set_Cang_NUM05_Broken	98125	//手动强制破封5仓
#define 	DebugFun_Set_Cang_NUM06_Broken	98126	//手动强制破封6仓
#define 	DebugFun_Set_Cang_NUM07_Broken	98127	//手动强制破封7仓
#define 	DebugFun_Set_Cang_NUM08_Broken	98128	//手动强制破封8仓


#define 	DebugFun_Set_Cang_NUM01_JieFeng	98131	//手动强制解封1仓
#define 	DebugFun_Set_Cang_NUM02_JieFeng	98132	//手动强制解封2仓
#define 	DebugFun_Set_Cang_NUM03_JieFeng	98133	//手动强制解封3仓
#define 	DebugFun_Set_Cang_NUM04_JieFeng	98134	//手动强制解封4仓
#define 	DebugFun_Set_Cang_NUM05_JieFeng	98135	//手动强制解封5仓
#define 	DebugFun_Set_Cang_NUM06_JieFeng	98136	//手动强制解封6仓
#define 	DebugFun_Set_Cang_NUM07_JieFeng	98137	//手动强制解封7仓
#define 	DebugFun_Set_Cang_NUM08_JieFeng	98138	//手动强制解封8仓

#define 	DebugFun_Set_Enable_ReSeal	98139	// 允许重复施封
#define 	DebugFun_Set_Disable_ReSeal	98140	//  

#define 	DebugFun_SW_ExpansionRatio	80228	//显示8仓的膨胀系数  
#define 	DebugFun_SW_ExtAddr_ControllBoard	80000	//显示控制板的扩展地址
#define 	DebugFun_SW_ExtAddr_IO_OnOff_Group	80001	//显示分组后的阀门开关状态0x91打包用
#define 	DebugFun_SW_ExtAddr_IO_Exception_Group	80002	////显示分组后的阀门异常状态0x91打包用
#define 	DebugFun_SW_ExtAddr_ControllBoardtmp	80003	//显示控制板的扩展地址
#define 	DebugFun_SW_ValveState_PoFeng0x13	80004	//显示破封时的阀门状态
#define 	DebugFun_SW_ValveState_PoFeng0x20	80005	//显示破封时的阀门状态 

#define 	DebugFun_Show_Sensor001	91001	//显示地址为001的传感器的状态
#define 	DebugFun_Show_Sensor002	91002	
#define 	DebugFun_Show_Sensor003	91003	
#define 	DebugFun_Show_Sensor004	91004	
#define 	DebugFun_Show_Sensor005	91005	
#define 	DebugFun_Show_Sensor006	91006	
#define 	DebugFun_Show_Sensor007	91007	
#define 	DebugFun_Show_Sensor008	91008	
#define 	DebugFun_Show_Sensor009	91009	
#define 	DebugFun_Show_Sensor010	91010	
#define 	DebugFun_Show_Sensor011	91011	
#define 	DebugFun_Show_Sensor012	91012	
#define 	DebugFun_Show_Sensor013	91013	
#define 	DebugFun_Show_Sensor014	91014	
#define 	DebugFun_Show_Sensor015	91015	
#define 	DebugFun_Show_Sensor016	91016	







//李伟修改  20200209    空气温度修正为实际油品温度
#define SCL_Air_To_Oil (1.000001f)


//李伟修改    20200210  同龚经理商定后  当温度超过10度之后直接加上49℃
#define Offset_diesel   (49.001f)

 

#define SCL_Factor_petrol  ((float)0.12)    //汽油的膨胀系数   0817车为汽油
	
//运输的油品的最大可能的温度---已经观察到的可以的达到65度
#define Max_Oil_Tempe ((float)120.01)
	

//运输的油品的最大可能的温度---已经观察到的可以的达到65度
#define Max_Oil_Height ((float)2.54321)
	
//运输的油品的最低可能的温度---极限低温为-60.01
#define Min_Oil_Tempe ((float)-60.01)


//控制器显示的数据源；0x00表示本机数据；0x01表示显示服务器下发的数据
#define DWIN_Display_Source    0x00 

#define Key_F1 0x1b
#define Key_F2 0x02
#define Key_F3 0x03
#define Key_F4 0x06
#define Key_00 0x30
#define Key_01 0x31
#define Key_02 0x32
#define Key_03 0x33
#define Key_04 0x34
#define Key_05 0x35
#define Key_06 0x36
#define Key_07 0x37
#define Key_08 0x38
#define Key_09 0x39

#define Key_CLR 0x7f
#define Key_POT 0x2e



//功能码
#define FrameHeader_Collect  0xAA
#define EquipmentNum_Collect 0x00
#define ValveState_Fuction   0x01
#define SensorValue_Function 0x02
#define WriteStore_Function  0x03
#define PlatformCal_Function 0x04
#define PlatformRestartCllect 0x05
#define PlatformSetOilStyle  0x06//新增
#define PlatformExceptionHandling		 0x07//新增


#define FrameHeader_Collect02  0x39
#define EquipmentNum_Collect02 0x01
#define ValveState_Fuction02   0x01
#define SensorValue_Function02 0x02
#define WriteStore_Function02  0x03
#define PlatformCal_Function02 0x04
#define PlatformRestartCllect02 0x05
#define PlatformSetOilStyle02  0x06//新增
#define PlatformExceptionHandling02		 0x07//新增


#define Collector_Reset		 								0x0010           //采集器复位
#define Collector_Get_Valve_State		 			0x0020	//0x3901标定命令的功能码   读取阀门状态
#define Collector_Get_Sensor_State				0x0027  //3.	读取某仓阀门之外传感器数据   
#define Collector_Set_XieYouFa_Closed			0x0050 	//4.	卸油阀标定为关
#define Collector_Set_XieYouFa_MenXian 		0x0051  //5.	设置卸油阀门限
#define Collector_Set_RenKongGai_Zero			0x0052	//6.	人孔盖传感器置零
#define Collector_GetSensor_From485Addr		0x0055  //7.	读取液位温度传感器数据(模拟量类的) ----需要指定485地址
#define Collector_Set_RenKongGai_MenXian	0x0072	//8.	设置人孔盖门限
#define Collector_Set_PanDuanCiShu			  0x0073  //9.	设置传感器判断次数（主要是人孔盖）
#define Collector_Set_CangFaMen_Num 			0x0074	//10.	设置采集器参数—仓数，每仓阀门数量
#define Collector_Set_RenKongGai_Num			0x0075  //11.	设置人孔盖种类数量----实际就是人孔大盖数量
#define Collector_Set_XieYouFa_Num		 		0x0076	//12.	设置卸油阀种类数量
#define Collector_Set_HaiDiFa_Num		 			0x0077	//13.	设置海底阀种类数量




#define Collector_Get_Wendu_Data		 			0x0121	//从采集板读取温度数据---8仓数据，float类型有效32字节 李伟修改20210928
#define Collector_Get_Yewei_Data		 			0x0122	//从采集板读取液位数据---8仓数据，float类型有效32字节 李伟修改20210928


//从采集板一次性读取读取温度、液位数据、体积、压力等---8仓数据，float类型有效
//16字节帧头
//液位,平均温度，温度1，温度2，温度3，Vt,压力，参数1，参数2，参数3.。。。，参数N共11个。
//前16字节为固定帧头，接下来8字节为保留待扩展，接下来8个参数32字节为整车模拟量信息（倾角、速度等），
//最后为4仓的模拟量参数与校验信息。总长度：16+8+32+4*4*11+4=236字节。
#define Collector_Get_WenduYewei_Data_1to4		 			0x1121	 //1--4仓数据
#define Collector_Get_WenduYewei_Data_5to8		 			0x1122	 //5--8仓数据


#define Collector_Get_All_Sensor_Data_Cang01		 			0x1193	 //传送1仓所有传感器命令，每个传感器4字节，不区分IO类或者模拟量类，详见《淡仓数据传输协议》
#define Collector_Get_All_Sensor_Data_Cang02		 			0x1194	 //传送2仓所有传感器命令
#define Collector_Get_All_Sensor_Data_Cang03		 			0x1195	 //传送3仓所有传感器命令
#define Collector_Get_All_Sensor_Data_Cang04		 			0x1196	 //传送4仓所有传感器命令
#define Collector_Get_All_Sensor_Data_Cang05		 			0x1197	 //传送5仓所有传感器命令
#define Collector_Get_All_Sensor_Data_Cang06		 			0x1198	 //传送6仓所有传感器命令
#define Collector_Get_All_Sensor_Data_Cang07		 			0x1199	 //传送7仓所有传感器命令
#define Collector_Get_All_Sensor_Data_Cang08		 			0x119A	 //传送8仓所有传感器命令
#define Collector_Get_All_Sensor_Data_WholeCar		 			0x119B	 //传送8仓所有传感器命令


#define Collector_Get_Valve_OldFormat		  0x0013	//14.	读取运算后的阀门状态,兼容之前的阀门协议，每个bit表示一个状态


#define Get_IO_State_New64Byte		 0x20//20210712新增   获取每个仓位的阀门状态

#define SetPara_Yewei_Offset		 0x10//20210122新增   调节液位传感器的高度,间隔1s向控制板发送数据
#define GuanRongMenXian		 50//当液位高度大于某一门限值强制进行罐容修正









								  
////////////////////////////////////////////////////////////////////////////////// 	
/*********此处关于设置参数以及参数设置后赋值处理，后续有更合适的方法时配置代码不应在按键串口里（如在终端里配置）**************/
typedef struct //配置的阀门信息
{
	uint8_t Config_fun_id;//功能配置ID--是否具备液位传感器；压力传感器；有油无油算法；自动施封
  uint8_t Collection_id;//采集器ID
  uint8_t All_number ;//所有的仓数
  uint8_t ManHole_Big_info; //人孔盖信息
  uint8_t ManHole_small_info; //人孔小盖信息
	uint8_t Dump_info; //卸油阀信息
	uint8_t HaiDiFa_info; //海底阀信息
	uint16_t Auto_Seal_Time;
 }Config_INFO_TypeDef;	

 
extern Config_INFO_TypeDef Config_info_all;
extern uint8_t Baseval_ID;
extern uint8_t  Set_CollectPara_Flag; 
 
extern uint16_t FnKey;//=0x0000;//组合键
 
extern uint8_t Auto_sealedOK_ID_bak;
extern float V20_Seal[8],Vt_Seal[8],Ht_Seal[8];
extern float V20_Break[8],Vt_Break[8],Ht_Break[8];
 
//extern  float Vt_Local,V20_Local;//控制器计算的结果或者采集器传来的结果
extern  float Vt_Local[8]; 
extern  float V20_Local[8]; 
//extern   float Vt_Local_Disp;
 
//extern  float Vt_Disp,V20_Disp;
extern float Vt_Disp[8],V20_Disp[8];//[8]
extern float ExpansionRatio[8];
extern float Tempe_For_V20[8];
extern float  Vt_Local_Disp,V20_Local_Disp;
 
extern uint32_t data_Src_To_Disp;
 
 
/******************************************END**********************************************************************/
extern uint8_t flag_Seal_Break;//破封标志,按键板破封蜂鸣器响
extern uint16_t Sleep_Timer_cnt3;
 
extern uint16_t tmrForPrinter;
 
extern uint32_t tmrForKeyPad;
 
extern  uint32_t tmrForRemoteCali;
 
extern uint32_t tmrForTemp_ManualInput; 
 
extern uint8_t dbgArray[8];
extern uint8_t flag_exitReset;
extern uint8_t flag_Uart4_Busy; 
extern uint8_t flag_Sw_VoicePlay;

extern  uint8_t product_ID[20];
extern  uint8_t flag_ShowValveRaw;//是否显示阀门的原始信息00,01等
extern  uint8_t flag_Sw_DispSysInfo;//是否显示系统运行信息
 
 
extern  char PrintBuff[64];
extern  uint16_t PrintCnt;

extern  uint8_t flag_En_BlankSeal;


 
extern  int16_t OffsetYewei[8];//offsetLeiDa004;
//extern  int16_t offsetLeiDa005;
extern  int16_t OffsetTankCapacity[8];//1仓罐容零点，两字节定时发给采集器

//李伟修改  湖南润安项目    新增传感器与报警信息
extern float AlarmOfTempeThreshold_Upper,AlarmOfTempeThreshold_Lower;
extern float AlarmOfPressureThreshold_Upper,AlarmOfPressureThreshold_Lower;
extern float AlarmArrayData[11];
extern float BiasOfTempe;//温度修正
extern float PressureWindowsSpan;//压力窗口时长

extern float PressurePositiveThreshold;//压力正偏门限
extern float PressureNegativeThreshold;//压力负偏门限
extern float BiasOfPressure;//压力修正
extern uint32_t AlgType;//算法类型配置

extern uint32_t usart_timeout,usart_timesec;
extern uint8_t vt_disp_type;

extern char Version_software[30];
extern uint8_t Version_hardware[];
extern uint8_t product_ID[20];
extern uint32_t FunDebugCode;
extern uint32_t input_ArrFunDebugCode[5];
extern uint32_t Version_Soft[8];

void TestUsart4_Receive(void);

void KeySlave485_Init(uint32_t bound);
void KeySlave485_Send_Data(uint8_t *buf,uint8_t len);
void KeySlave485_TX_Set(uint8_t en);

uint8_t Get_keyvalue(void );
void Mode_key_pageID(void );
void Send_alarm10S(void);
//void About_KeyFunction(void);
#endif
