HttpRequestService.cs 122 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using System.Threading;
  5. using IMCS.CCS.Entitys;
  6. using IMCS.CCS.Models.vo;
  7. using IMCS.CCS.Models;
  8. using IMCS.CCS.DeviceProtocol;
  9. using System;
  10. using S7.Net;
  11. using IMCS_CCS.Utils;
  12. using Newtonsoft.Json;
  13. using IMCS_CCS.Utils.DeviceProtocol;
  14. using HslCommunication.Profinet.Siemens;
  15. using Microsoft.Extensions.Configuration;
  16. using IMCS.CCS.Service;
  17. using IMCS_CCS.Model.vo;
  18. using FTP;
  19. using HslCommunication;
  20. using System.Text.RegularExpressions;
  21. using System.IO;
  22. using Org.BouncyCastle.Ocsp;
  23. using MySqlX.XDevAPI.Common;
  24. using IMCS_CCS.Service.Impl;
  25. using IMCS_CCS.Service;
  26. using IMCS_CCS.Entitys;
  27. using static Google.Protobuf.Reflection.SourceCodeInfo.Types;
  28. namespace IMCS.CCS.Services
  29. {
  30. public class HttpRequestService : IHttpRequestService
  31. {
  32. private readonly IDeviceService _deviceService;
  33. private readonly ITaskCallbackService _taskCallbackService;
  34. private readonly ICcsActionService _ccsActionService;
  35. private readonly ICcsTagValueService _ccsTagValueService;
  36. private readonly IEquipmentMonitorService _equipmentMonitorService;
  37. private readonly ICcsActionAddressService _ccsActionAddressService;
  38. private readonly ITaskJobService _taskJobService;
  39. private readonly ICcsActionDeviceSourceCheckService _ccsActionDeviceSourceCheckService;
  40. private int SLEEP_TIME = 1000;
  41. string LocalPath = "D:\\PROG";
  42. private string fanucUrlContext;
  43. private string opcuacUrlContext;
  44. private string hdhUrlContext;
  45. private string ecsRootUrlContext;
  46. public IConfiguration Configuration { get; }
  47. private readonly IApiRequestService _apiRequestService;
  48. // 物料装载站
  49. private static Dictionary<string, string> shangLiaoQaingQiu = new Dictionary<string, string>();
  50. private static Dictionary<string, string> xiaLiaoQaingQiu = new Dictionary<string, string>();
  51. private static Dictionary<string, string> shangLiaoZhuangTai = new Dictionary<string, string>();
  52. private static Dictionary<string, string> xiaLiaoZhuangTai = new Dictionary<string, string>();
  53. // 刀具装载站
  54. private static Dictionary<string, string> cutterPutRequest = new Dictionary<string, string>();
  55. private static Dictionary<string, string> cutterTakeRequest = new Dictionary<string, string>();
  56. private static Dictionary<string, string> cutterPutStatus = new Dictionary<string, string>();
  57. private static Dictionary<string, string> cutterTakeStatus = new Dictionary<string, string>();
  58. public HttpRequestService(IDeviceService deviceService, ITaskCallbackService taskCallbackService,
  59. ICcsActionService ccsActionService, ICcsTagValueService ccsTagValueService,
  60. IEquipmentMonitorService equipmentMonitorService, ICcsActionAddressService ccsActionAddressService,
  61. IApiRequestService apiRequestService, ITaskJobService taskJobService, ICcsActionDeviceSourceCheckService ccsActionDeviceSourceCheckService,
  62. IConfiguration configuration)
  63. {
  64. _deviceService = deviceService;
  65. _taskCallbackService = taskCallbackService;
  66. _ccsActionService = ccsActionService;
  67. _ccsTagValueService = ccsTagValueService;
  68. _equipmentMonitorService = equipmentMonitorService;
  69. _ccsActionAddressService = ccsActionAddressService;
  70. _apiRequestService = apiRequestService;
  71. _taskJobService = taskJobService;
  72. _ccsActionDeviceSourceCheckService = ccsActionDeviceSourceCheckService;
  73. Configuration = configuration;
  74. fanucUrlContext = Configuration.GetConnectionString("fanucUrlContext");
  75. opcuacUrlContext = Configuration.GetConnectionString("opcuacUrlContext");
  76. hdhUrlContext = Configuration.GetConnectionString("hdhUrlContext");
  77. ecsRootUrlContext = Configuration.GetConnectionString("ecsRootUrlContext");
  78. if (shangLiaoQaingQiu.Count == 0) {
  79. shangLiaoQaingQiu.Add("LAUP000101", "DB1001.784.1");
  80. shangLiaoQaingQiu.Add("LAUP000102", "DB1001.784.2");
  81. }
  82. if (xiaLiaoQaingQiu.Count == 0) {
  83. xiaLiaoQaingQiu.Add("LAUP000101", "DB1001.782.1");
  84. xiaLiaoQaingQiu.Add("LAUP000102", "DB1001.782.2");
  85. }
  86. if (shangLiaoZhuangTai.Count == 0) {
  87. shangLiaoZhuangTai.Add("LAUP000101", "DB1000.294.1");
  88. shangLiaoZhuangTai.Add("LAUP000102", "DB1000.294.2");
  89. }
  90. if (xiaLiaoZhuangTai.Count == 0) {
  91. xiaLiaoZhuangTai.Add("LAUP000101", "DB1000.296.1");
  92. xiaLiaoZhuangTai.Add("LAUP000102", "DB1000.296.2");
  93. }
  94. if (cutterPutRequest.Count == 0)
  95. {
  96. cutterPutRequest.Add("LAUPT00101", "DB1001.788.1");
  97. cutterPutRequest.Add("LAUPT00102", "DB1001.788.2");
  98. }
  99. if (cutterTakeRequest.Count == 0)
  100. {
  101. cutterTakeRequest.Add("LAUPT00101", "DB1001.786.1");
  102. cutterTakeRequest.Add("LAUPT00102", "DB1001.786.2");
  103. }
  104. if (cutterPutStatus.Count == 0) {
  105. cutterPutStatus.Add("LAUPT00101", "DB1000.322.1");
  106. cutterPutStatus.Add("LAUPT00102", "DB1000.322.2");
  107. }
  108. if (cutterTakeStatus.Count == 0)
  109. {
  110. cutterTakeStatus.Add("LAUPT00101", "DB1000.324.1");
  111. cutterTakeStatus.Add("LAUPT00102", "DB1000.324.2");
  112. }
  113. }
  114. /// <summary>
  115. /// 获取状态当前值
  116. /// </summary>
  117. public string GetTagValue(RequestTagValueData req)
  118. {
  119. CcsTagValue queryParam = new CcsTagValue();
  120. queryParam.Ip = req.ip;
  121. queryParam.Address = req.tagname;
  122. List<CcsTagValue> tagValues = _ccsTagValueService.GetList(queryParam);
  123. string tagValue = "0";
  124. if (tagValues != null && tagValues.Count > 0)
  125. {
  126. tagValue = tagValues[0].TagValue;
  127. }
  128. return tagValue;
  129. }
  130. /// <summary>
  131. /// 益模调用接口,显示3D
  132. /// </summary>
  133. public async Task<List<ResponseDigitalTwinsData>> GetDigitalTwins()
  134. {
  135. List<Device> devices = _deviceService.GetDeviceList();
  136. List<ResponseDigitalTwinsData> list = new List<ResponseDigitalTwinsData>();
  137. String query3dUrl = ecsRootUrlContext + "/api/authority/agv/agvCallbackService/query3dResouceDataInfo";
  138. var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, query3dUrl, new Object(), null);
  139. ResponsePageData<ResponseDigitalTwinsData> responseData = JsonConvert.DeserializeObject<ResponsePageData<ResponseDigitalTwinsData>>(result.Message);
  140. list = responseData.Data;
  141. foreach(ResponseDigitalTwinsData responseDigitalTwinsData in list)
  142. {
  143. EquipmentMonitor equipmentMonitor = await _equipmentMonitorService.GetById(long.Parse(responseDigitalTwinsData.resourceId));
  144. if (equipmentMonitor==null || equipmentMonitor.IP == null)
  145. {
  146. continue;
  147. }
  148. Device device = devices.Where(x => x.Ip.Equals(equipmentMonitor.IP)).FirstOrDefault();
  149. if (null!=device && equipmentMonitor.Type == "HEIDEHAIN")
  150. {
  151. RequestHeidhData hdhReq = new RequestHeidhData();
  152. hdhReq.ServerUrl = device.ServerUrl;
  153. hdhReq.MachineName = device.UserName;
  154. hdhReq.Type = "Collect";
  155. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
  156. if (Result.IsSuccess)
  157. {
  158. ResponseHeidhData retData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  159. if (!string.IsNullOrEmpty(retData.runDatasInfo.Trim()))
  160. {
  161. ResponseDigitalTwinsData twinsData = JsonConvert.DeserializeObject<ResponseDigitalTwinsData>(retData.runDatasInfo);
  162. responseDigitalTwinsData.feedRate = !string.IsNullOrEmpty(twinsData.feedRate)? twinsData.feedRate : "0";
  163. responseDigitalTwinsData.spindleMagnification = !string.IsNullOrEmpty(twinsData.spindleMagnification)? twinsData.spindleMagnification:"0";
  164. responseDigitalTwinsData.spindleSpeed = !string.IsNullOrEmpty(twinsData.spindleSpeed) ? twinsData.spindleSpeed + "00" : "0";
  165. responseDigitalTwinsData.spindleLoad = !string.IsNullOrEmpty(twinsData.spindleLoad) ? twinsData.spindleMagnification : "-";
  166. }
  167. }
  168. }
  169. else if(null != device && equipmentMonitor.Type == "FANUC")
  170. {
  171. string Url = fanucUrlContext + "?ip=" + device.Ip + "&port=" + device.Port;
  172. //调用发那科接口
  173. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Get, Url + "&fun=All", null, null);
  174. if (Result.IsSuccess)
  175. {
  176. ResponseFanucData responseFanucData = JsonConvert.DeserializeObject<ResponseFanucData>(Result.Message);
  177. responseDigitalTwinsData.feedRate = !string.IsNullOrEmpty(responseFanucData.ActFeed)? responseFanucData.ActFeed:"0";
  178. responseDigitalTwinsData.spindleMagnification = !string.IsNullOrEmpty(responseFanucData.SpindleMagnification)? responseFanucData.SpindleMagnification:"0";
  179. responseDigitalTwinsData.spindleSpeed = !string.IsNullOrEmpty(responseFanucData.ActSpindle)? responseFanucData.ActSpindle : "0";
  180. responseDigitalTwinsData.spindleLoad = !string.IsNullOrEmpty(responseFanucData.SpindleLoad)? responseFanucData.SpindleLoad : "-";
  181. }
  182. }
  183. }
  184. return list;
  185. }
  186. /// <summary>
  187. /// 查询设备状态
  188. /// </summary>
  189. public async Task<List<EquipmentMonitor>> GetEquipMent()
  190. {
  191. return await _equipmentMonitorService.GetList();
  192. }
  193. /// <summary>
  194. /// 机器人取放动作
  195. /// </summary>
  196. public async Task<ResponseECSData> RobotAction(RequestData<LocationData> req)
  197. {
  198. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId,"执行成功");
  199. SiemensS7Net s7 = null;
  200. try
  201. {
  202. // 获取所有在线的设备
  203. List<Device> devices = _deviceService.GetDeviceList();
  204. // 比较在线设备是否在其中
  205. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  206. if (device == null)
  207. {
  208. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  209. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  210. responseData.result = "false";
  211. responseData.resultMsg = "设备已离线:"+ req.url;
  212. return responseData;
  213. }
  214. // 根据ip查询设备
  215. CcsAction actionQuery = new CcsAction();
  216. actionQuery.OperateType = ActionTypeEnum.RobotAction.ToString();
  217. actionQuery.Ip = req.url;
  218. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  219. // 进行plc的连接
  220. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  221. OperateResult ConnectionResult = s7.ConnectServer();
  222. if (!ConnectionResult.IsSuccess)
  223. {
  224. s7.ConnectClose();
  225. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  226. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  227. responseData.result = "false";
  228. responseData.resultMsg = ActionTypeEnum.RobotAction + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  229. return responseData;
  230. }
  231. // 检查出发地,目的地比对数据开始====
  232. if (req.data.LocationDevice != null)
  233. { // 判断取料设备是否满足条件
  234. CcsActionDeviceSourceCheck ccsActionDeviceSourceCheck = new CcsActionDeviceSourceCheck();
  235. ccsActionDeviceSourceCheck.Type = CcsActionDeviceSourceCheckTypeEnum.CHECK.ToString();
  236. ccsActionDeviceSourceCheck.ActionId = actionInfo.Id;
  237. ccsActionDeviceSourceCheck.DeviceCode = req.data.LocationDevice;
  238. ccsActionDeviceSourceCheck.DeviceSource = "out";
  239. ResponseECSCallbackData callbackData = _ccsActionDeviceSourceCheckService.checkDataAddress(ccsActionDeviceSourceCheck, s7);
  240. if (!callbackData.isSuccess)
  241. {
  242. s7.ConnectClose();
  243. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "====" + callbackData.msg + "====" + JsonConvert.SerializeObject(req),
  244. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  245. responseData.result = "false";
  246. responseData.resultMsg = callbackData.msg;
  247. return responseData;
  248. }
  249. }
  250. if (req.data.DestLocationDevice != null)
  251. {
  252. CcsActionDeviceSourceCheck ccsActionDeviceSourceCheck = new CcsActionDeviceSourceCheck();
  253. ccsActionDeviceSourceCheck.Type = CcsActionDeviceSourceCheckTypeEnum.CHECK.ToString();
  254. ccsActionDeviceSourceCheck.ActionId = actionInfo.Id;
  255. ccsActionDeviceSourceCheck.DeviceCode = req.data.DestLocationDevice;
  256. ccsActionDeviceSourceCheck.DeviceSource = "in";
  257. ResponseECSCallbackData callbackData = _ccsActionDeviceSourceCheckService.checkDataAddress(ccsActionDeviceSourceCheck, s7);
  258. if (!callbackData.isSuccess)
  259. {
  260. s7.ConnectClose();
  261. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "====" + callbackData.msg + "====" + JsonConvert.SerializeObject(req),
  262. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  263. responseData.result = "false";
  264. responseData.resultMsg = callbackData.msg;
  265. return responseData;
  266. }
  267. }
  268. // 检查出发地,目的地比对数据结束===
  269. //=========================上下料站请求判断 开始======================
  270. // 目标点位是上下料站的判断下料请求是否为true,上料请求为false,
  271. // 如果不是判断上料请求是否为true,
  272. // 是提示状态不对,否则写下料请求状态
  273. // 上料料请求
  274. if (shangLiaoQaingQiu.ContainsKey(req.data.DestLocation)) {
  275. string shangliaoqingqiuDB = shangLiaoQaingQiu[req.data.DestLocation];
  276. string xialiaoqingqiuDB = xiaLiaoQaingQiu[req.data.DestLocation];
  277. string shangliaoyunxuDB = shangLiaoZhuangTai[req.data.DestLocation];
  278. string xialiaoyunxuDB = xiaLiaoZhuangTai[req.data.DestLocation];
  279. string shangliaoqingqiu = s7.ReadBool(shangliaoqingqiuDB).Content.ToString();
  280. string xialiaoqingqiu = s7.ReadBool(xialiaoqingqiuDB).Content.ToString();
  281. string shangliaoyunxu = s7.ReadBool(shangliaoyunxuDB).Content.ToString();
  282. string xialiaoyunxu = s7.ReadBool(xialiaoyunxuDB).Content.ToString();
  283. if (shangliaoqingqiu == "False" && xialiaoqingqiu == "False")
  284. {
  285. s7.Write(shangliaoqingqiuDB, true);
  286. s7.ConnectClose();
  287. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "====已发送上料请求,等待上料允许====" + JsonConvert.SerializeObject(req),
  288. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  289. responseData.result = "false";
  290. responseData.resultMsg = "已发送上料请求,等待上料允许";
  291. return responseData;
  292. }
  293. else if (shangliaoqingqiu == "False" && xialiaoqingqiu == "True")
  294. {
  295. s7.ConnectClose();
  296. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "====状态不对,现在下料请求状态,等待下料任务完成====" + JsonConvert.SerializeObject(req),
  297. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  298. responseData.result = "false";
  299. responseData.resultMsg = "已被下料请求占用,等待下料任务完成";
  300. return responseData;
  301. }
  302. else if (shangliaoqingqiu == "True" && shangliaoyunxu == "False")
  303. {
  304. s7.ConnectClose();
  305. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "====已经发送上料请求,上料允许状态不满足====" + JsonConvert.SerializeObject(req),
  306. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  307. responseData.result = "false";
  308. responseData.resultMsg = "已经发送上料请求,上料允许状态不满";
  309. return responseData;
  310. }
  311. }
  312. // 下料允许
  313. if (xiaLiaoQaingQiu.ContainsKey(req.data.Location))
  314. {
  315. string shangliaoqingqiuDB = shangLiaoQaingQiu[req.data.Location];
  316. string xialiaoqingqiuDB = xiaLiaoQaingQiu[req.data.Location];
  317. string shangliaoyunxuDB = shangLiaoZhuangTai[req.data.Location];
  318. string xialiaoyunxuDB = xiaLiaoZhuangTai[req.data.Location];
  319. string shangliaoqingqiu = s7.ReadBool(shangliaoqingqiuDB).Content.ToString();
  320. string xialiaoqingqiu = s7.ReadBool(xialiaoqingqiuDB).Content.ToString();
  321. string shangliaoyunxu = s7.ReadBool(shangliaoyunxuDB).Content.ToString();
  322. string xialiaoyunxu = s7.ReadBool(xialiaoyunxuDB).Content.ToString();
  323. if (shangliaoqingqiu == "False" && xialiaoqingqiu == "False")
  324. {
  325. s7.Write(xialiaoqingqiuDB, true);
  326. s7.ConnectClose();
  327. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "====已发送下料请求,等待下料允许====" + JsonConvert.SerializeObject(req),
  328. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  329. responseData.result = "false";
  330. responseData.resultMsg = "已发送上料请求,等待上料允许";
  331. return responseData;
  332. }else if (shangliaoqingqiu == "True" && xialiaoqingqiu == "False")
  333. {
  334. s7.ConnectClose();
  335. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "====状态不对,现在上料请求状态,等待上料任务完成====" + JsonConvert.SerializeObject(req),
  336. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  337. responseData.result = "false";
  338. responseData.resultMsg = "已被上料请求占用,等待上料任务完成";
  339. return responseData;
  340. }
  341. else if (xialiaoqingqiu == "True" && xialiaoyunxu == "False") {
  342. s7.ConnectClose();
  343. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "====已经发送下料请求,下料允许状态不满足====" + JsonConvert.SerializeObject(req),
  344. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  345. responseData.result = "false";
  346. responseData.resultMsg = "已经发送下料请求,下料允许状态不满足";
  347. return responseData;
  348. }
  349. }
  350. //=========================上下料站请求判断 结束======================
  351. // 查询需要操作的plc的db块
  352. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  353. actionAddressQuery.ActionId = actionInfo.Id;
  354. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  355. //查询出需要检查的地址列表
  356. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  357. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  358. {
  359. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  360. {
  361. string operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  362. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  363. {
  364. s7.ConnectClose();
  365. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(req),
  366. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  367. responseData.result = "false";
  368. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  369. return responseData;
  370. }
  371. }
  372. }
  373. //查询需要写入地址列表
  374. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  375. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  376. {
  377. if (!string.IsNullOrEmpty(actionAddress.Address))
  378. {
  379. string parValue = "";
  380. // 写入取放点位、需要进行点位拼接
  381. if (actionAddress.Sort == 1)
  382. {
  383. //区域块为七位,点位为三位
  384. //parValue = req.data.LocationArea.PadRight(7,'0')+ req.data.Location.PadLeft(3, '0') + req.data.DestLocationArea.PadRight(7, '0') + req.data.DestLocation.PadLeft(3, '0');
  385. parValue =req.data.Location + req.data.DestLocation;
  386. s7.Write(actionAddress.Address, Convert.ToString(parValue));
  387. }
  388. else if (actionAddress.Sort == 2)
  389. {
  390. // 需要写入启动状态
  391. parValue = actionAddress.Value;
  392. s7.Write(actionAddress.Address, Convert.ToBoolean(parValue));
  393. }
  394. // 同步TagValue数据状态
  395. CcsTagValue tagValueQuery = new CcsTagValue();
  396. tagValueQuery.Ip = req.url;
  397. tagValueQuery.Address = actionAddress.Address;
  398. CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).ToList().FirstOrDefault();
  399. if (tagValue != null)
  400. {
  401. tagValue.TagValue = parValue;
  402. await _ccsTagValueService.Update(tagValue);
  403. }
  404. Thread.Sleep(SLEEP_TIME);
  405. }
  406. }
  407. s7.ConnectClose();
  408. //插入回调
  409. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.RobotAction.ToString(),
  410. EnumHelper.GetDescription(ActionTypeEnum.RobotAction), req.taskId, req.taskNodeId);
  411. taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData);
  412. // 保存数据
  413. await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  414. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.RobotAction) + "取成功===>>" + JsonConvert.SerializeObject(req)
  415. , EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  416. return responseData;
  417. }
  418. catch (Exception ex)
  419. {
  420. // 记录日志
  421. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "取放异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  422. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  423. responseData.resultMsg = ActionTypeEnum.RobotAction + "取放异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
  424. responseData.result = "false";
  425. // 关闭plc连接
  426. if (s7 != null)
  427. {
  428. s7.ConnectClose();
  429. }
  430. return responseData;
  431. }
  432. }
  433. /// <summary>
  434. /// 天轨机器人取放动作
  435. /// </summary>
  436. ///
  437. public async Task<ResponseECSData> CutterRobotAction(RequestData<CutterLocationData> req)
  438. {
  439. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "执行成功");
  440. SiemensS7Net s7 = null;
  441. try
  442. {
  443. // 获取所有在线的设备
  444. List<Device> devices = _deviceService.GetDeviceList();
  445. // 比较在线设备是否在其中
  446. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  447. if (device == null)
  448. {
  449. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  450. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  451. responseData.result = "false";
  452. responseData.resultMsg = "设备已离线:" + req.url;
  453. return responseData;
  454. }
  455. // 根据ip查询设备
  456. CcsAction actionQuery = new CcsAction();
  457. actionQuery.OperateType = ActionTypeEnum.CutterRobotAction.ToString();
  458. actionQuery.Ip = req.url;
  459. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  460. // 进行plc的连接
  461. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  462. OperateResult ConnectionResult = s7.ConnectServer();
  463. if (!ConnectionResult.IsSuccess)
  464. {
  465. s7.ConnectClose();
  466. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  467. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  468. responseData.result = "false";
  469. responseData.resultMsg = ActionTypeEnum.CutterRobotAction + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  470. return responseData;
  471. }
  472. // 检查出发地,目的地比对数据开始====
  473. if (req.data.LocationDevice != null)
  474. { // 判断取料设备是否满足条件
  475. CcsActionDeviceSourceCheck ccsActionDeviceSourceCheck = new CcsActionDeviceSourceCheck();
  476. ccsActionDeviceSourceCheck.Type = CcsActionDeviceSourceCheckTypeEnum.CHECK.ToString();
  477. ccsActionDeviceSourceCheck.ActionId = actionInfo.Id;
  478. ccsActionDeviceSourceCheck.DeviceCode = req.data.LocationDevice;
  479. ccsActionDeviceSourceCheck.DeviceSource = "out";
  480. ResponseECSCallbackData callbackData = _ccsActionDeviceSourceCheckService.checkDataAddress(ccsActionDeviceSourceCheck, s7);
  481. if (!callbackData.isSuccess)
  482. {
  483. s7.ConnectClose();
  484. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====" + callbackData.msg + "====" + JsonConvert.SerializeObject(req),
  485. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  486. responseData.result = "false";
  487. responseData.resultMsg = callbackData.msg;
  488. return responseData;
  489. }
  490. }
  491. if (req.data.DestLocationDevice != null)
  492. {
  493. CcsActionDeviceSourceCheck ccsActionDeviceSourceCheck = new CcsActionDeviceSourceCheck();
  494. ccsActionDeviceSourceCheck.Type = CcsActionDeviceSourceCheckTypeEnum.CHECK.ToString();
  495. ccsActionDeviceSourceCheck.ActionId = actionInfo.Id;
  496. ccsActionDeviceSourceCheck.DeviceCode = req.data.DestLocationDevice;
  497. ccsActionDeviceSourceCheck.DeviceSource = "in";
  498. ResponseECSCallbackData callbackData = _ccsActionDeviceSourceCheckService.checkDataAddress(ccsActionDeviceSourceCheck, s7);
  499. if (!callbackData.isSuccess)
  500. {
  501. s7.ConnectClose();
  502. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====" + callbackData.msg + "====" + JsonConvert.SerializeObject(req),
  503. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  504. responseData.result = "false";
  505. responseData.resultMsg = callbackData.msg;
  506. return responseData;
  507. }
  508. }
  509. // 检查出发地,目的地比对数据结束===
  510. //=========================上下料站请求判断 开始======================
  511. // 目标点位是上下料站的判断下料请求是否为true,上料请求为false,
  512. // 如果不是判断上料请求是否为true,
  513. // 是提示状态不对,否则写下料请求状态
  514. // 上料料请求
  515. if (cutterPutRequest.ContainsKey(req.data.DestLocation))
  516. {
  517. string shangliaoqingqiuDB = cutterPutRequest[req.data.DestLocation];
  518. string xialiaoqingqiuDB = cutterTakeRequest[req.data.DestLocation];
  519. string shangliaoyunxuDB = cutterPutStatus[req.data.DestLocation];
  520. string xialiaoyunxuDB = cutterTakeStatus[req.data.DestLocation];
  521. string shangliaoqingqiu = s7.ReadBool(shangliaoqingqiuDB).Content.ToString();
  522. string xialiaoqingqiu = s7.ReadBool(xialiaoqingqiuDB).Content.ToString();
  523. string shangliaoyunxu = s7.ReadBool(shangliaoyunxuDB).Content.ToString();
  524. string xialiaoyunxu = s7.ReadBool(xialiaoyunxuDB).Content.ToString();
  525. if (shangliaoqingqiu == "False" && xialiaoqingqiu == "False")
  526. {
  527. s7.Write(shangliaoqingqiuDB, true);
  528. s7.ConnectClose();
  529. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====已发送上料请求,等待上料允许====" + JsonConvert.SerializeObject(req),
  530. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  531. responseData.result = "false";
  532. responseData.resultMsg = "已发送上料请求,等待上料允许";
  533. return responseData;
  534. }
  535. else if (shangliaoqingqiu == "False" && xialiaoqingqiu == "True")
  536. {
  537. s7.ConnectClose();
  538. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====状态不对,现在下料请求状态,等待下料任务完成====" + JsonConvert.SerializeObject(req),
  539. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  540. responseData.result = "false";
  541. responseData.resultMsg = "已被下料请求占用,等待下料任务完成";
  542. return responseData;
  543. }
  544. else if (shangliaoqingqiu == "True" && shangliaoyunxu == "False")
  545. {
  546. s7.ConnectClose();
  547. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====已经发送上料请求,上料允许状态不满足====" + JsonConvert.SerializeObject(req),
  548. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  549. responseData.result = "false";
  550. responseData.resultMsg = "已经发送上料请求,上料允许状态不满";
  551. return responseData;
  552. }
  553. }
  554. // 下料允许
  555. if (cutterTakeRequest.ContainsKey(req.data.Location))
  556. {
  557. string shangliaoqingqiuDB = cutterPutRequest[req.data.Location];
  558. string xialiaoqingqiuDB = cutterTakeRequest[req.data.Location];
  559. string shangliaoyunxuDB = cutterPutStatus[req.data.Location];
  560. string xialiaoyunxuDB = cutterTakeStatus[req.data.Location];
  561. string shangliaoqingqiu = s7.ReadBool(shangliaoqingqiuDB).Content.ToString();
  562. string xialiaoqingqiu = s7.ReadBool(xialiaoqingqiuDB).Content.ToString();
  563. string shangliaoyunxu = s7.ReadBool(shangliaoyunxuDB).Content.ToString();
  564. string xialiaoyunxu = s7.ReadBool(xialiaoyunxuDB).Content.ToString();
  565. if (shangliaoqingqiu == "False" && xialiaoqingqiu == "False")
  566. {
  567. s7.Write(xialiaoqingqiuDB, true);
  568. s7.ConnectClose();
  569. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====已发送下料请求,等待下料允许====" + JsonConvert.SerializeObject(req),
  570. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  571. responseData.result = "false";
  572. responseData.resultMsg = "已发送下料请求,等待下料允许";
  573. return responseData;
  574. }
  575. else if (shangliaoqingqiu == "True" && xialiaoqingqiu == "False")
  576. {
  577. s7.ConnectClose();
  578. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====状态不对,现在上料请求状态,等待上料任务完成====" + JsonConvert.SerializeObject(req),
  579. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  580. responseData.result = "false";
  581. responseData.resultMsg = "已被上料请求占用,等待上料任务完成";
  582. return responseData;
  583. }
  584. else if (xialiaoqingqiu == "True" && xialiaoyunxu == "False")
  585. {
  586. s7.ConnectClose();
  587. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====已经发送下料请求,下料允许状态不满足====" + JsonConvert.SerializeObject(req),
  588. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  589. responseData.result = "false";
  590. responseData.resultMsg = "已经发送下料请求,下料允许状态不满足";
  591. return responseData;
  592. }
  593. }
  594. //=========================上下料站请求判断 结束======================
  595. // 查询需要操作的plc的db块
  596. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  597. actionAddressQuery.ActionId = actionInfo.Id;
  598. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  599. //查询出需要检查的地址列表
  600. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  601. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  602. {
  603. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  604. {
  605. string operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  606. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  607. {
  608. s7.ConnectClose();
  609. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(req),
  610. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  611. responseData.result = "false";
  612. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  613. return responseData;
  614. }
  615. }
  616. }
  617. //查询需要写入地址列表
  618. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  619. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  620. {
  621. if (!string.IsNullOrEmpty(actionAddress.Address))
  622. {
  623. string parValue = "";
  624. // 写入取放点位、需要进行点位拼接
  625. if (actionAddress.Sort == 1)
  626. {
  627. //区域块为七位,点位为三位
  628. //parValue = req.data.LocationArea.PadRight(7,'0')+ req.data.Location.PadLeft(3, '0') + req.data.DestLocationArea.PadRight(7, '0') + req.data.DestLocation.PadLeft(3, '0');
  629. parValue = req.data.Location + req.data.DestLocation;
  630. s7.Write(actionAddress.Address, Convert.ToString(parValue));
  631. }
  632. else if (actionAddress.Sort == 2)
  633. {
  634. // 需要写入启动状态
  635. parValue = actionAddress.Value;
  636. s7.Write(actionAddress.Address, Convert.ToBoolean(parValue));
  637. }
  638. else if (actionAddress.Sort == 3)
  639. {
  640. // 写入源刀位号
  641. parValue = req.data.LocationNo;
  642. if (req.data.LocationNo == null || req.data.LocationNo == "") {
  643. parValue = "0";
  644. }
  645. s7.Write(actionAddress.Address, Convert.ToByte(parValue));
  646. }
  647. else if (actionAddress.Sort == 4)
  648. {
  649. // 写入目的刀位号
  650. parValue = req.data.DestLocationNo;
  651. if (req.data.DestLocationNo == null || req.data.DestLocationNo == "")
  652. {
  653. parValue = "0";
  654. }
  655. s7.Write(actionAddress.Address, Convert.ToByte(parValue));
  656. }
  657. // 同步TagValue数据状态
  658. CcsTagValue tagValueQuery = new CcsTagValue();
  659. tagValueQuery.Ip = req.url;
  660. tagValueQuery.Address = actionAddress.Address;
  661. CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).ToList().FirstOrDefault();
  662. if (tagValue != null)
  663. {
  664. tagValue.TagValue = parValue;
  665. await _ccsTagValueService.Update(tagValue);
  666. }
  667. Thread.Sleep(SLEEP_TIME);
  668. }
  669. }
  670. s7.ConnectClose();
  671. //插入回调
  672. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.CutterRobotAction.ToString(),
  673. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction), req.taskId, req.taskNodeId);
  674. taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData);
  675. // 保存数据
  676. await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  677. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction) + "取成功===>>" + JsonConvert.SerializeObject(req)
  678. , EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  679. return responseData;
  680. }
  681. catch (Exception ex)
  682. {
  683. // 记录日志
  684. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "取放异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  685. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  686. responseData.resultMsg = ActionTypeEnum.CutterRobotAction + "取放异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
  687. responseData.result = "false";
  688. // 关闭plc连接
  689. if (s7 != null)
  690. {
  691. s7.ConnectClose();
  692. }
  693. return responseData;
  694. }
  695. }
  696. /// <summary>
  697. /// CNC刀具库请求上下料动作
  698. /// </summary>
  699. /// <param name="req"></param>
  700. /// <returns></returns>
  701. public async Task<ResponseECSData> CutterDeviceTakeOrPutRequest(RequestData<CutterLocationData> req)
  702. {
  703. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "执行成功");
  704. SiemensS7Net s7 = null;
  705. try
  706. {
  707. // 获取所有在线的设备
  708. List<Device> devices = _deviceService.GetDeviceList();
  709. // 比较在线设备是否在其中
  710. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  711. if (device == null)
  712. {
  713. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterCncDeviceAction + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  714. EnumHelper.GetDescription(ActionTypeEnum.CutterCncDeviceAction));
  715. responseData.result = "false";
  716. responseData.resultMsg = "设备已离线:" + req.url;
  717. return responseData;
  718. }
  719. // 根据ip查询设备
  720. CcsAction actionQuery = new CcsAction();
  721. actionQuery.OperateType = ActionTypeEnum.CutterCncDeviceAction.ToString();
  722. actionQuery.Ip = req.url;
  723. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  724. // 进行plc的连接
  725. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  726. OperateResult ConnectionResult = s7.ConnectServer();
  727. if (!ConnectionResult.IsSuccess)
  728. {
  729. s7.ConnectClose();
  730. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterCncDeviceAction + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  731. EnumHelper.GetDescription(ActionTypeEnum.CutterCncDeviceAction));
  732. responseData.result = "false";
  733. responseData.resultMsg = ActionTypeEnum.CutterCncDeviceAction + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  734. return responseData;
  735. }
  736. // 查询需要操作的plc的db块
  737. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  738. actionAddressQuery.ActionId = actionInfo.Id;
  739. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  740. //查询出需要检查的地址列表
  741. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  742. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  743. {
  744. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  745. {
  746. string operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  747. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  748. {
  749. s7.ConnectClose();
  750. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterCncDeviceAction + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(req),
  751. EnumHelper.GetDescription(ActionTypeEnum.CutterCncDeviceAction));
  752. responseData.result = "false";
  753. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  754. return responseData;
  755. }
  756. }
  757. }
  758. //查询需要写入地址列表
  759. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  760. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  761. {
  762. if (!string.IsNullOrEmpty(actionAddress.Address))
  763. {
  764. string parValue = "";
  765. // 写入取放点位、需要进行点位拼接
  766. if (actionAddress.Sort == 1)
  767. {
  768. string before = "EMPTY00000";
  769. if (req.data.Location != null && req.data.Location.Length>0) {
  770. before = "ATC00" + req.data.LocationNo + req.data.Location.Substring(7, 3);
  771. }
  772. string theTail = "EMPTY00000";
  773. if (req.data.DestLocation != null && req.data.DestLocation.Length>0) {
  774. theTail = "ATC00" + req.data.DestLocationNo + req.data.DestLocation.Substring(7, 3);
  775. }
  776. parValue = before + theTail;
  777. s7.Write(actionAddress.Address, Convert.ToString(parValue));
  778. }
  779. else if (actionAddress.Sort == 2)
  780. {
  781. // 需要写入启动状态
  782. parValue = actionAddress.Value;
  783. s7.Write(actionAddress.Address, Convert.ToBoolean(parValue));
  784. }
  785. // 同步TagValue数据状态
  786. CcsTagValue tagValueQuery = new CcsTagValue();
  787. tagValueQuery.Ip = req.url;
  788. tagValueQuery.Address = actionAddress.Address;
  789. CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).ToList().FirstOrDefault();
  790. if (tagValue != null)
  791. {
  792. tagValue.TagValue = parValue;
  793. await _ccsTagValueService.Update(tagValue);
  794. }
  795. Thread.Sleep(SLEEP_TIME);
  796. }
  797. }
  798. s7.ConnectClose();
  799. return responseData;
  800. }
  801. catch (Exception ex)
  802. {
  803. // 记录日志
  804. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterCncDeviceAction + "取放异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  805. EnumHelper.GetDescription(ActionTypeEnum.CutterCncDeviceAction));
  806. responseData.resultMsg = ActionTypeEnum.CutterCncDeviceAction + "取放异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
  807. responseData.result = "false";
  808. // 关闭plc连接
  809. if (s7 != null)
  810. {
  811. s7.ConnectClose();
  812. }
  813. return responseData;
  814. }
  815. }
  816. /// <summary>
  817. /// 上传文件
  818. /// </summary>
  819. public async Task<ResponseECSData> UploadFile(RequestData<UploadFileData> req)
  820. {
  821. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  822. try
  823. {
  824. List<Device> devices = _deviceService.GetDeviceList();
  825. Device deviceFtp = devices.Where(x => x.Ip.Equals(req.url)
  826. && x.ProtocolType.Equals(ProtocalTypeEnum.FTP.ToString())).FirstOrDefault();
  827. Device deviceOpcUa = devices.Where(x => x.Ip.Equals(req.url)
  828. && x.ProtocolType.Equals(ProtocalTypeEnum.OPCUA.ToString())).FirstOrDefault();
  829. Device deviceHeidenhain = devices.Where(x => x.Ip.Equals(req.url)
  830. && x.ProtocolType.Equals(ProtocalTypeEnum.HEIDEHAIN.ToString())).FirstOrDefault();
  831. if (deviceOpcUa == null && deviceHeidenhain == null)
  832. {
  833. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  834. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  835. responseData.result = "false";
  836. responseData.resultMsg = ActionTypeEnum.UploadFile + "设备已离线===>>" + JsonConvert.SerializeObject(req);
  837. return responseData;
  838. }
  839. //西门子系统上传
  840. if (deviceOpcUa != null)
  841. {
  842. RequestOpcUaData opcUaReq = new RequestOpcUaData();
  843. opcUaReq.ServerUrl = deviceOpcUa.ServerUrl;
  844. opcUaReq.UserName = deviceOpcUa.UserName;
  845. opcUaReq.Password = deviceOpcUa.Password;
  846. opcUaReq.Path = req.data.fileName;
  847. opcUaReq.Type = OpcUaActionTypeEnum.Upload.ToString();
  848. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, opcuacUrlContext, opcUaReq, null);
  849. ResponseOpcUaData responseOpcUaData = JsonConvert.DeserializeObject<ResponseOpcUaData>(Result.Message);
  850. if (!Result.IsSuccess || !responseOpcUaData.result)
  851. {
  852. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常===>>" + JsonConvert.SerializeObject(req),
  853. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  854. responseData.result = "false";
  855. responseData.resultMsg = Result.Message;
  856. return responseData;
  857. }
  858. }
  859. else if(deviceHeidenhain != null)
  860. {
  861. RequestHeidhData hdhReq = new RequestHeidhData();
  862. hdhReq.ServerUrl = deviceHeidenhain.ServerUrl;
  863. hdhReq.MachineName = deviceHeidenhain.UserName;
  864. hdhReq.Path = req.data.fileName;
  865. hdhReq.Type = OpcUaActionTypeEnum.Upload.ToString();
  866. //远程机床相对路径
  867. hdhReq.Address = req.data.remotePath;
  868. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
  869. ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  870. if (!Result.IsSuccess || !responseHeidhData.result)
  871. {
  872. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "预上传异常===>>" + JsonConvert.SerializeObject(req),
  873. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  874. responseData.result = "false";
  875. responseData.resultMsg = responseHeidhData.msg;
  876. return responseData;
  877. }
  878. }
  879. //插入回调
  880. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.UploadFile.ToString(),
  881. EnumHelper.GetDescription(ActionTypeEnum.UploadFile), req.taskId, req.taskNodeId);
  882. await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  883. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传成功===>>" + JsonConvert.SerializeObject(req),
  884. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  885. return responseData;
  886. }
  887. catch (Exception ex)
  888. {
  889. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  890. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  891. responseData.resultMsg = ActionTypeEnum.UploadFile + "上传异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
  892. responseData.result = "false";
  893. return responseData;
  894. }
  895. }
  896. /// <summary>
  897. /// 启动机床程序
  898. /// </summary>
  899. public async Task<ResponseECSData> StartNCProgram(RequestData<StartNCProgramData> req)
  900. {
  901. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  902. try
  903. {
  904. List<Device> devices = _deviceService.GetDeviceList();
  905. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  906. if (device == null)
  907. {
  908. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  909. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  910. responseData.result = "false";
  911. responseData.resultMsg = ActionTypeEnum.StartNCProgram + "设备已离线===>>" + JsonConvert.SerializeObject(req);
  912. return responseData;
  913. }
  914. CcsAction actionQuery = new CcsAction();
  915. actionQuery.OperateType = ActionTypeEnum.StartNCProgram.ToString();
  916. actionQuery.Ip = req.url;
  917. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  918. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  919. actionAddressQuery.ActionId = actionInfo.Id;
  920. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  921. //opcua启动程序
  922. if (actionInfo.ProtocolType == ProtocalTypeEnum.OPCUA.ToString())
  923. {
  924. //插入回调
  925. //获取启动前放的 工位
  926. TaskCallback queryTaskCallBack = new TaskCallback();
  927. queryTaskCallBack.IP = actionInfo.PlcIp;
  928. queryTaskCallBack.Description = ProtocalTypeEnum.OPCUA.ToString();
  929. TaskCallback TaskBean = await _taskCallbackService.GetRobotActionList(queryTaskCallBack);
  930. TaskCallback taskCallbackData = new TaskCallback(actionInfo.PlcIp, ActionTypeEnum.StartNCProgram.ToString(),
  931. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram), req.taskId, req.taskNodeId);
  932. taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData);
  933. taskCallbackData.Description = ProtocalTypeEnum.OPCUA.ToString();
  934. if(TaskBean != null)
  935. {
  936. taskCallbackData.Data = TaskBean.Data;
  937. }
  938. else
  939. {
  940. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "失败,上一放动作 没有工位信息===>>" + JsonConvert.SerializeObject(req),
  941. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  942. return responseData;
  943. }
  944. await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  945. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req),
  946. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  947. return responseData;
  948. } else if (actionInfo.ProtocolType == ProtocalTypeEnum.HEIDEHAIN.ToString())
  949. {
  950. //调用机器人plc启动海德汉程序
  951. //SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.PlcIp);
  952. //OperateResult ConnectionResult = s7.ConnectServer();
  953. //if (!ConnectionResult.IsSuccess)
  954. //{
  955. // s7.ConnectClose();
  956. // Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  957. // EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  958. // responseData.result = "false";
  959. // return responseData;
  960. //}
  961. ////查询条件
  962. //List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  963. //foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  964. //{
  965. // if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  966. // {
  967. // string operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  968. // if (actionAddress.CheckType ? operateResult.Equals(actionAddress.Value) : operateResult != actionAddress.Value)
  969. // {
  970. // s7.ConnectClose();
  971. // Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
  972. // EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  973. // responseData.result = "false";
  974. // return responseData;
  975. // }
  976. // }
  977. //}
  978. //s7.ConnectClose();
  979. RequestHeidhData hdhReq = new RequestHeidhData();
  980. hdhReq.ServerUrl = device.ServerUrl;
  981. hdhReq.MachineName = device.UserName;
  982. hdhReq.Path = req.data.remotePath;
  983. hdhReq.Type = OpcUaActionTypeEnum.StartNcProgram.ToString();
  984. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动参数===>>" + JsonConvert.SerializeObject(hdhReq),
  985. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  986. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
  987. ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  988. if (!Result.IsSuccess || !responseHeidhData.result)
  989. {
  990. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req),
  991. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  992. responseData.result = "false";
  993. responseData.resultMsg = responseHeidhData.msg;
  994. responseData.resultMsg = ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req);
  995. return responseData;
  996. }
  997. //插入回调
  998. TaskCallback taskCallbackData = new TaskCallback(actionInfo.PlcIp, ActionTypeEnum.StartNCProgram.ToString(),
  999. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram), req.taskId, req.taskNodeId);
  1000. await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
  1001. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req),
  1002. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  1003. return responseData;
  1004. }
  1005. else
  1006. {
  1007. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req),
  1008. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  1009. responseData.result = "false";
  1010. responseData.resultMsg = ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req);
  1011. return responseData;
  1012. }
  1013. }
  1014. catch (Exception ex)
  1015. {
  1016. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "程序异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1017. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  1018. responseData.result = "false";
  1019. return responseData;
  1020. }
  1021. }
  1022. /// <summary>
  1023. /// 启动清洗机
  1024. /// </summary>
  1025. public async Task<ResponseECSData> StartCleanMachine(RequestData<object> req)
  1026. {
  1027. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1028. try
  1029. {
  1030. List<Device> devices = _deviceService.GetDeviceList();
  1031. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  1032. if (device == null)
  1033. {
  1034. Log.Instance.WriteLogAdd(ActionTypeEnum.StartCleanMachine + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1035. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  1036. responseData.result = "false";
  1037. responseData.resultMsg= ActionTypeEnum.StartCleanMachine + "设备已离线===>>" + JsonConvert.SerializeObject(req);
  1038. return responseData;
  1039. }
  1040. CcsAction actionQuery = new CcsAction();
  1041. actionQuery.OperateType = ActionTypeEnum.StartCleanMachine.ToString();
  1042. actionQuery.Ip = req.url;
  1043. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1044. SiemensS7Net s7 = DevicePlcS7.SiemensS7(req.url);
  1045. HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
  1046. if (!ConnectionResult.IsSuccess)
  1047. {
  1048. s7.ConnectClose();
  1049. Log.Instance.WriteLogAdd(ActionTypeEnum.StartCleanMachine + "启动故障===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1050. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  1051. responseData.result = "false";
  1052. return responseData;
  1053. }
  1054. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1055. actionAddressQuery.ActionId = actionInfo.Id;
  1056. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1057. s7.ConnectClose();
  1058. //插入回调
  1059. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.StartCleanMachine.ToString(),
  1060. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine), req.taskId, req.taskNodeId);
  1061. await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
  1062. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine) + "启动成功===>>" + JsonConvert.SerializeObject(req)
  1063. , EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  1064. return responseData;
  1065. }
  1066. catch (Exception ex)
  1067. {
  1068. Log.Instance.WriteLogAdd(ActionTypeEnum.StartCleanMachine + "启动故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1069. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  1070. responseData.result = "false";
  1071. return responseData;
  1072. }
  1073. }
  1074. /// <summary>
  1075. /// 启动吹干
  1076. /// </summary>
  1077. public async Task<ResponseECSData> StartDryMachine(RequestData<object> req)
  1078. {
  1079. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1080. try
  1081. {
  1082. List<Device> devices = _deviceService.GetDeviceList();
  1083. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  1084. if (device == null)
  1085. {
  1086. Log.Instance.WriteLogAdd(ActionTypeEnum.StartDryMachine + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1087. EnumHelper.GetDescription(ActionTypeEnum.StartDryMachine));
  1088. responseData.result = "false";
  1089. return responseData;
  1090. }
  1091. CcsAction actionQuery = new CcsAction();
  1092. actionQuery.OperateType = ActionTypeEnum.StartDryMachine.ToString();
  1093. actionQuery.Ip = req.url;
  1094. CcsAction action = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1095. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1096. actionAddressQuery.ActionId = action.Id;
  1097. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1098. SiemensS7Net s7 = DevicePlcS7.SiemensS7(req.url);
  1099. HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
  1100. if (!ConnectionResult.IsSuccess)
  1101. {
  1102. s7.ConnectClose();
  1103. Log.Instance.WriteLogAdd(ActionTypeEnum.StartDryMachine + "启动吹干机异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1104. EnumHelper.GetDescription(ActionTypeEnum.StartDryMachine));
  1105. responseData.result = "false";
  1106. return responseData;
  1107. }
  1108. s7.ConnectClose();
  1109. //插入回调
  1110. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.StartDryMachine.ToString(),
  1111. EnumHelper.GetDescription(ActionTypeEnum.StartDryMachine), req.taskId, req.taskNodeId);
  1112. await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
  1113. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.StartDryMachine) + "启动吹干机成功===>>" + JsonConvert.SerializeObject(req)
  1114. , EnumHelper.GetDescription(ActionTypeEnum.StartDryMachine));
  1115. return responseData;
  1116. }
  1117. catch (Exception ex)
  1118. {
  1119. Log.Instance.WriteLogAdd(ActionTypeEnum.StartDryMachine + "启动吹干机故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1120. EnumHelper.GetDescription(ActionTypeEnum.StartDryMachine));
  1121. responseData.result = "false";
  1122. return responseData;
  1123. }
  1124. }
  1125. /// <summary>
  1126. /// 刀具接口列表
  1127. /// </summary>
  1128. public async Task<List<ResponseToolData>> GetTools(RequestToolData req)
  1129. {
  1130. List<Device> devices = _deviceService.GetDeviceList();
  1131. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  1132. List<ResponseToolData> list = new List<ResponseToolData>();
  1133. if (device.ProtocolType == ProtocalTypeEnum.OPCUA.ToString())
  1134. {
  1135. CcsTagValue tagValueQuery = new CcsTagValue();
  1136. tagValueQuery.Ip = req.url;
  1137. tagValueQuery.Component = "刀具";
  1138. List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery);
  1139. List<CcsTagValue> toolNumberList = tagValues.GroupBy(x => x.ComponentNumber)
  1140. .Select(group => new CcsTagValue
  1141. {
  1142. ComponentNumber = group.Key
  1143. }).ToList();
  1144. foreach (CcsTagValue toolNumber in toolNumberList)
  1145. {
  1146. ResponseToolData toolData = new ResponseToolData();
  1147. foreach (CcsTagValue tagValue in tagValues)
  1148. {
  1149. if (toolNumber.ComponentNumber == tagValue.ComponentNumber)
  1150. {
  1151. toolData.number = toolNumber.ComponentNumber;
  1152. if (tagValue.Description == "刀具寿命预警")
  1153. {
  1154. toolData.warnLife = tagValue.TagValue;
  1155. }
  1156. else if (tagValue.Description == "刀具寿命目标值")
  1157. {
  1158. toolData.targetLife = tagValue.TagValue;
  1159. }
  1160. else if (tagValue.Description == "工件数")
  1161. {
  1162. toolData.workPiece = tagValue.TagValue;
  1163. }
  1164. else if (tagValue.Description == "工件数预警值")
  1165. {
  1166. toolData.workPieceWarn = tagValue.TagValue;
  1167. }
  1168. else if (tagValue.Description == "工件数目标值")
  1169. {
  1170. toolData.workPieceTarget = tagValue.TagValue;
  1171. }
  1172. else if (tagValue.Description == "磨损量")
  1173. {
  1174. toolData.wear = tagValue.TagValue;
  1175. }
  1176. else if (tagValue.Description == "磨损量预警值")
  1177. {
  1178. toolData.wearWarn = tagValue.TagValue;
  1179. }
  1180. else if (tagValue.Description == "磨损量目标值")
  1181. {
  1182. toolData.wearTarget = tagValue.TagValue;
  1183. }
  1184. else if (tagValue.Description == "刀具名称")
  1185. {
  1186. toolData.name = tagValue.TagValue;
  1187. }
  1188. }
  1189. }
  1190. list.Add(toolData);
  1191. }
  1192. }
  1193. else if (device.ProtocolType == ProtocalTypeEnum.FANUC.ToString())
  1194. {
  1195. string Url = fanucUrlContext + "?ip=" + device.Ip + "&port=" + device.Port;
  1196. //调用发那科接口
  1197. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Get, Url + "&fun=ToolList", null, null);
  1198. if (Result.IsSuccess)
  1199. {
  1200. List<ResponseToolData> responseFanucData = JsonConvert.DeserializeObject<List<ResponseToolData>>(Result.Message);
  1201. //list = JsonConvert.DeserializeObject<List<ResponseToolData>>(Result.Message.ToolLife);
  1202. //list = JsonConvert.DeserializeObject<List<ResponseToolData>>(responseFanucData.ToolLife);
  1203. list = responseFanucData;
  1204. }
  1205. }else if(device.ProtocolType == ProtocalTypeEnum.HEIDEHAIN.ToString())
  1206. {
  1207. RequestHeidhData hdhReq = new RequestHeidhData();
  1208. hdhReq.ServerUrl = device.ServerUrl;
  1209. hdhReq.MachineName = device.UserName;
  1210. hdhReq.Type = "ToolList";
  1211. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
  1212. if (Result.IsSuccess)
  1213. {
  1214. ResponseHeidhData responseData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  1215. list = JsonConvert.DeserializeObject<List<ResponseToolData>>(responseData.toolsInfo);
  1216. }
  1217. }
  1218. return list;
  1219. }
  1220. /// <summary>
  1221. /// 设备上线离线
  1222. /// </summary>
  1223. public async Task<ResponseCommonData> UpdateDeviceState(RequestDeviceUpdateData req)
  1224. {
  1225. ResponseCommonData responseData = new ResponseCommonData();
  1226. List<Device> devices = _deviceService.GetDevices();
  1227. try
  1228. {
  1229. Device device = devices.Where(x => x.Ip == req.ip).FirstOrDefault();
  1230. if (device == null)
  1231. {
  1232. responseData.msg = "设备不存在";
  1233. responseData.result = "false";
  1234. return responseData;
  1235. }
  1236. device.UseState = req.useState;
  1237. device.OfflineUpdateTime = DateTime.Now;
  1238. await _deviceService.UpdateAndCache(device);
  1239. return responseData;
  1240. }
  1241. catch (Exception ex)
  1242. {
  1243. responseData.msg = ex.Message;
  1244. responseData.result = "false";
  1245. return responseData;
  1246. }
  1247. }
  1248. /// <summary>
  1249. /// 获取回调列表
  1250. /// </summary>
  1251. public async Task<List<TaskCallback>> GetCallBackListByCondition(RequestCallBackData vo)
  1252. {
  1253. List<TaskCallback> list = new List<TaskCallback>();
  1254. try {
  1255. TaskCallback taskCallback = new TaskCallback();
  1256. if (!string.IsNullOrEmpty(vo.IP))
  1257. {
  1258. taskCallback.IP = vo.IP;
  1259. }
  1260. if (!string.IsNullOrEmpty(vo.TaskId))
  1261. {
  1262. taskCallback.TaskId = vo.TaskId;
  1263. }
  1264. if (!string.IsNullOrEmpty(vo.TaskNodeId))
  1265. {
  1266. taskCallback.TaskNodeId = vo.TaskNodeId;
  1267. }
  1268. list = await _taskCallbackService.GetListByCondition(taskCallback);
  1269. }
  1270. catch (Exception ex)
  1271. {
  1272. return list;
  1273. }
  1274. return list;
  1275. }
  1276. //设置回调值
  1277. private TaskCallback setCallBackValue(List<CcsActionAddress> CcsActionAddresses, TaskCallback taskCallbackData)
  1278. {
  1279. List<CcsActionAddress> CcsActionAddressCallBacks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CALLBACK.ToString()).ToList();
  1280. List<CcsActionAddress> CcsActionAddressCallBackFails = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CALLBACK_FAIL.ToString()).ToList();
  1281. List<CcsActionAddress> CcsActionAddressCallBackResets = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.RESET.ToString()).ToList();
  1282. foreach (CcsActionAddress actionAddress in CcsActionAddressCallBacks)
  1283. {
  1284. if (actionAddress.Sort == 1)
  1285. {
  1286. taskCallbackData.Address = actionAddress.Address;
  1287. taskCallbackData.CallbackValue = actionAddress.Value;
  1288. }
  1289. else if (actionAddress.Sort == 2)
  1290. {
  1291. taskCallbackData.Address2 = actionAddress.Address;
  1292. taskCallbackData.CallbackValue2 = actionAddress.Value;
  1293. }
  1294. else if (actionAddress.Sort == 3)
  1295. {
  1296. taskCallbackData.Address3 = actionAddress.Address;
  1297. taskCallbackData.CallbackValue3 = actionAddress.Value;
  1298. }
  1299. }
  1300. foreach (CcsActionAddress actionAddress in CcsActionAddressCallBackFails)
  1301. {
  1302. if (actionAddress.Sort == 1)
  1303. {
  1304. taskCallbackData.FailAddress = actionAddress.Address;
  1305. taskCallbackData.CallbackFailValue = actionAddress.Value;
  1306. }
  1307. else if (actionAddress.Sort == 2)
  1308. {
  1309. taskCallbackData.FailAddress2 = actionAddress.Address;
  1310. taskCallbackData.CallbackFailValue2 = actionAddress.Value;
  1311. }
  1312. else if (actionAddress.Sort == 3)
  1313. {
  1314. taskCallbackData.FailAddress3 = actionAddress.Address;
  1315. taskCallbackData.CallbackFailValue3 = actionAddress.Value;
  1316. }
  1317. }
  1318. foreach (CcsActionAddress actionAddress in CcsActionAddressCallBackResets)
  1319. {
  1320. if (actionAddress.Sort == 1)
  1321. {
  1322. taskCallbackData.SuccessResetAddress = actionAddress.Address;
  1323. taskCallbackData.SuccessResetValue = actionAddress.Value;
  1324. }
  1325. else if (actionAddress.Sort == 2)
  1326. {
  1327. taskCallbackData.SuccessResetAddress2 = actionAddress.Address;
  1328. taskCallbackData.SuccessResetValue2 = actionAddress.Value;
  1329. }
  1330. }
  1331. return taskCallbackData;
  1332. }
  1333. public async Task<ResponseECSData> PushPushToMachine(RequestData<CutterTestData> req)
  1334. {
  1335. Log.Instance.WriteLogAdd("机外对刀仪数据接受===>> "+ JsonConvert.SerializeObject(req),"机外对刀仪");
  1336. // 1、根据url查询设备信息 2、调用httpserveer 发送执行消息
  1337. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1338. try
  1339. {
  1340. List<Device> devices = _deviceService.GetDeviceList();
  1341. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  1342. if (device == null)
  1343. {
  1344. Log.Instance.WriteLogAdd(ActionTypeEnum.StartCleanMachine + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1345. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  1346. responseData.result = "false";
  1347. responseData.resultMsg = ActionTypeEnum.StartCleanMachine + "设备已离线===>>" + JsonConvert.SerializeObject(req);
  1348. return responseData;
  1349. }
  1350. if (device.ProtocolType == ProtocalTypeEnum.HEIDEHAIN.ToString())
  1351. {
  1352. RequestHeidhData hdhReq = new RequestHeidhData();
  1353. hdhReq.ServerUrl = device.ServerUrl;
  1354. hdhReq.MachineName = device.UserName;
  1355. hdhReq.Type = "ReadAndWriteTool";
  1356. hdhReq.CutterData = JsonConvert.SerializeObject(req.data);
  1357. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
  1358. ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  1359. if (!Result.IsSuccess || !responseHeidhData.result)
  1360. {
  1361. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "机外对刀仪数据上传异常===>>" + JsonConvert.SerializeObject(req)+"======结果数据:"+ Result, "机外对刀仪");
  1362. responseData.result = "false";
  1363. responseData.resultMsg = Result.Message;
  1364. }
  1365. else
  1366. {
  1367. responseData.result = "true";
  1368. responseData.resultMsg = "消费成功";
  1369. }
  1370. }
  1371. else {
  1372. responseData.result = "false";
  1373. responseData.resultMsg = "没找到对应的类型方法";
  1374. }
  1375. }
  1376. catch (Exception ex) {
  1377. Log.Instance.WriteLogAdd(ActionTypeEnum.StartDryMachine + "任务下发异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1378. EnumHelper.GetDescription(ActionTypeEnum.StartDryMachine));
  1379. responseData.result = "false";
  1380. responseData.resultMsg = ex.Message;
  1381. return responseData;
  1382. }
  1383. return responseData;
  1384. }
  1385. /// <summary>
  1386. /// 查询三坐标是否允许取
  1387. /// </summary>
  1388. public async Task<ResponseECSData> GetMiddleThreeCoordinates(RequestData<RequestToolData> req) {
  1389. Log.Instance.WriteLogAdd("查询三坐标是否允许取===>> " + JsonConvert.SerializeObject(req), "机外对刀仪");
  1390. // 1、根据url查询设备信息 2、调用httpserveer 发送执行消息
  1391. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "允许下料");
  1392. SiemensS7Net s7 = null;
  1393. try
  1394. {
  1395. // 获取所有在线的设备
  1396. List<Device> devices = _deviceService.GetDeviceList();
  1397. // 比较在线设备是否在其中
  1398. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  1399. if (device == null)
  1400. {
  1401. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalTakeStatus + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1402. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalTakeStatus));
  1403. responseData.result = "false";
  1404. responseData.resultMsg = "设备已离线:" + req.url;
  1405. return responseData;
  1406. }
  1407. // 根据ip查询配置的字节数据
  1408. CcsAction actionQuery = new CcsAction();
  1409. actionQuery.OperateType = ActionTypeEnum.ThreeDimensionalTakeStatus.ToString();
  1410. actionQuery.Ip = req.url;
  1411. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1412. // 进行plc的连接
  1413. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  1414. OperateResult ConnectionResult = s7.ConnectServer();
  1415. if (!ConnectionResult.IsSuccess)
  1416. {
  1417. s7.ConnectClose();
  1418. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalTakeStatus + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1419. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalTakeStatus));
  1420. responseData.result = "false";
  1421. responseData.resultMsg = ActionTypeEnum.ThreeDimensionalTakeStatus + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  1422. return responseData;
  1423. }
  1424. // 查询需要操作的plc的db块
  1425. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1426. actionAddressQuery.ActionId = actionInfo.Id;
  1427. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1428. //查询出需要检查的地址列表
  1429. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  1430. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  1431. {
  1432. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  1433. {
  1434. string operateResult = "";
  1435. if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.BOOL.ToString()))
  1436. {
  1437. operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  1438. }
  1439. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.SHORT.ToString()))
  1440. {
  1441. operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  1442. }
  1443. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.String.ToString()))
  1444. {
  1445. operateResult = s7.ReadString(actionAddress.Address).Content.ToString();
  1446. }
  1447. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.Byte.ToString()))
  1448. {
  1449. operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
  1450. }
  1451. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  1452. {
  1453. s7.ConnectClose();
  1454. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalTakeStatus + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(req),
  1455. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalTakeStatus));
  1456. responseData.result = "false";
  1457. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  1458. return responseData;
  1459. }
  1460. }
  1461. }
  1462. }
  1463. catch (Exception ex)
  1464. {
  1465. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalTakeStatus + "任务下发异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1466. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalTakeStatus));
  1467. responseData.result = "false";
  1468. responseData.resultMsg = ex.Message;
  1469. return responseData;
  1470. }
  1471. return responseData;
  1472. }
  1473. /// <summary>
  1474. /// 查询三坐标是否允许放
  1475. /// </summary>
  1476. public async Task<ResponseECSData> QueryThreeCoordinatesFreePos(RequestData<RequestToolData> req) {
  1477. Log.Instance.WriteLogAdd("查询三坐标是否允许放===>> " + JsonConvert.SerializeObject(req), "机外对刀仪");
  1478. // 1、根据url查询设备信息 2、调用httpserveer 发送执行消息
  1479. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "允许上料");
  1480. SiemensS7Net s7 = null;
  1481. try
  1482. {
  1483. // 获取所有在线的设备
  1484. List<Device> devices = _deviceService.GetDeviceList();
  1485. // 比较在线设备是否在其中
  1486. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  1487. if (device == null)
  1488. {
  1489. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalPutStatus + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1490. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalPutStatus));
  1491. responseData.result = "false";
  1492. responseData.resultMsg = "设备已离线:" + req.url;
  1493. return responseData;
  1494. }
  1495. // 根据ip查询配置的字节数据
  1496. CcsAction actionQuery = new CcsAction();
  1497. actionQuery.OperateType = ActionTypeEnum.ThreeDimensionalPutStatus.ToString();
  1498. actionQuery.Ip = req.url;
  1499. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1500. // 进行plc的连接
  1501. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  1502. OperateResult ConnectionResult = s7.ConnectServer();
  1503. if (!ConnectionResult.IsSuccess)
  1504. {
  1505. s7.ConnectClose();
  1506. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalPutStatus + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1507. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalPutStatus));
  1508. responseData.result = "false";
  1509. responseData.resultMsg = ActionTypeEnum.ThreeDimensionalPutStatus + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  1510. return responseData;
  1511. }
  1512. // 查询需要操作的plc的db块
  1513. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1514. actionAddressQuery.ActionId = actionInfo.Id;
  1515. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1516. //查询出需要检查的地址列表
  1517. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  1518. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  1519. {
  1520. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  1521. {
  1522. string operateResult = "";
  1523. if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.BOOL.ToString()))
  1524. {
  1525. operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  1526. }
  1527. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.SHORT.ToString()))
  1528. {
  1529. operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  1530. }
  1531. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.String.ToString()))
  1532. {
  1533. operateResult = s7.ReadString(actionAddress.Address).Content.ToString();
  1534. }
  1535. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.Byte.ToString()))
  1536. {
  1537. operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
  1538. }
  1539. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  1540. {
  1541. s7.ConnectClose();
  1542. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalPutStatus + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(req),
  1543. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalPutStatus));
  1544. responseData.result = "false";
  1545. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  1546. return responseData;
  1547. }
  1548. }
  1549. }
  1550. }
  1551. catch (Exception ex)
  1552. {
  1553. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalPutStatus + "任务下发异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1554. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalPutStatus));
  1555. responseData.result = "false";
  1556. responseData.resultMsg = ex.Message;
  1557. return responseData;
  1558. }
  1559. return responseData;
  1560. }
  1561. /// <summary>
  1562. /// 三坐标启动
  1563. /// </summary>
  1564. public async Task<ResponseECSData> SendThreeCoordinates(RequestData<ThreeDimensional> req)
  1565. {
  1566. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "执行成功");
  1567. SiemensS7Net s7 = null;
  1568. try
  1569. {
  1570. // 获取所有在线的设备
  1571. List<Device> devices = _deviceService.GetDeviceList();
  1572. // 比较在线设备是否在其中
  1573. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  1574. if (device == null)
  1575. {
  1576. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalRun + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1577. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalRun));
  1578. responseData.result = "false";
  1579. responseData.resultMsg = "设备已离线:" + req.url;
  1580. return responseData;
  1581. }
  1582. // 根据ip查询设备
  1583. CcsAction actionQuery = new CcsAction();
  1584. actionQuery.OperateType = ActionTypeEnum.ThreeDimensionalRun.ToString();
  1585. actionQuery.Ip = req.url;
  1586. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1587. // 进行plc的连接
  1588. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  1589. OperateResult ConnectionResult = s7.ConnectServer();
  1590. if (!ConnectionResult.IsSuccess)
  1591. {
  1592. s7.ConnectClose();
  1593. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalRun + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1594. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalRun));
  1595. responseData.result = "false";
  1596. responseData.resultMsg = ActionTypeEnum.ThreeDimensionalRun + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  1597. return responseData;
  1598. }
  1599. // 查询需要操作的plc的db块
  1600. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1601. actionAddressQuery.ActionId = actionInfo.Id;
  1602. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1603. //查询出需要检查的地址列表
  1604. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  1605. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  1606. {
  1607. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  1608. {
  1609. string operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
  1610. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  1611. {
  1612. s7.ConnectClose();
  1613. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalRun + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(req),
  1614. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalRun));
  1615. responseData.result = "false";
  1616. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  1617. return responseData;
  1618. }
  1619. }
  1620. }
  1621. //查询需要写入地址列表
  1622. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  1623. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  1624. {
  1625. if (!string.IsNullOrEmpty(actionAddress.Address))
  1626. {
  1627. string parValue = "";
  1628. // 写入取放点位、需要进行点位拼接
  1629. if (actionAddress.Sort == 1)
  1630. {
  1631. parValue = req.data.workType;
  1632. s7.Write(actionAddress.Address, Convert.ToString(parValue));
  1633. }
  1634. else if (actionAddress.Sort == 2)
  1635. {
  1636. // 需要写入启动状态
  1637. parValue = actionAddress.Value;
  1638. s7.Write(actionAddress.Address, Convert.ToBoolean(parValue));
  1639. }
  1640. // 同步TagValue数据状态
  1641. CcsTagValue tagValueQuery = new CcsTagValue();
  1642. tagValueQuery.Ip = req.url;
  1643. tagValueQuery.Address = actionAddress.Address;
  1644. CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).ToList().FirstOrDefault();
  1645. if (tagValue != null)
  1646. {
  1647. tagValue.TagValue = parValue;
  1648. await _ccsTagValueService.Update(tagValue);
  1649. }
  1650. Thread.Sleep(SLEEP_TIME);
  1651. }
  1652. }
  1653. s7.ConnectClose();
  1654. // 睡100毫秒,保证plc那边进行数据处理完成,防止回调时候,plc状态不是最新状态
  1655. Thread.Sleep(100);
  1656. //插入回调
  1657. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.ThreeDimensionalRun.ToString(),
  1658. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalRun), req.taskId, req.taskNodeId);
  1659. taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData);
  1660. // 保存数据
  1661. await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  1662. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalRun) + "取成功===>>" + JsonConvert.SerializeObject(req)
  1663. , EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalRun));
  1664. return responseData;
  1665. }
  1666. catch (Exception ex)
  1667. {
  1668. // 记录日志
  1669. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalRun + "取放异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1670. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalRun));
  1671. responseData.resultMsg = ActionTypeEnum.ThreeDimensionalRun + "取放异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
  1672. responseData.result = "false";
  1673. // 关闭plc连接
  1674. if (s7 != null)
  1675. {
  1676. s7.ConnectClose();
  1677. }
  1678. return responseData;
  1679. }
  1680. }
  1681. /// <summary>
  1682. /// 坐标系偏移量设置
  1683. /// </summary>
  1684. public async Task<ResponseECSData> SendOffsetSetting(RequestData<ThreeDimensionalOffset> req)
  1685. {
  1686. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId,"设置成功");
  1687. try
  1688. {
  1689. List<Device> devices = _deviceService.GetDeviceList();
  1690. Device deviceHeidenhain = devices.Where(x => x.Ip.Equals(req.url)
  1691. && x.ProtocolType.Equals(ProtocalTypeEnum.HEIDEHAIN.ToString())).FirstOrDefault();
  1692. if (deviceHeidenhain == null)
  1693. {
  1694. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteDeviationValue + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1695. EnumHelper.GetDescription(ActionTypeEnum.WriteDeviationValue));
  1696. responseData.result = "false";
  1697. responseData.resultMsg = ActionTypeEnum.WriteDeviationValue + "设备已离线===>>" + JsonConvert.SerializeObject(req);
  1698. return responseData;
  1699. }
  1700. if (deviceHeidenhain != null)
  1701. {
  1702. RequestHeidhData hdhReq = new RequestHeidhData();
  1703. hdhReq.ServerUrl = deviceHeidenhain.ServerUrl;
  1704. hdhReq.MachineName = deviceHeidenhain.UserName;
  1705. hdhReq.Type = OpcUaActionTypeEnum.WriteDeviationValue.ToString();
  1706. hdhReq.DeviationValue = JsonConvert.SerializeObject(req.data);
  1707. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
  1708. ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  1709. if (!Result.IsSuccess || !responseHeidhData.result)
  1710. {
  1711. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteDeviationValue + "坐标系偏差值设置失败===>>" + JsonConvert.SerializeObject(req) + "======结果数据:" + Result, "机外对刀仪");
  1712. responseData.result = "false";
  1713. responseData.resultMsg = Result.Message;
  1714. return responseData;
  1715. }
  1716. else
  1717. {
  1718. responseData.result = "true";
  1719. responseData.resultMsg = "消费成功";
  1720. }
  1721. }
  1722. else
  1723. {
  1724. responseData.result = "false";
  1725. responseData.resultMsg = "没找到对应的类型方法";
  1726. return responseData;
  1727. }
  1728. //插入回调
  1729. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.WriteDeviationValue.ToString(),
  1730. EnumHelper.GetDescription(ActionTypeEnum.WriteDeviationValue), req.taskId, req.taskNodeId);
  1731. await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  1732. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteDeviationValue + "设置成功===>>" + JsonConvert.SerializeObject(req),
  1733. EnumHelper.GetDescription(ActionTypeEnum.WriteDeviationValue));
  1734. return responseData;
  1735. }
  1736. catch (Exception ex)
  1737. {
  1738. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteDeviationValue + "设置异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1739. EnumHelper.GetDescription(ActionTypeEnum.WriteDeviationValue));
  1740. responseData.resultMsg = ActionTypeEnum.WriteDeviationValue + "设置异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
  1741. responseData.result = "false";
  1742. return responseData;
  1743. }
  1744. }
  1745. /// <summary>
  1746. /// 查询刀具上下料站、机床刀具位是否允许取
  1747. /// </summary>
  1748. /// <returns></returns>
  1749. public async Task<ResponseECSData> getCutterDeviceIsTake(RequestData<RequestToolData> req)
  1750. {
  1751. Log.Instance.WriteLogAdd("查询刀具上下料站、机床刀具位是否允许取===>> " + JsonConvert.SerializeObject(req), "刀具取放状态");
  1752. // 1、根据url查询设备信息 2、调用httpserveer 发送执行消息
  1753. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "允许下料");
  1754. SiemensS7Net s7 = null;
  1755. try
  1756. {
  1757. // 获取所有在线的设备
  1758. List<Device> devices = _deviceService.GetDeviceList();
  1759. // 比较在线设备是否在其中
  1760. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  1761. if (device == null)
  1762. {
  1763. Log.Instance.WriteLogAdd("CutterTake" + req.data.location + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1764. "刀具取放状态");
  1765. responseData.result = "false";
  1766. responseData.resultMsg = "设备已离线:" + req.url;
  1767. return responseData;
  1768. }
  1769. // 根据ip查询配置的字节数据
  1770. CcsAction actionQuery = new CcsAction();
  1771. actionQuery.OperateType = "CutterTake" + req.data.location.ToString();
  1772. actionQuery.Ip = req.url;
  1773. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1774. // 进行plc的连接
  1775. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  1776. OperateResult ConnectionResult = s7.ConnectServer();
  1777. if (!ConnectionResult.IsSuccess)
  1778. {
  1779. s7.ConnectClose();
  1780. Log.Instance.WriteLogAdd("CutterTake" + req.data.location + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1781. "刀具取放状态");
  1782. responseData.result = "false";
  1783. responseData.resultMsg = "CutterTake" + req.data.location + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  1784. return responseData;
  1785. }
  1786. //=========================上下料站请求判断 开始======================
  1787. // 目标点位是上下料站的判断下料请求是否为true,上料请求为false,
  1788. // 如果不是判断上料请求是否为true,
  1789. // 是提示状态不对,否则写下料请求状态
  1790. // 下料允许
  1791. if (cutterTakeRequest.ContainsKey(req.data.location))
  1792. {
  1793. string shangliaoqingqiuDB = cutterPutRequest[req.data.location];
  1794. string xialiaoqingqiuDB = cutterTakeRequest[req.data.location];
  1795. string shangliaoyunxuDB = cutterPutStatus[req.data.location];
  1796. string xialiaoyunxuDB = cutterTakeStatus[req.data.location];
  1797. string shangliaoqingqiu = s7.ReadBool(shangliaoqingqiuDB).Content.ToString();
  1798. string xialiaoqingqiu = s7.ReadBool(xialiaoqingqiuDB).Content.ToString();
  1799. string shangliaoyunxu = s7.ReadBool(shangliaoyunxuDB).Content.ToString();
  1800. string xialiaoyunxu = s7.ReadBool(xialiaoyunxuDB).Content.ToString();
  1801. if (shangliaoqingqiu == "False" && xialiaoqingqiu == "False")
  1802. {
  1803. s7.Write(xialiaoqingqiuDB, true);
  1804. s7.ConnectClose();
  1805. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====已发送下料请求,等待下料允许====" + JsonConvert.SerializeObject(req),
  1806. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  1807. responseData.result = "false";
  1808. responseData.resultMsg = "已发送下料请求,等待下料允许";
  1809. return responseData;
  1810. }
  1811. else if (shangliaoqingqiu == "True" && xialiaoqingqiu == "False")
  1812. {
  1813. s7.ConnectClose();
  1814. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====状态不对,现在上料请求状态,等待上料任务完成====" + JsonConvert.SerializeObject(req),
  1815. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  1816. responseData.result = "false";
  1817. responseData.resultMsg = "已被上料请求占用,等待上料任务完成";
  1818. return responseData;
  1819. }
  1820. else if (xialiaoqingqiu == "True" && xialiaoyunxu == "False")
  1821. {
  1822. s7.ConnectClose();
  1823. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====已经发送下料请求,下料允许状态不满足====" + JsonConvert.SerializeObject(req),
  1824. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  1825. responseData.result = "false";
  1826. responseData.resultMsg = "已经发送下料请求,下料允许状态不满足";
  1827. return responseData;
  1828. }
  1829. }
  1830. //=========================上下料站请求判断 结束======================
  1831. // 查询需要操作的plc的db块
  1832. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1833. actionAddressQuery.ActionId = actionInfo.Id;
  1834. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1835. //查询出需要检查的地址列表
  1836. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  1837. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  1838. {
  1839. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  1840. {
  1841. string operateResult = "";
  1842. if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.BOOL.ToString()))
  1843. {
  1844. operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  1845. }
  1846. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.SHORT.ToString()))
  1847. {
  1848. operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  1849. }
  1850. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.String.ToString()))
  1851. {
  1852. operateResult = s7.ReadString(actionAddress.Address).Content.ToString();
  1853. }
  1854. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.Byte.ToString()))
  1855. {
  1856. operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
  1857. }
  1858. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  1859. {
  1860. s7.ConnectClose();
  1861. Log.Instance.WriteLogAdd("CutterTake" + req.data.location + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(req),
  1862. "刀具取放状态");
  1863. responseData.result = "false";
  1864. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  1865. return responseData;
  1866. }
  1867. }
  1868. }
  1869. }
  1870. catch (Exception ex)
  1871. {
  1872. Log.Instance.WriteLogAdd("CutterTake" + req.data.location + "任务下发异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1873. "刀具取放状态");
  1874. responseData.result = "false";
  1875. responseData.resultMsg = ex.Message;
  1876. return responseData;
  1877. }
  1878. return responseData;
  1879. }
  1880. /// <summary>
  1881. /// 查询刀具上下料站、机床刀具位是否允许放
  1882. /// </summary>
  1883. /// <returns></returns>
  1884. public async Task<ResponseECSData> getCutterDeviceIsPut(RequestData<RequestToolData> req)
  1885. {
  1886. Log.Instance.WriteLogAdd("查询刀具上下料站、机床刀具位是否允许放===>> " + JsonConvert.SerializeObject(req), "刀具取放状态");
  1887. // 1、根据url查询设备信息 2、调用httpserveer 发送执行消息
  1888. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "允许下料");
  1889. SiemensS7Net s7 = null;
  1890. try
  1891. {
  1892. // 获取所有在线的设备
  1893. List<Device> devices = _deviceService.GetDeviceList();
  1894. // 比较在线设备是否在其中
  1895. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  1896. if (device == null)
  1897. {
  1898. Log.Instance.WriteLogAdd("CutterPut" + req.data.location + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1899. "刀具取放状态");
  1900. responseData.result = "false";
  1901. responseData.resultMsg = "设备已离线:" + req.url;
  1902. return responseData;
  1903. }
  1904. //=========================上下料站请求判断 开始======================
  1905. // 目标点位是上下料站的判断下料请求是否为true,上料请求为false,
  1906. // 如果不是判断上料请求是否为true,
  1907. // 是提示状态不对,否则写下料请求状态
  1908. // 上料料请求
  1909. if (cutterPutRequest.ContainsKey(req.data.location))
  1910. {
  1911. string shangliaoqingqiuDB = cutterPutRequest[req.data.location];
  1912. string xialiaoqingqiuDB = cutterTakeRequest[req.data.location];
  1913. string shangliaoyunxuDB = cutterPutStatus[req.data.location];
  1914. string xialiaoyunxuDB = cutterTakeStatus[req.data.location];
  1915. string shangliaoqingqiu = s7.ReadBool(shangliaoqingqiuDB).Content.ToString();
  1916. string xialiaoqingqiu = s7.ReadBool(xialiaoqingqiuDB).Content.ToString();
  1917. string shangliaoyunxu = s7.ReadBool(shangliaoyunxuDB).Content.ToString();
  1918. string xialiaoyunxu = s7.ReadBool(xialiaoyunxuDB).Content.ToString();
  1919. if (shangliaoqingqiu == "False" && xialiaoqingqiu == "False")
  1920. {
  1921. s7.Write(shangliaoqingqiuDB, true);
  1922. s7.ConnectClose();
  1923. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====已发送上料请求,等待上料允许====" + JsonConvert.SerializeObject(req),
  1924. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  1925. responseData.result = "false";
  1926. responseData.resultMsg = "已发送上料请求,等待上料允许";
  1927. return responseData;
  1928. }
  1929. else if (shangliaoqingqiu == "False" && xialiaoqingqiu == "True")
  1930. {
  1931. s7.ConnectClose();
  1932. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====状态不对,现在下料请求状态,等待下料任务完成====" + JsonConvert.SerializeObject(req),
  1933. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  1934. responseData.result = "false";
  1935. responseData.resultMsg = "已被下料请求占用,等待下料任务完成";
  1936. return responseData;
  1937. }
  1938. else if (shangliaoqingqiu == "True" && shangliaoyunxu == "False")
  1939. {
  1940. s7.ConnectClose();
  1941. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====已经发送上料请求,上料允许状态不满足====" + JsonConvert.SerializeObject(req),
  1942. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  1943. responseData.result = "false";
  1944. responseData.resultMsg = "已经发送上料请求,上料允许状态不满";
  1945. return responseData;
  1946. }
  1947. }
  1948. //=========================上下料站请求判断 结束======================
  1949. // 根据ip查询配置的字节数据
  1950. CcsAction actionQuery = new CcsAction();
  1951. actionQuery.OperateType = "CutterPut" + req.data.location.ToString();
  1952. actionQuery.Ip = req.url;
  1953. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1954. // 进行plc的连接
  1955. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  1956. OperateResult ConnectionResult = s7.ConnectServer();
  1957. if (!ConnectionResult.IsSuccess)
  1958. {
  1959. s7.ConnectClose();
  1960. Log.Instance.WriteLogAdd("CutterPut" + req.data.location + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1961. "刀具取放状态");
  1962. responseData.result = "false";
  1963. responseData.resultMsg = "CutterPut" + req.data.location + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  1964. return responseData;
  1965. }
  1966. // 查询需要操作的plc的db块
  1967. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1968. actionAddressQuery.ActionId = actionInfo.Id;
  1969. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1970. //查询出需要检查的地址列表
  1971. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  1972. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  1973. {
  1974. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  1975. {
  1976. string operateResult = "";
  1977. if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.BOOL.ToString()))
  1978. {
  1979. operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  1980. }
  1981. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.SHORT.ToString()))
  1982. {
  1983. operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  1984. }
  1985. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.String.ToString()))
  1986. {
  1987. operateResult = s7.ReadString(actionAddress.Address).Content.ToString();
  1988. }
  1989. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.Byte.ToString()))
  1990. {
  1991. operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
  1992. }
  1993. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  1994. {
  1995. s7.ConnectClose();
  1996. Log.Instance.WriteLogAdd("CutterPut" + req.data.location + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(req),
  1997. "刀具取放状态");
  1998. responseData.result = "false";
  1999. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  2000. return responseData;
  2001. }
  2002. }
  2003. }
  2004. }
  2005. catch (Exception ex)
  2006. {
  2007. Log.Instance.WriteLogAdd("CutterPut" + req.data.location + "任务下发异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  2008. "刀具取放状态");
  2009. responseData.result = "false";
  2010. responseData.resultMsg = ex.Message;
  2011. return responseData;
  2012. }
  2013. return responseData;
  2014. }
  2015. }
  2016. }