| | |
| | | size: this.size |
| | | }; |
| | | // 使ç¨åæºå®æ´æ¥å£ |
| | | this.$u.post(res.data.CZFJiP + '/makerwit/selectKHWareType', null).then(res => { |
| | | this.$u.post(res.data.CZFJiP + '/makerwit/selectKHWareType', null).then(res => { |
| | | console.log(res); |
| | | this.$t.message.closeLoading(); |
| | | cb && cb(); |
| | |
| | | }, |
| | | }); |
| | | }, |
| | | |
| | | |
| | | clickLoadMore(e) { |
| | | this.status = 'loading'; |
| | | this.current += 1; |
| | |
| | | this.$t.message.toast('å¯å«æ°é为0ï¼æ æ³å«ä»»å¡'); |
| | | return; |
| | | } |
| | | let guid = this.generateUUID() |
| | | let formDataParam = { |
| | | dTaskId: this.generateUUID(), |
| | | productCode: productCode, |
| | | orderNo: orderNo, |
| | | taskNo:2, |
| | | number: availableQuantity > 4 ? 4 : availableQuantity, |
| | | inputValue: inputValue, |
| | | DTaskId: this.generateUUID(), |
| | | ProductCode: productCode, |
| | | OrderNo: orderNo, |
| | | Number: availableQuantity > 4 ? 4 : availableQuantity, |
| | | InputValue: inputValue, |
| | | TaskType: "æ£æ" |
| | | dTaskId: guid, |
| | | productCode: productCode, |
| | | orderNo: orderNo, |
| | | taskNo: 2, |
| | | number: availableQuantity > 4 ? 4 : availableQuantity, |
| | | inputValue: inputValue, |
| | | DTaskId: guid, |
| | | ProductCode: productCode, |
| | | OrderNo: orderNo, |
| | | Number: availableQuantity > 4 ? 4 : availableQuantity, |
| | | InputValue: inputValue, |
| | | TaskType: "æ£æ" |
| | | // ...å
¶ä»éè¦ä¼ éçåæ° |
| | | }; |
| | | this.$u.post('/api/PDA/AddCZTask', formDataParam).then(res => { |
| | |
| | | // 使ç¨åæºå®æ´æ¥å£ |
| | | this.$u.post(value.CZZJip + '/makerwit/insertTask', formDataParam).then(res => { |
| | | this.$t.message.closeLoading(); |
| | | if (res.code == 200) { |
| | | if (res.code == 200) { |
| | | this.$t.message.toast('å¼å«æå'); |
| | | this.$refs.popup.close(); |
| | | // this.submit(); |
| | |
| | | size: this.size |
| | | }; |
| | | // 使ç¨åæºå®æ´æ¥å£ |
| | | // this.$u.post('http://192.168.31.240:9090/makerwit/selectKHWareType', null).then(res => { |
| | | // this.$u.post('http://192.168.31.240:9090/makerwit/selectKHWareType', null).then(res => { |
| | | this.$u.post(res.data.CZFJiP + '/makerwit/selectKHWareType', null).then(res => { |
| | | console.log(res); |
| | | this.$t.message.closeLoading(); |
| | |
| | | this.$t.message.toast('å¯å«æ°é为0ï¼æ æ³å«ä»»å¡'); |
| | | return; |
| | | } |
| | | let guid = this.generateUUID() |
| | | let formDataParam = { |
| | | dTaskId: this.generateUUID(), |
| | | dTaskId: guid, |
| | | productCode: productCode, |
| | | orderNo: orderNo, |
| | | taskNo:2, |
| | | taskNo: 2, |
| | | number: availableQuantity > 4 ? 4 : availableQuantity, |
| | | inputValue: inputValue, |
| | | DTaskId: this.generateUUID(), |
| | | DTaskId: guid, |
| | | ProductCode: productCode, |
| | | OrderNo: orderNo, |
| | | Number: availableQuantity > 4 ? 4 : availableQuantity, |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using HslCommunication; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEAWCS_Communicator; |
| | | using WIDESEAWCS_QuartzJob.ConveyorLine.Enum; |
| | | using WIDESEAWCS_QuartzJob.DeviceBase; |
| | | using WIDESEAWCS_QuartzJob.DTO; |
| | | |
| | | namespace WIDESEAWCS_QuartzJob.Elevator |
| | | { |
| | | public class CommonElevator: IElevator |
| | | { |
| | | #region Private Member |
| | | |
| | | /// <summary> |
| | | /// çç¤é讯对象 |
| | | /// </summary> |
| | | private readonly BaseCommunicator _communicator; |
| | | |
| | | /// <summary> |
| | | /// çç¤åè®®ä¿¡æ¯ |
| | | /// </summary> |
| | | private readonly List<DeviceProDTO> _deviceProDTOs; |
| | | |
| | | /// <summary> |
| | | /// çç¤åè®®æç»ä¿¡æ¯ |
| | | /// </summary> |
| | | private readonly List<DeviceProtocolDetailDTO> _deviceProtocolDetailDTOs; |
| | | |
| | | /// <summary> |
| | | /// 设å¤ç¼å· |
| | | /// </summary> |
| | | public readonly string _deviceCode; |
| | | |
| | | /// <summary> |
| | | /// 设å¤åç§° |
| | | /// </summary> |
| | | public readonly string _deviceName; |
| | | |
| | | private bool _heartStatr = true; |
| | | |
| | | private bool _isConnected = true; |
| | | |
| | | #endregion |
| | | |
| | | #region Public Member |
| | | |
| | | /// <summary> |
| | | /// çç¤é讯对象 |
| | | /// </summary> |
| | | public BaseCommunicator Communicator => _communicator; |
| | | |
| | | /// <summary> |
| | | /// çç¤åè®®ä¿¡æ¯ |
| | | /// </summary> |
| | | public List<DeviceProDTO> DeviceProDTOs => _deviceProDTOs; |
| | | |
| | | /// <summary> |
| | | /// çç¤åè®®æç»ä¿¡æ¯ |
| | | /// </summary> |
| | | public List<DeviceProtocolDetailDTO> DeviceProtocolDetailDTOs => _deviceProtocolDetailDTOs; |
| | | |
| | | /// <summary> |
| | | /// 设å¤ç¼å· |
| | | /// </summary> |
| | | public string DeviceCode => _deviceCode; |
| | | |
| | | /// <summary> |
| | | /// 设å¤åç§° |
| | | /// </summary> |
| | | public string DeviceName => _deviceName; |
| | | |
| | | /// <summary> |
| | | /// é讯æ¯å¦å·²è¿æ¥ |
| | | /// </summary> |
| | | public bool IsConnected => Communicator.IsConnected && _isConnected; |
| | | |
| | | #endregion |
| | | |
| | | #region Constructor Function |
| | | |
| | | /// <summary> |
| | | /// æé 彿° |
| | | /// </summary> |
| | | /// <param name="communicator">çç¤é讯对象</param> |
| | | /// <param name="deviceProDTOs">çç¤å议信æ¯</param> |
| | | /// <param name="deviceProtocolDetailDTOs">çç¤åè®®æç»ä¿¡æ¯</param> |
| | | /// <param name="deviceCode">设å¤ç¼å·</param> |
| | | /// <param name="deviceName">设å¤åç§°</param> |
| | | public CommonElevator(BaseCommunicator communicator, List<DeviceProDTO> deviceProDTOs, List<DeviceProtocolDetailDTO> deviceProtocolDetailDTOs, string deviceCode, string deviceName) |
| | | { |
| | | _communicator = communicator; |
| | | _deviceProDTOs = deviceProDTOs; |
| | | _deviceProtocolDetailDTOs = deviceProtocolDetailDTOs; |
| | | _deviceCode = deviceCode; |
| | | _deviceName = deviceName; |
| | | CheckConnect(); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region Private Method |
| | | |
| | | private void CheckConnect() |
| | | { |
| | | Task.Run(() => |
| | | { |
| | | while (_heartStatr) |
| | | { |
| | | try |
| | | { |
| | | DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(); |
| | | if (devicePro == null) |
| | | _isConnected = false; |
| | | else |
| | | Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType); |
| | | _isConnected = true; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _isConnected = false; |
| | | } |
| | | Thread.Sleep(500); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region Public Method |
| | | |
| | | /// <summary> |
| | | /// 读åPLCåè®®å°åçæ°æ® |
| | | /// </summary> |
| | | /// <typeparam name="TEnum">å议信æ¯çæä¸¾å¯¹è±¡ä¿¡æ¯ã</typeparam> |
| | | /// <typeparam name="TResult">è¯»åæ°æ®çç±»å对象信æ¯ã</typeparam> |
| | | /// <param name="value">æä¸¾å¼</param> |
| | | /// <param name="deviceChildCode">设å¤åç¼å·</param> |
| | | /// <returns>读åå°çæ°æ®</returns> |
| | | public TResult GetValue<TEnum, TResult>(TEnum value, string deviceChildCode) where TEnum : Enum |
| | | { |
| | | if (!IsConnected) throw new Exception($"éè®¯è¿æ¥é误ï¼è¯·æ£æ¥ç½ç»"); |
| | | DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == value.ToString() && x.DeviceChildCode == deviceChildCode); |
| | | return devicePro == null ? throw new Exception($"è¯»åæ°æ®é误,æªå¨å议信æ¯é颿¾å°åæ°{value.ToString()}") : (TResult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ä¸è®¾å¤çå¿è·³ |
| | | /// </summary> |
| | | public void Heartbeat() |
| | | { |
| | | throw new NotImplementedException(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | /// <typeparam name="T"></typeparam> |
| | | /// <param name="command"></param> |
| | | /// <param name="deviceChildCode"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public bool SendCommand<T>(T command, string deviceChildCode) where T : IDataTransfer, new() |
| | | { |
| | | if (Communicator is SiemensS7) |
| | | { |
| | | if (!IsConnected) throw new Exception($"éè®¯è¿æ¥é误ï¼è¯·æ£æ¥ç½ç»"); |
| | | DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == deviceChildCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); |
| | | if (devicePro == null) |
| | | { |
| | | return false; |
| | | } |
| | | if (Communicator.WriteCustomer(devicePro.DeviceProAddress, command)) |
| | | { |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | else |
| | | { |
| | | throw new Exception("æä¸æ¯æé¤è¥¿é¨åä¹å¤çPLC"); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 读åPLCæ°æ®ï¼è¿åèªå®ä¹å¯¹è±¡ |
| | | /// </summary> |
| | | /// <typeparam name="T">æ³å</typeparam> |
| | | /// <param name="deviceChildCode">å设å¤ç¼å·</param> |
| | | /// <returns>è¿åèªå®ä¹å¯¹è±¡ææåºå¼å¸¸</returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public T ReadCustomer<T>(string deviceChildCode) where T : IDataTransfer, new() |
| | | { |
| | | if (!IsConnected) throw new Exception($"éè®¯è¿æ¥é误ï¼è¯·æ£æ¥ç½ç»"); |
| | | DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == "ReadDeviceCommand" && x.DeviceChildCode == deviceChildCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); |
| | | |
| | | if (devicePro == null) |
| | | { |
| | | throw new Exception("æªæ¾å°å议信æ¯"); |
| | | } |
| | | else |
| | | { |
| | | return Communicator.ReadCustomer<T>(devicePro.DeviceProAddress); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®åæ°åç§°ã设å¤åç¼å·åå
¥å¯¹åºçæ°æ®ã |
| | | /// </summary> |
| | | /// <typeparam name="TEnum">åæ°åç§°æä¸¾ç±»åã</typeparam> |
| | | /// <typeparam name="TValue">è¦åå
¥çæ°æ®ç±»åã</typeparam> |
| | | /// <param name="enum">åæ°åç§°ã</param> |
| | | /// <param name="value">è¦åå
¥çæ°æ®ã</param> |
| | | /// <param name="deviceChildCode">设å¤åç¼å·å</param> |
| | | /// <returns>è¿ååå
¥æåæå¤±è´¥</returns> |
| | | public bool SetValue<TEnum, TValue>(TEnum @enum, TValue value, string deviceChildCode) |
| | | where TEnum : Enum |
| | | where TValue : notnull |
| | | { |
| | | if (!IsConnected) throw new Exception($"éè®¯è¿æ¥é误ï¼è¯·æ£æ¥ç½ç»"); |
| | | DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == @enum.ToString() && x.DeviceChildCode == deviceChildCode); |
| | | return devicePro == null ? throw new Exception($"åå
¥æ°æ®é误,æªå¨å议信æ¯é颿¾å°åæ°{value.ToString()}") : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¯å¦å ä½ |
| | | /// </summary> |
| | | /// <param name="deviceChildCode">设å¤åç¼å·</param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public bool IsOccupied(string deviceChildCode) |
| | | { |
| | | if (Communicator.IsConnected) |
| | | { |
| | | List<DeviceProDTO> devicePros = _deviceProDTOs.Where(x => x.DeviceProParamType == ConveyorLineStatus.IsOccupied.ToString()).ToList(); |
| | | if (devicePros.Count == 0) |
| | | { |
| | | //todo åè®®ä¿¡æ¯æªè·åå°æ¶æåºå¼å¸¸ |
| | | throw new Exception(); |
| | | } |
| | | for (int i = 0; i < devicePros.Count; i++) |
| | | { |
| | | object readStatus = Communicator.ReadAsObj(devicePros[i].DeviceProAddress, devicePros[i].DeviceDataType); |
| | | //todo åè®®æç»ä¿¡æ¯æªè·åå°æ¶æåºå¼å¸¸ |
| | | DeviceProtocolDetailDTO? deviceProtocolDetail = _deviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePros[i].DeviceProParamName) ?? throw new Exception(); |
| | | deviceProtocolDetail = _deviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePros[i].DeviceProParamType && x.ProtocalDetailValue.Equals(readStatus.ToString())); |
| | | if (deviceProtocolDetail != null) |
| | | { |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | } |
| | | //todo é讯æªè¿æ¥æ¶æåºå¼å¸¸ |
| | | return false; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// éæ¾å¯¹è±¡ |
| | | /// </summary> |
| | | public void Dispose() |
| | | { |
| | | // 设置å¿è·³ç¶æä¸ºfalse |
| | | _heartStatr = false; |
| | | // éæ¾éä¿¡å¨èµæº |
| | | _communicator.Dispose(); |
| | | // åè¯åå¾åæ¶å¨ä¸åè°ç¨ç»ç»å¨ |
| | | GC.SuppressFinalize(this); |
| | | } |
| | | |
| | | #endregion |
| | | } |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using HslCommunication; |
| | | using WIDESEAWCS_Communicator; |
| | | using WIDESEAWCS_QuartzJob.DTO; |
| | | |
| | | namespace WIDESEAWCS_QuartzJob |
| | | { |
| | | public interface IElevator : IDevice |
| | | { |
| | | /// <summary> |
| | | /// é讯对象 |
| | | /// </summary> |
| | | BaseCommunicator Communicator { get; } |
| | | |
| | | /// <summary> |
| | | /// é讯åè®®ä¿¡æ¯ |
| | | /// </summary> |
| | | List<DeviceProDTO> DeviceProDTOs { get; } |
| | | |
| | | /// <summary> |
| | | /// é讯åè®®æç»ä¿¡æ¯ |
| | | /// </summary> |
| | | List<DeviceProtocolDetailDTO> DeviceProtocolDetailDTOs { get; } |
| | | |
| | | /// <summary> |
| | | /// è®¾å¤æ¯å¦å·²è¿æ¥ |
| | | /// </summary> |
| | | bool IsConnected { get; } |
| | | |
| | | /// <summary> |
| | | /// ä¸è®¾å¤çå¿è·³ |
| | | /// </summary> |
| | | void Heartbeat(); |
| | | |
| | | /// <summary> |
| | | /// 读åPLCåè®®å°åçæ°æ® |
| | | /// </summary> |
| | | /// <typeparam name="TEnum">å议信æ¯çæä¸¾å¯¹è±¡ä¿¡æ¯ã</typeparam> |
| | | /// <typeparam name="TResult">è¯»åæ°æ®çç±»å对象信æ¯ã</typeparam> |
| | | /// <param name="value">æä¸¾å¼</param> |
| | | /// <param name="deviceChildCode">设å¤åç¼å·</param> |
| | | /// <returns>读åå°çæ°æ®</returns> |
| | | TResult GetValue<TEnum, TResult>(TEnum value, string deviceChildCode) where TEnum : Enum; |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®åæ°åç§°ã设å¤åç¼å·åå
¥å¯¹åºçæ°æ®ã |
| | | /// </summary> |
| | | /// <typeparam name="TEnum">åæ°åç§°æä¸¾ç±»åã</typeparam> |
| | | /// <typeparam name="TValue">è¦åå
¥çæ°æ®ç±»åã</typeparam> |
| | | /// <param name="enum">åæ°åç§°ã</param> |
| | | /// <param name="value">è¦åå
¥çæ°æ®ã</param> |
| | | /// <param name="deviceChildCode">设å¤åç¼å·å</param> |
| | | /// <returns>è¿ååå
¥æåæå¤±è´¥</returns> |
| | | bool SetValue<TEnum, TValue>(TEnum @enum, TValue value, string deviceChildCode) where TEnum : Enum where TValue : notnull; |
| | | |
| | | /// <summary> |
| | | /// 读åç«å°æ¯å¦è¢«å ç¨ |
| | | /// </summary> |
| | | /// <param name="deviceChildCode">设å¤åç¼å·</param> |
| | | /// <returns></returns> |
| | | bool IsOccupied(string deviceChildCode); |
| | | |
| | | /// <summary> |
| | | /// åéä»»å¡å½ä»¤ |
| | | /// </summary> |
| | | /// <typeparam name="T">ä»»å¡å½ä»¤å¯¹è±¡çç±»åæ³å</typeparam> |
| | | /// <param name="command">ä»»å¡å½ä»¤</param> |
| | | /// <param name="deviceChildCode">设å¤åç¼å·</param> |
| | | /// <returns></returns> |
| | | bool SendCommand<T>(T command, string deviceChildCode) where T : IDataTransfer, new(); |
| | | } |
| | | } |
| | |
| | | #region << ç æ¬ 注 é >> |
| | | |
| | | /*---------------------------------------------------------------- |
| | | * å½å空é´ï¼WIDESEAWCS_QuartzJob |
| | | * å建è
ï¼è¡ç«¥åº |
| | |
| | | * ä¿®æ¹æ¶é´ï¼ |
| | | * çæ¬ï¼V1.0.1 |
| | | * ä¿®æ¹è¯´æï¼ |
| | | * |
| | | * |
| | | *----------------------------------------------------------------*/ |
| | | |
| | | #endregion << ç æ¬ 注 é >> |
| | | |
| | | using HslCommunication; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.ComponentModel; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEAWCS_Communicator; |
| | | using WIDESEAWCS_QuartzJob.ConveyorLine.Enum; |
| | | using WIDESEAWCS_QuartzJob.DeviceBase; |
| | | using WIDESEAWCS_QuartzJob.DTO; |
| | | using WIDESEAWCS_QuartzJob.StackerCrane.Enum; |
| | | |
| | | namespace WIDESEAWCS_QuartzJob |
| | | { |
| | |
| | | public class CommonRoast : IRoast |
| | | { |
| | | #region Private Member |
| | | |
| | | /// <summary> |
| | | /// çç¤é讯对象 |
| | | /// </summary> |
| | |
| | | private bool _heartStatr = true; |
| | | |
| | | private bool _isConnected = true; |
| | | |
| | | #endregion |
| | | |
| | | #region Public Member |
| | | |
| | | /// <summary> |
| | | /// çç¤é讯对象 |
| | | /// </summary> |
| | |
| | | #endregion |
| | | |
| | | #region Constructor Function |
| | | |
| | | /// <summary> |
| | | /// æé 彿° |
| | | /// </summary> |
| | |
| | | _deviceName = deviceName; |
| | | CheckConnect(); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region Private Method |
| | | |
| | | private void CheckConnect() |
| | | { |
| | | Task.Run(() => |
| | |
| | | } |
| | | }); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region Public Method |
| | | |
| | | /// <summary> |
| | | /// 读åPLCåè®®å°åçæ°æ® |
| | | /// </summary> |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// |
| | | /// </summary> |
| | | /// <typeparam name="T"></typeparam> |
| | | /// <param name="command"></param> |
| | |
| | | /// <exception cref="Exception"></exception> |
| | | public bool SendCommand<T>(T command, string deviceChildCode) where T : IDataTransfer, new() |
| | | { |
| | | if(Communicator is SiemensS7) |
| | | if (Communicator is MelsecA1ENetCommunicator) |
| | | { |
| | | if (!IsConnected) throw new Exception($"éè®¯è¿æ¥é误ï¼è¯·æ£æ¥ç½ç»"); |
| | | DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == deviceChildCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); |
| | |
| | | // åè¯åå¾åæ¶å¨ä¸åè°ç¨ç»ç»å¨ |
| | | GC.SuppressFinalize(this); |
| | | } |
| | | |
| | | #endregion |
| | | } |
| | | } |
| | | } |
| | |
| | | #region << ç æ¬ 注 é >> |
| | | |
| | | /*---------------------------------------------------------------- |
| | | * å½å空é´ï¼WIDESEAWCS_QuartzJob |
| | | * å建è
ï¼è¡ç«¥åº |
| | |
| | | * ä¿®æ¹æ¶é´ï¼ |
| | | * çæ¬ï¼V1.0.1 |
| | | * ä¿®æ¹è¯´æï¼ |
| | | * |
| | | * |
| | | *----------------------------------------------------------------*/ |
| | | |
| | | #endregion << ç æ¬ 注 é >> |
| | | |
| | | using HslCommunication; |
| | |
| | | /// </summary> |
| | | public interface IRoast : IDevice |
| | | { |
| | | |
| | | /// <summary> |
| | | /// é讯对象 |
| | | /// </summary> |
| | |
| | | /// <returns></returns> |
| | | bool SendCommand<T>(T command, string deviceChildCode) where T : IDataTransfer, new(); |
| | | } |
| | | } |
| | | } |
| | |
| | | "DBType": "SqlServer", |
| | | //è¿æ¥å符串 |
| | | //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=", |
| | | "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_GanFengLiYeNew;User ID=sa;Password=sa123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_GanFengLiYeNew;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", |
| | | |
| | | //è·¨å |
| | | "Cors": { |
¶Ô±ÈÐÂÎļþ |
| | |
| | | using Quartz; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_QuartzJob; |
| | | using WIDESEAWCS_QuartzJob.Elevator; |
| | | |
| | | namespace WIDESEAWCS_Tasks |
| | | { |
| | | public class ElevatorJob : JobBase, IJob, IDisposable |
| | | { |
| | | public void Dispose() |
| | | { |
| | | GC.SuppressFinalize(this); |
| | | } |
| | | |
| | | public Task Execute(IJobExecutionContext context) |
| | | { |
| | | // ä»ä¸ä¸æä¸è·å JobParams 并转æ¢ä¸º Roast ç±»å |
| | | CommonElevator elevator = (CommonElevator)context.JobDetail.JobDataMap.Get("JobParams"); |
| | | // åå§å AGV åé |
| | | AGV agv = null; |
| | | |
| | | if (elevator == null) |
| | | { |
| | | throw new Exception("æªæ¾å°æåæºè®¾å¤åæ°ã"); |
| | | } |
| | | |
| | | // è¿æ¥ AGV |
| | | // æ ¹æ®è®¾å¤åç§°å³å®æ¯æ£æè¿æ¯è´æ AGV |
| | | List<string> agvNames = new List<string>() { "æ£æAGV", "è´æAGV" }; |
| | | foreach (var agvName in agvNames) |
| | | { |
| | | // ä»åå¨ä¸æ¥æ¾æå®åç§°çè®¾å¤ |
| | | IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceName == agvName); |
| | | if (device != null) |
| | | { |
| | | agv = (AGV)device; |
| | | } |
| | | else |
| | | { |
| | | ConsoleHelper.WriteErrorLine($"æªæ¾å°{agvName}设å¤åæ°ã"); |
| | | continue; |
| | | } |
| | | var elevatorNamesValues = GetDBElevatorNamesValues(agvName); |
| | | var agvNamesValues = GetDBAGVNamesValues(agvName); |
| | | DeviceInteraction(elevator, agv, elevatorNamesValues, agvNamesValues); |
| | | } |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | | |
| | | public static void DeviceInteraction(CommonElevator elevator, AGV agv, List<string> elevatorNames, List<string> agvNames) |
| | | { |
| | | if (agv.DeviceName == "æ£æAGV") |
| | | { |
| | | HandlePositiveAGV(elevator, agv, elevatorNames, agvNames); |
| | | } |
| | | else |
| | | { |
| | | HandleNegativeAGV(elevator, agv, elevatorNames, agvNames); |
| | | } |
| | | } |
| | | |
| | | private static void HandlePositiveAGV(CommonElevator elevator, AGV agv, List<string> elevatorNames, List<string> agvNames) |
| | | { |
| | | // æ£æAGVåªéè¦å¤çåä¸¤ä¸ªä¿¡å· |
| | | var elevatorSignal = elevator.Communicator.Read<byte>(elevatorNames[0], 100); |
| | | var agvSignal = agv.Communicator.Read<byte>(agvNames[1], 100); |
| | | |
| | | agv.Communicator.Write(agvNames[0], elevatorSignal); |
| | | elevator.Communicator.Write(agvNames[1], agvSignal); |
| | | |
| | | ConsoleHelper.WriteInfoLine($"æ£æAGV交äº: åå
¥çµæ¢¯ä¿¡å·[{elevatorSignal}]å°{agvNames[0]}ï¼" + |
| | | $"åå
¥AGVä¿¡å·[{agvSignal}]å°{agvNames[1]}"); |
| | | } |
| | | |
| | | private static void HandleNegativeAGV(CommonElevator elevator, AGV agv, List<string> elevatorNames, List<string> agvNames) |
| | | { |
| | | // å®ä¹ä¿¡å·ç»å¤çï¼èµ·å§ç´¢å¼ï¼æä½ç±»åï¼æ¥å¿æè¿°ï¼ |
| | | var operations = new List<(int startIdx, string type, string desc)> |
| | | { |
| | | (0, "EâA", "åºç¡ä¿¡å·äº¤äº"), |
| | | (2, "AâE", "ç¶æåé¦"), |
| | | (4, "EâA", "设å¤ç¶æåæ¥"), |
| | | (6, "AâE", "任塿令"), |
| | | (8, "EâA", "ä½ç½®ä¿¡æ¯åæ¥"), |
| | | (10, "AâE", "åä¿¡å·åé¦"), |
| | | (11, "AâE", "åä¿¡å·åé¦"), |
| | | (13, "AâE", "åä¿¡å·åé¦"), |
| | | (14, "EâA", "设å¤ç¶æåæ¥"), |
| | | (16, "AâE", "è¿è¡æä»¤"), |
| | | (18, "EâA", "å¤ä¿¡å·åæ¥"), |
| | | (22, "AâE", "ç»æä¿¡å·åé¦") |
| | | }; |
| | | |
| | | foreach (var op in operations) |
| | | { |
| | | ProcessSignalGroup( |
| | | elevator, agv, |
| | | elevatorNames, agvNames, |
| | | op.startIdx, |
| | | op.type, |
| | | op.desc |
| | | ); |
| | | } |
| | | } |
| | | |
| | | private static void ProcessSignalGroup(CommonElevator elevator, AGV agv, List<string> elevatorNames, List<string> agvNames, int startIdx, string operationType, string description) |
| | | { |
| | | const int GROUP_SIZE = 2; // æ¯ç»å¤ç2ä¸ªä¿¡å· |
| | | |
| | | // ç¹æ®å¤çæåå 个信å·ç» |
| | | if (startIdx >= 18) |
| | | { |
| | | HandleSpecialSignals(elevator, agv, elevatorNames, agvNames, startIdx); |
| | | return; |
| | | } |
| | | |
| | | var values = new List<byte[]>(); |
| | | var targets = new List<string>(); |
| | | |
| | | // æ ¹æ®æä½ç±»åå¤çä¿¡å· |
| | | if (operationType == "EâA") |
| | | { |
| | | for (int i = 0; i < GROUP_SIZE; i++) |
| | | { |
| | | int idx = startIdx + i; |
| | | if (idx >= elevatorNames.Count) break; |
| | | |
| | | var value = elevator.Communicator.Read<byte>(elevatorNames[idx], 100); |
| | | agv.Communicator.Write(agvNames[idx], value); |
| | | values.Add(value); |
| | | targets.Add(agvNames[idx]); |
| | | if (description == "åä¿¡å·åé¦") break; |
| | | } |
| | | } |
| | | else if (operationType == "AâE") |
| | | { |
| | | for (int i = 0; i < GROUP_SIZE; i++) |
| | | { |
| | | int idx = startIdx + i; |
| | | if (idx >= agvNames.Count) break; |
| | | |
| | | var value = agv.Communicator.Read<byte>(agvNames[idx], 100); |
| | | elevator.Communicator.Write(elevatorNames[idx], value); |
| | | values.Add(value); |
| | | targets.Add(elevatorNames[idx]); |
| | | if (description == "åä¿¡å·åé¦") break; |
| | | } |
| | | } |
| | | |
| | | // çæå¨ææ¥å¿æè¿° |
| | | var logValues = string.Join("], [", values); |
| | | var logTargets = string.Join("ï¼", targets); |
| | | ConsoleHelper.WriteInfoLine($"è´æAGV交äº({description}): ä¼ è¾ä¿¡å·ç»[{logValues}]å°ç®æ å°å[{logTargets}]"); |
| | | } |
| | | |
| | | private static void HandleSpecialSignals(CommonElevator elevator, AGV agv, |
| | | List<string> elevatorNames, List<string> agvNames, |
| | | int startIdx) |
| | | { |
| | | // å¤ç18-21å·çµæ¢¯ä¿¡å·ï¼4个信å·ï¼ |
| | | var elevatorSignals = Enumerable.Range(18, 4) |
| | | .Select(i => elevator.Communicator.Read<byte>(elevatorNames[i], 100)) |
| | | .ToList(); |
| | | |
| | | for (int i = 0; i < 4; i++) |
| | | { |
| | | agv.Communicator.Write(agvNames[18 + i], elevatorSignals[i]); |
| | | } |
| | | |
| | | // å¤ç22-23å·AGVä¿¡å· |
| | | var agvSignals = Enumerable.Range(22, 2) |
| | | .Select(i => agv.Communicator.Read<byte>(agvNames[i], 100)) |
| | | .ToList(); |
| | | |
| | | for (int i = 0; i < 2; i++) |
| | | { |
| | | elevator.Communicator.Write(elevatorNames[22 + i], agvSignals[i]); |
| | | } |
| | | |
| | | ConsoleHelper.WriteInfoLine($"è´æAGV交äº(ç¹æ®ä¿¡å·ç»): " + |
| | | $"åå
¥çµæ¢¯ä¿¡å·[{string.Join(",", elevatorSignals)}]å°AGVï¼" + |
| | | $"读åAGVä¿¡å·[{string.Join(",", agvSignals)}]å°çµæ¢¯"); |
| | | } |
| | | |
| | | private List<string> GetDBElevatorNamesValues(string deviceName) |
| | | { |
| | | List<string> dbNamesValues = null; |
| | | if (deviceName == "æ£æAGV") |
| | | { |
| | | dbNamesValues = new List<string>() |
| | | { |
| | | "DB1002.1600", |
| | | "DB1002.1700" |
| | | }; |
| | | } |
| | | else |
| | | { |
| | | dbNamesValues = new List<string>() |
| | | { |
| | | "DB1002.0", |
| | | "DB1002.600", |
| | | "DB1002.100", |
| | | "DB1002.700", |
| | | "DB1002.1000", |
| | | "DB1002.1200", |
| | | "DB1002.1100", |
| | | "DB1002.1300", |
| | | "DB1002.1800", |
| | | "DB1002.1200", |
| | | "DB1002.11400", |
| | | "DB1002.1900", |
| | | "DB1002.2100", |
| | | "DB1002.2300", |
| | | "DB1002.2400", |
| | | "DB1002.2600", |
| | | "DB1002.2500", |
| | | "DB1002.2700", |
| | | "DB1002.2000", |
| | | "DB1002.2800", |
| | | "DB1002.3000", |
| | | "DB1002.2200", |
| | | "DB1002.2900", |
| | | "DB1002.3100" |
| | | }; |
| | | } |
| | | return dbNamesValues; |
| | | } |
| | | |
| | | private List<string> GetDBAGVNamesValues(string deviceName) |
| | | { |
| | | List<string> dbNamesValues = null; |
| | | if (deviceName == "æ£æAGV") |
| | | { |
| | | dbNamesValues = new List<string>() |
| | | { |
| | | "DB1002.4000", |
| | | "DB1002.4100" |
| | | }; |
| | | } |
| | | else |
| | | { |
| | | dbNamesValues = new List<string>() |
| | | { |
| | | "DB1002.200", |
| | | "DB1002.600", |
| | | "DB1002.300", |
| | | "DB1002.700", |
| | | "DB1002.1000", |
| | | "DB1002.1400", |
| | | "DB1002.1100", |
| | | "DB1002.1500", |
| | | "DB1002.17800", |
| | | "DB1002.1400", |
| | | "DB1002.2200", |
| | | "DB1002.17900", |
| | | "DB1002.18100", |
| | | "DB1002.18300", |
| | | "DB1002.18400", |
| | | "DB1002.18600", |
| | | "DB1002.18500", |
| | | "DB1002.18700", |
| | | "DB1002.18800", |
| | | "DB1002.19000", |
| | | "DB1002.18200", |
| | | "DB1002.18000", |
| | | "DB1002.18900", |
| | | "DB1002.19100" |
| | | }; |
| | | } |
| | | return dbNamesValues; |
| | | } |
| | | } |
| | | } |