예제 #1
0
        public ISOConnection ExportConnection(int loggedDataOrWorkItemID, EquipmentConfiguration adaptConnection)
        {
            ISOConnection isoConnection = new ISOConnection();

            //First Connector
            Connector connector1 = DataModel.Catalog.Connectors.FirstOrDefault(c => c.Id.ReferenceId == adaptConnection.Connector1Id);

            if (connector1 != null)
            {
                DeviceElementConfiguration config = DataModel.Catalog.DeviceElementConfigurations.FirstOrDefault(c => c.Id.ReferenceId == connector1.DeviceElementConfigurationId);
                if (config != null)
                {
                    string        isoDeviceElementID = TaskDataMapper.InstanceIDMap.GetISOID(config.DeviceElementId);
                    DeviceElement deviceElement      = DataModel.Catalog.DeviceElements.FirstOrDefault(d => d.Id.ReferenceId == config.DeviceElementId);
                    if (deviceElement != null)
                    {
                        string isoDeviceID = TaskDataMapper.InstanceIDMap.GetISOID(deviceElement.DeviceModelId);
                        if (!string.IsNullOrEmpty(isoDeviceElementID) && !string.IsNullOrEmpty(isoDeviceElementID))
                        {
                            isoConnection.DeviceIdRef_0        = isoDeviceID;
                            isoConnection.DeviceElementIdRef_0 = TaskDataMapper.InstanceIDMap.GetISOID(connector1.Id.ReferenceId); //We want to refer to the Connector DeviceElement, not its parent referred by the config element
                        }
                    }
                }
            }

            //Second Connector
            Connector connector2 = DataModel.Catalog.Connectors.FirstOrDefault(c => c.Id.ReferenceId == adaptConnection.Connector2Id);

            if (connector2 != null)
            {
                DeviceElementConfiguration config = DataModel.Catalog.DeviceElementConfigurations.FirstOrDefault(c => c.Id.ReferenceId == connector2.DeviceElementConfigurationId);
                if (config != null)
                {
                    string        isoDeviceElementID = TaskDataMapper.InstanceIDMap.GetISOID(config.DeviceElementId);
                    DeviceElement deviceElement      = DataModel.Catalog.DeviceElements.FirstOrDefault(d => d.Id.ReferenceId == config.DeviceElementId);
                    if (deviceElement != null)
                    {
                        string isoDeviceID = TaskDataMapper.InstanceIDMap.GetISOID(deviceElement.DeviceModelId);
                        if (!string.IsNullOrEmpty(isoDeviceElementID) && !string.IsNullOrEmpty(isoDeviceElementID))
                        {
                            isoConnection.DeviceIdRef_1        = isoDeviceID;
                            isoConnection.DeviceElementIdRef_1 = TaskDataMapper.InstanceIDMap.GetISOID(connector2.Id.ReferenceId);
                        }
                    }
                }
            }

            //DataLogTriggers
            if (adaptConnection.DataLogTriggers.Any())
            {
                string  taskID = TaskDataMapper.InstanceIDMap.GetISOID(loggedDataOrWorkItemID);
                ISOTask task   = TaskDataMapper.ISOTaskData.ChildElements.OfType <ISOTask>().First(t => t.TaskID == taskID);
                DataLogTriggerMapper dltMapper = new DataLogTriggerMapper(TaskDataMapper);
                task.DataLogTriggers = dltMapper.ExportDataLogTriggers(adaptConnection.DataLogTriggers).ToList();
            }

            return(isoConnection);
        }
예제 #2
0
/*
 *      public void PrepareRouteStop(RouteStop result, RouteStop previousStop, EquipmentConfiguration equipment)
 *      {
 *
 *          if (result.StopAction == StopActions.LiveLoading || result.StopAction == StopActions.LiveUnloading)
 *          {
 *              if (previousStop == null)
 *              {
 *                  throw new Exception("Live action cannot be the first stop of an order");
 *              }
 *
 *              result.PreTruckConfig = new TruckConfiguration()
 *              {
 *                  EquipmentConfiguration = new EquipmentConfiguration()
 *                  {
 *                      Chassis = previousStop.PostTruckConfig.EquipmentConfiguration.Chassis,
 *                      ChassisOwner = previousStop.PostTruckConfig.EquipmentConfiguration.ChassisOwner,
 *                      Container = previousStop.PostTruckConfig.EquipmentConfiguration.Container,
 *                      ContainerOwner = previousStop.PostTruckConfig.EquipmentConfiguration.ContainerOwner,
 *                  },
 *                  IsLoaded = previousStop.PostTruckConfig.IsLoaded
 *              };
 *
 *              result.PostTruckConfig = new TruckConfiguration()
 *              {
 *                  EquipmentConfiguration = new EquipmentConfiguration()
 *                  {
 *                      Chassis = previousStop.PostTruckConfig.EquipmentConfiguration.Chassis,
 *                      ChassisOwner = previousStop.PostTruckConfig.EquipmentConfiguration.ChassisOwner,
 *                      Container = previousStop.PostTruckConfig.EquipmentConfiguration.Container,
 *                      ContainerOwner = previousStop.PostTruckConfig.EquipmentConfiguration.ContainerOwner,
 *                  },
 *                  IsLoaded = previousStop.PostTruckConfig.IsLoaded
 *              };
 *
 *              if (result.StopAction == StopActions.LiveLoading)
 *              {
 *                  result.PostTruckConfig.IsLoaded = true;
 *              }
 *
 *              if (result.StopAction == StopActions.LiveUnloading)
 *              {
 *                  result.PostTruckConfig.IsLoaded = false;
 *
 *                  // mark previous live unloading stop as loaded
 *                  if (previousStop.StopAction == StopActions.LiveUnloading)
 *                  {
 *                      previousStop.PostTruckConfig.IsLoaded = true;
 *                      result.PreTruckConfig.IsLoaded = true;
 *                  }
 *              }
 *
 *          }
 *
 *          else
 *          {
 *              result.PreTruckConfig = GetTruckConfigForAction(result.StopAction.PreState, equipment);
 *              result.PostTruckConfig = GetTruckConfigForAction(result.StopAction.PostState, equipment);
 *          }
 *
 *          if (!IsValidRouteStop(result))
 *          {
 *              Console.WriteLine(string.Format("\t\t{0} is apparently not valid for some reason.", result.Location.DisplayName));
 * //                throw new Exception("Invalid Route Stop");
 *          }
 *      }
 */
        public TruckConfiguration GetTruckConfigForAction(TruckState truckState, EquipmentConfiguration equipment)
        {
            TruckConfiguration truckConfiguration = null;

            switch (truckState)
            {
            case TruckState.Chassis:
                truckConfiguration = new TruckConfiguration()
                {
                    EquipmentConfiguration = new EquipmentConfiguration()
                    {
                        Chassis      = equipment.Chassis,
                        ChassisOwner = equipment.ChassisOwner,
                    }
                };

                break;

            case TruckState.Empty:

                truckConfiguration = new TruckConfiguration()
                {
                    EquipmentConfiguration = new EquipmentConfiguration()
                    {
                        Chassis        = equipment.Chassis,
                        ChassisOwner   = equipment.ChassisOwner,
                        Container      = equipment.Container,
                        ContainerOwner = equipment.ContainerOwner,
                    }
                };


                break;

            case TruckState.Loaded:

                truckConfiguration = new TruckConfiguration()
                {
                    IsLoaded = true,
                    EquipmentConfiguration = new EquipmentConfiguration()
                    {
                        Chassis        = equipment.Chassis,
                        ChassisOwner   = equipment.ChassisOwner,
                        Container      = equipment.Container,
                        ContainerOwner = equipment.ContainerOwner,
                    }
                };

                break;

            default:
                truckConfiguration = new TruckConfiguration();
                break;
            }

            return(truckConfiguration);
        }
예제 #3
0
        public EquipmentConfiguration ImportConnection(ISOTask task, ISOConnection isoConnection)
        {
            EquipmentConfiguration equipConfig        = new EquipmentConfiguration();
            StringBuilder          descriptionBuilder = new StringBuilder();

            //First Device Element
            int?      connectorID     = TaskDataMapper.InstanceIDMap.GetADAPTID(isoConnection.DeviceElementIdRef_0);
            Connector adaptConnector1 = null;

            if (connectorID.HasValue)
            {
                adaptConnector1 = DataModel.Catalog.Connectors.SingleOrDefault(d => d.Id.ReferenceId == connectorID.Value);
                if (adaptConnector1 != null)
                {
                    equipConfig.Connector1Id = adaptConnector1.Id.ReferenceId;

                    ISODeviceElement isoDeviceElement = TaskDataMapper.DeviceElementHierarchies.GetISODeviceElementFromID(isoConnection.DeviceElementIdRef_0);
                    descriptionBuilder.Append(isoDeviceElement.Device.DeviceDesignator);
                    descriptionBuilder.Append(":");
                    descriptionBuilder.Append(isoDeviceElement.DeviceElementDesignator);
                }
            }
            if (adaptConnector1 == null)
            {
                descriptionBuilder.Append("Unknown");
            }

            descriptionBuilder.Append("<->");

            //Second Device Element
            Connector adaptConnector2 = null;

            connectorID = TaskDataMapper.InstanceIDMap.GetADAPTID(isoConnection.DeviceElementIdRef_1);
            if (connectorID.HasValue)
            {
                adaptConnector2 = DataModel.Catalog.Connectors.SingleOrDefault(d => d.Id.ReferenceId == connectorID.Value);
                if (adaptConnector2 != null)
                {
                    equipConfig.Connector2Id = adaptConnector2.Id.ReferenceId;

                    ISODeviceElement isoDeviceElement = TaskDataMapper.DeviceElementHierarchies.GetISODeviceElementFromID(isoConnection.DeviceElementIdRef_1);
                    descriptionBuilder.Append(isoDeviceElement.Device.DeviceDesignator);
                    descriptionBuilder.Append(":");
                    descriptionBuilder.Append(isoDeviceElement.DeviceElementDesignator);
                }
            }
            if (adaptConnector2 == null)
            {
                descriptionBuilder.Append("Unknown");
            }

            equipConfig.Description = descriptionBuilder.ToString();

            return(equipConfig);
        }
예제 #4
0
        public IEnumerable <EquipmentConfiguration> ImportConnections(ISOTask isoTask)
        {
            List <EquipmentConfiguration> equipConfigs = new List <EquipmentConfiguration>();

            foreach (ISOConnection connection in isoTask.Connections)
            {
                EquipmentConfiguration equipConfig = ImportConnection(isoTask, connection);
                equipConfigs.Add(equipConfig);
            }
            return(equipConfigs);
        }
예제 #5
0
        public EquipmentConfiguration ImportConnection(ISOTask task, ISOConnection isoConnection)
        {
            EquipmentConfiguration equipConfig        = new EquipmentConfiguration();
            StringBuilder          descriptionBuilder = new StringBuilder();

            //First Device Element
            int?connectorID = TaskDataMapper.InstanceIDMap.GetADAPTID(isoConnection.DeviceElementIdRef_0);

            if (connectorID.HasValue)
            {
                Connector adaptConnector1 = DataModel.Catalog.Connectors.Single(d => d.Id.ReferenceId == connectorID.Value);
                equipConfig.Connector1Id = adaptConnector1.Id.ReferenceId;

                ISODeviceElement isoDeviceElement = TaskDataMapper.DeviceElementHierarchies.GetISODeviceElementFromID(isoConnection.DeviceElementIdRef_0);
                descriptionBuilder.Append(isoDeviceElement.Device.DeviceDesignator);
                descriptionBuilder.Append(":");
                descriptionBuilder.Append(isoDeviceElement.DeviceElementDesignator);
            }
            else
            {
                descriptionBuilder.Append("Unknown");
            }

            descriptionBuilder.Append("<->");

            //Second Device Element
            connectorID = TaskDataMapper.InstanceIDMap.GetADAPTID(isoConnection.DeviceElementIdRef_1);
            if (connectorID.HasValue)
            {
                Connector adaptConnector2 = DataModel.Catalog.Connectors.Single(d => d.Id.ReferenceId == connectorID.Value);
                equipConfig.Connector2Id = adaptConnector2.Id.ReferenceId;

                ISODeviceElement isoDeviceElement = TaskDataMapper.DeviceElementHierarchies.GetISODeviceElementFromID(isoConnection.DeviceElementIdRef_1);
                descriptionBuilder.Append(isoDeviceElement.Device.DeviceDesignator);
                descriptionBuilder.Append(":");
                descriptionBuilder.Append(isoDeviceElement.DeviceElementDesignator);
            }
            else
            {
                descriptionBuilder.Append("Unknown");
            }

            equipConfig.Description = descriptionBuilder.ToString();

            //DataLogTriggers
            if (task.DataLogTriggers.Any())
            {
                DataLogTriggerMapper dltMapper = new DataLogTriggerMapper(TaskDataMapper);
                dltMapper.ImportDataLogTriggers(task.DataLogTriggers);
            }

            return(equipConfig);
        }
예제 #6
0
        /// <summary>
        /// 機器ダブルクリックイベント
        /// </summary>
        private void lstEquipments_DoubleClick(object sender, EventArgs e)
        {
            if (this.lstEquipments.SelectedIndex < 0)
            {
                return;
            }

            var model = new EquipmentConfiguration()
            {
                MakerName = this.cmbMaker.Text,
                EquipName = this.lstEquipments.SelectedItem.ToString(),
                Rating    = this._equipments[this.lstEquipments.SelectedIndex].Rating
            };

            this._eqipConf.Add(model);
            this.grdDetail.DataSource = new BindingList <EquipmentConfiguration>(this._eqipConf);
        }
예제 #7
0
        /// <summary>
        /// 初期化処理
        /// </summary>
        protected override void Initialize()
        {
            base.ClearBindings(this.Controls);

            try
            {
                this.cmbMaker.DataSource = DropDownModel.FindAllData(TABLE_NAME.MAKERS);
                this._eqipConf           = EquipmentConfiguration.FindEquipmentConfigurationBy(this._project.ID);
            }
            catch
            {
                throw;
            }

            this.txtProjectID.DataBindings.Add("Text", this._project, "ProjectID");
            this.txtName.DataBindings.Add("Text", this._project, "Name");
            this.grpEnable.DataBindings.Add("Enable", this._project, "EnableFlag");
            this.grdDetail.DataSource = new BindingList <EquipmentConfiguration>(this._eqipConf);
        }
예제 #8
0
        public void MapDomainToModel(Job job, Drayage.Optimization.Model.Orders.Job optimizationJob, DateTime?planDate)
        {
            optimizationJob.InjectFrom <DomainToModelValueInjection>(job);

            var equipmentConfiguration = new EquipmentConfiguration();

            equipmentConfiguration.InjectFrom <DomainToModelValueInjection>(job);

            optimizationJob.EquipmentConfiguration = equipmentConfiguration;

            var modelRouteStops = optimizationJob.RouteStops.ToList();

            optimizationJob.RouteStops.Clear();

            if (job.RouteStops != null && optimizationJob.RouteStops != null)
            {
                job.RouteStops = job.RouteStops.OrderBy(p => p.SortOrder).ToList();


                int addDaysValue = 0;
                if (job.DueDate.HasValue && planDate.HasValue && job.DueDate.Value > planDate)
                {
                    addDaysValue = (int)job.DueDate.Value.Subtract(planDate.Value).TotalDays;
                    for (var x = 0; x < job.RouteStops.Count; x++)
                    {
                        if (addDaysValue >= 1)
                        {
                            //job.RouteStops[x].WindowStart =
                            //    job.RouteStops[x].WindowStart +

                            //    TimeSpan.FromDays(addDaysValue).Ticks;
                            //job.RouteStops[x].WindowEnd = job.RouteStops[x].WindowEnd +
                            //                                TimeSpan.FromDays(addDaysValue).Ticks;
                        }
                    }
                }

                var routeStopIndex = 0;
                foreach (var routeStop in job.RouteStops)
                {
                    var modelRouteStop = modelRouteStops.FirstOrDefault(f => f.Id == routeStop.Id);
                    if (modelRouteStop != null)
                    {
                        routeStop.SortOrder = routeStopIndex++;

                        if (routeStop.Location != null && routeStop.Location.WaitingTime.HasValue)
                        {
                            modelRouteStop.QueueTime = new TimeSpan(0, routeStop.Location.WaitingTime.Value, 0);
                        }

                        // fixed hotspot
                        if (routeStop.LocationId != null && routeStop.Location == null)
                        {
                            var location = _locationService.GetById((int)routeStop.LocationId);
                            routeStop.LocationId = location.Id;
                            routeStop.Location   = location;
                        }

                        if (routeStop.StopAction != null)
                        {
                            modelRouteStop.StopAction = StopActions.Actions.FirstOrDefault(p => p.ShortName == routeStop.StopAction.ShortName);
                        }

                        if (routeStop.StopDelay.HasValue)
                        {
                            modelRouteStop.ExecutionTime = new TimeSpan(0, Convert.ToInt32(routeStop.StopDelay.Value), 0);
                        }

                        var dueDateLocal = _dateTimeHelper.ConvertUtcToLocalTime(job.DueDate.Value);


                        modelRouteStop.WindowStart = new TimeSpan(routeStop.WindowStart);
                        modelRouteStop.WindowEnd   = new TimeSpan(routeStop.WindowEnd);

                        // map stop action
                        modelRouteStop.StopAction = MapDomainToModel(routeStop.StopAction);
                        // Remove Dynamic stops
                        if (routeStop.IsDynamicStop)
                        {
                            optimizationJob.RouteStops.Remove(modelRouteStop);
                        }

                        optimizationJob.RouteStops.Add(modelRouteStop);
                    }
                    else
                    {
                        var nullModelRouteStop = modelRouteStop;
                    }
                }
            }

            _routeSanitizer.PrepareJob(optimizationJob);
        }
예제 #9
0
 internal static void Prefix(string slot, ref EquipmentType __result)
 {
     EquipmentConfiguration.AddNewSlots();
 }
        public static void DescribeImplement(Catalog catalog, LoggedData loggedData)
        {
            Console.WriteLine();
            Console.WriteLine("-----------------------");
            Console.WriteLine("Equipment Configuration");
            Console.WriteLine("-----------------------");
            Console.WriteLine();


            //A LoggedData will have a single EquipmentConfigurationGroup that contains any EquipmentConfigurations in the file
            EquipmentConfigurationGroup equipConfigGroup = loggedData.EquipmentConfigurationGroup;

            //The configuration of the equipment can vary by each region, although it is likely that the equipment configuration remains consistent across many regions
            //Any distinct configurations represented in the field operation will be EquipmentConfigurations within this group
            List <EquipmentConfiguration> distinctConfigurations = equipConfigGroup.EquipmentConfigurations;

            Console.WriteLine($"Field operation has {distinctConfigurations.Count} distinct equipment configuration(s).");
            Console.WriteLine();

            //While a single OperationData object supports a list of EquipmentConfigurations, the 2020 plugin will always reference a single EquipmentConfiguration on any one OperationData.
            //This allows the consumer to predictively map data based a known equipment definition for that data.

            //Going deeper on the first OperationData
            Console.WriteLine("The first region and OperationData within the field operation has this configuration:");
            EquipmentConfiguration equipConfig = distinctConfigurations.SingleOrDefault(c => c.Id.ReferenceId == loggedData.OperationData.First().EquipmentConfigurationIds.Single());

            //The equipment configuration maps to 2 connectors, explaining what machinery was hitched together
            Connector connector1 = catalog.Connectors.SingleOrDefault(c => c.Id.ReferenceId == equipConfig.Connector1Id);
            Connector connector2 = catalog.Connectors.SingleOrDefault(c => c.Id.ReferenceId == equipConfig.Connector2Id);

            //Each connector contains two pieces of information, the DeviceElementConfiguration that connector/hitch is a part of, and metadata on a specific hitch point.
            DeviceElementConfiguration deviceElementConfiguration1 = catalog.DeviceElementConfigurations.SingleOrDefault(c => c.Id.ReferenceId == connector1.DeviceElementConfigurationId);
            HitchPoint hitchPoint1 = catalog.HitchPoints.SingleOrDefault(h => h.Id.ReferenceId == connector1.HitchPointId);

            DeviceElementConfiguration deviceElementConfiguration2 = catalog.DeviceElementConfigurations.SingleOrDefault(c => c.Id.ReferenceId == connector2.DeviceElementConfigurationId);
            HitchPoint hitchPoint2 = catalog.HitchPoints.SingleOrDefault(h => h.Id.ReferenceId == connector2.HitchPointId);

            //DeviceElementConfigurations are a polymorphic object within ADAPT.
            //A DeviceElementConfiguration may be of type
            //  MachineConfiguration (describing a tractor/vehicle)
            //  ImplementConfiguration (describing an entire implement)
            //  SectionConfiguration (describing a subsection or individual row of an implement)

            //DeviceElementConfigurations are part of a 3-object hierarchy that describes a piece of equipment
            //1. DeviceModel - A high-level description of the equipment: brand, manufacturer, description.   Any single piece of equipment has only 1 device model.
            //2. DeviceElement -A hierarchical descripion part of the equipment: brand, manufacturer, description, and type of element (section, machine, implement, etc.).
            //                  A DeviceElement maps to a single DeviceModel, and may be a parent and/or child of other DeviceElements.
            //                  E.g., each section is a child of the root implement DeviceElement
            //3. DeviceElementConfigurations - The DeviceElementConfiguration is an extension of the DeviceElement, each mapping to a single DeviceElement,
            //                                  but having specific phyproperties such as width and offsets.

            //The 2020 equipment configuration will always have a Machine/Vehicle as the Connector1 and an Implement as the Connector2.
            MachineConfiguration   vehicleConfiguration   = deviceElementConfiguration1 as MachineConfiguration;
            ImplementConfiguration implementConfiguration = deviceElementConfiguration2 as ImplementConfiguration;

            HitchPoint vehicleHitch   = hitchPoint1;
            HitchPoint implementHitch = hitchPoint2;

            //The DeviceElements expose the hierarchy between parts of the equipment
            Console.WriteLine();
            Console.WriteLine("Vehicle DeviceElement Hierarchy:");
            DeviceElement vehicleDeviceElement = catalog.DeviceElements.SingleOrDefault(d => d.Id.ReferenceId == vehicleConfiguration.DeviceElementId);

            DescribeDeviceHierarchy(catalog, vehicleDeviceElement, 0, new List <DeviceElement>());

            Console.WriteLine();
            Console.WriteLine("Implement DeviceElement Hierarchy:");
            List <DeviceElement> implementChildElements = new List <DeviceElement>();
            DeviceElement        implementDeviceElement = catalog.DeviceElements.SingleOrDefault(d => d.Id.ReferenceId == implementConfiguration.DeviceElementId);

            DescribeDeviceHierarchy(catalog, implementDeviceElement, 0, implementChildElements);

            Console.WriteLine();


            Console.WriteLine();
            Console.WriteLine("-----------------------");
            Console.WriteLine("Implement Width Values");
            Console.WriteLine("-----------------------");
            Console.WriteLine();

            //The Implement and Section DeviceElementConfigurations carry width information.
            Console.WriteLine($"The {implementConfiguration.Description} is {implementConfiguration.PhysicalWidth.Value.Value} {implementConfiguration.PhysicalWidth.Value.UnitOfMeasure.Code} wide.");
            foreach (DeviceElement childElement in implementChildElements)
            {
                DeviceElementConfiguration deviceElementConfiguration = catalog.DeviceElementConfigurations.SingleOrDefault(c => c.DeviceElementId == childElement.Id.ReferenceId);
                if (deviceElementConfiguration != null)
                {
                    SectionConfiguration sectionConfiguration = deviceElementConfiguration as SectionConfiguration;
                    if (sectionConfiguration != null)
                    {
                        Console.WriteLine($"{sectionConfiguration.Description} is {sectionConfiguration.SectionWidth.Value.Value} {sectionConfiguration.SectionWidth.Value.UnitOfMeasure.Code} wide.");
                    }
                }
            }


            Console.WriteLine();
            Console.WriteLine("-----------------------");
            Console.WriteLine("Equipment Offset Values");
            Console.WriteLine("-----------------------");
            Console.WriteLine();

            //Various offset values describe where each device element is located vs. other elements via data on the device element configuration

            //Vehicle GPS Receiver
            DescribeOffset("GPS Receiver", vehicleConfiguration.GpsReceiverXOffset, vehicleConfiguration.GpsReceiverYOffset, "tractor reference point (center of rear axle)");

            //Tractor hitch offset
            DescribeOffset("vehicle hitch point", vehicleHitch.ReferencePoint.XOffset, vehicleHitch.ReferencePoint.YOffset, "tractor reference point (center of rear axle)");

            //Implement hitch offset
            DescribeOffset("implement hitch point", implementHitch.ReferencePoint.XOffset, implementHitch.ReferencePoint.YOffset, "implement reference point (center of implement)");

            //Implmement control point offset (inverse of the prior)
            DescribeOffset("implement control point offset", implementConfiguration.ControlPoint.XOffset, implementConfiguration.ControlPoint.YOffset, "tractor hitch point");

            //Section offsets (measured to center of each section)
            foreach (DeviceElement childElement in implementChildElements)
            {
                DeviceElementConfiguration deviceElementConfiguration = catalog.DeviceElementConfigurations.SingleOrDefault(c => c.DeviceElementId == childElement.Id.ReferenceId);
                if (deviceElementConfiguration != null)
                {
                    SectionConfiguration sectionConfiguration = deviceElementConfiguration as SectionConfiguration;
                    if (sectionConfiguration != null)
                    {
                        DescribeOffset($"{childElement.Description} offset", sectionConfiguration.InlineOffset, sectionConfiguration.LateralOffset, "tractor hitch point");
                    }
                }
            }
        }
예제 #11
0
 internal static void Postfix(uGUI_DepthCompass __instance)
 {
     EquipmentConfiguration.RefreshPDA();
 }
예제 #12
0
        public void PrepareRouteStop(RouteStop result, RouteStop previousStop, EquipmentConfiguration equipment, Job job)
        {
            if (result.StopAction == StopActions.LiveLoading || result.StopAction == StopActions.LiveUnloading)
            {
                if (previousStop == null)
                {
                    Console.WriteLine("Live action cannot be the first stop of an order");
                    Console.WriteLine(string.Format("\t\tjob={0},result.Location.DisplayName={1}", job.DisplayName, result.Location.DisplayName));
//                    throw new Exception("Live action cannot be the first stop of an order");
                }

                result.PreTruckConfig = new TruckConfiguration()
                {
                    EquipmentConfiguration = new EquipmentConfiguration()
                    {
                        Chassis        = previousStop.PostTruckConfig.EquipmentConfiguration.Chassis,
                        ChassisOwner   = previousStop.PostTruckConfig.EquipmentConfiguration.ChassisOwner,
                        Container      = previousStop.PostTruckConfig.EquipmentConfiguration.Container,
                        ContainerOwner = previousStop.PostTruckConfig.EquipmentConfiguration.ContainerOwner,
                    },
                    IsLoaded = previousStop.PostTruckConfig.IsLoaded
                };

                result.PostTruckConfig = new TruckConfiguration()
                {
                    EquipmentConfiguration = new EquipmentConfiguration()
                    {
                        Chassis        = previousStop.PostTruckConfig.EquipmentConfiguration.Chassis,
                        ChassisOwner   = previousStop.PostTruckConfig.EquipmentConfiguration.ChassisOwner,
                        Container      = previousStop.PostTruckConfig.EquipmentConfiguration.Container,
                        ContainerOwner = previousStop.PostTruckConfig.EquipmentConfiguration.ContainerOwner,
                    },
                    IsLoaded = previousStop.PostTruckConfig.IsLoaded
                };

                if (result.StopAction == StopActions.LiveLoading)
                {
                    result.PostTruckConfig.IsLoaded = true;
                }

                if (result.StopAction == StopActions.LiveUnloading)
                {
                    result.PostTruckConfig.IsLoaded = false;

                    // mark previous live unloading stop as loaded
                    if (previousStop.StopAction == StopActions.LiveUnloading)
                    {
                        previousStop.PostTruckConfig.IsLoaded = true;
                        result.PreTruckConfig.IsLoaded        = true;
                    }
                }
            }
            else
            {
                if (equipment == null || equipment.Chassis == null || equipment.Container == null)
                {
                    if (result.StopAction.PostState != TruckState.Bobtail)
                    {
                        // should have equipment, container and chassis instantiated at this point
                        if (equipment == null)
                        {
                            equipment = new EquipmentConfiguration();
                        }

                        equipment.Container      = new Container();
                        equipment.Chassis        = new Chassis();
                        equipment.ChassisOwner   = new ChassisOwner();
                        equipment.ContainerOwner = new ContainerOwner();
                    }
                }

                result.PreTruckConfig  = GetTruckConfigForAction(result.StopAction.PreState, equipment);
                result.PostTruckConfig = GetTruckConfigForAction(result.StopAction.PostState, equipment);
            }

            if (!IsValidRouteStop(result))
            {
                Console.WriteLine(string.Format("\t\t\tjob=<{0}>\n",
                                                job.DisplayName));
//                throw new Exception("Invalid Route Stop");
            }
        }