feat: 添加Quartz日志助手类并重构任务服务日志记录
refactor(任务服务): 统一ILogger和QuartzLogger的日志记录方式
fix(任务枚举): 修正空箱入库任务类型值
feat(任务流服务): 初始化方法增加返回值以处理错误
style(前端): 调整任务状态显示逻辑和样式
chore: 更新模拟器配置文件和忽略文件
| | |
| | | **/.claude/settings.local.json |
| | | **/.vs/**/DocumentLayout.json |
| | | **/.vs/**/DocumentLayout.backup.json |
| | | /Code/æµè¯å·¥å
·/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data |
| | | /Code/æµè¯å·¥å
·/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | {"t":0,"agent":"a48e41d","agent_type":"Explore","event":"agent_start","parent_mode":"none"} |
| | | {"t":0,"agent":"a48e41d","agent_type":"Explore","event":"agent_stop","success":true,"duration_ms":51400} |
| | |
| | | { |
| | | "lastSentAt": "2026-04-14T08:08:15.956Z" |
| | | "lastSentAt": "2026-04-15T06:28:49.381Z" |
| | | } |
| | |
| | | { |
| | | "updatedAt": "2026-04-13T02:47:35.467Z", |
| | | "updatedAt": "2026-04-15T06:10:46.493Z", |
| | | "missions": [ |
| | | { |
| | | "id": "session:9007b9ea-1eb6-4d24-8fe7-2c3a949eac88:none", |
| | |
| | | "sourceKey": "session-stop:adb1029c24100db60" |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | "id": "session:cf22b2af-f777-4b1d-beca-2152d6beebbb:none", |
| | | "source": "session", |
| | | "name": "none", |
| | | "objective": "Session mission", |
| | | "createdAt": "2026-04-15T06:09:55.093Z", |
| | | "updatedAt": "2026-04-15T06:10:46.493Z", |
| | | "status": "done", |
| | | "workerCount": 1, |
| | | "taskCounts": { |
| | | "total": 1, |
| | | "pending": 0, |
| | | "blocked": 0, |
| | | "inProgress": 0, |
| | | "completed": 1, |
| | | "failed": 0 |
| | | }, |
| | | "agents": [ |
| | | { |
| | | "name": "Explore:a48e41d", |
| | | "role": "Explore", |
| | | "ownership": "a48e41df38204e6dc", |
| | | "status": "done", |
| | | "currentStep": null, |
| | | "latestUpdate": "completed", |
| | | "completedSummary": null, |
| | | "updatedAt": "2026-04-15T06:10:46.493Z" |
| | | } |
| | | ], |
| | | "timeline": [ |
| | | { |
| | | "id": "session-start:a48e41df38204e6dc:2026-04-15T06:09:55.093Z", |
| | | "at": "2026-04-15T06:09:55.093Z", |
| | | "kind": "update", |
| | | "agent": "Explore:a48e41d", |
| | | "detail": "started Explore:a48e41d", |
| | | "sourceKey": "session-start:a48e41df38204e6dc" |
| | | }, |
| | | { |
| | | "id": "session-stop:a48e41df38204e6dc:2026-04-15T06:10:46.493Z", |
| | | "at": "2026-04-15T06:10:46.493Z", |
| | | "kind": "completion", |
| | | "agent": "Explore:a48e41d", |
| | | "detail": "completed", |
| | | "sourceKey": "session-stop:a48e41df38204e6dc" |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | |
| | | "status": "completed", |
| | | "completed_at": "2026-04-13T02:47:35.467Z", |
| | | "duration_ms": 9005 |
| | | }, |
| | | { |
| | | "agent_id": "a48e41df38204e6dc", |
| | | "agent_type": "Explore", |
| | | "started_at": "2026-04-15T06:09:55.093Z", |
| | | "parent_mode": "none", |
| | | "status": "completed", |
| | | "completed_at": "2026-04-15T06:10:46.493Z", |
| | | "duration_ms": 51400 |
| | | } |
| | | ], |
| | | "total_spawned": 32, |
| | | "total_completed": 32, |
| | | "total_spawned": 33, |
| | | "total_completed": 33, |
| | | "total_failed": 0, |
| | | "last_updated": "2026-04-13T02:47:35.573Z" |
| | | "last_updated": "2026-04-15T06:10:46.596Z" |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | { |
| | | "version": "1.0.0", |
| | | "lastScanned": 1776214627595, |
| | | "projectRoot": "d:\\Git\\ShanMeiXinNengYuan\\Code\\WCS\\WIDESEAWCS_Client", |
| | | "techStack": { |
| | | "languages": [ |
| | | { |
| | | "name": "JavaScript/TypeScript", |
| | | "version": null, |
| | | "confidence": "high", |
| | | "markers": [ |
| | | "package.json" |
| | | ] |
| | | } |
| | | ], |
| | | "frameworks": [ |
| | | { |
| | | "name": "vue", |
| | | "version": "3.2.37", |
| | | "category": "frontend" |
| | | }, |
| | | { |
| | | "name": "vite", |
| | | "version": "5.0.0", |
| | | "category": "build" |
| | | } |
| | | ], |
| | | "packageManager": "pnpm", |
| | | "runtime": null |
| | | }, |
| | | "build": { |
| | | "buildCommand": "pnpm build", |
| | | "testCommand": null, |
| | | "lintCommand": "pnpm lint", |
| | | "devCommand": null, |
| | | "scripts": { |
| | | "serve": "vite", |
| | | "build": "vite build", |
| | | "preview": "vite preview", |
| | | "lint": "eslint --ext .js,.vue src" |
| | | } |
| | | }, |
| | | "conventions": { |
| | | "namingStyle": null, |
| | | "importStyle": null, |
| | | "testPattern": null, |
| | | "fileOrganization": "type-based" |
| | | }, |
| | | "structure": { |
| | | "isMonorepo": false, |
| | | "workspaces": [], |
| | | "mainDirectories": [ |
| | | "public", |
| | | "src", |
| | | "tests" |
| | | ], |
| | | "gitBranches": { |
| | | "defaultBranch": "master", |
| | | "branchingStrategy": null |
| | | } |
| | | }, |
| | | "customNotes": [], |
| | | "directoryMap": { |
| | | "config": { |
| | | "path": "config", |
| | | "purpose": "Configuration files", |
| | | "fileCount": 1, |
| | | "lastAccessed": 1776214627557, |
| | | "keyFiles": [ |
| | | "buttons.js" |
| | | ] |
| | | }, |
| | | "dist": { |
| | | "path": "dist", |
| | | "purpose": "Distribution/build output", |
| | | "fileCount": 3, |
| | | "lastAccessed": 1776214627558, |
| | | "keyFiles": [ |
| | | "index.html", |
| | | "wcslogo.png", |
| | | "wms_d.png" |
| | | ] |
| | | }, |
| | | "public": { |
| | | "path": "public", |
| | | "purpose": "Public files", |
| | | "fileCount": 3, |
| | | "lastAccessed": 1776214627572, |
| | | "keyFiles": [ |
| | | "index.html", |
| | | "wcslogo.png", |
| | | "wms_d.png" |
| | | ] |
| | | }, |
| | | "src": { |
| | | "path": "src", |
| | | "purpose": "Source code", |
| | | "fileCount": 2, |
| | | "lastAccessed": 1776214627573, |
| | | "keyFiles": [ |
| | | "App.vue", |
| | | "main.js" |
| | | ] |
| | | }, |
| | | "tests": { |
| | | "path": "tests", |
| | | "purpose": "Test files", |
| | | "fileCount": 0, |
| | | "lastAccessed": 1776214627573, |
| | | "keyFiles": [] |
| | | }, |
| | | "dist\\assets": { |
| | | "path": "dist\\assets", |
| | | "purpose": "Static assets", |
| | | "fileCount": 87, |
| | | "lastAccessed": 1776214627574, |
| | | "keyFiles": [ |
| | | "401-BfTrT_7C.js", |
| | | "404-CUk7f22q.js", |
| | | "Audit-C52MvHzW.css" |
| | | ] |
| | | }, |
| | | "dist\\static": { |
| | | "path": "dist\\static", |
| | | "purpose": "Static files", |
| | | "fileCount": 1, |
| | | "lastAccessed": 1776214627575, |
| | | "keyFiles": [ |
| | | "login_bg.png" |
| | | ] |
| | | }, |
| | | "public\\static": { |
| | | "path": "public\\static", |
| | | "purpose": "Static files", |
| | | "fileCount": 1, |
| | | "lastAccessed": 1776214627575, |
| | | "keyFiles": [ |
| | | "login_bg.png" |
| | | ] |
| | | }, |
| | | "src\\api": { |
| | | "path": "src\\api", |
| | | "purpose": "API routes", |
| | | "fileCount": 3, |
| | | "lastAccessed": 1776214627576, |
| | | "keyFiles": [ |
| | | "http.js", |
| | | "permission.js", |
| | | "useTest.js" |
| | | ] |
| | | }, |
| | | "src\\assets": { |
| | | "path": "src\\assets", |
| | | "purpose": "Static assets", |
| | | "fileCount": 1, |
| | | "lastAccessed": 1776214627577, |
| | | "keyFiles": [ |
| | | "logo.png" |
| | | ] |
| | | }, |
| | | "src\\components": { |
| | | "path": "src\\components", |
| | | "purpose": "UI components", |
| | | "fileCount": 0, |
| | | "lastAccessed": 1776214627577, |
| | | "keyFiles": [] |
| | | }, |
| | | "src\\views": { |
| | | "path": "src\\views", |
| | | "purpose": "View templates", |
| | | "fileCount": 4, |
| | | "lastAccessed": 1776214627577, |
| | | "keyFiles": [ |
| | | "fix.js", |
| | | "Home.vue", |
| | | "Index.vue" |
| | | ] |
| | | } |
| | | }, |
| | | "hotPaths": [], |
| | | "userDirectives": [] |
| | | } |
| | |
| | | /// </summary> |
| | | /// <param name="task">ä»»å¡å®ä½ã</param> |
| | | /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> |
| | | void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source); |
| | | WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source); |
| | | |
| | | /// <summary> |
| | | /// æ¨è¿å
¥åºä»»å¡å°ä¸ä¸ç¶æã |
| | |
| | | /// </summary> |
| | | /// <param name="task">ä»»å¡å®ä½ã</param> |
| | | /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> |
| | | void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source); |
| | | WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source); |
| | | |
| | | /// <summary> |
| | | /// æ¨è¿åºåºä»»å¡å°ä¸ä¸ç¶æã |
| | |
| | | /// </summary> |
| | | /// <param name="task">ä»»å¡å®ä½ã</param> |
| | | /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> |
| | | void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source); |
| | | WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source); |
| | | |
| | | /// <summary> |
| | | /// æ¨è¿ç§»åºä»»å¡å°ä¸ä¸ç¶æã |
| | |
| | | /// </summary> |
| | | /// <param name="task">ä»»å¡å®ä½ã</param> |
| | | /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> |
| | | void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source); |
| | | WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source); |
| | | |
| | | /// <summary> |
| | | /// æ¨è¿æºæ¢°æä»»å¡å°ä¸ä¸ç¶æã |
| | |
| | | /// </summary> |
| | | /// <param name="task">ä»»å¡å®ä½ã</param> |
| | | /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> |
| | | public void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source) |
| | | public WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | Dt_Router routers = _routerService.QueryNextRoute(source.SourceAddress); |
| | | if (routers.IsNullOrEmpty()) |
| | | { |
| | | return; |
| | | return content.Error("æªæ¾å°è·¯ç±ä¿¡æ¯"); |
| | | } |
| | | |
| | | task.TaskStatus = (int)TaskInStatusEnum.InNew; |
| | | task.CurrentAddress = source.SourceAddress; |
| | | task.NextAddress = routers.ChildPosi; |
| | | |
| | | return content.OK(); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | /// <param name="task">ä»»å¡å®ä½ã</param> |
| | | /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> |
| | | public void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source) |
| | | public WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | int taskType = task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty ? 100 : task.TaskType; |
| | | Dt_Router router = _routerService.QueryNextRoute(source.Roadway, source.TargetAddress, taskType); |
| | | if (router == null) |
| | | { |
| | | return; |
| | | return content.Error("æªæ¾å°è®¾å¤è·¯ç±ä¿¡æ¯"); |
| | | } |
| | | |
| | | task.TaskStatus = (int)TaskOutStatusEnum.OutNew; |
| | | task.CurrentAddress = source.SourceAddress; |
| | | task.NextAddress = router.ChildPosi; |
| | | return content.OK(); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | task.Modifier = "System"; |
| | | |
| | | // éç¥WMSåºåºå®æå¹¶è·åè¿åç»æ |
| | | return NotifyWMSOutboundFinish(task); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// éç¥WMSåºåºå®æã |
| | | /// </summary> |
| | | /// <param name="task">ä»»å¡å®ä½ã</param> |
| | | /// <returns>éç¥ç»æã</returns> |
| | | private WebResponseContent NotifyWMSOutboundFinish(Dt_Task task) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | |
| | | // éç¥WMSåºåºå®æå¹¶è·åè¿åç»æ |
| | | var result = _httpClientHelper.Post<WebResponseContent>( |
| | | nameof(ConfigKey.OutboundFinishTaskAsync), |
| | | new StockInfoDTO { PalletCode = task.PalletCode, TaskNum = task.TaskNum }.ToJson()); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | { |
| | | return content.Error($"éç¥WMSç³»ç»å åæºåºåºå®æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data?.Message}ã"); |
| | | } |
| | | |
| | | // å¤çWMSè¿åçå
¥åºä»»å¡ï¼å¦ææï¼ |
| | | if (result.Data?.Data != null) |
| | | { |
| | |
| | | }); |
| | | } |
| | | } |
| | | |
| | | return content.OK($"éç¥WMSç³»ç»å åæºåºåºå®ææå,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã"); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// éç¥WMSåºåºå®æã |
| | | /// </summary> |
| | | /// <param name="task">ä»»å¡å®ä½ã</param> |
| | | /// <returns>éç¥ç»æã</returns> |
| | | private WebResponseContent NotifyWMSOutboundFinish(Dt_Task task) |
| | | { |
| | | var result = _httpClientHelper.Post<WebResponseContent>( |
| | | nameof(ConfigKey.OutboundFinishTaskAsync), |
| | | new StockInfoDTO { PalletCode = task.PalletCode, TaskNum = task.TaskNum }.ToJson()); |
| | | |
| | | if (!result.IsSuccess || !result.Data.Status) |
| | | return WebResponseContent.Instance.Error($"éç¥WMSç³»ç»å åæºåºåºå®æå¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã,æçå·:ã{task.PalletCode}ã,é误信æ¯:ã{result.Data?.Message}ã"); |
| | | |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | /// <param name="task">ä»»å¡å®ä½ã</param> |
| | | /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> |
| | | public void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source) |
| | | public WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source) |
| | | { |
| | | // å½åçæ¬ç§»åºä»»å¡æ¥æ¶æ¶ä¸éè¦é¢å¤è®¾ç½®è·¯ç±æç¶æã |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | /// <param name="task">ä»»å¡å®ä½ã</param> |
| | | /// <param name="source">WMSä»»å¡åå§æ°æ®ã</param> |
| | | public void InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source) |
| | | public WebResponseContent InitializeOnReceive([NotNull] Dt_Task task, [NotNull] WMSTaskDTO source) |
| | | { |
| | | // å½åçæ¬æºæ¢°æä»»å¡æ¥æ¶æ¶ä¸éè¦é¢å¤è®¾ç½®è·¯ç±æç¶æã |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | } |
| | | Dt_Task task = _mapper.Map<Dt_Task>(item); |
| | | task.Creater = "WMS"; |
| | | InitializeTaskOnReceive(task, item); |
| | | content = InitializeTaskOnReceive(task, item); |
| | | if (!content.Status) |
| | | return content; |
| | | tasks.Add(task); |
| | | } |
| | | // TOOD: è¿éæ³¨ææ·»å é误è¦è¿åé误 |
| | |
| | | /// </summary> |
| | | /// <param name="task">ä»»å¡å®ä½ã</param> |
| | | /// <param name="source">WMSåå§ä»»å¡å¯¹è±¡ã</param> |
| | | private void InitializeTaskOnReceive(Dt_Task task, WMSTaskDTO source) |
| | | private WebResponseContent InitializeTaskOnReceive(Dt_Task task, WMSTaskDTO source) |
| | | { |
| | | switch (task.TaskType.GetTaskTypeGroup()) |
| | | { |
| | | case TaskTypeGroup.OutbondGroup: |
| | | _outboundTaskFlowService.InitializeOnReceive(task, source); |
| | | break; |
| | | return _outboundTaskFlowService.InitializeOnReceive(task, source); |
| | | case TaskTypeGroup.InboundGroup: |
| | | _inboundTaskFlowService.InitializeOnReceive(task, source); |
| | | break; |
| | | return _inboundTaskFlowService.InitializeOnReceive(task, source); |
| | | case TaskTypeGroup.RelocationGroup: |
| | | _relocationTaskFlowService.InitializeOnReceive(task, source); |
| | | break; |
| | | return _relocationTaskFlowService.InitializeOnReceive(task, source); |
| | | case TaskTypeGroup.OtherGroup: |
| | | _robotTaskFlowService.InitializeOnReceive(task, source); |
| | | break; |
| | | return _robotTaskFlowService.InitializeOnReceive(task, source); |
| | | default: |
| | | break; |
| | | return WebResponseContent.Instance.Error("WCSä¸åå¨å½åä»»å¡çä»»å¡ç±»å"); |
| | | } |
| | | } |
| | | |
| | |
| | | && result.Data is List<WMSTaskDTO> wmsTasks |
| | | && wmsTasks.Count > 0) |
| | | { |
| | | return ReceiveWMSTask(wmsTasks); |
| | | WebResponseContent content = ReceiveWMSTask(wmsTasks); |
| | | if (!content.Status) |
| | | return content; |
| | | } |
| | | |
| | | // æ´æ°ä»»å¡æ°æ® |
| | |
| | | if (childDeviceCodes == null || childDeviceCodes.Count == 0) |
| | | { |
| | | // 没æå设å¤ï¼ç´æ¥è¿å |
| | | _logger.LogInformation("è¾é线 {DeviceCode} 没æå设å¤", conveyorLine.DeviceCode); |
| | | QuartzLogger.Info($"è¾é线 {conveyorLine.DeviceCode} 没æå设å¤", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "è¾é线 {DeviceCode} 没æå设å¤", $"è¾é线 {conveyorLine.DeviceCode} 没æå设å¤", conveyorLine.DeviceCode, conveyorLine.DeviceCode); |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | |
| | | // 妿å½ä»¤ä¸ºç©ºï¼è·³è¿ |
| | | if (command == null) |
| | | { |
| | | _logger.LogDebug("Executeï¼åè®¾å¤ {ChildDeviceCode} å½ä»¤ä¸ºç©ºï¼è·³è¿", childDeviceCode); |
| | | QuartzLogger.Debug($"åè®¾å¤ {childDeviceCode} å½ä»¤ä¸ºç©ºï¼è·³è¿", conveyorLine.DeviceCode); |
| | | continue; |
| | | } |
| | | |
| | |
| | | { |
| | | // 没æä»»å¡ï¼å WMS 请æ±åºåºæçä»»å¡ |
| | | var position = checkPalletPositions.FirstOrDefault(x => x.Code == childDeviceCode); |
| | | _logger.LogInformation("Executeï¼æ£æ¥æçä½ç½® {ChildDeviceCode}ï¼è¯·æ±WMSåºåºæçä»»å¡", childDeviceCode); |
| | | QuartzLogger.Info($"æ£æ¥æçä½ç½® {childDeviceCode}ï¼è¯·æ±WMSåºåºæçä»»å¡", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "Executeï¼æ£æ¥æçä½ç½® {ChildDeviceCode}ï¼è¯·æ±WMSåºåºæçä»»å¡", $"æ£æ¥æçä½ç½® {childDeviceCode}ï¼è¯·æ±WMSåºåºæçä»»å¡", conveyorLine.DeviceCode, childDeviceCode); |
| | | |
| | | var responseResult = _httpClientHelper.Post<WebResponseContent>("GetOutBoundTrayTaskAsync", new CreateTaskDto() |
| | | { |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _logger.LogError(ex, "å¤çæå¨å
¥åºä»»å¡å¼å¸¸"); |
| | | QuartzLogger.Error($"å¤çæå¨å
¥åºä»»å¡å¼å¸¸: {ex.Message}", "CommonConveyorLineNewJob", ex); |
| | | QuartzLogHelper.LogError(_logger, ex, "å¤çæå¨å
¥åºä»»å¡å¼å¸¸", $"å¤çæå¨å
¥åºä»»å¡å¼å¸¸: {ex.Message}", "CommonConveyorLineNewJob"); |
| | | } |
| | | continue; |
| | | } |
| | |
| | | // æ æçæ¡ç æ¶ï¼è¯·æ±åºåºä»»å¡ |
| | | if (command.Barcode.IsNullOrEmpty() || command.Barcode.Replace("\0", "") == "") |
| | | { |
| | | _logger.LogDebug("Executeï¼åè®¾å¤ {ChildDeviceCode} æ æçæ¡ç ï¼è¯·æ±åºåºä»»å¡", childDeviceCode); |
| | | QuartzLogger.Debug($"åè®¾å¤ {childDeviceCode} æ æçæ¡ç ï¼è¯·æ±åºåºä»»å¡", conveyorLine.DeviceCode); |
| | | _conveyorLineDispatch.RequestOutbound(conveyorLine, command, childDeviceCode); |
| | | continue; |
| | | } |
| | |
| | | Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNo, childDeviceCode); |
| | | if (!task.IsNullOrEmpty()) |
| | | { |
| | | _logger.LogInformation("Executeï¼åè®¾å¤ {ChildDeviceCode} å¤çä»»å¡ {TaskNum}ï¼ç¶æ: {Status}", childDeviceCode, task.TaskNum, task.TaskStatus); |
| | | QuartzLogger.Info($"å¤çä»»å¡ {task.TaskNum}ï¼ç¶æ: {task.TaskStatus}", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "Executeï¼åè®¾å¤ {ChildDeviceCode} å¤çä»»å¡ {TaskNum}ï¼ç¶æ: {Status}", $"å¤çä»»å¡ {task.TaskNum}ï¼ç¶æ: {task.TaskStatus}", conveyorLine.DeviceCode, childDeviceCode, task.TaskNum, task.TaskStatus); |
| | | // å¤çä»»å¡ç¶æï¼æ ¹æ®ç¶æååå°ä¸åæ¹æ³ï¼ |
| | | ProcessTaskState(conveyorLine, command, task, childDeviceCode); |
| | | return Task.CompletedTask; |
| | |
| | | catch (Exception innerEx) |
| | | { |
| | | // è®°å½å¼å¸¸ï¼ä½ä¸å½±åå
¶ä»å设å¤çå¤ç |
| | | _logger.LogError(innerEx, "Executeï¼åè®¾å¤ {ChildDeviceCode} å¤çå¼å¸¸ï¼CorrelationId: {CorrelationId}", childDeviceCode, correlationId); |
| | | QuartzLogger.Error($"å设å¤å¤çå¼å¸¸: {innerEx.Message}", conveyorLine.DeviceCode, innerEx); |
| | | QuartzLogHelper.LogError(_logger, innerEx, "Executeï¼åè®¾å¤ {ChildDeviceCode} å¤çå¼å¸¸ï¼CorrelationId: {CorrelationId}", $"å设å¤å¤çå¼å¸¸: {innerEx.Message}", conveyorLine.DeviceCode, childDeviceCode, correlationId); |
| | | } |
| | | } |
| | | } |
| | |
| | | catch (Exception ex) |
| | | { |
| | | // è®°å½æ´ä½å¼å¸¸ |
| | | _logger.LogError(ex, "Executeï¼è¾é线 {DeviceCode} æ§è¡å¼å¸¸", ex.Message); |
| | | QuartzLogger.Error($"è¾é线æ§è¡å¼å¸¸: {ex.Message}", "CommonConveyorLineNewJob", ex); |
| | | QuartzLogHelper.LogError(_logger, ex, "Executeï¼è¾é线 {DeviceCode} æ§è¡å¼å¸¸", $"è¾é线æ§è¡å¼å¸¸: {ex.Message}", "CommonConveyorLineNewJob", ex.Message); |
| | | } |
| | | return Task.CompletedTask; |
| | | } |
| | |
| | | { |
| | | // æ¸
é¤ä»»å¡å·ï¼è¡¨ç¤ºå½åç©ºé² |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.TaskNo, 0, childDeviceCode); |
| | | _logger.LogDebug("HeartBeatï¼åè®¾å¤ {ChildDeviceCode} å¿è·³", childDeviceCode); |
| | | QuartzLogger.Debug($"HeartBeatï¼åè®¾å¤ {childDeviceCode} å¿è·³", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogDebug(_logger, "HeartBeatï¼åè®¾å¤ {ChildDeviceCode} å¿è·³", $"HeartBeatï¼åè®¾å¤ {childDeviceCode} å¿è·³", conveyorLine.DeviceCode, childDeviceCode); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <param name="childDeviceCode">å设å¤ç¼ç </param> |
| | | public void RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandNew command, string childDeviceCode) |
| | | { |
| | | _logger.LogInformation("RequestInboundï¼åè®¾å¤ {ChildDeviceCode} 请æ±å
¥åº", childDeviceCode); |
| | | QuartzLogger.Info($"请æ±å
¥åºï¼å设å¤: {childDeviceCode}", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "RequestInboundï¼åè®¾å¤ {ChildDeviceCode} 请æ±å
¥åº", $"请æ±å
¥åºï¼å设å¤: {childDeviceCode}", conveyorLine.DeviceCode, childDeviceCode); |
| | | |
| | | // å WMS è¯·æ±æ°ä»»å¡ï¼åºäºæ¡ç ï¼ |
| | | if (_taskFilter.RequestWmsTask(command.Barcode, childDeviceCode)) |
| | |
| | | // æ´æ°ä»»å¡ç¶æå°ä¸ä¸é¶æ®µ |
| | | _taskService.UpdateTaskStatusToNext(task); |
| | | |
| | | _logger.LogInformation("RequestInboundï¼å
¥åºä»»å¡å·²ä¸åï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}", task.TaskNum, childDeviceCode); |
| | | QuartzLogger.Info($"å
¥åºä»»å¡å·²ä¸åï¼ä»»å¡å·: {task.TaskNum}ï¼å设å¤: {childDeviceCode}", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "RequestInboundï¼å
¥åºä»»å¡å·²ä¸åï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}", $"å
¥åºä»»å¡å·²ä¸åï¼ä»»å¡å·: {task.TaskNum}ï¼å设å¤: {childDeviceCode}", conveyorLine.DeviceCode, task.TaskNum, childDeviceCode); |
| | | } |
| | | } |
| | | } |
| | |
| | | Dt_Task? task = _taskFilter.QueryExecutingTask(command.TaskNo, childDeviceCode); |
| | | if (task == null) |
| | | { |
| | | _logger.LogDebug("RequestInNextAddressï¼ä»»å¡ {TaskNo} ä¸åå¨", command.TaskNo); |
| | | QuartzLogger.Debug($"RequestInNextAddressï¼ä»»å¡ {command.TaskNo} ä¸åå¨", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogDebug(_logger, "RequestInNextAddressï¼ä»»å¡ {TaskNo} ä¸åå¨", $"RequestInNextAddressï¼ä»»å¡ {command.TaskNo} ä¸åå¨", conveyorLine.DeviceCode, command.TaskNo); |
| | | return; |
| | | } |
| | | |
| | | _logger.LogInformation("RequestInNextAddressï¼å
¥åºä¸ä¸å°åï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}", task.TaskNum, childDeviceCode); |
| | | QuartzLogger.Info($"RequestInNextAddressï¼å
¥åºä¸ä¸å°åï¼ä»»å¡å·: {task.TaskNum}ï¼å设å¤: {childDeviceCode}", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "RequestInNextAddressï¼å
¥åºä¸ä¸å°åï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}", $"RequestInNextAddressï¼å
¥åºä¸ä¸å°åï¼ä»»å¡å·: {task.TaskNum}ï¼å设å¤: {childDeviceCode}", conveyorLine.DeviceCode, task.TaskNum, childDeviceCode); |
| | | |
| | | // 妿䏿¯ç©ºæçä»»å¡ï¼å¤çç®æ å°åï¼ä¸æææº/ææéæºäº¤äºï¼ |
| | | if (task.TaskType != (int)TaskOutboundTypeEnum.OutEmpty) |
| | |
| | | { |
| | | // åå¤ ACK 确认 |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode); |
| | | _logger.LogInformation("ConveyorLineInFinishï¼å
¥åºå®æï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}", task.TaskNum, childDeviceCode); |
| | | QuartzLogger.Info($"å
¥åºå®æï¼ä»»å¡å·: {task.TaskNum}", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "ConveyorLineInFinishï¼å
¥åºå®æï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}", $"å
¥åºå®æï¼ä»»å¡å·: {task.TaskNum}", conveyorLine.DeviceCode, task.TaskNum, childDeviceCode); |
| | | } |
| | | |
| | | |
| | |
| | | // æ´æ°ä»»å¡ç¶æ |
| | | _taskService.UpdateTaskStatusToNext(task); |
| | | |
| | | _logger.LogInformation("RequestOutboundï¼åºåºä»»å¡å·²ä¸åï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}", task.TaskNum, childDeviceCode); |
| | | QuartzLogger.Info($"åºåºä»»å¡å·²ä¸åï¼ä»»å¡å·: {task.TaskNum}", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "RequestOutboundï¼åºåºä»»å¡å·²ä¸åï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}", $"åºåºä»»å¡å·²ä¸åï¼ä»»å¡å·: {task.TaskNum}", conveyorLine.DeviceCode, task.TaskNum, childDeviceCode); |
| | | } |
| | | } |
| | | |
| | |
| | | Dt_Task? task = _taskFilter.QueryExecutingTask(command.TaskNo, childDeviceCode); |
| | | if (task == null) |
| | | { |
| | | _logger.LogDebug("RequestOutNextAddressï¼ä»»å¡ {TaskNo} ä¸åå¨", command.TaskNo); |
| | | QuartzLogger.Debug($"RequestOutNextAddressï¼ä»»å¡ {command.TaskNo} ä¸åå¨", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogDebug(_logger, "RequestOutNextAddressï¼ä»»å¡ {TaskNo} ä¸åå¨", $"RequestOutNextAddressï¼ä»»å¡ {command.TaskNo} ä¸åå¨", conveyorLine.DeviceCode, command.TaskNo); |
| | | return; |
| | | } |
| | | |
| | | _logger.LogInformation("RequestOutNextAddressï¼åºåºä¸ä¸å°åï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}", task.TaskNum, childDeviceCode); |
| | | QuartzLogger.Info($"RequestOutNextAddressï¼åºåºä¸ä¸å°åï¼ä»»å¡å·: {task.TaskNum}ï¼å设å¤: {childDeviceCode}", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "RequestOutNextAddressï¼åºåºä¸ä¸å°åï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}", $"RequestOutNextAddressï¼åºåºä¸ä¸å°åï¼ä»»å¡å·: {task.TaskNum}ï¼å设å¤: {childDeviceCode}", conveyorLine.DeviceCode, task.TaskNum, childDeviceCode); |
| | | |
| | | // 妿䏿¯ç©ºæçä»»å¡ï¼å¤çç®æ å°å |
| | | if (task.TaskType != (int)TaskOutboundTypeEnum.OutEmpty) |
| | |
| | | // æ´æ°ä»»å¡ç¶æå°ä¸ä¸é¶æ®µï¼é常æ¯å®æï¼ |
| | | WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); |
| | | |
| | | if (content.Status) |
| | | { |
| | | // åå¤ ACK 确认 |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode); |
| | | } |
| | | |
| | | _logger.LogInformation("ConveyorLineOutFinishï¼åºåºå®æï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}", task.TaskNum, childDeviceCode); |
| | | QuartzLogger.Info($"åºåºå®æï¼ä»»å¡å·: {task.TaskNum}", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "ConveyorLineOutFinishï¼åºåºå®æï¼å®æç»æï¼{Status}ï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}ï¼éè¯¯æ¶æ¯: {Message}", $"åºåºå®æï¼å®æç»æï¼{content.Status}ï¼ä»»å¡å·: {task.TaskNum}ï¼éè¯¯æ¶æ¯ï¼{content.Message}", conveyorLine.DeviceCode, content.Status, task.TaskNum, childDeviceCode, content.Message); |
| | | } |
| | | } |
| | | } |
| | |
| | | string deviceType) |
| | | { |
| | | // è®°å½å½å请æ±ç¶æçè°è¯æ¥å¿ï¼ä¾ææ¥é®é¢ä½¿ç¨ |
| | | _logger.LogDebug("ProcessDeviceRequestï¼{DeviceType}ï¼å设å¤: {ChildDeviceCode}ï¼ç©æè¯·æ±: {MaterialReq}ï¼åºæè¯·æ±: {OutputReq}", |
| | | deviceType, childDeviceCode, materialRequest, outputRequest); |
| | | // 忥åå
¥ Quartz æ¥å¿æä»¶ï¼ååå¯è¿½æº¯ï¼è¿éä¿çä¸åé»è¾ä¸è´çè¡ä¸ºï¼ |
| | | QuartzLogger.Debug($"ProcessDeviceRequestï¼{deviceType}ï¼å设å¤: {childDeviceCode}ï¼ç©æè¯·æ±: {materialRequest}ï¼åºæè¯·æ±: {outputRequest}", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogDebug(_logger, "ProcessDeviceRequestï¼{DeviceType}ï¼å设å¤: {ChildDeviceCode}ï¼ç©æè¯·æ±: {MaterialReq}ï¼åºæè¯·æ±: {OutputReq}", $"ProcessDeviceRequestï¼{deviceType}ï¼å设å¤: {childDeviceCode}ï¼ç©æè¯·æ±: {materialRequest}ï¼åºæè¯·æ±: {outputRequest}", conveyorLine.DeviceCode, deviceType, childDeviceCode, materialRequest, outputRequest); |
| | | |
| | | // 忝夿ï¼è®¾å¤æ¯éè¦ç©æè¿æ¯éè¦åºæ |
| | | if (materialRequest) |
| | |
| | | // 2. åå¤ ACK 确认信å·ï¼åç¥è®¾å¤å·²æ¶å°è¯·æ± |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, 1, childDeviceCode); |
| | | // 3. è®°å½ä¿¡æ¯æ¥å¿ï¼è¡¨æå·²å®æç®æ å°å设置å ACK åå¤ |
| | | _logger.LogInformation("ProcessDeviceRequestï¼{DeviceType} éè¦ç©æï¼å·²è®¾ç½®ç®æ å°ååACK", deviceType); |
| | | QuartzLogger.Info($"ProcessDeviceRequestï¼{deviceType} éè¦ç©æï¼å·²è®¾ç½®ç®æ å°ååACK", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "ProcessDeviceRequestï¼{DeviceType} éè¦ç©æï¼å·²è®¾ç½®ç®æ å°ååACK", $"ProcessDeviceRequestï¼{deviceType} éè¦ç©æï¼å·²è®¾ç½®ç®æ å°ååACK", conveyorLine.DeviceCode, deviceType); |
| | | } |
| | | else |
| | | { |
| | |
| | | private void WriteDebug(CommonConveyorLine conveyorLine, string scenario, string childDeviceCode, string nextAddress) |
| | | { |
| | | // åå
¥ç»æåæ¥å¿ï¼å¯è¢« Serilog çæ¥å¿æ¡æ¶æè·ï¼ |
| | | _logger.LogDebug("Handle{Scenario}ï¼å设å¤: {ChildDeviceCode}ï¼ç®æ å°å: {NextAddress}", |
| | | scenario, childDeviceCode, nextAddress); |
| | | // åå
¥ Quartz ä¸ç¨æ¥å¿æä»¶ï¼ä¾å®æ¶ä»»å¡è½¨è¿¹è¿½è¸ªï¼ |
| | | QuartzLogger.Debug($"Handle{scenario}ï¼å设å¤: {childDeviceCode}ï¼ç®æ å°å: {nextAddress}", conveyorLine.DeviceCode); |
| | | QuartzLogHelper.LogDebug(_logger, "Handle{Scenario}ï¼å设å¤: {ChildDeviceCode}ï¼ç®æ å°å: {NextAddress}", $"Handle{scenario}ï¼å设å¤: {childDeviceCode}ï¼ç®æ å°å: {nextAddress}", conveyorLine.DeviceCode, scenario, childDeviceCode, nextAddress); |
| | | } |
| | | } |
| | | } |
| | |
| | | public Dt_Task? QueryPendingTask(string deviceCode, string childDeviceCode) |
| | | { |
| | | var task = _taskService.QueryConveyorLineTask(deviceCode, childDeviceCode); |
| | | _logger.LogDebug("QueryPendingTaskï¼è®¾å¤ {DeviceCode}ï¼åè®¾å¤ {ChildDeviceCode}ï¼æ¥è¯¢ç»æ: {TaskNum}", deviceCode, childDeviceCode, task?.TaskNum); |
| | | QuartzLogger.Debug($"QueryPendingTaskï¼è®¾å¤ {deviceCode}ï¼åè®¾å¤ {childDeviceCode}ï¼æ¥è¯¢ç»æ: {task?.TaskNum}", deviceCode); |
| | | QuartzLogHelper.LogDebug(_logger, "QueryPendingTaskï¼è®¾å¤ {DeviceCode}ï¼åè®¾å¤ {ChildDeviceCode}ï¼æ¥è¯¢ç»æ: {TaskNum}", $"QueryPendingTaskï¼è®¾å¤ {deviceCode}ï¼åè®¾å¤ {childDeviceCode}ï¼æ¥è¯¢ç»æ: {task?.TaskNum}", deviceCode, deviceCode, childDeviceCode, task?.TaskNum); |
| | | return task; |
| | | } |
| | | |
| | |
| | | public Dt_Task? QueryExecutingTask(int taskNo, string childDeviceCode) |
| | | { |
| | | var task = _taskService.QueryExecutingConveyorLineTask(taskNo, childDeviceCode); |
| | | _logger.LogDebug("QueryExecutingTaskï¼ä»»å¡å· {TaskNo}ï¼åè®¾å¤ {ChildDeviceCode}ï¼æ¥è¯¢ç»æ: {Found}", taskNo, childDeviceCode, task != null); |
| | | QuartzLogger.Debug($"QueryExecutingTaskï¼ä»»å¡å· {taskNo}ï¼åè®¾å¤ {childDeviceCode}ï¼æ¥è¯¢ç»æ: {(task != null)}", childDeviceCode); |
| | | QuartzLogHelper.LogDebug(_logger, "QueryExecutingTaskï¼ä»»å¡å· {TaskNo}ï¼åè®¾å¤ {ChildDeviceCode}ï¼æ¥è¯¢ç»æ: {Found}", $"QueryExecutingTaskï¼ä»»å¡å· {taskNo}ï¼åè®¾å¤ {childDeviceCode}ï¼æ¥è¯¢ç»æ: {(task != null)}", childDeviceCode, taskNo, childDeviceCode, task != null); |
| | | return task; |
| | | } |
| | | |
| | |
| | | /// <returns>è¯·æ±æ¯å¦æå</returns> |
| | | public bool RequestWmsTask(string barcode, string childDeviceCode) |
| | | { |
| | | _logger.LogInformation("RequestWmsTaskï¼åWMS请æ±ä»»å¡ï¼æ¡ç : {Barcode}ï¼å设å¤: {ChildDeviceCode}", barcode, childDeviceCode); |
| | | QuartzLogger.Info($"åWMS请æ±ä»»å¡ï¼æ¡ç : {barcode}", childDeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "RequestWmsTaskï¼åWMS请æ±ä»»å¡ï¼æ¡ç : {Barcode}ï¼å设å¤: {ChildDeviceCode}", $"åWMS请æ±ä»»å¡ï¼æ¡ç : {barcode}", childDeviceCode, barcode, childDeviceCode); |
| | | var result = _taskService.RequestWMSTask(barcode, childDeviceCode); |
| | | return result.Status; |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | using Microsoft.Extensions.Logging; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | |
| | | namespace WIDESEAWCS_Tasks; |
| | | |
| | | /// <summary> |
| | | /// Quartz ä½ä¸æ¥å¿å¸®å©ç±» - ç»ä¸å°è£
ILogger å QuartzLogger çåé鿥å¿è®°å½ |
| | | /// </summary> |
| | | /// <remarks> |
| | | /// ææ Quartz Job ä¸éè¦åæ¶åå
¥ ILoggerï¼Serilogï¼å QuartzLoggerï¼æä»¶æ¥å¿ï¼çåºæ¯ï¼ |
| | | /// ç»ä¸è°ç¨æ¤å¸®å©ç±»çæ¹æ³ï¼é¿å
éå¤ç¼åä¸¤è¡æ¥å¿ä»£ç ã |
| | | /// </remarks> |
| | | public static class QuartzLogHelper |
| | | { |
| | | /// <summary> |
| | | /// è®°å½é误æ¥å¿ï¼å¸¦å¼å¸¸å¯¹è±¡ï¼ |
| | | /// </summary> |
| | | /// <param name="logger">ILogger å®ä¾</param> |
| | | /// <param name="ex">å¼å¸¸å¯¹è±¡</param> |
| | | /// <param name="loggerMessage">ILogger çç»æåæ¥å¿æ¨¡æ¿ï¼æ¯æå ä½ç¬¦ï¼</param> |
| | | /// <param name="quartzMessage">QuartzLogger çæ¥å¿æ¶æ¯</param> |
| | | /// <param name="deviceCode">设å¤ç¼ç </param> |
| | | /// <param name="args">ILogger ç»æåæ¥å¿çåæ°</param> |
| | | public static void LogError(ILogger logger, Exception ex, string loggerMessage, string quartzMessage, string deviceCode, params object[] args) |
| | | { |
| | | logger.LogError(ex, loggerMessage, args); |
| | | QuartzLogger.Error(quartzMessage, deviceCode, ex); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è®°å½é误æ¥å¿ï¼ä¸å¸¦å¼å¸¸å¯¹è±¡ï¼ |
| | | /// </summary> |
| | | /// <param name="logger">ILogger å®ä¾</param> |
| | | /// <param name="loggerMessage">ILogger çç»æåæ¥å¿æ¨¡æ¿ï¼æ¯æå ä½ç¬¦ï¼</param> |
| | | /// <param name="quartzMessage">QuartzLogger çæ¥å¿æ¶æ¯</param> |
| | | /// <param name="deviceCode">设å¤ç¼ç </param> |
| | | /// <param name="args">ILogger ç»æåæ¥å¿çåæ°</param> |
| | | public static void LogError(ILogger logger, string loggerMessage, string quartzMessage, string deviceCode, params object[] args) |
| | | { |
| | | logger.LogError(loggerMessage, args); |
| | | QuartzLogger.Error(quartzMessage, deviceCode); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è®°å½ä¿¡æ¯æ¥å¿ |
| | | /// </summary> |
| | | /// <param name="logger">ILogger å®ä¾</param> |
| | | /// <param name="loggerMessage">ILogger çç»æåæ¥å¿æ¨¡æ¿ï¼æ¯æå ä½ç¬¦ï¼</param> |
| | | /// <param name="quartzMessage">QuartzLogger çæ¥å¿æ¶æ¯</param> |
| | | /// <param name="deviceCode">设å¤ç¼ç </param> |
| | | /// <param name="args">ILogger ç»æåæ¥å¿çåæ°</param> |
| | | public static void LogInfo(ILogger logger, string loggerMessage, string quartzMessage, string deviceCode, params object[] args) |
| | | { |
| | | logger.LogInformation(loggerMessage, args); |
| | | QuartzLogger.Info(quartzMessage, deviceCode); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è®°å½è¦åæ¥å¿ |
| | | /// </summary> |
| | | /// <param name="logger">ILogger å®ä¾</param> |
| | | /// <param name="loggerMessage">ILogger çç»æåæ¥å¿æ¨¡æ¿ï¼æ¯æå ä½ç¬¦ï¼</param> |
| | | /// <param name="quartzMessage">QuartzLogger çæ¥å¿æ¶æ¯</param> |
| | | /// <param name="deviceCode">设å¤ç¼ç </param> |
| | | /// <param name="args">ILogger ç»æåæ¥å¿çåæ°</param> |
| | | public static void LogWarn(ILogger logger, string loggerMessage, string quartzMessage, string deviceCode, params object[] args) |
| | | { |
| | | logger.LogWarning(loggerMessage, args); |
| | | QuartzLogger.Warn(quartzMessage, deviceCode); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è®°å½è°è¯æ¥å¿ |
| | | /// </summary> |
| | | /// <param name="logger">ILogger å®ä¾</param> |
| | | /// <param name="loggerMessage">ILogger çç»æåæ¥å¿æ¨¡æ¿ï¼æ¯æå ä½ç¬¦ï¼</param> |
| | | /// <param name="quartzMessage">QuartzLogger çæ¥å¿æ¶æ¯</param> |
| | | /// <param name="deviceCode">设å¤ç¼ç </param> |
| | | /// <param name="args">ILogger ç»æåæ¥å¿çåæ°</param> |
| | | public static void LogDebug(ILogger logger, string loggerMessage, string quartzMessage, string deviceCode, params object[] args) |
| | | { |
| | | logger.LogDebug(loggerMessage, args); |
| | | QuartzLogger.Debug(quartzMessage, deviceCode); |
| | | } |
| | | } |
| | |
| | | if (!flag || value is not CommonStackerCrane commonStackerCrane) |
| | | { |
| | | // åæ°æ æï¼ç´æ¥è¿å |
| | | _logger.LogWarning("Executeï¼åæ°æ æ"); |
| | | QuartzLogger.Warn("Executeï¼åæ°æ æ", "CommonStackerCraneJob"); |
| | | QuartzLogHelper.LogWarn(_logger, "Executeï¼åæ°æ æ", "Executeï¼åæ°æ æ", "CommonStackerCraneJob"); |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | |
| | | { |
| | | // ç»å®ä»»å¡å®æäºä»¶å¤çæ¹æ³ |
| | | commonStackerCrane.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler; |
| | | _logger.LogInformation("Executeï¼è®¢é
ä»»å¡å®æäºä»¶ï¼è®¾å¤: {DeviceCode}", _deviceCode); |
| | | QuartzLogger.Info($"订é
ä»»å¡å®æäºä»¶", _deviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "Executeï¼è®¢é
ä»»å¡å®æäºä»¶ï¼è®¾å¤: {DeviceCode}", "订é
ä»»å¡å®æäºä»¶", _deviceCode, _deviceCode); |
| | | } |
| | | |
| | | // ========== æ£æ¥å åæºä»»å¡å®æç¶æ ========== |
| | |
| | | if (stackerCraneTaskCommand == null) |
| | | { |
| | | // å½ä»¤æå»ºå¤±è´¥ |
| | | _logger.LogWarning("Executeï¼å½ä»¤æå»ºå¤±è´¥ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", _deviceCode, task.TaskNum); |
| | | QuartzLogger.Warn($"å½ä»¤æå»ºå¤±è´¥ï¼ä»»å¡å·: {task.TaskNum}", _deviceCode); |
| | | QuartzLogHelper.LogWarn(_logger, "Executeï¼å½ä»¤æå»ºå¤±è´¥ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", $"å½ä»¤æå»ºå¤±è´¥ï¼ä»»å¡å·: {task.TaskNum}", _deviceCode, _deviceCode, task.TaskNum); |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | |
| | | commonStackerCrane.LastTaskType = task.TaskType; |
| | | _taskService.UpdateTaskStatusToNext(task.TaskNum); |
| | | |
| | | _logger.LogInformation("Executeï¼å½ä»¤åéæåï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", _deviceCode, task.TaskNum); |
| | | QuartzLogger.Info($"å½ä»¤åéæåï¼ä»»å¡å·: {task.TaskNum}", _deviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "Executeï¼å½ä»¤åéæåï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", $"å½ä»¤åéæåï¼ä»»å¡å·: {task.TaskNum}", _deviceCode, _deviceCode, task.TaskNum); |
| | | } |
| | | else |
| | | { |
| | | _logger.LogError("Executeï¼å½ä»¤åé失败ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", _deviceCode, task.TaskNum); |
| | | QuartzLogger.Error($"å½ä»¤åé失败", _deviceCode); |
| | | QuartzLogHelper.LogError(_logger, "Executeï¼å½ä»¤åé失败ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", $"å½ä»¤åé失败", _deviceCode, _deviceCode, task.TaskNum); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // è®°å½å¼å¸¸ |
| | | _logger.LogError(ex, "Executeï¼æ§è¡å¼å¸¸ï¼è®¾å¤: {DeviceCode}", _deviceCode); |
| | | QuartzLogger.Error($"æ§è¡å¼å¸¸: {ex.Message}", _deviceCode, ex); |
| | | QuartzLogHelper.LogError(_logger, ex, "Executeï¼æ§è¡å¼å¸¸ï¼è®¾å¤: {DeviceCode}", $"æ§è¡å¼å¸¸: {ex.Message}", _deviceCode, _deviceCode); |
| | | } |
| | | |
| | | return Task.CompletedTask; |
| | |
| | | if (stackerCrane != null) |
| | | { |
| | | // è®°å½æ¥å¿ |
| | | _logger.LogInformation("CommonStackerCrane_StackerCraneTaskCompletedEventHandlerï¼ä»»å¡å®æï¼ä»»å¡å·: {TaskNum}", e.TaskNum); |
| | | QuartzLogger.Info($"ä»»å¡å®æï¼ä»»å¡å·: {e.TaskNum}", stackerCrane.DeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "CommonStackerCrane_StackerCraneTaskCompletedEventHandlerï¼ä»»å¡å®æï¼ä»»å¡å·: {TaskNum}", $"ä»»å¡å®æï¼ä»»å¡å·: {e.TaskNum}", stackerCrane.DeviceCode, e.TaskNum); |
| | | |
| | | // æ´æ°ä»»å¡ç¶æä¸ºå®æ |
| | | if (_taskService.StackCraneTaskCompleted(e.TaskNum).Status) |
| | |
| | | { |
| | | if (roadway.Contains(mapping.Key)) |
| | | { |
| | | _logger.LogDebug("GetCommandTypeï¼å¹é
å··é {Roadway}ï¼å½ä»¤ç±»å: {CommandType}", roadway, mapping.Value); |
| | | QuartzLogger.Debug($"GetCommandTypeï¼å¹é
å··é {roadway}ï¼å½ä»¤ç±»å: {mapping.Value}", roadway); |
| | | QuartzLogHelper.LogDebug(_logger, "GetCommandTypeï¼å¹é
å··é {Roadway}ï¼å½ä»¤ç±»å: {CommandType}", $"GetCommandTypeï¼å¹é
å··é {roadway}ï¼å½ä»¤ç±»å: {mapping.Value}", roadway, roadway, mapping.Value); |
| | | return mapping.Value; |
| | | } |
| | | } |
| | | |
| | | _logger.LogDebug("GetCommandTypeï¼å··é {Roadway} æªå¹é
ï¼ä½¿ç¨é»è®¤å½ä»¤ç±»å: {DefaultType}", roadway, _config.DefaultCommandType); |
| | | QuartzLogger.Debug($"GetCommandTypeï¼å··é {roadway} æªå¹é
ï¼ä½¿ç¨é»è®¤å½ä»¤ç±»å: {_config.DefaultCommandType}", roadway); |
| | | QuartzLogHelper.LogDebug(_logger, "GetCommandTypeï¼å··é {Roadway} æªå¹é
ï¼ä½¿ç¨é»è®¤å½ä»¤ç±»å: {DefaultType}", $"GetCommandTypeï¼å··é {roadway} æªå¹é
ï¼ä½¿ç¨é»è®¤å½ä»¤ç±»å: {_config.DefaultCommandType}", roadway, roadway, _config.DefaultCommandType); |
| | | return _config.DefaultCommandType; |
| | | } |
| | | |
| | |
| | | // è·åä»»å¡ç±»ååç» |
| | | TaskTypeGroup taskTypeGroup = task.TaskType.GetTaskTypeGroup(); |
| | | |
| | | _logger.LogDebug("BuildCommandï¼ä»»å¡å·: {TaskNum}ï¼ä»»å¡ç±»ååç»: {TaskTypeGroup}", task.TaskNum, taskTypeGroup); |
| | | QuartzLogger.Debug($"BuildCommandï¼ä»»å¡å·: {task.TaskNum}ï¼ä»»å¡ç±»ååç»: {taskTypeGroup}", task.Roadway); |
| | | QuartzLogHelper.LogDebug(_logger, "BuildCommandï¼ä»»å¡å·: {TaskNum}ï¼ä»»å¡ç±»ååç»: {TaskTypeGroup}", $"BuildCommandï¼ä»»å¡å·: {task.TaskNum}ï¼ä»»å¡ç±»ååç»: {taskTypeGroup}", task.Roadway, task.TaskNum, taskTypeGroup); |
| | | |
| | | // æ ¹æ®ä»»å¡ç±»åååæå»º |
| | | return taskTypeGroup switch |
| | |
| | | /// <returns>å¡«å
好çå½ä»¤å¯¹è±¡</returns> |
| | | private T? BuildInboundCommand<T>(Dt_Task task, T command) where T : class |
| | | { |
| | | _logger.LogInformation("BuildInboundCommandï¼æå»ºå
¥åºå½ä»¤ï¼ä»»å¡å·: {TaskNum}", task.TaskNum); |
| | | QuartzLogger.Info($"BuildInboundCommandï¼æå»ºå
¥åºå½ä»¤ï¼ä»»å¡å·: {task.TaskNum}", task.Roadway); |
| | | QuartzLogHelper.LogInfo(_logger, "BuildInboundCommandï¼æå»ºå
¥åºå½ä»¤ï¼ä»»å¡å·: {TaskNum}", $"BuildInboundCommandï¼æå»ºå
¥åºå½ä»¤ï¼ä»»å¡å·: {task.TaskNum}", task.Roadway, task.TaskNum); |
| | | |
| | | // ç¡®å®ä»»å¡ç±»åï¼ç©ºæçç¨ç¹æ®ç±»åï¼ |
| | | int taskType = 0; |
| | |
| | | if (router == null) |
| | | { |
| | | // æªæ¾å°ç«å°ï¼æ´æ°å¼å¸¸ä¿¡æ¯ |
| | | _logger.LogError("BuildInboundCommandï¼æªæ¾å°ç«å°ã{CurrentAddress}ãä¿¡æ¯ï¼ä»»å¡å·: {TaskNum}", task.CurrentAddress, task.TaskNum); |
| | | QuartzLogger.Error($"BuildInboundCommandï¼æªæ¾å°ç«å°ã{task.CurrentAddress}ãä¿¡æ¯", task.Roadway); |
| | | QuartzLogHelper.LogError(_logger, "BuildInboundCommandï¼æªæ¾å°ç«å°ã{CurrentAddress}ãä¿¡æ¯ï¼ä»»å¡å·: {TaskNum}", $"BuildInboundCommandï¼æªæ¾å°ç«å°ã{task.CurrentAddress}ãä¿¡æ¯", task.Roadway, task.CurrentAddress, task.TaskNum); |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"æªæ¾å°ç«å°ã{task.CurrentAddress}ãä¿¡æ¯ï¼æ æ³è·å对åºçå åæºåè´§ç«å°ä¿¡æ¯"); |
| | | return null; |
| | | } |
| | |
| | | // è§£æç®æ å°åï¼åºä½å°åï¼ |
| | | if (!TryParseAddress(task.NextAddress, out short endRow, out short endColumn, out short endLayer)) |
| | | { |
| | | _logger.LogError("BuildInboundCommandï¼å
¥åºä»»å¡ç»ç¹å°åè§£æå¤±è´¥ï¼ç»ç¹: {NextAddress}ï¼ä»»å¡å·: {TaskNum}", task.NextAddress, task.TaskNum); |
| | | QuartzLogger.Error($"BuildInboundCommandï¼å
¥åºä»»å¡ç»ç¹å°åè§£æå¤±è´¥ï¼ç»ç¹: {task.NextAddress}", task.Roadway); |
| | | QuartzLogHelper.LogError(_logger, "BuildInboundCommandï¼å
¥åºä»»å¡ç»ç¹å°åè§£æå¤±è´¥ï¼ç»ç¹: {NextAddress}ï¼ä»»å¡å·: {TaskNum}", $"BuildInboundCommandï¼å
¥åºä»»å¡ç»ç¹å°åè§£æå¤±è´¥ï¼ç»ç¹: {task.NextAddress}", task.Roadway, task.NextAddress, task.TaskNum); |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"å
¥åºä»»å¡ç»ç¹é误ï¼ç»ç¹ï¼ã{task.NextAddress}ã"); |
| | | return null; |
| | | } |
| | |
| | | SetCommandProperty(command, "EndColumn", endColumn); |
| | | SetCommandProperty(command, "EndLayer", endLayer); |
| | | |
| | | _logger.LogInformation("BuildInboundCommandï¼å
¥åºå½ä»¤æå»ºæåï¼èµ·ç¹: {StartRow}-{StartColumn}-{StartLayer}ï¼ç»ç¹: {EndRow}-{EndColumn}-{EndLayer}ï¼ä»»å¡å·: {TaskNum}", |
| | | router.SrmRow, router.SrmColumn, router.SrmLayer, endRow, endColumn, endLayer, task.TaskNum); |
| | | QuartzLogger.Info($"BuildInboundCommandï¼å
¥åºå½ä»¤æå»ºæåï¼èµ·ç¹: {router.SrmRow}-{router.SrmColumn}-{router.SrmLayer}ï¼ç»ç¹: {endRow}-{endColumn}-{endLayer}", task.Roadway); |
| | | QuartzLogHelper.LogInfo(_logger, "BuildInboundCommandï¼å
¥åºå½ä»¤æå»ºæåï¼èµ·ç¹: {StartRow}-{StartColumn}-{StartLayer}ï¼ç»ç¹: {EndRow}-{EndColumn}-{EndLayer}ï¼ä»»å¡å·: {TaskNum}", $"BuildInboundCommandï¼å
¥åºå½ä»¤æå»ºæåï¼èµ·ç¹: {router.SrmRow}-{router.SrmColumn}-{router.SrmLayer}ï¼ç»ç¹: {endRow}-{endColumn}-{endLayer}", task.Roadway, router.SrmRow, router.SrmColumn, router.SrmLayer, endRow, endColumn, endLayer, task.TaskNum); |
| | | |
| | | return command; |
| | | } |
| | |
| | | /// <returns>å¡«å
好çå½ä»¤å¯¹è±¡</returns> |
| | | private T? BuildOutboundCommand<T>(Dt_Task task, T command) where T : class |
| | | { |
| | | _logger.LogInformation("BuildOutboundCommandï¼æå»ºåºåºå½ä»¤ï¼ä»»å¡å·: {TaskNum}", task.TaskNum); |
| | | QuartzLogger.Info($"BuildOutboundCommandï¼æå»ºåºåºå½ä»¤ï¼ä»»å¡å·: {task.TaskNum}", task.Roadway); |
| | | QuartzLogHelper.LogInfo(_logger, "BuildOutboundCommandï¼æå»ºåºåºå½ä»¤ï¼ä»»å¡å·: {TaskNum}", $"BuildOutboundCommandï¼æå»ºåºåºå½ä»¤ï¼ä»»å¡å·: {task.TaskNum}", task.Roadway, task.TaskNum); |
| | | |
| | | // ç¡®å®ä»»å¡ç±»å |
| | | int taskType = 0; |
| | |
| | | Dt_Router? router = _routerService.QueryNextRoute(task.Roadway, task.TargetAddress, taskType); |
| | | if (router == null) |
| | | { |
| | | _logger.LogError("BuildOutboundCommandï¼æªæ¾å°ç«å°ã{TargetAddress}ãä¿¡æ¯ï¼ä»»å¡å·: {TaskNum}", task.TargetAddress, task.TaskNum); |
| | | QuartzLogger.Error($"BuildOutboundCommandï¼æªæ¾å°ç«å°ã{task.TargetAddress}ãä¿¡æ¯", task.Roadway); |
| | | QuartzLogHelper.LogError(_logger, "BuildOutboundCommandï¼æªæ¾å°ç«å°ã{TargetAddress}ãä¿¡æ¯ï¼ä»»å¡å·: {TaskNum}", $"BuildOutboundCommandï¼æªæ¾å°ç«å°ã{task.TargetAddress}ãä¿¡æ¯", task.Roadway, task.TargetAddress, task.TaskNum); |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"æªæ¾å°ç«å°ã{task.TargetAddress}ãä¿¡æ¯ï¼æ æ³è·å对åºçå åæºæ¾è´§ç«å°ä¿¡æ¯"); |
| | | return null; |
| | | } |
| | |
| | | // è§£æèµ·å§å°åï¼åºä½å°åï¼ |
| | | if (!TryParseAddress(task.CurrentAddress, out short startRow, out short startColumn, out short startLayer)) |
| | | { |
| | | _logger.LogError("BuildOutboundCommandï¼åºåºä»»å¡èµ·ç¹å°åè§£æå¤±è´¥ï¼èµ·ç¹: {CurrentAddress}ï¼ä»»å¡å·: {TaskNum}", task.CurrentAddress, task.TaskNum); |
| | | QuartzLogger.Error($"BuildOutboundCommandï¼åºåºä»»å¡èµ·ç¹å°åè§£æå¤±è´¥ï¼èµ·ç¹: {task.CurrentAddress}", task.Roadway); |
| | | QuartzLogHelper.LogError(_logger, "BuildOutboundCommandï¼åºåºä»»å¡èµ·ç¹å°åè§£æå¤±è´¥ï¼èµ·ç¹: {CurrentAddress}ï¼ä»»å¡å·: {TaskNum}", $"BuildOutboundCommandï¼åºåºä»»å¡èµ·ç¹å°åè§£æå¤±è´¥ï¼èµ·ç¹: {task.CurrentAddress}", task.Roadway, task.CurrentAddress, task.TaskNum); |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"åºåºä»»å¡èµ·ç¹é误ï¼èµ·ç¹ï¼ã{task.CurrentAddress}ã"); |
| | | return null; |
| | | } |
| | |
| | | SetCommandProperty(command, "StartColumn", startColumn); |
| | | SetCommandProperty(command, "StartLayer", startLayer); |
| | | |
| | | _logger.LogInformation("BuildOutboundCommandï¼åºåºå½ä»¤æå»ºæåï¼èµ·ç¹: {StartRow}-{StartColumn}-{StartLayer}ï¼ç»ç¹: {EndRow}-{EndColumn}-{EndLayer}ï¼ä»»å¡å·: {TaskNum}", |
| | | startRow, startColumn, startLayer, router.SrmRow, router.SrmColumn, router.SrmLayer, task.TaskNum); |
| | | QuartzLogger.Info($"BuildOutboundCommandï¼åºåºå½ä»¤æå»ºæåï¼èµ·ç¹: {startRow}-{startColumn}-{startLayer}ï¼ç»ç¹: {router.SrmRow}-{router.SrmColumn}-{router.SrmLayer}", task.Roadway); |
| | | QuartzLogHelper.LogInfo(_logger, "BuildOutboundCommandï¼åºåºå½ä»¤æå»ºæåï¼èµ·ç¹: {StartRow}-{StartColumn}-{StartLayer}ï¼ç»ç¹: {EndRow}-{EndColumn}-{EndLayer}ï¼ä»»å¡å·: {TaskNum}", $"BuildOutboundCommandï¼åºåºå½ä»¤æå»ºæåï¼èµ·ç¹: {startRow}-{startColumn}-{startLayer}ï¼ç»ç¹: {router.SrmRow}-{router.SrmColumn}-{router.SrmLayer}", task.Roadway, startRow, startColumn, startLayer, router.SrmRow, router.SrmColumn, router.SrmLayer, task.TaskNum); |
| | | |
| | | return command; |
| | | } |
| | |
| | | /// <returns>å¡«å
好çå½ä»¤å¯¹è±¡</returns> |
| | | private T? BuildRelocationCommand<T>(Dt_Task task, T command) where T : class |
| | | { |
| | | _logger.LogInformation("BuildRelocationCommandï¼æå»ºç§»åºå½ä»¤ï¼ä»»å¡å·: {TaskNum}", task.TaskNum); |
| | | QuartzLogger.Info($"BuildRelocationCommandï¼æå»ºç§»åºå½ä»¤ï¼ä»»å¡å·: {task.TaskNum}", task.Roadway); |
| | | QuartzLogHelper.LogInfo(_logger, "BuildRelocationCommandï¼æå»ºç§»åºå½ä»¤ï¼ä»»å¡å·: {TaskNum}", $"BuildRelocationCommandï¼æå»ºç§»åºå½ä»¤ï¼ä»»å¡å·: {task.TaskNum}", task.Roadway, task.TaskNum); |
| | | |
| | | // è§£æç®æ å°å |
| | | if (!TryParseAddress(task.NextAddress, out short endRow, out short endColumn, out short endLayer)) |
| | | { |
| | | _logger.LogError("BuildRelocationCommandï¼ç§»åºä»»å¡ç»ç¹å°åè§£æå¤±è´¥ï¼ç»ç¹: {NextAddress}ï¼ä»»å¡å·: {TaskNum}", task.NextAddress, task.TaskNum); |
| | | QuartzLogger.Error($"BuildRelocationCommandï¼ç§»åºä»»å¡ç»ç¹å°åè§£æå¤±è´¥ï¼ç»ç¹: {task.NextAddress}", task.Roadway); |
| | | QuartzLogHelper.LogError(_logger, "BuildRelocationCommandï¼ç§»åºä»»å¡ç»ç¹å°åè§£æå¤±è´¥ï¼ç»ç¹: {NextAddress}ï¼ä»»å¡å·: {TaskNum}", $"BuildRelocationCommandï¼ç§»åºä»»å¡ç»ç¹å°åè§£æå¤±è´¥ï¼ç»ç¹: {task.NextAddress}", task.Roadway, task.NextAddress, task.TaskNum); |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"ç§»åºä»»å¡ç»ç¹é误ï¼ç»ç¹ï¼ã{task.NextAddress}ã"); |
| | | return null; |
| | | } |
| | |
| | | // è§£æèµ·å§å°å |
| | | if (!TryParseAddress(task.CurrentAddress, out short startRow, out short startColumn, out short startLayer)) |
| | | { |
| | | _logger.LogError("BuildRelocationCommandï¼ç§»åºä»»å¡èµ·ç¹å°åè§£æå¤±è´¥ï¼èµ·ç¹: {CurrentAddress}ï¼ä»»å¡å·: {TaskNum}", task.CurrentAddress, task.TaskNum); |
| | | QuartzLogger.Error($"BuildRelocationCommandï¼ç§»åºä»»å¡èµ·ç¹å°åè§£æå¤±è´¥ï¼èµ·ç¹: {task.CurrentAddress}", task.Roadway); |
| | | QuartzLogHelper.LogError(_logger, "BuildRelocationCommandï¼ç§»åºä»»å¡èµ·ç¹å°åè§£æå¤±è´¥ï¼èµ·ç¹: {CurrentAddress}ï¼ä»»å¡å·: {TaskNum}", $"BuildRelocationCommandï¼ç§»åºä»»å¡èµ·ç¹å°åè§£æå¤±è´¥ï¼èµ·ç¹: {task.CurrentAddress}", task.Roadway, task.CurrentAddress, task.TaskNum); |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"ç§»åºä»»å¡èµ·ç¹é误ï¼èµ·ç¹ï¼ã{task.CurrentAddress}ã"); |
| | | return null; |
| | | } |
| | |
| | | SetCommandProperty(command, "StartColumn", startColumn); |
| | | SetCommandProperty(command, "StartLayer", startLayer); |
| | | |
| | | _logger.LogInformation("BuildRelocationCommandï¼ç§»åºå½ä»¤æå»ºæåï¼èµ·ç¹: {StartRow}-{StartColumn}-{StartLayer}ï¼ç»ç¹: {EndRow}-{EndColumn}-{EndLayer}ï¼ä»»å¡å·: {TaskNum}", |
| | | startRow, startColumn, startLayer, endRow, endColumn, endLayer, task.TaskNum); |
| | | QuartzLogger.Info($"BuildRelocationCommandï¼ç§»åºå½ä»¤æå»ºæåï¼èµ·ç¹: {startRow}-{startColumn}-{startLayer}ï¼ç»ç¹: {endRow}-{endColumn}-{endLayer}", task.Roadway); |
| | | QuartzLogHelper.LogInfo(_logger, "BuildRelocationCommandï¼ç§»åºå½ä»¤æå»ºæåï¼èµ·ç¹: {StartRow}-{StartColumn}-{StartLayer}ï¼ç»ç¹: {EndRow}-{EndColumn}-{EndLayer}ï¼ä»»å¡å·: {TaskNum}", $"BuildRelocationCommandï¼ç§»åºå½ä»¤æå»ºæåï¼èµ·ç¹: {startRow}-{startColumn}-{startLayer}ï¼ç»ç¹: {endRow}-{endColumn}-{endLayer}", task.Roadway, startRow, startColumn, startLayer, endRow, endColumn, endLayer, task.TaskNum); |
| | | |
| | | return command; |
| | | } |
| | |
| | | { |
| | | // 没æä¸ä¸ä»»å¡ç±»åï¼æ¥è¯¢æ®éä»»å¡ |
| | | candidateTask = _taskService.QueryStackerCraneTask(deviceCode); |
| | | _logger.LogDebug("SelectTaskï¼æ¥è¯¢æ®éä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ç»æ: {TaskNum}", deviceCode, candidateTask?.TaskNum); |
| | | QuartzLogger.Debug($"æ¥è¯¢æ®éä»»å¡ï¼è®¾å¤: {deviceCode}ï¼ç»æ: {candidateTask?.TaskNum}", deviceCode); |
| | | QuartzLogHelper.LogDebug(_logger, "SelectTaskï¼æ¥è¯¢æ®éä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ç»æ: {TaskNum}", $"æ¥è¯¢æ®éä»»å¡ï¼è®¾å¤: {deviceCode}ï¼ç»æ: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum); |
| | | } |
| | | else if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) |
| | | { |
| | |
| | | candidateTask = _taskService.QueryStackerCraneInTask(deviceCode); |
| | | // å¦ææ²¡æå
¥åºä»»å¡ï¼åæ¥ä¸ä¸åºåºä»»å¡ |
| | | candidateTask ??= _taskService.QueryStackerCraneOutTask(deviceCode); |
| | | _logger.LogDebug("SelectTaskï¼åºåºåä¼å
æ¥å
¥åºï¼è®¾å¤: {DeviceCode}ï¼ç»æ: {TaskNum}", deviceCode, candidateTask?.TaskNum); |
| | | QuartzLogger.Debug($"åºåºåä¼å
æ¥å
¥åºï¼è®¾å¤: {deviceCode}ï¼ç»æ: {candidateTask?.TaskNum}", deviceCode); |
| | | QuartzLogHelper.LogDebug(_logger, "SelectTaskï¼åºåºåä¼å
æ¥å
¥åºï¼è®¾å¤: {DeviceCode}ï¼ç»æ: {TaskNum}", $"åºåºåä¼å
æ¥å
¥åºï¼è®¾å¤: {deviceCode}ï¼ç»æ: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum); |
| | | } |
| | | else |
| | | { |
| | | // ä¸ä¸ä»»å¡æ¯å
¥åºï¼éåºåºï¼ï¼ä¼å
æ¥åºåºä»»å¡ |
| | | candidateTask = _taskService.QueryStackerCraneOutTask(deviceCode); |
| | | _logger.LogDebug("SelectTaskï¼å
¥åºåä¼å
æ¥åºåºï¼è®¾å¤: {DeviceCode}ï¼ç»æ: {TaskNum}", deviceCode, candidateTask?.TaskNum); |
| | | QuartzLogger.Debug($"å
¥åºåä¼å
æ¥åºåºï¼è®¾å¤: {deviceCode}ï¼ç»æ: {candidateTask?.TaskNum}", deviceCode); |
| | | QuartzLogHelper.LogDebug(_logger, "SelectTaskï¼å
¥åºåä¼å
æ¥åºåºï¼è®¾å¤: {DeviceCode}ï¼ç»æ: {TaskNum}", $"å
¥åºåä¼å
æ¥åºåºï¼è®¾å¤: {deviceCode}ï¼ç»æ: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum); |
| | | } |
| | | |
| | | // å¦ææ²¡æåéä»»å¡ï¼è¿å null |
| | | if (candidateTask == null) |
| | | { |
| | | _logger.LogDebug("SelectTaskï¼æ²¡æåéä»»å¡ï¼è®¾å¤: {DeviceCode}", deviceCode); |
| | | QuartzLogger.Debug($"没æåéä»»å¡ï¼è®¾å¤: {deviceCode}", deviceCode); |
| | | QuartzLogHelper.LogDebug(_logger, "SelectTaskï¼æ²¡æåéä»»å¡ï¼è®¾å¤: {DeviceCode}", $"没æåéä»»å¡ï¼è®¾å¤: {deviceCode}", deviceCode, deviceCode); |
| | | return null; |
| | | } |
| | | |
| | | // 妿䏿¯åºåºä»»å¡ï¼ç´æ¥è¿å |
| | | if (candidateTask.TaskType.GetTaskTypeGroup() != TaskTypeGroup.OutbondGroup) |
| | | { |
| | | _logger.LogInformation("SelectTaskï¼éä¸éåºåºä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}ï¼ä»»å¡ç±»å: {TaskType}", deviceCode, candidateTask.TaskNum, candidateTask.TaskType); |
| | | QuartzLogger.Info($"éä¸éåºåºä»»å¡ï¼ä»»å¡å·: {candidateTask.TaskNum}ï¼ä»»å¡ç±»å: {candidateTask.TaskType}", deviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "SelectTaskï¼éä¸éåºåºä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}ï¼ä»»å¡ç±»å: {TaskType}", $"éä¸éåºåºä»»å¡ï¼ä»»å¡å·: {candidateTask.TaskNum}ï¼ä»»å¡ç±»å: {candidateTask.TaskType}", deviceCode, deviceCode, candidateTask.TaskNum, candidateTask.TaskType); |
| | | return candidateTask; |
| | | } |
| | | |
| | |
| | | Dt_Task? selectedTask = TrySelectOutboundTask(candidateTask); |
| | | if (selectedTask != null) |
| | | { |
| | | _logger.LogInformation("SelectTaskï¼éä¸åºåºä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", deviceCode, selectedTask.TaskNum); |
| | | QuartzLogger.Info($"éä¸åºåºä»»å¡ï¼ä»»å¡å·: {selectedTask.TaskNum}", deviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "SelectTaskï¼éä¸åºåºä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", $"éä¸åºåºä»»å¡ï¼ä»»å¡å·: {selectedTask.TaskNum}", deviceCode, deviceCode, selectedTask.TaskNum); |
| | | return selectedTask; |
| | | } |
| | | |
| | |
| | | selectedTask = TrySelectOutboundTask(alternativeTask); |
| | | if (selectedTask != null) |
| | | { |
| | | _logger.LogInformation("SelectTaskï¼éä¸å¤éåºåºä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", deviceCode, selectedTask.TaskNum); |
| | | QuartzLogger.Info($"éä¸å¤éåºåºä»»å¡ï¼ä»»å¡å·: {selectedTask.TaskNum}", deviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "SelectTaskï¼éä¸å¤éåºåºä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", $"éä¸å¤éåºåºä»»å¡ï¼ä»»å¡å·: {selectedTask.TaskNum}", deviceCode, deviceCode, selectedTask.TaskNum); |
| | | return selectedTask; |
| | | } |
| | | } |
| | | |
| | | // 没æå¯ç¨åºåºä»»å¡ï¼å°è¯è¿åå
¥åºä»»å¡ |
| | | var inboundTask = _taskService.QueryStackerCraneInTask(deviceCode); |
| | | _logger.LogInformation("SelectTaskï¼è¿åå
¥åºä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", deviceCode, inboundTask?.TaskNum); |
| | | QuartzLogger.Info($"è¿åå
¥åºä»»å¡ï¼ä»»å¡å·: {inboundTask?.TaskNum}", deviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "SelectTaskï¼è¿åå
¥åºä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", $"è¿åå
¥åºä»»å¡ï¼ä»»å¡å·: {inboundTask?.TaskNum}", deviceCode, deviceCode, inboundTask?.TaskNum); |
| | | return inboundTask; |
| | | } |
| | | |
| | |
| | | if (router == null) |
| | | { |
| | | // æªæ¾å°ç«å°è·¯ç±ä¿¡æ¯ |
| | | _logger.LogWarning("IsOutTaskStationAvailableï¼æªæ¾å°ç«å°è·¯ç±ä¿¡æ¯ï¼ç«å°: {NextAddress}ï¼ä»»å¡å·: {TaskNum}", task.NextAddress, task.TaskNum); |
| | | QuartzLogger.Warn($"IsOutTaskStationAvailableï¼æªæ¾å°ç«å°è·¯ç±ä¿¡æ¯ï¼ç«å°: {task.NextAddress}", task.Roadway); |
| | | QuartzLogHelper.LogWarn(_logger, "IsOutTaskStationAvailableï¼æªæ¾å°ç«å°è·¯ç±ä¿¡æ¯ï¼ç«å°: {NextAddress}ï¼ä»»å¡å·: {TaskNum}", $"IsOutTaskStationAvailableï¼æªæ¾å°ç«å°è·¯ç±ä¿¡æ¯ï¼ç«å°: {task.NextAddress}", task.Roadway, task.NextAddress, task.TaskNum); |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"æªæ¾å°ç«å°ã{task.NextAddress}ãä¿¡æ¯ï¼æ æ³æ ¡éªç«å°"); |
| | | return false; |
| | | } |
| | |
| | | if (device == null) |
| | | { |
| | | // æªæ¾å°è®¾å¤ |
| | | _logger.LogWarning("IsOutTaskStationAvailableï¼æªæ¾å°åºåºç«å°å¯¹åºçé讯对象ï¼ç«å°: {ChildPosiDeviceCode}ï¼ä»»å¡å·: {TaskNum}", router.ChildPosiDeviceCode, task.TaskNum); |
| | | QuartzLogger.Warn($"IsOutTaskStationAvailableï¼æªæ¾å°åºåºç«å°å¯¹åºçé讯对象ï¼ç«å°: {router.ChildPosiDeviceCode}", task.Roadway); |
| | | QuartzLogHelper.LogWarn(_logger, "IsOutTaskStationAvailableï¼æªæ¾å°åºåºç«å°å¯¹åºçé讯对象ï¼ç«å°: {ChildPosiDeviceCode}ï¼ä»»å¡å·: {TaskNum}", $"IsOutTaskStationAvailableï¼æªæ¾å°åºåºç«å°å¯¹åºçé讯对象ï¼ç«å°: {router.ChildPosiDeviceCode}", task.Roadway, router.ChildPosiDeviceCode, task.TaskNum); |
| | | _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"æªæ¾å°åºåºç«å°ã{router.ChildPosiDeviceCode}ã对åºçéè®¯å¯¹è±¡ï¼æ æ³å¤æåºåºç«å°æ¯å¦è¢«å ç¨"); |
| | | return false; |
| | | } |
| | |
| | | |
| | | // æ£æ¥ç«å°æ¯å¦è¢«å ç¨ |
| | | bool isOccupied = conveyorLine.IsOccupied(router.ChildPosi); |
| | | _logger.LogInformation("IsOutTaskStationAvailableï¼ç«å° {ChildPosi}ï¼æ¯å¦è¢«å ç¨: {IsOccupied}ï¼ä»»å¡å·: {TaskNum}", router.ChildPosi, !isOccupied, task.TaskNum); |
| | | QuartzLogger.Info($"IsOutTaskStationAvailableï¼ç«å° {router.ChildPosi}ï¼æ¯å¦è¢«å ç¨: {!isOccupied}", task.Roadway); |
| | | QuartzLogHelper.LogInfo(_logger, "IsOutTaskStationAvailableï¼ç«å° {ChildPosi}ï¼æ¯å¦è¢«å ç¨: {IsOccupied}ï¼ä»»å¡å·: {TaskNum}", $"IsOutTaskStationAvailableï¼ç«å° {router.ChildPosi}ï¼æ¯å¦è¢«å ç¨: {!isOccupied}", task.Roadway, router.ChildPosi, !isOccupied, task.TaskNum); |
| | | |
| | | return isOccupied; |
| | | } |
| | |
| | | </el-table-column> |
| | | <el-table-column prop="grade" label="ä¼å
级" width="100"> |
| | | <template v-slot="{ row }"> |
| | | <el-input-number v-if="row && row.editable" v-model="row.grade" :min="1" :max="99" size="small" style="width: 80px"></el-input-number> |
| | | <el-input-number v-if="row && row.editable" v-model="row.grade" :min="1" :max="99" size="small" |
| | | style="width: 80px"></el-input-number> |
| | | <span v-else>{{ row ? row.grade : '' }}</span> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | }, |
| | | getStatusKey(taskType, taskStatus) { |
| | | if (taskType === 200) return `inbound_${taskStatus}`; |
| | | if (taskType === 204) return `inbound_${taskStatus}`; |
| | | if (taskType === 100) return `outbound_${taskStatus}`; |
| | | if (taskType === 140) return `outbound_${taskStatus}`; |
| | | if (taskType === 300) return `relocation_${taskStatus}`; |
| | | return `other_${taskStatus}`; |
| | | }, |
| | |
| | | if (taskType === 200 && taskStatus === 200) return true; |
| | | if (taskType === 100 && taskStatus === 100) return true; |
| | | if (taskType === 300 && taskStatus === 300) return true; |
| | | if (taskType === 140 && taskStatus === 100) return true; |
| | | if (taskType === 204 && taskStatus === 200) return true; |
| | | return false; |
| | | }, |
| | | submitDispatch() { |
| | |
| | | color: #606266; |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .dispatch-info .count { |
| | | color: #409eff; |
| | | font-weight: bold; |
| | | } |
| | | |
| | | .status-error { |
| | | color: #f56c6c; |
| | | } |
| | | |
| | | .fail-results { |
| | | margin-top: 15px; |
| | | padding: 10px; |
| | | background: #fef0f0; |
| | | border-radius: 4px; |
| | | } |
| | | |
| | | .fail-title { |
| | | font-size: 14px; |
| | | color: #f56c6c; |
| | |
| | | /// 空箱å
¥åº |
| | | /// </summary> |
| | | [Description("空箱å
¥åº")] |
| | | InEmpty = 600, |
| | | InEmpty = 204, |
| | | } |
| | | |
| | | public enum TaskOutboundTypeEnum |
| | |
| | | "id": "1003", |
| | | "name": "A\u533A_\u5E38\u6E29\u8F93\u9001\u7EBF", |
| | | "plcType": "S71500", |
| | | "port": 109, |
| | | "port": 102, |
| | | "activationKey": "", |
| | | "autoStart": false, |
| | | "protocolTemplateId": "protocol-1003", |
| | |
| | | "id": "CWSC1", |
| | | "name": "\u5E38\u6E29\u5806\u579B\u673A", |
| | | "plcType": "S71500", |
| | | "port": 103, |
| | | "port": 102, |
| | | "activationKey": "", |
| | | "autoStart": false, |
| | | "protocolTemplateId": "protocol-CWSC1", |
| | |
| | | "id": "HCSC1", |
| | | "name": "\u5316\u6210\u5806\u579B\u673A", |
| | | "plcType": "S71500", |
| | | "port": 104, |
| | | "port": 102, |
| | | "activationKey": "", |
| | | "autoStart": false, |
| | | "protocolTemplateId": "protocol-HCSC1", |
| | | "memoryConfig": { |
| | | "mRegionSize": 1024, |
| | | "dbBlockCount": 2, |
| | | "dbBlockCount": 1, |
| | | "dbBlockNumbers": [ |
| | | 910, |
| | | 900 |
| | | 510 |
| | | ], |
| | | "dbBlockSize": 65536, |
| | | "iRegionSize": 256, |
| | |
| | | "id": "PM", |
| | | "name": "\u63D2\u62D4\u9489\u673A", |
| | | "plcType": "S71500", |
| | | "port": 107, |
| | | "port": 102, |
| | | "activationKey": "", |
| | | "autoStart": false, |
| | | "protocolTemplateId": "protocol-PM", |
| | |
| | | "version": "1.0", |
| | | "fields": [ |
| | | { |
| | | "fieldKey": "GWSC01_InputTaskNum", |
| | | "fieldKey": "GWSC1_InputTaskNum", |
| | | "dbNumber": 100, |
| | | "offset": 194, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_WorkAction", |
| | | "fieldKey": "GWSC1_WorkAction", |
| | | "dbNumber": 100, |
| | | "offset": 192, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_InputWorkType", |
| | | "fieldKey": "GWSC1_InputWorkType", |
| | | "dbNumber": 100, |
| | | "offset": 198, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_InputPickRow", |
| | | "fieldKey": "GWSC1_InputPickRow", |
| | | "dbNumber": 100, |
| | | "offset": 208, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_InputPickColumn", |
| | | "fieldKey": "GWSC1_InputPickColumn", |
| | | "dbNumber": 100, |
| | | "offset": 210, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_InputPickLayer", |
| | | "fieldKey": "GWSC1_InputPickLayer", |
| | | "dbNumber": 100, |
| | | "offset": 212, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_InputPlaceRow", |
| | | "fieldKey": "GWSC1_InputPlaceRow", |
| | | "dbNumber": 100, |
| | | "offset": 214, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_InputPlaceColumn", |
| | | "fieldKey": "GWSC1_InputPlaceColumn", |
| | | "dbNumber": 100, |
| | | "offset": 216, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_InputPlaceLayer", |
| | | "fieldKey": "GWSC1_InputPlaceLayer", |
| | | "dbNumber": 100, |
| | | "offset": 218, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_StackerCraneAutoStatus", |
| | | "fieldKey": "GWSC1_StackerCraneAutoStatus", |
| | | "dbNumber": 100, |
| | | "offset": 2, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_StackerCraneWorkStatus", |
| | | "fieldKey": "GWSC1_StackerCraneWorkStatus", |
| | | "dbNumber": 100, |
| | | "offset": 4, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_OutputFaultHigh", |
| | | "fieldKey": "GWSC1_OutputFaultHigh", |
| | | "dbNumber": 100, |
| | | "offset": 12, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_OutputFaultMid", |
| | | "fieldKey": "GWSC1_OutputFaultMid", |
| | | "dbNumber": 100, |
| | | "offset": 16, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_OutputFaultLow", |
| | | "fieldKey": "GWSC1_OutputFaultLow", |
| | | "dbNumber": 100, |
| | | "offset": 20, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_CurrentTaskNum", |
| | | "fieldKey": "GWSC1_CurrentTaskNum", |
| | | "dbNumber": 100, |
| | | "offset": 24, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_StackerCraneCompleted", |
| | | "fieldKey": "GWSC1_StackerCraneCompleted", |
| | | "dbNumber": 100, |
| | | "offset": 28, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_OutputCurrentColumn", |
| | | "fieldKey": "GWSC1_OutputCurrentColumn", |
| | | "dbNumber": 100, |
| | | "offset": 46, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_OutputCurrentLayer", |
| | | "fieldKey": "GWSC1_OutputCurrentLayer", |
| | | "dbNumber": 100, |
| | | "offset": 48, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "GWSC01_StackerCraneStatus", |
| | | "fieldKey": "GWSC1_StackerCraneStatus", |
| | | "dbNumber": 100, |
| | | "offset": 96, |
| | | "bit": 1, |
| | |
| | | "version": "1.0", |
| | | "fields": [ |
| | | { |
| | | "fieldKey": "HCSC01_StackerCraneHeartBeat", |
| | | "dbNumber": 910, |
| | | "fieldKey": "HCSC1_InputTaskNum", |
| | | "dbNumber": 510, |
| | | "offset": 0, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "dataType": 2, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_StackerCraneStatus", |
| | | "dbNumber": 910, |
| | | "offset": 6, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_StackerCraneFaultCode", |
| | | "dbNumber": 910, |
| | | "offset": 8, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_StackerCraneWorkStatus", |
| | | "dbNumber": 910, |
| | | "offset": 20, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_StackerCraneRow", |
| | | "dbNumber": 910, |
| | | "offset": 22, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_StackerCraneColumn", |
| | | "dbNumber": 910, |
| | | "offset": 24, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_StackerCraneLayer", |
| | | "dbNumber": 910, |
| | | "fieldKey": "HCSC1_WorkAction", |
| | | "dbNumber": 510, |
| | | "offset": 26, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_CurrentTaskNum", |
| | | "dbNumber": 910, |
| | | "fieldKey": "HCSC1_InputWorkType", |
| | | "dbNumber": 510, |
| | | "offset": 4, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC1_InputPickRow", |
| | | "dbNumber": 510, |
| | | "offset": 14, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC1_InputPickColumn", |
| | | "dbNumber": 510, |
| | | "offset": 16, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC1_InputPickLayer", |
| | | "dbNumber": 510, |
| | | "offset": 18, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC1_InputPlaceRow", |
| | | "dbNumber": 510, |
| | | "offset": 20, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC1_InputPlaceColumn", |
| | | "dbNumber": 510, |
| | | "offset": 22, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC1_InputPlaceLayer", |
| | | "dbNumber": 510, |
| | | "offset": 24, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC1_StackerCraneAutoStatus", |
| | | "dbNumber": 510, |
| | | "offset": 28, |
| | | "bit": 1, |
| | | "dataType": 2, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_StackerCraneWorkAction", |
| | | "dbNumber": 910, |
| | | "offset": 40, |
| | | "fieldKey": "HCSC1_StackerCraneWorkStatus", |
| | | "dbNumber": 510, |
| | | "offset": 30, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_StackerCraneCompleted", |
| | | "dbNumber": 910, |
| | | "offset": 42, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_HeartBeat", |
| | | "dbNumber": 900, |
| | | "offset": 0, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_TaskNum", |
| | | "dbNumber": 900, |
| | | "offset": 2, |
| | | "fieldKey": "HCSC1_OutputFaultHigh", |
| | | "dbNumber": 510, |
| | | "offset": 32, |
| | | "bit": 1, |
| | | "dataType": 2, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_WorkAction", |
| | | "dbNumber": 900, |
| | | "fieldKey": "HCSC1_OutputFaultMid", |
| | | "dbNumber": 510, |
| | | "offset": 36, |
| | | "bit": 1, |
| | | "dataType": 2, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC1_OutputFaultLow", |
| | | "dbNumber": 510, |
| | | "offset": 40, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "dataType": 2, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_FireAlarm", |
| | | "dbNumber": 900, |
| | | "offset": 42, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_WorkType", |
| | | "dbNumber": 900, |
| | | "offset": 44, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_StartRow", |
| | | "dbNumber": 900, |
| | | "offset": 46, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_StartColumn", |
| | | "dbNumber": 900, |
| | | "fieldKey": "HCSC1_CurrentTaskNum", |
| | | "dbNumber": 510, |
| | | "offset": 48, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "dataType": 2, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_StartLayer", |
| | | "dbNumber": 900, |
| | | "offset": 50, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_EndRow", |
| | | "dbNumber": 900, |
| | | "fieldKey": "HCSC1_StackerCraneCompleted", |
| | | "dbNumber": 510, |
| | | "offset": 52, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_EndColumn", |
| | | "dbNumber": 900, |
| | | "fieldKey": "HCSC1_OutputCurrentColumn", |
| | | "dbNumber": 510, |
| | | "offset": 54, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_EndLayer", |
| | | "dbNumber": 900, |
| | | "fieldKey": "HCSC1_OutputCurrentLayer", |
| | | "dbNumber": 510, |
| | | "offset": 56, |
| | | "bit": 1, |
| | | "dataType": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC01_Barcode", |
| | | "dbNumber": 900, |
| | | "fieldKey": "HCSC1_StackerCraneStatus", |
| | | "dbNumber": 510, |
| | | "offset": 58, |
| | | "bit": 1, |
| | | "dataType": 3, |
| | | "length": 26, |
| | | "dataType": 1, |
| | | "length": 1, |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "HCSC1_OutputFaultLow1", |
| | | "dbNumber": 510, |
| | | "offset": 44, |
| | | "bit": 1, |
| | | "dataType": 2, |
| | | "length": 1, |
| | | "direction": 2 |
| | | } |
| | | ] |
| | |
| | | "version": "1.0", |
| | | "fields": [ |
| | | { |
| | | "fieldKey": "CWSC01_InputTaskNum", |
| | | "fieldKey": "CWSC1_InputTaskNum", |
| | | "dbNumber": 100, |
| | | "offset": 194, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_WorkAction", |
| | | "fieldKey": "CWSC1_WorkAction", |
| | | "dbNumber": 100, |
| | | "offset": 192, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_InputWorkType", |
| | | "fieldKey": "CWSC1_InputWorkType", |
| | | "dbNumber": 100, |
| | | "offset": 198, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_InputPickRow", |
| | | "fieldKey": "CWSC1_InputPickRow", |
| | | "dbNumber": 100, |
| | | "offset": 208, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_InputPickColumn", |
| | | "fieldKey": "CWSC1_InputPickColumn", |
| | | "dbNumber": 100, |
| | | "offset": 210, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_InputPickLayer", |
| | | "fieldKey": "CWSC1_InputPickLayer", |
| | | "dbNumber": 100, |
| | | "offset": 212, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_InputPlaceRow", |
| | | "fieldKey": "CWSC1_InputPlaceRow", |
| | | "dbNumber": 100, |
| | | "offset": 214, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_InputPlaceColumn", |
| | | "fieldKey": "CWSC1_InputPlaceColumn", |
| | | "dbNumber": 100, |
| | | "offset": 216, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_InputPlaceLayer", |
| | | "fieldKey": "CWSC1_InputPlaceLayer", |
| | | "dbNumber": 100, |
| | | "offset": 218, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_StackerCraneAutoStatus", |
| | | "fieldKey": "CWSC1_StackerCraneAutoStatus", |
| | | "dbNumber": 100, |
| | | "offset": 2, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_StackerCraneWorkStatus", |
| | | "fieldKey": "CWSC1_StackerCraneWorkStatus", |
| | | "dbNumber": 100, |
| | | "offset": 4, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_OutputFaultHigh", |
| | | "fieldKey": "CWSC1_OutputFaultHigh", |
| | | "dbNumber": 100, |
| | | "offset": 12, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_OutputFaultMid", |
| | | "fieldKey": "CWSC1_OutputFaultMid", |
| | | "dbNumber": 100, |
| | | "offset": 16, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_OutputFaultLow", |
| | | "fieldKey": "CWSC1_OutputFaultLow", |
| | | "dbNumber": 100, |
| | | "offset": 20, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_CurrentTaskNum", |
| | | "fieldKey": "CWSC1_CurrentTaskNum", |
| | | "dbNumber": 100, |
| | | "offset": 24, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_StackerCraneCompleted", |
| | | "fieldKey": "CWSC1_StackerCraneCompleted", |
| | | "dbNumber": 100, |
| | | "offset": 28, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_OutputCurrentColumn", |
| | | "fieldKey": "CWSC1_OutputCurrentColumn", |
| | | "dbNumber": 100, |
| | | "offset": 46, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_OutputCurrentLayer", |
| | | "fieldKey": "CWSC1_OutputCurrentLayer", |
| | | "dbNumber": 100, |
| | | "offset": 48, |
| | | "bit": 1, |
| | |
| | | "direction": 2 |
| | | }, |
| | | { |
| | | "fieldKey": "CWSC01_StackerCraneStatus", |
| | | "fieldKey": "CWSC1_StackerCraneStatus", |
| | | "dbNumber": 100, |
| | | "offset": 96, |
| | | "bit": 1, |