| | |
| | | private readonly IServiceProvider _serviceProvider; |
| | | private static bool _isMonitoring = false; |
| | | //private static CancellationTokenSource _cancellationTokenSource; |
| | | |
| | | |
| | | // å¨ç±»çº§å«æ·»å ç¬ç«ççæ§ç¶æ |
| | | private bool _isOutboundMonitoring = false; |
| | | private bool _isInboundMonitoring = false; |
| | | private bool _isSafetyDoorMonitoring = false; |
| | | private bool _isPlatformMonitoring = false; |
| | | |
| | | // å¨ç±»çåæ®µåº |
| | | private CancellationTokenSource? _platformCancellationTokenSource; |
| | | private CancellationTokenSource _outboundCancellationTokenSource; |
| | | private CancellationTokenSource _inboundCancellationTokenSource; |
| | | private CancellationTokenSource _safetyDoorCancellationTokenSource; |
| | |
| | | |
| | | //=================================================读å设å¤ä¿¡æ¯========================================================== |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// è·å设å¤ç¶æï¼æ¯æåºåºãå
¥åºåå®å
¨é¨ç¬ç«çæ§ï¼ |
| | | /// è·å设å¤ç¶æï¼æ¯æåºåºãå
¥åºãå®å
¨é¨åç«å°ç¬ç«çæ§ï¼ |
| | | /// </summary> |
| | | /// <param name="off">0:忢 1:å¯å¨ 2:ä»
æ¥è¯¢</param> |
| | | /// <param name="monitorType">çæ§ç±»åï¼outbound-åºåº inbound-å
¥åº safetydoor-å®å
¨é¨ all-å
¨é¨</param> |
| | | /// <param name="monitorType">çæ§ç±»åï¼outbound-åºåº inbound-å
¥åº safetydoor-å®å
¨é¨ platform-ç«å° all-å
¨é¨</param> |
| | | /// <returns></returns> |
| | | public WebResponseContent GetDeviceStatusDto(int off, string monitorType = "outbound") |
| | | { |
| | | bool isOutbound = monitorType == "outbound" || monitorType == "all";//åºåº |
| | | bool isInbound = monitorType == "inbound" || monitorType == "all";//å
¥åº |
| | | bool isSafetyDoor = monitorType == "safetydoor" || monitorType == "all";//å®å
¨é¨ |
| | | bool isPlatform = monitorType == "platform" || monitorType == "all";//ç«å° |
| | | |
| | | if (off == 1) |
| | | { |
| | |
| | | _ = Task.Run(async () => await StartDeviceMonitoring(_safetyDoorCancellationTokenSource.Token, "safetydoor")); |
| | | } |
| | | |
| | | if (isPlatform && !_isPlatformMonitoring) |
| | | { |
| | | _isPlatformMonitoring = true; |
| | | _platformCancellationTokenSource = new CancellationTokenSource(); |
| | | _ = Task.Run(async () => await StartDeviceMonitoring(_platformCancellationTokenSource.Token, "platform")); |
| | | } |
| | | |
| | | var immediateData = GetImmediateDeviceData(monitorType); |
| | | string message = GetMonitorStatusMessage(monitorType); |
| | | return WebResponseContent.Instance.OK($"设å¤ç¶æçæ§å·²å¯å¨ - {message}", immediateData); |
| | |
| | | { |
| | | _isSafetyDoorMonitoring = false; |
| | | _safetyDoorCancellationTokenSource?.Cancel(); |
| | | } |
| | | |
| | | if (isPlatform && _isPlatformMonitoring) |
| | | { |
| | | _isPlatformMonitoring = false; |
| | | _platformCancellationTokenSource?.Cancel(); |
| | | } |
| | | |
| | | var finalData = GetImmediateDeviceData(monitorType); |
| | |
| | | case "safetydoor": |
| | | _isSafetyDoorMonitoring = false; |
| | | break; |
| | | case "platform": |
| | | _isPlatformMonitoring = false; |
| | | break; |
| | | } |
| | | } |
| | | |
| | |
| | | ["MaterialIn"] = new List<string> { "RGV101" }, |
| | | |
| | | // å®å
¨é¨è®¾å¤ |
| | | ["SafetyDoor"] = new List<string> { "HCJ2000" }, // å®å
¨é¨ |
| | | ["SafetyDoor"] = new List<string> { "HCJ2000" }, |
| | | |
| | | // ç«å°è®¾å¤ - æ ¹æ®æ¨æä¾çåè®®æ·»å ææç«å° |
| | | // ["Platform"] = new List<string> { |
| | | // "1001", "1002", "2016", "2017", "2018", "2019", "1021", "1061", "1131", "1171" |
| | | //} |
| | | ["Platform"] = new List<string> { "HCJ2000" }, |
| | | |
| | | }; |
| | | |
| | | // 设å¤ç±»å对åºçåæ°é
ç½® |
| | |
| | | ("ResetStatus", "ReadDeviceCommand", "å®å
¨é¨å¤ä½ç¶æ"), |
| | | ("AlarmSummary", "DeviceCommand", "æ¥è¦ä¿¡æ¯"), |
| | | ("OpenDoor", "DeviceCommand", "å¼é¨ä¿¡æ¯") |
| | | }, |
| | | |
| | | // ç«å°è®¾å¤åæ°é
ç½® - æ ¹æ®æ¨æä¾çå议添å |
| | | ["Platform"] = new List<(string, string, string)> |
| | | { |
| | | ("HCJ_GoodsStatus", "ReadDeviceCommand", "å
çµä¿¡å·"), |
| | | ("DoorRequest", "DeviceCommand", "ä»»å¡id") |
| | | } |
| | | }; |
| | | |
| | |
| | | { |
| | | "outbound" => group.Key == "MotherCar" || group.Key == "TransferCar" || group.Key == "MaterialOut", |
| | | "inbound" => group.Key == "MaterialIn" || group.Key == "InboundMotherCar" || group.Key == "InboundTransferCar", |
| | | "safetydoor" => group.Key == "SafetyDoor", // å®å
¨é¨çæ§ç±»å |
| | | "safetydoor" => group.Key == "SafetyDoor", |
| | | "platform" => group.Key == "Platform", // ç«å°çæ§ç±»å |
| | | "all" => true, |
| | | _ => group.Key == "MotherCar" || group.Key == "TransferCar" || group.Key == "MaterialOut" |
| | | }; |
| | | }).ToDictionary(x => x.Key, x => x.Value); |
| | | |
| | | int i = 0; |
| | | // éåçéåç设å¤ç» |
| | | foreach (var deviceGroup in filteredDeviceGroups) |
| | | { |
| | |
| | | } |
| | | else if (device is CommonConveyorLine conveyorLine) |
| | | { |
| | | // å¤çå®å
¨é¨è®¾å¤ï¼CommonConveyorLine ç±»åï¼ |
| | | // å建ä¸ä¸ªå®å
¨é¨è®¾å¤çæ°æ® |
| | | List<string> safetyDoorList = new List<string> { "AQM001", "AQM002", "AQM003" }; |
| | | |
| | | // 为æ¯ä¸ªå®å
¨é¨åå»ºæ°æ® |
| | | foreach (string safetyDoorCode in safetyDoorList) |
| | | // å¤çå®å
¨é¨è®¾å¤åç«å°è®¾å¤ï¼CommonConveyorLine ç±»åï¼ |
| | | if (deviceType == "SafetyDoor") |
| | | { |
| | | var deviceData = new Dictionary<string, int>(); |
| | | // å®å
¨é¨è®¾å¤å¤çé»è¾ï¼ä¿æä¸åï¼ |
| | | List<string> safetyDoorList = new List<string> { "AQM001", "AQM002", "AQM003" }; |
| | | |
| | | // éå该设å¤çææåæ° |
| | | foreach (var param in deviceParams) |
| | | foreach (string safetyDoorCode in safetyDoorList) |
| | | { |
| | | try |
| | | { |
| | | // 使ç¨å®å
¨é¨åç§°æ¥è¯¢å¯¹åºçåæ° |
| | | DeviceProDTO? devicePro = GetSafetyDoorDeviceProDTO( |
| | | conveyorLine, safetyDoorCode, param.DeviceProParamName, param.DeviceProParamType); |
| | | var deviceData = new Dictionary<string, int>(); |
| | | |
| | | if (devicePro != null) |
| | | { |
| | | // å¯¹äº CommonConveyorLine ç±»åï¼ä½¿ç¨éç¨çæ°æ®è¯»åæ¹æ³ |
| | | int res = ReadCommonConveyorLineData(conveyorLine, devicePro.DeviceProAddress); |
| | | deviceData[param.DeviceProRemark] = res; |
| | | } |
| | | else |
| | | { |
| | | deviceData[param.DeviceProRemark] = -1; // ä½¿ç¨ -1 表示æ¥è¯¢å¤±è´¥ |
| | | } |
| | | } |
| | | catch (Exception) |
| | | foreach (var param in deviceParams) |
| | | { |
| | | deviceData[param.DeviceProRemark] = -1; // ä½¿ç¨ -1 表示æ¥è¯¢å¼å¸¸ |
| | | try |
| | | { |
| | | DeviceProDTO? devicePro = GetSafetyDoorDeviceProDTO( |
| | | conveyorLine, safetyDoorCode, param.DeviceProParamName, param.DeviceProParamType); |
| | | |
| | | if (devicePro != null) |
| | | { |
| | | int res = ReadCommonConveyorLineData(conveyorLine, devicePro.DeviceProAddress); |
| | | deviceData[param.DeviceProRemark] = res; |
| | | } |
| | | else |
| | | { |
| | | deviceData[param.DeviceProRemark] = -1; |
| | | } |
| | | } |
| | | catch (Exception) |
| | | { |
| | | deviceData[param.DeviceProRemark] = -1; |
| | | } |
| | | } |
| | | |
| | | finalResult[safetyDoorCode] = deviceData; |
| | | } |
| | | } |
| | | |
| | | // å°å½åå®å
¨é¨è®¾å¤çæ°æ®æ·»å å°æç»ç»æä¸ï¼ä½¿ç¨å®å
¨é¨åç§°ä½ä¸ºkey |
| | | finalResult[safetyDoorCode] = deviceData; |
| | | if (deviceType == "Platform") |
| | | { |
| | | // å®å
¨é¨è®¾å¤å¤çé»è¾ï¼ä¿æä¸åï¼ |
| | | List<string> PlatformList = new List<string> { "1001", "1002", "2016", "2017", "2018", "2019", "1021", "1061", "1131", "1171" }; |
| | | |
| | | foreach (string Platform in PlatformList) |
| | | { |
| | | var deviceData = new Dictionary<string, int>(); |
| | | |
| | | foreach (var param in deviceParams) |
| | | { |
| | | try |
| | | { |
| | | DeviceProDTO? devicePro = GetSafetyDoorDeviceProDTO( |
| | | conveyorLine, Platform, param.DeviceProParamName, param.DeviceProParamType); |
| | | |
| | | if (devicePro != null) |
| | | { |
| | | int res = ReadCommonConveyorLineData(conveyorLine, devicePro.DeviceProAddress); |
| | | deviceData[param.DeviceProRemark] = res; |
| | | } |
| | | else |
| | | { |
| | | deviceData[param.DeviceProRemark] = -1; |
| | | } |
| | | } |
| | | catch (Exception) |
| | | { |
| | | deviceData[param.DeviceProRemark] = -1; |
| | | } |
| | | } |
| | | |
| | | finalResult[Platform] = deviceData; |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // å³ä½¿è®¾å¤ä¸å卿䏿¯æ¯æçç±»åï¼ä¹å建ä¸ä¸ªç©ºåå
¸ |
| | | finalResult[deviceChildCode] = new Dictionary<string, int>(); |
| | | /*if (device != null) |
| | | { |
| | | Console.WriteLine($"è¦åï¼è®¾å¤ {deviceChildCode} ç±»å {device.GetType().Name} 䏿¯æï¼æ æ³è¯»åæ°æ®"); |
| | | } |
| | | else |
| | | { |
| | | Console.WriteLine($"è¦åï¼è®¾å¤ {deviceChildCode} ä¸åå¨"); |
| | | }*/ |
| | | } |
| | | } |
| | | } |
| | |
| | | "outbound" => $"åºåºçæ§: {(_isOutboundMonitoring ? "è¿è¡ä¸" : "已忢")}", |
| | | "inbound" => $"å
¥åºçæ§: {(_isInboundMonitoring ? "è¿è¡ä¸" : "已忢")}", |
| | | "safetydoor" => $"å®å
¨é¨çæ§: {(_isSafetyDoorMonitoring ? "è¿è¡ä¸" : "已忢")}", |
| | | "all" => $"åºåºçæ§: {(_isOutboundMonitoring ? "è¿è¡ä¸" : "已忢")}, å
¥åºçæ§: {(_isInboundMonitoring ? "è¿è¡ä¸" : "已忢")}, å®å
¨é¨çæ§: {(_isSafetyDoorMonitoring ? "è¿è¡ä¸" : "已忢")}", |
| | | "platform" => $"ç«å°çæ§: {(_isPlatformMonitoring ? "è¿è¡ä¸" : "已忢")}", // ç«å°çæ§ç¶æ |
| | | "all" => $"åºåºçæ§: {(_isOutboundMonitoring ? "è¿è¡ä¸" : "已忢")}, å
¥åºçæ§: {(_isInboundMonitoring ? "è¿è¡ä¸" : "已忢")}, å®å
¨é¨çæ§: {(_isSafetyDoorMonitoring ? "è¿è¡ä¸" : "已忢")}, ç«å°çæ§: {(_isPlatformMonitoring ? "è¿è¡ä¸" : "已忢")}", |
| | | _ => $"åºåºçæ§: {(_isOutboundMonitoring ? "è¿è¡ä¸" : "已忢")}" |
| | | }; |
| | | } |
| | |
| | | "outbound" => "åºåº", |
| | | "inbound" => "å
¥åº", |
| | | "safetydoor" => "å®å
¨é¨", |
| | | "platform" => "ç«å°", // ç«å°æ¾ç¤ºåç§° |
| | | "all" => "å
¨é¨", |
| | | _ => "åºåº" |
| | | }; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 读å设å¤ä¿¡æ¯ |
| | |
| | | return Commonstacker.Communicator.Read<short>(DeviceProDataBlock); |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// æ¥è¯¢å®å
¨é¨è®¾å¤ |
| | | /// </summary> |
| | |
| | | return Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == SCAddress && x.DeviceProParamName == DeviceProParamName && x.DeviceProParamType == DeviceProParamType); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¥è¯¢ç«å°è®¾å¤ |
| | | /// </summary> |
| | | /// <param name="Commonstacker"></param> |
| | | /// <param name="PlatformCode">ç«å°ç¼å·</param> |
| | | /// <param name="DeviceProParamName">åæ°åç§°</param> |
| | | /// <param name="DeviceProParamType">åæ°ç±»å</param> |
| | | /// <returns></returns> |
| | | public static DeviceProDTO? GetPlatformDeviceProDTO(CommonConveyorLine Commonstacker, string PlatformCode, string DeviceProParamName, string DeviceProParamType) |
| | | { |
| | | return Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == PlatformCode && x.DeviceProParamName == DeviceProParamName && x.DeviceProParamType == DeviceProParamType); |
| | | } |
| | | |
| | | //=================================================读å设å¤ä¿¡æ¯========================================================== |
| | | |
| | | |