boolean processPIDPost(BowlerPacket * Packet){ int chan, val; float time; switch (Packet->use.head.RPC){ case APID: time = (float)get32bit(Packet,0); uint8_t i=0; for(i=0;i<Packet->use.data[4];i++){ SetPIDTimed(i,get32bit(Packet,5+(i*4)),time); } READY(Packet,zone,3); break; case _VPD: chan = Packet->use.data[0]; val = get32bit(Packet,1); time=get32bit(Packet,5); StartPDVel(chan,val,time); READY(Packet,zone,4); break; case _PID: chan = Packet->use.data[0]; val = get32bit(Packet,1); time=get32bit(Packet,5); SetPIDTimed(chan,val,time); READY(Packet,zone,5); break; case RPID: chan = Packet->use.data[0]; b_println("Resetting PID channel from packet:",ERROR_PRINT);printBowlerPacketDEBUG(Packet,ERROR_PRINT); pidReset(chan, get32bit(Packet,1)); READY(Packet,zone,6); break; default: return false; } return true; }
void cancelPrint(){ Print_Level l = getPrintLevel(); println_I("Cancel Print"); setPrintLevel(l); while(FifoGetPacketCount(&packetFifo)>0){ FifoGetPacket(&packetFifo,&linTmpPack); } setInterpolateXYZ(0, 0, getmaxZ(), 0); ZeroPID(hwMap.Extruder0.index); SetPIDTimed(hwMap.Heater0.index,0,0); }
void processLinearInterpPacket(BowlerPacket * Packet){ if(Packet->use.head.RPC == _SLI){ //INT32_UNION tmp; float tmpData [5]; int i; tmpData[0] = ((float)get32bit(Packet,1)); for(i=1;i<5;i++){ tmpData[i] = ((float)get32bit(Packet,(i*4)+1))/1000; } setInterpolateXYZ(tmpData[1], tmpData[2], tmpData[3],tmpData[0]); float extr =tmpData[4]/extrusionScale; //println_I("Current Extruder MM=");p_fl_W(tmpData[4]);print_I(", Ticks=");p_fl_W(extr) SetPIDTimed(hwMap.Extruder0.index, extr,tmpData[0]); } }
float setLinkAngle(int index, float value, float ms){ int localIndex=linkToHWIndex(index); float v = value/getLinkScale(index); if( index ==0|| index ==1|| index ==2 ){ // if(v>1650){ // println_E("Upper Capped link ");p_int_E(index);print_E(", attempted: ");p_fl_E(value); // v=1650; // } // if(v<-6500){ // v=-6500; // println_E("Lower Capped link ");p_int_E(index);print_E(", attempted: ");p_fl_E(value); // } } println_I("Setting position from cartesian controller ");p_int_I(index);print_I(" to ");p_fl_I(v); return SetPIDTimed(localIndex,v,ms); }
void StartPDVel(uint8_t chan,float unitsPerSeCond,float ms){ if(ms<.1){ //println_I("Starting Velocity"); getPidVelocityDataTable(chan)->enabled=true; getPidGroupDataTable(chan)->config.Enabled=false; getPidVelocityDataTable(chan)->lastPosition=GetPIDPosition(chan); getPidVelocityDataTable(chan)->lastTime=getMs(); getPidVelocityDataTable(chan)->unitsPerSeCond=unitsPerSeCond; getPidVelocityDataTable(chan)->currentOutputVel =0; }else{ //println_I("Starting Velocity Timed"); float seConds = ms/1000; int32_t dist = (int32_t) unitsPerSeCond*(int32_t) seConds; int32_t delt = ((int32_t) (GetPIDPosition(chan))-dist); SetPIDTimed(chan, delt, ms); } }
uint8_t SetPID(uint8_t chan, float val) { SetPIDTimed(chan, val, 0); return true; }