TaskJobService.cs 53 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085
  1. using IMCS.CCS.Common.Redis;
  2. using IMCS.CCS.DeviceProtocol;
  3. using IMCS.CCS.Entitys;
  4. using IMCS.CCS.Model.vo;
  5. using IMCS.CCS.Services;
  6. using IMCS_CCS.Utils;
  7. using IMCS_CCS.Utils.DeviceProtocol;
  8. using Microsoft.Extensions.Configuration;
  9. using Newtonsoft.Json;
  10. using S7.Net;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Linq;
  14. using System.Threading;
  15. using System.Threading.Tasks;
  16. namespace IMCS.CCS.Service.Impl
  17. {
  18. /// <summary>
  19. /// 任务调度服务
  20. /// </summary>
  21. public class TaskJobService : ITaskJobService
  22. {
  23. private readonly IRedisService _redisService;
  24. private readonly IDeviceService _deviceService;
  25. private readonly IApiRequestService _apiRequestService;
  26. private readonly ITaskCallbackService _taskCallbackService;
  27. private readonly ICcsTagValueService _ccsTagValueService;
  28. private readonly IEquipmentMonitorService _equipmentMonitorService;
  29. private string ecsUrlContext;
  30. private string LOG_TITLE_OPCUA = "OPCUA采集";
  31. private string LOG_TITLE_S7 = "S7采集";
  32. private string LOG_TITLE_CALLBACK = "回调任务";
  33. private string LOG_TITLE_DEVICE = "设备监控";
  34. public IConfiguration Configuration { get; }
  35. public TaskJobService(IRedisService redisService,
  36. ITaskCallbackService taskCallbackService,
  37. IDeviceService deviceService,
  38. IApiRequestService apiRequestService,
  39. ICcsTagValueService ccsTagValueService,
  40. IEquipmentMonitorService equipmentMonitorService,
  41. IConfiguration configuration)
  42. {
  43. _redisService = redisService;
  44. _taskCallbackService = taskCallbackService;
  45. _deviceService = deviceService;
  46. _apiRequestService = apiRequestService;
  47. _ccsTagValueService = ccsTagValueService;
  48. _equipmentMonitorService = equipmentMonitorService;
  49. Configuration = configuration;
  50. ecsUrlContext = Configuration.GetConnectionString("ecsUrlContext");
  51. }
  52. /// <summary>
  53. /// 采集数据OPCUA
  54. /// </summary>
  55. /// <returns></returns>
  56. public async Task<string> DataCollectOPCUAJob()
  57. {
  58. try
  59. {
  60. List<Device> deviceList = _deviceService.GetDeviceList();
  61. deviceList = deviceList.Where(x => x.ProtocolType.Equals(ProtocalTypeEnum.OPCUA.ToString())).ToList();
  62. foreach (Device device in deviceList)
  63. {
  64. List<CcsTagValue> tagValues = new List<CcsTagValue>();
  65. string redis_key = device.Ip + ":" + device.ProtocolType;
  66. var data = await _redisService.Database.StringGetAsync(redis_key);
  67. if (data.IsNullOrEmpty)
  68. {
  69. CcsTagValue tagQuery = new CcsTagValue();
  70. tagQuery.ProtocolType = device.ProtocolType;
  71. tagQuery.Ip = device.Ip;
  72. tagValues = _ccsTagValueService.GetList(tagQuery);
  73. //首次设置redis
  74. if (tagValues != null && tagValues.Count > 0)
  75. {
  76. await _redisService.Database.StringSetAsync(redis_key, JsonConvert.SerializeObject(tagValues));
  77. }
  78. }
  79. else
  80. {
  81. tagValues = JsonConvert.DeserializeObject<List<CcsTagValue>>(data);
  82. }
  83. if (tagValues != null && tagValues.Count > 0)
  84. {
  85. List<CcsTagValue> changTagValues = new List<CcsTagValue>();
  86. DeviceOPCUat deviceOPCUat = new DeviceOPCUat(device.ServerUrl, device.UserName, device.Password);
  87. if (!deviceOPCUat.IsConnection)
  88. {
  89. device.State = false;
  90. await _deviceService.UpdateDevice(device);
  91. Log.Instance.WriteLogAdd("OpcUA采集异常,连不上设备", LOG_TITLE_OPCUA);
  92. return "采集失败,连不上设备";
  93. }
  94. else
  95. {
  96. List<string> addresses = new List<string>();
  97. foreach (CcsTagValue tagValue in tagValues)
  98. {
  99. addresses.Add(tagValue.Address);
  100. }
  101. List<string> values = deviceOPCUat.OpcUa_Read(addresses);
  102. for (int i = 0; i < tagValues.Count; i++)
  103. {
  104. CcsTagValue tagValueData = (CcsTagValue)tagValues[i];
  105. if (!tagValueData.TagValue.Equals(values[i]))
  106. {
  107. tagValueData.TagValue = values[i];
  108. tagValueData.UpdateTime = DateTime.Now;
  109. changTagValues.Add(tagValueData);
  110. Log.Instance.WriteLogAdd("OpcUA采集,Ip:" + tagValueData.Ip + " 地址:" + tagValueData.Address + ",值:" + tagValueData.TagValue + ",发生变化", LOG_TITLE_OPCUA);
  111. //有变化更新数据库
  112. await _ccsTagValueService.Update(tagValueData);
  113. }
  114. }
  115. deviceOPCUat.OpcUa_Close();
  116. //值有变化,重新设置一次redis
  117. if (changTagValues != null && changTagValues.Count > 0)
  118. {
  119. await _redisService.Database.StringSetAsync(redis_key, JsonConvert.SerializeObject(tagValues));
  120. }
  121. }
  122. }
  123. else
  124. {
  125. Log.Instance.WriteLogAdd("OpcUA采集异常,没有采集数据===", LOG_TITLE_OPCUA);
  126. return "没有采集数据";
  127. }
  128. }
  129. return "采集成功";
  130. }
  131. catch (Exception ex)
  132. {
  133. Log.Instance.WriteLogAdd("OpcUA采集异常===>>" + ex.Message, LOG_TITLE_OPCUA);
  134. return "采集失败";
  135. }
  136. }
  137. /// <summary>
  138. /// 采集数据S7
  139. /// </summary>
  140. /// <returns></returns>
  141. public async Task<string> DataCollectS7Job()
  142. {
  143. try
  144. {
  145. List<Device> deviceList = _deviceService.GetDeviceList();
  146. deviceList = deviceList.Where(x => x.ProtocolType.Equals(ProtocalTypeEnum.S7_1500.ToString())).ToList();
  147. foreach (Device device in deviceList)
  148. {
  149. List<CcsTagValue> tagValues = new List<CcsTagValue>();
  150. string redis_key = device.Ip + ":" + device.ProtocolType;
  151. var data = await _redisService.Database.StringGetAsync(redis_key);
  152. if (data.IsNullOrEmpty)
  153. {
  154. CcsTagValue tagQuery = new CcsTagValue();
  155. tagQuery.ProtocolType = device.ProtocolType;
  156. tagQuery.Ip = device.Ip;
  157. tagValues = _ccsTagValueService.GetList(tagQuery);
  158. //首次设置redis
  159. if (tagValues != null && tagValues.Count > 0)
  160. {
  161. await _redisService.Database.StringSetAsync(redis_key, JsonConvert.SerializeObject(tagValues));
  162. }
  163. }
  164. else
  165. {
  166. tagValues = JsonConvert.DeserializeObject<List<CcsTagValue>>(data);
  167. }
  168. if (tagValues != null && tagValues.Count > 0)
  169. {
  170. tagValues = JsonConvert.DeserializeObject<List<CcsTagValue>>(data);
  171. List<CcsTagValue> changTagValues = new List<CcsTagValue>();
  172. Plc s7 = DevicePlcS7.S7(device.ServerUrl, ProtocalTypeEnum.S7_1500.ToString());
  173. if (s7.IsConnected != true)
  174. {
  175. device.State = false;
  176. await _deviceService.UpdateDevice(device);
  177. s7.Close();
  178. Log.Instance.WriteLogAdd("S7采集异常,plc连不上", LOG_TITLE_S7);
  179. return "采集失败,plc连不上";
  180. }
  181. else
  182. {
  183. foreach (CcsTagValue tagValueData in tagValues)
  184. {
  185. string Address = ToolUtils.AddressConvertDBW(tagValueData.Address);
  186. var operateResult = ((ushort)s7.Read(Address)).ConvertToShort();
  187. if (!tagValueData.TagValue.Equals(operateResult))
  188. {
  189. tagValueData.TagValue = operateResult.ToString();
  190. tagValueData.UpdateTime = DateTime.Now;
  191. changTagValues.Add(tagValueData);
  192. Log.Instance.WriteLogAdd("S7采集,Ip:" + tagValueData.Ip + " 地址:" + tagValueData.Address + ",值:" + tagValueData.TagValue + ",发生变化", LOG_TITLE_S7);
  193. //有变化更新数据库
  194. await _ccsTagValueService.Update(tagValueData);
  195. }
  196. Thread.Sleep(50);
  197. }
  198. s7.Close();
  199. //值有变化,重新设置一次redis
  200. if (changTagValues != null && changTagValues.Count > 0)
  201. {
  202. await _redisService.Database.StringSetAsync(redis_key, JsonConvert.SerializeObject(tagValues));
  203. }
  204. }
  205. }
  206. }
  207. return "采集成功";
  208. }
  209. catch (Exception ex)
  210. {
  211. Log.Instance.WriteLogAdd("S7采集异常===>>" + ex.Message, LOG_TITLE_S7);
  212. return "采集失败";
  213. }
  214. }
  215. /// <summary>
  216. /// 采集数据FANUC
  217. /// </summary>
  218. /// <returns></returns>
  219. public async Task<string> DataCollectFanucJob()
  220. {
  221. try
  222. {
  223. List<Device> deviceList = _deviceService.GetDeviceList();
  224. deviceList = deviceList.Where(x => x.ProtocolType.Equals(ProtocalTypeEnum.FANUC.ToString())).ToList();
  225. foreach (Device device in deviceList)
  226. {
  227. List<CcsTagValue> tagValues = new List<CcsTagValue>();
  228. string redis_key = device.Ip + ":" + device.ProtocolType;
  229. var data = await _redisService.Database.StringGetAsync(redis_key);
  230. if (data.IsNullOrEmpty)
  231. {
  232. CcsTagValue tagQuery = new CcsTagValue();
  233. tagQuery.ProtocolType = device.ProtocolType;
  234. tagQuery.Ip = device.Ip;
  235. tagValues = _ccsTagValueService.GetList(tagQuery);
  236. //首次设置redis
  237. if (tagValues != null && tagValues.Count > 0)
  238. {
  239. await _redisService.Database.StringSetAsync(redis_key, JsonConvert.SerializeObject(tagValues));
  240. }
  241. }
  242. else
  243. {
  244. tagValues = JsonConvert.DeserializeObject<List<CcsTagValue>>(data);
  245. }
  246. if (tagValues != null && tagValues.Count > 0)
  247. {
  248. tagValues = JsonConvert.DeserializeObject<List<CcsTagValue>>(data);
  249. List<CcsTagValue> changTagValues = new List<CcsTagValue>();
  250. DeviceFanuc fanuc = new DeviceFanuc(device.Ip, device.Port);
  251. if (fanuc.h <= 0)
  252. {
  253. device.State = false;
  254. await _deviceService.UpdateDevice(device);
  255. Log.Instance.WriteLogAdd("FANUC采集异常,FANUC连不上", LOG_TITLE_S7);
  256. return "采集失败,FANUC连不上";
  257. }
  258. else
  259. {
  260. foreach (CcsTagValue tagValueData in tagValues)
  261. {
  262. string operateResult = GetFanucValue(fanuc, tagValueData.TagValue);
  263. if (!tagValueData.TagValue.Equals(operateResult))
  264. {
  265. tagValueData.TagValue = operateResult.ToString();
  266. tagValueData.UpdateTime = DateTime.Now;
  267. changTagValues.Add(tagValueData);
  268. Log.Instance.WriteLogAdd("FANUC采集,Ip:" + tagValueData.Ip + " 地址:" + tagValueData.Address + ",值:" + tagValueData.TagValue + ",发生变化", LOG_TITLE_S7);
  269. //有变化更新数据库
  270. await _ccsTagValueService.Update(tagValueData);
  271. }
  272. Thread.Sleep(50);
  273. }
  274. //值有变化,重新设置一次redis
  275. if (changTagValues != null && changTagValues.Count > 0)
  276. {
  277. await _redisService.Database.StringSetAsync(redis_key, JsonConvert.SerializeObject(tagValues));
  278. }
  279. }
  280. }
  281. }
  282. return "采集成功";
  283. }
  284. catch (Exception ex)
  285. {
  286. Log.Instance.WriteLogAdd("S7采集异常===>>" + ex.Message, LOG_TITLE_S7);
  287. return "采集失败";
  288. }
  289. }
  290. /// <summary>
  291. /// 上传程序回调任务
  292. /// </summary>
  293. /// <returns></returns>
  294. public async Task<string> CallbackJob1()
  295. {
  296. List<TaskCallback> list = await _taskCallbackService.GetAllList();
  297. list = list.Where(x => x.OperateType.Equals(ActionTypeEnum.UploadFile.ToString())).ToList();
  298. string message = "";
  299. try
  300. {
  301. foreach (TaskCallback task in list)
  302. {
  303. DateTime currentTime = DateTime.Now;
  304. if (currentTime.Subtract(task.CreateTime).TotalSeconds > 5)
  305. {
  306. CallBackRequestData requestData = new CallBackRequestData();
  307. requestData.taskId = long.Parse(task.TaskId);
  308. requestData.taskNodeId = long.Parse(task.TaskNodeId);
  309. var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
  310. if (result.IsSuccess)
  311. {
  312. task.State = false;
  313. task.UpdateTime = DateTime.Now;
  314. await _taskCallbackService.Update(task);
  315. message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + ",请求结果:"+ result.Message + ";";
  316. Log.Instance.WriteLogAdd( message, LOG_TITLE_CALLBACK);
  317. }
  318. else
  319. {
  320. message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
  321. Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
  322. }
  323. }
  324. }
  325. return string.IsNullOrEmpty(message) ? "无回调任务" : message;
  326. }
  327. catch (Exception ex)
  328. {
  329. Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
  330. return "回调异常" + ex.Message;
  331. }
  332. }
  333. /// <summary>
  334. /// 柔性产线,伺服回调任务
  335. /// </summary>
  336. /// <returns></returns>
  337. public async Task<string> CallbackJob2()
  338. {
  339. List<TaskCallback> taskList = await _taskCallbackService.GetAllList();
  340. //在线设备
  341. List<Device> deviceList = _deviceService.GetDeviceList();
  342. taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.GetFlexibleWire.ToString())
  343. || x.OperateType.Equals(ActionTypeEnum.SendFlexibleWire.ToString())
  344. || x.OperateType.Equals(ActionTypeEnum.MoveRobotPosition.ToString())
  345. || x.OperateType.Equals(ActionTypeEnum.GetServoStacker.ToString())
  346. || x.OperateType.Equals(ActionTypeEnum.SendServoStacker.ToString())).ToList();
  347. List<TaskCallback> list = new List<TaskCallback>();
  348. foreach (Device device in deviceList)
  349. {
  350. foreach (TaskCallback task in taskList)
  351. {
  352. if (task.IP.Equals(device.Ip))
  353. {
  354. list.Add(task);
  355. }
  356. }
  357. }
  358. string message = "";
  359. try
  360. {
  361. foreach (TaskCallback task in list)
  362. {
  363. DateTime currentTime = DateTime.Now;
  364. CcsTagValue tagValueQuery = new CcsTagValue();
  365. tagValueQuery.Ip = task.IP;
  366. tagValueQuery.Address = task.Address;
  367. List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery);
  368. CcsTagValue tagValue = null;
  369. if (tagValues != null && tagValues.Count > 0)
  370. {
  371. tagValue = tagValues[0];
  372. }
  373. else
  374. {
  375. message = message + JsonConvert.SerializeObject(task) + ",此节点没配置;";
  376. Log.Instance.WriteLogAdd("回调异常,此节点没配置" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
  377. continue;
  378. }
  379. if (tagValue.TagValue.Equals(task.CallbackValue))
  380. {
  381. CallBackRequestData requestData = new CallBackRequestData();
  382. requestData.taskId = long.Parse(task.TaskId);
  383. requestData.taskNodeId = long.Parse(task.TaskNodeId);
  384. var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
  385. if (result.IsSuccess)
  386. {
  387. task.State = false;
  388. task.UpdateTime = DateTime.Now;
  389. await _taskCallbackService.Update(task);
  390. message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + ",请求结果:" + result.Message + ";";
  391. Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
  392. }
  393. else
  394. {
  395. message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
  396. Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
  397. }
  398. }
  399. else if (!string.IsNullOrEmpty(task.CallbackValue2) && tagValue.TagValue.Equals(task.CallbackValue2))
  400. {
  401. CallBackRequestData requestData = new CallBackRequestData();
  402. requestData.taskId = long.Parse(task.TaskId);
  403. requestData.taskNodeId = long.Parse(task.TaskNodeId);
  404. requestData.code = "0";
  405. requestData.msg = "操作失败";
  406. var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
  407. if (result.IsSuccess)
  408. {
  409. task.State = false;
  410. task.UpdateTime = DateTime.Now;
  411. await _taskCallbackService.Update(task);
  412. message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + message + ",请求结果:" + result.Message + ";";
  413. Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
  414. }
  415. else
  416. {
  417. message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
  418. Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
  419. }
  420. }
  421. else if (!string.IsNullOrEmpty(task.CallbackValue3))
  422. {
  423. CcsTagValue tagValueQuery3 = new CcsTagValue();
  424. tagValueQuery.Ip = task.IP;
  425. tagValueQuery.Address = task.Address3;
  426. List<CcsTagValue> tagValues3 = _ccsTagValueService.GetList(tagValueQuery);
  427. if (tagValues3 != null && tagValues3.Count > 0)
  428. {
  429. CcsTagValue tagValue3 = tagValues3[0];
  430. if (tagValue3.TagValue.Equals(task.CallbackValue3))
  431. {
  432. CallBackRequestData requestData = new CallBackRequestData();
  433. requestData.taskId = long.Parse(task.TaskId);
  434. requestData.taskNodeId = long.Parse(task.TaskNodeId);
  435. requestData.code = "0";
  436. requestData.msg = "操作失败";
  437. var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
  438. if (result.IsSuccess)
  439. {
  440. task.State = false;
  441. task.UpdateTime = DateTime.Now;
  442. await _taskCallbackService.Update(task);
  443. message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + message + ",请求结果:" + result.Message + ";";
  444. Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
  445. }
  446. else
  447. {
  448. message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
  449. Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
  450. }
  451. }
  452. }
  453. }
  454. }
  455. return string.IsNullOrEmpty(message) ? "无回调任务" : message;
  456. }
  457. catch (Exception ex)
  458. {
  459. Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
  460. return "回调异常" + ex.Message;
  461. }
  462. }
  463. /// <summary>
  464. /// 打标机回调任务
  465. /// </summary>
  466. /// <returns></returns>
  467. public async Task<string> CallbackJob3()
  468. {
  469. List<TaskCallback> taskList = await _taskCallbackService.GetAllList();
  470. //在线设备
  471. List<Device> deviceList = _deviceService.GetDeviceList();
  472. taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.StartLabelMachine.ToString())).ToList();
  473. List<TaskCallback> list = new List<TaskCallback>();
  474. foreach (Device device in deviceList)
  475. {
  476. foreach (TaskCallback task in taskList)
  477. {
  478. if (task.IP.Equals(device.Ip))
  479. {
  480. list.Add(task);
  481. }
  482. }
  483. }
  484. string message = "";
  485. try
  486. {
  487. foreach (TaskCallback task in list)
  488. {
  489. DateTime currentTime = DateTime.Now;
  490. CcsTagValue tagValueQuery = new CcsTagValue();
  491. tagValueQuery.Ip = task.IP;
  492. tagValueQuery.Address = task.Address;
  493. List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery);
  494. CcsTagValue tagValueQuery3 = new CcsTagValue();
  495. tagValueQuery3.Ip = task.IP;
  496. tagValueQuery3.Address = task.Address3;
  497. List<CcsTagValue> tagValues3 = _ccsTagValueService.GetList(tagValueQuery3);
  498. CcsTagValue tagValue = null;
  499. CcsTagValue tagValue3 = null;
  500. if (tagValues != null && tagValues.Count > 0 && tagValues3 != null && tagValues3.Count > 0)
  501. {
  502. tagValue = tagValues[0];
  503. tagValue3 = tagValues3[0];
  504. }
  505. else
  506. {
  507. message = message + JsonConvert.SerializeObject(task) + ",此节点没配置;";
  508. Log.Instance.WriteLogAdd("回调异常,此节点没配置" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
  509. continue;
  510. }
  511. if (tagValue.TagValue.Equals(task.CallbackValue))
  512. {
  513. CallBackRequestData requestData = new CallBackRequestData();
  514. requestData.taskId = long.Parse(task.TaskId);
  515. requestData.taskNodeId = long.Parse(task.TaskNodeId);
  516. var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
  517. if (result.IsSuccess)
  518. {
  519. if (!string.IsNullOrEmpty(task.Address3))
  520. {
  521. Plc s7 = DevicePlcS7.S7(task.IP, ProtocalTypeEnum.S7_1500.ToString());
  522. if (s7.IsConnected == true)
  523. {
  524. string Address3 = ToolUtils.AddressConvertDBW(task.Address3);
  525. short mc = 0;
  526. s7.Write(Address3, mc);
  527. s7.Close();
  528. }
  529. }
  530. task.State = false;
  531. task.UpdateTime = DateTime.Now;
  532. await _taskCallbackService.Update(task);
  533. message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + ",请求结果:" + result.Message + ";";
  534. Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
  535. }
  536. else
  537. {
  538. message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
  539. Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
  540. }
  541. }
  542. else if (!string.IsNullOrEmpty(task.CallbackValue2) && tagValue.TagValue.Equals(task.CallbackValue2))
  543. {
  544. CallBackRequestData requestData = new CallBackRequestData();
  545. requestData.taskId = long.Parse(task.TaskId);
  546. requestData.taskNodeId = long.Parse(task.TaskNodeId);
  547. requestData.code = "0";
  548. requestData.msg = "操作失败";
  549. var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
  550. if (result.IsSuccess)
  551. {
  552. task.State = false;
  553. task.UpdateTime = DateTime.Now;
  554. await _taskCallbackService.Update(task);
  555. message = message + result.Message + ";";
  556. Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
  557. }
  558. else
  559. {
  560. message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
  561. Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
  562. }
  563. }
  564. }
  565. return string.IsNullOrEmpty(message) ? "无回调任务" : message;
  566. }
  567. catch (Exception ex)
  568. {
  569. Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
  570. return "回调异常" + ex.Message;
  571. }
  572. }
  573. /// <summary>
  574. /// 启动机床程序,智能单元及质量中心取放回调任务
  575. /// </summary>
  576. /// <returns></returns>
  577. public async Task<string> CallbackJob4()
  578. {
  579. List<TaskCallback> taskList = await _taskCallbackService.GetAllList();
  580. //在线设备
  581. List<Device> deviceList = _deviceService.GetDeviceList();
  582. taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.GetIntelligenceUnit.ToString())
  583. || x.OperateType.Equals(ActionTypeEnum.SendIntelligenceUnit.ToString())
  584. || x.OperateType.Equals(ActionTypeEnum.GetQualityCenter.ToString())
  585. || x.OperateType.Equals(ActionTypeEnum.SendQualityCenter.ToString())
  586. || x.OperateType.Equals(ActionTypeEnum.StartNCProgram.ToString())).ToList();
  587. List<TaskCallback> list = new List<TaskCallback>();
  588. foreach (Device device in deviceList)
  589. {
  590. foreach (TaskCallback task in taskList)
  591. {
  592. if (task.IP.Equals(device.Ip))
  593. {
  594. list.Add(task);
  595. }
  596. }
  597. }
  598. string message = "";
  599. try
  600. {
  601. foreach (TaskCallback task in list)
  602. {
  603. DateTime currentTime = DateTime.Now;
  604. CcsTagValue tagValueQuery = new CcsTagValue();
  605. tagValueQuery.Ip = task.IP;
  606. tagValueQuery.Address = task.Address;
  607. List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery);
  608. CcsTagValue tagValue = null;
  609. if (tagValues != null && tagValues.Count > 0)
  610. {
  611. tagValue = tagValues[0];
  612. }
  613. else
  614. {
  615. message = message + JsonConvert.SerializeObject(task) + ",此节点没配置;";
  616. Log.Instance.WriteLogAdd("回调异常,此节点没配置" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
  617. continue;
  618. }
  619. if (tagValue.TagValue.Equals(task.CallbackValue))
  620. {
  621. CallBackRequestData requestData = new CallBackRequestData();
  622. requestData.taskId = long.Parse(task.TaskId);
  623. requestData.taskNodeId = long.Parse(task.TaskNodeId);
  624. var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
  625. if (result.IsSuccess)
  626. {
  627. task.State = false;
  628. task.UpdateTime = DateTime.Now;
  629. await _taskCallbackService.Update(task);
  630. message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + ",请求结果:" + result.Message + ";";
  631. Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
  632. }
  633. else
  634. {
  635. message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
  636. Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
  637. }
  638. }
  639. }
  640. return string.IsNullOrEmpty(message) ? "无回调任务" : message;
  641. }
  642. catch (Exception ex)
  643. {
  644. Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
  645. return "回调异常" + ex.Message;
  646. }
  647. }
  648. /// <summary>
  649. /// 启动清洗机回调任务
  650. /// </summary>
  651. /// <returns></returns>
  652. public async Task<string> CallbackJob5()
  653. {
  654. List<TaskCallback> taskList = await _taskCallbackService.GetAllList();
  655. //在线设备
  656. List<Device> deviceList = _deviceService.GetDeviceList();
  657. taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.StartCleanMachine.ToString())).ToList();
  658. List<TaskCallback> list = new List<TaskCallback>();
  659. foreach (Device device in deviceList)
  660. {
  661. foreach (TaskCallback task in taskList)
  662. {
  663. if (task.IP.Equals(device.Ip))
  664. {
  665. list.Add(task);
  666. }
  667. }
  668. }
  669. string message = "";
  670. try
  671. {
  672. foreach (TaskCallback task in list)
  673. {
  674. DateTime currentTime = DateTime.Now;
  675. CcsTagValue tagValueQuery = new CcsTagValue();
  676. tagValueQuery.Ip = task.IP;
  677. tagValueQuery.Address = task.Address;
  678. List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery);
  679. CcsTagValue tagValue = null;
  680. if (tagValues != null && tagValues.Count > 0)
  681. {
  682. tagValue = tagValues[0];
  683. }
  684. else
  685. {
  686. message = message + JsonConvert.SerializeObject(task) + ",此节点没配置;";
  687. Log.Instance.WriteLogAdd("回调异常,此节点没配置" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
  688. continue;
  689. }
  690. if (tagValue.TagValue.Equals(task.CallbackValue))
  691. {
  692. CallBackRequestData requestData = new CallBackRequestData();
  693. requestData.taskId = long.Parse(task.TaskId);
  694. requestData.taskNodeId = long.Parse(task.TaskNodeId);
  695. var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
  696. if (result.IsSuccess)
  697. {
  698. task.State = false;
  699. task.UpdateTime = DateTime.Now;
  700. await _taskCallbackService.Update(task);
  701. message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + ",请求结果:" + result.Message + ";";
  702. Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
  703. }
  704. else
  705. {
  706. message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
  707. Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
  708. }
  709. }
  710. }
  711. return string.IsNullOrEmpty(message) ? "无回调任务" : message;
  712. }
  713. catch (Exception ex)
  714. {
  715. Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
  716. return "回调异常" + ex.Message;
  717. }
  718. }
  719. /// <summary>
  720. /// 启动三坐标回调任务
  721. /// </summary>
  722. /// <returns></returns>
  723. public async Task<string> CallbackJob6()
  724. {
  725. List<TaskCallback> taskList = await _taskCallbackService.GetAllList();
  726. //在线设备
  727. List<Device> deviceList = _deviceService.GetDeviceList();
  728. taskList = taskList.Where(x => x.OperateType.Equals(ActionTypeEnum.StartCoordinateMeasuringMachine.ToString())).ToList();
  729. List<TaskCallback> list = new List<TaskCallback>();
  730. foreach (Device device in deviceList)
  731. {
  732. foreach (TaskCallback task in taskList)
  733. {
  734. if (task.IP.Equals(device.Ip))
  735. {
  736. list.Add(task);
  737. }
  738. }
  739. }
  740. string message = "";
  741. try
  742. {
  743. foreach (TaskCallback task in list)
  744. {
  745. DateTime currentTime = DateTime.Now;
  746. CcsTagValue tagValueQuery = new CcsTagValue();
  747. tagValueQuery.Ip = task.IP;
  748. tagValueQuery.Address = task.Address;
  749. List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery);
  750. CcsTagValue tagValue = null;
  751. if (tagValues != null && tagValues.Count > 0)
  752. {
  753. tagValue = tagValues[0];
  754. }
  755. else
  756. {
  757. message = message + JsonConvert.SerializeObject(task) + ",此节点没配置;";
  758. Log.Instance.WriteLogAdd("回调异常,此节点没配置" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
  759. continue;
  760. }
  761. if (tagValue.TagValue.Equals(task.CallbackValue))
  762. {
  763. CallBackRequestData requestData = new CallBackRequestData();
  764. requestData.taskId = long.Parse(task.TaskId);
  765. requestData.taskNodeId = long.Parse(task.TaskNodeId);
  766. var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, ecsUrlContext, requestData, null);
  767. if (result.IsSuccess)
  768. {
  769. task.State = false;
  770. task.UpdateTime = DateTime.Now;
  771. await _taskCallbackService.Update(task);
  772. message = task.OperateName + "==>taskId:" + task.TaskId + ",taskNodeId:" + task.TaskNodeId + ",请求结果:" + result.Message + ";";
  773. Log.Instance.WriteLogAdd(message, LOG_TITLE_CALLBACK);
  774. }
  775. else
  776. {
  777. message = message + JsonConvert.SerializeObject(task) + ",请求失败! WebApi 返回结果" + ";";
  778. Log.Instance.WriteLogAdd("回调异常,请求接口失败" + JsonConvert.SerializeObject(task), LOG_TITLE_CALLBACK);
  779. }
  780. }
  781. }
  782. return string.IsNullOrEmpty(message) ? "无回调任务" : message;
  783. }
  784. catch (Exception ex)
  785. {
  786. Log.Instance.WriteLogAdd("回调异常===>>" + ex.Message, LOG_TITLE_CALLBACK);
  787. return "回调异常" + ex.Message;
  788. }
  789. }
  790. /// <summary>
  791. /// 监控设备状态
  792. /// </summary>
  793. /// <returns></returns>
  794. public async Task<string> MonitorEquipmentStatusJob()
  795. {
  796. try
  797. {
  798. string message = "MonitorEquipmentStatusJob调度成功";
  799. List<Device> devices = _deviceService.GetDeviceList();
  800. //ftp不监控
  801. devices = devices.Where(x => !x.ProtocolType.Equals(ProtocalTypeEnum.FTP.ToString())).ToList();
  802. CcsTagValue tagQuery = new CcsTagValue();
  803. List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagQuery);
  804. List<EquipmentMonitor> equipmentMonitors = await _equipmentMonitorService.GetList();
  805. foreach (EquipmentMonitor equipment in equipmentMonitors)
  806. {
  807. Device device = devices.Where(x => x.Ip.Equals(equipment.IP)).FirstOrDefault();
  808. if(device == null)
  809. {
  810. equipment.Status = "离线";
  811. continue;
  812. }
  813. else
  814. {
  815. if(equipment .Name== "机械手")
  816. {
  817. CcsTagValue ccsTagValue = tagValues.Where(x => x.Ip.Equals(equipment.IP) && x.Address.Equals(equipment.Address)).FirstOrDefault();
  818. if(ccsTagValue != null)
  819. {
  820. if(ccsTagValue.TagValue == "3")
  821. {
  822. equipment.Status = "报警";
  823. continue;
  824. }
  825. }
  826. CcsTagValue ccsTagValue2 = tagValues.Where(x => x.Ip.Equals(equipment.IP) && x.Address.Equals(equipment.Address2)).FirstOrDefault();
  827. if (ccsTagValue2 != null)
  828. {
  829. if (ccsTagValue2.TagValue == "9")
  830. {
  831. equipment.Status = "报警";
  832. continue;
  833. }
  834. }
  835. if (ccsTagValue2.TagValue == "0" || ccsTagValue2.TagValue == "3" || ccsTagValue2.TagValue == "6" || ccsTagValue2.TagValue == "8")
  836. {
  837. equipment.Status = "空闲";
  838. continue;
  839. }
  840. equipment.Status = "生产中";
  841. }
  842. }
  843. _equipmentMonitorService.Update(equipment);
  844. }
  845. return message;
  846. }
  847. catch (Exception ex)
  848. {
  849. Log.Instance.WriteLogAdd("MonitorEquipmentStatusJob:" + ex.Message, LOG_TITLE_DEVICE);
  850. return "MonitorEquipmentStatusJob : " + ex.Message;
  851. }
  852. }
  853. /// <summary>
  854. /// 监控设备状态
  855. /// </summary>
  856. /// <returns></returns>
  857. public async Task<string> DeviceStatusJob()
  858. {
  859. try
  860. {
  861. string message = "";
  862. List<Device> devices = _deviceService.GetDeviceAllList();
  863. //ftp不监控
  864. devices = devices.Where(x => !x.ProtocolType.Equals(ProtocalTypeEnum.FTP.ToString())).ToList();
  865. foreach (Device device in devices)
  866. {
  867. if (device.ProtocolType.Equals(ProtocalTypeEnum.S7_1500.ToString()))
  868. {
  869. try
  870. {
  871. Plc s7 = DevicePlcS7.S7(device.ServerUrl, ProtocalTypeEnum.S7_1500.ToString());
  872. if (s7.IsConnected != true)
  873. {
  874. Device oldDevice = await _deviceService.GetDeviceById(device.Id);
  875. if (oldDevice.State)
  876. {
  877. device.State = false;
  878. await _deviceService.UpdateDevice(device);
  879. }
  880. Log.Instance.WriteLogAdd("plc连接失败,或已离线", LOG_TITLE_DEVICE);
  881. message = message + ",plc连接失败,或已离线,ip:" + device.Ip + ",协议类型:" + device.ProtocolType;
  882. continue;
  883. }
  884. else
  885. {
  886. Device oldDevice = await _deviceService.GetDeviceById(device.Id);
  887. if (!oldDevice.State)
  888. {
  889. device.State = true;
  890. await _deviceService.UpdateDevice(device);
  891. }
  892. s7.Close();
  893. Log.Instance.WriteLogAdd("plc连接失败,或已离线", LOG_TITLE_DEVICE);
  894. message = message + ",plc连接成功,ip:" + device.Ip + ",协议类型:" + device.ProtocolType;
  895. continue;
  896. }
  897. }
  898. catch (Exception s7ex)
  899. {
  900. Device oldDevice = await _deviceService.GetDeviceById(device.Id);
  901. if (oldDevice.State)
  902. {
  903. device.State = false;
  904. await _deviceService.UpdateDevice(device);
  905. }
  906. Log.Instance.WriteLogAdd("plc连接失败,或已离线", LOG_TITLE_DEVICE);
  907. message = message + ",plc连接失败,plc连不上" + s7ex.Message + ",ip:" + device.Ip + ",协议类型:" + device.ProtocolType;
  908. }
  909. }
  910. else if (device.ProtocolType.Equals(ProtocalTypeEnum.OPCUA.ToString()))
  911. {
  912. try
  913. {
  914. DeviceOPCUat deviceOPCUat = new DeviceOPCUat(device.ServerUrl, device.UserName, device.Password);
  915. if (!deviceOPCUat.IsConnection)
  916. {
  917. device.State = false;
  918. Device oldDevice = await _deviceService.GetDeviceById(device.Id);
  919. if (oldDevice.State)
  920. {
  921. await _deviceService.UpdateDevice(device);
  922. }
  923. Log.Instance.WriteLogAdd("OPCUA连接异常,或已离线,ip:" + device.Ip + ",协议类型:" + device.ProtocolType, LOG_TITLE_OPCUA);
  924. message = message + ",OPCUA连接异常,或以离线,ip:" + device.Ip + ",协议类型:" + device.ProtocolType; ;
  925. continue;
  926. }
  927. else
  928. {
  929. device.State = true;
  930. await _deviceService.UpdateDevice(device);
  931. deviceOPCUat.disConnect();
  932. Log.Instance.WriteLogAdd("OPCUA连接成功,ip:" + device.Ip + ",协议类型:" + device.ProtocolType, LOG_TITLE_DEVICE);
  933. continue;
  934. }
  935. }
  936. catch (Exception opcex)
  937. {
  938. Device oldDevice = await _deviceService.GetDeviceById(device.Id);
  939. if (oldDevice.State)
  940. {
  941. device.State = false;
  942. await _deviceService.UpdateDevice(device);
  943. }
  944. Log.Instance.WriteLogAdd("OPCUA连接异常,或以离线" + opcex.Message + ",ip:" + device.Ip + ", 协议类型: " + device.ProtocolType, LOG_TITLE_DEVICE);
  945. continue;
  946. }
  947. }
  948. else if (device.ProtocolType.Equals(ProtocalTypeEnum.FANUC.ToString()))
  949. {
  950. try
  951. {
  952. int ret = Fanuc.cnc_allclibhndl3(device.ServerUrl, Convert.ToUInt16(device.Port), 2, out Fanuc.h);
  953. if (ret != Fanuc.EW_OK)
  954. {
  955. Device oldDevice = await _deviceService.GetDeviceById(device.Id);
  956. if (oldDevice.State)
  957. {
  958. device.State = false;
  959. await _deviceService.UpdateDevice(device);
  960. }
  961. Log.Instance.WriteLogAdd("Fanuc连接异常,或已离线,ip:" + device.Ip + ",协议类型:" + device.ProtocolType, LOG_TITLE_OPCUA);
  962. message = message + ",Fanuc连接异常,或以离线,ip:" + device.Ip + ",协议类型:" + device.ProtocolType; ;
  963. continue;
  964. }
  965. else
  966. {
  967. Device oldDevice = await _deviceService.GetDeviceById(device.Id);
  968. if (!oldDevice.State)
  969. {
  970. device.State = true;
  971. await _deviceService.UpdateDevice(device);
  972. }
  973. Log.Instance.WriteLogAdd("Fanuc连接成功,ip:" + device.Ip + ",协议类型:" + device.ProtocolType, LOG_TITLE_DEVICE);
  974. continue;
  975. }
  976. }
  977. catch (Exception opcex)
  978. {
  979. Device oldDevice = await _deviceService.GetDeviceById(device.Id);
  980. if (oldDevice.State)
  981. {
  982. device.State = false;
  983. await _deviceService.UpdateDevice(device);
  984. }
  985. Log.Instance.WriteLogAdd("Fanuc连接异常,或以离线" + opcex.Message + ",ip:" + device.Ip + ", 协议类型: " + device.ProtocolType, LOG_TITLE_DEVICE);
  986. continue;
  987. }
  988. }
  989. }
  990. return message;
  991. }
  992. catch (Exception ex)
  993. {
  994. Log.Instance.WriteLogAdd("设备连接异常,或以离线" + ex.Message, LOG_TITLE_DEVICE);
  995. return "设备连接异常,或以离线" + ex.Message;
  996. }
  997. }
  998. /// <summary>
  999. /// fanuc根据类型获取值
  1000. /// </summary>
  1001. /// <returns></returns>
  1002. private string GetFanucValue(DeviceFanuc fanuc,string tagValue)
  1003. {
  1004. string value = "";
  1005. if (tagValue.Equals(FanucAddressEnum.MainProg.ToString()))
  1006. {
  1007. value = fanuc.MainProg();
  1008. }else if (tagValue.Equals(FanucAddressEnum.Status.ToString()))
  1009. {
  1010. value = fanuc.Status();
  1011. }
  1012. else if (tagValue.Equals(FanucAddressEnum.PowerOnTime.ToString()))
  1013. {
  1014. value = fanuc.PowerOnTime();
  1015. }
  1016. return value;
  1017. }
  1018. }
  1019. }