コード例 #1
0
  private void checkRailPosition(
      List<RailState> railStates, SystemState state, List<Integer> nodes) {
    for (RailState railState : railStates) {
      Rail rail = railState.getRail();
      double setpoint = railState.getRailWidget().getSetpoint();
      double position = railState.getRailPosition();
      double home = rail.getHomeDistance();
      double tol = rail.getTolPlus();

      switch (railState.getRailFlag()) {
        case NOT_HOMED:
          yellowFlag = true;
          railState.setColor(GRAY);
          break;
        case HOMING:
          if (position > home - tol && position < home + tol)
            railState.setRailFlag(Equip.RailFlag.HOMED);
          yellowFlag = true;
          railState.setColor(WHITE);
          break;
        case HOMED:
          yellowFlag = true;
          railState.setColor(WHITE);
          break;
        case SEEKING:
          if (position > setpoint - tol && position < setpoint + tol)
            railState.setRailFlag(Equip.RailFlag.ACTIVE);
          yellowFlag = true;
          railState.setColor(WHITE);
          break;
        case ACTIVE:
          railState.setColor(GREEN);
          if (position < setpoint - tol || position > setpoint + tol) {
            yellowFlag = true;
            if (railState.getColor().equals(GREEN)) {
              railState.setColor(YELLOW);
              if (state.equals(SystemState.SYSTEM_STATE_RUN)) {
                CanComm.sendSystemState(
                    SystemState.SYSTEM_STATE_RUN_PAUSE, Can.OpId.OPER_SET.ordinal(), nodes);
                CanComm.setLightTower(Equip.LightTowerState.WARNING.getTower());
                log.error("Rail out of tolerance (warning) band...");
              }
            }
          }
          break;
        default:
          break;
      }
    }
  }