You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

82 lines
3.1 KiB

package com.iflytop.a800.device;
import com.iflytop.a800.resource.IncubatorSlot;
import com.iflytop.a800.resource.TestCard;
import com.iflytop.uf.UfActuatorCmdExecutor;
import com.iflytop.uf.UfCmdSnippetExecutor;
import com.iflytop.uf.model.UfMdbOption;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class Incubator extends DeviceComponent {
// 槽位
private final List<IncubatorSlot> slots;
// 槽位起始索引
private Integer slotStartIndex = 0;
// 构造函数
public Incubator() {
this.slotStartIndex = 0;
this.slots = new ArrayList<>();
for ( int i = 0; i < 20; i++ ) {
var slot = new IncubatorSlot();
slot.index = i;
this.slots.add(slot);
}
}
// 移动至提交位置
public void moveToCommitPos( IncubatorSlot slot ) {
Integer commitStartPos = UfMdbOption.getInteger("IncubatorSlotCommitStartPos");
Integer commitDistance = UfMdbOption.getInteger("IncubatorSlotCommitDistance");
int commitPos = commitStartPos + commitDistance * slot.index;
UfActuatorCmdExecutor.execute("MotorIncubatorRotate", "motor_easy_move_to", Integer.toString(commitPos));
}
// 推送新卡片
public IncubatorSlot pushNewCard(TestCard card) {
var lock = this.lock("PushNewCard");
IncubatorSlot slot = null;
for ( int i=0; i<20; i++ ) {
var tmpSlot = this.slots.get(this.slotStartIndex);
this.slotStartIndex = (this.slotStartIndex + 1) % 20;
if ( tmpSlot.card != null ) {
continue ;
}
slot = tmpSlot;
break;
}
if ( slot == null ) {
throw new RuntimeException("无可用孵育盘槽位");
}
Integer boxPos = UfMdbOption.getInteger(String.format("TestCardWarehouseBox.%d", card.boxIndex));
Integer slotStartPos = UfMdbOption.getInteger("IncubatorSlotStartPos");
Integer slotDistance = UfMdbOption.getInteger("IncubatorSlotDistance");
Integer slotPos = slotStartPos + slotDistance * slot.index;
Integer commitStartPos = UfMdbOption.getInteger("IncubatorSlotCommitStartPos");
Integer commitDistance = UfMdbOption.getInteger("IncubatorSlotCommitDistance");
Integer commitPos = commitStartPos + commitDistance * slot.index;
Map<String,Object> params = Map.of(
"box", boxPos,
"slot", slotPos,
"commit", commitPos
);
UfCmdSnippetExecutor.execute("IncubatorTestCardPushIn", params);
slot.card = card;
this.unlock(lock);
return slot;
}
// 退出到扫描
public void exitCardToScanner( IncubatorSlot slot ) {
Integer startPos = UfMdbOption.getInteger("IncubatorSlotExitStartPos");
Integer distance = UfMdbOption.getInteger("IncubatorSlotExitDistance");
Integer slotPos = startPos + distance * slot.index;
Map<String,Object> params = Map.of("slot", slotPos);
UfCmdSnippetExecutor.execute("IncubatorTestCardExitToScanner", params);
slot.card = null;
}
}