// //extern float l_Density; //extern float l_ReviseHight; //修正高度 //extern void ReCalPara(uint8 Flg); //extern int16 GetDip1Prs(void); //extern int16 GetDip2Prs(void); //extern uint8 GetOilBoxCod(void); // ////------------------------------------------------------------------------------------------------- ////函数名称: uint8 DebugCard(stcCardFlg * sCardFlg) ////函数功能: 调试卡 ////入口参数: 无 ////出口参数: 无 ////-------------------------------------------------------------------------------------------------- //uint8 DebugCard(stcCardFlg * sCardFlg) //{ // uint32 AllStrLen = 0; // int16 CurDip1Prs; // int16 CurDip2Prs; // uint8 ModNum; // uint16 Density; // uint16 Hight; // uint16 CrcCheck; // // ReCalPara(1); // // CurDip1Prs = GetDip1Prs(); // CurDip2Prs = GetDip2Prs(); // ModNum = GetOilBoxCod(); // Density = (uint16)(l_Density*1000); // Hight = (uint16)l_ReviseHight; // // DisplaySet(150,1,"DIP1"); // DisplaySet(200,1,"%d",CurDip1Prs); // // DisplaySet(150,1,"DIP2"); // DisplaySet(200,1,"%d",CurDip2Prs); // // DisplaySet(150,1,"MODE"); // DisplaySet(200,1,"C_%d",ModNum); // // DisplaySet(150,1,"DENS"); // DisplaySet(200,1,"%d",Density); // // DisplaySet(150,1,"HIGH"); // DisplaySet(200,1,"%d",Hight); // // PrintfTime(); // DisplayTime(); // // memcpy((int8 *)&sCardFlg->sCardPara.sDebugCard.Buf[AllStrLen],(int8 *)&CurDip1Prs,2); // // AllStrLen += 2; // memcpy((int8 *)&sCardFlg->sCardPara.sDebugCard.Buf[AllStrLen],(int8 *)&CurDip2Prs,2); // // AllStrLen += 2; // memcpy((int8 *)&sCardFlg->sCardPara.sDebugCard.Buf[AllStrLen],(int8 *)&ModNum,2); // // AllStrLen += 2; // memcpy((int8 *)&sCardFlg->sCardPara.sDebugCard.Buf[AllStrLen],(int8 *)&Density,2); // // AllStrLen += 2; // memcpy((int8 *)&sCardFlg->sCardPara.sDebugCard.Buf[AllStrLen],(int8 *)&Hight,2); // // AllStrLen += 2; // sCardFlg->sCardPara.sDebugCard.BufLen = AllStrLen; //有效数据长度 // // CrcCheck = GetCrc16Check((uint8 *)&sCardFlg->sCardPara.sDebugCard,sizeof(sCardFlg->sCardPara.sDebugCard )- 2); // sCardFlg->sCardPara.sDebugCard.CrcCheck = CrcCheck; // // CrcCheck = GetCrc16Check((uint8 *)&sCardFlg->sCardPara,sizeof(sCardFlg->sCardPara) - 2); // sCardFlg->sCardPara.CrcCheck = CrcCheck; // // CrcCheck = GetCrc16Check((uint8 *)sCardFlg,sizeof(stcCardFlg) - 2); // sCardFlg->CrcCheck = CrcCheck; // // WriteCardFlg(sCardFlg); //修改IC卡标志页 // // return 1; // ///* // static stcDebugCard sDebugCard; //高度调整 // uint16 CrcCheck; // // CrcCheck = GetCrc16Check((uint8 *)&sCardFlg->sCardPara,sizeof(sCardFlg->sCardPara) - 2); // // if(CrcCheck == sCardFlg->sCardPara.CrcCheck) // { // sDebugCard = sCardFlg->sCardPara.sDebugCard; // // CrcCheck = GetCrc16Check((uint8 *)&sDebugCard,sizeof(sDebugCard) - 2); // // if(CrcCheck == sDebugCard.CrcCheck) //校验和相等 // { // DisplaySet(100,1,"SDBG"); // // if(StoreReviseHight((stcReviseHight *)&sDebugCard)) // { // SetSucceedIndicate(); // // return 1; // } // else // { // StoreErrIndicate(); // // return 0; // } // } // } // // CrcCheckErrIndicate(); // // return 0; //*/ //} // ////------------------------------------------------------------------------------------------------- ////函数名称: uint8 FixCard(stcCardFlg * sCardFlg) ////函数功能: 高度修正卡处理 ////入口参数: 无 ////出口参数: 无 ////-------------------------------------------------------------------------------------------------- uint8 FixCard(void) { stcFixInfo sFixInfo; //高度调整 uint16 CrcCheck; stcCardPara sCardPara; if(ReadCardPara((stcCardPara *) &sCardPara)) { sFixInfo = sCardPara.sFixInfo; CrcCheck = GetCrc16Check((uint8 *)&sFixInfo,sizeof(sFixInfo) - 2); if(CrcCheck == sFixInfo.CrcCheck) //校验和相等 { DisplaySet(100,1,"%d",sFixInfo.LocoTyp); DisplaySet(100,1,"%d",sFixInfo.LocoNum[1]*256+sFixInfo.LocoNum[0]); if(StoreFixInfo((stcFixInfo *)&sFixInfo)) { SetSucceedIndicate(); return 1; } else { StoreErrIndicate(); return 0; } } } CrcCheckErrIndicate(); return 0; }
uint8 DensityCard(void) { stcDensity sDensity; //密度 stcCardPara sCardPara; uint16 CrcCheck; if(ReadCardPara((stcCardPara *) &sCardPara)) { sDensity = sCardPara.sDensity; CrcCheck = GetCrc16Check((uint8 *)&sDensity,sizeof(sDensity) - 2); if(CrcCheck == sDensity.CrcCheck) //校验和相等 { if(StoreDensity((stcDensity *)&sDensity)) { DisplaySet(150,1,"%d",sDensity.Density); SetSucceedIndicate(); return 1; } else { StoreErrIndicate(); return 0; } } } CrcCheckErrIndicate(); return 0; }
////------------------------------------------------------------------------------------------------- ////函数名称: uint8 ModelSelectCard(stcCardFlg * sCardFlg) ////函数功能: 模型选择卡 ////入口参数: 整个卡结构体 ////出口参数: 是否成功 ////-------------------------------------------------------------------------------------------------- uint8 ModelSelectCard(void) { uint8 ModelNum; stcCardPara sCardPara; if(ReadCardPara((stcCardPara *) &sCardPara)) { ModelNum = sCardPara.SetVal; if(StoreSelectModel(ModelNum)) { DisplaySet(150,1,"%d",ModelNum); SetSucceedIndicate(); return 1; } else { StoreErrIndicate(); return 0; } } CrcCheckErrIndicate(); return 0; }
// //extern uint8 StoreDenChangeTimes(uint32 Times); // ////------------------------------------------------------------------------ //// 名 称 : uint8 ReadCurFlshTimes(void) //// 功 能 : 读当前记录装置记录流水号 //// 入口参数: 无 //// 出口参数: 当前流水号 ////------------------------------------------------------------------------ //extern uint32 ReadDenChangeTimes(void); // ////------------------------------------------------------------------------------------------------- ////函数名称: uint8 DenDataCard(stcCardFlg sCardFlg) ////函数功能: 普通卡处理 ////入口参数: 无 ////出口参数: 无 ////-------------------------------------------------------------------------------------------------- uint8 DenDataCard(stcCardFlg * sCardFlg) { DensityCard(); DisplaySet(100,1,"DATA."); DataCard(0); //数据卡,进行数据转取 return 1; }
////------------------------------------------------------------------------------------------------- ////函数名称: uint8 ExpandCard(stcCardFlg * sCardFlg) ////函数功能: 扩展卡 ////入口参数: 无 ////出口参数: 无 ////-------------------------------------------------------------------------------------------------- uint8 ExpandCard(void) { uint8 CardType; uint32 i; uint32 DisTime = 40; //500ms uint32 Time = 0; //500ms uint32 Times = 0; stcTime sTime; stcCardPara sCardPara; if(!ReadCardPara((stcCardPara *) &sCardPara)) { return 0;} /* #ifdef HARD_VER_090426 DisplaySet(150,1,"%u-%u-%u",sTime.Year,sTime.Month,sTime.Date); DisplaySet(60,1," "); DisplaySet(350,1,"%u-%u-%u.",sTime.Hour,sTime.Min,sTime.Sec); //等待时间补充 DisplaySet(60,1," "); #endif */ CardType = sCardPara.Reserve0; //卡类型 ReadTime((stcTime *)&sTime); i = sTime.Sec + sTime.Min * 60 + sTime.Hour * 60 * 60; while(1) { if(CardType == TIME_ADD_CARD) { i++; } else if(CardType == TIME_SUB_CARD) { i--; } else { //printfcom0("\r\n 不是时间卡"); break; } i = i % (60*60*24); Times++; sTime.Sec = i % 60; sTime.Min = (i / 60 ) % 60; sTime.Hour = ((i/60)/60) % 24; DisplaySet(1,1,"%02u-%02u-%02u.",sTime.Hour,sTime.Min,sTime.Sec); // DelayX10ms(1); Time = GetSysTime(); while(GetSysTime() - Time < DisTime) { //SysHoldTast();; } if(DisTime > 4) { DisTime -= Times/10; } if(GetPlugFlg() != PLUG_IN_CARD) { DelayX10ms(200); WriteTime(sTime); DelayX10ms(100); break; } } return 1; }
////------------------------------------------------------------------------------------------------- ////函数名称: void HightCard(stcCardFlg sCardFlg) ////函数功能: 高度修正卡处理 ////入口参数: 无 ////出口参数: 无 ////-------------------------------------------------------------------------------------------------- uint8 HightCard(void) { stcReviseHight sReviseHight; //高度调整 uint16 CrcCheck; int16 StoreHight; stcCardPara sCardPara; if(ReadReviseHight((stcReviseHight *)&sReviseHight)) { StoreHight = sReviseHight.ReviseHight; } else { StoreHight = 0; } if(ReadCardPara((stcCardPara *) &sCardPara)) { sReviseHight = sCardPara.sReviseHight; CrcCheck = GetCrc16Check((uint8 *)&sReviseHight,sizeof(sReviseHight) - 2); if(CrcCheck == sReviseHight.CrcCheck) //校验和相等 { // DisplaySet(150,1,"SHIG"); StoreHight = StoreHight + sReviseHight.ReviseHight; if(StoreHight > 500 || StoreHight < -500) { if(StoreHight > 500) { sReviseHight.ReviseHight = 500; DisplaySet(60,2,"TO_H"); DisplaySet(60,2," "); DelayX10ms(250); } else { sReviseHight.ReviseHight = -500; DisplaySet(60,2,"TO_L"); DisplaySet(60,2," "); DelayX10ms(250); } } else { sReviseHight.ReviseHight = StoreHight; } CrcCheck = GetCrc16Check((uint8 *)&sReviseHight,sizeof(sReviseHight) - 2); sReviseHight.CrcCheck = CrcCheck; if(StoreReviseHight((stcReviseHight *)&sReviseHight)) { DisplaySet(150,1,"%d",sReviseHight.ReviseHight); SetSucceedIndicate(); return 1; } else { StoreErrIndicate(); return 0; } } } CrcCheckErrIndicate(); return 0; }
////------------------------------------------------------------------------------------------------- ////函数名称: uint8 CrcCheckErrIndicate(void) ////函数功能: 设置信息校验和失败指示 ////入口参数: 无 ////出口参数: 无 ////-------------------------------------------------------------------------------------------------- void CrcCheckErrIndicate(void) { DisplaySet(60,100,"CRCE"); DisplaySet(60,100," "); }
////------------------------------------------------------------------------------------------------- ////函数名称: uint8 StoreErrIndicate(void) ////函数功能: 存设置信息失败指示 ////入口参数: 无 ////出口参数: 无 ////-------------------------------------------------------------------------------------------------- void StoreErrIndicate(void) { DisplaySet(60,100,"STRE"); DisplaySet(60,100," "); }
uint iAuction::MainStage(uint s){ InitStage(); int sink = -1; //here sink is a column int i_bar= -1; int j_bar= -1; SV.insert(s); UpdateLabeledRows(s); while(sink == -1){ double delta = std::numeric_limits<double>::infinity(); for(set<uint>::iterator itr=LU.begin(); itr!=LU.end(); itr++){ uint cur_j = heaps[*itr].top().first; while(SV.find(cur_j)!=SV.end()){ heaps[*itr].pop(); cur_j = heaps[*itr].top().first; } if(SV.find(cur_j) == SV.end()){ if((orig_matrix[*itr][GetAssignedCol(*itr)]-Deltas[GetAssignedCol(*itr)]) - (orig_matrix[*itr][cur_j] - Deltas[cur_j]) < delta){ delta = (orig_matrix[*itr][GetAssignedCol(*itr)]-Deltas[GetAssignedCol(*itr)]) - (orig_matrix[*itr][cur_j] - Deltas[cur_j]); j_bar = cur_j; i_bar = *itr; } }//if SV }//for assert(j_bar != -1 && i_bar != -1); //pred[i_bar] = j_bar; pred[i_bar].push_back(j_bar); assert(pred_j[j_bar] == -1); pred_j[j_bar] = i_bar; for(set<uint>::iterator itr=SV.begin(); itr!=SV.end(); itr++) Deltas[*itr] += delta; price_cnt ++; if(!GetNumAsgnRows(j_bar)){ sink = j_bar; } else{ //update LU SV SV.insert(j_bar); UpdateLabeledRows(j_bar); } #if 0 //display data _cout("\tset SV: "); DisplaySet(SV); _cout("\tset LU: "); DisplaySet(LU); //_cout("\tpred: "); //DisplayVec<int>(pred); _cout("\tdalta="<<delta<<"; j*="<<j_bar<<endl); _cout("\tDeltas: "); DisplayVec<double>(Deltas); _cout(endl); #endif }//while sink assert(sink!=-1); //update the assignment and allocation allocated_cols.insert(sink); int j_asgn=-1; uint cnt = 0; uint true_pred = sink; while(j_asgn!=(int)s){ if(cnt++ > col_size) throw EXCEPTION_BROKEN; j_asgn=assignment[i_bar]; assignment[i_bar] = true_pred; #if 0 _cout("\ti_bar="<<i_bar<<" j_asgn="<<j_asgn<<" pred="<<true_pred<<endl); #endif if(pred_j[j_asgn] != -1){ i_bar=pred_j[j_asgn]; for(uint j=0; j<pred[i_bar].size(); j++) if((int)pred[i_bar][j] == j_asgn){ true_pred = pred[i_bar][j]; break; } } //assert(i<row_size || j_asgn==(int)s); }//while //update num_allocation, by re-scanning num of assigned rows in each column UpdateRecordAllocations(); #if 0 _cout("Stats of this stage:"<<endl); _cout("\tstart col = "<<s<<"; sink col = "<<sink<<endl); _cout("\tassignment: "); DisplayVec<uint>(assignment); _cout("\tallocation: "); DisplayVec<uint>(allocation); _cout("\trecord_allocations: "); DisplayVec<uint>(record_allocations); _cout("transformed matrix with current assignment and Deltas: "<<endl); DisplayMatrix(orig_matrix, assignment, Deltas); _cout("-----------------------------------------------------"<<endl); #endif return (uint)sink; }