Пример #1
0
 //对位的光电状态
 private void RfPosMsgSend(FerryPosSet set, DevFerry ferry)
 {
     if (!PubTask.Rf.SendFerryLightPos(set.MEID, ferry.UpSite, ferry.DownSite, ferry.UpLight, ferry.DownLight) &&
         mTimer.IsOver(TimerTag.RfFerrySiteUpdateSendOffline, ferry.DeviceID, 60))
     {
         StopRfPosSet(set.MEID);
     }
 }
Пример #2
0
        /// <summary>
        /// 1.运输车任务状态
        /// 2.满砖/空砖/正常取货卸货
        /// </summary>
        /// <param name="task"></param>
        private void CheckDev(CarrierTask task)
        {
            task.CheckAlert();
            if (task.OperateMode == DevOperateModeE.手动)
            {
                if (task.Task != DevCarrierTaskE.终止 && task.Task != DevCarrierTaskE.无)
                {
                    DoTask(task.ID, DevCarrierTaskE.终止);
                }

                Track track = PubMaster.Track.GetTrack(task.TrackId);
                if (track.Type == TrackTypeE.摆渡车_入 || track.Type == TrackTypeE.摆渡车_出)
                {
                    PubTask.Ferry.StopFerryByFerryTrackId(track.id);
                }
            }
            if (task.Status != DevCarrierStatusE.停止)
            {
                return;
            }
            if (task.OperateMode == DevOperateModeE.无)
            {
                task.DoModeUpdate(DevCarrierWorkModeE.生产);
            }
            if (task.DevReset == DevCarrierResetE.位 &&
                task.DevStatus.ActionType == DevCarrierSignalE.位)
            {
                task.DevReset = DevCarrierResetE.无动作;
            }

            //if (task.OperateMode == DevOperateModeE.手动模式) return;

            //if (task.WorkMode != DevCarrierWorkModeE.生产模式) return;

            #region [检查任务]

            #region [倒库完成]
            //倒库完成后小车回到空轨道今天等待,倒库任务完成,同时有空轨道信息
            //if (task.Task == DevCarrierTaskE.后退至轨道倒库
            //    && task.FinishTask == DevCarrierTaskE.后退至轨道倒库)
            //{
            //    if(task.Signal == DevCarrierSignalE.空轨道)
            //    {
            //        PubTask.Trans.ShiftTrans(task.ID, task.TrackId);
            //    }
            //}

            //if()
            #endregion

            #region [空砖]

            if (task.Task == DevCarrierTaskE.后退取砖 &&
                task.FinishTask == DevCarrierTaskE.后退取砖)
            {
                Track track = PubMaster.Track.GetTrack(task.TrackId);
                if (track.Type == TrackTypeE.储砖_出 || track.Type == TrackTypeE.储砖_出入)
                {
                    switch (task.Signal)
                    {
                    case DevCarrierSignalE.空轨道:

                        if (task.Load == DevCarrierLoadE.无货)
                        {
                            PubMaster.Track.UpdateStockStatus(track.id, TrackStockStatusE.空砖, "上砖取空");
                            PubMaster.Goods.ClearTrackEmtpy(track.id);
                            PubMaster.Track.AddTrackLog((ushort)task.AreaId, task.ID, track.id, TrackLogE.空轨道, "无货");
                        }
                        else
                        {
                            PubMaster.Track.AddTrackLog((ushort)task.AreaId, task.ID, track.id, TrackLogE.空轨道, "有货");
                        }
                        break;
                    }

                    task.DevReset = DevCarrierResetE.位;
                }
            }

            if (task.Signal == DevCarrierSignalE.空轨道 && task.Task != DevCarrierTaskE.后退取砖)
            {
                task.DevReset = DevCarrierResetE.位;
            }

            #endregion

            #region [非空非满]

            if (task.Task == DevCarrierTaskE.前进放砖 &&
                task.FinishTask == DevCarrierTaskE.前进放砖 &&
                task.Signal == DevCarrierSignalE.非空非满)
            {
                task.DevReset = DevCarrierResetE.位;
            }

            #endregion

            #region [满砖]
            if (task.Signal == DevCarrierSignalE.满轨道 &&
                task.Task == task.FinishTask)
            {
                Track givetrack = PubMaster.Track.GetTrackByCode(task.GiveTrackCode);
                if (givetrack != null &&
                    (givetrack.Type == TrackTypeE.储砖_入 || givetrack.Type == TrackTypeE.储砖_出入))
                {
                    ushort storecount = PubMaster.Track.AddTrackLog((ushort)task.AreaId, task.ID, givetrack.id, TrackLogE.满轨道, "");
                    //ushort areafullqty = PubMaster.Area.GetAreaFullQty(task.AreaId);
                    ushort areafullqty = 8; // 金凯瑞直接8车算了 - -。
                    if (storecount >= areafullqty)
                    {
                        //PubMaster.Track.SetTrackEaryFull(givetrack.id, true, DateTime.Now);

                        PubMaster.Track.UpdateStockStatus(givetrack.id, TrackStockStatusE.满砖, "下砖放满");
                        PubMaster.Track.UpdateRecentGood(givetrack.id, 0);
                        PubMaster.Track.UpdateRecentTile(givetrack.id, 0);
                    }
                }
                else if (givetrack != null)
                {
                    PubMaster.Warn.AddDevWarn(WarningTypeE.CarrierFullSignalFullNotOnStoreTrack, (ushort)task.ID);
                    PubMaster.Track.AddTrackLog((ushort)task.AreaId, task.ID, givetrack.id, TrackLogE.满轨道, "非储砖轨道");
                }

                task.DevReset = DevCarrierResetE.位;
            }

            //if((task.Site > 300 && task.Site < 400)
            //    || (task.Site > 700 && task.Site <800))
            //{
            //    if(task.Signal == DevCarrierSignalE.满轨道)
            //    {
            //        task.DevReset = DevCarrierResetE.复位;
            //    }
            //}

            #endregion

            #region [倒库]

            if (task.Task == DevCarrierTaskE.后退至轨道倒库 &&
                task.Signal == DevCarrierSignalE.非空非满 &&
                task.Status == DevCarrierStatusE.停止 &&
                mTimer.IsOver(TimerTag.CarrierSortTakeGive, (ushort)task.ID, 5, 10))
            {
                task.DevReset = DevCarrierResetE.位;
            }

            #endregion

            #region [逻辑警告]

            task.CheckLogicAlert();

            #endregion
        }