基础版本

This commit is contained in:
bathfire
2026-04-27 16:55:02 +08:00
commit 64b3e488da
269 changed files with 383851 additions and 0 deletions
+259
View File
@@ -0,0 +1,259 @@
/*C*****************************************************************************
* NAME: DOBCNT1010.c
*-------------------------------------------------------------------------------
* RELEASE:
* REVISION: 1.0
*-------------------------------------------------------------------------------
* PURPOSE:
* 双枪计数器应用程序
*******************************************************************************/
#include "config.h"
volatile TXHData_type TXHData;//定义指针数据
const u8 BoxVersion[11]="TXH_V1.4.7";
cup_t STM32CPU;
void TXH_Init(void)
{
u8 i= 0;
Pluse_InPut_Init();
Timer_Init();
FM_Init();
TXHData.ROM_UpData.ROM_UpData_State.Flag.Update_Flag = 0;
TXHData.ROM_UpData.ROM_UpData_State.Flag.DisableUpdate = 0;
TXHData.ROM_UpData.ROM_UpData_State.Flag.RightRun_Flag = 3;
FMItemWrite(CF_ROM_UpData,0);
//GPSConnect_Init();
AT45DB_Init();
DS1307_Init();
Log_Init();
OLED_Init();
Surface_Init();
FindSysconfigFile();
MD_Connect_Init();
Multiplex_Port_Init();
POS_Connect_Init();
Pluse_Putout_Init();
TXHData.ROM_UpData.ROM_UpData_State.Flag.Update_Flag = 0;
TXHData.ROM_UpData.ROM_UpData_State.Flag.DisableUpdate = 0;
TXHData.ROM_UpData.ROM_UpData_State.Flag.RightRun_Flag = 3;
//TXHData.ROM_UpData.FrameTop = 0;
FMItemWrite(CF_ROM_UpData,0);
TXHData.OfflineAuthorizeNumberMax = 10000;//允许离线授权次数
TXHData.OfflineAuthorize = 1;//允许离线授权
// TXHData.PREXDATA_WaitUpNummber = 0;
// TXHData.CTIME.Year = 0x22;//年
// TXHData.CTIME.Month = 0x01;//月
// TXHData.CTIME.Day = 0x11;//日
// //TXHData.CTIME.Week = 0x02;//周
// TXHData.CTIME.Hour = 0x14;//时
// TXHData.CTIME.Min = 0x20;//分
// TXHData.CTIME.Sec = 0x00;//秒
// DS1307_Write();
//PCBEncryption();
PCBEncryption_Check();
}
void TXH_Task(void)
{
u8 Port = 0,DeviceNumber = 0;
//GPSConnectTast();
if(TXHData.CTIMEReadTimer.Flag == 1)
{
TXHData.CTIMEReadTimer.Flag = 0;
DS1307_Read();
if(TXHData.SurfaceNow <= Surface_Wait)
TXHData.DisplayOn = 1;
}
if(TXHData.ErrState.Flag.e_errPCBCheck == 0)//PCB验证通过
{
for(Port = 0;Port < TXHData.MD_Port_Num_Top;Port ++)
{
if(TXHData.MDRestartTimer[Port].Flag == 1)
{
TXHData.MDRestartTimer[Port].Flag = 0;
}
if(TXHData.MDRestartTimer[Port].ON_OFF == 0)
{
if(TXHData.MBCountTimer[Port].Flag == 1 && TXHData.MD_Port_Data[Port].PortData.POSType)
{
TXHData.MBCountTimer[Port].Flag = 0;
{
switch(TXHData.MD_Port_Data[Port].PortData.POSType)
{
case PosBlueSky:
case PosHongYang:
case PosYGao:
case PosLY:
case PosJP:
case PosYWY:
case PosRFID:
case PosPrice1_4:
case PosPLC:
{
if(TXHData.MD_Port_Info[Port].LoopGunNextFlag == 1 || (TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].pGunNow].Handshake == 0x0))
{
TXHData.MD_Port_Info[Port].pGunNow ++;
if(TXHData.MD_Port_Info[Port].pGunReturn)
{
TXHData.MD_Port_Info[Port].pGunNow = TXHData.MD_Port_Info[Port].pGunReturn;
TXHData.MD_Port_Info[Port].pGunReturn = 0;
}
if(TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].pGunNow].Handshake != TXHData.MD_Port_Info[Port].Handshake_Top)
{
TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].pGunNow].Handshake = 0x0;
}
}
if(TXHData.MD_Port_Info[Port].pGunNow >= TXHData.MD_Port_Data[Port].PortData.DeviceNumber)
TXHData.MD_Port_Info[Port].pGunNow = 0;
MD_ConnectTXTask(Port,TXHData.MD_Port_Info[Port].pGunNow,TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].pGunNow].MB_CMD_Next);
}
break;
case PosDart:
{
if(TXHData.MD_Port_Info[Port].LoopGunNextFlag == 1 || (TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].PumpNow].Handshake == 0x0))
{
TXHData.MD_Port_Info[Port].PumpNow ++;
if(TXHData.MD_Port_Info[Port].pGunReturn)
{
TXHData.MD_Port_Info[Port].PumpNow = TXHData.MD_Port_Info[Port].pGunReturn;
TXHData.MD_Port_Info[Port].pGunReturn = 0;
}
if(TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].PumpNow].Handshake != TXHData.MD_Port_Info[Port].Handshake_Top)
{
TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].PumpNow].Handshake = 0x0;
}
}
if(TXHData.MD_Port_Info[Port].PumpNow >= TXHData.MD_Port_Info[Port].FatherDeviceTop)
TXHData.MD_Port_Info[Port].PumpNow = 0;
if(TXHData.MD_Port_Info[Port].pGunCapture)
{
TXHData.MD_Port_Info[Port].pGunReturn = TXHData.MD_Port_Info[Port].PumpNow;
TXHData.MD_Port_Info[Port].PumpNow = TXHData.MD_Port_Info[Port].pGunCapture - 1;
TXHData.MD_Port_Info[Port].pGunCapture = 0;
}
MD_ConnectTXTask(Port,TXHData.MD_Port_Info[Port].PumpNow,TXHData.MD_Port_Info[Port].FatherDevice[TXHData.MD_Port_Info[Port].PumpNow].MB_CMD_Next);
}
break;
case PosSSLan:
{
if(TXHData.MD_Port_Info[Port].LoopGunNextFlag == 1 || (TXHData.MD_Port_Info[Port].FatherDevice[TXHData.MD_Port_Info[Port].PumpNow].Handshake == 0x0))
{
TXHData.MD_Port_Info[Port].PumpNow ++;
if(TXHData.MD_Port_Info[Port].pGunReturn)
{
TXHData.MD_Port_Info[Port].PumpNow = TXHData.MD_Port_Info[Port].pGunReturn;
TXHData.MD_Port_Info[Port].pGunReturn = 0;
}
if(TXHData.MD_Port_Info[Port].FatherDevice[TXHData.MD_Port_Info[Port].PumpNow].Handshake != TXHData.MD_Port_Info[Port].Handshake_Top)
{
TXHData.MD_Port_Info[Port].FatherDevice[TXHData.MD_Port_Info[Port].PumpNow].Handshake = 0x0;
}
}
if(TXHData.MD_Port_Info[Port].PumpNow >= TXHData.MD_Port_Info[Port].FatherDeviceTop)
TXHData.MD_Port_Info[Port].PumpNow = 0;
if(TXHData.MD_Port_Info[Port].pGunCapture)
{
TXHData.MD_Port_Info[Port].pGunReturn = TXHData.MD_Port_Info[Port].PumpNow;
TXHData.MD_Port_Info[Port].PumpNow = TXHData.MD_Port_Info[Port].pGunCapture - 1;
TXHData.MD_Port_Info[Port].pGunCapture = 0;
}
MD_ConnectTXTask(Port,TXHData.MD_Port_Info[Port].PumpNow,TXHData.MD_Port_Info[Port].FatherDevice[TXHData.MD_Port_Info[Port].PumpNow].MB_CMD_Next);
}
break;
case PosBlueSkyPlus:
{
if(TXHData.MD_Port_Info[Port].LoopGunNextFlag == 1 || (TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].PumpNow].Handshake == 0x0))
{
TXHData.MD_Port_Info[Port].PumpNow ++;
if(TXHData.MD_Port_Info[Port].pGunReturn)
{
TXHData.MD_Port_Info[Port].PumpNow = TXHData.MD_Port_Info[Port].pGunReturn;
TXHData.MD_Port_Info[Port].pGunReturn = 0;
}
if(TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].PumpNow].Handshake != TXHData.MD_Port_Info[Port].Handshake_Top)
{
TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].PumpNow].Handshake = 0x0;
}
}
if(TXHData.MD_Port_Info[Port].PumpNow >= TXHData.MD_Port_Info[Port].FatherDeviceTop)
TXHData.MD_Port_Info[Port].PumpNow = 0;
// if(TXHData.MD_Port_Info[Port].pGunCapture)
// {
// TXHData.MD_Port_Info[Port].pGunReturn = TXHData.MD_Port_Info[Port].PumpNow;
// TXHData.MD_Port_Info[Port].PumpNow = TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].pGunCapture].FatherNum;
// TXHData.MD_Port_Info[Port].pGunCapture = 0;
// }
MD_ConnectTXTask(Port,TXHData.MD_Port_Info[Port].PumpNow,TXHData.MD_Port_Info[Port].FatherDevice[TXHData.MD_Port_Info[Port].PumpNow].MB_CMD_Next);
}
break;
}
}
}
}
}
if(TXHData.MD_MultiplexTimer.Flag == 1 && TXHData.MD_Multiplex_Port_Data.PortData[TXHData.MD_Multiplex_Port_Info.DevicerTypeNow].POSType)
{
TXHData.MD_MultiplexTimer.Flag = 0;
if(TXHData.MD_Multiplex_Port_Info.DevicerTypeNow < TXHData.MD_Multiplex_Port_Data.DeviceNumber - 1)
TXHData.MD_Multiplex_Port_Info.DevicerTypeNow ++;
else
TXHData.MD_Multiplex_Port_Info.DevicerTypeNow = 0;
if(TXHData.MD_Multiplex_Port_Info.MultiplexDevicerTimer[TXHData.MD_Multiplex_Port_Info.DevicerTypeNow].Flag)
{
TXHData.MD_Multiplex_Port_Info.MultiplexDevicerTimer[TXHData.MD_Multiplex_Port_Info.DevicerTypeNow].Flag = 0;
switch(TXHData.MD_Multiplex_Port_Data.PortData[TXHData.MD_Multiplex_Port_Info.DevicerTypeNow].POSType)
{
case Multiplex_Print:
{
TXHData.MD_MultiplexTimer.TimerCountMax =(115200/TXHData.MD_Multiplex_Port_Data.PortData[TXHData.MD_Multiplex_Port_Info.DevicerTypeNow].BaudRate) * 66;//根据不同波特率计算等待时间
}
break;
case Multiplex_YWY:
{
TXHData.MD_MultiplexTimer.TimerCountMax = 1000;
}
break;
case Multiplex_Price:
{
TXHData.MD_MultiplexTimer.TimerCountMax = 100;
}
break;
case Multiplex_GPS:
{
TXHData.MD_MultiplexTimer.TimerCountMax = 1000;
}
break;
}
Multiplex_PortTXTask(TXHData.MD_Multiplex_Port_Info.DevicerTypeNow,TXHData.MD_Multiplex_Port_Info.MB_CMD_Next[TXHData.MD_Multiplex_Port_Info.DevicerTypeNow]);
}
}
}
if(TXHData.POS_Info.ConnectType == POS_Connect_Typ_Station)
{
if(TXHData.POS_RS232Timer.Flag == 1)
{
TXHData.POS_RS232Timer.Flag = 0;
POS_ConnectTXTask(TXHData.POS_Info.ConnectType,TXHData.POS_Info.Link_Flag,TXHData.POS_Info.POS_CMD_Next);
}
}
else if(TXHData.HeartbeatTimer.Flag == 1)
{
TXHData.HeartbeatTimer.Flag = 0;
POS_ConnectTXTask(TXHData.POS_Info.ConnectType,TXHData.POS_Info.Link_Flag,TXHData.POS_Info.POS_CMD_Next);
}
if(TXHData.PowerDown.State == 0)//断电就不处理数据了,防止在断电期间操作存储数据
{
MD_ConnectRXTask();
Multiplex_PortRXTask();
if(TXHData.POS_Info.POS_ConnectRXTask_Flag)
{
TXHData.POS_Info.POS_ConnectRXTask_Flag = 0;
POS_ConnectRXTask();
}
}
SurfaceTast();
}
+729
View File
@@ -0,0 +1,729 @@
#ifndef __TXH_H__
#define __TXH_H__
#define QUEUE_SIZE 10
typedef struct spu_info
{
union
{
u8 byte[12];
u32 id[3];
}v;
}cup_t;
typedef union
{
u16 State;
struct
{
u8 e_errFlashParameter : 1; //FLASH断线
u8 e_errFramParameter : 1; //铁电参数错误
u8 e_errPCBCheck : 1; //电路板验证
u8 e_errMessageEnd : 1;
}Flag;
}ErrState_TypeDef;
__packed typedef struct
{
u8 Sec;
u8 Min;
u8 Hour;
u8 Day;
u8 Month;
u8 Year;
}CTIME_type;
typedef enum
{
Message_Priority_1 = 1,
Message_Priority_2,
Message_Priority_3 ,
}Message_PriorityItem;
typedef struct Message {
u8 Priority; // 消息优先级,1-3之间的整数
u8 Content; // 消息内容
}Message_Type;
typedef struct MessageQueue {
u8 Front; // 队头指针
u8 Rear; // 队尾指针
Message_Type Messages[QUEUE_SIZE]; // 消息队列数组
}MessageQueue_Type;
__packed typedef union
{
u8 Buff[16];
__packed struct
{
float OH;
float OV;
float WH;
float TH;
}Data;
}TankData_Type;
__packed typedef union
{
u8 State;
__packed struct
{
u8 TankLeaked : 1;
u8 GasLeakage : 1;
u8 THOutOfLimits : 1;
u8 TLOutOfLimits : 1;
u8 PHHOutOfLimits : 1;
u8 PLLOutOfLimits : 1;
u8 Electrostatic : 1;
u8 beiyong : 1;
}Flag;
}TankState_Type;
__packed typedef struct
{
u32 OilCNT ; //实时油量
u32 MoneyCNT ; //实时金额
}FData_Type;//8byte
__packed typedef struct
{
u64 TotalLit; //油量总累
u64 TotalMoney; //金额总累
}CTOTAL_Type;//16byte
__packed typedef struct
{
u8 GunNumber; //枪号
FData_Type FData; //加油数据
u32 Price; //单价
CTOTAL_Type CTOTAL; //累计
CTIME_type RTIME; //完成时间
u32 OrderNumber; //订单号,离线授权的话为0
u8 CardNum[6]; //卡号 6BYTE BCD
u8 Standby[51]; //预留
}PREXDATA_Type;//
typedef struct
{
u8 PrintBuff[20][32];
}PrintInfo_Type;
typedef union
{
u8 State;
struct
{
u8 : 1; //
u8 : 1; //
u8 : 1; //
u8 TitleFlag : 1; //受控标志1受控0自控
u8 : 1; //
u8 StartFlag : 1; //开机标志1开机0停机
u8 Pause : 1; //暂停
u8 GunUp : 1; //提枪
}Flag;
}fuelState_TypeDef;
typedef union
{
u8 Buff[10];
__packed struct
{
float Longitude; //经度
u8 LongitudeType; //经度类型
float Latitude ; //纬度
u8 LatitudeType ; //纬度类型
}GPS;
}GPS_Type;
typedef enum
{
Display_664,
Display_886,
}Display_Typ;
typedef enum
{
YWY_Bluesky,
YWY_Probe_KY,
YWY_Pressure,
}YWY_Typ;
typedef enum
{
Preset_Sale,
Preset_Volume,
}Preset_Typ;
typedef enum
{
POS_Connect_Typ_Station,
POS_Connect_Typ_Cloud,
POS_Connect_Typ_Cloud_Tast,
//POS_Connect_Typ_WifiStation,
POS_Connect_Typ_End,
}POS_Connect_Typ;
typedef enum
{
POS_Net_Typ_4G_GM5,
POS_Net_Typ_4G_L510,
POS_Net_Typ_WiFi,
POS_Net_Typ_WAN,
POS_Net_Typ_End,
}POS_Net_Typ;
typedef enum
{
PosNormal,
PosBlueSky,
PosLY,
PosJP,
PosDart,
PosYWY,
PosRFID,
PosYGao,
PosHongYang,
PosSSLan,
PosBlueSkyPlus,
PosPLC,
PosPrice1_4,
PosLanFeng,
}PosItem;
typedef enum
{
At45DB041,
At45DB321,
At45DB641,
}At45DBTypeItem;
typedef union
{
u8 State;
struct
{
u8 State : 2;
u8 PresetType : 2; //
u8 PresetMode : 1; //
u8 UpdateRecords: 1; //有信息标志1
u8 Unit : 1; //
u8 GunUp : 1; //提枪标志1提枪0挂枪
}Flag;
}YGGunState_TypeDef;
typedef union
{
u8 State;
struct
{
u8 GunNum : 3;//抢号
u8 State : 1; //状态0挂枪1提枪
u8 Null : 4; //
}Flag;
}DartGunState_TypeDef;
typedef union
{
u8 State;
struct
{
u8 : 1;
u8 ErroFlag : 1; //有错误标志
u8 : 1; //1有未上传记录0没有
u8 TitleFlag : 1; //受控标志1受控0自控
u8 BatteryFlag : 1; //电池电量标志1有电0没电
u8 StartFlag : 1; //开机标志1开机0停机
u8 EventFlag : 1; //有事件标志
u8 GunUp : 1; //提枪标志1提枪0挂枪
}Flag;
}LTGunState_TypeDef;
typedef union
{
u8 State;
struct
{
u8 PriceChange : 1; //单价变更
u8 ShiftChange : 1; //班累变更
u8 TotalChange : 1; //总累变更
u8 StartFlag : 1; //加油中
u8 TitleFlag : 1; //受控状态
u8 GunUp : 1; //提枪状态
u8 : 1;
u8 : 1; //
}Flag;
}HYState_TypeDef;
typedef union
{
u8 State;
struct
{
u8 : 1; //
u8 : 1; //
u8 : 1; //
u8 : 1; //
u8 GunUp : 1; //提枪状态
u8 : 1; //
u8 : 1;
u8 : 1; //
}Flag;
}HYSelfTestState_TypeDef;
typedef union
{
u8 State;
struct
{
u8 GunUP_Flag : 1; //提枪状态
u8 Start_Flag : 1; //启动状态
u8 UpdateDisplay : 1; //需更新数据
u8 UpdateRecords : 1; //需入库 //慎重,非油机设备不要用这个标志
u8 : 1; //
u8 AuthorizeState: 1; //授权状态
u8 LockState : 1; //枪锁定状态
u8 Online : 1; //在线
}Flag;
}GunState_TypeDef;
typedef struct
{
u8 VersionFindFlag;
u8 Version[10];
}GunVersion_Type;
typedef union
{
u8 State;
struct
{
u8 Update_Flag : 1; //升级标志
u8 RightRun_Flag : 2; //待运行标志
u8 BaudRateSync_Flag : 1; //波特率同步标志
u8 HaveBackups : 1; //有备份过
u8 : 1; //
u8 : 1; //
u8 DisableUpdate : 1; //不允许更新
}Flag;
}ROM_UpData_State_Type;
typedef struct
{
u8 Number;//关联设备的设备号
u8 Port;//端口
u8 location;//内存位置
}AssociatedDevices_Type;
typedef struct
{
u8 Handshake; //握手步骤进度
u8 DartSeq; //dart协议通讯序号
u8 LYGunNeedCMD; //下下个需要的命令
u8 LYGunState; //龙野协议枪状态
u8 LYHandshakeCRC; //龙野握手校验
u8 MB_CMD_Next; //下个命令
u8 MB_CMD_Next_End;//指令不自动转换,主要是在停止生成记录和启动的过程。用在改单价之火读取单价和单独预置指令
u8 PresteType; //
u32 PresetValue; //
timer_TypeDef LTDelayTimer; //蓝天协议下加油结束等待生成总累
GunState_TypeDef fuelState_B; //上次枪状态
u8 SlaveNeedReply; //回复wifi从机的状态,转接中心过来的枪状态的回复信息给从机
FData_Type FData; //实时数据
CTOTAL_Type CTOTAL; //累计
u32 Price; //单价
u8 PriceStete; //单价0=不生效;1=一次性生效;2=永久生效
u32 PulseCoefficient;//脉冲当量
u16 ValveValue; //提前关阀量
u16 MinDisplay; //最小显示值
u8 RSSI; //LORA信号强度
u8 Call; //请求授权
u8 WaitPREXDATA_flag;//等待记录形成,完成之前不能再次启动,防止形成记录之前再次授权
u8 CardNumber[10];
u8 RFIDUserName[15];
u8 CardPSWD[3];
u8 CarLicensePlate[15];
u32 Mileage;
u8 BalanceDecimal;
u8 Balance[5];
u8 RFIDState;
AssociatedDevices_Type AssociatedDevices;//没有对应RFID为0(关联设备信息)
GunVersion_Type GunVersion;
u16 FrameNow;
ROM_UpData_State_Type ROM_UpData_State;
u8 FatherNum;//父设备号
u8 SonNum;//子设备在父设备中的位置
u8 ParameterNumber;
YGGunState_TypeDef YGGunState; //龙野协议枪状态
}GunInfo_Type;
typedef struct
{
ROM_UpData_State_Type ROM_UpData_State;
u16 FrameTop;
}ROM_UpData_Type;
typedef enum
{
Control_POSAuto,
Control_POSManual,
Control_BoxAuto,
Control_NoGun,
}GunControlState_Item;
typedef enum
{
NowAuthorizeType_Online,
NowAuthorizeType_Offline_NoCard,
NowAuthorizeType_Offline_Card,
}NowAuthorizeType_Type;
typedef struct
{
u8 GunNummber;
u8 GunAddr;
GunState_TypeDef GunState;
u32 OrderNumber;
u8 RFIDBinding;//绑定的RFID编号
ROM_UpData_State_Type ROM_UpData_State;
u8 GunControlState;//授权模式
u8 NowAuthorizeType;//当前加油的授权方式0;在线;1离线非卡;2离线白名单
u8 Standby[3];
}GunData_Type;
typedef enum
{
MD_RS485,
MD_LORA,
}MDConnectType;
typedef union
{
u8 State;
struct
{
u8 OilCNT : 2;
u8 MoneyCNT : 2;
u8 Price : 2;
}Dec;
}GunDec_TypeDef;
typedef struct
{
u8 Number;
u8 Type[7];
}PaymentType_Type;
typedef struct
{
u32 BaudRate;
u8 StopBits;
u8 Parity_Even;
u8 POSType; //协议类型
u8 DeviceNumber; //设备数量
u32 MBCountTime; //轮询时间ms
u8 Device_Type; //设备类型
u8 MDConnectType;//连接形式 485/LORA
u8 ROM_UpData_Version[10];
ROM_UpData_Type ROM_UpData;
GunDec_TypeDef GunDec;
PaymentType_Type PaymentType;
u8 Standby[10];
}PortData_Type;
typedef struct
{
PortData_Type PortData;
GunData_Type GunData[16];
}MD_Port_Data_Type;
typedef struct
{
u8 SonNumber;//子设备数量
u8 Address;//统一指令
u8 SonStart;//第一个子设备的内存位置
u8 SonNow;//当前要操作的枪
u8 Handshake;//握手序号
u8 MB_CMD_Next;
u8 MB_CMD_Need; //下下个需要的命令
u8 Handshake_Top;//握手序号最大值
u8 Password_Lever;
u32 Password;
u8 LockType;
u8 LockTime[3];//年月日
u16 lockNummber;
u8 LockValue[6];
GunVersion_Type Version;
u16 FrameNow;
u8 Mac[12];
timer_TypeDef LTDelayTimer; //蓝天协议下加油结束等待生成总累,其他协议也可以用来判断是否行程记录的时间
}FatherDevice_Type;
typedef struct
{
GunState_TypeDef State;
u8 SingleOrDouble;//单双面0单1双
u8 PriceNumber;//面板数量
u8 Length;//单价长度2-6
u8 Brightness;//亮度0-8
u32 Price[12];//
u8 Decimal[12];//小数位
}PriceTagData_Type;
typedef struct
{
u8 pGunReturn;//插队之后返回
u8 pGunCapture;//插队的枪号
u8 pGunNow;//当前发送枪号
u8 PumpNow;//当前发送泵号
u8 LoopGunNextFlag;//允许继续发送下一枪
u8 Handshake_Top;//握手序号最大值
u8 FatherDeviceTop;//几个泵
FatherDevice_Type FatherDevice[16];//每个泵的信息
GunInfo_Type GunInfo[16];
PriceTagData_Type PriceTagData;
}MD_Port_Info_Type;
typedef struct
{
u8 DeviceNumber;
PortData_Type PortData[5];
GunState_TypeDef State[5];
u8 Standby[20];
}MD_Multiplex_Port_Data_Type;
typedef struct
{
u8 DevicerReturn;//插队之后返回
u8 DevicerCapture;//插队的枪号
u8 DevicerTypeNow;//当前发送的设备类型
u8 PrintPlaceNumber;//当前打印位置
u8 PrintType;//当前打印类型
u8 LoopDevicerNextFlag;//允许继续发送下一枪
u8 Handshake[5];//握手序号最大值
u8 MB_CMD_Next[5];
u8 Handshake_Top[5];//握手序号最大值
timer_TypeDef MultiplexDevicerTimer[5];
u8 MBCountCutNum[5];
GunState_TypeDef State[5];
PriceTagData_Type PriceTagData;
}MD_Multiplex_Port_Info_Type;
typedef struct
{
char CMD_SOCKA[50];
char IMEI[20];
char APN[40];
char WiFIName[40];
char WiFIPassWord[20];
}WirelessData_Type;
typedef struct
{
WirelessData_Type WirelessData;
union
{
u16 State;
struct
{
u8 ConnectMode : 4;
u8 NetworkSet : 4;//如果是wifi从机模式,参数当WiFiHostSet用
}Flag;
}POSConnectTyye;
u8 Address;//从机自身的地址,目的是分时发送数据
u8 WhiteListVersion;
u8 Standby[19];
}POSData_Type;
typedef struct
{
u8 Link_Flag;
u8 ConnectType;
u8 NetType;
u8 POS_ConnectRXTask_Flag;
u8 POS_CMD_Next;
u8 WiFiSetState;
u8 WiFiRSSI;
u8 WiFiChannel;
u8 AskCongfig_Num;//上电申请配置下发,1-2端口
u8 HostHandshake;
u8 IP[50];
}POS_Info_Type;
typedef union
{
u16 State;
struct
{
u8 POSNetSetErrNummber : 3; //网络模块配置失败次数
u8 POSNetCMDNext : 4; //指令模式下待发送指令
u8 WorkMode : 1; //工作模式Bit6 0:指令 1:透传
}Flag;
}POSNetSetState_TypeDef;
typedef union
{
u16 State;
struct
{
u8 ConnectSetErrNummber : 3; //网络模块配置失败次数
u8 SetModeCMDNext : 4; //指令模式下待发送指令
u8 WorkMode : 1; //工作模式Bit6 0:指令 1:透传
}Flag;
}MDConnectState_TypeDef;
typedef union
{
u8 State;
struct
{
u8 APN : 1; //配置文件包含APN
}Flag;
}Sysconfig_Flag_TypeDef;
typedef struct
{
u16 WhiteListTop;
u8 CardNum[200][6];
}WhiteList_Type;
typedef struct
{
u32 PREXDATA_NowWaitUpNummber;//这次上传时记录数量备份
u16 PREXDATA_NowFrame; //这次上传的帧
u8 PREXDATA_NowFrameLen;//这次上传的帧包含的条数
}PREXDATA_Upload_Type;
typedef union
{
u8 State;
struct
{
u8 Power10V : 1;
u8 Power7V : 1;
}Flag;
}PowerDown_TypeDef;
typedef union
{
u8 State;
struct
{
u8 : 1; //
u8 : 1; //
u8 : 1; //
u8 : 1; //
u8 : 1; //
u8 : 1; //
u8 : 1; //
u8 Online : 1; //在线
}Flag;
}CNGPLCState_TypeDef;
typedef union
{
u8 Buff[80]; //ModBus寄存器组
__packed struct
{
float PistonAValue;//A活塞当前值`
float PistonBValue;//B活塞当前值
float IntakePressure; //进气压力
float LowPressure; //低压压力
float InstrumentAirPressure;//仪表风压力
float MediumPressure; //中压压力
float GasConcentration1;//橇内燃气浓度1
float HydraulicOilTemperature;//液压油温
float HighPressure; //高压压力
float ProtectPressure; //保护压力
float WaterTemperature; //水流温度
float GasConcentration2; //燃气浓度2
float GasConcentration3; //燃气浓度3
u16 MW28Alarm; //MW28报警
u16 MB5Alarm; //MB5报警
u16 MB10Alarm; //MB10报警
}REG;
}CNGPLCData_Type;
typedef struct
{
u16 Encryption[4];
ErrState_TypeDef ErrState;
u8 BoardType;//靠按键状态识别是不是新版本的主板
u8 HardwareVersion;//硬件版本 ////24-31是大板,32-38是小板,小板没有第五端口
u8 WiFiSlaveMode;
Sysconfig_Flag_TypeDef Sysconfig_Flag;
PowerDown_TypeDef PowerDown;
u8 SystemErr;
u16 POS2MD_Buff_Len;
u8 USART6_Drive;
u8 SurfaceNow;
u8 SurfaceNowLine;
u8 SurfaceNowItem;
u8 SurfaceSelected_Flag;
u8 DisplayOn;
u8 KeyNum;
timer_TypeDef KeyFindTimer;
u8 POS_MonitorModel;//监控模式
u8 OfflineAuthorize;
u16 OfflineAuthorizeNumberMax;
PREXDATA_Type PREXDATA[5];
u32 PREXDATA_WaitUpNummber;//待上传数量
PREXDATA_Upload_Type PREXDATA_Upload;
u32 PREXDATA_TTC;
PREXDATA_Type PrintLastRecord[64];//越南打印每把枪最后一笔数据
PREXDATA_Type PrintRecord;//历史记录打印,后台下发数据
PrintInfo_Type PrintInfo;
ROM_UpData_Type ROM_UpData;
u8 ROM_UpData_ProgressBar;
u8 ROM_UpData_Port;
LTGunState_TypeDef LTGunState; //蓝天协议枪状态
//YGGunState_TypeDef YGGunState; //龙野协议枪状态
DartGunState_TypeDef DartGunState;//Dart协议枪状态
HYState_TypeDef HYState; //弘扬协议状态
HYSelfTestState_TypeDef HYSelfTestState;//弘扬协议状态
u8 FRam_Flag;
u8 ATDB45_Flag;
u8 ATDB45Type;
u8 Frame[513];
u8 UDisk_Flag;
CTIME_type CTIME;
CTIME_type PosCTIME;
u32 RNGData;
float Apacity[100];
u8 TankNumTop;
TankState_Type TankState[5][12];
TankData_Type TankData[5][12];
CNGPLCData_Type CNGPLCData;
CNGPLCState_TypeDef CNGPLCState;
WhiteList_Type WhiteList;//白名单列表
//MessageQueue_Type POS_TX_MessageQueue;
u8 POS_TX_CMDNow;
u8 PCCountMail_Flag;
u16 PCMail_RX_Len;
u8 PosYWY_Pressure_Nummber;
timer_TypeDef CTIMEReadTimer;
timer_TypeDef HeartbeatTimer;
timer_TypeDef POS_RS232Timer;
timer_TypeDef ReSendDataTimer;
//PCCount_RX_Buff_TypeDef PCCountMail;
u8 ConnectType;
timer_TypeDef DelayDetectionTimer; //网络延迟检测定时器
u32 DelayDetection;//网络延迟数据,0表示收不到信息
timer_TypeDef POSCutTimer;
timer_TypeDef MDRestartTimer[4]; //
u8 POSLOCK_Impower;
POSNetSetState_TypeDef POSNetSetState;
u8 ICCID[21];
POSData_Type POSData;
POS_Info_Type POS_Info;
timer_TypeDef GPSDataTimer;
GPS_Type GPSData;
u8 Timer_Num_Top;
volatile timer_TypeDef *Timer_Buff[200];
timer_TypeDef AnalogTimer;
MDConnectState_TypeDef MDConnectState[5];
u8 MD_Port_Num_Top;
u8 MD_Gun_Num_Top;
timer_TypeDef MBCountRXIDLETimer[4];
timer_TypeDef MBCountTimer[4];
u8 MBCountCutNum[4][16]; //断线定时器
MD_Multiplex_Port_Data_Type MD_Multiplex_Port_Data;//端口5,多路复用口
MD_Multiplex_Port_Info_Type MD_Multiplex_Port_Info;
timer_TypeDef MD_MultiplexRXIDLETimer;
timer_TypeDef MD_MultiplexTimer;
u16 MD_Multiplex_Rec_Nummber;
u16 MD_Multiplex_Rec_NummberB;//临时判断接受长度
MD_Port_Data_Type MD_Port_Data[4];
MD_Port_Info_Type MD_Port_Info[4];
u16 MD_Rec_Nummber[4];
u16 MD_Rec_NummberB[4];//临时判断接受长度
timer_TypeDef MD_FramContinuityTimer[4];
timer_TypeDef POSReLinkTimer;
timer_TypeDef MD_LORA_SlaveTimer;
u8 MD_LORA_Slave_Flag;
u8 MD_LORA_Set_Flag;
}TXHData_type;
//******************************************************************************
extern volatile TXHData_type TXHData;//定义指针数据
extern const u8 BoxVersion[11];
extern cup_t STM32CPU;
void TXH_Init(void);
void TXH_Task(void);
//------------------------------------------------------------------------------
#endif