TaskJobService.cs 62 KB

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