int RMM_DeleteRec(int fileDesc, int recId, int recordSize) { int full, max_records, blockNum, recordNum; char *HF_HeadBuf, *blockBuf; if (( HF_HeadBuf = malloc(BF_BLOCK_SIZE)) == NULL ) { BF_Errno = BFE_NOMEM; return (HF_errno = HFE_BFERROR); } if (( blockBuf = malloc ( BF_BLOCK_SIZE )) == NULL ) { BF_Errno = BFE_NOMEM; return (HF_errno = HFE_BFERROR); } if(BF_GetThisBlock(fileDesc, 0, &HF_HeadBuf) != BFE_OK) //-> Fernei to HF_HEADER sti mnimi. return (HF_errno = HFE_BFERROR); // max_records = BF_BLOCK_SIZE*8 / (recordSize*8 + 1); //-> Ypologizei to megisto plithos eggrafwn pou // xwraei to kathe block. blockNum = recId/max_records + 1; //-> Vriskei poio einai to block sto opoio vrisketai // i eggrafi pou zitithike na diagrapsei. if(BF_GetThisBlock(fileDesc, blockNum, &blockBuf) != BFE_OK) //-> Fernei stin mnimi to block sto opoio vrisketai return (HF_errno = HFE_BFERROR); // i eggrafi pou zitithike na diagrapsei. recordNum = recId % max_records; //-> Vriskei ti thesi tis eggrafis mesa sto block. if(!isBitActive(blockBuf, BF_BLOCK_SIZE*8-1 -recordNum)) //-> Elegxei ean i eggrafi pou zitithike na diagrafei { if (BF_UnpinBlock(fileDesc, blockNum, 0) != BFE_OK) // ontws uparxei mesa sto block. return (HF_errno = HFE_BFERROR); return (HF_errno = HFE_INVALIDREC); } resetBit(blockBuf, BF_BLOCK_SIZE*8-1 -recordNum); //-> "Diagrafei" ti zitoumeni eggrafi sto block, // midenizontas tin thesi tis sto bitmap tou block. if(( full = isBitActive(HF_HeadBuf, blockNum-1 ))) //-> Elegxei to HF_HEADER gia na dei ean to block prin resetBit(HF_HeadBuf, blockNum-1); // tin diagrafi tis eggrafis, itan plirws gemato. // Ean nai, enimerwnei to HF_HEADER gia tin nea // katastasi tou block. if(BF_UnpinBlock(fileDesc, blockNum, 1) != BFE_OK) //-> Kanei unpin to block. return (HF_errno = HFE_BFERROR); // if(FullOrEmpty(blockBuf, max_records, BF_BLOCK_SIZE, 0)) //-> Elegxei, ean meta apo tin diagrafi tis eggrafis if(BF_DisposeBlock(fileDesc, blockNum) != BFE_OK) // pou molis egine, to block den periexei kammia return (HF_errno = HFE_BFERROR); // eggrafi. Ean nai, kanei dispose to adeio block. if(BF_UnpinBlock(fileDesc, 0, full) != BFE_OK) //-> Kanei unpin to HF_HEADER me dirty iso me 'full', return (HF_errno = HFE_BFERROR); // i opoia exei timi '0' i '1' analoga me to ean // to block itan prin diagrafei oxi plirws gemato // i plirws gemato, antistoixa. return HFE_OK; }
unsigned char modBit(unsigned char *by, int bit, int value) { if (value) { return setBit(by, bit); } else { return resetBit(by, bit); } }
void Lcd::setBits(uint8_t data){ for(uint8_t i=0; i<8; ++i){ if((data & (0x1<<i)) == 0) resetBit(i); else setBit(i); } }
int CVICALLBACK rkcThread (void *Data) { rkc.COM = 3; rkc.Baud = 19200; rkc.Pari = 0; rkc.Dbit = 8; rkc.Sbit = 1; rkc.Flc = 0; rkc.Tout = 0.050; if(RKC_CommData ( Config, 0, NULL) != 0) { SendPcAlarm(PCA_RKC_BID,1); return 0; } PTANK * tk[16] = { &sys->tk[TANK_AUX_PH1], &sys->tk[TANK_AUX_PH2], &sys->tk[TANK_02], &sys->tk[TANK_03], &sys->tk[TANK_04], &sys->tk[TANK_06], &sys->tk[TANK_07], &sys->tk[TANK_09], &sys->tk[TANK_10], &sys->tk[TANK_12], &sys->tk[TANK_13], &sys->tk[TANK_14], &sys->tk[TANK_15], &sys->tk[TANK_AUX_IN], &sys->tk[TANK_16], &sys->tk[TANK_17]}; int cnt = 0; while (g_exitThread == 0){ Delay(30); if (g_setupTemp == 1) { // ===================================================== // Write Temperature SetPoint for(int i = 0; i < 16;i++) { RKC_CommData(setSP, i+1, &tk[i]->rcp.Temp); Delay(0.5); RKC_CommData(setAL1,i+1, &tk[i]->rcp.TempL); Delay(0.5); RKC_CommData(setAL2,i+1, &tk[i]->rcp.TempH); Delay(0.5); RKC_CommData(setPB,i+1, &tk[i]->rcp.TempP); Delay(0.5); } g_setupTemp = 0; } cnt++; if(cnt >= 2) { cnt = 0; if(sys->curTempTrendPos >= TREND_DATA_LEN - 1) sys->curTempTrendPos = 0; else sys->curTempTrendPos++; } for(int i = 0; i < 16;i++) { RKC_CommData ( getTP, i+1, &tk[i]->curTemp); if(cnt == 0 && tk[i]->curTemp != 0) tk[i]->tempData[sys->curTempTrendPos] = tk[i]->curTemp; if(g_exitThread) return 0; } sys->tk[TANK_05].curTemp = sys->tk[TANK_04].curTemp; sys->tk[TANK_08].curTemp = sys->tk[TANK_07].curTemp; if(g_writeTemp2Plc == 0) g_writeTemp2Plc = 1; if(sys->tk[TANK_AUX_PH1].curTemp >= sys->tk[TANK_AUX_PH1].rcp.StartTemp) setBit(sys->tk[TANK_AUX_PH1].hsPHStart); else if(sys->tk[TANK_AUX_PH1].curTemp < sys->tk[TANK_AUX_PH1].rcp.StopTemp) resetBit(sys->tk[TANK_AUX_PH1].hsPHStart); if(sys->tk[TANK_AUX_PH2].curTemp >= sys->tk[TANK_AUX_PH2].rcp.StartTemp) setBit(sys->tk[TANK_AUX_PH2].hsPHStart); else if(sys->tk[TANK_AUX_PH2].curTemp < sys->tk[TANK_AUX_PH2].rcp.StopTemp) resetBit(sys->tk[TANK_AUX_PH2].hsPHStart); } return 0; }
int CVICALLBACK RobotCommand (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_LEFT_CLICK: if(CheckAuth(OP_ROBOT) == 0) return 0; if (!ButtonConfirm (panel,control)) return 0; switch(control) { int stat; case PANEL_RB_CMD_PUT: if(testBit(sys->rtk[curRid].hsFill,WB) > 0) { MessagePopup("操作條件不滿足","桶槽內已經有料,不可置料!"); break; } if(testBit(sys->rb[curRobotId].hsFill,WB) == 0) { MessagePopup("操作條件不滿足","夾爪上無料,不可置料!"); break; } setRobotCommand(&sys->rb[curRobotId],curRid,PUT_COMMAND); ActionLog(RB_PUT_ACT_EVENT,curRobotId,curRid,0,0,0); break; case PANEL_RB_CMD_GET: if(testBit(sys->rtk[curRid].hsFill,WB) == 0) { MessagePopup("操作條件不滿足","桶槽內無料,不可取料!"); break; } if(testBit(sys->rb[curRobotId].hsFill,WB) > 0) { MessagePopup("操作條件不滿足","夾爪上已經有料,不可取料!"); break; } setRobotCommand(&sys->rb[curRobotId],curRid,GET_COMMAND); ActionLog(RB_GET_ACT_EVENT,curRobotId,curRid,0,0,0); break; case PANEL_RB_CMD_HOME: setRobotCommand(&sys->rb[curRobotId],curRid,HOME_COMMAND); ActionLog(RB_HOME_ACT_EVENT,curRobotId,0,0,0,0); break; case PANEL_RB_CMD_MOVE: setRobotCommand(&sys->rb[curRobotId],curRid,MOVE_COMMAND); ActionLog(RB_MOVE_ACT_EVENT,curRobotId,curRid,0,0,0); break; case PANEL_RB_CMD_CLEAN: setRobotCommand(&sys->rb[curRobotId],curRid,BLOW_COMMAND); ActionLog(RB_CLEAN_ACT_EVENT,curRobotId,0,0,0,0); break; case PANEL_RB_CHUCK_OFF: setBit(sys->rb[curRobotId].hsChuck); ActionLog(RB_CHUCK_ACT_EVENT,curRobotId,1,0,0,0); break; case PANEL_RB_CHUCK_ON: resetBit(sys->rb[curRobotId].hsChuck); ActionLog(RB_CHUCK_ACT_EVENT,curRobotId,0,0,0,0); break; case PANEL_RB_TEACH_OFF: setBit(sys->rb[curRobotId].hsTeach); ActionLog(RB_TEACH_ACT_EVENT,curRobotId,1,0,0,0); break; case PANEL_RB_TEACH_ON: resetBit(sys->rb[curRobotId].hsTeach); ActionLog(RB_TEACH_ACT_EVENT,curRobotId,0,0,0,0); break; case PANEL_RB_FILL_OFF: setBit(sys->rb[curRobotId].hsFill); ActionLog(RB_CAR_ACT_EVENT,curRobotId,1,0,0,0); break; case PANEL_RB_FILL_ON: resetBit(sys->rb[curRobotId].hsFill); ActionLog(RB_CAR_ACT_EVENT,curRobotId,0,0,0,0); break; } break; } return 0; }
int CVICALLBACK RobotManuAdj (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_LEFT_CLICK: if(CheckAuth(OP_ROBOT) == 0) return 0; if(control == PANEL_RB_MOT_ADJ_U) { resetBit(sys->rb[curRobotId].hsJogSpdY); setBit(sys->rb[curRobotId].hsJogPY); resetBit(sys->rb[curRobotId].hsJogNY); ActionLog(RB_UP_ACT_EVENT,curRobotId,0,0,0,0); } else if(control == PANEL_RB_MOT_ADJ_UU) { setBit(sys->rb[curRobotId].hsJogSpdY); setBit(sys->rb[curRobotId].hsJogPY); resetBit(sys->rb[curRobotId].hsJogNY); ActionLog(RB_UUP_ACT_EVENT,curRobotId,0,0,0,0); } else if(control == PANEL_RB_MOT_ADJ_D) { resetBit(sys->rb[curRobotId].hsJogSpdY); resetBit(sys->rb[curRobotId].hsJogPY); setBit(sys->rb[curRobotId].hsJogNY); ActionLog(RB_DOWN_ACT_EVENT,curRobotId,0,0,0,0); } else if(control == PANEL_RB_MOT_ADJ_DD) { setBit(sys->rb[curRobotId].hsJogSpdY); resetBit(sys->rb[curRobotId].hsJogPY); setBit(sys->rb[curRobotId].hsJogNY); ActionLog(RB_DDOWN_ACT_EVENT,curRobotId,0,0,0,0); } //////////////////////////////////////////// else if(control == PANEL_RB_MOT_ADJ_L) { resetBit(sys->rb[curRobotId].hsJogSpdX); if(curRobotId == RB03) { resetBit(sys->rb[curRobotId].hsJogPX); setBit(sys->rb[curRobotId].hsJogNX); } else { setBit(sys->rb[curRobotId].hsJogPX); resetBit(sys->rb[curRobotId].hsJogNX); } ActionLog(RB_LEFT_ACT_EVENT,curRobotId,0,0,0,0); } else if(control == PANEL_RB_MOT_ADJ_LL) { setBit(sys->rb[curRobotId].hsJogSpdX); if(curRobotId == RB03) { resetBit(sys->rb[curRobotId].hsJogPX); setBit(sys->rb[curRobotId].hsJogNX); } else { setBit(sys->rb[curRobotId].hsJogPX); resetBit(sys->rb[curRobotId].hsJogNX); } ActionLog(RB_LLEFT_ACT_EVENT,curRobotId,0,0,0,0); } else if(control == PANEL_RB_MOT_ADJ_R) { resetBit(sys->rb[curRobotId].hsJogSpdX); if(curRobotId != RB03) { resetBit(sys->rb[curRobotId].hsJogPX); setBit(sys->rb[curRobotId].hsJogNX); } else { setBit(sys->rb[curRobotId].hsJogPX); resetBit(sys->rb[curRobotId].hsJogNX); } ActionLog(RB_RIGHT_ACT_EVENT,curRobotId,0,0,0,0); } else if(control == PANEL_RB_MOT_ADJ_RR) { setBit(sys->rb[curRobotId].hsJogSpdX); if(curRobotId != RB03) { resetBit(sys->rb[curRobotId].hsJogPX); setBit(sys->rb[curRobotId].hsJogNX); } else { setBit(sys->rb[curRobotId].hsJogPX); resetBit(sys->rb[curRobotId].hsJogNX); } ActionLog(RB_RRIGHT_ACT_EVENT,curRobotId,0,0,0,0); } break; case EVENT_LEFT_CLICK_UP: resetBit(sys->rb[curRobotId].hsJogSpdX); resetBit(sys->rb[curRobotId].hsJogPX); resetBit(sys->rb[curRobotId].hsJogNX); resetBit(sys->rb[curRobotId].hsJogSpdY); resetBit(sys->rb[curRobotId].hsJogPY); resetBit(sys->rb[curRobotId].hsJogNY); break; } return 0; }
int CVICALLBACK Command (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { if(event != EVENT_LEFT_CLICK) return 0; if(CheckAuth(OP_TANK) == 0) return 0; if (!ButtonConfirm (panel,control)) return 0; switch (control) { case PANEL_TANK_AMAKE_OFF: if(testBit(sys->tk[curTankId].hsMakeEnd,RB) > 0) { MessagePopup("¾Þ§@±ø¥ó¤£º¡¨¬","½Ð¥ý±Æ©ñ¡A¤~¥i°õ¦æ°t¼Ñ¡I"); break; } if(g_setupMake == 0) { resetBit(sys->tk[curTankId].hsMakeStop); GetCtrlVal(panel,PANEL_TANK_AC1_MAKE,&sys->tk[curTankId].MakeCH1); GetCtrlVal(panel,PANEL_TANK_AC2_MAKE,&sys->tk[curTankId].MakeCH2); GetCtrlVal(panel,PANEL_TANK_AC3_MAKE,&sys->tk[curTankId].MakeCH3); GetCtrlVal(panel,PANEL_TANK_AC4_MAKE,&sys->tk[curTankId].MakeCH4); g_makeBit = sys->tk[curTankId].hsMake; g_setupMake = 1; ActionLog(TANK_MAKE_ACT_EVENT,curTankId,1,sys->tk[curTankId].MakeCH1,sys->tk[curTankId].MakeCH2,sys->tk[curTankId].MakeCH3); } break; case PANEL_TANK_AMAKE_ON: setBit(sys->tk[curTankId].hsMakeStop); ActionLog(TANK_MAKE_ACT_EVENT,curTankId,0,0,0,0); break; case PANEL_TANK_MMAKE_OFF: if(testBit(sys->tk[curTankId].hsMakeEnd,RB) == 0) { MessagePopup("¾Þ§@±ø¥ó¤£º¡¨¬","°t¼Ñ¥¼§¹¦¨¡A¤£¥i²K¥[¡I"); break; } if(g_setupMMake == 0) { resetBit(sys->tk[curTankId].hsMMakeStop); GetCtrlVal(panel,PANEL_TANK_AC1_MAKE,&sys->tk[curTankId].MMakeCH1); GetCtrlVal(panel,PANEL_TANK_AC2_MAKE,&sys->tk[curTankId].MMakeCH2); GetCtrlVal(panel,PANEL_TANK_AC3_MAKE,&sys->tk[curTankId].MMakeCH3); GetCtrlVal(panel,PANEL_TANK_AC4_MAKE,&sys->tk[curTankId].MMakeCH4); g_mmakeBit = sys->tk[curTankId].hsMMake; g_setupMMake = 1; ActionLog(TANK_MMAKE_ACT_EVENT,curTankId,1,sys->tk[curTankId].MMakeCH1,sys->tk[curTankId].MMakeCH2,sys->tk[curTankId].MMakeCH3); } break; case PANEL_TANK_MMAKE_ON: setBit(sys->tk[curTankId].hsMMakeStop); ActionLog(TANK_MAKE_ACT_EVENT,curTankId,0,0,0,0); break; case PANEL_TANK_AC1_DOS_OFF: setBit(sys->tk[curTankId].hsAC1Dos); ActionLog(TANK_DOS_ACT_EVENT,curTankId,1,1,0,0); break; case PANEL_TANK_AC1_DOS_ON: resetBit(sys->tk[curTankId].hsAC1Dos); ActionLog(TANK_DOS_ACT_EVENT,curTankId,1,0,0,0); break; case PANEL_TANK_AC2_DOS_OFF: setBit(sys->tk[curTankId].hsAC2Dos); ActionLog(TANK_DOS_ACT_EVENT,curTankId,2,1,0,0); break; case PANEL_TANK_AC2_DOS_ON: resetBit(sys->tk[curTankId].hsAC2Dos); ActionLog(TANK_DOS_ACT_EVENT,curTankId,2,0,0,0); break; case PANEL_TANK_AC3_DOS_OFF: setBit(sys->tk[curTankId].hsAC3Dos); ActionLog(TANK_DOS_ACT_EVENT,curTankId,3,1,0,0); break; case PANEL_TANK_AC3_DOS_ON: resetBit(sys->tk[curTankId].hsAC3Dos); ActionLog(TANK_DOS_ACT_EVENT,curTankId,3,0,0,0); break; case PANEL_TANK_AC4_DOS_OFF: setBit(sys->tk[curTankId].hsAC4Dos); ActionLog(TANK_DOS_ACT_EVENT,curTankId,4,1,0,0); break; case PANEL_TANK_AC4_DOS_ON: resetBit(sys->tk[curTankId].hsAC4Dos); ActionLog(TANK_DOS_ACT_EVENT,curTankId,4,0,0,0); break; case PANEL_TANK_WASH_OFF: setBit(sys->tk[curTankId].hsWash); ActionLog(TANK_WASH_ACT_EVENT,curTankId,1,0,0,0); break; case PANEL_TANK_WASH_ON: resetBit(sys->tk[curTankId].hsWash); ActionLog(TANK_WASH_ACT_EVENT,curTankId,0,0,0,0); break; case PANEL_TANK_DOWN_OFF: /*if(testBit(sys->tk[curTankId].hsMakeEnd,RB) == 0) { MessagePopup("¾Þ§@±ø¥ó¤£º¡¨¬","°t¼Ñ¥¼§¹¦¨¡A¤£¥i±Æ©ñ¡I¡I"); break; } */ setBit(sys->tk[curTankId].hsDown); ActionLog(TANK_DOWN_ACT_EVENT,curTankId,1,0,0,0); break; case PANEL_TANK_DOWN_ON: resetBit(sys->tk[curTankId].hsDown); ActionLog(TANK_DOWN_ACT_EVENT,curTankId,0,0,0,0); break; case PANEL_TANK_PUMP_OFF: resetBit(sys->tk[curTankId].hsPump); ActionLog(TANK_PUMP_ACT_EVENT,curTankId,1,0,0,0); break; case PANEL_TANK_PUMP_ON: ActionLog(TANK_PUMP_ACT_EVENT,curTankId,0,0,0,0); setBit(sys->tk[curTankId].hsPump); break; case PANEL_TANK_PUMPIN_OFF: resetBit(sys->tk[curTankId].hsPumpIn); ActionLog(TANK_PUMP_ACT_EVENT,curTankId,1,0,0,0); break; case PANEL_TANK_PUMPIN_ON: ActionLog(TANK_PUMP_ACT_EVENT,curTankId,0,0,0,0); setBit(sys->tk[curTankId].hsPumpIn); break; case PANEL_TANK_HEAT_OFF: resetBit(sys->tk[curTankId].hsHeat); ActionLog(TANK_HEAT_ACT_EVENT,curTankId,1,0,0,0); break; case PANEL_TANK_HEAT_ON: setBit(sys->tk[curTankId].hsHeat); ActionLog(TANK_HEAT_ACT_EVENT,curTankId,0,0,0,0); break; case PANEL_TANK_ADD_WATER_OFF: setBit(sys->tk[curTankId].hsAddWater); ActionLog(TANK_ADD_WATER_ACT_EVENT,curTankId,1,0,0,0); break; case PANEL_TANK_ADD_WATER_ON: resetBit(sys->tk[curTankId].hsAddWater); ActionLog(TANK_ADD_WATER_ACT_EVENT,curTankId,0,0,0,0); break; case PANEL_TANK_SHUT_OFF: setBit(sys->tk[curTankId].hsShutOpen); resetBit(sys->tk[curTankId].hsShutClose); ActionLog(TANK_SHUT_ACT_EVENT,curTankId,1,0,0,0); break; case PANEL_TANK_SHUT_ON: setBit(sys->tk[curTankId].hsShutClose); resetBit(sys->tk[curTankId].hsShutOpen); ActionLog(TANK_SHUT_ACT_EVENT,curTankId,0,0,0,0); break; /* case PANEL_TANK_BUBB_OFF: setBit(sys->tk[curTankId].hsBubble); ActionLog(TANK_BUBB_ACT_EVENT,curTankId,1,0,0,0); break; case PANEL_TANK_BUBB_ON: resetBit(sys->tk[curTankId].hsBubble); ActionLog(TANK_BUBB_ACT_EVENT,curTankId,0,0,0,0); break; case PANEL_TANK_DRAIN_OFF: setBit(sys->tk[curTankId].hsDrain); ActionLog(TANK_DRAIN_ACT_EVENT,curTankId,1,0,0,0); break; case PANEL_TANK_DRAIN_ON: resetBit(sys->tk[curTankId].hsDrain); ActionLog(TANK_DRAIN_ACT_EVENT,curTankId,0,0,0,0); break; */ case PANEL_TANK_FILL_OFF: //ChangFillStatus(sys->rtk[curRTankId1].hsFill,1); setBit(sys->rtk[curRTankId1].hsFill); GetCurrentDateTime(&sys->rtk[curRTankId1].car.iPrcTM[curTankId]); ActionLog(TANK_CAR_ACT_EVENT,curTankId,1,0,0,0); break; case PANEL_TANK_FILL_ON: resetBit(sys->rtk[curRTankId1].hsFill); //ChangFillStatus(sys->rtk[curRTankId1].hsFill,0); ActionLog(TANK_CAR_ACT_EVENT,curTankId,0,0,0,0); break; case PANEL_TANK_FILL2_OFF: setBit(sys->rtk[curRTankId2].hsFill); GetCurrentDateTime(&sys->rtk[curRTankId2].car.iPrcTM[curTankId]); //ChangFillStatus(sys->rtk[curRTankId2].hsFill,1); ActionLog(TANK_CAR_ACT_EVENT,curTankId,1,0,0,0); break; case PANEL_TANK_FILL2_ON: resetBit(sys->rtk[curRTankId2].hsFill); //ChangFillStatus(sys->rtk[curRTankId2].hsFill,0); ActionLog(TANK_CAR_ACT_EVENT,curTankId,0,0,0,0); break; } return 0; }