void RobotOpenClass::parsePacket() { /* ---PACKET FORMAT--- * Message Type (1 byte) * Protocol Version (1 byte) * Device ID (1 byte) * ...Bundle Payloads... (1 length byte + 1 identifier byte + payload) * CRC16 Checksum (2 bytes) */ unsigned int crc16_recv = (_packetBufferAccessor[_packetBufferSize - 2] << 8) | _packetBufferAccessor[_packetBufferSize - 1]; if (_packetBufferAccessor[1] == PROTOCOL_VER && calc_crc16(_packetBufferAccessor, _packetBufferSize - 2) == crc16_recv) { // VALID PACKET if (_packetBufferAccessor[0] == CONTROL_PACKET && _packetBufferSize > 5) { swapValidPacket(); // This swaps the buffer and the "active" packet data pointers // Update the PWM generator values over serial unsigned int crc16_pwm = calc_crc16(_pwmSerialData, 12); _pwmSerialData[12] = crc16_pwm >> 8; _pwmSerialData[13] = (unsigned char)(crc16_pwm & 0xFF); for (int i = 0; i <= 13; i++) Serial.write(_pwmSerialData[i]); // Update the Relay values over serial unsigned int crc16_relay = calc_crc16(_relaySerialData, 12) + 1; _relaySerialData[12] = crc16_relay >> 8; _relaySerialData[13] = (unsigned char)(crc16_relay & 0xFF); for (int i = 0; i <= 13; i++) Serial.write(_relaySerialData[i]); // Make sure the system stays active _lastUpdate = millis(); } publishDS(); }
int8_t uart_rx_frame(uint8_t *pdata) { #ifdef CONFIG_LINKLAY_UART uint8_t i, rlen = 0; uint8_t *pbuf; uint16_t crc; if (0 == uart[CONFIG_LINKLAY_UART].RxEN) { uart[CONFIG_LINKLAY_UART].RxEN = 1; } if (uart_recv[CONFIG_LINKLAY_UART].rx_finish == 0) { return 0; } rlen = uart_recv[CONFIG_LINKLAY_UART].rx_Len-3; pbuf = &uart_recv[CONFIG_LINKLAY_UART].rx_buf[0]; crc = calc_crc16(pbuf[3], 0xffff); for (i = 1; i< rlen; i++) { crc = calc_crc16(pbuf[i+3], crc); } uart_recv[CONFIG_LINKLAY_UART].rx_finish = 0; if (crc != pbuf[1]*256 + pbuf[2]) { return -1; } MMemcpy(pdata,&pbuf[3],rlen); return rlen; #else return 0; #endif }
SSRecord::SSRecord (SSFileImpPtr filePtr, long offset) : m_FileImpPtr (filePtr), m_Offset(offset), m_pBuffer(NULL), m_Len (0) { int fileLength = m_FileImpPtr->Size (); if (!m_FileImpPtr->Read (offset, &m_Header, sizeof(m_Header))) throw SSException ("could not read record header"); // OPTIMIZE: We do not nead to read all the record payload in advance (esp. for FD records) if (m_Header.size > 0) { if (offset + sizeof(m_Header) + m_Header.size > fileLength) throw SSRecordException ("bad header: length variable exceeds file size"); m_pBuffer = new byte[m_Header.size]; if (!m_FileImpPtr->Read (/*offset + sizeof(m_Header), */ m_pBuffer, m_Header.size)) throw SSException ("could not read record data"); short crc = calc_crc16 (m_pBuffer, m_Header.size); if (m_Header.checksum != (short)crc && m_Header.checksum != 0) { SSRecordException ex("wrong checksum"); Warning (ex.what()); _RAISE (ex); } } m_Len = m_Header.size; }
int _stdcall MakeBuf_SetRegNo(TSDeviceInfo *pDevice, TSCmdBuffer *pBuffer,unsigned char *regno) { unsigned char ucCommandByte,ucRegNo[4],out[3]; int addr,len; if(pDevice->nHardware != 5301) ucCommandByte = CMD_SETREGNO_TERMINAL; else ucCommandByte = CMD_SETREGNO_NET; addr = pDevice->nAddr; len = 8; SVC_DSP_2_HEX((unsigned char *)pDevice->sRegNo,ucRegNo,4); memcpy(pBuffer->pBuffer,ucRegNo,4); memcpy(&pBuffer->pBuffer[4],regno,4); pBuffer->nCmdSize = PubCommands(addr,ucCommandByte,len,pBuffer->pBuffer,pDevice->nLevel,pDevice->sLevelArray); if(pDevice->nHardware != 5301) { pBuffer->pBuffer[2] = CMD_SETREGNO_TERMINAL; calc_crc16(pBuffer->nCmdSize-3,pBuffer->pBuffer,out); pBuffer->pBuffer[pBuffer->nCmdSize-3] = out[0]; pBuffer->pBuffer[pBuffer->nCmdSize-2] = out[1]; } pBuffer->nTimeOut1 = 50; pBuffer->nTimeOut1 = 1000; return RET_OK; }
/////////////////////////////////////////////////////////////////////////////////////////// /// 功 能: -- 收到包的一部分后对其进行校验, 检测是否合法。 /// 参 数: /// pBuffer -- 要校验的数据块 /// nBufferSize -- 数据块长度 /// /// 返 回 值: /// 见返回值定义 /// /// 说 明: /// 只检验协议的正确性,如包的数据长度, CRC等错误 /////////////////////////////////////////////////////////////////////////////////////////// int VerifyBufferValid(unsigned char *pBuffer, int nBufferSize) { unsigned char out[3]; int flag; flag = calc_crc16((unsigned char)nBufferSize,pBuffer,out); if(flag == 1) return RET_OK; else return RET_DATACRC_ERROR; }
void check_fval(int fd, mkv_t *kv) { uint16_t crc = calc_crc16(kv->v.data, kv->v.len); if (kv->vcrc != crc) { char fp[256]; get_fname(fd, fp, sizeof(fp)); FATAL("%s corrupt!!", fp); ASSERT(kv->vcrc == crc); } }
//CRC检测 bool COperator::CRCValid(BYTE *pszByte, int nPos) { unsigned char out[3]; calc_crc16(nPos, pszByte, out); if( pszByte[nPos] == out[0] && pszByte[nPos+1] == out[1] ) return true; else { OnCRCError(); return false; } }
uint8_t uart_send_frame(uint8_t *pdata, uint8_t len) { #ifdef CONFIG_LINKLAY_UART uint16_t crc; uint8_t i; crc = calc_crc16(pdata[0], 0xFFFF); for (i = 1; i < len; i++) { crc = calc_crc16(pdata[i], crc); } UART_CHAR_SEND(CONFIG_LINKLAY_UART, 0xaa); UART_CHAR_SEND(CONFIG_LINKLAY_UART, len+4);// 0xaa len crc[0] crc[1] UART_CHAR_SEND(CONFIG_LINKLAY_UART, crc>>8); UART_CHAR_SEND(CONFIG_LINKLAY_UART, crc%256); uart_tx_bytes(pdata, len); return len; #else return 0; #endif }
SSRecord::SSRecord (eType type, const void* buffer, int len) : m_Offset(0), m_pBuffer(NULL), m_Len (0) { m_Header.checksum = calc_crc16 (buffer, len); strncpy (m_Header.type, TypeToString (type).c_str(), 2); m_Header.size = len; // OPTIMIZE: We do not nead to read all the record payload in advance (esp. for FD records) if (m_Header.size > 0) { m_pBuffer = new byte[m_Header.size]; memcpy (m_pBuffer, buffer, m_Header.size); } m_Len = m_Header.size; }
/// 功能:下传补助名单 /// 参数:*List /// 3字节交易卡号 /// 2字节批号 /// 2字节金额(低位在前) /// 1字节加减钱标记(0---加,1---减) /// Ver:1.0 ------ 20040228 /// Auth:Lina int _stdcall MakeBuf_SetAssisList(TSDeviceInfo *pDevice,TSCmdBuffer *pBuffer,unsigned char *Buffer) { unsigned char ucCommandByte,out[3]; int addr,len; ucCommandByte = CMD_SETASSISTLIST; addr = pDevice->nAddr; len = 10; calc_crc16(8,Buffer,out); memcpy(pBuffer->pBuffer,Buffer,8); pBuffer->pBuffer[8] = out[0]; pBuffer->pBuffer[9] = out[1]; pBuffer->nCmdSize = PubCommands(addr,ucCommandByte,len,pBuffer->pBuffer,pDevice->nLevel,pDevice->sLevelArray); pBuffer->nTimeOut1 = 50; pBuffer->nTimeOut1 = 1000; return RET_OK; }
/// 功能:下传白名单版本4 /// 参数:*date ---- 六子节黑名单版本4 /// Ver: 1.0 ------- 20040227 /// Auth:Lina int _stdcall MakeBuf_SetWhiteVersion4(TSDeviceInfo *pDevice,TSCmdBuffer *pBuffer,unsigned char *date) { unsigned char ucRegNo[4],ucCommandByte; int addr,len; ucCommandByte = CMD_SETWHITE_VERSION4; addr = pDevice->nAddr; len = 16; unsigned char out[5]; SVC_DSP_2_HEX((unsigned char *)pDevice->sRegNo,ucRegNo,4); memcpy(pBuffer->pBuffer,ucRegNo,4); memcpy(&pBuffer->pBuffer[4],date,10); calc_crc16(14,pBuffer->pBuffer,out); pBuffer->pBuffer[14] = out[0]; pBuffer->pBuffer[15] = out[1]; pBuffer->nCmdSize = PubCommands(addr,ucCommandByte,len,pBuffer->pBuffer,pDevice->nLevel,pDevice->sLevelArray); pBuffer->nTimeOut1 = 200; pBuffer->nTimeOut1 = 1000; return RET_OK; }
/* Recupere les bytes pour composer le crc et le retourne */ unsigned int crc16_protocole(TrameProtocole trame) { byte buff[trame.length + 5]; getBytesCrc(trame,buff); return calc_crc16(buff,trame.length + 5); }
//收集扎帐历史数据 void CollectHistoryCheckInData_Process(TSSmartDoc *pDoc,TSSmartBuffer *pBuffer) { int crcFlag; unsigned char ucNo,out[3],ucAddr,ucFlowNo[2]; char cTemp[256]; CTime tm=CTime::GetCurrentTime(); FILE *fp; char filename[512],temp[512]; WORD wFlowNo,wFlow1; ucNo = pDoc->m_ucNo; if(pBuffer->ucMode == 2) //有数据返回 { if(pDoc->m_wNoReponseTime != 0) //由不通讯到通讯,在规定的次数内应发出通讯成功信息 { pDoc->m_wNoReponseTime = 0; //本部分目前缺少代码 } crcFlag = calc_crc16((unsigned char)(pBuffer->wLength),pBuffer->ucBuffer,out); if(crcFlag == 1)//CRC正确 { ucAddr = pBuffer->ucBuffer[1]; if(ucAddr == pDoc->m_TerminalInfo[ucNo].ucMacNo) //返回数据体机号相符合 { if(pBuffer->ucBuffer[2] == 0) //正确 { GetCurrentDirectory(512,temp); sprintf(filename,"%s\\log\\No%.2X%.2X%.2X%.2X_%.2d%.2d%.2d扎帐历史数据.txt",temp, pDoc->m_TerminalInfo[ucNo].ucIDNo[0],pDoc->m_TerminalInfo[ucNo].ucIDNo[1], pDoc->m_TerminalInfo[ucNo].ucIDNo[2],pDoc->m_TerminalInfo[ucNo].ucIDNo[3], tm.GetYear(),tm.GetMonth(),tm.GetDay()); fp = fopen(filename,"a+"); sprintf(temp,"%.2d年%.2d月%.2d日 %.2d时%.2d分%.2d秒收集扎帐历史数据\n", tm.GetYear(),tm.GetMonth(),tm.GetDay(),tm.GetHour(),tm.GetMinute(),tm.GetSecond()); fputs(temp,fp); sprintf(temp,"注册号 0x%.2X%.2X%.2X%.2X\n",pBuffer->ucBuffer[4],pBuffer->ucBuffer[5],pBuffer->ucBuffer[6],pBuffer->ucBuffer[7]);fputs(temp,fp); sprintf(temp,"通信版本 0x%.2X\n",pBuffer->ucBuffer[8]);fputs(temp,fp); sprintf(temp,"启动原因 0x%.2X\n",pBuffer->ucBuffer[9]);fputs(temp,fp); sprintf(temp,"扎帐流水 %d\n", pBuffer->ucBuffer[10]*256+pBuffer->ucBuffer[11]);fputs(temp,fp); sprintf(temp,"扎帐时间 %.2d%.2d%.2d-%.2d%.2d%.2d\n",pBuffer->ucBuffer[12],pBuffer->ucBuffer[13], pBuffer->ucBuffer[14],pBuffer->ucBuffer[15], pBuffer->ucBuffer[16],pBuffer->ucBuffer[17]); fputs(temp,fp); sprintf(temp,"起始流水号 %d\n",pBuffer->ucBuffer[18]*256+pBuffer->ucBuffer[19]);fputs(temp,fp); sprintf(temp,"结束流水号 %d\n",pBuffer->ucBuffer[20]*256+pBuffer->ucBuffer[21]);fputs(temp,fp); sprintf(temp,"正常消费总笔数 %d\n",pBuffer->ucBuffer[22]*256+pBuffer->ucBuffer[23]);fputs(temp,fp); sprintf(temp,"正常消费总金额 %d\n",pBuffer->ucBuffer[24]+pBuffer->ucBuffer[25]*256+pBuffer->ucBuffer[26]*65536);fputs(temp,fp); sprintf(temp,"冲正消费总笔数 %d\n",pBuffer->ucBuffer[27]*256+pBuffer->ucBuffer[28]);fputs(temp,fp); sprintf(temp,"冲正消费总金额 %d\n",pBuffer->ucBuffer[29]+pBuffer->ucBuffer[30]*256+pBuffer->ucBuffer[31]*65536);fputs(temp,fp); sprintf(temp,"异常消费总笔数 %d\n",pBuffer->ucBuffer[32]*256+pBuffer->ucBuffer[33]);fputs(temp,fp); sprintf(temp,"异常消费总金额 %d\n",pBuffer->ucBuffer[34]+pBuffer->ucBuffer[35]*256+pBuffer->ucBuffer[36]*65536);fputs(temp,fp); sprintf(temp,"其他交易总笔数 %d\n",pBuffer->ucBuffer[37]*256+pBuffer->ucBuffer[38]);fputs(temp,fp); sprintf(temp,"扎帐标记 0x%.2X\n",pBuffer->ucBuffer[39]);fputs(temp,fp); sprintf(temp,"CRC=%.2X%.2X",pBuffer->ucBuffer[40],pBuffer->ucBuffer[41]); fputs(temp,fp); crcFlag = calc_crc16(38,&(pBuffer->ucBuffer[4]),out); if(crcFlag == 0) fputs("正确\n",fp); else fputs("错误\n",fp); fclose(fp); wFlowNo = pBuffer->ucBuffer[10]*256+pBuffer->ucBuffer[11]; pDoc->m_TerminalInfo[ucNo].wECFlowNo = wFlowNo; pDoc->m_TaskInfo.wTaskCurrentNo += 1; if(pDoc->m_TaskInfo.wTaskCurrentNo == pDoc->m_TaskInfo.wTaskTotalNo) //历史数据收集完成 { if(pDoc->m_bNetPar == true) //星型结构 { pDoc->m_ucNo = 0; pDoc->m_TaskInfo.wIDNo = 0; //任务ID为0 pDoc->m_TaskInfo.ucMode = 0; //默认任务 pDoc->m_TaskInfo.wTaskTotalNo = 0; pDoc->m_TaskInfo.wTaskCurrentNo =0; pDoc->m_TaskInfo.ucCommandTotalNo = 1; pDoc->m_TaskInfo.ucCommandCurrentNo = 0; pDoc->m_TaskInfo.ucCommandArray[0] = 0x03; pDoc->m_TaskInfo.ucERetryNo = 3;//命令字期望重试次数 pDoc->m_TaskInfo.ucRetryNo = 0; BuildTaskBuffer(pDoc,pBuffer,ucFlowNo,0); //AfxMessageBox("收集交易数据"); return; } } else//历史数据收集未完成 { //pDoc->m_ucNo = PortNo; //当前操作端口 pDoc->m_TaskInfo.wIDNo = 2; //任务ID pDoc->m_TaskInfo.ucMode = 1; //计次任务 //pDoc->m_TaskInfo.wTaskTotalNo = wFlowNo-pDoc->m_TerminalInfo[PortNo].wEDFlowNo; //期望运行总次数 // pDoc->m_TaskInfo.wTaskCurrentNo = 0; //当前次数为0 pDoc->m_TaskInfo.ucCommandTotalNo = 1;//命令总次数 pDoc->m_TaskInfo.ucCommandCurrentNo = 0;//命令字当前数 pDoc->m_TaskInfo.ucCommandArray[0] = 0x8A; //收集历史数据 pDoc->m_TaskInfo.ucERetryNo = 3;//命令字期望重试次数 pDoc->m_TaskInfo.ucRetryNo = 0; if(wFlowNo == 0xFFFF) wFlow1 = 0; else wFlow1 = wFlowNo+1; sprintf(temp,"收集历史数据---%d",wFlow1); //AfxMessageBox(temp); ucFlowNo[0] = (unsigned char)(wFlow1 / 256); ucFlowNo[1] = (unsigned char)(wFlow1 % 256); BuildTaskBuffer(pDoc,pBuffer,ucFlowNo,2); } } else { sprintf(cTemp,"收集扎帐数据---返回数据体Mark值%.2X",pBuffer->ucBuffer[2]); AfxMessageBox(cTemp); return; } } else //返回数据体机号不符合 { sprintf(cTemp,"收集扎帐数据 ---- 返回数据体机号不符合 = %d",ucAddr); AfxMessageBox(cTemp); return; } } else //CRC不正确 { AfxMessageBox("返回数据体CRC错误"); return; } } }
//写收费机交易数据 void Write_SFJData_Process(TSSmartDoc *pDoc,TSSmartBuffer *pBuffer,unsigned char *Buffer) { unsigned char ucFlowNo[2],out[3]; CTime tm=CTime::GetCurrentTime(); FILE *fp; char filename[512],temp[512]; int crcFlag,PortNo; WORD wFlowNo,wFlow1; PortNo = pDoc->m_ucNo; GetCurrentDirectory(512,temp); sprintf(filename,"%s\\log\\No%.2X%.2X%.2X%.2X_%.2d%.2d%.2d历史交易数据.txt",temp, pDoc->m_TerminalInfo[PortNo].ucIDNo[0],pDoc->m_TerminalInfo[PortNo].ucIDNo[1], pDoc->m_TerminalInfo[PortNo].ucIDNo[2],pDoc->m_TerminalInfo[PortNo].ucIDNo[3], tm.GetYear(),tm.GetMonth(),tm.GetDay()); fp = fopen(filename,"a+"); sprintf(temp,"%.2d年%.2d月%.2d日 %.2d时%.2d分%.2d秒收集历史交易数据\n", tm.GetYear(),tm.GetMonth(),tm.GetDay(),tm.GetHour(),tm.GetMinute(),tm.GetSecond()); fputs(temp,fp); sprintf(temp,"注册号 %.2X%.2X%.2X%.2X\n", Buffer[0],Buffer[1],Buffer[2],Buffer[3]); fputs(temp,fp); sprintf(temp,"通信版本 %.2X\n",Buffer[4]); fputs(temp,fp); sprintf(temp,"启动原因 %.2X\n",Buffer[5]); fputs(temp,fp); sprintf(temp,"交易流水 %d\n", Buffer[6]*256+Buffer[7]); fputs(temp,fp); sprintf(temp,"交易卡号 %.10d\n",Buffer[8]*65536+Buffer[9]*256+Buffer[10]); fputs(temp,fp); sprintf(temp,"交易时间 %.2d%.2d%.2d-%.2d%.2d%.2d\n",Buffer[11],Buffer[12],Buffer[13], Buffer[14],Buffer[15],Buffer[16]); fputs(temp,fp); sprintf(temp,"卡片累计使用次数 %d\n",Buffer[17]*256+Buffer[18]); fputs(temp,fp); sprintf(temp,"入卡金额 %d分\n", Buffer[19]+Buffer[20]*256+Buffer[21]*65536); fputs(temp,fp); sprintf(temp,"出卡金额 %d分\n", Buffer[22]+Buffer[23]*256+Buffer[24]*65536); fputs(temp,fp); sprintf(temp,"交易标记 %.2X\n", Buffer[25]); fputs(temp,fp); sprintf(temp,"CRC=%.2X%.2X ", Buffer[26],Buffer[27]); fputs(temp,fp); wFlowNo = (WORD)(Buffer[6]*256)+Buffer[7]; crcFlag = calc_crc16(28,Buffer,out); if(crcFlag == 0) sprintf(temp,"%s","正确\n"); else sprintf(temp,"%s","错误\n"); fputs(temp,fp); fclose(fp); pDoc->m_TaskInfo.wTaskCurrentNo += 1; pDoc->m_TerminalInfo[PortNo].wEDFlowNo = wFlowNo; if(pDoc->m_TaskInfo.wTaskCurrentNo == pDoc->m_TaskInfo.wTaskTotalNo) //历史数据收集完成 { if(pDoc->m_bNetPar == true) //星型结构 { pDoc->m_ucNo = 0; pDoc->m_TaskInfo.wIDNo = 0; //任务ID为0 pDoc->m_TaskInfo.ucMode = 0; //默认任务 pDoc->m_TaskInfo.wTaskTotalNo = 0; pDoc->m_TaskInfo.wTaskCurrentNo =0; pDoc->m_TaskInfo.ucCommandTotalNo = 1; pDoc->m_TaskInfo.ucCommandCurrentNo = 0; pDoc->m_TaskInfo.ucCommandArray[0] = 0x03; pDoc->m_TaskInfo.ucERetryNo = 3;//命令字期望重试次数 pDoc->m_TaskInfo.ucRetryNo = 0; BuildTaskBuffer(pDoc,pBuffer,ucFlowNo,0); //AfxMessageBox("收集交易数据"); return; } } else//历史数据收集未完成 { pDoc->m_ucNo = PortNo; //当前操作端口 pDoc->m_TaskInfo.wIDNo = 1; //任务ID pDoc->m_TaskInfo.ucMode = 1; //计次任务 //pDoc->m_TaskInfo.wTaskTotalNo = wFlowNo-pDoc->m_TerminalInfo[PortNo].wEDFlowNo; //期望运行总次数 // pDoc->m_TaskInfo.wTaskCurrentNo = 0; //当前次数为0 pDoc->m_TaskInfo.ucCommandTotalNo = 1;//命令总次数 pDoc->m_TaskInfo.ucCommandCurrentNo = 0;//命令字当前数 pDoc->m_TaskInfo.ucCommandArray[0] = 0xBB; //收集历史数据 pDoc->m_TaskInfo.ucERetryNo = 3;//命令字期望重试次数 pDoc->m_TaskInfo.ucRetryNo = 0; if(wFlowNo == 0xFFFF) wFlow1 = 0; else wFlow1 = wFlowNo+1; //sprintf(temp,"收集历史数据---%d",wFlow1); //AfxMessageBox(temp); ucFlowNo[0] = (unsigned char)(wFlow1 / 256); ucFlowNo[1] = (unsigned char)(wFlow1 % 256); BuildTaskBuffer(pDoc,pBuffer,ucFlowNo,2); } return; }
//收集历史数据流程 void CollectHistoryDealData_Process(TSSmartDoc *pDoc,TSSmartBuffer *pBuffer) { int crcFlag; unsigned char ucNo,out[3],ucAddr; ucNo = pDoc->m_ucNo; if(pBuffer->ucMode == 2) //有数据返回 { if(pDoc->m_wNoReponseTime != 0) //由不通讯到通讯,在规定的次数内应发出通讯成功信息 { pDoc->m_wNoReponseTime = 0; //本部分目前缺少代码 } crcFlag = calc_crc16((unsigned char)(pBuffer->wLength),pBuffer->ucBuffer,out); if(crcFlag == 1)//CRC正确 { ucAddr = pBuffer->ucBuffer[1]; if(ucAddr == pDoc->m_TerminalInfo[ucNo].ucMacNo) //返回数据体机号相符合 { if(pBuffer->ucBuffer[2] == 0) //正确 Process_HistoryData(pDoc,pBuffer); else //错误待处理 { } return; } else //机号不对处理流程 { pDoc->m_ucNo = 0; pDoc->m_TaskInfo.ucMode = 0;//默认任务 pDoc->m_TaskInfo.wIDNo = 0;//任务ID号,0----代表数据收集与确认 pDoc->m_TaskInfo.ucERetryNo = 3;//期望重试次数为3 pDoc->m_TaskInfo.ucRetryNo = 0;//当前命令重试次数 pDoc->m_TaskInfo.ucCommandTotalNo = 1;//命令字总数为1 pDoc->m_TaskInfo.ucCommandCurrentNo = 0;//命令字当前运行序号 pDoc->m_TaskInfo.ucCommandArray[0] = 0x03; BuildTaskBuffer(pDoc,pBuffer,out,0); return; } } else//接收数据包CRC不对处理流程 { pDoc->m_ucNo = 0; pDoc->m_TaskInfo.ucMode = 0;//默认任务 pDoc->m_TaskInfo.wIDNo = 0;//任务ID号,0----代表数据收集与确认 pDoc->m_TaskInfo.ucERetryNo = 3;//期望重试次数为3 pDoc->m_TaskInfo.ucRetryNo = 0;//当前命令重试次数 pDoc->m_TaskInfo.ucCommandTotalNo = 1;//命令字总数为1 pDoc->m_TaskInfo.ucCommandCurrentNo = 0;//命令字当前运行序号 pDoc->m_TaskInfo.ucCommandArray[0] = 0x03; BuildTaskBuffer(pDoc,pBuffer,out,0); return; } return; } else //未接到数据 { pDoc->m_TaskInfo.ucRetryNo++; if(pDoc->m_TaskInfo.ucRetryNo == pDoc->m_TaskInfo.ucERetryNo) //重试次数到 { if(pDoc->m_bNetPar == true) //星型结构 { pDoc->m_ucNo = 0; pDoc->m_TaskInfo.ucMode = 0;//默认任务 pDoc->m_TaskInfo.wIDNo = 0;//任务ID号,0----代表数据收集与确认 pDoc->m_TaskInfo.ucERetryNo = 3;//期望重试次数为3 pDoc->m_TaskInfo.ucRetryNo = 0;//当前命令重试次数 pDoc->m_TaskInfo.ucCommandTotalNo = 1;//命令字总数为1 pDoc->m_TaskInfo.ucCommandCurrentNo = 0;//命令字当前运行序号 pDoc->m_TaskInfo.ucCommandArray[0] = 0x03; BuildTaskBuffer(pDoc,pBuffer,out,0); return; } } else //重新收集 { pBuffer->ucMode = 0; return; } } }