tax.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. #ifndef __TAX_H__
  2. #define __TAX_H__
  3. #include "stm32f10x.h"
  4. #include "../globalDef.h"
  5. extern volatile uint32_t TickCounter;
  6. extern volatile uint32_t TickSecond;
  7. #define tax_send_cmd_83 0x83
  8. #define tax_send_cmd_86 0x86
  9. #define tax_send_cmd_89 0x89
  10. #define NODE_DEVICE_NUM_MAX 16 //网关连接最大采集器数
  11. #define TAX_UART_GET_REV_OK 1 //串口完成数据接收
  12. #define TAX_UART_GET_REV_IDLE 0 //串口未完成数据接收
  13. #define TAX_DEVICE_PORT_NUM_MAX 2 //设备支持的,最大端口数
  14. #define TAX_DEVICE_GUN_NUM_MAX 8 //设备支持的,最大枪数
  15. #define TAX_CMD_ZLJ_BYTE_SIZE 24
  16. #define TAX_CMD_DC_BYTE_SIZE 28
  17. #define TIME_OUT_PER_SECOND (1*100*10) //秒
  18. #define TAX_TIME_TAX_CMD_GAP (2*100*10) //每条指令之间的间隔
  19. #define TAX_TIME_TAX_CMD_OUT (2*100*10) //每条指令的超时时间
  20. #define TAX_TIME_TSMW_CMD_GAP (50*60*1000) //拓盛密文查询间隔
  21. //#define TAX_TIME_TAX_GUN_OUT (10*1000) //
  22. //#define TAX_TIME_TAX_PORT_OUT (10*1000)
  23. #define TAX_TIME_TAX_PORT_GAP (5*100*10) //每条指令之间的间隔
  24. #define TAX_TIME_TAX_JUMP_GAP (2*100*10) //每条指令之间的间隔
  25. #define TAX_TIME_TAX_PORT_ONOFF_OUT (3*60*100)
  26. #define TAX_TIME_TAX_GUN_ONOFF_OUT (3*60*100)
  27. #define TAX_TIME_PORT_SLEEP_OUT (1*60*100)
  28. #define TAX_SEND_CMD_INTERVAL (100) //单位 *10ms
  29. #define TAX_SEND_CMD_RTY_TIME (1) //尝试次数
  30. //定时结构体
  31. //定时原理,源于滴答定时器,TickCounter
  32. typedef struct
  33. {
  34. uint32_t counter; //时间计数器
  35. uint32_t timeOut; //超时时间
  36. }tCounterTimeOut_t;
  37. typedef enum{
  38. TAX_GUN_LP_STATE_IDLE=0, //空闲状态
  39. TAX_GUN_LP_STATE_83, //读取83指令,读取的是采集器有关的信息,上电读取一次就可以
  40. TAX_GUN_LP_STATE_89,//总金额和总油量
  41. TAX_GUN_LP_STATE_86,// 单价 当次金额和当次油量
  42. TAX_GUN_LP_STATE_CH, //切换采集器 枪 或是报税口
  43. TAX_GUN_LP_STATE_56, // 读取心跳
  44. TAX_GUN_LP_STATE_FINISH,// 完成
  45. TAX_GUN_LP_STATE_UNKNOWN
  46. }tTaxGunLpState_t;
  47. typedef enum{
  48. TAX_PORT_POS_STATE_IDLE=0,
  49. TAX_PORT_POS_STATE_SLEEP,
  50. TAX_PORT_POS_STATE_WAKEUP,
  51. TAX_PORT_POS_STATE_RUN
  52. }tTaxPortPosState_t;
  53. #pragma pack(push,1)
  54. typedef union _encode__{
  55. uint16_t data;
  56. struct {
  57. uint16_t bcollid :4; // 采集器索引
  58. uint16_t bportid :2; // 报税口索引
  59. uint16_t reserve :2; // 预留
  60. uint16_t gunstatus : 8; // 有关枪的状态,按位 位为1,则有枪,为0没有枪
  61. }__attribute__((packed))da;
  62. }__attribute__((packed))enMsgDa;
  63. typedef union _encode_num_{
  64. uint8_t data;
  65. struct{
  66. uint8_t tabNum : 4;// 不合表时,对应的个数
  67. uint8_t pEnNum : 4;// 合表后,报税口对应的个数
  68. }__attribute__((packed))num;
  69. }__attribute__((packed))enNumMsg;
  70. #pragma pack(pop)
  71. typedef struct{
  72. //枪离线/在线,状态
  73. tTaxGunLpState_t gLpState;//小循环,轮询状态
  74. uint32_t seq_no; //发送流水号
  75. uint8_t tsmw_flag;
  76. }__attribute__((packed)) tTaxGun_t;
  77. typedef struct{
  78. tTaxGun_t gun[TAX_DEVICE_GUN_NUM_MAX]; //枪 //最大枪
  79. int gunIndex;//当前枪索引
  80. uint8_t alrd_sn;//uart;//报税口对应的com口
  81. uint8_t tax_id;//报税口对应的编号
  82. uint8_t portRead; // 此报税口是否可以读取
  83. uint8_t bhavenewRecord; // 有新的记录
  84. enNumMsg enNum; // 此报税口有编码器的个数
  85. uint8_t enIndex; // 编码器索引,用于读取编码器
  86. uint8_t bEnFinish; // 当前报税口的编码器是否完成 1:完成
  87. uint8_t rcvNum; // 接收的次数
  88. uint8_t enPos[12]; // 存储的是在g_encodeopt.tabledDa的下标索引
  89. enMsgDa enMsg[8];
  90. uint8_t taxType; //报税口的类型
  91. }__attribute__((packed)) tTaxPort_t;
  92. typedef struct{
  93. tTaxPort_t port[TAX_DEVICE_PORT_NUM_MAX];
  94. int portIndex; //当前枪索引
  95. }__attribute__((packed)) tTaxConf_t;
  96. typedef struct
  97. {
  98. tTaxConf_t taxconf[NODE_DEVICE_NUM_MAX];
  99. int nodeIndex; //采集器索引
  100. }__attribute__((packed)) tNodeConf_t;
  101. //extern tTaxConf_t taxConf;
  102. extern tNodeConf_t nodeConf;
  103. typedef struct _rcv_data_temp
  104. {
  105. uint64_t total_price; //总累计金额
  106. uint64_t total_oil_volume; //总体积
  107. uint32_t unit_price; //最后一次加油的单价
  108. uint32_t oil_volume; //最后一次加油的油量
  109. uint32_t price; //最后一次加油的油价
  110. uint32_t prev_seq; //上次流水号
  111. uint8_t time_day;
  112. uint8_t time_hour;
  113. uint8_t time_minute;
  114. uint8_t prev_collect; //上次采集器号
  115. uint8_t prev_tax; //上次报税口号
  116. uint8_t prev_gun; //上次枪号
  117. uint8_t rcv_no; //接收的第几组数据
  118. }rcv_data_temp_t;
  119. extern rcv_data_temp_t rcv_data_temp;
  120. #define TAX_DATA_MAX_SIZE 128
  121. extern void tax_process(void);
  122. extern void encoder_read_data(uint8_t node, uint8_t port, uint8_t gun);
  123. extern void tax_process_encoder(void);
  124. extern int tax_send_cmd(uint8_t cmd, uint8_t node, uint8_t port, uint8_t gun);
  125. extern void tax_send_cmd_0x56_first(void);
  126. extern uint8_t read_collect_index(uint32_t id);
  127. extern uint8_t read_tax_index(uint8_t node, uint8_t uart);
  128. extern uint8_t read_gun_index(uint8_t node, uint8_t port, uint8_t gun);
  129. extern int gateway_collect_init(void);
  130. //extern int tsms_gun_read_finish(void);
  131. extern void tax_0x83_process(void);
  132. extern void tax_send_cmd_0x58(void);
  133. extern void tax_send_cmd_0x5B(void);
  134. extern void tax_manual_0x83_process(void);
  135. extern void init_gun_status(void);
  136. extern void set_gun_status(uint8_t nodecur, uint8_t port, uint8_t gun);
  137. extern uint8_t get_gun_status(void);
  138. extern void encoder_enable_read_data(uint8_t node, uint8_t port, uint8_t gun);
  139. extern void net_to_read_cmd(void);
  140. extern void tax_send_cmd_0x01_0x1053(void);
  141. extern void encoder_printf(void);
  142. #endif