/*C***************************************************************************** * NAME: .c *------------------------------------------------------------------------------- * RELEASE: * REVISION: 1.0 *------------------------------------------------------------------------------- * PURMDE: * *******************************************************************************/ /*_____ I N C L U D E S ______________________________________________________*/ #include "config.h" //全局声明 /*_____ M A C R O S __________________________________________________________*/ volatile u8 MD_ConnectRX1Task_Flag = 0; // MD_Connect卡通讯任务标志位,1允许运行 volatile u8 MD_ConnectRX2Task_Flag = 0; // MD_Connect卡通讯任务标志位,1允许运行 volatile u8 MD_ConnectRX3Task_Flag = 0; // MD_Connect卡通讯任务标志位,1允许运行 volatile u8 MD_ConnectRX4Task_Flag = 0; // MD_Connect卡通讯任务标志位,1允许运行 /***********************WIFI*************************/ const char MD_WifiWSSSID[] = "AT+WAP=TXH04,45535142,1\r\n"; const char MD_WifiSOCKET[] = "AT+Socket=0,3,192.168.4.1,50000\r\n"; const char MD_WifiRSSI[] = "AT+CWJAP?\r\n"; const char MD_WifiRST[] = "AT+RES\r\n"; const char MD_ATRec[] = "AT+E=OFF\r\n"; const char MD_WMODE[] = "AT+WMODE=AP\r\n"; /*******************************L510指令*** /*_____ D E F I N I T I O N __________________________________________________*/ volatile u8 MD_Connect_TX_Buff[4][600]; // MD_Connect卡发送缓存,DMA方式 volatile u8 MD_Connect_RX_Buff[4][1000]; // MD_Connect卡接受缓存 volatile u8 MD_Connect_TX_Flag = 1; // MD_Connect卡通讯DMA发送允许标志 /*_____ D E C L A R A T I O N ________________________________________________*/ LORA_Set_Type LORA_Set[4]; unsigned short crc16_ccitt_table[256] = { 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78}; unsigned short do_crc(unsigned char *message, unsigned int len) { unsigned short crc_reg = 0; while (len--) crc_reg = (crc_reg >> 8) ^ crc16_ccitt_table[(crc_reg ^ *message++) & 0xff]; return crc_reg; } /**************************************************** 函数名:MD_Connect_IO_Configuration 功能 :MD_Connect卡通讯部分用到的IO初始化 参数 :无 返回值:无 ****************************************************/ void MD_Connect_IO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; // 定义GOIP配置结构体 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_USART2); GPIO_PinAFConfig(GPIOD, GPIO_PinSource6, GPIO_AF_USART2); GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_USART3); GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_USART3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_UART4); GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_UART4); GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_UART5); GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_UART5); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_10; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12 | GPIO_Pin_11; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_Init(GPIOG, &GPIO_InitStructure); MD_Connect_LORA_IdleMode1; MD_Connect_LORA_IdleMode2; MD_Connect_LORA_IdleMode3; MD_Connect_LORA_IdleMode4; } /**************************************************** 函数名:MD_Connect_NVMD_Connect_Configuration 功能 :MD_Connect卡通讯部分用到的中断向量配置 参数 :无 返回值:无 ****************************************************/ void MD_Connect_NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; // 定义中断配置结构体 // USART2_DMA NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream6_IRQn; // USART2_TX_DMA NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; // USART2 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // NVIC_Init(&NVIC_InitStructure); // // USART3_DMA NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn; // USART2_TX_DMA NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; // USART2 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // NVIC_Init(&NVIC_InitStructure); // // USART4_DMA NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn; // USART2_TX_DMA NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn; // USART2 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // NVIC_Init(&NVIC_InitStructure); // // USART5_DMA NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream7_IRQn; // USART2_TX_DMA NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn; // USART2 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // NVIC_Init(&NVIC_InitStructure); // } /**************************************************** 函数名:MD_Connect_NVMD_Connect_Configuration 功能 :MD_Connect卡通讯部分用到的串口配置 参数 :无 返回值:无 ****************************************************/ void MD_Connect_USART_Configuration(u8 PortNum, u32 Baud, u16 USART_WordLength, u8 Check) { USART_InitTypeDef USART_InitStructure; switch (PortNum) { case 0: { RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); USART_InitStructure.USART_BaudRate = Baud; // Baud;//????? if (Check == Check_EVEN) { USART_InitStructure.USART_WordLength = USART_WordLength_9b; USART_InitStructure.USART_Parity = USART_Parity_Even; } else if (Check == Check_ODD) { USART_InitStructure.USART_WordLength = USART_WordLength_9b; USART_InitStructure.USART_Parity = USART_Parity_Odd; } else if (Check == Check_NONE) { USART_InitStructure.USART_WordLength = USART_WordLength; USART_InitStructure.USART_Parity = USART_Parity_No; } USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USART2, &USART_InitStructure); USART_Cmd(USART2, ENABLE); USART_ITConfig(USART2, USART_IT_IDLE, ENABLE); USART_ClearFlag(USART2, USART_FLAG_IDLE); USART_DMACmd(USART2, USART_DMAReq_Tx | USART_DMAReq_Rx, ENABLE); } break; case 1: { RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE); USART_InitStructure.USART_BaudRate = Baud; // Baud;//????? if (Check == Check_EVEN) { USART_InitStructure.USART_WordLength = USART_WordLength_9b; USART_InitStructure.USART_Parity = USART_Parity_Even; } else if (Check == Check_ODD) { USART_InitStructure.USART_WordLength = USART_WordLength_9b; USART_InitStructure.USART_Parity = USART_Parity_Odd; } else if (Check == Check_NONE) { USART_InitStructure.USART_WordLength = USART_WordLength; USART_InitStructure.USART_Parity = USART_Parity_No; } USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(UART4, &USART_InitStructure); USART_Cmd(UART4, ENABLE); USART_ITConfig(UART4, USART_IT_IDLE, ENABLE); USART_ClearFlag(UART4, USART_FLAG_IDLE); USART_DMACmd(UART4, USART_DMAReq_Tx | USART_DMAReq_Rx, ENABLE); } break; case 2: { RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE); USART_InitStructure.USART_BaudRate = Baud; // Baud;//????? if (Check == Check_EVEN) { USART_InitStructure.USART_WordLength = USART_WordLength_9b; USART_InitStructure.USART_Parity = USART_Parity_Even; } else if (Check == Check_ODD) { USART_InitStructure.USART_WordLength = USART_WordLength_9b; USART_InitStructure.USART_Parity = USART_Parity_Odd; } else if (Check == Check_NONE) { USART_InitStructure.USART_WordLength = USART_WordLength; USART_InitStructure.USART_Parity = USART_Parity_No; } USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(UART5, &USART_InitStructure); USART_Cmd(UART5, ENABLE); USART_ITConfig(UART5, USART_IT_IDLE, ENABLE); USART_ClearFlag(UART5, USART_FLAG_IDLE); USART_DMACmd(UART5, USART_DMAReq_Tx | USART_DMAReq_Rx, ENABLE); } break; case 3: { RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); USART_InitStructure.USART_BaudRate = Baud; // Baud;//????? if (Check == Check_EVEN) { USART_InitStructure.USART_WordLength = USART_WordLength_9b; USART_InitStructure.USART_Parity = USART_Parity_Even; } else if (Check == Check_ODD) { USART_InitStructure.USART_WordLength = USART_WordLength_9b; USART_InitStructure.USART_Parity = USART_Parity_Odd; } else if (Check == Check_NONE) { USART_InitStructure.USART_WordLength = USART_WordLength; USART_InitStructure.USART_Parity = USART_Parity_No; } USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USART3, &USART_InitStructure); USART_Cmd(USART3, ENABLE); USART_ITConfig(USART3, USART_IT_IDLE, ENABLE); USART_ClearFlag(USART3, USART_FLAG_IDLE); USART_DMACmd(USART3, USART_DMAReq_Tx | USART_DMAReq_Rx, ENABLE); } break; } } /************************************************* 函数名 :DMA_Configuration() 功能 :DMA初始化 传入参数:无 返回值 :无 **************************************************/ void MD_Connect_DMA_Configuration(u8 Port, u8 DateSize) { DMA_InitTypeDef DMA_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE); switch (Port) { case 0: { /*******************发送TX1*********************/ DMA_DeInit(DMA1_Stream6); DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; // DMA_InitStructure.DMA_BufferSize = UART_DMA_SEND_LEN; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; if (DateSize == 8) { DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; } else if (DateSize == 16) { DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; } DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART2->DR; DMA_InitStructure.DMA_Channel = DMA_Channel_4; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_TX_Buff[0]; DMA_Init(DMA1_Stream6, &DMA_InitStructure); DMA_ITConfig(DMA1_Stream6, DMA_IT_TC, ENABLE); // DMA_Cmd(DMA1_Stream3, ENABLE); /*******************RX1*********************/ DMA_DeInit(DMA1_Stream5); DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; DMA_InitStructure.DMA_BufferSize = 1000; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART2->DR; DMA_InitStructure.DMA_Channel = DMA_Channel_4; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_RX_Buff[0]; DMA_Init(DMA1_Stream5, &DMA_InitStructure); DMA_Cmd(DMA1_Stream5, ENABLE); } break; case 1: { /*******************发送TX2*********************/ DMA_DeInit(DMA1_Stream4); DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; // DMA_InitStructure.DMA_BufferSize = UART_DMA_SEND_LEN; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; if (DateSize == 8) { DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; } else if (DateSize == 16) { DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; } DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&UART4->DR; DMA_InitStructure.DMA_Channel = DMA_Channel_4; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_TX_Buff[1]; DMA_Init(DMA1_Stream4, &DMA_InitStructure); DMA_ITConfig(DMA1_Stream4, DMA_IT_TC, ENABLE); // DMA_Cmd(DMA1_Stream3, ENABLE); /*******************RX2*********************/ DMA_DeInit(DMA1_Stream2); DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; DMA_InitStructure.DMA_BufferSize = 1000; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&UART4->DR; DMA_InitStructure.DMA_Channel = DMA_Channel_4; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_RX_Buff[1]; DMA_Init(DMA1_Stream2, &DMA_InitStructure); DMA_Cmd(DMA1_Stream2, ENABLE); } break; case 2: { /*******************发送TX3*********************/ DMA_DeInit(DMA1_Stream7); DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; // DMA_InitStructure.DMA_BufferSize = UART_DMA_SEND_LEN; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; if (DateSize == 8) { DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; } else if (DateSize == 16) { DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; } DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&UART5->DR; DMA_InitStructure.DMA_Channel = DMA_Channel_4; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_TX_Buff[2]; DMA_Init(DMA1_Stream7, &DMA_InitStructure); DMA_ITConfig(DMA1_Stream7, DMA_IT_TC, ENABLE); // DMA_Cmd(DMA1_Stream7, ENABLE); /*******************RX3*********************/ DMA_DeInit(DMA1_Stream0); DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; DMA_InitStructure.DMA_BufferSize = 1000; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&UART5->DR; DMA_InitStructure.DMA_Channel = DMA_Channel_4; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_RX_Buff[2]; DMA_Init(DMA1_Stream0, &DMA_InitStructure); DMA_Cmd(DMA1_Stream0, ENABLE); } break; case 3: { /*******************发送TX4*********************/ DMA_DeInit(DMA1_Stream3); DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; // DMA_InitStructure.DMA_BufferSize = UART_DMA_SEND_LEN; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; if (DateSize == 8) { DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; } else if (DateSize == 16) { DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; } DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART3->DR; DMA_InitStructure.DMA_Channel = DMA_Channel_4; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_TX_Buff[3]; DMA_Init(DMA1_Stream3, &DMA_InitStructure); DMA_ITConfig(DMA1_Stream3, DMA_IT_TC, ENABLE); // DMA_Cmd(DMA1_Stream3, ENABLE); /*******************RX4*********************/ DMA_DeInit(DMA1_Stream1); DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; DMA_InitStructure.DMA_BufferSize = 1000; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART3->DR; DMA_InitStructure.DMA_Channel = DMA_Channel_4; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)MD_Connect_RX_Buff[3]; DMA_Init(DMA1_Stream1, &DMA_InitStructure); DMA_Cmd(DMA1_Stream1, ENABLE); } break; } } // F***************************************************************************** //* NAME: MD_Connect_DMATX_IRQHandler //* PURMDE: MD_Connect卡键盘通讯DMA发送完成中断 //* PARAMS: 无 //* return: 无 //****************************************************************************** void MD_Connect_DMATX1_IRQHandler(void) { u16 i = 0; DMA_ClearFlag(DMA1_Stream6, DMA_IT_TCIF6); MD_Connect_TX1_DMAStop(); // 关闭DMA传输 while (!USART_GetFlagStatus(USART2, USART_FLAG_TC)) NULL; MD_Connect_RS485_Rx1EN; DMA_ClearFlag(DMA1_Stream5, DMA_IT_TCIF5); MD_Connect_RX1_DMAStart(); // 打开DMA传输(Gas就收)长度在选择发送队列时设置 MD_Connect_TX_Flag = 1; } // F***************************************************************************** //* NAME: MD_Connect_DMARX_IRQHandler //* PURMDE: DMA传输完成中断,Gas ModBus //* PARAMS: 无 //* return: 无 //****************************************************************************** volatile u8 DTTDYS = 0; void MD_Connect_DMARX1_IRQHandler(void) { u8 i = 0; if (USART_GetITStatus(USART2, USART_IT_IDLE) == SET) //????????? { i = USART2->SR; i = USART2->DR; USART_ClearFlag(USART2, USART_IT_IDLE); TXHData.MBCountRXIDLETimer[0].ON_OFF = 1; TXHData.MD_Rec_NummberB[0] = 1000 - DMA1_Stream5->NDTR; // MD_Connect_RX1_DMAStop(); //关闭DMA接收 // DMA_ClearFlag(DMA1_Stream5, DMA_IT_TCIF5); // MD_ConnectRX1Task_Flag = 1; //使能Gas接收任务 // MD_Connect_RX1_DMALenSet(1000);//重置接受长度 // MD_Connect_RX1_DMAStart(); //打开DMA接收 } } // F***************************************************************************** //* NAME: MD_Connect_DMATX_IRQHandler //* PURMDE: MD_Connect卡键盘通讯DMA发送完成中断 //* PARAMS: 无 //* return: 无 //****************************************************************************** void MD_Connect_DMATX2_IRQHandler(void) { u16 i = 0; DMA_ClearFlag(DMA1_Stream4, DMA_IT_TCIF4); MD_Connect_TX2_DMAStop(); // 关闭DMA传输 while (!USART_GetFlagStatus(UART4, USART_FLAG_TC)) NULL; MD_Connect_RS485_Rx2EN; DMA_ClearFlag(DMA1_Stream2, DMA_IT_TCIF2); MD_Connect_RX2_DMAStart(); // 打开DMA传输(Gas就收)长度在选择发送队列时设置 MD_Connect_TX_Flag = 1; } // F***************************************************************************** //* NAME: MD_Connect_DMARX_IRQHandler //* PURMDE: DMA传输完成中断,Gas ModBus //* PARAMS: 无 //* return: 无 //****************************************************************************** void MD_Connect_DMARX2_IRQHandler(void) { u8 i = 0; if (USART_GetITStatus(UART4, USART_IT_IDLE) == SET) //????????? { i = UART4->SR; i = UART4->DR; TXHData.MBCountRXIDLETimer[1].ON_OFF = 1; TXHData.MD_Rec_NummberB[1] = 1000 - DMA1_Stream2->NDTR; // MD_Connect_RX2_DMAStop(); //关闭DMA接收 // DMA_ClearFlag(DMA1_Stream2, DMA_IT_TCIF2); // MD_ConnectRX2Task_Flag = 1; //使能Gas接收任务 // MD_Connect_RX2_DMALenSet(1000);//重置接受长度 // MD_Connect_RX2_DMAStart(); //打开DMA接收 } } // F***************************************************************************** //* NAME: MD_Connect_DMATX_IRQHandler //* PURMDE: MD_Connect卡键盘通讯DMA发送完成中断 //* PARAMS: 无 //* return: 无 //****************************************************************************** void MD_Connect_DMATX3_IRQHandler(void) { u16 i = 0; DMA_ClearFlag(DMA1_Stream7, DMA_IT_TCIF7); MD_Connect_TX3_DMAStop(); // 关闭DMA传输 while (!USART_GetFlagStatus(UART5, USART_FLAG_TC)) NULL; MD_Connect_RS485_Rx3EN; DMA_ClearFlag(DMA1_Stream0, DMA_IT_TCIF0); MD_Connect_RX3_DMAStart(); // 打开DMA传输(Gas就收)长度在选择发送队列时设置 MD_Connect_TX_Flag = 1; } // F***************************************************************************** //* NAME: MD_Connect_DMARX_IRQHandler //* PURMDE: DMA传输完成中断,Gas ModBus //* PARAMS: 无 //* return: 无 //****************************************************************************** void MD_Connect_DMARX3_IRQHandler(void) { u8 i = 0; if (USART_GetITStatus(UART5, USART_IT_IDLE) == SET) //????????? { i = UART5->SR; i = UART5->DR; TXHData.MBCountRXIDLETimer[2].ON_OFF = 1; TXHData.MD_Rec_NummberB[2] = 1000 - DMA1_Stream0->NDTR; // MD_Connect_RX3_DMAStop(); //关闭DMA接收 // DMA_ClearFlag(DMA1_Stream0, DMA_IT_TCIF0); // MD_ConnectRX3Task_Flag = 1; //使能Gas接收任务 // MD_Connect_RX3_DMALenSet(1000);//重置接受长度 // MD_Connect_RX3_DMAStart(); //打开DMA接收 } } // F***************************************************************************** //* NAME: MD_Connect_DMATX_IRQHandler //* PURMDE: MD_Connect卡键盘通讯DMA发送完成中断 //* PARAMS: 无 //* return: 无 //****************************************************************************** void MD_Connect_DMATX4_IRQHandler(void) { u16 i = 0; DMA_ClearFlag(DMA1_Stream3, DMA_IT_TCIF3); MD_Connect_TX4_DMAStop(); // 关闭DMA传输 while (!USART_GetFlagStatus(USART3, USART_FLAG_TC)) NULL; MD_Connect_RS485_Rx4EN; DMA_ClearFlag(DMA1_Stream1, DMA_IT_TCIF1); MD_Connect_RX4_DMAStart(); // 打开DMA传输(Gas就收)长度在选择发送队列时设置 MD_Connect_TX_Flag = 1; } // F***************************************************************************** //* NAME: MD_Connect_DMARX_IRQHandler //* PURMDE: DMA传输完成中断,Gas ModBus //* PARAMS: 无 //* return: 无 //****************************************************************************** void MD_Connect_DMARX4_IRQHandler(void) { u8 i = 0; if (USART_GetITStatus(USART3, USART_IT_IDLE) == SET) //????????? { i = USART3->SR; i = USART3->DR; TXHData.MBCountRXIDLETimer[3].ON_OFF = 1; TXHData.MD_Rec_NummberB[3] = 1000 - DMA1_Stream1->NDTR; // MD_Connect_RX4_DMAStop(); //关闭DMA接收 // DMA_ClearFlag(DMA1_Stream1, DMA_IT_TCIF1); // MD_ConnectRX4Task_Flag = 1; //使能Gas接收任务 // MD_Connect_RX4_DMALenSet(1000);//重置接受长度 // MD_Connect_RX4_DMAStart(); //打开DMA接收 } } // F***************************************************************************** //* NAME: LTMD_TXDataCheck //* PURMDE: LTMD通信校验函数 //* PARAMS: pData需要检验的数组地址,len数据长度 //* return: 无 //****************************************************************************** u8 MD_Connect_TXDataCheck(volatile u8 *pData, u16 len) { u8 result; if (len == 0) len = 16; result = *pData++; do { result ^= *pData++; } while (--len); return result & 0x7f; } u8 InteiHEXCheck(volatile u8 *pData, u16 len) { u8 i; u8 checksum = 0; for (i = 0; i < len; i++) { checksum += *pData++; } return (0 - checksum); } // F***************************************************************************** //* NAME: MD_Connect_u64ToBCD //* PURMDE: 用于u64类型转成BCD码类型 //* PARAMS: pData要转换的数据,Len长度 //* return: BCD类型 //****************************************************************************** u64 MD_Connect_u64ToBCD(u64 Dat) { u8 i = 0; u64 T64 = 0, Temp = 0; u8 *pData; pData = (u8 *)&T64; for (i = 0; i < 8; i++) { Temp = Dat % 100; *(pData + i) = ((Temp / 10) << 4) + ((Temp % 10) & 0x0F); Dat /= 100; } return T64; } /**************TCP/IP校验和,IC卡通讯***************/ u16 CheckSum(u8 *buf, u16 nword) { unsigned long long sum; for (sum = 0; nword > 0; nword--) sum += *buf++; sum = (sum >> 16) + (sum & 0xffff); sum += (sum >> 16); return ~sum; } u8 CheckSum8(u8 *buf, u8 len) // BCC校验函数 { u8 i; u8 checksum = 0; for (i = 0; i < len; i++) { checksum += *buf++; } return checksum; } u16 TrueCharBuffSize(char *Buff) { u16 i = 0; while (*(Buff++)) i++; return i; } /*************字符串转浮点数******************/ float StrToFloat(u8 *str, u8 len) { u8 i = 0; int Temp = 0; float TempF = 0; u8 *Pi = (u8 *)&Temp; u8 *Pf = (u8 *)&TempF; for (i = 0; i < len; i++) { if (*(str + i) >= 0x30 && *(str + i) < 0x40) { Temp = Temp << 4; Temp |= *(str + i) - 0x30; } else if (*(str + i) > 0x40 && *(str + i) < 0x47) { Temp = Temp << 4; Temp |= *(str + i) - 0x37; } else return -1; } for (i = 0; i < len / 2; i++) *(Pf + i) = *(Pi + i); return TempF; } /*************字符串转整数******************/ int StrToInt(u8 *str, u8 len) { u8 i = 0; int Temp = 0; for (i = 0; i < len; i++) { if (*(str + i) >= 0x30 && *(str + i) < 0x40) { Temp = Temp << 4; Temp |= *(str + i) - 0x30; } else if (*(str + i) > 0x40 && *(str + i) < 0x47) { Temp = Temp << 4; Temp |= *(str + i) - 0x37; } else return -1; } return Temp; } // F***************************************************************************** //* NAME: MD_Connect_BCDTou64 //* PURMDE: 用于BCD类型转成u64码类型 //* PARAMS: pData要转换的数据,Len长度 //* return: u64类型 //****************************************************************************** u64 MD_Connect_BCDTou64(u64 Dat) { u8 i = 0; u64 T64 = 0; u8 Temp; for (i = 0; i < 8; i++) { Temp = Dat >> (8 * i); T64 += ((Temp >> 4) * 10 + (Temp & 0x0f)) * pow(100, i); } return T64; } u8 BCC_CheckSum(u8 *buf, u8 len) // BCC校验函数 { u8 i; u8 checksum = 0; for (i = 0; i < len; i++) { checksum ^= *buf++; } return checksum; } // 加密函数 void Bluesky_Encrypt(unsigned char *data, unsigned int len, unsigned int key) { unsigned char bytes[4]; int i = 0, j = 0; // 提取随机数的每个字节 for (i = 0; i < 4; i++) { bytes[i] = (key >> (i * 8)) & 0xFF; } // 遍历数组中的每个字节 for (i = 0; i < len; i++) { // 判断索引位置是否满足条件 int order = (i / 2) == 0 ? 1 : -1; // 根据条件选择正序或倒序加密 for (j = 0; j < 4; j++) { data[i] ^= bytes[(order == 1) ? j : (3 - j)]; } } } // 解密函数 void Bluesky_Decrypt(unsigned char *data, unsigned int len, unsigned int key) { // 解密过程与加密过程相同 Bluesky_Encrypt(data, len, key); } void MD_Connect_Init(void) { u8 i = 0, j = 0, Port = 0; MD_Connect_IO_Configuration(); TXHData.MD_Port_Num_Top = 4; for (Port = 0; Port < TXHData.MD_Port_Num_Top; Port++) { MD_Connect_DMA_Configuration(Port, 8); MD_Port_Init(Port); } MD_Connect_NVIC_Configuration(); TXHData.MD_LORA_SlaveTimer.Init = 0; // 清除初始化标志 TXHData.MD_LORA_SlaveTimer.Flag = 0; // 清除到时标志 TXHData.MD_LORA_SlaveTimer.ON_OFF = 0; // 打开 TXHData.MD_LORA_SlaveTimer.Cycle = 1; // 设置为循环模式,发送时启动 TXHData.MD_LORA_SlaveTimer.TimerCountMax = 1000; // 周期1000(1s) } void MD_Port_LORASet(u8 Port, u8 Mode) { u32 MCU_ID = *(u32 *)(0x1fff7a18); if (Mode == LORA_Master) { switch (Port) { case 0: MD_Connect_LORA_SetMode1; break; case 1: MD_Connect_LORA_SetMode2; break; case 2: MD_Connect_LORA_SetMode3; break; case 3: MD_Connect_LORA_SetMode4; break; } } else { switch (Port) { case 0: MD_Connect_LORA_IdleMode1; break; case 1: MD_Connect_LORA_IdleMode2; break; case 2: MD_Connect_LORA_IdleMode3; break; case 3: MD_Connect_LORA_IdleMode4; break; } } delay_ms(100); // 设置成LORA配置参数 MD_Connect_USART_Configuration(Port, 9600, USART_WordLength_8b, Check_NONE); // 暂停油机通讯 TXHData.MBCountTimer[Port].Flag = 0; TXHData.MBCountTimer[Port].TimerCount = 0; // 计算超时 TXHData.MD_LORA_SlaveTimer.TimerCountMax = TXHData.MD_Port_Data[Port].PortData.MBCountTime; TXHData.MD_LORA_SlaveTimer.ON_OFF = 1; LORA_Set[Port].Communication = 0x77; switch (TXHData.MD_Port_Data[Port].PortData.POSType) { case PosBlueSky: LORA_Set[Port].Communication = 0x77; break; case PosLY: LORA_Set[Port].Communication = 0x97; break; case PosJP: LORA_Set[Port].Communication = 0x97; break; case PosDart: LORA_Set[Port].Communication = 0x6F; break; case PosYWY: LORA_Set[Port].Communication = 0x67; break; case PosYGao: LORA_Set[Port].Communication = 0x77; break; case PosSSLan: LORA_Set[Port].Communication = 0x97; break; case PosBlueSkyPlus: LORA_Set[Port].Communication = 0xD7; break; } MD_Connect_TX_Buff[Port][0] = 0xC0; MD_Connect_TX_Buff[Port][1] = 0x00; MD_Connect_TX_Buff[Port][2] = 0x08; MD_Connect_TX_Buff[Port][3] = (MCU_ID >> 24) & 0xFF; MD_Connect_TX_Buff[Port][4] = (MCU_ID & 0xF0) + Port * 3; MD_Connect_TX_Buff[Port][5] = LORA_Set[Port].Communication; MD_Connect_TX_Buff[Port][6] = 0x20; MD_Connect_TX_Buff[Port][7] = (MCU_ID & 0x0f) + Port * 7; MD_Connect_TX_Buff[Port][8] = 0x80; MD_Connect_TX_Buff[Port][9] = 'L'; MD_Connect_TX_Buff[Port][10] = 'T'; switch (Port) { case 0: { MD_Connect_RS485_Tx1EN; MD_Connect_TX1_DMALenSet(11); MD_Connect_TX1_DMAStart(); } break; case 1: { MD_Connect_RS485_Tx2EN; MD_Connect_TX2_DMALenSet(11); MD_Connect_TX2_DMAStart(); } break; case 2: { MD_Connect_RS485_Tx3EN; MD_Connect_TX3_DMALenSet(11); MD_Connect_TX3_DMAStart(); } break; case 3: { MD_Connect_RS485_Tx4EN; MD_Connect_TX4_DMALenSet(11); MD_Connect_TX4_DMAStart(); } break; } if (TXHData.UDisk_Flag) Log_Task(&MD_Connect_TX_Buff[Port][0], 11, Port, Info_Issue); delay_ms(500); TXHData.MD_LORA_Slave_Flag = 1; switch (Port) { case 0: MD_Connect_LORA_IdleMode1; break; case 1: MD_Connect_LORA_IdleMode2; break; case 2: MD_Connect_LORA_IdleMode3; break; case 3: MD_Connect_LORA_IdleMode4; break; } BEEP_OFF; } void MD_Port_Init(u8 Port) { u8 i = 0, j = 0, DeviceNum = 0; u8 block_count = 0, start = 0, length = 1; // TXHData.MD_Port_Data[0].PortData.POSType = PosSSLan; if (TXHData.MD_Port_Data[Port].PortData.MDConnectType == MD_LORA) { MD_Port_LORASet(Port, LORA_Master); } TXHData.MDConnectState[Port].Flag.WorkMode = 1; TXHData.MBCountRXIDLETimer[Port].Init = 0; // 清除初始化标志 TXHData.MBCountRXIDLETimer[Port].Flag = 0; // 清除到时标志 TXHData.MBCountRXIDLETimer[Port].ON_OFF = 0; // 打开 TXHData.MBCountRXIDLETimer[Port].Cycle = 0; // 设置为循环模式,发送时启动 TXHData.MBCountRXIDLETimer[Port].TimerCountMax = 5; // 周期5(0.005) TXHData.MBCountTimer[Port].Init = 0; // 清除初始化标志 TXHData.MBCountTimer[Port].Flag = 0; // 清除到时标志 TXHData.MBCountTimer[Port].ON_OFF = 1; // 打开 TXHData.MBCountTimer[Port].Cycle = 1; // 设置为循环模式,发送时启动 TXHData.MBCountTimer[Port].TimerCountMax = TXHData.MD_Port_Data[Port].PortData.MBCountTime * 10; // 周期 MD_Connect_DMA_Configuration(Port, 8); MD_Connect_USART_Configuration(Port, TXHData.MD_Port_Data[Port].PortData.BaudRate, USART_WordLength_8b, TXHData.MD_Port_Data[Port].PortData.Parity_Even); switch (TXHData.MD_Port_Data[Port].PortData.POSType) { case PosBlueSky: TXHData.MD_Port_Info[Port].Handshake_Top = 0x05; break; case PosLY: TXHData.MD_Port_Info[Port].Handshake_Top = 0x11; break; case PosJP: TXHData.MD_Port_Info[Port].Handshake_Top = 0x07; break; case PosDart: TXHData.MD_Port_Info[Port].Handshake_Top = 0x04; break; case PosYWY: TXHData.MBCountTimer[Port].TimerCountMax = TXHData.MD_Port_Data[Port].PortData.MBCountTime * 100; TXHData.MBCountRXIDLETimer[Port].TimerCountMax = 50; // 周期5(0.005) break; case PosRFID: TXHData.MD_Port_Info[Port].Handshake_Top = 0x03; break; case PosYGao: TXHData.MD_Port_Info[Port].Handshake_Top = 0x04; break; case PosHongYang: TXHData.MD_Port_Info[Port].Handshake_Top = 0x06; MD_Connect_DMA_Configuration(Port, 16); MD_Connect_USART_Configuration(Port, TXHData.MD_Port_Data[Port].PortData.BaudRate, USART_WordLength_9b, 0); break; case PosLanFeng: TXHData.MD_Port_Info[Port].Handshake_Top = 0x03; break; case PosSSLan: TXHData.MD_Port_Info[Port].Handshake_Top = 0x011; break; case PosBlueSkyPlus: TXHData.MD_Port_Info[Port].Handshake_Top = 0x03; break; case PosPLC: TXHData.MD_Port_Info[Port].Handshake_Top = 0x00; MD_Connect_USART_Configuration(Port, 9600, USART_WordLength_8b, TXHData.MD_Port_Data[Port].PortData.Parity_Even); break; case PosPrice1_4: TXHData.MD_Port_Info[Port].Handshake_Top = 0x02; TXHData.MBCountTimer[Port].TimerCountMax = TXHData.MD_Port_Data[Port].PortData.MBCountTime * 100; break; } if (TXHData.POS_MonitorModel == 1) // 监管模式 { TXHData.MD_Port_Info[Port].Handshake_Top = 0; TXHData.MBCountRXIDLETimer[Port].TimerCountMax = 1; // 周期5(0.005) MD_Connect_RS485_Rx1EN; MD_Connect_RS485_Rx2EN; MD_Connect_RS485_Rx3EN; MD_Connect_RS485_Rx4EN; } /*****************************************计算多枪相关设备***************************************************/ TXHData.MD_Port_Info[Port].GunInfo[0].FatherNum = 0; // 记录每个设备的付设备号 TXHData.MD_Port_Info[Port].GunInfo[0].SonNum = 0; // 记录每个设备在付设备中的位置 for (DeviceNum = 1; DeviceNum < TXHData.MD_Port_Data[Port].PortData.DeviceNumber; DeviceNum++) { if (TXHData.MD_Port_Data[Port].GunData[DeviceNum].GunAddr == TXHData.MD_Port_Data[Port].GunData[DeviceNum - 1].GunAddr) // 和上一个枪地址相同,属于同一个泵 { length++; // 子设备数增加 } else { TXHData.MD_Port_Info[Port].FatherDevice[block_count].SonStart = start; TXHData.MD_Port_Info[Port].FatherDevice[block_count].Address = TXHData.MD_Port_Data[Port].GunData[DeviceNum - 1].GunAddr; TXHData.MD_Port_Info[Port].FatherDevice[block_count].SonNumber = length; block_count++; // 泵号增加 start = DeviceNum; length = 1; } TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].FatherNum = block_count; // 记录每个设备的付设备号 TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].SonNum = length - 1; // 记录每个设备在付设备中的位置 } TXHData.MD_Port_Info[Port].FatherDeviceTop = block_count + 1; TXHData.MD_Port_Info[Port].FatherDevice[block_count].SonStart = start; TXHData.MD_Port_Info[Port].FatherDevice[block_count].Address = TXHData.MD_Port_Data[Port].GunData[DeviceNum - 1].GunAddr; TXHData.MD_Port_Info[Port].FatherDevice[block_count].SonNumber = length; TXHData.MD_Port_Info[Port].FatherDevice[block_count].LTDelayTimer.Init = 0; // 清除初始化标志 TXHData.MD_Port_Info[Port].FatherDevice[block_count].LTDelayTimer.Flag = 0; // 清除到时标志 TXHData.MD_Port_Info[Port].FatherDevice[block_count].LTDelayTimer.ON_OFF = 0; // 打开 TXHData.MD_Port_Info[Port].FatherDevice[block_count].LTDelayTimer.Cycle = 0; // 设置为循环模式,发送时启动 TXHData.MD_Port_Info[Port].FatherDevice[block_count].LTDelayTimer.TimerCountMax = 1000; for (DeviceNum = 0; DeviceNum < TXHData.MD_Port_Data[Port].PortData.DeviceNumber; DeviceNum++) { TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].LTDelayTimer.Init = 0; // 清除初始化标志 TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].LTDelayTimer.Flag = 0; // 清除到时标志 TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].LTDelayTimer.ON_OFF = 0; // 打开 TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].LTDelayTimer.Cycle = 0; // 设置为循环模式,发送时启动 TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].LTDelayTimer.TimerCountMax = TXHData.MD_Port_Data[Port].PortData.MBCountTime * 10 * TXHData.MD_Port_Data[Port].PortData.DeviceNumber * 2; // 周期1000(1S) TXHData.MD_Port_Data[Port].GunData[DeviceNum].GunState.Flag.Online = 0; TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].Handshake = 0; TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].GunVersion.VersionFindFlag = 0; switch (TXHData.MD_Port_Data[Port].PortData.POSType) { case PosBlueSky: TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = C_MDConnectASKControlPower; break; case PosLY: TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = LY_MDConnectCmdPoll; break; case PosJP: TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = LY_MDConnectCmdPoll; break; case PosYWY: TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = YWY_MDConnectCmdReadData; break; case PosRFID: { TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = RFID_MDConnectCmdReadVersion; for (i = 0; i < TXHData.MD_Port_Num_Top; i++) { for (j = 0; j < TXHData.MD_Port_Data[i].PortData.DeviceNumber; j++) { if (TXHData.MD_Port_Data[i].GunData[j].GunNummber == TXHData.MD_Port_Data[Port].GunData[DeviceNum].RFIDBinding) { TXHData.MD_Port_Info[i].GunInfo[j].AssociatedDevices.Number = TXHData.MD_Port_Data[Port].GunData[DeviceNum].GunNummber; TXHData.MD_Port_Info[i].GunInfo[j].AssociatedDevices.Port = Port; TXHData.MD_Port_Info[i].GunInfo[j].AssociatedDevices.location = DeviceNum; TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].AssociatedDevices.Number = TXHData.MD_Port_Data[i].GunData[j].GunNummber; TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].AssociatedDevices.Port = i; TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].AssociatedDevices.location = j; } } } } break; case PosYGao: TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = YG_MDConnectControlMode; TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].Price = TXHData.PrintLastRecord[Port * 16 + DeviceNum].Price; break; case PosHongYang: TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = HY_MDConnectASKControlPower; break; case PosLanFeng: TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = LF_MDConnectASKControlPower; break; case PosBlueSkyPlus: TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = LTP_GunCMDReadStateAndData; break; case PosPLC: TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = PLC_MDConnectCmdReadData; break; case PosPrice1_4: TXHData.MD_Port_Info[Port].GunInfo[DeviceNum].MB_CMD_Next = Price_MDConnectCmdReadParameter; break; } } /***************************************************多枪协议**************************************************************/ if (TXHData.MD_Port_Data[Port].PortData.POSType == PosDart || TXHData.MD_Port_Data[Port].PortData.POSType == PosSSLan || TXHData.MD_Port_Data[Port].PortData.POSType == PosBlueSkyPlus) { for (DeviceNum = 0; DeviceNum < TXHData.MD_Port_Info[Port].FatherDeviceTop; DeviceNum++) { switch (TXHData.MD_Port_Data[Port].PortData.POSType) { case PosDart: TXHData.MD_Port_Info[Port].FatherDevice[DeviceNum].MB_CMD_Next = DART_MDConnectCmdPoll; break; case PosSSLan: TXHData.MD_Port_Info[Port].FatherDevice[DeviceNum].MB_CMD_Next = LY_MDConnectCmdPoll; break; case PosBlueSkyPlus: TXHData.MD_Port_Info[Port].FatherDevice[DeviceNum].MB_CMD_Next = LTP_DriverCMDReadVerAndMac; break; } } } TXHData.MD_Gun_Num_Top = 0; } // F***************************************************************************** //* NAME: KeyBoardTask //* PURMDE: KeyBoard键盘通讯处理任务 //* PARAMS: 无 //* return: 无 //****************************************************************************** volatile u16 HY_SendBuff[25]; volatile u8 zhtningzhuangtai = 0; void MD_ConnectTXTask(u8 Port, u8 GunNum, u8 MD_TX_CMD) { volatile u16 i = 0, j = 0, k = 0, l = 0; volatile u8 PosTypeTemp = 0, GunAddr = 0, FatherNum = 0; volatile u64 TempBCD = 0, Tempu64 = 0; volatile u16 MD_ConnectTX_Len = 0; // 长度 u8 Encrypt_Flag1 = 0; u8 Encrypt_Flag2 = 0; volatile u16 MD_Port_Num = 0, DeviceNumber = 0; u8 MD_ConnectRX_Check = 0; // 校验变量 u8 Data_201[7] = "i20100"; u8 Data_20E[7] = "i20E00"; u16 CRCTemp = 0; MD_Connect_TX_Flag = 0; { PosTypeTemp = TXHData.MD_Port_Data[Port].PortData.POSType; if (TXHData.MBCountCutNum[Port][GunNum] > 5) { TXHData.MBCountCutNum[Port][GunNum] = 6; if (TXHData.MD_Port_Data[Port].PortData.POSType == PosDart || TXHData.MD_Port_Data[Port].PortData.POSType == PosSSLan || TXHData.MD_Port_Data[Port].PortData.POSType == PosBlueSkyPlus) // 多枪 { TXHData.MD_Port_Info[Port].FatherDevice[GunNum].Handshake = 0; for (i = 0; i < TXHData.MD_Port_Info[Port].FatherDevice[GunNum].SonNumber; i++) { TXHData.MD_Port_Data[Port].GunData[TXHData.MD_Port_Info[Port].FatherDevice[GunNum].SonStart + i].GunState.Flag.Online = 0; TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[GunNum].SonStart + i].ROM_UpData_State.Flag.BaudRateSync_Flag = 0; TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[GunNum].SonStart + i].ROM_UpData_State.Flag.Update_Flag = 0; TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[GunNum].SonStart + i].Handshake = 0; TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[GunNum].SonStart + i].MB_CMD_Next = LTP_GunCMDReadStateAndData; } switch (TXHData.MD_Port_Data[Port].PortData.POSType) { case PosDart: TXHData.MD_Port_Info[Port].FatherDevice[GunNum].MB_CMD_Next = DART_MDConnectCmdPoll; break; case PosSSLan: TXHData.MD_Port_Info[Port].FatherDevice[GunNum].MB_CMD_Next = LY_MDConnectCmdPoll; break; case PosBlueSkyPlus: TXHData.MD_Port_Info[Port].FatherDevice[GunNum].MB_CMD_Next = LTP_DriverCMDReadVerAndMac; break; } } else // 单枪 { TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0; TXHData.MD_Port_Data[Port].GunData[GunNum].GunState.Flag.Online = 0; // MD_Connect_USART_Configuration(Port,TXHData.MD_Port_Data[Port].PortData.BaudRate,TXHData.MD_Port_Data[Port].PortData.Parity_Even); TXHData.MD_Port_Info[Port].GunInfo[GunNum].ROM_UpData_State.Flag.BaudRateSync_Flag = 0; TXHData.MD_Port_Info[Port].GunInfo[GunNum].ROM_UpData_State.Flag.Update_Flag = 0; switch (TXHData.MD_Port_Data[Port].PortData.POSType) { case PosBlueSky: TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = C_MDConnectASKControlPower; break; case PosLY: TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = LY_MDConnectCmdPoll; break; case PosJP: TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = LY_MDConnectCmdPoll; break; case PosYWY: TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = YWY_MDConnectCmdReadData; break; case PosRFID: TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = RFID_MDConnectCmdReadVersion; break; case PosYGao: TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = YG_MDConnectControlMode; break; case PosHongYang: TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = HY_MDConnectASKControlPower; break; case PosLanFeng: TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = LF_MDConnectASKControlPower; break; case PosPLC: TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = PLC_MDConnectCmdReadData; TXHData.CNGPLCState.Flag.Online = 0; break; case PosPrice1_4: TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = Price_MDConnectCmdReadParameter; TXHData.MD_Port_Info[Port].PriceTagData.State.State = 0; break; } } } } if (TXHData.MDConnectState[Port].Flag.WorkMode == 1) // 数据模式 { if (TXHData.POS_MonitorModel != 1 && PosTypeTemp) // 非监管模式有线模式 { switch (PosTypeTemp) { case PosBlueSky: { GunAddr = MD_Connect_u64ToBCD(TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr); if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top) TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1; TXHData.MBCountCutNum[Port][GunNum]++; if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].ROM_UpData_State.Flag.BaudRateSync_Flag == 1) { MD_Connect_USART_Configuration(Port, BaudRateSync, USART_WordLength_9b, TXHData.MD_Port_Data[Port].PortData.Parity_Even); } else { MD_Connect_USART_Configuration(Port, TXHData.MD_Port_Data[Port].PortData.BaudRate, USART_WordLength_9b, TXHData.MD_Port_Data[Port].PortData.Parity_Even); } switch (MD_TX_CMD) { case C_MDConnectCmdReadState: // 读状态 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = C_MDConnectCmdReadState; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; } break; case C_MDConnectCmdReadFuelState: // 读数据 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = C_MDConnectCmdReadFuelState; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; } break; case C_MDConnectCmdWritePrsetSale: // 预置金额 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664) { if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x900000) Tempu64 = 0x900000; else Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue; MD_Connect_TX_Buff[Port][2] = 0xA5; for (i = 0; i < 3; i++) { MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][6] = C_MDConnectCmdWritePrsetSale; MD_Connect_TX_Buff[Port][7] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 6); // 校验 MD_ConnectTX_Len = 8; } else { if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x90000000) Tempu64 = 0x90000000; else Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue; MD_Connect_TX_Buff[Port][2] = 0xA6; for (i = 0; i < 4; i++) { MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][7] = C_MDConnectCmdWritePrsetSale; MD_Connect_TX_Buff[Port][8] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 7); // 校验 MD_ConnectTX_Len = 9; } } break; case C_MDConnectCmdWritePrsetVolume: // 预置油量 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664) { if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue == 0x900000) Tempu64 = 0x900000; else Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue; MD_Connect_TX_Buff[Port][2] = 0xA5; for (i = 0; i < 3; i++) { MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][6] = C_MDConnectCmdWritePrsetVolume; MD_Connect_TX_Buff[Port][7] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 6); // 校验 MD_ConnectTX_Len = 8; } else { if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue == 0x90000000) Tempu64 = 0x90000000; else Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue; MD_Connect_TX_Buff[Port][2] = 0xA6; for (i = 0; i < 4; i++) { MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][7] = C_MDConnectCmdWritePrsetVolume; MD_Connect_TX_Buff[Port][8] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 7); // 校验 MD_ConnectTX_Len = 9; } } break; case C_MDConnectCmdStart: // 启动 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = C_MDConnectCmdStart; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; } break; case C_MDConnectCmdStop: // 停机 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = C_MDConnectCmdStop; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; } break; case C_MDConnectPauseFueling: // 暂停 { zhtningzhuangtai = 1; MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = C_MDConnectPauseFueling; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; } break; case C_MDConnectResumeFueling: // 继续 { zhtningzhuangtai = 2; MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = C_MDConnectResumeFueling; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; } break; case C_MDConnectCmdReadPrice: // 读单价 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = C_MDConnectCmdReadPrice; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; } break; case C_MDConnectCmdWritePrice: // xie单价 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664) { MD_Connect_TX_Buff[Port][2] = 0xA4; for (i = 0; i < 2; i++) { MD_Connect_TX_Buff[Port][3 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price) >> ((1 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][5] = C_MDConnectCmdWritePrice; MD_Connect_TX_Buff[Port][6] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 5); // 校验 MD_ConnectTX_Len = 7; } else { MD_Connect_TX_Buff[Port][2] = 0xA5; for (i = 0; i < 3; i++) { MD_Connect_TX_Buff[Port][3 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price) >> ((2 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][6] = C_MDConnectCmdWritePrice; MD_Connect_TX_Buff[Port][7] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 6); // 校验 MD_ConnectTX_Len = 8; } } break; case C_MDConnectCmdWritePulseCoefficient: // xie { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头MD_Connect_u64ToBCD(TXHData.PulseCoefficient[GunNum - 1] MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA6; for (i = 0; i < 4; i++) { MD_Connect_TX_Buff[Port][3 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].PulseCoefficient) >> ((3 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][7] = C_MDConnectCmdWritePulseCoefficient; MD_Connect_TX_Buff[Port][8] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 7); // 校验 MD_ConnectTX_Len = 9; } break; case C_MDConnectCmdReadTotal: // 读总累 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = C_MDConnectCmdReadTotal; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; } break; case C_MDConnectCmdWriteTotal: // xie总累 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664) { MD_Connect_TX_Buff[Port][2] = 0xAc; for (i = 0; i < 5; i++) { MD_Connect_TX_Buff[Port][3 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].CTOTAL.TotalLit) >> ((4 - i) * 8)) & 0xff; } for (i = 0; i < 5; i++) { MD_Connect_TX_Buff[Port][8 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].CTOTAL.TotalMoney) >> ((4 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][13] = C_MDConnectCmdWriteTotal; MD_Connect_TX_Buff[Port][14] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 13); // 校验 MD_ConnectTX_Len = 15; } else { MD_Connect_TX_Buff[Port][2] = 0xAe; for (i = 0; i < 6; i++) { MD_Connect_TX_Buff[Port][3 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].CTOTAL.TotalLit) >> ((5 - i) * 8)) & 0xff; } for (i = 0; i < 6; i++) { MD_Connect_TX_Buff[Port][9 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].CTOTAL.TotalMoney) >> ((5 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][15] = C_MDConnectCmdWriteTotal; MD_Connect_TX_Buff[Port][16] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 15); // 校验 MD_ConnectTX_Len = 17; } } break; case C_MDConnectASKControlPower: // 要控制权 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = C_MDConnectASKControlPower; // MD_Connect_TX_Buff[Port][3] = C_MDConnectReturnControlPower; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; } break; case C_MDConnectReturnControlPower: // 还控制权 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = C_MDConnectReturnControlPower; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; } break; case C_MDConnectCmdReadVersion: // 读版本号 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = C_MDConnectCmdReadVersion; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0x01; TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = C_MDConnectCmdReadState; } break; case C_MDConnectCmdSetBaudRate: // 同步波特率 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA5; MD_Connect_TX_Buff[Port][3] = (115200 >> 16) & 0xff; MD_Connect_TX_Buff[Port][4] = (115200 >> 8) & 0xff; MD_Connect_TX_Buff[Port][5] = 115200 & 0xff; MD_Connect_TX_Buff[Port][6] = C_MDConnectCmdSetBaudRate; MD_Connect_TX_Buff[Port][7] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 6); // 校验 MD_ConnectTX_Len = 8; } break; case C_MDConnectCmdSendFrame: // 传送帧 { MD_Connect_TX_Buff[Port][0] = 0xF5; MD_Connect_TX_Buff[Port][1] = GunAddr; MD_Connect_TX_Buff[Port][2] = 0xff; for (i = 0; i < 10; i++) MD_Connect_TX_Buff[Port][3 + i] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData_Version[i]; MD_Connect_TX_Buff[Port][13] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData.FrameTop >> 8; MD_Connect_TX_Buff[Port][14] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData.FrameTop; MD_Connect_TX_Buff[Port][15] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].FrameNow >> 8; MD_Connect_TX_Buff[Port][16] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].FrameNow; AT45DBItemRead(CA_DeviceFrame, TXHData.MD_Port_Info[Port].GunInfo[GunNum].FrameNow + Port * 1024); for (i = 0; i < 512; i++) MD_Connect_TX_Buff[Port][17 + i] = TXHData.Frame[i]; MD_Connect_TX_Buff[Port][529] = C_MDConnectCmdSendFrame; MD_Connect_TX_Buff[Port][530] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 529); MD_ConnectTX_Len = 531; } break; } } break; case PosBlueSkyPlus: { FatherNum = GunNum; // 这离GunNum表示泵号 GunAddr = MD_Connect_u64ToBCD(TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].Address); // 泵地址 if (TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top) TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1; TXHData.MBCountCutNum[Port][FatherNum]++; // if(TXHData.MD_Port_Info[Port].GunInfo[GunNum].ROM_UpData_State.Flag.BaudRateSync_Flag == 1) // { // MD_Connect_USART_Configuration(Port,BaudRateSync,USART_WordLength_9b,TXHData.MD_Port_Data[Port].PortData.Parity_Even); // } // else // { // MD_Connect_USART_Configuration(Port,TXHData.MD_Port_Data[Port].PortData.BaudRate,USART_WordLength_9b,TXHData.MD_Port_Data[Port].PortData.Parity_Even); // } TXHData.RNGData = RNG_GetRandomNumber(); MD_Connect_TX_Buff[Port][0] = 0xFB; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][4] = TXHData.CTIME.Year; MD_Connect_TX_Buff[Port][5] = TXHData.CTIME.Month; MD_Connect_TX_Buff[Port][6] = TXHData.CTIME.Day; MD_Connect_TX_Buff[Port][7] = TXHData.CTIME.Hour; MD_Connect_TX_Buff[Port][8] = TXHData.CTIME.Min; MD_Connect_TX_Buff[Port][9] = TXHData.CTIME.Sec; for (i = 0; i < 4; i++) MD_Connect_TX_Buff[Port][10 + i] = TXHData.RNGData >> (8 * (3 - i)); MD_Connect_TX_Buff[Port][14] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonNumber; MD_ConnectTX_Len = 15; switch (MD_TX_CMD) { case LTP_DriverCMDReadPassword: // { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = LTP_DriverCMD; MD_ConnectTX_Len++; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = MD_TX_CMD; MD_ConnectTX_Len++; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].Password_Lever; MD_ConnectTX_Len++; } break; case LTP_DriverCMDWritePassword: // { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = LTP_DriverCMD; MD_ConnectTX_Len++; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = MD_TX_CMD; MD_ConnectTX_Len++; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].Password_Lever; MD_ConnectTX_Len++; for (i = 0; i < 4; i++) MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].Password >> (8 * (3 - i)); MD_ConnectTX_Len += 4; } break; case LTP_DriverCMDReadVerAndMac: // { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = LTP_DriverCMD; MD_ConnectTX_Len++; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = MD_TX_CMD; MD_ConnectTX_Len++; } break; case LTP_DriverCMDLock: // { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = LTP_DriverCMD; MD_ConnectTX_Len++; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = MD_TX_CMD; MD_ConnectTX_Len++; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].LockType; MD_ConnectTX_Len++; switch (TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].LockType) { case 0: { } break; case 1: { for (i = 0; i < 3; i++) MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].LockTime[i]; MD_ConnectTX_Len += 3; } break; case 2: { for (i = 0; i < 6; i++) MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].LockValue[i]; MD_ConnectTX_Len += 6; } break; } } break; case LTP_DriverCMDUnlock: // { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = LTP_DriverCMD; MD_ConnectTX_Len++; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = MD_TX_CMD; MD_ConnectTX_Len++; } break; case LTP_DriverCMDSendFrame: // { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = LTP_DriverCMD; MD_ConnectTX_Len++; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = MD_TX_CMD; MD_ConnectTX_Len++; for (i = 0; i < 10; i++) MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData_Version[i]; MD_ConnectTX_Len += 10; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData.FrameTop >> 8; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData.FrameTop; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].FrameNow >> 8; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].FrameNow; AT45DBItemRead(CA_DeviceFrame, TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].FrameNow + Port * 1024); for (i = 0; i < 512; i++) MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.Frame[i]; MD_ConnectTX_Len += 512; TXHData.MBCountTimer[Port].TimerCountMax = 120; // 周期调整ms } break; default: { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = LTP_GunCMD; for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonNumber; DeviceNumber++) { GunNum = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonStart + DeviceNumber; // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = DeviceNumber + 1; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next; switch (TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next) { case LTP_GunCMDReadState: // case LTP_GunCMDReadStateAndData: // case LTP_GunCMDReadTotal: // case LTP_GunCMDStop: // case LTP_GunCMDReadEvent: // case LTP_GunCMDReadError: // { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 0; } break; case LTP_GunCMDSuspend: // { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 0; } break; case LTP_GunCMDContinue: // { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 0; } break; case LTP_GunCMDWritePrset: // { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 5; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType; for (i = 0; i < 4; i++) MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >> (8 * (3 - i)); MD_ConnectTX_Len += 4; } break; case LTP_GunCMDAuthorize: // { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 9; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType; for (i = 0; i < 4; i++) MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >> (8 * (3 - i)); MD_ConnectTX_Len += 4; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 0; for (i = 0; i < 3; i++) MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price >> (8 * (2 - i)); MD_ConnectTX_Len += 3; } break; case LTP_GunCMDReadParameter: // { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].ParameterNumber; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 0; } break; case LTP_GunCMDWriteParameter: // { switch (TXHData.MD_Port_Info[Port].GunInfo[GunNum].ParameterNumber) { case 0x01: // 单价 { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 4; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].ParameterNumber; for (i = 0; i < 3; i++) MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price >> (8 * (2 - i)); MD_ConnectTX_Len += 3; } break; case 0x02: // 脉当 { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 4; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].ParameterNumber; for (i = 0; i < 3; i++) MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PulseCoefficient >> (8 * (2 - i)); MD_ConnectTX_Len += 3; } break; case 0x03: // 提前关阀量 { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 3; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].ParameterNumber; for (i = 0; i < 2; i++) MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].ValveValue >> (8 * (1 - i)); MD_ConnectTX_Len += 2; } break; case 0x04: // 最小显示值 { MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = 3; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len++] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].ParameterNumber; for (i = 0; i < 2; i++) MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].MinDisplay >> (8 * (1 - i)); MD_ConnectTX_Len += 2; } break; } } break; } } if (DeviceNumber == 0) { if (CoreDebug->DHCSR & 1) { // check C_DEBUGEN == 1 -> Debugger Connected __breakpoint(0); // halt program execution here } } } break; } MD_Connect_TX_Buff[Port][2] = (MD_ConnectTX_Len >> 8) & 0xff; MD_Connect_TX_Buff[Port][3] = MD_ConnectTX_Len & 0xff; Bluesky_Encrypt(&MD_Connect_TX_Buff[Port][14], MD_ConnectTX_Len - 14, TXHData.RNGData); CRCTemp = CRC_Check(&MD_Connect_TX_Buff[Port][0], MD_ConnectTX_Len); // 校验 MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = (CRCTemp >> 8) & 0xff; MD_ConnectTX_Len++; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = CRCTemp & 0xff; MD_ConnectTX_Len++; } break; case PosLY: { GunAddr = TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr; if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top) TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1; TXHData.MBCountCutNum[Port][GunNum]++; if (GunAddr > 0) GunAddr -= 1; switch (MD_TX_CMD) { case LY_MDConnectCmdHandshake: // 握手 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x30; MD_Connect_TX_Buff[Port][4] = 0x30; MD_Connect_TX_Buff[Port][5] = (TXHData.MD_Port_Info[Port].GunInfo[GunNum].LYHandshakeCRC >> 4) & 0x0f; if (MD_Connect_TX_Buff[Port][5] < 0x0A) MD_Connect_TX_Buff[Port][5] += 0x30; else MD_Connect_TX_Buff[Port][5] = MD_Connect_TX_Buff[Port][5] - 0x0A + 0x41; MD_Connect_TX_Buff[Port][6] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].LYHandshakeCRC & 0x0f; if (MD_Connect_TX_Buff[Port][6] < 0x0A) MD_Connect_TX_Buff[Port][6] += 0x30; else MD_Connect_TX_Buff[Port][6] = MD_Connect_TX_Buff[Port][6] - 0x0A + 0x41; MD_Connect_TX_Buff[Port][7] = 0x03; MD_Connect_TX_Buff[Port][8] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 7); // 校验 MD_ConnectTX_Len = 9; // if(TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == 0x06) // { // TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0x07; // } TXHData.MD_Port_Info[Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0x08; } break; case LY_MDConnectCmdPoll: // 轮询 { MD_Connect_TX_Buff[Port][0] = 0x04; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x51; MD_Connect_TX_Buff[Port][3] = 0x05; MD_ConnectTX_Len = 4; } break; case LY_MDConnectCmdReadState: // 读状态 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x31; MD_Connect_TX_Buff[Port][4] = 0x35; MD_Connect_TX_Buff[Port][5] = 0x03; MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验 MD_ConnectTX_Len = 7; } break; case LY_MDConnectCmdReadTotal: // 读状态 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x32; MD_Connect_TX_Buff[Port][4] = 0x30; MD_Connect_TX_Buff[Port][5] = 0x03; MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验 MD_ConnectTX_Len = 7; } break; case LY_MDConnectCmdChoiceGun: // 选择枪 { MD_Connect_TX_Buff[Port][0] = 0x04; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x05; MD_ConnectTX_Len = 4; // if(TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == 0x02) // { // TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0x03; // } } break; case LY_MDConnectCmdDisauthorize: // 取消授权 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x31; MD_Connect_TX_Buff[Port][4] = 0x32; MD_Connect_TX_Buff[Port][5] = 0x03; MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验 MD_ConnectTX_Len = 7; TXHData.MD_Port_Data[Port].GunData[GunNum].GunState.Flag.AuthorizeState = 0; } break; case LY_MDConnectCmdAuthorize: // 授权 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x31; MD_Connect_TX_Buff[Port][4] = 0x30; if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x900000) MD_Connect_TX_Buff[Port][5] = 0x30; else { MD_Connect_TX_Buff[Port][5] = 0x32; } if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Volume) MD_Connect_TX_Buff[Port][6] = 0x31; else if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Sale) MD_Connect_TX_Buff[Port][6] = 0x32; for (i = 0; i < 6; i++) MD_Connect_TX_Buff[Port][7 + i] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >> (5 - i) * 4) & 0x0f); MD_Connect_TX_Buff[Port][13] = 0x32; for (i = 0; i < 4; i++) MD_Connect_TX_Buff[Port][14 + i] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price >> (3 - i) * 4) & 0x0f); MD_Connect_TX_Buff[Port][18] = 0x03; MD_Connect_TX_Buff[Port][19] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 18); // 校验 MD_ConnectTX_Len = 20; } break; case LY_MDConnectCmdWritePrice: // 写单价 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x32; MD_Connect_TX_Buff[Port][4] = 0x31; MD_Connect_TX_Buff[Port][5] = 0x32; MD_Connect_TX_Buff[Port][6] = 0x32; for (i = 0; i < 4; i++) MD_Connect_TX_Buff[Port][7 + i] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price >> (3 - i) * 4) & 0x0f); for (i = 0; i < 25; i++) MD_Connect_TX_Buff[Port][11 + i] = 0x30; MD_Connect_TX_Buff[Port][36] = 0x03; MD_Connect_TX_Buff[Port][37] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 36); // 校验 MD_ConnectTX_Len = 38; } break; case LY_MDConnectCmdACK0: // 1030 { MD_Connect_TX_Buff[Port][0] = 0x10; MD_Connect_TX_Buff[Port][1] = 0x30; MD_ConnectTX_Len = 2; } break; case LY_MDConnectCmdACK1: // 1031 { MD_Connect_TX_Buff[Port][0] = 0x10; MD_Connect_TX_Buff[Port][1] = 0x31; MD_ConnectTX_Len = 2; } break; } } break; case PosJP: { GunAddr = TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr; if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top) TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1; TXHData.MBCountCutNum[Port][GunNum]++; if (GunAddr > 0) GunAddr -= 1; switch (MD_TX_CMD) { case LY_MDConnectCmdPoll: // 轮询 { MD_Connect_TX_Buff[Port][0] = 0x04; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x51; MD_Connect_TX_Buff[Port][3] = 0x05; MD_ConnectTX_Len = 4; } break; case LY_MDConnectCmdReadState: // 读状态 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x31; MD_Connect_TX_Buff[Port][4] = 0x35; MD_Connect_TX_Buff[Port][5] = 0x03; MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验 MD_ConnectTX_Len = 7; } break; case LY_MDConnectCmdReadTotal: // 读 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x32; MD_Connect_TX_Buff[Port][4] = 0x30; MD_Connect_TX_Buff[Port][5] = 0x03; MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验 MD_ConnectTX_Len = 7; } break; case LY_MDConnectCmdChoiceGun: // 选择枪 { MD_Connect_TX_Buff[Port][0] = 0x04; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x05; MD_ConnectTX_Len = 4; } break; case LY_MDConnectCmdDisauthorize: // 取消授权 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x31; MD_Connect_TX_Buff[Port][4] = 0x32; MD_Connect_TX_Buff[Port][5] = 0x03; MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验 TXHData.MD_Port_Data[Port].GunData[GunNum].GunState.Flag.AuthorizeState = 0; MD_ConnectTX_Len = 7; } break; case LY_MDConnectCmdAuthorize: // 授权 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x31; MD_Connect_TX_Buff[Port][4] = 0x41; if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue == 0x90000000) MD_Connect_TX_Buff[Port][5] = 0x30; else { MD_Connect_TX_Buff[Port][5] = 0x32; } if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Volume) MD_Connect_TX_Buff[Port][6] = 0x31; else if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Sale) MD_Connect_TX_Buff[Port][6] = 0x32; for (i = 0; i < 8; i++) MD_Connect_TX_Buff[Port][7 + i] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >> (7 - i) * 4) & 0x0f); MD_Connect_TX_Buff[Port][15] = 0x32; for (i = 0; i < 6; i++) MD_Connect_TX_Buff[Port][16 + i] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price >> (5 - i) * 4) & 0x0f); MD_Connect_TX_Buff[Port][22] = 0x30; for (i = 0; i < 6; i++) MD_Connect_TX_Buff[Port][23 + i] = 0x30; MD_Connect_TX_Buff[Port][29] = 0x30; for (i = 0; i < 6; i++) MD_Connect_TX_Buff[Port][30 + i] = 0x30; MD_Connect_TX_Buff[Port][36] = 0x30; for (i = 0; i < 6; i++) MD_Connect_TX_Buff[Port][37 + i] = 0x30; MD_Connect_TX_Buff[Port][43] = 0x30; for (i = 0; i < 6; i++) MD_Connect_TX_Buff[Port][44 + i] = 0x30; MD_Connect_TX_Buff[Port][50] = 0x30; for (i = 0; i < 6; i++) MD_Connect_TX_Buff[Port][51 + i] = 0x30; MD_Connect_TX_Buff[Port][57] = 0x03; MD_Connect_TX_Buff[Port][58] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 57); // 校验 MD_ConnectTX_Len = 59; } break; case LY_MDConnectCmdWritePrice: // 写单价 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x32; MD_Connect_TX_Buff[Port][4] = 0x31; MD_Connect_TX_Buff[Port][5] = 0x33; MD_Connect_TX_Buff[Port][6] = 0x32; for (i = 0; i < 6; i++) MD_Connect_TX_Buff[Port][7 + i] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price >> (5 - i) * 4) & 0x0f); for (i = 0; i < 25; i++) MD_Connect_TX_Buff[Port][13 + i] = 0x30; MD_Connect_TX_Buff[Port][38] = 0x03; MD_Connect_TX_Buff[Port][39] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 38); // 校验 MD_ConnectTX_Len = 40; } break; case LY_MDConnectCmdACK0: // 1030 { MD_Connect_TX_Buff[Port][0] = 0x10; MD_Connect_TX_Buff[Port][1] = 0x30; MD_ConnectTX_Len = 2; } break; case LY_MDConnectCmdACK1: // 1031 { MD_Connect_TX_Buff[Port][0] = 0x10; MD_Connect_TX_Buff[Port][1] = 0x31; MD_ConnectTX_Len = 2; } break; } } break; case PosDart: { GunAddr = TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr; if (TXHData.MD_Port_Info[Port].GunInfo[i].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top) TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1; TXHData.MBCountCutNum[Port][GunNum]++; for (i = 0; i < TXHData.MD_Port_Data[Port].PortData.DeviceNumber; i++) if (GunAddr == TXHData.MD_Port_Data[Port].GunData[i].GunAddr) break; // SunNum = GunNum - TXHData.MD_Port_Data[Port].GunData[i].GunNummber + 1;//确认同一地址的第几条枪 if (GunAddr > 0) GunAddr -= 1; if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq < 0x0f) // 序列号自动增加 TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq++; else TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq = 0; switch (MD_TX_CMD) { case DART_MDConnectCmdPoll: // 轮询 { MD_Connect_TX_Buff[Port][0] = GunAddr + 0x50; // 帧头 MD_Connect_TX_Buff[Port][1] = 0x20; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xFA; MD_ConnectTX_Len = 3; } break; case DART_MDConnectCmdReadState: // 读状态 { MD_Connect_TX_Buff[Port][0] = GunAddr + 0x50; // 帧头 MD_Connect_TX_Buff[Port][1] = 0x30 | TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x01; MD_Connect_TX_Buff[Port][3] = 0x01; MD_Connect_TX_Buff[Port][4] = 0x00; Tempu64 = DartCRC16(&MD_Connect_TX_Buff[Port][0], 5); MD_Connect_TX_Buff[Port][5] = Tempu64 & 0xff; MD_Connect_TX_Buff[Port][6] = (Tempu64 >> 8) & 0xff; MD_Connect_TX_Buff[Port][7] = 0x03; MD_Connect_TX_Buff[Port][8] = 0xFA; // 校验 MD_ConnectTX_Len = 9; TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = DART_MDConnectCmdPoll; } break; case DART_MDConnectCmdReadVTotal: // 读50 33 65 01 14 DE C8 03 FA { MD_Connect_TX_Buff[Port][0] = GunAddr + 0x50; // 帧头 MD_Connect_TX_Buff[Port][1] = 0x30 | TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x65; MD_Connect_TX_Buff[Port][3] = 0x01; MD_Connect_TX_Buff[Port][4] = 0x00; Tempu64 = DartCRC16(&MD_Connect_TX_Buff[Port][0], 5); MD_Connect_TX_Buff[Port][5] = Tempu64 & 0xff; MD_Connect_TX_Buff[Port][6] = (Tempu64 >> 8) & 0xff; MD_Connect_TX_Buff[Port][7] = 0x03; MD_Connect_TX_Buff[Port][8] = 0xFA; // 校验 MD_ConnectTX_Len = 9; } break; case DART_MDConnectCmdReadPTotal: // 读 { MD_Connect_TX_Buff[Port][0] = GunAddr + 0x50; // 帧头 MD_Connect_TX_Buff[Port][1] = 0x30 | TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x65; MD_Connect_TX_Buff[Port][3] = 0x01; MD_Connect_TX_Buff[Port][4] = 0x10; Tempu64 = DartCRC16(&MD_Connect_TX_Buff[Port][0], 5); MD_Connect_TX_Buff[Port][5] = Tempu64 & 0xff; MD_Connect_TX_Buff[Port][6] = (Tempu64 >> 8) & 0xff; MD_Connect_TX_Buff[Port][7] = 0x03; MD_Connect_TX_Buff[Port][8] = 0xFA; // 校验 MD_ConnectTX_Len = 9; } break; case DART_MDConnectCmdReStart: // 重新握手50 3F 01 01 05 03 04 00 09 00 01 48 A3 03 FA { MD_Connect_TX_Buff[Port][0] = GunAddr + 0x50; // 帧头 MD_Connect_TX_Buff[Port][1] = 0x30 | TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x01; MD_Connect_TX_Buff[Port][3] = 0x01; MD_Connect_TX_Buff[Port][4] = 0x05; Tempu64 = DartCRC16(&MD_Connect_TX_Buff[Port][0], 5); MD_Connect_TX_Buff[Port][5] = Tempu64 & 0xff; MD_Connect_TX_Buff[Port][6] = (Tempu64 >> 8) & 0xff; MD_Connect_TX_Buff[Port][7] = 0x03; MD_Connect_TX_Buff[Port][8] = 0xFA; // 校验 MD_ConnectTX_Len = 9; } break; case DART_MDConnectCmdACK: // 1030 { if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].LYGunNeedCMD != DART_MDConnectCmdPoll) { TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = TXHData.MD_Port_Info[Port].GunInfo[GunNum].LYGunNeedCMD; TXHData.MD_Port_Info[Port].GunInfo[GunNum].LYGunNeedCMD = DART_MDConnectCmdPoll; } MD_Connect_TX_Buff[Port][0] = GunAddr + 0x50; // 帧头 MD_Connect_TX_Buff[Port][1] = 0xC0 | TXHData.MD_Port_Info[Port].GunInfo[GunNum].DartSeq; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xFA; MD_ConnectTX_Len = 3; } break; } } break; case PosYWY: { TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1; TXHData.MBCountCutNum[Port][GunNum]++; switch (TXHData.MD_Port_Data[Port].PortData.Device_Type) { case YWY_Bluesky: { switch (MD_TX_CMD) { case YWY_MDConnectCmdReadData: // 读数据 { for (i = 0; i < 7; i++) MD_Connect_TX_Buff[Port][i] = Data_201[i]; MD_ConnectTX_Len = 7; } break; case YWY_MDConnectCmdWriteApacity: // 下载罐容表 { for (i = 0; i < 7; i++) MD_Connect_TX_Buff[Port][i] = Data_20E[i]; MD_ConnectTX_Len = 7; } break; } } break; case YWY_Probe_KY: { GunAddr = GunNum + 1; // TXHData.MBCountCutNum[Port][i] ++; MD_Connect_TX_Buff[Port][0] = GunAddr; MD_Connect_TX_Buff[Port][1] = 0x03; MD_Connect_TX_Buff[Port][2] = 0x00; MD_Connect_TX_Buff[Port][3] = 0x02; MD_Connect_TX_Buff[Port][4] = 0x00; MD_Connect_TX_Buff[Port][5] = 0x09; Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], 6); MD_Connect_TX_Buff[Port][7] = Tempu64 >> 8; MD_Connect_TX_Buff[Port][6] = Tempu64; MD_ConnectTX_Len = 8; } break; case YWY_Pressure: { GunAddr = GunNum + 1; // TXHData.MBCountCutNum[0][i] ++; MD_Connect_TX_Buff[Port][0] = GunAddr; MD_Connect_TX_Buff[Port][1] = 0x03; MD_Connect_TX_Buff[Port][2] = 0x00; MD_Connect_TX_Buff[Port][3] = 0x00; MD_Connect_TX_Buff[Port][4] = 0x00; MD_Connect_TX_Buff[Port][5] = 0x02; Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], 6); MD_Connect_TX_Buff[Port][7] = Tempu64 >> 8; MD_Connect_TX_Buff[Port][6] = Tempu64; MD_ConnectTX_Len = 8; } break; } } break; case PosRFID: { GunAddr = TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr; if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top) TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1; TXHData.MBCountCutNum[Port][GunNum]++; // if(TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonNumber > 0)//这个设备支持多枪协议 // { // for(i = 0;i < TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonNumber;i ++) // if(TXHData.MD_Port_Info[Port].GunInfo[GunNum+i].Handshake != TXHData.MD_Port_Info[Port].Handshake_Top) // break; // if(i == TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonNumber && MD_TX_CMD != RFID_MDConnectCmdROMownload)//所有枪都握手完成,并且不是在线升级指令,使用多枪指令 // MD_TX_CMD = RFID_MDConnectCmdAllData; // } switch (MD_TX_CMD) { // case RFID_MDConnectCmdAllData://读所有枪状态 // { // if(TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonNumber > 0)//这个设备支持多枪协议 // { // if(GunAddr == TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonAddress[0] || // GunAddr == TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonAddress[1] || // GunAddr == TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonAddress[2] || // GunAddr == TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonAddress[3])//第一个地址,跳过剩下的地址 // { // TXHData.MD_Port_Info[Port].pGunNow += TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonNumber-1 ; // } // } // MD_Connect_TX_Buff[Port][0] = 0xF5;// // MD_Connect_TX_Buff[Port][1] = GunAddr; // MD_Connect_TX_Buff[Port][2] = 0; // MD_Connect_TX_Buff[Port][3] = 0; // MD_Connect_TX_Buff[Port][4] = RFID_MDConnectCmdAllData; // MD_ConnectTX_Len = 5;//缓存数据位置 // for(DeviceNumber = 0;DeviceNumber < TXHData.MD_Port_Info[Port].GunInfo[GunNum].SonDevice.SonNumber;DeviceNumber ++) // { // switch(TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].MB_CMD_Next) // 根据命令字节进行不同的操作 // { // case RFID_MDConnectCmdReadData: //轮询 // { // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Data[Port].GunData[GunNum + DeviceNumber].GunAddr; // MD_ConnectTX_Len ++; // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].MB_CMD_Next; // MD_ConnectTX_Len ++; // }break; // case RFID_MDConnectCmdWriteCardInfo://写授权信息 RFID_MDConnectCmdWriteFullingInfo // { // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Data[Port].GunData[GunNum + DeviceNumber].GunAddr; // MD_ConnectTX_Len ++; // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].MB_CMD_Next; // MD_ConnectTX_Len ++; // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].RFIDState; // MD_ConnectTX_Len ++; // if(TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].RFIDState == 0x01) // { // for(i = 0;i < 15;i ++) // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len+i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].RFIDUserName[i]; // MD_ConnectTX_Len += 15; // for(i = 0;i < 10;i ++) // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len+i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].CarLicensePlate[i]; // MD_ConnectTX_Len += 10; // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].BalanceDecimal; // MD_ConnectTX_Len += 1; // for(i = 0;i < 5;i ++) // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len+i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].Balance[i]; // MD_ConnectTX_Len += 5; // } // else if(TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].RFIDState == 0x20) // { // for(i = 0;i < 4;i ++) // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len+i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].Balance[i]; // MD_ConnectTX_Len += 4; // } // }break; // case RFID_MDConnectCmdWriteFullingInfo://写实时信息 // { // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Data[Port].GunData[GunNum + DeviceNumber].GunAddr; // MD_ConnectTX_Len ++; // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].MB_CMD_Next; // MD_ConnectTX_Len ++; // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].RFIDState; // MD_ConnectTX_Len ++; // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].BalanceDecimal; // MD_ConnectTX_Len ++; // for(i = 0;i < 5;i ++) // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len+i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum + DeviceNumber].Balance[i]; // MD_ConnectTX_Len += 5; // }break; // } // } // MD_Connect_TX_Buff[Port][2] = MD_ConnectTX_Len >> 8; // MD_Connect_TX_Buff[Port][3] = MD_ConnectTX_Len; // Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0],MD_ConnectTX_Len); // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = Tempu64 >> 8; // MD_ConnectTX_Len ++; // MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = Tempu64; // MD_ConnectTX_Len ++; // }break; case RFID_MDConnectCmdReadData: // 读状态 { MD_Connect_TX_Buff[Port][0] = 0xF5; MD_Connect_TX_Buff[Port][1] = GunAddr; MD_Connect_TX_Buff[Port][2] = 0x00; MD_Connect_TX_Buff[Port][3] = 0x05; MD_Connect_TX_Buff[Port][4] = RFID_MDConnectCmdReadData; Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], 5); MD_Connect_TX_Buff[Port][5] = Tempu64 >> 8; MD_Connect_TX_Buff[Port][6] = Tempu64; MD_ConnectTX_Len = 7; } break; case RFID_MDConnectCmdLossACK: // case RFID_MDConnectCmdFindACK: // { MD_Connect_TX_Buff[Port][0] = 0xF5; MD_Connect_TX_Buff[Port][1] = GunAddr; MD_Connect_TX_Buff[Port][2] = 0x00; MD_Connect_TX_Buff[Port][3] = 0x05; MD_Connect_TX_Buff[Port][4] = MD_TX_CMD; Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], 5); MD_Connect_TX_Buff[Port][5] = Tempu64 >> 8; MD_Connect_TX_Buff[Port][6] = Tempu64; MD_ConnectTX_Len = 7; } break; case RFID_MDConnectCmdWriteCardInfo: // 写授权信息 RFID_MDConnectCmdWriteFullingInfo { MD_Connect_TX_Buff[Port][0] = 0xF5; MD_Connect_TX_Buff[Port][1] = GunAddr; MD_Connect_TX_Buff[Port][2] = 0x00; MD_Connect_TX_Buff[Port][4] = RFID_MDConnectCmdWriteCardInfo; MD_Connect_TX_Buff[Port][5] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].RFIDState; if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].RFIDState == 0x01) { MD_ConnectTX_Len = 37; for (i = 0; i < 15; i++) MD_Connect_TX_Buff[Port][6 + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].RFIDUserName[i]; for (i = 0; i < 10; i++) MD_Connect_TX_Buff[Port][21 + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].CarLicensePlate[i]; MD_Connect_TX_Buff[Port][31] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].BalanceDecimal; for (i = 0; i < 5; i++) MD_Connect_TX_Buff[Port][32 + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Balance[i]; } else if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].RFIDState == 0x20) { MD_ConnectTX_Len = 10; for (i = 0; i < 4; i++) MD_Connect_TX_Buff[Port][6 + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Balance[i]; } else { MD_ConnectTX_Len = 6; } MD_Connect_TX_Buff[Port][3] = MD_ConnectTX_Len; Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], MD_ConnectTX_Len); MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = Tempu64 >> 8; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + 1] = Tempu64; MD_ConnectTX_Len = MD_ConnectTX_Len + 2; } break; case RFID_MDConnectCmdWriteFullingInfo: // 写实时信息 { MD_Connect_TX_Buff[Port][0] = 0xF5; MD_Connect_TX_Buff[Port][1] = GunAddr; MD_Connect_TX_Buff[Port][2] = 0x00; MD_Connect_TX_Buff[Port][4] = RFID_MDConnectCmdWriteFullingInfo; MD_Connect_TX_Buff[Port][5] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].RFIDState; MD_ConnectTX_Len = 12; MD_Connect_TX_Buff[Port][6] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].BalanceDecimal; for (i = 0; i < 5; i++) MD_Connect_TX_Buff[Port][7 + i] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Balance[i]; MD_Connect_TX_Buff[Port][3] = MD_ConnectTX_Len; Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], MD_ConnectTX_Len); MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = Tempu64 >> 8; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + 1] = Tempu64; MD_ConnectTX_Len = MD_ConnectTX_Len + 2; } break; case RFID_MDConnectCmdWriteBindingInfo: // 下发绑定信息 { MD_ConnectTX_Len = 6; MD_Connect_TX_Buff[Port][0] = 0xF5; MD_Connect_TX_Buff[Port][1] = GunAddr; MD_Connect_TX_Buff[Port][2] = 0x00; MD_Connect_TX_Buff[Port][3] = MD_ConnectTX_Len; MD_Connect_TX_Buff[Port][4] = RFID_MDConnectCmdWriteBindingInfo; MD_Connect_TX_Buff[Port][5] = TXHData.MD_Port_Data[Port].GunData[GunNum].RFIDBinding; Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], MD_ConnectTX_Len); MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = Tempu64 >> 8; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + 1] = Tempu64; MD_ConnectTX_Len = MD_ConnectTX_Len + 2; } break; case RFID_MDConnectCmdReadVersion: // 读版本 { MD_Connect_TX_Buff[Port][0] = 0xF5; MD_Connect_TX_Buff[Port][1] = GunAddr; MD_Connect_TX_Buff[Port][2] = 0x00; MD_Connect_TX_Buff[Port][3] = 0x05; MD_Connect_TX_Buff[Port][4] = RFID_MDConnectCmdReadVersion; Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], 5); MD_Connect_TX_Buff[Port][5] = Tempu64 >> 8; MD_Connect_TX_Buff[Port][6] = Tempu64; MD_ConnectTX_Len = 7; } break; case RFID_MDConnectCmdROMownload: // 固件下发 { MD_ConnectTX_Len = 531; MD_Connect_TX_Buff[Port][0] = 0xF5; MD_Connect_TX_Buff[Port][1] = GunAddr; MD_Connect_TX_Buff[Port][2] = MD_ConnectTX_Len >> 8; MD_Connect_TX_Buff[Port][3] = MD_ConnectTX_Len & 0xff; MD_Connect_TX_Buff[Port][4] = RFID_MDConnectCmdROMownload; for (i = 0; i < 10; i++) MD_Connect_TX_Buff[Port][5 + i] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData_Version[i]; MD_Connect_TX_Buff[Port][15] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData.FrameTop >> 8; MD_Connect_TX_Buff[Port][16] = TXHData.MD_Port_Data[Port].PortData.ROM_UpData.FrameTop; MD_Connect_TX_Buff[Port][17] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].FrameNow >> 8; MD_Connect_TX_Buff[Port][18] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].FrameNow; AT45DBItemRead(CA_DeviceFrame, TXHData.MD_Port_Info[Port].GunInfo[GunNum].FrameNow + Port * 1024); for (i = 0; i < 512; i++) MD_Connect_TX_Buff[Port][19 + i] = TXHData.Frame[i]; Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], MD_ConnectTX_Len); MD_Connect_TX_Buff[Port][MD_ConnectTX_Len] = Tempu64 >> 8; MD_Connect_TX_Buff[Port][MD_ConnectTX_Len + 1] = Tempu64; MD_ConnectTX_Len = MD_ConnectTX_Len + 2; } break; } } break; case PosYGao: { GunAddr = (TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr); if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top) TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1; TXHData.MBCountCutNum[Port][GunNum]++; switch (MD_TX_CMD) { case YG_MDConnectCmdReadFuelVolumeState: // 读状态+数据 { MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][3] = MD_TX_CMD; MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][5] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 2); // 校验 MD_ConnectTX_Len = 6; } break; case YG_MDConnectCmdReadFuelRecord: // 读记录 { MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][3] = MD_TX_CMD; MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][5] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 2); // 校验 MD_ConnectTX_Len = 6; } break; case YG_MDConnectCmdReadFuelRecordConfirm: // 读记录确认信息 { MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][3] = MD_TX_CMD; MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][5] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 2); // 校验 MD_ConnectTX_Len = 6; TXHData.MD_Port_Info[Port].GunInfo[GunNum].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState; } break; case YG_MDConnectCmdWritePrset: // 预置 { MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][3] = MD_TX_CMD; MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号 if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Volume) { if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x90000000) Tempu64 = 0x900000; else Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue; for (i = 0; i < 3; i++) { MD_Connect_TX_Buff[Port][5 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff; } Tempu64 = 0; for (i = 0; i < 4; i++) { MD_Connect_TX_Buff[Port][8 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff; } for (i = 0; i < 3; i++) { MD_Connect_TX_Buff[Port][12 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff; } Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price; for (i = 0; i < 3; i++) { MD_Connect_TX_Buff[Port][15 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff; } Tempu64 = 100000000 / TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price; for (i = 0; i < 4; i++) { MD_Connect_TX_Buff[Port][18 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][22] = 0; } else if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Sale) { Tempu64 = 0; for (i = 0; i < 3; i++) { MD_Connect_TX_Buff[Port][5 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff; } if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x90000000) Tempu64 = 0x900000; else Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue; for (i = 0; i < 4; i++) { MD_Connect_TX_Buff[Port][8 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff; } for (i = 0; i < 3; i++) { MD_Connect_TX_Buff[Port][12 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff; } Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price; for (i = 0; i < 3; i++) { MD_Connect_TX_Buff[Port][15 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff; } Tempu64 = 100000000 / TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price; for (i = 0; i < 4; i++) { MD_Connect_TX_Buff[Port][18 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][22] = 1; } Tempu64 = TXHData.MD_Port_Data[Port].GunData[GunNum].OrderNumber + 1; for (i = 0; i < 2; i++) { MD_Connect_TX_Buff[Port][23 + i] = (Tempu64 >> ((1 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][25] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 22); // 校验 MD_ConnectTX_Len = 26; } break; case YG_MDConnectCmdStart: // 启动 { MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][3] = MD_TX_CMD; MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][5] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 2); // 校验 MD_ConnectTX_Len = 6; } break; case YG_MDConnectCmdStop: // 停机 { MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][3] = MD_TX_CMD; MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][5] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 2); // 校验 MD_ConnectTX_Len = 6; } break; case YG_MDConnectCmdWritePrice: // xie单价 { MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][3] = MD_TX_CMD; MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号 Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price; for (i = 0; i < 3; i++) { MD_Connect_TX_Buff[Port][5 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff; } Tempu64 = 100000000 / MD_Connect_BCDTou64(TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price); Tempu64 = MD_Connect_u64ToBCD(Tempu64); for (i = 0; i < 4; i++) { MD_Connect_TX_Buff[Port][8 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][12] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 9); // 校验 MD_ConnectTX_Len = 13; } break; case YG_MDConnectCmdReadTotal: // 读总累 { MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][3] = MD_TX_CMD; MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][5] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 2); // 校验 MD_ConnectTX_Len = 6; } break; case YG_MDConnectControlMode: // 要控制权 { MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][3] = MD_TX_CMD; MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][5] = 0x55; // 联机模式 MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 3); // 校验 MD_ConnectTX_Len = 7; } break; case YG_MDConnectCmdLock: // 锁定 { MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][3] = MD_TX_CMD; MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][5] = 0xAA; // 联机模式 for (i = 0; i < 3; i++) { MD_Connect_TX_Buff[Port][6 + i] = 0x00; } MD_Connect_TX_Buff[Port][9] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 6); // 校验 MD_ConnectTX_Len = 10; } break; case YG_MDConnectCmdUnLock: // 解锁 { MD_Connect_TX_Buff[Port][0] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][1] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][2] = 0xFA; // 帧头 MD_Connect_TX_Buff[Port][3] = MD_TX_CMD; MD_Connect_TX_Buff[Port][4] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][5] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][3], 2); // 校验 MD_ConnectTX_Len = 6; } break; } } break; case PosHongYang: { GunAddr = TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr; if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top) TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1; TXHData.MBCountCutNum[Port][GunNum]++; switch (Port) { case 0: MD_Connect_TX1_DMAAddrSet((uint32_t)&HY_SendBuff); break; case 1: MD_Connect_TX2_DMAAddrSet((uint32_t)&HY_SendBuff); break; case 2: MD_Connect_TX3_DMAAddrSet((uint32_t)&HY_SendBuff); break; case 3: MD_Connect_TX4_DMAAddrSet((uint32_t)&HY_SendBuff); break; } switch (MD_TX_CMD) { case HY_MDConnectCmdReadFuelData: // 读数据 { MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][1] = 0x03; MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdReadFuelData; MD_Connect_TX_Buff[Port][3] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 4; if (GunAddr <= 64) HY_SendBuff[0] = GunAddr | 0x100; else HY_SendBuff[0] = GunAddr; for (i = 1; i < MD_ConnectTX_Len; i++) HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i]; } break; case HY_MDConnectCmdWritePrsetSale: // 预置金额 { MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdWritePrsetSale; if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664) { if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x900000) Tempu64 = 0x900000; else Tempu64 = MD_Connect_BCDTou64(TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue); MD_Connect_TX_Buff[Port][1] = 0x06; for (i = 0; i < 3; i++) { MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][6] = CheckSum8(&MD_Connect_TX_Buff[Port][0], 6); // 校验 MD_ConnectTX_Len = 7; } else { if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x90000000) Tempu64 = 0x90000000; else Tempu64 = MD_Connect_BCDTou64(TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue); MD_Connect_TX_Buff[Port][1] = 0x07; for (i = 0; i < 4; i++) { MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][7] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 7); // 校验 MD_ConnectTX_Len = 8; } if (GunAddr <= 64) HY_SendBuff[0] = GunAddr | 0x100; else HY_SendBuff[0] = GunAddr; for (i = 1; i < MD_ConnectTX_Len; i++) HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i]; } break; case HY_MDConnectCmdWritePrsetVolume: // 预置油量 { MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdWritePrsetVolume; if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664) { if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue == 0x900000) Tempu64 = 0x900000; else Tempu64 = MD_Connect_BCDTou64(TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue); MD_Connect_TX_Buff[Port][1] = 0x06; for (i = 0; i < 3; i++) { MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][6] = CheckSum8(&MD_Connect_TX_Buff[Port][0], 6); // 校验 MD_ConnectTX_Len = 7; } else { if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue == 0x90000000) Tempu64 = 0x90000000; else Tempu64 = MD_Connect_BCDTou64(TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue); MD_Connect_TX_Buff[Port][1] = 0x07; for (i = 0; i < 4; i++) { MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][7] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 7); // 校验 MD_ConnectTX_Len = 8; } if (GunAddr <= 64) HY_SendBuff[0] = GunAddr | 0x100; else HY_SendBuff[0] = GunAddr; for (i = 1; i < MD_ConnectTX_Len; i++) HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i]; } break; case HY_MDConnectCmdStart: // 启动 { MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][1] = 0x03; MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdStart; MD_Connect_TX_Buff[Port][3] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 4; if (GunAddr <= 64) HY_SendBuff[0] = GunAddr | 0x100; else HY_SendBuff[0] = GunAddr; for (i = 1; i < MD_ConnectTX_Len; i++) HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i]; TXHData.MD_Port_Data[Port].GunData[GunNum].GunState.Flag.AuthorizeState = 1; FMItemWrite(CF_MD_Port_Data, Port); } break; case HY_MDConnectCmdStop: // 停机 { MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][1] = 0x03; MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdStop; MD_Connect_TX_Buff[Port][3] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 4; if (GunAddr <= 64) HY_SendBuff[0] = GunAddr | 0x100; else HY_SendBuff[0] = GunAddr; for (i = 1; i < MD_ConnectTX_Len; i++) HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i]; } break; case HY_MDConnectCmdReadPrice: // 读单价 { MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][1] = 0x03; MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdReadPrice; MD_Connect_TX_Buff[Port][3] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 4; if (GunAddr <= 64) HY_SendBuff[0] = GunAddr | 0x100; else HY_SendBuff[0] = GunAddr; for (i = 1; i < MD_ConnectTX_Len; i++) HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i]; } break; case HY_MDConnectCmdWritePrice: // xie单价 { MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdWritePrice; MD_Connect_TX_Buff[Port][1] = 0x07; Tempu64 = MD_Connect_BCDTou64(TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price); for (i = 0; i < 4; i++) { MD_Connect_TX_Buff[Port][3 + i] = ((Tempu64) >> ((3 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][7] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 7); // 校验 MD_ConnectTX_Len = 8; if (GunAddr <= 64) HY_SendBuff[0] = GunAddr | 0x100; else HY_SendBuff[0] = GunAddr; for (i = 1; i < MD_ConnectTX_Len; i++) HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i]; } break; case HY_MDConnectCmdReadTotal: // 读总累 { MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][1] = 0x03; MD_Connect_TX_Buff[Port][2] = HY_MDConnectCmdReadTotal; MD_Connect_TX_Buff[Port][3] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 4; if (GunAddr <= 64) HY_SendBuff[0] = GunAddr | 0x100; else HY_SendBuff[0] = GunAddr; for (i = 1; i < MD_ConnectTX_Len; i++) HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i]; } break; case HY_MDConnectASKControlPower: // 要控制权 { MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][1] = 0x03; MD_Connect_TX_Buff[Port][2] = HY_MDConnectASKControlPower; MD_Connect_TX_Buff[Port][3] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 4; if (GunAddr <= 64) HY_SendBuff[0] = GunAddr | 0x100; else HY_SendBuff[0] = GunAddr; for (i = 1; i < MD_ConnectTX_Len; i++) HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i]; } break; case HY_MDConnectReturnControlPower: // 还控制权 { MD_Connect_TX_Buff[Port][0] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][1] = 0x03; MD_Connect_TX_Buff[Port][2] = HY_MDConnectReturnControlPower; MD_Connect_TX_Buff[Port][3] = InteiHEXCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 4; if (GunAddr <= 64) HY_SendBuff[0] = GunAddr | 0x100; else HY_SendBuff[0] = GunAddr; for (i = 1; i < MD_ConnectTX_Len; i++) HY_SendBuff[i] = MD_Connect_TX_Buff[Port][i]; } break; } } break; case PosLanFeng: { GunAddr = MD_Connect_u64ToBCD(TXHData.MD_Port_Data[Port].GunData[GunNum].GunAddr); if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top) TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1; TXHData.MBCountCutNum[Port][GunNum]++; if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].ROM_UpData_State.Flag.BaudRateSync_Flag == 1) { MD_Connect_USART_Configuration(Port, BaudRateSync, USART_WordLength_9b, TXHData.MD_Port_Data[Port].PortData.Parity_Even); } else { MD_Connect_USART_Configuration(Port, TXHData.MD_Port_Data[Port].PortData.BaudRate, USART_WordLength_9b, TXHData.MD_Port_Data[Port].PortData.Parity_Even); } switch (MD_TX_CMD) { case LF_MDConnectCmdReadState: // 读状态 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = LF_MDConnectCmdReadState; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; } break; case LF_MDConnectCmdWritePrset: // 预置金额 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664) { if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x900000) Tempu64 = 0x900000; else Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue; MD_Connect_TX_Buff[Port][2] = 0xA5; for (i = 0; i < 3; i++) { MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((2 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][6] = C_MDConnectCmdWritePrsetSale; MD_Connect_TX_Buff[Port][7] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 6); // 校验 MD_ConnectTX_Len = 8; } else { if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x90000000) Tempu64 = 0x90000000; else Tempu64 = TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue; MD_Connect_TX_Buff[Port][2] = 0xA6; for (i = 0; i < 4; i++) { MD_Connect_TX_Buff[Port][3 + i] = (Tempu64 >> ((3 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][7] = LF_MDConnectCmdWritePrset; MD_Connect_TX_Buff[Port][8] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 7); // 校验 MD_ConnectTX_Len = 9; } } break; case LF_MDConnectCmdStop: // 停机 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = LF_MDConnectCmdStop; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; } break; case LF_MDConnectCmdWritePrice: // xie单价 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 if (TXHData.MD_Port_Data[Port].PortData.Device_Type == Display_664) { MD_Connect_TX_Buff[Port][2] = 0xA4; for (i = 0; i < 2; i++) { MD_Connect_TX_Buff[Port][3 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price) >> ((1 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][5] = C_MDConnectCmdWritePrice; MD_Connect_TX_Buff[Port][6] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 5); // 校验 MD_ConnectTX_Len = 7; } else { MD_Connect_TX_Buff[Port][2] = 0xA5; for (i = 0; i < 3; i++) { MD_Connect_TX_Buff[Port][3 + i] = ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].Price) >> ((2 - i) * 8)) & 0xff; } MD_Connect_TX_Buff[Port][6] = LF_MDConnectCmdWritePrice; MD_Connect_TX_Buff[Port][7] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 6); // 校验 MD_ConnectTX_Len = 8; } } break; case LF_MDConnectCmdReadTotal: // 读总累 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = LF_MDConnectCmdReadTotal; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; } break; case LF_MDConnectASKControlPower: // 要控制权 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = LF_MDConnectASKControlPower; // MD_Connect_TX_Buff[Port][3] = C_MDConnectReturnControlPower; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; } break; case LF_MDConnectReturnControlPower: // 还控制权 { MD_Connect_TX_Buff[Port][0] = 0xf5; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr; // 枪号 MD_Connect_TX_Buff[Port][2] = 0xA2; MD_Connect_TX_Buff[Port][3] = LF_MDConnectReturnControlPower; MD_Connect_TX_Buff[Port][4] = MD_Connect_TXDataCheck(&MD_Connect_TX_Buff[Port][0], 3); // 校验 MD_ConnectTX_Len = 5; } break; } } break; case PosSSLan: // { FatherNum = GunNum; // 这离GunNum表示泵号 GunNum = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonStart + TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonNow; // GunAddr = TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].Address; // 泵地址 if (TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].Handshake == TXHData.MD_Port_Info[Port].Handshake_Top) TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1; TXHData.MBCountCutNum[Port][FatherNum]++; if (GunAddr > 0) GunAddr -= 1; switch (MD_TX_CMD) { case LY_MDConnectCmdHandshake: // 握手 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x30; MD_Connect_TX_Buff[Port][4] = 0x30; MD_Connect_TX_Buff[Port][5] = (TXHData.MD_Port_Info[Port].GunInfo[GunNum].LYHandshakeCRC >> 4) & 0x0f; if (MD_Connect_TX_Buff[Port][5] < 0x0A) MD_Connect_TX_Buff[Port][5] += 0x30; else MD_Connect_TX_Buff[Port][5] = MD_Connect_TX_Buff[Port][5] - 0x0A + 0x41; MD_Connect_TX_Buff[Port][6] = TXHData.MD_Port_Info[Port].GunInfo[GunNum].LYHandshakeCRC & 0x0f; if (MD_Connect_TX_Buff[Port][6] < 0x0A) MD_Connect_TX_Buff[Port][6] += 0x30; else MD_Connect_TX_Buff[Port][6] = MD_Connect_TX_Buff[Port][6] - 0x0A + 0x41; MD_Connect_TX_Buff[Port][7] = 0x03; MD_Connect_TX_Buff[Port][8] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 7); // 校验 MD_ConnectTX_Len = 9; // if(TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == 0x06) // { // TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0x07; // } TXHData.MD_Port_Info[Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0x08; } break; case LY_MDConnectCmdPoll: // 轮询 { MD_Connect_TX_Buff[Port][0] = 0x04; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x51; MD_Connect_TX_Buff[Port][3] = 0x05; MD_ConnectTX_Len = 4; } break; case LY_MDConnectCmdReadState: // 读状态 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x31; MD_Connect_TX_Buff[Port][4] = 0x35; MD_Connect_TX_Buff[Port][5] = 0x03; MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验 MD_ConnectTX_Len = 7; } break; case LY_MDConnectCmdReadTotal: // 读状态 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x32; MD_Connect_TX_Buff[Port][4] = 0x30; MD_Connect_TX_Buff[Port][5] = 0x03; MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验 MD_ConnectTX_Len = 7; } break; case LY_MDConnectCmdChoiceGun: // 选择枪 { MD_Connect_TX_Buff[Port][0] = 0x04; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x05; MD_ConnectTX_Len = 4; // if(TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake == 0x02) // { // TXHData.MD_Port_Info[Port].GunInfo[GunNum].Handshake = 0x03; // } } break; case LY_MDConnectCmdDisauthorize: // 取消授权 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x31; MD_Connect_TX_Buff[Port][4] = 0x32; MD_Connect_TX_Buff[Port][5] = 0x03; MD_Connect_TX_Buff[Port][6] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 5); // 校验 MD_ConnectTX_Len = 7; TXHData.MD_Port_Data[Port].GunData[GunNum].GunState.Flag.AuthorizeState = 0; } break; case LY_MDConnectCmdAuthorize: // 授权 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x31; MD_Connect_TX_Buff[Port][4] = 0x31; if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >= 0x900000) MD_Connect_TX_Buff[Port][5] = 0x30; else { MD_Connect_TX_Buff[Port][5] = 0x32; } if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Volume) MD_Connect_TX_Buff[Port][6] = 0x31; else if (TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresteType == Preset_Sale) MD_Connect_TX_Buff[Port][6] = 0x32; for (i = 0; i < 6; i++) MD_Connect_TX_Buff[Port][7 + i] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[GunNum].PresetValue >> (5 - i) * 4) & 0x0f); for (i = 0; i < 30; i++) MD_Connect_TX_Buff[Port][13 + i] = 0x30; for (j = 0; j < 6; j++) { if ((TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonNow == j) && TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonStart + j].Price != 0) MD_Connect_TX_Buff[Port][13 + j * 5] = 0x32; else MD_Connect_TX_Buff[Port][13 + j * 5] = 0x30; for (i = 0; i < 4; i++) MD_Connect_TX_Buff[Port][14 + i + j * 5] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonStart + j].Price >> (3 - i) * 4) & 0x0f); } MD_Connect_TX_Buff[Port][13 + 30] = 0x03; MD_Connect_TX_Buff[Port][14 + 30] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 13 + 30); // 校验 MD_ConnectTX_Len = 15 + 30; } break; case LY_MDConnectCmdWritePrice: // 写单价 { MD_Connect_TX_Buff[Port][0] = 0x02; // 帧头 MD_Connect_TX_Buff[Port][1] = GunAddr + 0x40; // 枪号 MD_Connect_TX_Buff[Port][2] = 0x41; MD_Connect_TX_Buff[Port][3] = 0x32; MD_Connect_TX_Buff[Port][4] = 0x31; MD_Connect_TX_Buff[Port][5] = 0x32; for (i = 0; i < 30; i++) MD_Connect_TX_Buff[Port][6 + i] = 0x30; for (j = 0; j < 6; j++) { if ((TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonNow == j) && TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonStart + j].Price != 0) MD_Connect_TX_Buff[Port][6 + j * 5] = 0x32; else MD_Connect_TX_Buff[Port][6 + j * 5] = 0x30; for (i = 0; i < 4; i++) MD_Connect_TX_Buff[Port][7 + i + j * 5] = 0x30 + ((TXHData.MD_Port_Info[Port].GunInfo[TXHData.MD_Port_Info[Port].FatherDevice[FatherNum].SonStart + j].Price >> (3 - i) * 4) & 0x0f); } MD_Connect_TX_Buff[Port][36] = 0x03; MD_Connect_TX_Buff[Port][37] = BCC_CheckSum(&MD_Connect_TX_Buff[Port][1], 36); // 校验 MD_ConnectTX_Len = 38; } break; case LY_MDConnectCmdACK0: // 1030 { MD_Connect_TX_Buff[Port][0] = 0x10; MD_Connect_TX_Buff[Port][1] = 0x30; MD_ConnectTX_Len = 2; } break; case LY_MDConnectCmdACK1: // 1031 { MD_Connect_TX_Buff[Port][0] = 0x10; MD_Connect_TX_Buff[Port][1] = 0x31; MD_ConnectTX_Len = 2; } break; } } break; case PosPLC: { TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1; TXHData.MBCountCutNum[Port][GunNum]++; switch (MD_TX_CMD) { case PLC_MDConnectCmdReadData: // 轮询 { MD_Connect_TX_Buff[Port][0] = 0x03; MD_Connect_TX_Buff[Port][1] = 0x03; MD_Connect_TX_Buff[Port][2] = 0x00; MD_Connect_TX_Buff[Port][3] = 0x00; MD_Connect_TX_Buff[Port][4] = 0x00; MD_Connect_TX_Buff[Port][5] = 26; Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], 6); MD_Connect_TX_Buff[Port][7] = Tempu64 >> 8; MD_Connect_TX_Buff[Port][6] = Tempu64; MD_ConnectTX_Len = 8; // TXHData.MD_Port_Info[Port].GunInfo[0].MB_CMD_Next = PLC_MDConnectCmdReadErro; } break; case PLC_MDConnectCmdReadErro: // 读状态 { MD_Connect_TX_Buff[Port][0] = 0x03; MD_Connect_TX_Buff[Port][1] = 0x03; MD_Connect_TX_Buff[Port][2] = 0x00; MD_Connect_TX_Buff[Port][3] = 30; MD_Connect_TX_Buff[Port][4] = 0; MD_Connect_TX_Buff[Port][5] = 3; Tempu64 = CRC_Check(&MD_Connect_TX_Buff[Port][0], 6); MD_Connect_TX_Buff[Port][7] = Tempu64 >> 8; MD_Connect_TX_Buff[Port][6] = Tempu64; MD_ConnectTX_Len = 8; // TXHData.MD_Port_Info[Port].GunInfo[0].MB_CMD_Next = PLC_MDConnectCmdReadData; } break; } } break; case PosPrice1_4: { TXHData.MD_Port_Info[Port].LoopGunNextFlag = 1; TXHData.MBCountCutNum[Port][GunNum]++; switch (MD_TX_CMD) { case Price_MDConnectCmdWriteParameter: // 写参数 { MD_Connect_TX_Buff[Port][0] = 0xFE; MD_Connect_TX_Buff[Port][1] = 0xFF; MD_Connect_TX_Buff[Port][2] = 0x04; MD_Connect_TX_Buff[Port][3] = 0x01; MD_Connect_TX_Buff[Port][4] = 0x03; Tempu64 = Price_DataCheck(&MD_Connect_TX_Buff[Port][2], MD_Connect_TX_Buff[Port][2] - 1); MD_Connect_TX_Buff[Port][5] = Tempu64; MD_Connect_TX_Buff[Port][6] = 0xEF; MD_ConnectTX_Len = 7; } break; case Price_MDConnectCmdReadParameter: // 读参数 { MD_Connect_TX_Buff[Port][0] = 0xFE; MD_Connect_TX_Buff[Port][1] = 0xFF; MD_Connect_TX_Buff[Port][2] = 0x04; MD_Connect_TX_Buff[Port][3] = 0x01; MD_Connect_TX_Buff[Port][4] = 0x02; Tempu64 = Price_DataCheck(&MD_Connect_TX_Buff[Port][2], MD_Connect_TX_Buff[Port][2] - 1); MD_Connect_TX_Buff[Port][5] = Tempu64; MD_Connect_TX_Buff[Port][6] = 0xEF; MD_ConnectTX_Len = 7; } break; case Price_MDConnectCmdWriteDecimal: // 写小数位MD_Port_Info_Type { MD_Connect_TX_Buff[Port][0] = 0xFE; MD_Connect_TX_Buff[Port][1] = 0xFF; MD_Connect_TX_Buff[Port][2] = 16; MD_Connect_TX_Buff[Port][3] = 0x01; MD_Connect_TX_Buff[Port][4] = 0x04; for (j = 0; j < TXHData.MD_Port_Info[Port].PriceTagData.PriceNumber; j++) { MD_Connect_TX_Buff[Port][5 + j] = TXHData.MD_Port_Info[Port].PriceTagData.Length - TXHData.MD_Port_Info[Port].PriceTagData.Decimal[j]; } for (j = TXHData.MD_Port_Info[Port].PriceTagData.PriceNumber; j < 17; j++) MD_Connect_TX_Buff[Port][5 + j] = 0; Tempu64 = Price_DataCheck(&MD_Connect_TX_Buff[Port][2], MD_Connect_TX_Buff[Port][2] - 1); MD_Connect_TX_Buff[Port][17] = Tempu64; MD_Connect_TX_Buff[Port][18] = 0xEF; MD_ConnectTX_Len = 19; } break; case Price_MDConnectCmdWritePrice: // 写单价 { MD_Connect_TX_Buff[Port][0] = 0xFE; MD_Connect_TX_Buff[Port][1] = 0xFF; MD_Connect_TX_Buff[Port][2] = 40; MD_Connect_TX_Buff[Port][3] = 0x01; MD_Connect_TX_Buff[Port][4] = 0x01; for (i = 5; i < 40; i++) MD_Connect_TX_Buff[Port][i] = 0; for (i = 0; i < TXHData.MD_Port_Info[Port].PriceTagData.PriceNumber; i++) { for (j = 0; j < 3; j++) { if (TXHData.MD_Port_Info[Port].PriceTagData.Length / 2 > j) MD_Connect_TX_Buff[Port][5 + j + (i * 3)] = TXHData.MD_Port_Info[Port].PriceTagData.Price[i] >> ((TXHData.MD_Port_Info[Port].PriceTagData.Length / 2 - 1 - j) * 8); else MD_Connect_TX_Buff[Port][5 + j + (i * 3)] = 0; } } Tempu64 = Price_DataCheck(&MD_Connect_TX_Buff[Port][2], MD_Connect_TX_Buff[Port][2] - 1); MD_Connect_TX_Buff[Port][41] = Tempu64; MD_Connect_TX_Buff[Port][42] = 0xEF; MD_ConnectTX_Len = 43; } break; case Price_MDConnectCmdReadPrice: // 读单价 { MD_Connect_TX_Buff[Port][0] = 0xFE; MD_Connect_TX_Buff[Port][1] = 0xFF; MD_Connect_TX_Buff[Port][2] = 0x04; MD_Connect_TX_Buff[Port][3] = 0x01; MD_Connect_TX_Buff[Port][4] = 0x03; Tempu64 = Price_DataCheck(&MD_Connect_TX_Buff[Port][2], MD_Connect_TX_Buff[Port][2] - 1); MD_Connect_TX_Buff[Port][5] = Tempu64; MD_Connect_TX_Buff[Port][6] = 0xEF; MD_ConnectTX_Len = 7; } break; } } break; } switch (Port) { case 0: { if (MD_ConnectTX_Len) { MD_Connect_RS485_Tx1EN; MD_Connect_TX1_DMALenSet(MD_ConnectTX_Len); MD_Connect_TX1_DMAStart(); } } break; case 1: { if (MD_ConnectTX_Len) { MD_Connect_RS485_Tx2EN; MD_Connect_TX2_DMALenSet(MD_ConnectTX_Len); MD_Connect_TX2_DMAStart(); } } break; case 2: { if (MD_ConnectTX_Len) { MD_Connect_RS485_Tx3EN; MD_Connect_TX3_DMALenSet(MD_ConnectTX_Len); MD_Connect_TX3_DMAStart(); } } break; case 3: { if (MD_ConnectTX_Len) { MD_Connect_RS485_Tx4EN; MD_Connect_TX4_DMALenSet(MD_ConnectTX_Len); MD_Connect_TX4_DMAStart(); } } break; } if (TXHData.UDisk_Flag) Log_Task(&MD_Connect_TX_Buff[Port][0], MD_ConnectTX_Len, Port, Info_Issue); } else { TXHData.MBCountCutNum[Port][GunNum]++; } } else if (TXHData.MDConnectState[Port].Flag.WorkMode == 0) // 指令模式 { switch (TXHData.MDConnectState[Port].Flag.SetModeCMDNext) { case WIFI_ATRec: { TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < strlen(MD_ATRec); i++) MD_Connect_TX_Buff[Port][i] = MD_ATRec[i]; MD_ConnectTX_Len = (i); // 设置发送DMA长度 TXHData.MBCountTimer[Port].TimerCountMax = 1000; } break; case WIFI_WMODE: { TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < strlen(MD_WMODE); i++) MD_Connect_TX_Buff[Port][i] = MD_WMODE[i]; MD_ConnectTX_Len = (i); // 设置发送DMA长度 } break; case WIFI_WifiRST: { for (i = 0; i < strlen(MD_WifiRST); i++) MD_Connect_TX_Buff[Port][i] = MD_WifiRST[i]; MD_ConnectTX_Len = (i); // 设置发送DMA长度 TXHData.MBCountTimer[Port].TimerCountMax = 1000 * 10; } break; case WIFI_WifiWSSSID: { TXHData.POS_Info.POS_ConnectRXTask_Flag = 0; for (i = 0; i < strlen(MD_WifiWSSSID); i++) MD_Connect_TX_Buff[Port][i] = MD_WifiWSSSID[i]; MD_Connect_TX_Buff[Port][11] = 0x31 + Port; MD_Connect_TX_Buff[Port][22] = 0x31 + Port * 3; if (Port == 3) { MD_Connect_TX_Buff[Port][22] = 0x31; MD_Connect_TX_Buff[Port][23] = 0x30; MD_Connect_TX_Buff[Port][24] = 0x0D; MD_Connect_TX_Buff[Port][25] = 0x0A; i++; } MD_ConnectTX_Len = (i); // 设置发送DMA长度 TXHData.MBCountTimer[Port].TimerCountMax = 1000 * 10; } break; case WIFI_WifiRSSI: { for (i = 0; i < strlen(MD_WifiRSSI); i++) MD_Connect_TX_Buff[Port][i] = MD_WifiRSSI[i]; MD_ConnectTX_Len = (i); // 设置发送DMA长度 TXHData.MDConnectState[Port].Flag.SetModeCMDNext = WIFI_WifiSOCKET; TXHData.MBCountTimer[Port].TimerCountMax = 1000 * 2; } break; case WIFI_WifiSOCKET: { { for (i = 0; i < strlen(MD_WifiSOCKET); i++) MD_Connect_TX_Buff[Port][i] = MD_WifiSOCKET[i]; MD_ConnectTX_Len = (i); // 设置发送DMA长度 } TXHData.MBCountTimer[Port].TimerCountMax = 1000 * 10; } break; } switch (Port) { case 0: { if (MD_ConnectTX_Len) { MD_Connect_RS485_Tx1EN; MD_Connect_TX1_DMALenSet(MD_ConnectTX_Len); MD_Connect_TX1_DMAStart(); } } break; case 1: { if (MD_ConnectTX_Len) { MD_Connect_RS485_Tx2EN; MD_Connect_TX2_DMALenSet(MD_ConnectTX_Len); MD_Connect_TX2_DMAStart(); } } break; case 2: { if (MD_ConnectTX_Len) { MD_Connect_RS485_Tx3EN; MD_Connect_TX3_DMALenSet(MD_ConnectTX_Len); MD_Connect_TX3_DMAStart(); } } break; case 3: { if (MD_ConnectTX_Len) { MD_Connect_RS485_Tx4EN; MD_Connect_TX4_DMALenSet(MD_ConnectTX_Len); MD_Connect_TX4_DMAStart(); } } break; } } } /*F***************************************************************************** * NAME: KeyBoardTask * PURMDE: KeyBoard键盘通讯处理任务 * PARAMS: 无 * return: 无 *******************************************************************************/ volatile u8 KBAddr_Init[4] = {0, 0, 0, 0}; volatile u32 MD_RX_RNGData[4] = {0, 0, 0, 0}; void MD_ConnectRXTask(void) { volatile u16 i = 0, j = 0, Port = 0, Temp = 0, DeviceNumber = 0, DeviceType = 0, DeviceDataLen = 0, DeviceNoDataLen = 0, DevicePortLen = 0; volatile u64 TempBCD = 0, Tempu64 = 0; volatile u8 MD_ConnectRX_Port = 0, POSType = 0, RXBuild_Port = 0, WhiteList_Num = 0; volatile u16 MD_ConnectRX_Len = 0; // 长度 volatile u8 MD_ConnectRX_pGun = 0; // 地址枪号 volatile u8 MD_ConnectRX_pGun_Father = 0; // 多枪协议父设备号 volatile u8 MD_ConnectRX_pGun_SonDeviceBusy = 0; // 多强协议中用来标识有子设备在提枪或者加油中 volatile u16 MD_ConnectRX_CMD = 0, MD_ConnectRX_CMDType = 0; // 命令 volatile GunState_TypeDef GunState; u8 MD_ConnectRX_Check = 0; // 校验变量 u8 Buff[50]; u8 Temp8 = 0; u8 Encrypt_Flag1 = 0; u8 Encrypt_Flag2 = 0; u32 Temp32 = 0; u16 Temp16 = 0; volatile u16 Offset = 0; volatile u32 CRC_temp = 0; volatile float TempF = 0; volatile u8 Tank_Num; u8 Data_201[7] = "i20100"; u8 Data_20E[7] = "i20E00"; while (TXHData.MBCountRXIDLETimer[0].Flag + TXHData.MBCountRXIDLETimer[1].Flag + TXHData.MBCountRXIDLETimer[2].Flag + TXHData.MBCountRXIDLETimer[3].Flag) { if (TXHData.MBCountRXIDLETimer[0].Flag) { TXHData.MBCountRXIDLETimer[0].Flag = 0; if (TXHData.MD_Rec_NummberB[0] == 1000 - DMA1_Stream5->NDTR) { TXHData.MD_Rec_Nummber[0] = 1000 - DMA1_Stream5->NDTR; MD_Connect_RX1_DMAStop(); // 关闭DMA接收 DMA_ClearFlag(DMA1_Stream5, DMA_IT_TCIF5); MD_ConnectRX1Task_Flag = 1; // 使能Gas接收任务 MD_Connect_RX1_DMALenSet(1000); // 重置接受长度 MD_Connect_RX1_DMAStart(); // 打开DMA接收 } } if (TXHData.MBCountRXIDLETimer[1].Flag) { TXHData.MBCountRXIDLETimer[1].Flag = 0; if (TXHData.MD_Rec_NummberB[1] == 1000 - DMA1_Stream2->NDTR) { TXHData.MD_Rec_Nummber[1] = 1000 - DMA1_Stream2->NDTR; MD_Connect_RX2_DMAStop(); // 关闭DMA接收 DMA_ClearFlag(DMA1_Stream2, DMA_IT_TCIF2); MD_ConnectRX2Task_Flag = 1; // 使能Gas接收任务 MD_Connect_RX2_DMALenSet(1000); // 重置接受长度 MD_Connect_RX2_DMAStart(); // 打开DMA接收 } } if (TXHData.MBCountRXIDLETimer[2].Flag) { TXHData.MBCountRXIDLETimer[2].Flag = 0; if (TXHData.MD_Rec_NummberB[2] == 1000 - DMA1_Stream0->NDTR) { TXHData.MD_Rec_Nummber[2] = 1000 - DMA1_Stream0->NDTR; MD_Connect_RX3_DMAStop(); // 关闭DMA接收 DMA_ClearFlag(DMA1_Stream0, DMA_IT_TCIF0); MD_ConnectRX3Task_Flag = 1; // 使能Gas接收任务 MD_Connect_RX3_DMALenSet(1000); // 重置接受长度 MD_Connect_RX3_DMAStart(); // 打开DMA接收 } } if (TXHData.MBCountRXIDLETimer[3].Flag) { TXHData.MBCountRXIDLETimer[3].Flag = 0; if (TXHData.MD_Rec_NummberB[3] == 1000 - DMA1_Stream1->NDTR) { TXHData.MD_Rec_Nummber[3] = 1000 - DMA1_Stream1->NDTR; MD_Connect_RX4_DMAStop(); // 关闭DMA接收 DMA_ClearFlag(DMA1_Stream1, DMA_IT_TCIF1); MD_ConnectRX4Task_Flag = 1; // 使能Gas接收任务 MD_Connect_RX4_DMALenSet(1000); // 重置接受长度 MD_Connect_RX4_DMAStart(); // 打开DMA接收 } } } while (MD_ConnectRX1Task_Flag + MD_ConnectRX2Task_Flag + MD_ConnectRX3Task_Flag + MD_ConnectRX4Task_Flag) { if (MD_ConnectRX1Task_Flag) { MD_ConnectRX1Task_Flag = 0; MD_ConnectRX_Port = 0; } else if (MD_ConnectRX2Task_Flag) { MD_ConnectRX2Task_Flag = 0; MD_ConnectRX_Port = 1; } else if (MD_ConnectRX3Task_Flag) { MD_ConnectRX3Task_Flag = 0; MD_ConnectRX_Port = 2; } else if (MD_ConnectRX4Task_Flag) { MD_ConnectRX4Task_Flag = 0; MD_ConnectRX_Port = 3; } if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0xC1 && MD_Connect_RX_Buff[MD_ConnectRX_Port][2] == 0x08) // LORA设置回复 { TXHData.MD_LORA_Slave_Flag = 1; switch (MD_ConnectRX_Port) { case 0: MD_Connect_LORA_IdleMode1; break; case 1: MD_Connect_LORA_IdleMode2; break; case 2: MD_Connect_LORA_IdleMode3; break; case 3: MD_Connect_LORA_IdleMode4; break; } BEEP_OFF; } else if (TXHData.MDConnectState[MD_ConnectRX_Port].Flag.WorkMode == 1) // 数据模式 { if (TXHData.UDisk_Flag) Log_Task(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], TXHData.MD_Rec_Nummber[MD_ConnectRX_Port], MD_ConnectRX_Port, Info_Receive); POSType = TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.POSType; switch (POSType) { case PosBlueSky: { MD_ConnectRX_pGun = MD_Connect_BCDTou64(MD_Connect_RX_Buff[MD_ConnectRX_Port][1]); // 提取指令抢号 for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.DeviceNumber; DeviceNumber++) if (MD_ConnectRX_pGun == TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunAddr) { MD_ConnectRX_pGun = DeviceNumber; break; } if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][2] & 0xf0) == 0xa0) MD_ConnectRX_Len = MD_Connect_RX_Buff[MD_ConnectRX_Port][2] & 0x0f; // 提取长度码 else MD_ConnectRX_Len = MD_Connect_RX_Buff[MD_ConnectRX_Port][2]; if (MD_ConnectRX_Len == 0) MD_ConnectRX_Len = 16; MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 1]; // 提取命令码 Temp = MD_Connect_TXDataCheck(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], MD_ConnectRX_Len + 1); if (Temp == MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 2] && MD_Connect_RX_Buff[MD_ConnectRX_Port][1] > 0) // 判断校验位 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RSSI = MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 3]; TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0; if (TXHData.POS_MonitorModel == 1) // 监管模式 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; switch (MD_ConnectRX_CMD) { case C_MDConnectCmdReadState: // 读状态 { if (MD_ConnectRX_Len < 3) MD_ConnectRX_CMD = 0; break; }; break; case C_MDConnectCmdReadFuelState: // 读数据 { if (MD_ConnectRX_Len < 3) MD_ConnectRX_CMD = 0; break; }; break; case C_MDConnectCmdReadPrice: // 读单价 { if (MD_ConnectRX_Len < 3) MD_ConnectRX_CMD = 0; break; }; break; case C_MDConnectCmdReadTotal: // 读总累 { if (MD_ConnectRX_Len < 3) MD_ConnectRX_CMD = 0; break; }; break; default: MD_ConnectRX_CMD = 0; break; } } switch (MD_ConnectRX_CMD) { case C_MDConnectCmdReadState: // 读状态 { TXHData.LTGunState.State = MD_Connect_RX_Buff[MD_ConnectRX_Port][3]; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1 - TXHData.LTGunState.Flag.GunUp; // TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = TXHData.LTGunState.Flag.StartFlag; if (TXHData.LTGunState.Flag.StartFlag == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag = 1; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x02; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadPrice; } else if (TXHData.LTGunState.Flag.TitleFlag == 0) // 如果控制权丢失,从新获取控制权 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectASKControlPower; } else { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1 - TXHData.LTGunState.Flag.GunUp; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = TXHData.LTGunState.Flag.StartFlag; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 1) { // TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadFuelState; // TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; if (TXHData.POS_Info.Link_Flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number) { TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState = 0x11; TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = RFID_MDConnectCmdWriteFullingInfo; } } else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadFuelState; // TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1; if (TXHData.POS_Info.Link_Flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number) { TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].GunState.Flag.UpdateDisplay = 0; TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState = 0; TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = RFID_MDConnectCmdWriteFullingInfo; } } FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag == 0) // 挂枪 { if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadFuelState; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0; } else // 提枪 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 1; else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0; } if (TXHData.POS_Info.Link_Flag == 0 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 离线了,判断一下是不是需要离线授权 { if (TXHData.OfflineAuthorize == 1 && (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)) // 离线授权 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == 0) { TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdStart; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_NoCard; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); for (i = 0; i < 6; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i] = 0; for (i = 0; i < 15; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CarLicensePlate[i] = 0; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1) { // if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == TXHData.MD_Port_Data[Port].GunData[DeviceNumber].GunNummber)//查找对应的RFID设备号 { if (TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState == 3) // 标签验证通过 { TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdStart; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_Card; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } } } } } } FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next == C_MDConnectCmdReadState) { // if(TXHData.POSCutTimer.Flag == 1) // TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdStop; // else TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadFuelState; } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD == C_MDConnectCmdWritePrice && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 0) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectASKControlPower; } } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadPrice; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadPrice; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online == 1 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords == 0) { if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag == 0) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.VersionFindFlag) { for (i = 0; i < 6; i++) // 判断是不是同一个系列 if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i]) break; if (i == 6) { for (i = 6; i < 10; i++) // 判断版本号是不是相同 if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i]) break; if (i != 10) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdSetBaudRate; } } } } } } break; case C_MDConnectCmdReadFuelState: // 读数据 { if (TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.Device_Type == Display_664) { if (MD_ConnectRX_Len != 8) break; for (i = 0; i < 6; i++) { if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0x0f) > 0x09) break; if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0xf0) > 0x90) break; } if (i < 6) break; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][4] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][5]); TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][6] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][7] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][8])); } else { if (MD_ConnectRX_Len != 10) break; for (i = 0; i < 8; i++) { if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0x0f) > 0x09) break; if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0xf0) > 0x90) break; } if (i < 8) break; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][4] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][6])); TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][7] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][8] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][9] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][10])); } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x04; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadTotal; } else if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next == C_MDConnectCmdReadFuelState) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadPrice; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } } break; case C_MDConnectCmdStart: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; if (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] == 0x59) TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 1; else TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } break; case C_MDConnectCmdStop: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState; } break; case C_MDConnectPauseFueling: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; } break; case C_MDConnectResumeFueling: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState; } break; case C_MDConnectCmdWritePrsetSale: // 预置金额 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; } else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdStart; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } } break; case C_MDConnectCmdWritePrsetVolume: // 预置油量 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; } else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdStart; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } } break; case C_MDConnectCmdReadPrice: // 读单价 { if (TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.Device_Type == Display_664) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4]); } else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][4] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][5]); } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x03; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadFuelState; } else { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadFuelState; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; } else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadTotal; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } } } break; case C_MDConnectCmdWritePrice: // xie单价 { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState; } break; case C_MDConnectCmdReadTotal: // 读总累 { if (TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.Device_Type == Display_664) { if (MD_ConnectRX_Len != 12) break; for (i = 0; i < 10; i++) { if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0x0f) > 0x09) break; if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0xf0) > 0x90) break; } if (i < 10) break; Tempu64 = 0; for (i = 0; i < 5; i++) { Tempu64 <<= 8; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = Tempu64; Tempu64 = 0; for (i = 0; i < 5; i++) { Tempu64 <<= 8; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][8 + i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = Tempu64; } else { if (MD_ConnectRX_Len != 14) break; for (i = 0; i < 12; i++) { if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0x0f) > 0x09) break; if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i] & 0xf0) > 0x90) break; } if (i < 12) break; Tempu64 = 0; for (i = 0; i < 6; i++) { Tempu64 <<= 8; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = Tempu64; Tempu64 = 0; for (i = 0; i < 6; i++) { Tempu64 <<= 8; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][9 + i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = Tempu64; } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun; // 计算打印存储位置 if (TXHData.POS_Info.Link_Flag == 0 // 离线了,判断一下是不是需要离线记录 || (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 自主授权模式,判断一下是不是需要离线记录 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType > NowAuthorizeType_Online) // 离线启动的,判断一下是不是需要离线记录 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = 0; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].RTIME = TXHData.CTIME; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0; for (i = 0; i < 6; i++) TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i] = TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i + 4]; // 卡号信息有10字节,这里只取后6 for (i = 0; i < 10; i++) TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i] = 0; AT45DBItemWrite(CA_PREXDATA, TXHData.PREXDATA_WaitUpNummber / 5); FMItemWrite(CF_PREXDATA_TTC, 0); if (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax) TXHData.PREXDATA_WaitUpNummber++; FMItemWrite(CF_PREXDATA_WaitUpNummber, 0); TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber; for (i = 0; i < 6; i++) TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i]; } else { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; for (i = 0; i < 6; i++) TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i]; } TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL; TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData; TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME; TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price; FMItemWrite(CF_PrintLastRecord, Tempu64); TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0; } else { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState; } break; case C_MDConnectCmdWriteTotal: // xie { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState; } break; case C_MDConnectCmdWritePulseCoefficient: // xie { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState; } break; case C_MDConnectASKControlPower: // 要控制权 { TXHData.POSLOCK_Impower = 1; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x01; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadVersion; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD == C_MDConnectCmdWritePrice) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdWritePrice; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = 0; } else TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState; } break; case C_MDConnectReturnControlPower: // 还控制权 { TXHData.POSLOCK_Impower = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState; // if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 0x00) // { // TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; // TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x01; // TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdReadState; // } // else if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD == C_MDConnectCmdWritePrice) // { // TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; // TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdWritePrice; // TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = 0; // } } break; case C_MDConnectCmdReadVersion: // 读版本号 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.VersionFindFlag = 1; for (i = 0; i < 10; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.Version[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 3]; } break; case C_MDConnectCmdSetBaudRate: // 同步波特率 { if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][4] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][5]) == BaudRateSync) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FrameNow = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = C_MDConnectCmdSendFrame; MD_Connect_USART_Configuration(MD_ConnectRX_Port, BaudRateSync, USART_WordLength_9b, TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.Parity_Even); TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].ROM_UpData_State.Flag.BaudRateSync_Flag = 1; } } break; case C_MDConnectCmdSendFrame: // 传送帧 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FrameNow = (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4]; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FrameNow >= TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData.FrameTop) { TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 6; // 更新完了,断开从新握手 } } break; } } } break; case PosLY: // TXHData.LoopGunNextFlag { if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x04) MD_ConnectRX_CMD = 0x04; else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x15) MD_ConnectRX_CMD = 0x15; if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][1]) == 0x1030) MD_ConnectRX_CMD = LY_MDConnectCmdACK0; else if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][1]) == 0x1031) MD_ConnectRX_CMD = LY_MDConnectCmdACK1; else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x02) { // BCC_CheckSum(&MD_Connect_RX_Buff[MD_ConnectRX_Port][1] , 5);//校验 MD_ConnectRX_CMD = (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4]; } MD_ConnectRX_pGun = TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunNow; TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0; if (TXHData.POS_MonitorModel == 1) // 监管模式 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; } switch (MD_ConnectRX_CMD) { case LY_MDConnectCmdACK0: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x05) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x06; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdHandshake; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x0a) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x0b; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdReadTotal; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x0f) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x10; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdReadState; } else { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next == LY_MDConnectCmdWritePrice) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD != LY_MDConnectCmdPoll) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdPoll; } } } break; case LY_MDConnectCmdACK1: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x08) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x08; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x0b) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x0c; } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next == LY_MDConnectCmdAuthorize) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll; } break; case 0x3030: // 握手1 { for (i = 0; i < 6; i++) Buff[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i]; TempBCD = do_crc(Buff, 6); TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYHandshakeCRC = ((TempBCD >> 8) + TempBCD) % 256; // TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYHandshakeCRC = Tempu64 >> 4; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x04; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1; } break; case 0x04: // { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < 0x04) // 等待握手 { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake++; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 0x04) // 如果三次没有收到握手,跳过 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x0a; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 0x04) // 收到握手,开始验证 { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x05; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x08) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x09; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x09) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x0a; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x0d) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x0e; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x0e) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x0f; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x10) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x11; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdPoll; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0) TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD != LY_MDConnectCmdPoll) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD != LY_MDConnectCmdReadState) TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } else { if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadTotal; } else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; } } } } break; case 0x15: // 失败 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdPoll; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } break; case 0x3630: // 握手2 { // if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x08) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x09; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1; } } break; case 0x3632: // 报错信息 { // if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x08) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1; } } break; case 0x3631: // 状态 { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1; // if(TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.State != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.State) { if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x30 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunState == 0x31) { // if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunState == 0x33) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.TimerCountMax = 1000 * 5; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadTotal; } TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0; } else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x31 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1; } TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0; if (TXHData.POS_Info.Link_Flag == 0 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 离线了,判断一下是不是需要离线授权 { if (TXHData.OfflineAuthorize == 1 && (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)) // 离线授权 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == 0) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_NoCard; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresetValue = 0x90000000; TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresteType = Preset_Sale; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdAuthorize; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1) { // if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == TXHData.MD_Port_Data[Port].GunData[DeviceNumber].GunNummber)//查找对应的RFID设备号 { if (TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState == 3) // 标签验证通过 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_Card; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresetValue = 0x90000000; TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresteType = Preset_Sale; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdAuthorize; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00; } } } } } } else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x33) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0) { FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadState; } else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x34) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1;//加个定时器,用来判断是否完成交易记录的生成 TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.TimerCountMax = 1000*5; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadTotal; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; } Tempu64 = 0; for (i = 0; i < 6; i++) { Tempu64 = Tempu64 << 4; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 6] - 0x30; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = Tempu64; Tempu64 = 0; for (i = 0; i < 4; i++) { Tempu64 = Tempu64 << 4; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 13] - 0x30; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price = Tempu64; Tempu64 = 0; for (i = 0; i < 6; i++) { Tempu64 = Tempu64 << 4; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 17] - 0x30; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = Tempu64; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunState = MD_Connect_RX_Buff[MD_ConnectRX_Port][5]; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.State = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.State; } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top && (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake > 0x0f)) // 等待主动读数据,防止为握手之前设备主动发数据造成状态识别戳我 { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x30) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0; } if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 1) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1; Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun; TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL; TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData; TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME; TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; FMItemWrite(CF_PrintLastRecord, Tempu64); FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } } } break; case 0x3635: // 累计 { Tempu64 = 0; for (i = 0; i < 10; i++) { Tempu64 = Tempu64 << 4; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 11] - 0x30; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = Tempu64; Tempu64 = 0; for (i = 0; i < 10; i++) { Tempu64 = Tempu64 << 4; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 21] - 0x30; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = Tempu64; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun; if (TXHData.POS_Info.Link_Flag == 0 // 离线了,判断一下是不是需要离线记录 || (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 自主授权模式,判断一下是不是需要离线记录 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType > NowAuthorizeType_Online) // 离线启动的,判断一下是不是需要离线记录 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = 0; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].RTIME = TXHData.CTIME; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0; for (i = 0; i < 6; i++) TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i] = TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i + 4]; // 卡号信息有10字节,这里只取后6 for (i = 0; i < 10; i++) TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i] = 0; AT45DBItemWrite(CA_PREXDATA, TXHData.PREXDATA_WaitUpNummber / 5); FMItemWrite(CF_PREXDATA_TTC, 0); if (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax) TXHData.PREXDATA_WaitUpNummber++; FMItemWrite(CF_PREXDATA_WaitUpNummber, 0); TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 0; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber; for (i = 0; i < 6; i++) TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i]; } else { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; for (i = 0; i < 6; i++) TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.TimerCount = 0; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL; TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData; TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME; TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; FMItemWrite(CF_PrintLastRecord, Tempu64); } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x0c) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x0d; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadState; } break; } } break; case PosJP: { if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x04) MD_ConnectRX_CMD = 0x04; else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x15) MD_ConnectRX_CMD = 0x15; if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][1]) == 0x1030) MD_ConnectRX_CMD = LY_MDConnectCmdACK0; else if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][1]) == 0x1031) MD_ConnectRX_CMD = LY_MDConnectCmdACK1; else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x02) { MD_ConnectRX_CMD = (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4]; } MD_ConnectRX_pGun = TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunNow; TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0; if (TXHData.POS_MonitorModel == 1) // 监管模式 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; } switch (MD_ConnectRX_CMD) { case 0x3630: // 握手 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 0x00) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x01; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1; } } break; case LY_MDConnectCmdACK0: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x02) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x03; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdReadTotal; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x05) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x06; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdReadState; } else { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next == LY_MDConnectCmdWritePrice) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD != LY_MDConnectCmdPoll) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdPoll; } } } break; case LY_MDConnectCmdACK1: // { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next == LY_MDConnectCmdAuthorize) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll; } break; case 0x04: // { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x01) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x02; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x04) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x05; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x06) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD != LY_MDConnectCmdPoll) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD != LY_MDConnectCmdReadState) TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; } } } break; case 0x15: // 失败 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdPoll; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } break; case 0x3641: // 状态 { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1; // if(TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.State != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.State) { if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x30 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunState == 0x31) { // if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadTotal; } } else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x31 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1; } // else // { // TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0; // TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0; // } TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0; if (TXHData.POS_Info.Link_Flag == 0 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 离线了,判断一下是不是需要离线授权 { if (TXHData.OfflineAuthorize == 1 && (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)) // 离线授权 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == 0) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_NoCard; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresetValue = 0x90000000; TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresteType = Preset_Sale; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdAuthorize; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1) { // if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == TXHData.MD_Port_Data[Port].GunData[DeviceNumber].GunNummber)//查找对应的RFID设备号 { if (TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState == 3) // 标签验证通过 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_Card; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresetValue = 0x90000000; TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].PresteType = Preset_Sale; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdAuthorize; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00; } } } } } } else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x33) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0) { FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadState; } else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x34) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadTotal; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; } // else // { // TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0; // TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0; // } Tempu64 = 0; for (i = 0; i < 8; i++) { Tempu64 = Tempu64 << 4; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 6] - 0x30; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = Tempu64; Tempu64 = 0; for (i = 0; i < 6; i++) { Tempu64 = Tempu64 << 4; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 15] - 0x30; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price = Tempu64; Tempu64 = 0; for (i = 0; i < 8; i++) { Tempu64 = Tempu64 << 4; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 21] - 0x30; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = Tempu64; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunState = MD_Connect_RX_Buff[MD_ConnectRX_Port][5]; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.State = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.State; } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdPoll; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1; Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun; TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL; TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData; TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME; TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; FMItemWrite(CF_PrintLastRecord, Tempu64); } FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } } } break; case 0x3642: // 累计 { Tempu64 = 0; for (i = 0; i < 12; i++) { Tempu64 = Tempu64 << 4; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 11] - 0x30; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = Tempu64; Tempu64 = 0; for (i = 0; i < 12; i++) { Tempu64 = Tempu64 << 4; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 23] - 0x30; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = Tempu64; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x03) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x04; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun; // 计算打印存储位置 if (TXHData.POS_Info.Link_Flag == 0 // 离线了,判断一下是不是需要离线记录 || (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 自主授权模式,判断一下是不是需要离线记录 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType > NowAuthorizeType_Online) // 离线启动的,判断一下是不是需要离线记录 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = 0; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].RTIME = TXHData.CTIME; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0; for (i = 0; i < 6; i++) TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i] = TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i + 4]; // 卡号信息有10字节,这里只取后6 for (i = 0; i < 10; i++) TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i] = 0; AT45DBItemWrite(CA_PREXDATA, TXHData.PREXDATA_WaitUpNummber / 5); FMItemWrite(CF_PREXDATA_TTC, 0); if (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax) TXHData.PREXDATA_WaitUpNummber++; FMItemWrite(CF_PREXDATA_WaitUpNummber, 0); TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 0; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber; for (i = 0; i < 6; i++) TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i]; } else { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; for (i = 0; i < 6; i++) TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL; TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData; TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME; TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; FMItemWrite(CF_PrintLastRecord, Tempu64); } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LY_MDConnectCmdACK1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = LY_MDConnectCmdReadState; } break; } } break; case PosDart: { TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0; if (MD_Connect_RX_Buff[MD_ConnectRX_Port][1] == 0x70 && MD_Connect_RX_Buff[MD_ConnectRX_Port][2] == 0xFA) MD_ConnectRX_CMD = DART_MDConnectCmdPoll; else if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][1] & 0xF0) == 0xC0) && (MD_Connect_RX_Buff[MD_ConnectRX_Port][2] == 0xFA)) { MD_ConnectRX_CMD = DART_MDConnectCmdACK; } else if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] & 0xF0) == 0x50) && ((MD_Connect_RX_Buff[MD_ConnectRX_Port][1] & 0xF0) == 0x30)) { MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][2]; } MD_ConnectRX_pGun = TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunNow; TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0; if (TXHData.POS_MonitorModel == 1) // 监管模式 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; } switch (MD_ConnectRX_CMD) { case DART_MDConnectCmdPoll: // 轮询 { } break; case DART_MDConnectCmdACK: // { } break; case 0x01: // CD1 { switch (MD_Connect_RX_Buff[MD_ConnectRX_Port][4]) { case 0x01: // 重新握手 { } break; case 0x02: // 已授权 { } break; case 0x03: // 实时数据 { } break; case 0x05: // 复位 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 0) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = DART_MDConnectCmdACK; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = DART_MDConnectCmdReadState; } } break; } } break; case 0x03: { TXHData.DartGunState.State = MD_Connect_RX_Buff[MD_ConnectRX_Port][7]; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = TXHData.DartGunState.Flag.State; } break; case 0x65: // CD101 { if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][4] & 0xf0) == 0) MD_ConnectRX_CMD = DART_MDConnectCmdReadVTotal; else MD_ConnectRX_CMD = DART_MDConnectCmdReadPTotal; // MD_ConnectRX_pGun_Sun = MD_Connect_RX_Buff[MD_ConnectRX_Port][4] & 0x0f; for (i = 0; i < TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.DeviceNumber; i++) if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] - 0x50) == TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[i].GunAddr) break; // MD_ConnectRX_pGun = i + MD_ConnectRX_pGun_Sun; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 2; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = DART_MDConnectCmdReadPTotal; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 2; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = DART_MDConnectCmdReadPTotal; } } break; } } break; case PosYWY: { switch (TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.Device_Type) { case YWY_Bluesky: { TempBCD = CheckSum(&MD_Connect_RX_Buff[MD_ConnectRX_Port][1], TXHData.MD_Rec_Nummber[MD_ConnectRX_Port] - 6); Tempu64 = StrToInt(&MD_Connect_RX_Buff[MD_ConnectRX_Port][TXHData.MD_Rec_Nummber[MD_ConnectRX_Port] - 5], 4); if (Tempu64 == TempBCD) { TXHData.MBCountCutNum[MD_ConnectRX_Port][0] = 0; MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][4]; switch (MD_ConnectRX_CMD) { case YWY_MDConnectCmdReadData: { TXHData.TankNumTop = Tempu64 = (TXHData.MD_Rec_Nummber[MD_ConnectRX_Port] - 24) / 65; for (i = 0; i < Tempu64; i++) { if(MD_Connect_RX_Buff[MD_ConnectRX_Port][23 + i * 65] == 0) TXHData.TankState[MD_ConnectRX_Port][i].State = MD_Connect_RX_Buff[MD_ConnectRX_Port][20 + i * 65]; TempF = StrToFloat(&MD_Connect_RX_Buff[MD_ConnectRX_Port][26 + i * 65], 8); if(MD_Connect_RX_Buff[MD_ConnectRX_Port][26 + i * 65] != 0x3F) TXHData.TankData[MD_ConnectRX_Port][i].Data.OV = TempF; else TXHData.TankData[MD_ConnectRX_Port][i].Data.OV = 0; TempF = StrToFloat(&MD_Connect_RX_Buff[MD_ConnectRX_Port][50 + i * 65], 8); if(MD_Connect_RX_Buff[MD_ConnectRX_Port][50 + i * 65] != 0x3F) TXHData.TankData[MD_ConnectRX_Port][i].Data.OH = TempF; else TXHData.TankData[MD_ConnectRX_Port][i].Data.OH = 0; TempF = StrToFloat(&MD_Connect_RX_Buff[MD_ConnectRX_Port][58 + i * 65], 8); if(MD_Connect_RX_Buff[MD_ConnectRX_Port][58 + i * 65] != 0x3F) TXHData.TankData[MD_ConnectRX_Port][i].Data.WH = TempF; else TXHData.TankData[MD_ConnectRX_Port][i].Data.WH = 0; TempF = StrToFloat(&MD_Connect_RX_Buff[MD_ConnectRX_Port][66 + i * 65], 8); if(MD_Connect_RX_Buff[MD_ConnectRX_Port][66 + i * 65] != 0x3F) TXHData.TankData[MD_ConnectRX_Port][i].Data.TH = TempF; else TXHData.TankData[MD_ConnectRX_Port][i].Data.TH = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[i].GunState.Flag.Online = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RSSI = MD_Connect_RX_Buff[MD_ConnectRX_Port][TXHData.MD_Rec_Nummber[MD_ConnectRX_Port] - 1]; } } break; case YWY_MDConnectCmdWriteApacity: { } break; } } } break; case YWY_Probe_KY: { Tempu64 = (MD_Connect_RX_Buff[MD_ConnectRX_Port][22] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][21]; TempBCD = CRC_Check(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], 21); if (Tempu64 == TempBCD) { MD_ConnectRX_pGun = MD_Connect_RX_Buff[MD_ConnectRX_Port][0] - 1; TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0; TXHData.TankState[MD_ConnectRX_Port][MD_ConnectRX_pGun].State = 0; TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.OV = 0; TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.OH = (float)((MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4]) + (float)((MD_Connect_RX_Buff[MD_ConnectRX_Port][5] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][6]) / 65535; TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.WH = (float)((MD_Connect_RX_Buff[MD_ConnectRX_Port][7] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][8]) + (float)((MD_Connect_RX_Buff[MD_ConnectRX_Port][9] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][10]) / 65535; ; if ((MD_Connect_RX_Buff[MD_ConnectRX_Port][11] & 0x80) == 0) TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.TH = (float)((MD_Connect_RX_Buff[MD_ConnectRX_Port][11] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][12]) / 16; else TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.TH = 0.0 - ((float)((0 - ((MD_Connect_RX_Buff[MD_ConnectRX_Port][11] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][12])) & 0xffff) / 16.0); TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RSSI = MD_Connect_RX_Buff[MD_ConnectRX_Port][23]; TXHData.TankNumTop = TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.DeviceNumber; } } break; case YWY_Pressure: { Tempu64 = (MD_Connect_RX_Buff[MD_ConnectRX_Port][8] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][7]; TempBCD = CRC_Check(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], 7); if (Tempu64 == TempBCD) { MD_ConnectRX_pGun = MD_Connect_RX_Buff[MD_ConnectRX_Port][0] - 1; TXHData.MBCountCutNum[MD_ConnectRX_Port][0] = 0; TXHData.TankState[MD_ConnectRX_Port][MD_ConnectRX_pGun].State = 0; TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.OV = (float)((MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4]) / (pow(10, MD_Connect_RX_Buff[MD_ConnectRX_Port][6])); TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.OH = 0; TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.WH = 0; TXHData.TankData[MD_ConnectRX_Port][MD_ConnectRX_pGun].Data.TH = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RSSI = MD_Connect_RX_Buff[MD_ConnectRX_Port][9]; TXHData.TankNumTop = TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.DeviceNumber; } } break; } } break; case PosRFID: { MD_ConnectRX_Len = (MD_Connect_RX_Buff[MD_ConnectRX_Port][2] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][3]; Tempu64 = (MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 1]; TempBCD = CRC_Check(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], MD_ConnectRX_Len); if (Tempu64 == TempBCD) { MD_ConnectRX_pGun = MD_Connect_RX_Buff[MD_ConnectRX_Port][1]; // 提取指令地址号 for (i = 0; i < TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.DeviceNumber; i++) if (MD_ConnectRX_pGun == TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[i].GunAddr) { MD_ConnectRX_pGun = i; // 提取指令抢号 break; } TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][4]; TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0; switch (MD_ConnectRX_CMD) { case RFID_MDConnectCmdAllData: // 读所有状态 { Offset = 6; for (DeviceNumber = 0; DeviceNumber < MD_Connect_RX_Buff[MD_ConnectRX_Port][5]; DeviceNumber++) { Offset++; MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset]; Offset++; switch (MD_ConnectRX_CMD) { case RFID_MDConnectCmdReadData: // 读状态 { MD_ConnectRX_Len = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset]; Offset++; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun + DeviceNumber].ROM_UpData_State.Flag.Update_Flag && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].ROM_UpData_State.Flag.Update_Flag == 0) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].GunVersion.VersionFindFlag) { for (i = 0; i < 4; i++) // 判断是不是同一个系列 if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].GunVersion.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i]) break; if (i == 4) { for (i = 4; i < 10; i++) // 判断版本号是不是相同 if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].GunVersion.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i]) break; if (i != 10) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].ROM_UpData_State.Flag.Update_Flag = 1; } } } } if (MD_ConnectRX_Len == 15) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun + DeviceNumber].GunState.Flag.UpdateDisplay = 1; for (i = 0; i < 10; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].CardNumber[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset + i]; Offset += 10; for (i = 0; i < 2; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].CardPSWD[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset + i]; Offset += 2; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].Mileage = (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset + 1] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset + 2]; Offset += 3; if (TXHData.POS_Info.Link_Flag == 0) // 离线 { for (i = 0; i < 10; i++) if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].CardNumber[i] != 0) break; if (i == 10) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDState = 0x40; else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDState == 0) { for (WhiteList_Num = 0; WhiteList_Num < TXHData.WhiteList.WhiteListTop; WhiteList_Num++) // 查找白名单 { for (Temp = 0; Temp < 6; Temp++) if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].CardNumber[Temp + 4] != TXHData.WhiteList.CardNum[WhiteList_Num][Temp]) break; if (Temp == 6) // z在白名单内 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDState = 3; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun + DeviceNumber].GunState.Flag.UpdateDisplay = 0; for (i = 0; i < 15; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDUserName[i] = 0x20; for (i = 0; i < 10; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].CarLicensePlate[i] = 0x20; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].BalanceDecimal = 0; for (i = 0; i < 5; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].Balance[i] = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].Mileage; break; } } if (WhiteList_Num == TXHData.WhiteList.WhiteListTop) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDState = 0x40; } } switch (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDState) { case 3: TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdWriteCardInfo; break; case 17: TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdWriteFullingInfo; break; case 0x40: TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdWriteCardInfo; break; } } else { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun + DeviceNumber].GunState.Flag.UpdateDisplay = 0; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].ROM_UpData_State.Flag.Update_Flag) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].FrameNow = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdROMownload; } } } break; case RFID_MDConnectCmdWriteCardInfo: // { switch (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDState) { case 0x40: TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].RFIDState = 0; break; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdReadData; // if(TXHData.POS_Info.Link_Flag == 0)//离线 } break; case RFID_MDConnectCmdWriteFullingInfo: // 读 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun + DeviceNumber].MB_CMD_Next = RFID_MDConnectCmdReadData; } break; } } } break; case RFID_MDConnectCmdReadData: // 读状态 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == 0) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x01; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdReadVersion; } else { if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag == 0) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.VersionFindFlag) { for (i = 0; i < 4; i++) // 判断是不是同一个系列 if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i]) break; if (i == 4) { for (i = 4; i < 10; i++) // 判断版本号是不是相同 if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i]) break; if (i != 10) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag = 1; } } } } } if (MD_ConnectRX_Len == 17) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; for (i = 0; i < 10; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 5]; for (i = 0; i < 2; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardPSWD[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 15]; } else if (MD_ConnectRX_Len == 20) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; for (i = 0; i < 10; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 5]; for (i = 0; i < 2; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardPSWD[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 15]; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Mileage = (MD_Connect_RX_Buff[MD_ConnectRX_Port][17] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][18] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][19]; if (TXHData.POS_Info.Link_Flag == 0) // 离线 { for (i = 0; i < 10; i++) if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i] != 0) break; if (i == 10) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDState = 0x40; else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDState == 0) { for (WhiteList_Num = 0; WhiteList_Num < TXHData.WhiteList.WhiteListTop; WhiteList_Num++) // 查找白名单 { for (Temp = 0; Temp < 6; Temp++) if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[Temp + 4] != TXHData.WhiteList.CardNum[WhiteList_Num][Temp]) break; if (Temp == 6) // z在白名单内 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDState = 3; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 0; for (i = 0; i < 15; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDUserName[i] = 0x20; for (i = 0; i < 10; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CarLicensePlate[i] = 0x20; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].BalanceDecimal = 0; for (i = 0; i < 5; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Balance[i] = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Mileage; break; } } if (WhiteList_Num == TXHData.WhiteList.WhiteListTop) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDState = 0x40; } } switch (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDState) { case 3: TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdWriteCardInfo; break; case 17: TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdWriteFullingInfo; break; case 0x40: TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdWriteCardInfo; break; } } else if (MD_ConnectRX_Len == 6) // 有状态返回 { if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 1) // 标签消失 { zhtningzhuangtai = 3; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdLossACK; if (TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].GunState.Flag.Start_Flag) { switch (TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].PortData.POSType) { case PosBlueSky: TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = C_MDConnectPauseFueling; break; case PosBlueSkyPlus: TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = LTP_GunCMDSuspend; break; } TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].pGunCapture = TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].GunNummber; } } else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 2) // 标签恢复 { zhtningzhuangtai = 4; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdFindACK; if (TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].GunState.Flag.Start_Flag) { switch (TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].PortData.POSType) { case PosBlueSky: TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = C_MDConnectResumeFueling; break; case PosBlueSkyPlus: TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = LTP_GunCMDContinue; break; } TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].pGunCapture = TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].GunNummber; } } } else { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 0; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FrameNow = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdROMownload; } } } break; case RFID_MDConnectCmdFindACK: // case RFID_MDConnectCmdLossACK: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdReadData; } break; case RFID_MDConnectCmdWriteCardInfo: // { switch (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDState) { case 0x40: TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RFIDState = 0; break; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdReadData; // if(TXHData.POS_Info.Link_Flag == 0)//离线 } break; case RFID_MDConnectCmdWriteFullingInfo: // 读 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdReadData; } break; case RFID_MDConnectCmdWriteBindingInfo: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x03; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdReadData; } break; case RFID_MDConnectCmdReadVersion: // 读版本号 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x02; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdWriteBindingInfo; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.VersionFindFlag = 1; for (i = 0; i < 10; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].GunVersion.Version[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 5]; if (MD_ConnectRX_Len == 21) { // TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].SonDevice.SonNumber = MD_Connect_RX_Buff[MD_ConnectRX_Port][15]; // for(i = 0;i < 4;i ++) // TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].SonDevice.SonAddress[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][16+i]; } } break; case RFID_MDConnectCmdROMownload: // { // TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdReadData; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FrameNow = (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][6]; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FrameNow >= TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData.FrameTop) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = RFID_MDConnectCmdReadData; // TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].ROM_UpData_State.Flag.Update_Flag = 0; // FMItemWrite(CF_MD_Port_Data,MD_ConnectRX_Port); } } break; } } } break; case PosYGao: { MD_ConnectRX_pGun = MD_Connect_RX_Buff[MD_ConnectRX_Port][4]; // 提取指令抢号 for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.DeviceNumber; DeviceNumber++) { if (MD_ConnectRX_pGun == TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunAddr) { MD_ConnectRX_pGun = DeviceNumber; break; } } MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][3]; // 提取命令码 switch (MD_ConnectRX_CMD) { case YG_MDConnectCmdWritePrset: MD_ConnectRX_Len = 7; break; case YG_MDConnectCmdWritePrice: MD_ConnectRX_Len = 7; break; case YG_MDConnectCmdStop: MD_ConnectRX_Len = 6; break; case YG_MDConnectCmdStart: MD_ConnectRX_Len = 6; break; case YG_MDConnectControlMode: MD_ConnectRX_Len = 6; break; case YG_MDConnectCmdReadTotal: MD_ConnectRX_Len = 18; break; case YG_MDConnectCmdRemovePrset: MD_ConnectRX_Len = 7; break; case YG_MDConnectCmdReadVersion: MD_ConnectRX_Len = 9; break; case YG_MDConnectCmdUnLock: MD_ConnectRX_Len = 6; break; case YG_MDConnectCmdLock: MD_ConnectRX_Len = 6; break; case YG_MDConnectCmdReadFuelVolumeState: MD_ConnectRX_Len = 11; break; case YG_MDConnectCmdReadFuelSaleState: MD_ConnectRX_Len = 11; break; case YG_MDConnectCmdReadFuelRecord: MD_ConnectRX_Len = 42; break; } Temp = BCC_CheckSum(&MD_Connect_RX_Buff[MD_ConnectRX_Port][3], MD_ConnectRX_Len - 4); if (Temp == MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len - 1] && MD_Connect_RX_Buff[MD_ConnectRX_Port][1] > 0) // 判断校验位 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].RSSI = MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len]; TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0; if (TXHData.POS_MonitorModel == 1) // 监管模式 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; } switch (MD_ConnectRX_CMD) { case YG_MDConnectCmdReadFuelVolumeState: // 读状态 case YG_MDConnectCmdReadFuelSaleState: // 读数据 { if (MD_ConnectRX_CMD == YG_MDConnectCmdReadFuelVolumeState) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][5] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][6] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][7] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][8])); Tempu64 = MD_Connect_BCDTou64(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT); TempBCD = pow(10, TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.GunDec.Dec.OilCNT + TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.GunDec.Dec.Price - TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.GunDec.Dec.MoneyCNT); // 换算小数位 Tempu64 = (Tempu64 * MD_Connect_BCDTou64(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price) + TempBCD / 2) / TempBCD; // 计算包含四舍五入 TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = MD_Connect_u64ToBCD(Tempu64); } else if (MD_ConnectRX_CMD == YG_MDConnectCmdReadFuelSaleState) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][5] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][6] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][7] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][8])); TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].YGGunState.State = MD_Connect_RX_Buff[MD_ConnectRX_Port][9]; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].YGGunState.Flag.GunUp; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].YGGunState.Flag.State == 0x01 || TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].YGGunState.Flag.State == 0x03) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; } else TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 0; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0) // 加油结束 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1; } FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag == 0) // 挂枪 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0; } else // 提枪 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 1; else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0; } if (TXHData.POS_Info.Link_Flag == 0 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 离线了,判断一下是不是需要离线授权 { if (TXHData.OfflineAuthorize == 1 && (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)) // 离线授权 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == 0) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_NoCard; TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdStart; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); for (i = 0; i < 20; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i] = 0; for (i = 0; i < 10; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CarLicensePlate[i] = 0; } } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1) { // if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == TXHData.MD_Port_Data[Port].GunData[DeviceNumber].GunNummber)//查找对应的RFID设备号 { if (TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState == 3) // 标签验证通过 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_Card; TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdStart; } TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00; } } } } } } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x01) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x02; else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 0x02) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x03; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadTotal; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].YGGunState.Flag.UpdateRecords == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelRecord; } } } break; case YG_MDConnectCmdStart: // 启动 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 1; } break; case YG_MDConnectCmdStop: // 停机 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState; } break; case YG_MDConnectCmdWritePrset: // 预置金额 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState; } else { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdStart; } } break; case YG_MDConnectCmdWritePrice: // xie单价 { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; } break; case YG_MDConnectCmdReadFuelRecord: // 读记录 { Tempu64 = 0; for (i = 0; i < 3; i++) { Tempu64 <<= 8; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][5 + i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = MD_Connect_u64ToBCD(Tempu64); Tempu64 = 0; for (i = 0; i < 3; i++) { Tempu64 <<= 8; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][8 + i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = MD_Connect_u64ToBCD(Tempu64); Tempu64 = 0; for (i = 0; i < 3; i++) { Tempu64 <<= 8; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][19 + i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price = Tempu64; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadTotal; } break; case YG_MDConnectCmdReadTotal: // 读总累 { Tempu64 = 0; for (i = 0; i < 4; i++) { Tempu64 <<= 8; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][5 + i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = MD_Connect_u64ToBCD(Tempu64); Tempu64 = 0; for (i = 0; i < 4; i++) { Tempu64 <<= 8; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][9 + i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = MD_Connect_u64ToBCD(Tempu64); if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].YGGunState.Flag.UpdateRecords == 1) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelRecordConfirm; else TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState; Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun; // 计算打印存储位置 if (TXHData.POS_Info.Link_Flag == 0 // 离线了,判断一下是不是需要离线记录 || (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 自主授权模式,判断一下是不是需要离线记录 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType > NowAuthorizeType_Online) // 离线启动的,判断一下是不是需要离线记录 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = 0; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].RTIME = TXHData.CTIME; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0; for (i = 0; i < 6; i++) TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i] = TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i + 4]; // 卡号信息有10字节,这里只取后6 for (i = 0; i < 10; i++) TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i] = 0; AT45DBItemWrite(CA_PREXDATA, TXHData.PREXDATA_WaitUpNummber / 5); FMItemWrite(CF_PREXDATA_TTC, 0); if (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax) TXHData.PREXDATA_WaitUpNummber++; FMItemWrite(CF_PREXDATA_WaitUpNummber, 0); TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 0; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber; for (i = 0; i < 6; i++) TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i]; } else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; for (i = 0; i < 6; i++) TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i]; } FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL; TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData; TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME; TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; FMItemWrite(CF_PrintLastRecord, Tempu64); } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState; } } break; case YG_MDConnectControlMode: // 要控制权 { TXHData.POSLOCK_Impower = 1; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x01; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState; } } break; case YG_MDConnectCmdLock: // 锁定 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState; } break; case YG_MDConnectCmdUnLock: // 解锁 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = YG_MDConnectCmdReadFuelVolumeState; } break; } } } break; case PosHongYang: { MD_ConnectRX_pGun = TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunNow; // 提取指令抢号 MD_ConnectRX_Len = MD_Connect_RX_Buff[MD_ConnectRX_Port][0]; MD_ConnectRX_CMD = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next; // 提取命令码,,可能会有时间差,发送命令已经变更,还未发送的时候收到上一次指令,要想办法处理 Temp = InteiHEXCheck(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], MD_ConnectRX_Len); if (Temp == MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len] && MD_Connect_RX_Buff[MD_ConnectRX_Port][1] > 0) // 判断校验位 { TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0; switch (MD_ConnectRX_CMD) { case HY_MDConnectCmdReadFuelData: // 读数据 { if (MD_ConnectRX_Len == 0x0D) { TXHData.HYState.State = MD_Connect_RX_Buff[MD_ConnectRX_Port][1]; TXHData.HYSelfTestState.State = MD_Connect_RX_Buff[MD_ConnectRX_Port][11]; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake <= 3) // 多读几次数据,可能刚上电的数据不对 { if (TXHData.HYSelfTestState.State > 0) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake++; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake >= 4) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1 - TXHData.HYSelfTestState.Flag.GunUp; if (TXHData.HYState.Flag.StartFlag == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag = 1; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x04; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadPrice; } } } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1 - TXHData.HYSelfTestState.Flag.GunUp; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = TXHData.HYState.Flag.StartFlag; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1; } FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag == 0) // 挂枪 { if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0; } else // 提枪 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 1; else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0; } if (TXHData.POS_Info.Link_Flag == 0 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) { if (TXHData.OfflineAuthorize == 1 && (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)) // 离线授权 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == 0) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_NoCard; TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdStart; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); for (i = 0; i < 20; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i] = 0; for (i = 0; i < 10; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CarLicensePlate[i] = 0; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1) { // if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == TXHData.MD_Port_Data[Port].GunData[DeviceNumber].GunNummber)//查找对应的RFID设备号 { if (TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState == 3) // 标签验证通过 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_Card; TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdStart; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } } } } } } FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD == HY_MDConnectCmdWritePrice && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 0) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectASKControlPower; } if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 1) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData; else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadPrice; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } } if (TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.Device_Type == Display_664) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = MD_Connect_u64ToBCD((MD_Connect_RX_Buff[MD_ConnectRX_Port][2] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4]); TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = MD_Connect_u64ToBCD((MD_Connect_RX_Buff[MD_ConnectRX_Port][5] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][6] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][7])); } else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = MD_Connect_u64ToBCD((MD_Connect_RX_Buff[MD_ConnectRX_Port][2] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][4] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][5])); TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = MD_Connect_u64ToBCD((MD_Connect_RX_Buff[MD_ConnectRX_Port][6] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][7] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][8] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][9])); } } } break; case HY_MDConnectCmdStart: // 启动 { if (MD_ConnectRX_Len == 3) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; // TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 1; // FMItemWrite(CF_MD_Port_Data,MD_ConnectRX_Port); } } break; case HY_MDConnectCmdStop: // 停机 { if (MD_ConnectRX_Len == 3) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData; } break; case HY_MDConnectCmdWritePrsetSale: // 预置金额 { if (MD_ConnectRX_Len == 3) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData; } else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdStart; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } } } break; case HY_MDConnectCmdWritePrsetVolume: // 预置油量 { if (MD_ConnectRX_Len == 3) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData; } else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdStart; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } } } break; case HY_MDConnectCmdReadPrice: // 读单价 { if (MD_ConnectRX_Len == 0x08) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price = MD_Connect_u64ToBCD((MD_Connect_RX_Buff[MD_ConnectRX_Port][2] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][4] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][5]); if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x05; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadTotal; } else { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; } else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadTotal; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } } } } break; case HY_MDConnectCmdWritePrice: // xie单价 { if (MD_ConnectRX_Len == 3) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].MB_CMD_Next_End = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadPrice; } } break; case HY_MDConnectCmdReadTotal: // 读总累 { if (MD_ConnectRX_Len == 0x0F) { if (TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.Device_Type == Display_664) { Tempu64 = 0; for (i = 0; i < 5; i++) { Tempu64 <<= 8; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][2 + 4 - i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = Tempu64; Tempu64 = 0; for (i = 0; i < 5; i++) { Tempu64 <<= 8; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][7 + 4 - i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = Tempu64; } else { Tempu64 = 0; for (i = 0; i < 6; i++) { Tempu64 <<= 8; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][2 + 5 - i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = Tempu64; Tempu64 = 0; for (i = 0; i < 6; i++) { Tempu64 <<= 8; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][8 + 5 - i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = Tempu64; } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun; // 计算打印存储位置 if (TXHData.POS_Info.Link_Flag == 0 // 离线了,判断一下是不是需要离线记录 || (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 自主授权模式,判断一下是不是需要离线记录 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType > NowAuthorizeType_Online) // 离线启动的,判断一下是不是需要离线记录 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = 0; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].RTIME = TXHData.CTIME; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0; for (i = 0; i < 6; i++) TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i] = TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i + 4]; // 卡号信息有10字节,这里只取后6 for (i = 0; i < 10; i++) TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i] = 0; AT45DBItemWrite(CA_PREXDATA, TXHData.PREXDATA_WaitUpNummber / 5); FMItemWrite(CF_PREXDATA_TTC, 0); if (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax) TXHData.PREXDATA_WaitUpNummber++; FMItemWrite(CF_PREXDATA_WaitUpNummber, 0); TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 0; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber; for (i = 0; i < 6; i++) TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i]; } else { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; for (i = 0; i < 6; i++) TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i]; } TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL; TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData; TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME; TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; FMItemWrite(CF_PrintLastRecord, Tempu64); TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0; } else { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData; } } break; case HY_MDConnectASKControlPower: // 要控制权 { if (MD_ConnectRX_Len == 3) { TXHData.POSLOCK_Impower = 1; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x01; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD == HY_MDConnectCmdWritePrice) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdWritePrice; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYGunNeedCMD = 0; } } } break; case HY_MDConnectReturnControlPower: // 还控制权 { if (MD_ConnectRX_Len == 3) { TXHData.POSLOCK_Impower = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = HY_MDConnectCmdReadFuelData; } } break; } } } break; case PosSSLan: // TXHData.LoopGunNextFlag { if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x04) MD_ConnectRX_CMD = 0x04; else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x15) MD_ConnectRX_CMD = 0x15; if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][1]) == 0x1030) MD_ConnectRX_CMD = LY_MDConnectCmdACK0; else if (((MD_Connect_RX_Buff[MD_ConnectRX_Port][0] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][1]) == 0x1031) MD_ConnectRX_CMD = LY_MDConnectCmdACK1; else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x02) { // BCC_CheckSum(&MD_Connect_RX_Buff[MD_ConnectRX_Port][1] , 5);//校验 MD_ConnectRX_CMD = (MD_Connect_RX_Buff[MD_ConnectRX_Port][3] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][4]; } MD_ConnectRX_pGun_Father = TXHData.MD_Port_Info[MD_ConnectRX_Port].PumpNow; // 表示 MD_ConnectRX_pGun = TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow; // 设备位置 TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun_Father] = 0; for (i = 0; i < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; i++) // 同一父设备下的子设备,握手状态同步 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake; } switch (MD_ConnectRX_CMD) { case LY_MDConnectCmdACK0: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x05) { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x06; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdHandshake; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x0a) { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x0b; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdReadTotal; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x0f) { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x10; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdReadState; } else { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next == LY_MDConnectCmdWritePrice) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow].GunState.Flag.UpdateDisplay = 1; } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need != LY_MDConnectCmdPoll) { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdPoll; } } } break; case LY_MDConnectCmdACK1: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x08) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x08; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x0b) { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x0c; } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next == LY_MDConnectCmdAuthorize) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdPoll; } break; case 0x3030: // 握手1 { for (i = 0; i < 6; i++) Buff[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i]; TempBCD = do_crc(Buff, 6); TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun_Father].LYHandshakeCRC = ((TempBCD >> 8) + TempBCD) % 256; // TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LYHandshakeCRC = Tempu64 >> 4; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun_Father].Handshake = 0x04; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdACK1; } break; case 0x04: // { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake < 0x04) // 等待握手 { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdPoll; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake++; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == 0x04) // 如果三次没有收到握手,跳过 { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x0a; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == 0x04) // 收到握手,开始验证 { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x05; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x08) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x09; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdACK1; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x09) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x0a; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x0d) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x0e; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdPoll; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x0e) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x0f; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x10) { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x11; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdPoll; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdPoll; for (i = 0; i < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; i++) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.Online = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.UpdateDisplay = 1; } if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0) TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need != LY_MDConnectCmdPoll) { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need != LY_MDConnectCmdReadState) TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } else { if(TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].LTDelayTimer.Flag == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].LTDelayTimer.Flag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdReadTotal; } else { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdPoll; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; } } } } break; case 0x15: // 失败 { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdPoll; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdPoll; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } break; case 0x3630: // 握手2 { // if(TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x08) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x09; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdACK1; } } break; case 0x3632: // 报错信息 { // if(TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x08) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdACK1; } } break; case 0x3631: // 状态 { if (MD_Connect_RX_Buff[MD_ConnectRX_Port][23] >= 0x31) TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow = MD_Connect_RX_Buff[MD_ConnectRX_Port][23] - 0x31; else TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow = 0; DeviceNumber = TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow; // 根据当前子设备所在的付设备中的位置,推算设备号 if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdACK1; // if(TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.State != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.State) { if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x30 && TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].LYGunState == 0x31) { // if(TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Call = 0; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].LYGunState == 0x33) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].WaitPREXDATA_flag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdReadTotal; } TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.GunUP_Flag = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.Start_Flag = 0; } else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x31 && TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].WaitPREXDATA_flag == 0) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Call = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.GunUP_Flag = 1; } TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.Start_Flag = 0; if (TXHData.POS_Info.Link_Flag == 0 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunControlState == Control_BoxAuto) // 离线了,判断一下是不是需要离线授权 { if (TXHData.OfflineAuthorize == 1 && (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)) // 离线授权 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Call == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].AssociatedDevices.Number == 0) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].NowAuthorizeType = NowAuthorizeType_Offline_NoCard; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].OrderNumber = 0x00; TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].FatherNum; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].PresteType = Preset_Sale; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].PresetValue = 0x90000000; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdAuthorize; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Call == 1) { // if(TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == TXHData.MD_Port_Data[Port].GunData[DeviceNumber].GunNummber)//查找对应的RFID设备号 { if (TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].AssociatedDevices.location].RFIDState == 3) // 标签验证通过 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].NowAuthorizeType = NowAuthorizeType_Offline_Card; TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FatherNum; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].PresteType = Preset_Sale; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].PresetValue = 0x90000000; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdAuthorize; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdChoiceGun; } TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].OrderNumber = 0x00; } } } } } } else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x33) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.GunUP_Flag = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.Start_Flag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top; for (i = 0; i < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; i++) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.Online = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.UpdateDisplay = 1; } if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.Start_Flag == 0) { FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdReadState; } else if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x34 && TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.Start_Flag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].WaitPREXDATA_flag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdReadTotal; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].LTDelayTimer.ON_OFF = 1;//加个定时器,用来判断是否完成交易记录的生成 TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].LTDelayTimer.TimerCountMax = 1000*5; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top; for (i = 0; i < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; i++) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.Online = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.UpdateDisplay = 1; } } Tempu64 = 0; for (i = 0; i < 6; i++) { Tempu64 = Tempu64 << 4; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 6] - 0x30; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].FData.OilCNT = Tempu64; Tempu64 = 0; for (i = 0; i < 4; i++) { Tempu64 = Tempu64 << 4; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 13] - 0x30; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Price = Tempu64; Tempu64 = 0; for (i = 0; i < 6; i++) { Tempu64 = Tempu64 << 4; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 17] - 0x30; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].FData.MoneyCNT = Tempu64; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].LYGunState = MD_Connect_RX_Buff[MD_ConnectRX_Port][5]; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].fuelState_B.State = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.State; } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdACK1; // TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; // TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top; // TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdPoll; for (i = 0; i < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; i++) { if (i != TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.State = 0; } TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.Online = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + i].GunState.Flag.UpdateDisplay = 1; } if (MD_Connect_RX_Buff[MD_ConnectRX_Port][5] == 0x30) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.GunUP_Flag = 0; } if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.AuthorizeState == 1 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.Start_Flag == 1) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.AuthorizeState = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.Start_Flag = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.UpdateRecords = 1; Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun; TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].CTOTAL; TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].FData; TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunNummber; TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME; TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Price; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].OrderNumber; FMItemWrite(CF_PrintLastRecord, Tempu64); FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } } } } break; case 0x3635: // 累计 { for (Temp8 = 0; Temp8 < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; Temp8++) { Tempu64 = 0; for (i = 0; i < 10; i++) { Tempu64 = Tempu64 << 4; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 11 + Temp8 * 20] - 0x30; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + Temp8].CTOTAL.TotalLit = Tempu64; Tempu64 = 0; for (i = 0; i < 10; i++) { Tempu64 = Tempu64 << 4; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][i + 21 + Temp8 * 20] - 0x30; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + Temp8].CTOTAL.TotalMoney = Tempu64; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top || TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].WaitPREXDATA_flag == 1) { //TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top; DeviceNumber = TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNow + TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart; // 根据当前子设备所在的付设备中的位置,推算设备号 Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun; if (TXHData.POS_Info.Link_Flag == 0 // 离线了,判断一下是不是需要离线记录 || (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunControlState == Control_BoxAuto) // 自主授权模式,判断一下是不是需要离线记录 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].NowAuthorizeType > NowAuthorizeType_Online) // 离线启动的,判断一下是不是需要离线记录 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].NowAuthorizeType = 0; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].CTOTAL; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].FData; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Price; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].RTIME = TXHData.CTIME; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].OrderNumber; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].OrderNumber = 0; for (i = 0; i < 6; i++) TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i] = TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].AssociatedDevices.location].CardNumber[i + 4]; // 卡号信息有10字节,这里只取后6 for (i = 0; i < 10; i++) TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].AssociatedDevices.location].CardNumber[i] = 0; AT45DBItemWrite(CA_PREXDATA, TXHData.PREXDATA_WaitUpNummber / 5); FMItemWrite(CF_PREXDATA_TTC, 0); if (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax) TXHData.PREXDATA_WaitUpNummber++; FMItemWrite(CF_PREXDATA_WaitUpNummber, 0); TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.UpdateRecords = 0; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber; for (i = 0; i < 6; i++) TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i]; } else { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunState.Flag.UpdateRecords = 1; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].OrderNumber; for (i = 0; i < 6; i++) TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].CardNumber[i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].WaitPREXDATA_flag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].LTDelayTimer.ON_OFF = 0;//加个定时器,用来判断是否完成交易记录的生成 TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].LTDelayTimer.TimerCount = 0; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].CTOTAL; TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].FData; TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].GunNummber; TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME; TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[DeviceNumber].Price; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[DeviceNumber].OrderNumber; FMItemWrite(CF_PrintLastRecord, Tempu64); } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake <= 0x0c) { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Handshake = 0x0d; } TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LY_MDConnectCmdACK1; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Need = LY_MDConnectCmdReadState; } break; } } break; case PosBlueSkyPlus: // TXHData.LoopGunNextFlag { MD_ConnectRX_pGun = MD_Connect_BCDTou64(MD_Connect_RX_Buff[MD_ConnectRX_Port][1]); // 提取指令抢号 for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDeviceTop; DeviceNumber++) if (MD_ConnectRX_pGun == MD_Connect_u64ToBCD(TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[DeviceNumber].Address)) { MD_ConnectRX_pGun_Father = DeviceNumber; break; } MD_ConnectRX_Len = (MD_Connect_RX_Buff[MD_ConnectRX_Port][2] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][3]; Temp16 = CRC_Check(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], MD_ConnectRX_Len); if (Temp16 == ((MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 1])) { TXHData.RNGData = (MD_Connect_RX_Buff[MD_ConnectRX_Port][10] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][11] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][12] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][13]; Bluesky_Decrypt(&MD_Connect_RX_Buff[MD_ConnectRX_Port][14], MD_ConnectRX_Len - 14, TXHData.RNGData); TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCount = TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCountMax; TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun_Father] = 0; MD_ConnectRX_CMDType = MD_Connect_RX_Buff[MD_ConnectRX_Port][15]; Offset = 16; if (MD_ConnectRX_CMDType == 0xA1) // 机指令 { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = 0; MD_ConnectRX_CMD = MD_ConnectRX_CMDType = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++]; switch (MD_ConnectRX_CMD) { case LTP_DriverCMDReadPassword: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Password_Lever = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++]; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Password = (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++]; } break; case LTP_DriverCMDWritePassword: // { } break; case LTP_DriverCMDReadVerAndMac: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Version.VersionFindFlag = 1; for (i = 0; i < 10; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Version.Version[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset + i]; Offset += 10; for (i = 0; i < 12; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Mac[i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset + i]; Offset += 12; for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; DeviceNumber++) // 同一父设备下的子设备,握手状态同步 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + DeviceNumber].Handshake = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + DeviceNumber].GunVersion.VersionFindFlag = 1; for (i = 0; i < 10; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + DeviceNumber].GunVersion.Version[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Version.Version[i]; } } break; case LTP_DriverCMDLock: // { } break; case LTP_DriverCMDUnlock: // { } break; case LTP_DriverCMDSendFrame: // { TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCountMax = TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.MBCountTime * 10; // 周期;//周期调整ms TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].FrameNow = (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset + 1]); Offset += 2; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].FrameNow >= TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData.FrameTop) { TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun_Father] = 6; // 离线 } else TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LTP_DriverCMDSendFrame; } break; } } else if (MD_ConnectRX_CMDType == 0xA2) // 枪指令 { for (DeviceNumber = 0; DeviceNumber < TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber; DeviceNumber++) { MD_ConnectRX_pGun = TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart + DeviceNumber; // Offset++; // 抢号 MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++]; DeviceDataLen = Offset++; // 长度 switch (MD_ConnectRX_CMD) { case LTP_GunCMDReadStateAndData: // { TXHData.LTGunState.State = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++]; if (TXHData.LTGunState.Flag.StartFlag == 1 || TXHData.LTGunState.Flag.GunUp == 0) // 提枪或者加油 { MD_ConnectRX_pGun_SonDeviceBusy = 1; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.OilCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++])); TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData.MoneyCNT = ((MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 24) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++])); TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price = (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 16) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++] << 8) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++]); } case LTP_GunCMDReadState: // { if (MD_ConnectRX_CMD == LTP_GunCMDReadState) // { TXHData.LTGunState.State = MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++]; if (TXHData.LTGunState.Flag.StartFlag == 1 || TXHData.LTGunState.Flag.GunUp == 0) // 提枪或者加油 { MD_ConnectRX_pGun_SonDeviceBusy = 1; } if (DeviceNumber == (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonNumber - 1)) { if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online == 1 && MD_ConnectRX_pGun_SonDeviceBusy == 0) { if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart].ROM_UpData_State.Flag.Update_Flag && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart].ROM_UpData_State.Flag.Update_Flag == 0) { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Version.VersionFindFlag) { for (i = 0; i < 6; i++) // 判断是不是同一个系列 if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Version.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i]) break; if (i == 6) { for (i = 6; i < 10; i++) // 判断版本号是不是相同 if (TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].Version.Version[i] != TXHData.MD_Port_Data[MD_ConnectRX_Port].PortData.ROM_UpData_Version[i]) break; if (i != 10) { TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].FrameNow = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].SonStart].ROM_UpData_State.Flag.Update_Flag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].FatherDevice[MD_ConnectRX_pGun_Father].MB_CMD_Next = LTP_DriverCMDSendFrame; } } } } } } } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1 - TXHData.LTGunState.Flag.GunUp; if (TXHData.LTGunState.Flag.StartFlag == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1) { // sprintf(Buff,"%d-AuthorizeState = 1",MD_ConnectRX_pGun); // Log_Task(Buff,TrueCharBuffSize(Buff),MD_ConnectRX_Port,Info_String); TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag = 1; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 0x02; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadTotal; } else { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 1 - TXHData.LTGunState.Flag.GunUp; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag = TXHData.LTGunState.Flag.StartFlag; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.Start_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadStateAndData; if (TXHData.POS_Info.Link_Flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number) { TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState = 0x11; TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = RFID_MDConnectCmdWriteFullingInfo; } } else { // sprintf(Buff,"%d-WaitPREXDATA_flag = 1",MD_ConnectRX_pGun); // Log_Task(Buff,TrueCharBuffSize(Buff),MD_ConnectRX_Port,Info_String); TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadTotal; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.TimerCountMax = 1000 * 5; if (TXHData.POS_Info.Link_Flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number) { TXHData.MD_Port_Data[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunData[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].GunState.Flag.UpdateDisplay = 0; TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState = 0; TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].MB_CMD_Next = RFID_MDConnectCmdWriteFullingInfo; } } FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag != TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].fuelState_B.Flag.GunUP_Flag = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag; if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag == 0) // 挂枪 { if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF == 0 && TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 0) // 已经授权了,但是没有启动直接挂枪,同样要走结算流程 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadTotal; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.TimerCountMax = 1000 * 5; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0; } else // 提枪 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag == 0) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 1; else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call = 0; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.GunUP_Flag = 0; } if (TXHData.POS_Info.Link_Flag == 0 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 离线了,判断一下是不是需要离线授权 { if (TXHData.OfflineAuthorize == 1 && (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax)) // 离线授权 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Number == 0) { TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDAuthorize; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_NoCard; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); for (i = 0; i < 6; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i] = 0; for (i = 0; i < 15; i++) TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CarLicensePlate[i] = 0; } else if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Call == 1) { if (TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState == 3) // 标签验证通过 { TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].RFIDState = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].pGunCapture = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDAuthorize; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0x00; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = NowAuthorizeType_Offline_Card; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } } } } } FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); } if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag == 1) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.Flag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadTotal; } if (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Start_Flag == 1 && TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next == LTP_GunCMDReadState) { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadStateAndData; } } } break; case LTP_GunCMDReadTotal: // { Tempu64 = 0; for (i = 0; i < 6; i++) { Tempu64 <<= 8; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalLit = Tempu64; Tempu64 = 0; for (i = 0; i < 6; i++) { Tempu64 <<= 8; Tempu64 |= MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset++]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL.TotalMoney = Tempu64; if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake == TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { Tempu64 = MD_ConnectRX_Port * 16 + MD_ConnectRX_pGun; // 计算打印存储位置 if (TXHData.POS_Info.Link_Flag == 0 // 离线了,判断一下是不是需要离线记录 || (TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunControlState == Control_BoxAuto) // 自主授权模式,判断一下是不是需要离线记录 || TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType > NowAuthorizeType_Online) // 离线启动的,判断一下是不是需要离线记录 { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].NowAuthorizeType = 0; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].RTIME = TXHData.CTIME; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price; TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber = 0; for (i = 0; i < 6; i++) TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i] = TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i + 4]; // 卡号信息有10字节,这里只取后6 for (i = 0; i < 10; i++) TXHData.MD_Port_Info[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.Port].GunInfo[TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].AssociatedDevices.location].CardNumber[i] = 0; AT45DBItemWrite(CA_PREXDATA, TXHData.PREXDATA_WaitUpNummber / 5); FMItemWrite(CF_PREXDATA_TTC, 0); if (TXHData.PREXDATA_WaitUpNummber < TXHData.OfflineAuthorizeNumberMax) TXHData.PREXDATA_WaitUpNummber++; FMItemWrite(CF_PREXDATA_WaitUpNummber, 0); TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].OrderNumber; for (i = 0; i < 6; i++) TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.PREXDATA[TXHData.PREXDATA_WaitUpNummber % 5].CardNum[i]; } else { TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateRecords = 1; TXHData.PrintLastRecord[Tempu64].OrderNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].OrderNumber; for (i = 0; i < 6; i++) TXHData.PrintLastRecord[Tempu64].CardNum[i] = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CardNumber[i]; } TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); TXHData.PrintLastRecord[Tempu64].CTOTAL = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].CTOTAL; TXHData.PrintLastRecord[Tempu64].FData = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].FData; TXHData.PrintLastRecord[Tempu64].GunNumber = TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunNummber; TXHData.PrintLastRecord[Tempu64].RTIME = TXHData.CTIME; TXHData.PrintLastRecord[Tempu64].Price = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Price; FMItemWrite(CF_PrintLastRecord, Tempu64); TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].WaitPREXDATA_flag = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.TimerCount = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].LTDelayTimer.ON_OFF = 0; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState; // sprintf(Buff,"%d-WaitPREXDATA_flag = 0",MD_ConnectRX_pGun); // Log_Task(Buff,TrueCharBuffSize(Buff),MD_ConnectRX_Port,Info_String); } else { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.UpdateDisplay = 1; TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.Online = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top; } } break; case LTP_GunCMDWritePrset: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState; Offset += DeviceDataLen; } break; case LTP_GunCMDAuthorize: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState; TXHData.MD_Port_Info[MD_ConnectRX_Port].LoopGunNextFlag = 1; if (MD_Connect_RX_Buff[MD_ConnectRX_Port][Offset] == 0x59) TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 1; else TXHData.MD_Port_Data[MD_ConnectRX_Port].GunData[MD_ConnectRX_pGun].GunState.Flag.AuthorizeState = 0; FMItemWrite(CF_MD_Port_Data, MD_ConnectRX_Port); Offset += DeviceDataLen; } break; case LTP_GunCMDStop: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState; Offset += DeviceDataLen; } break; case LTP_GunCMDContinue: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState; Offset += DeviceDataLen; } break; case LTP_GunCMDSuspend: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState; Offset += DeviceDataLen; } break; case LTP_GunCMDReadEvent: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState; Offset += DeviceDataLen; } break; case LTP_GunCMDReadError: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState; Offset += DeviceDataLen; } break; case LTP_GunCMDReadParameter: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState; Offset += DeviceDataLen; } break; case LTP_GunCMDWriteParameter: // { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = LTP_GunCMDReadState; Offset += DeviceDataLen; } break; } } } } } break; case PosPLC: { if (MD_Connect_RX_Buff[MD_ConnectRX_Port][0] == 0x03) { MD_ConnectRX_Len = MD_Connect_RX_Buff[MD_ConnectRX_Port][2]; Tempu64 = (MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 4] << 8) | MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 3]; TempBCD = CRC_Check(&MD_Connect_RX_Buff[MD_ConnectRX_Port][0], MD_ConnectRX_Len + 3); if (Tempu64 == TempBCD) { TXHData.CNGPLCState.Flag.Online = 1; TXHData.MBCountCutNum[MD_ConnectRX_Port][0] = 0; MD_ConnectRX_CMD = TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next; switch (MD_ConnectRX_CMD) { case PLC_MDConnectCmdReadData: { for (i = 0; i < MD_ConnectRX_Len; i += 4) { TXHData.CNGPLCData.Buff[i + 0] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i + 3]; TXHData.CNGPLCData.Buff[i + 1] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i + 2]; TXHData.CNGPLCData.Buff[i + 2] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i + 1]; TXHData.CNGPLCData.Buff[i + 3] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i + 0]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = PLC_MDConnectCmdReadErro; } break; case PLC_MDConnectCmdReadErro: { for (i = 0; i < MD_ConnectRX_Len; i += 2) { TXHData.CNGPLCData.Buff[52 + i] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i + 1]; TXHData.CNGPLCData.Buff[52 + i + 1] = MD_Connect_RX_Buff[MD_ConnectRX_Port][3 + i]; } TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = PLC_MDConnectCmdReadData; } break; } } } } break; case PosPrice1_4: { MD_ConnectRX_pGun = 0; MD_ConnectRX_Len = MD_Connect_RX_Buff[MD_ConnectRX_Port][2]; TempBCD = Price_DataCheck(&MD_Connect_RX_Buff[MD_ConnectRX_Port][2], MD_ConnectRX_Len - 1); Tempu64 = MD_Connect_RX_Buff[MD_ConnectRX_Port][MD_ConnectRX_Len + 1]; if (Tempu64 == TempBCD) { TXHData.MBCountCutNum[MD_ConnectRX_Port][MD_ConnectRX_pGun] = 0; MD_ConnectRX_CMD = MD_Connect_RX_Buff[MD_ConnectRX_Port][4]; switch (MD_ConnectRX_CMD) { case Price_MDConnectCmdWriteParameter: // 写参数 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = Price_MDConnectCmdReadPrice; } break; case Price_MDConnectCmdReadParameter: // 读参数 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = Price_MDConnectCmdReadPrice; TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.State.Flag.Online = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.SingleOrDouble = MD_Connect_RX_Buff[MD_ConnectRX_Port][7]; TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.PriceNumber = MD_Connect_RX_Buff[MD_ConnectRX_Port][8]; TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.Length = MD_Connect_RX_Buff[MD_ConnectRX_Port][9]; TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.Brightness = MD_Connect_RX_Buff[MD_ConnectRX_Port][11]; } break; case Price_MDConnectCmdWritePrice: // 写单价 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = Price_MDConnectCmdReadPrice; } break; case Price_MDConnectCmdReadPrice: // 读单价 { if (TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake < TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top) { TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.State.Flag.UpdateDisplay = 1; TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].Handshake = TXHData.MD_Port_Info[MD_ConnectRX_Port].Handshake_Top; } TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.State.Flag.Online = 1; for (i = 0; i < TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.PriceNumber; i++) { TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.Price[i] = 0; for (j = 0; j < TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.Length / 2; j++) { TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.Price[i] |= MD_Connect_RX_Buff[MD_ConnectRX_Port][5 + j + i * TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.Length / 2] << (8 * (TXHData.MD_Port_Info[MD_ConnectRX_Port].PriceTagData.Length / 2 - 1 - j)); } } } break; case Price_MDConnectCmdWriteDecimal: // 写小数位 { TXHData.MD_Port_Info[MD_ConnectRX_Port].GunInfo[MD_ConnectRX_pGun].MB_CMD_Next = Price_MDConnectCmdWritePrice; } break; } } } break; } for (i = 0; i < 20; i++) MD_Connect_RX_Buff[MD_ConnectRX_Port][i] = 0; } else if (TXHData.MDConnectState[MD_ConnectRX_Port].Flag.WorkMode == 0) // WiFi指令模式 { switch (TXHData.MDConnectState[MD_ConnectRX_Port].Flag.SetModeCMDNext) { case WIFI_ATRec: { Temp16 = mystrstr(MD_Connect_RX_Buff[MD_ConnectRX_Port], "OK"); if (Temp16) { TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCount = 0; TXHData.MBCountTimer[MD_ConnectRX_Port].Flag = 1; TXHData.MDConnectState[MD_ConnectRX_Port].Flag.SetModeCMDNext = WIFI_WMODE; } } break; case WIFI_WMODE: { Temp16 = mystrstr(MD_Connect_RX_Buff[MD_ConnectRX_Port], "OK"); if (Temp16) { TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCount = 0; TXHData.MBCountTimer[MD_ConnectRX_Port].Flag = 1; TXHData.MDConnectState[MD_ConnectRX_Port].Flag.SetModeCMDNext = WIFI_WifiRST; } } break; case WIFI_WifiWSSSID: { Temp16 = mystrstr(MD_Connect_RX_Buff[MD_ConnectRX_Port], "OK"); if (Temp16) { TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCount = 0; TXHData.MBCountTimer[MD_ConnectRX_Port].Flag = 1; TXHData.MDConnectState[MD_ConnectRX_Port].Flag.SetModeCMDNext = WIFI_WifiSOCKET; } } break; case WIFI_WifiRSSI: { // Temp16 = mystrstr(MD_Connect_RX_Buff[MD_ConnectRX_Port],"atus:"); // if(Temp16) { TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCount = 0; TXHData.MBCountTimer[MD_ConnectRX_Port].Flag = 1; TXHData.POS_Info.WiFiRSSI = MD_Connect_BCDTou64(((MD_Connect_RX_Buff[MD_ConnectRX_Port][Temp16 + 5] - 0x30) << 4) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Temp16 + 6] - 0x30)); Temp16 = mystrstr(MD_Connect_RX_Buff[MD_ConnectRX_Port], ","); if (Temp16) { if (MD_Connect_RX_Buff[MD_ConnectRX_Port][Temp16 + 1] >= 0x30) TXHData.POS_Info.WiFiChannel = MD_Connect_BCDTou64(((MD_Connect_RX_Buff[MD_ConnectRX_Port][Temp16] - 0x30) << 4) | (MD_Connect_RX_Buff[MD_ConnectRX_Port][Temp16 + 1] - 0x30)); else TXHData.POS_Info.WiFiChannel = MD_Connect_BCDTou64(MD_Connect_RX_Buff[MD_ConnectRX_Port][Temp16] - 0x30); } TXHData.MDConnectState[MD_ConnectRX_Port].Flag.SetModeCMDNext = WIFI_WifiSOCKET; } } break; case WIFI_WifiSOCKET: { Temp16 = mystrstr(MD_Connect_RX_Buff[MD_ConnectRX_Port], "OK"); if (Temp16) { BEEP_OFF; TXHData.MDConnectState[MD_ConnectRX_Port].Flag.WorkMode = 1; TXHData.MBCountTimer[MD_ConnectRX_Port].TimerCountMax = 1000; } } break; case WIFI_WifiRST: { Temp16 = mystrstr(MD_Connect_RX_Buff[MD_ConnectRX_Port], "OK"); if (Temp16) { TXHData.POSNetSetState.Flag.WorkMode = 0; TXHData.MDConnectState[MD_ConnectRX_Port].Flag.SetModeCMDNext = WIFI_WifiWSSSID; // TXHData.POSNetSetState.Flag.POSNetSetNeedFlag = 0; TXHData.POSReLinkTimer.Flag = 0; TXHData.POSReLinkTimer.TimerCount = 0; } } break; } } } }