123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480 |
- using NX_CommonClassLibrary;
- using NX_LogClassLibrary;
- using NX_ModelClassLibrary.BaseModel;
- using NX_ModelClassLibrary.Common;
- using NX_ModelClassLibrary.CustomEnum;
- using NX_ModelClassLibrary.CustomEvent;
- using NX_ModelClassLibrary.OpcModel;
- using NX_ModelClassLibrary.TranModel;
- using NX_OpcUaClientLibrary;
- using NX_WcsBiz.CommonBusiness;
- using NX_WcsBiz.WcsDispatch;
- using NX_WcsDal.CommonBusiness;
- using NX_WcsDal.WcsBusiness;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace NX_WcsBiz.WcsBusiness
- {
- public class Tran_Biz
- {
- #region 单例模式
- /// <summary>
- /// 单例模式对象
- /// </summary>
- private static Tran_Biz _instance = null;
- private static readonly object lockObj = new object();
- /// <summary>
- /// 单例模式方法
- /// </summary>
- public static Tran_Biz Instance
- {
- get
- {
- if (_instance == null)
- {
- lock (lockObj)
- {
- if (_instance == null)
- {
- _instance = new Tran_Biz();
- }
- }
- }
- return _instance;
- }
- }
- #endregion
- #region 全局变量
- /// <summary>
- /// 输送线设备所属PLC信息列表
- /// </summary>
- public List<BasWcsPlcMd> tranBasPlcMdList;
- /// <summary>
- /// 输送线设备列表
- /// </summary>
- public List<BasWcsDevMd> tranDevList;
- /// <summary>
- /// 输送线设备类型
- /// </summary>
- public BasWcsDevTypeMd tranDevTypeMd;
- /// <summary>
- /// 输送线当前作业指令集合信息。
- /// </summary>
- public Hashtable CurrentWorkingCmdList;
- /// <summary>
- /// 日志显示帮助类对象
- /// </summary>
- public ShowLogToFrmHelper showLogToFrm = new ShowLogToFrmHelper();
- /// <summary>
- /// 日志头部
- /// </summary>
- private readonly string LogHeadText = "输送线业务类 ==>> ";
- #endregion
- #region 输送线主业务
- /// <summary>
- /// 初始化输送线业务类
- /// </summary>
- /// <returns></returns>
- public bool Init()
- {
- try
- {
- tranDevTypeMd = BasCommon_Biz.Instance.basWcsDevTypeMdList.FirstOrDefault(x => x.DevTypeCode == "TranType");
- tranDevList = BasCommon_Biz.Instance.basWcsDevMdList.FindAll(x => x.DevTypeCode == tranDevTypeMd.DevTypeCode);
- tranBasPlcMdList = new List<BasWcsPlcMd>();
- CurrentWorkingCmdList = Hashtable.Synchronized(new Hashtable());
- foreach (BasWcsDevMd item in tranDevList)
- {
- BasWcsPlcMd tmpMd = tranBasPlcMdList.FirstOrDefault(x => x.PlcCode == item.DevPlcNo);
- if (tmpMd != null)
- {
- tranBasPlcMdList.Add(tmpMd);
- }
- }
- ShowLogToForm($"初始化输送线业务类成功!", true, LogTypeEnum.Run);
- return true;
- }
- catch (Exception ex)
- {
- ShowLogToForm($"初始化输送线业务类发生异常!【{ex.Message}】", true, LogTypeEnum.Err);
- return false;
- }
- }
- /// <summary>
- /// 输送线主业务函数
- /// </summary>
- public void TranMainBizRunFunc()
- {
- try
- {
- //加载输送线指令
- List<WcsTranCmdMd> tranCmdLst = Tran_Dal.Instance.LoadTranUnFinishedCmd(AppConfigHelper.Get("CurrWcsControlRegionCode"));
- if (tranCmdLst != null && tranCmdLst.Count > 0)
- {
- foreach (WcsTranCmdMd item in tranCmdLst)
- {
- if (!CurrentWorkingCmdList.ContainsKey(item.TranCmdId))
- {
- CurrentWorkingCmdList.Add(item.TranCmdId, item);
- ShowLogToForm(GetTranBizRunLog("输送线指令加载成功!", item), true, LogTypeEnum.Run);
- }
- }
- foreach (DictionaryEntry item in CurrentWorkingCmdList)
- {
- WcsTranCmdMd tmpTranCmd = (WcsTranCmdMd)item.Value;
- switch (tmpTranCmd.CmdStatus)
- {
- case TranCmdStatusEnum.初始创建:
- SendPlcTranCmd(tmpTranCmd);
- break;
- case TranCmdStatusEnum.已下发PLC:
- UpdateCurrTranCmdWorking(tmpTranCmd);
- break;
- case TranCmdStatusEnum.执行中:
- FinishCurrCrnCmd(tmpTranCmd);
- break;
- default:
- break;
- }
- }
- }
- }
- catch (Exception ex)
- {
- ShowLogToForm($"输送线主业务函数运行发生异常!【{ex.Message}】", true, LogTypeEnum.Err);
- }
- }
- /// <summary>
- /// 下发输送线PLC指令信息
- /// </summary>
- /// <param name="wcsTranCmdMd">输送线指令对象</param>
- private void SendPlcTranCmd(WcsTranCmdMd wcsTranCmdMd)
- {
- BasWcsDevMd basTranDev = tranDevList.FirstOrDefault(x => x.DevCode == wcsTranCmdMd.TranDevNo);
- WcsOpcItemMd WorkModelOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "WorkModel");
- WcsOpcItemMd FrontHaveGoodsFlagOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "FrontHaveGoodsFlag");
- WcsOpcItemMd BackEndHaveGoodsFlagOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "BackEndHaveGoodsFlag");
- WcsOpcItemMd AlarmNoOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "AlarmNo");
- TranDevWorkModeEnum WorkModel = EnumExtensionHelper.GetEnumObj<TranDevWorkModeEnum>(WorkModelOpcItemMd.OpcItemValue);
- bool FrontHaveGoodsFlag = Convert.ToBoolean(FrontHaveGoodsFlagOpcItemMd.OpcItemValue ?? "False");
- bool BackEndHaveGoodsFlag = Convert.ToBoolean(BackEndHaveGoodsFlagOpcItemMd.OpcItemValue ?? "False");
- int AlarmNo = Convert.ToInt32(AlarmNoOpcItemMd.OpcItemValue ?? "0");
- if (WorkModel == TranDevWorkModeEnum.联机待机 &&
- (FrontHaveGoodsFlag || BackEndHaveGoodsFlag) &&
- AlarmNo == 0)
- {
- WcsOpcItemMd WCS_WorkCmd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "WCS_WorkCmd");
- WcsOpcItemMd WCS_TaskNo = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "WCS_TaskNo");
- WcsOpcItemMd WCS_TargetLocNo = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "WCS_TargetLocNo");
- if (LeadOpcUaClientHelper.Instance.WriteOpcItemValue(WCS_TaskNo, wcsTranCmdMd.CmdNo))
- {
- //TODO:后续增加LOG
- ShowLogToForm(GetTranBizRunLog($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【自动】写入OPC指令号数据:【{wcsTranCmdMd.CmdNo}】成功!", wcsTranCmdMd), false, LogTypeEnum.OPCRun);
- if (LeadOpcUaClientHelper.Instance.WriteOpcItemValue(WCS_TargetLocNo, (Convert.ToInt32(wcsTranCmdMd.ElocNo)) - 1000))
- {
- //TODO:后续增加LOG
- ShowLogToForm(GetTranBizRunLog($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【自动】写入OPC目标地址数据:【{wcsTranCmdMd.ElocNo}】成功!", wcsTranCmdMd), false, LogTypeEnum.OPCRun);
- if (LeadOpcUaClientHelper.Instance.WriteOpcItemValue(WCS_WorkCmd, (int)WcsWriteTranCmdTypeEnum.执行任务))
- {
- //TODO:后续增加LOG
- ShowLogToForm(GetTranBizRunLog($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【自动】写入OPC作业指令类型数据:【{WcsWriteTranCmdTypeEnum.执行任务}-{(int)WcsWriteTranCmdTypeEnum.执行任务}】成功!", wcsTranCmdMd), false, LogTypeEnum.OPCRun);
- wcsTranCmdMd.CmdStatus = TranCmdStatusEnum.已下发PLC;
- //更新数据库指令状态信息
- Tran_Dal.Instance.UpdateTranCmdStatus(wcsTranCmdMd);
- ShowLogToForm(GetTranBizRunLog($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【自动】下发PLC:【{WcsWriteTranCmdTypeEnum.执行任务}】指令成功!", wcsTranCmdMd), true, LogTypeEnum.Run);
- }
- else
- {
- //TODO:后续增加LOG
- ShowLogToForm(GetTranBizRunLog($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【自动】写入OPC作业指令类型数据:【{WcsWriteTranCmdTypeEnum.执行任务}-{(int)WcsWriteTranCmdTypeEnum.执行任务}】失败!", wcsTranCmdMd), false, LogTypeEnum.OPCRun);
- }
- }
- else
- {
- //TODO:后续增加LOG
- ShowLogToForm(GetTranBizRunLog($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【自动】写入OPC目标地址数据:【{wcsTranCmdMd.ElocNo}】失败!", wcsTranCmdMd), false, LogTypeEnum.OPCRun);
- }
- }
- else
- {
- //TODO:后续增加LOG
- ShowLogToForm(GetTranBizRunLog($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【自动】写入OPC指令号数据:【{wcsTranCmdMd.CmdNo}】失败!", wcsTranCmdMd), false, LogTypeEnum.OPCRun);
- }
- }
- }
- /// <summary>
- /// 更新输送线指令作业中数据
- /// </summary>
- /// <param name="wcsTranCmdMd">输送线指令对象</param>
- private void UpdateCurrTranCmdWorking(WcsTranCmdMd wcsTranCmdMd)
- {
- BasWcsDevMd basTranDev = tranDevList.FirstOrDefault(x => x.DevCode == wcsTranCmdMd.TranDevNo);
- wcsTranCmdMd.CmdStatus = TranCmdStatusEnum.执行中;
- //更新数据库指令状态信息
- Tran_Dal.Instance.UpdateTranCmdStatus(wcsTranCmdMd);
- ShowLogToForm(GetTranBizRunLog($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【自动】指令状态更新为执行中!", wcsTranCmdMd), true, LogTypeEnum.Run);
- }
- /// <summary>
- /// 输送线指令完成函数
- /// </summary>
- /// <param name="wcsTranCmdMd">输送线指令对象</param>
- private void FinishCurrCrnCmd(WcsTranCmdMd wcsTranCmdMd)
- {
- BasWcsLocMd eLocMd = BasCommon_Biz.Instance.allWcsLocList.FirstOrDefault(x => x.LocCode == wcsTranCmdMd.ElocNo);
- BasWcsDevMd basTranDev = tranDevList.FirstOrDefault(x => x.DevCode == eLocMd.LocExtMsg);
- WcsOpcItemMd WorkModelOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "WorkModel");
- WcsOpcItemMd FrontHaveGoodsFlagOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "FrontHaveGoodsFlag");
- WcsOpcItemMd BackEndHaveGoodsFlagOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "BackEndHaveGoodsFlag");
- WcsOpcItemMd AlarmNoOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "AlarmNo");
- WcsOpcItemMd TargetLocNoOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "TargetLocNo");
- WcsOpcItemMd TaskNoOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "TaskNo");
- TranDevWorkModeEnum WorkModel = EnumExtensionHelper.GetEnumObj<TranDevWorkModeEnum>(WorkModelOpcItemMd.OpcItemValue);
- bool FrontHaveGoodsFlag = Convert.ToBoolean(FrontHaveGoodsFlagOpcItemMd.OpcItemValue ?? "False");
- bool BackEndHaveGoodsFlag = Convert.ToBoolean(BackEndHaveGoodsFlagOpcItemMd.OpcItemValue ?? "False");
- int AlarmNo = Convert.ToInt32(AlarmNoOpcItemMd.OpcItemValue ?? "0");
- int TargetLocNo = Convert.ToInt32(TargetLocNoOpcItemMd.OpcItemValue ?? "0");
- int TaskNo = Convert.ToInt32(TaskNoOpcItemMd.OpcItemValue ?? "0");
- if (WorkModel == TranDevWorkModeEnum.联机待机 &&
- (FrontHaveGoodsFlag ||
- BackEndHaveGoodsFlag) &&
- AlarmNo == 0 &&
- (TargetLocNo + 1000).ToString() == wcsTranCmdMd.ElocNo &&
- TaskNo == wcsTranCmdMd.CmdNo)
- {
- wcsTranCmdMd.CmdStatus = TranCmdStatusEnum.完成;
- //更新数据库指令状态信息
- Tran_Dal.Instance.UpdateTranCmdStatus(wcsTranCmdMd);
- //调用任务反馈,完成输送线指令。生成下一步的数据。
- DispUntilityReturnMd retmd = TaskResponse_Disp.Instance.TaskResponseHandleFunc(new TaskResponseMd
- {
- TrayCode = wcsTranCmdMd.TrayCode,
- PalletCode = wcsTranCmdMd.PalletCode,
- TaskNo = wcsTranCmdMd.TaskNo,
- CmdNo = wcsTranCmdMd.CmdNo,
- CurrentLocNo = wcsTranCmdMd.ElocNo,
- TaskResponseType = DispatchResponseHandleTypeEnum.输送线指令反馈完成
- });
- if (retmd.IsSuccess)
- {
- ShowLogToForm(GetTranBizRunLog($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【自动】指令结束成功!【{retmd.RetMsg}】", wcsTranCmdMd), true, LogTypeEnum.Run);
- //CurrentWorkingCmdList.Remove(wcsTranCmdMd.TranCmdId);
- }
- else
- {
- ShowLogToForm(GetTranBizRunLog($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【自动】指令结束失败!【{retmd.RetMsg}】", wcsTranCmdMd), true, LogTypeEnum.Err);
- }
- }
- }
- public void TranOnLineLocBizRunFunc()
- {
- try
- {
- List<BasWcsLocMd> tranOnLineLocLst = BasCommon_Biz.Instance.allWcsLocList.FindAll(x => x.LocTypeCode == "OnLineLoc" || x.LocTypeCode == "OnLineAndGeneralLoc");
- if (tranOnLineLocLst != null && tranOnLineLocLst.Count > 0)
- {
- foreach (BasWcsLocMd item in tranOnLineLocLst)
- {
- BasWcsDevMd basTranDev = tranDevList.FirstOrDefault(x => x.DevCode == item.LocExtMsg);
- WcsOpcItemMd WorkModelOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "WorkModel");
- WcsOpcItemMd FrontHaveGoodsFlagOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "FrontHaveGoodsFlag");
- WcsOpcItemMd BackEndHaveGoodsFlagOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "BackEndHaveGoodsFlag");
- WcsOpcItemMd AlarmNoOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "AlarmNo");
- WcsOpcItemMd ApplyInStockOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "ApplyInStock");
- WcsOpcItemMd UltrahighFlagOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "UltrahighFlag");
- WcsOpcItemMd OverWeightFlagOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "OverWeightFlag");
- WcsOpcItemMd PalletCodeOpcItemMd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "PalletCode");
- WcsOpcItemMd WCS_PalletCode = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "WCS_PalletCode");
- TranDevWorkModeEnum WorkModel = EnumExtensionHelper.GetEnumObj<TranDevWorkModeEnum>(WorkModelOpcItemMd.OpcItemValue);
- bool FrontHaveGoodsFlag = Convert.ToBoolean(FrontHaveGoodsFlagOpcItemMd.OpcItemValue ?? "False");
- bool BackEndHaveGoodsFlag = Convert.ToBoolean(BackEndHaveGoodsFlagOpcItemMd.OpcItemValue ?? "False");
- int AlarmNo = Convert.ToInt32(AlarmNoOpcItemMd.OpcItemValue ?? "False");
- bool ApplyInStock = Convert.ToBoolean(ApplyInStockOpcItemMd.OpcItemValue ?? "False");
- bool UltrahighFlag = Convert.ToBoolean(UltrahighFlagOpcItemMd.OpcItemValue ?? "False");
- bool OverWeightFlag = Convert.ToBoolean(OverWeightFlagOpcItemMd.OpcItemValue ?? "False");
- //string PalletCode = PalletCodeOpcItemMd.OpcItemValue ?? "";
- BasBarcodeScannerMd scannMd = BasCommon_Biz.Instance.allBarcodeScannerList.FirstOrDefault(x => x.LocCode == item.LocCode);
- string PalletCode = string.Empty;
- if (scannMd != null)
- {
- PalletCode = scannMd.BarcodeMessage;
- }
- if (WorkModel == TranDevWorkModeEnum.联机待机 &&
- (FrontHaveGoodsFlag || BackEndHaveGoodsFlag) &&
- ApplyInStock &&
- !UltrahighFlag &&
- !OverWeightFlag &&
- !string.IsNullOrEmpty(PalletCode) &&
- AlarmNo == 0)
- {
- //向WCS调度请求任务。
- DispUntilityReturnMd retMd = TaskRequest_Disp.Instance.TaskRequestHandleFunc(new TaskRequestMd { PalletCode = PalletCode, CurrentLocNo = item.LocCode, TaskHandleType = DispatchRequestHandleTypeEnum.托盘申请上线 });
- if (retMd.IsSuccess)
- {
- ShowLogToForm(retMd.RetMsg, true, LogTypeEnum.Run);
- //同时吧托盘条码下发给PLC
- if (LeadOpcUaClientHelper.Instance.WriteOpcItemValue(WCS_PalletCode, PalletCode))
- {
- scannMd.BarcodeMessage = string.Empty;
- //TODO:后续增加LOG
- ShowLogToForm($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】入库口站台:【{item.LocCode}】【自动】写入OPC托盘号:【{PalletCode}】数据成功!", true, LogTypeEnum.OPCRun);
- }
- else
- {
- //TODO:后续增加LOG
- ShowLogToForm($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】入库口站台:【{item.LocCode}】【自动】写入OPC托盘号:【{PalletCode}】数据失败!", true, LogTypeEnum.OPCRun);
- }
- }
- else
- {
- ShowLogToForm($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】入库口站台:【{item.LocCode}】【自动】托盘申请上线失败!【{retMd.RetMsg}】", true, LogTypeEnum.Err);
- }
- }
- }
- }
- //Task.Run(() =>
- //{
- DispUntilityReturnMd retMdAuto = TaskRequest_Disp.Instance.TaskRequestHandleFunc(new TaskRequestMd { PalletCode = null, CurrentLocNo = null, TaskHandleType = DispatchRequestHandleTypeEnum.自动拆解MWS大任务 });
- if (retMdAuto != null)
- {
- if (retMdAuto.IsSuccess)
- {
- ShowLogToForm(retMdAuto.RetMsg, true, LogTypeEnum.Run);
- }
- else
- {
- ShowLogToForm(retMdAuto.RetMsg, true, LogTypeEnum.Err);
- }
- }
- //});
- }
- catch (Exception ex)
- {
- ShowLogToForm($"输送线上线口业务处理函数发生异常!【{ex.Message}】", true, LogTypeEnum.Err);
- }
- }
- #endregion
- #region 桌面显示Log、记录log到文本
- /// <summary>
- /// 桌面显示Log、记录log到文本
- /// </summary>
- /// <param name="msg">log内容</param>
- /// <param name="isShowFormFlag">是否输出到桌面日志端。true:输出桌面;false:只记录文本</param>
- /// <param name="logTypeEnum">日志类型枚举</param>
- private void ShowLogToForm(string msg, bool isShowFormFlag, LogTypeEnum logTypeEnum)
- {
- if (isShowFormFlag)
- {
- showLogToFrm.ShowLog(new ShowLogToFrmEventArgs(LogHeadText + msg));
- }
- LogHelper.WriteLog(LogHeadText + msg, logTypeEnum);
- }
- private string GetTranBizRunLog(string prefixStr, WcsTranCmdMd wcsTranCmdMd)
- {
- return $"{prefixStr} -- 任务号:【{wcsTranCmdMd.TaskNo}】指令号:【{wcsTranCmdMd.CmdNo}】组盘码:【{wcsTranCmdMd.TrayCode}】托盘号:【{wcsTranCmdMd.PalletCode}】起点站台:【{wcsTranCmdMd.SlocNo}】起点PLC号:【{wcsTranCmdMd.SplcNo}】终点站台:【{wcsTranCmdMd.ElocNo}】终点PLC号:【{wcsTranCmdMd.EplcNo}】指令类型:【{wcsTranCmdMd.CmdType}】动作类型:【{wcsTranCmdMd.ActiveType}】指令状态:【{wcsTranCmdMd.CmdStatus}】异常标识:【{wcsTranCmdMd.ErrFlag}】指令Log:【{wcsTranCmdMd.CmdLog}】异常Log:【{wcsTranCmdMd.ErrLog}】";
- }
- #endregion
- public List<WcsTranCmdMd> LoadCurrentWorkingTranCmd(string regionCode)
- {
- return Tran_Dal.Instance.LoadTranUnFinishedCmd(regionCode);
- }
- public string TranManualControl(string sTranDevNo, string eTranDevNo, WcsWriteTranCmdTypeEnum wcsWriteTranCmdType,string palletCode)
- {
- BasWcsDevMd basTranDev = tranDevList.FirstOrDefault(x => x.DevCode == sTranDevNo);
- WcsOpcItemMd WCS_WorkCmd = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "WCS_WorkCmd");
- WcsOpcItemMd WCS_TaskNo = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "WCS_TaskNo");
- WcsOpcItemMd WCS_TargetLocNo = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "WCS_TargetLocNo");
- WcsOpcItemMd WCS_PalletCode = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basTranDev.DevCode && x.PlcCode == basTranDev.DevPlcNo && x.OpcItemCode == "WCS_PalletCode");
- string cmdNo = BasCommon_Dal.Instance.GetSysSequence("Cmd_No");
- if (LeadOpcUaClientHelper.Instance.WriteOpcItemValue(WCS_TaskNo, cmdNo))
- {
- //TODO:后续增加LOG
- ShowLogToForm($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【手动】写入OPC指令号数据:【{cmdNo}】成功!", false, LogTypeEnum.OPCRun);
- if (LeadOpcUaClientHelper.Instance.WriteOpcItemValue(WCS_TargetLocNo, (Convert.ToInt32(eTranDevNo.Replace("Tran", ""))) - 1000))
- {
- //TODO:后续增加LOG
- ShowLogToForm($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【手动】写入OPC目标地址数据:【{eTranDevNo.Replace("Tran", "")}】成功!", false, LogTypeEnum.OPCRun);
- if (LeadOpcUaClientHelper.Instance.WriteOpcItemValue(WCS_PalletCode, palletCode))
- {
- //TODO:后续增加LOG
- ShowLogToForm($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【手动】写入OPC托盘号数据:【{palletCode}】成功!", false, LogTypeEnum.OPCRun);
- if (LeadOpcUaClientHelper.Instance.WriteOpcItemValue(WCS_WorkCmd, Convert.ToInt32(wcsWriteTranCmdType)))
- {
- //TODO:后续增加LOG
- ShowLogToForm($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【手动】写入OPC作业指令类型数据:【{wcsWriteTranCmdType}-{(int)wcsWriteTranCmdType}】成功!", false, LogTypeEnum.OPCRun);
- ShowLogToForm($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【手动】下发给PLC指令成功!指令号:【{cmdNo}】指令类型:【{wcsWriteTranCmdType}-{(int)wcsWriteTranCmdType}】托盘号:【{palletCode}】起始点:【{sTranDevNo}】目标点:【{eTranDevNo}】", true, LogTypeEnum.Run);
- return $"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【手动】下发给PLC指令成功!指令号:【{cmdNo}】指令类型:【{wcsWriteTranCmdType}-{(int)wcsWriteTranCmdType}】托盘号:【{palletCode}】起始点:【{sTranDevNo}】目标点:【{eTranDevNo}】!";
- }
- else
- {
- //TODO:后续增加LOG
- ShowLogToForm($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【手动】写入OPC作业指令数据失败!", false, LogTypeEnum.OPCRun);
- }
- }
- else
- {
- //TODO:后续增加LOG
- ShowLogToForm($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【手动】写入OPC托盘号数据失败!", false, LogTypeEnum.OPCRun);
- }
- }
- else
- {
- //TODO:后续增加LOG
- ShowLogToForm($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【手动】写入OPC目标地址数据失败!", false, LogTypeEnum.OPCRun);
- }
- }
- else
- {
- //TODO:后续增加LOG
- ShowLogToForm($"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【手动】写入OPC指令号数据失败!", false, LogTypeEnum.OPCRun);
- }
- return $"输送线:【{basTranDev.DevCode}-{basTranDev.DevName}】【手动】下发给PLC指令失败!指令号:【{cmdNo}】指令类型:【{wcsWriteTranCmdType}-{(int)wcsWriteTranCmdType}】托盘号:【{palletCode}】起始点:【{sTranDevNo}】目标点:【{eTranDevNo}】!";
- }
- public List<WcsTranCmdMd> LoadAllTranCmd(WcsTranCmdSearchMd searchMd)
- {
- return Tran_Dal.Instance.LoadAllTranCmd(searchMd);
- }
- public object ReadTranOpcItem(string tranDevNo, string opcItemCode)
- {
- BasWcsDevMd basWcsDevMd = BasCommon_Biz.Instance.basWcsDevMdList.FirstOrDefault(x => x.DevCode == tranDevNo);
- WcsOpcItemMd tmpOpcItem = BasCommon_Biz.Instance.allOpcItemList.FirstOrDefault(x => x.DevCode == basWcsDevMd.DevCode && x.PlcCode == basWcsDevMd.DevPlcNo && x.OpcItemCode == opcItemCode);
- return tmpOpcItem.OpcItemValue;
- }
- }
- }
|