using Gebhardt.Shared; using System.Collections.Generic; using System.Linq; namespace Gebhardt.StoreWare.Wcs.Common { #region Send Methoden /// /// Klasse dient zum Senden von Telegrammen an die SPS /// public static partial class ConveyorTelegrams { private static List destinationsOldSystem = new List() { Constants.MfcAllDestinationsOldSystem.ETXBU, Constants.MfcAllDestinationsOldSystem.ETXBU_M, Constants.MfcAllDestinationsOldSystem.ETXBU_S, Constants.MfcAllDestinationsOldSystem.IPT01, Constants.MfcAllDestinationsOldSystem.IPT02, Constants.MfcAllDestinationsOldSystem.IPT03, Constants.MfcAllDestinationsOldSystem.IPT01, Constants.MfcAllDestinationsOldSystem.REP01, Constants.MfcAllDestinationsOldSystem.REP02, Constants.MfcAllDestinationsOldSystem.REP03, Constants.MfcAllDestinationsOldSystem.ETM01, Constants.MfcAllDestinationsOldSystem.ETM02, Constants.MfcAllDestinationsOldSystem.ETM03, Constants.MfcAllDestinationsOldSystem.ETS01, Constants.MfcAllDestinationsOldSystem.ETS02, Constants.MfcAllDestinationsOldSystem.ETS03, Constants.MfcAllDestinationsOldSystem.QCS01, Constants.MfcAllDestinationsOldSystem.QCS02, Constants.MfcAllDestinationsOldSystem.ERR01, Constants.MfcAllDestinationsOldSystem.TOPUP, //Constants.MfcAllDestinationsOldSystem.ERS01, Constants.MfcAllDestinationsOldSystem.LOOP3, Constants.MfcAllDestinationsOldSystem.C0101, Constants.MfcAllDestinationsOldSystem.C0201, Constants.MfcAllDestinationsOldSystem.S0300, Constants.MfcAllDestinationsOldSystem.S0301, Constants.MfcAllDestinationsOldSystem.S0302, Constants.MfcAllDestinationsOldSystem.S0303, Constants.MfcAllDestinationsOldSystem.S0304, Constants.MfcAllDestinationsOldSystem.S0305, Constants.MfcAllDestinationsOldSystem.S0400, Constants.MfcAllDestinationsOldSystem.S0401, Constants.MfcAllDestinationsOldSystem.S0402, Constants.MfcAllDestinationsOldSystem.S0403, Constants.MfcAllDestinationsOldSystem.S0404, Constants.MfcAllDestinationsOldSystem.S0405, //Scanner Replenishment Constants.MfcScannerOldSystem.SC101, Constants.MfcScannerOldSystem.SC102, Constants.MfcScannerOldSystem.SC103, Constants.MfcScannerOldSystem.SC104, Constants.MfcScannerOldSystem.SC105, Constants.MfcScannerOldSystem.SC106, Constants.MfcScannerOldSystem.SC107, //Scanner Loop+Cranes Constants.MfcScannerOldSystem.SC201, Constants.MfcScannerOldSystem.SC202, Constants.MfcScannerOldSystem.SC203, Constants.MfcScannerOldSystem.SC204, Constants.MfcScannerOldSystem.SC205, Constants.MfcScannerOldSystem.SC206, Constants.MfcScannerOldSystem.SC207, Constants.MfcScannerOldSystem.SC208, Constants.MfcScannerOldSystem.SC209, Constants.MfcScannerOldSystem.SC210, Constants.MfcScannerOldSystem.SC211, Constants.MfcScannerOldSystem.SC301, Constants.MfcScannerOldSystem.SC302, Constants.MfcScannerOldSystem.SC303, Constants.MfcScannerOldSystem.SC304, Constants.MfcScannerOldSystem.SC305, Constants.MfcScannerOldSystem.SC306, Constants.MfcScannerOldSystem.SC307, Constants.MfcScannerOldSystem.SC308, Constants.MfcScannerOldSystem.SC309, Constants.MfcScannerOldSystem.SC310, //MLS Aisles Constants.MfcScannerOldSystem.SC401, Constants.MfcScannerOldSystem.SC402, Constants.MfcScannerOldSystem.SC403, Constants.MfcScannerOldSystem.SC404, Constants.MfcScannerOldSystem.SC405, Constants.MfcScannerOldSystem.SC406, Constants.MfcScannerOldSystem.SC407, Constants.MfcScannerOldSystem.SC408, Constants.MfcScannerOldSystem.SC409, Constants.MfcScannerOldSystem.SC410, Constants.MfcScannerOldSystem.SC411, Constants.MfcScannerOldSystem.SC412, //Constants.MfcScannerOldSystem.SC501, //Constants.MfcScannerOldSystem.SC502, //Constants.MfcScannerOldSystem.SC503, //Constants.MfcScannerOldSystem.SC504, //Constants.MfcScannerOldSystem.SC505, //Constants.MfcScannerOldSystem.SC601, //Constants.MfcScannerOldSystem.SC602, //Constants.MfcScannerOldSystem.SC603, //Constants.MfcScannerOldSystem.SC604, //Constants.MfcScannerOldSystem.SC605 }; #region SendTord Methoden MFRtoSPS /// /// Transportorder to device PLCs /// Richtung : MFRtoSPS /// pFillContent true /// Wenn pFillContent True, wird Telegram mit dem Zeichen '0' linksbündig aufgefüllt. /// /// Ef Core Database Context /// (Lenght:8 PadChar:'*' L/R: L) /// Source (Lenght:11 PadChar:'-' L/R: R) /// Destination (Lenght:11 PadChar:'-' L/R: R) /// LE type from DB (Lenght:10 PadChar:'0' L/R: R) /// Orders Conveyor ID (Lenght:10 PadChar:'0' L/R: L) /// public static bool SendTordEtra(Gebhardt.StoreWare.Wcs.Common.DbAccess.IWcsDbContext db, string pHU, string pSrc, string pDest, string pType, string pToID) { bool sent = false; if (pDest.Contains("EMB") || pSrc.Contains("EMB") || pSrc.Contains(Constants.MfcScanner.SC0505) || pSrc.Contains(Constants.MfcScanner.SC0137) || pSrc.Contains(Constants.MfcScanner.SC0183)) { sent = SendTordWithDefaults(db, p_HU: pHU, p_Src: pSrc, p_Dest: pDest, p_Type: pType, p_ToID: pToID, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC05); } else if (pDest.StartsWith("PIC1")) { sent = SendTordWithDefaults(db, p_HU: pHU, p_Src: pSrc, p_Dest: pDest, p_Type: pType, p_ToID: pToID, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC03); } else if (pSrc.Contains(Constants.MfcAllDestinations.ERR12) || pSrc.StartsWith("SEQ") || pDest.StartsWith("PIC2")) { sent = SendTordWithDefaults(db, p_HU: pHU, p_Src: pSrc, p_Dest: pDest, p_Type: pType, p_ToID: pToID, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC02); } // Old telegrams // TODO: Fix to send to 01 for real system! if (destinationsOldSystem.Contains(pSrc) || destinationsOldSystem.Contains(pDest)) { var leType = db.LeType.Where(t => t.TypePrefix == pHU.Substring(0, 1)).FirstOrDefault(); int minWeight = 1000; int maxWeight = 50000; if (leType != null) { minWeight = leType.TareWeight - 1000; maxWeight = leType.MaxWeight; } string destinationForOldSystem = pDest; string[] replenishmentArea = new[] { Constants.MfcAllDestinationsOldSystem.IPT01, Constants.MfcAllDestinationsOldSystem.IPT02, Constants.MfcAllDestinationsOldSystem.IPT03, Constants.MfcAllDestinationsOldSystem.ETXBU, Constants.MfcAllDestinationsOldSystem.ETXBU_M, Constants.MfcAllDestinationsOldSystem.ETXBU_S, Constants.MfcScannerOldSystem.SC102, Constants.MfcScannerOldSystem.SC101, Constants.MfcScannerOldSystem.SC103, Constants.MfcAllDestinationsOldSystem.TOPUP }; if (!destinationsOldSystem.Contains(pDest)) { destinationForOldSystem = Constants.MfcAllDestinationsOldSystem.QCS01; } if (replenishmentArea.Contains(pDest) || replenishmentArea.Contains(pSrc)) { sent = Send0001WithDefaults(db, ConveyorTelegramsDataSource.S_31, ConveyorTelegramsDataDestination.D_02, pHU, destinationForOldSystem, p_WgtMin: minWeight.ToString(), p_WgtMax: maxWeight.ToString()); } sent = Send0001WithDefaults(db, ConveyorTelegramsDataSource.S_31, ConveyorTelegramsDataDestination.D_01, pHU, destinationForOldSystem, p_WgtMin: minWeight.ToString(), p_WgtMax: maxWeight.ToString()); } //Don't send to new system if both source and destination are in old system if (!(destinationsOldSystem.Contains(pSrc) && destinationsOldSystem.Contains(pDest))) { //If only Destination is in old system, we need to tell the new system to drive to LOOP3, only this destination is known if (destinationsOldSystem.Contains(pDest)) { pDest = Constants.MfcAllDestinationsOldSystem.LOOP3; } sent = SendTordWithDefaults(db, p_HU: pHU, p_Src: pSrc, p_Dest: pDest, p_Type: pType, p_ToID: pToID, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC01); } return sent; } public static bool SendTordPalletizingEtra(Gebhardt.StoreWare.Wcs.Common.DbAccess.IWcsDbContext db, string pHU, string pSrc, string pToID, List pDestList) { //PLC needs the order to be ascending according to transport direction pDestList = pDestList.OrderBy(d => d.Substring(d.Length - 1, 1)).ToList(); return SendTordWithDefaults(db, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC02, p_HU: pHU, p_Src: pSrc, p_ToID: pToID, p_DestList: $"[{string.Join(',', pDestList)}]", p_Dest: pDestList[0]); } public static bool SendTordPalletDispatchLineEtra(Gebhardt.StoreWare.Wcs.Common.DbAccess.IWcsDbContext db, string pHU, string pSrc, string pToID, string pDest, bool pWrap, bool pPrint) { return SendTordWithDefaults(db, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC07, p_HU: pHU, p_Src: pSrc, p_Dest: pDest, p_ToID: pToID, p_Wrap: pWrap ? "1" : "0", p_Print: pPrint ? "1" : "0"); } #endregion SendTord Methoden MFRtoSPS #region SendDeparture Methoden MFRtoSPS /// /// Departs immediately /// Richtung : MFRtoSPS /// pFillContent true /// Wenn pFillContent True, wird Telegram mit dem Zeichen '0' linksbündig aufgefüllt. /// /// Ef Core Database Context /// (Lenght:8 PadChar:'*' L/R: L) /// (Lenght:11 PadChar:'-' L/R: R) /// . public static bool SendDepartureEtra(Gebhardt.StoreWare.Wcs.Common.DbAccess.IWcsDbContext db, string pHU, string pSrc) { if (pSrc.StartsWith("PIC1")) { return SendDepartureWithDefaults(db, p_HU: pHU, p_Src: pSrc, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC03); } if (pSrc.StartsWith("PIC2") || pSrc.StartsWith(Common.Constants.MfcAllDestinations.ERR12)) { return SendDepartureWithDefaults(db, p_HU: pHU, p_Src: pSrc, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC02); } if (pSrc.StartsWith(Common.Constants.MfcAllDestinations.ERR11)) { return SendDepartureWithDefaults(db, p_HU: pHU, p_Src: pSrc, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC05); } if (destinationsOldSystem.Contains(pSrc)) { return Send0006WithDefaults(db, p_HU: pHU, p_Src: pSrc); } return SendDepartureWithDefaults(db, p_HU: pHU, p_Src: pSrc); } #endregion SendDepature Methoden MFRtoSPS #region SendTordDelete Methoden MFRtoSPS /// /// Delete an order /// Richtung : MFRtoSPS /// pFillContent true /// Wenn pFillContent True, wird Telegram mit dem Zeichen '0' linksbündig aufgefüllt. /// /// Ef Core Database Context /// (Lenght:12 PadChar:'*' L/R: L) /// Orders Conveyor ID (Lenght:10 PadChar:'0' L/R: L) /// public static bool SendTordDeleteEtra(Gebhardt.StoreWare.Wcs.Common.DbAccess.IWcsDbContext db, string pHU) { //Todo: only send Tords to PLCs involved in the transport? SendTordDeleteWithDefaults(db, p_HU: pHU, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC01); SendTordDeleteWithDefaults(db, p_HU: pHU, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC02); SendTordDeleteWithDefaults(db, p_HU: pHU, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC03); SendTordDeleteWithDefaults(db, p_HU: pHU, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC05); //Old PLC Send0002WithDefaults(db, p_HU: pHU, p_DataDestination: ConveyorTelegramsDataDestination.D_01); Send0002WithDefaults(db, p_HU: pHU, p_DataDestination: ConveyorTelegramsDataDestination.D_02); return SendTordDeleteWithDefaults(db, p_HU: pHU, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC07); } #endregion SendTordDelete Methoden MFRtoSPS #region SendResetData Methoden MFRtoSPS /// ///TelegramsContent hat Constant Parameters /// Reset data /// Richtung : MFRtoSPS /// pFillContent true /// Wenn pFillContent True, wird Telegram mit dem Zeichen '0' linksbündich ausgefüllt. /// /// Ziel /// (Lenght:50 PadChar:'§' L/R: R) /// public static bool SendResetDataEtra(DbAccess.IWcsDbContext db, Enums.ResetDataInfos p_Info) { SendResetDataWithDefaults(db, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC01, p_Info: p_Info.GetEnumDescription()); SendResetDataWithDefaults(db, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC02, p_Info: p_Info.GetEnumDescription()); SendResetDataWithDefaults(db, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC03, p_Info: p_Info.GetEnumDescription()); SendResetDataWithDefaults(db, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC05, p_Info: p_Info.GetEnumDescription()); Send0004WithDefaults(db); return SendResetDataWithDefaults(db, p_DataDestination: ConveyorTelegramsDataDestination.D_PLC07, p_Info: p_Info.GetEnumDescription()); } #endregion SendResetData Methoden MFRtoSPS } #endregion }