HttpRequestService.cs 151 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018
  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. using Newtonsoft.Json.Linq;
  29. using static AutoMapper.Internal.ExpressionFactory;
  30. using Microsoft.EntityFrameworkCore.Internal;
  31. using Org.BouncyCastle.Asn1.Ocsp;
  32. using Ubiety.Dns.Core;
  33. using static IMCS.CCS.Models.vo.ResponseECSData;
  34. namespace IMCS.CCS.Services
  35. {
  36. public class HttpRequestService : IHttpRequestService
  37. {
  38. private readonly IDeviceService _deviceService;
  39. private readonly ITaskCallbackService _taskCallbackService;
  40. private readonly ICcsActionService _ccsActionService;
  41. private readonly ICcsTagValueService _ccsTagValueService;
  42. private readonly IEquipmentMonitorService _equipmentMonitorService;
  43. private readonly ICcsActionAddressService _ccsActionAddressService;
  44. private readonly ITaskJobService _taskJobService;
  45. private readonly ICcsActionDeviceSourceCheckService _ccsActionDeviceSourceCheckService;
  46. private int SLEEP_TIME = 100;
  47. string LocalPath = "D:\\PROG";
  48. private string fanucUrlContext;
  49. private string opcuacUrlContext;
  50. private string hdhUrlContext;
  51. private string ecsRootUrlContext;
  52. public IConfiguration Configuration { get; }
  53. private readonly IApiRequestService _apiRequestService;
  54. //上下料站 上料请求
  55. private static Dictionary<string, string> sxlzslqq = new Dictionary<string, string>();
  56. //上下料站 下料请求
  57. private static Dictionary<string, string> sxlzxlqq = new Dictionary<string, string>();
  58. //上下料站 下料完成信号
  59. private static Dictionary<string, string> sxlzxlwcxh = new Dictionary<string, string>();
  60. //上下料站 上料完成信号
  61. private static Dictionary<string, string> sxlzslwcxh = new Dictionary<string, string>();
  62. //上下料站 机床 允许取放状态
  63. private static Dictionary<string, string> pointDict = new Dictionary<string, string>();
  64. public HttpRequestService(IDeviceService deviceService, ITaskCallbackService taskCallbackService,
  65. ICcsActionService ccsActionService, ICcsTagValueService ccsTagValueService,
  66. IEquipmentMonitorService equipmentMonitorService, ICcsActionAddressService ccsActionAddressService,
  67. IApiRequestService apiRequestService, ITaskJobService taskJobService, ICcsActionDeviceSourceCheckService ccsActionDeviceSourceCheckService,
  68. IConfiguration configuration)
  69. {
  70. _deviceService = deviceService;
  71. _taskCallbackService = taskCallbackService;
  72. _ccsActionService = ccsActionService;
  73. _ccsTagValueService = ccsTagValueService;
  74. _equipmentMonitorService = equipmentMonitorService;
  75. _ccsActionAddressService = ccsActionAddressService;
  76. _apiRequestService = apiRequestService;
  77. _taskJobService = taskJobService;
  78. _ccsActionDeviceSourceCheckService = ccsActionDeviceSourceCheckService;
  79. Configuration = configuration;
  80. fanucUrlContext = Configuration.GetConnectionString("fanucUrlContext");
  81. opcuacUrlContext = Configuration.GetConnectionString("opcuacUrlContext");
  82. hdhUrlContext = Configuration.GetConnectionString("hdhUrlContext");
  83. ecsRootUrlContext = Configuration.GetConnectionString("ecsRootUrlContext");
  84. if(sxlzslqq.Count == 0)
  85. {
  86. sxlzslqq.Add("129", "DB1001.106");
  87. sxlzslqq.Add("446", "DB1001.106");
  88. sxlzslqq.Add("130", "DB1001.108");
  89. sxlzslqq.Add("447", "DB1001.108");
  90. }
  91. if (sxlzxlqq.Count == 0)
  92. {
  93. sxlzxlqq.Add("129", "DB1001.112");
  94. sxlzxlqq.Add("446", "DB1001.112");
  95. sxlzxlqq.Add("130", "DB1001.114");
  96. sxlzxlqq.Add("447", "DB1001.114");
  97. }
  98. if (sxlzxlwcxh.Count == 0)
  99. {
  100. sxlzxlwcxh.Add("129", "DB1000.42");
  101. sxlzxlwcxh.Add("446", "DB1000.42");
  102. sxlzxlwcxh.Add("130", "DB1000.44");
  103. sxlzxlwcxh.Add("447", "DB1000.44");
  104. }
  105. if (sxlzslwcxh.Count == 0)
  106. {
  107. sxlzslwcxh.Add("129", "DB1000.48");
  108. sxlzslwcxh.Add("446", "DB1000.48");
  109. sxlzslwcxh.Add("130", "DB1000.50");
  110. sxlzslwcxh.Add("447", "DB1000.50");
  111. }
  112. if(pointDict.Count == 0)
  113. {
  114. /*//上下料站1
  115. pointDict.Add("129", "");
  116. pointDict.Add("446", "");
  117. //上下料站2
  118. pointDict.Add("130", "");
  119. pointDict.Add("447", "");*/
  120. //德玛吉
  121. pointDict.Add("121", "");
  122. pointDict.Add("441", "");
  123. //永进TV158B三轴
  124. pointDict.Add("122", "");
  125. pointDict.Add("442", "");
  126. //永进TV158B四轴 + 尾架 - 1
  127. pointDict.Add("123", "");
  128. pointDict.Add("124", "");
  129. pointDict.Add("443", "");
  130. //永进TV158B四轴 + 尾架 - 2
  131. pointDict.Add("125", "");
  132. pointDict.Add("126", "");
  133. pointDict.Add("444", "");
  134. //永进TV158B五轴转台
  135. pointDict.Add("127", "");
  136. pointDict.Add("128", "");
  137. pointDict.Add("445", "");
  138. }
  139. }
  140. /// <summary>
  141. /// 获取状态当前值
  142. /// </summary>
  143. public string GetTagValue(RequestTagValueData req)
  144. {
  145. CcsTagValue queryParam = new CcsTagValue();
  146. queryParam.Ip = req.ip;
  147. queryParam.Address = req.tagname;
  148. List<CcsTagValue> tagValues = _ccsTagValueService.GetList(queryParam);
  149. string tagValue = "0";
  150. if (tagValues != null && tagValues.Count > 0)
  151. {
  152. tagValue = tagValues[0].TagValue;
  153. }
  154. return tagValue;
  155. }
  156. /// <summary>
  157. /// 益模调用接口,显示3D
  158. /// </summary>
  159. public async Task<List<ResponseDigitalTwinsData>> GetDigitalTwins()
  160. {
  161. List<Device> devices = _deviceService.GetDeviceList();
  162. List<ResponseDigitalTwinsData> list = new List<ResponseDigitalTwinsData>();
  163. String query3dUrl = ecsRootUrlContext + "/api/authority/agv/agvCallbackService/query3dResouceDataInfo";
  164. var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, query3dUrl, new Object(), null);
  165. ResponsePageData<ResponseDigitalTwinsData> responseData = JsonConvert.DeserializeObject<ResponsePageData<ResponseDigitalTwinsData>>(result.Message);
  166. list = responseData.Data;
  167. foreach(ResponseDigitalTwinsData responseDigitalTwinsData in list)
  168. {
  169. EquipmentMonitor equipmentMonitor = await _equipmentMonitorService.GetById(long.Parse(responseDigitalTwinsData.resourceId));
  170. if (equipmentMonitor==null || equipmentMonitor.IP == null)
  171. {
  172. continue;
  173. }
  174. Device device = devices.Where(x => x.Ip.Equals(equipmentMonitor.IP)).FirstOrDefault();
  175. if (null!=device && equipmentMonitor.Type == "HEIDEHAIN")
  176. {
  177. RequestHeidhData hdhReq = new RequestHeidhData();
  178. hdhReq.ServerUrl = device.ServerUrl;
  179. hdhReq.MachineName = device.UserName;
  180. hdhReq.Type = "Collect";
  181. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
  182. if (Result.IsSuccess)
  183. {
  184. ResponseHeidhData retData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  185. if (!string.IsNullOrEmpty(retData.runDatasInfo.Trim()))
  186. {
  187. ResponseDigitalTwinsData twinsData = JsonConvert.DeserializeObject<ResponseDigitalTwinsData>(retData.runDatasInfo);
  188. responseDigitalTwinsData.feedRate = !string.IsNullOrEmpty(twinsData.feedRate)? twinsData.feedRate : "0";
  189. responseDigitalTwinsData.spindleMagnification = !string.IsNullOrEmpty(twinsData.spindleMagnification)? twinsData.spindleMagnification:"0";
  190. responseDigitalTwinsData.spindleSpeed = !string.IsNullOrEmpty(twinsData.spindleSpeed) ? twinsData.spindleSpeed + "00" : "0";
  191. responseDigitalTwinsData.spindleLoad = !string.IsNullOrEmpty(twinsData.spindleLoad) ? twinsData.spindleMagnification : "-";
  192. }
  193. }
  194. }
  195. else if(null != device && equipmentMonitor.Type == "FANUC")
  196. {
  197. string Url = fanucUrlContext + "?ip=" + device.Ip + "&port=" + device.Port;
  198. //调用发那科接口
  199. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Get, Url + "&fun=All", null, null);
  200. if (Result.IsSuccess)
  201. {
  202. ResponseFanucData responseFanucData = JsonConvert.DeserializeObject<ResponseFanucData>(Result.Message);
  203. responseDigitalTwinsData.feedRate = !string.IsNullOrEmpty(responseFanucData.ActFeed)? responseFanucData.ActFeed:"0";
  204. responseDigitalTwinsData.spindleMagnification = !string.IsNullOrEmpty(responseFanucData.SpindleMagnification)? responseFanucData.SpindleMagnification:"0";
  205. responseDigitalTwinsData.spindleSpeed = !string.IsNullOrEmpty(responseFanucData.ActSpindle)? responseFanucData.ActSpindle : "0";
  206. responseDigitalTwinsData.spindleLoad = !string.IsNullOrEmpty(responseFanucData.SpindleLoad)? responseFanucData.SpindleLoad : "-";
  207. }
  208. }
  209. }
  210. return list;
  211. }
  212. /// <summary>
  213. /// 查询设备状态
  214. /// </summary>
  215. public async Task<List<EquipmentMonitor>> GetEquipMent()
  216. {
  217. return await _equipmentMonitorService.GetList();
  218. }
  219. /// <summary>
  220. /// 机器人取放动作
  221. /// </summary>
  222. public async Task<ResponseECSData> RobotAction(RequestData<LocationData> req)
  223. {
  224. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "任务接受===>>" + JsonConvert.SerializeObject(req),
  225. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  226. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId,"执行成功");
  227. SiemensS7Net s7 = null;
  228. try
  229. {
  230. // 获取所有在线的设备
  231. List<Device> devices = _deviceService.GetDeviceList();
  232. // 比较在线设备是否在其中
  233. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  234. if (device == null)
  235. {
  236. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  237. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  238. responseData.result = "false";
  239. responseData.resultMsg = "设备已离线:" + req.url;
  240. return responseData;
  241. }
  242. // 根据ip查询设备
  243. CcsAction actionQuery = new CcsAction();
  244. actionQuery.OperateType = ActionTypeEnum.RobotAction.ToString();
  245. actionQuery.Ip = req.url;
  246. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  247. // 进行plc的连接
  248. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  249. OperateResult ConnectionResult = s7.ConnectServer();
  250. if (!ConnectionResult.IsSuccess)
  251. {
  252. s7.ConnectClose();
  253. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  254. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  255. responseData.result = "false";
  256. responseData.resultMsg = ActionTypeEnum.RobotAction + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  257. return responseData;
  258. }
  259. string slReuslt = null;
  260. if (sxlzslwcxh.ContainsKey(req.data.location))
  261. {
  262. slReuslt = s7.ReadInt16(sxlzslwcxh[req.data.location]).Content.ToString();
  263. }
  264. string xlReuslt = null;
  265. if (sxlzxlwcxh.ContainsKey(req.data.destLocation))
  266. {
  267. xlReuslt = s7.ReadInt16(sxlzxlwcxh[req.data.destLocation]).Content.ToString();
  268. }
  269. //上料请求
  270. if (sxlzslqq.ContainsKey(req.data.location) && slReuslt != null && slReuslt!="1")
  271. {
  272. s7.Write(sxlzslqq[req.data.location], Convert.ToInt16(1));
  273. Console.WriteLine(sxlzslqq[req.data.location]);
  274. s7.ConnectClose();
  275. responseData.result = "false";
  276. responseData.resultMsg = ActionTypeEnum.RobotAction + "上料请求已发送,请点击上料按钮,"+ JsonConvert.SerializeObject(req);
  277. return responseData;
  278. }
  279. if (sxlzxlqq.ContainsKey(req.data.destLocation) && xlReuslt != null && xlReuslt != "1")
  280. {
  281. s7.Write(sxlzxlqq[req.data.destLocation], Convert.ToInt16(1));
  282. s7.ConnectClose();
  283. responseData.result = "false";
  284. responseData.resultMsg = ActionTypeEnum.RobotAction + "下料请求已发送,请点击下料按钮," + JsonConvert.SerializeObject(req);
  285. return responseData;
  286. }
  287. //判断取地址是否满足条件
  288. if (pointDict.ContainsKey(req.data.location))
  289. {
  290. string location = pointDict[req.data.location]; //取
  291. if (location != null)
  292. {
  293. string getResult = s7.ReadInt16(location).Content.ToString();
  294. if (getResult != "8")
  295. {
  296. s7.ConnectClose();
  297. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】" + JsonConvert.SerializeObject(req),
  298. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  299. responseData.result = "false";
  300. responseData.msg = "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】";
  301. return responseData;
  302. }
  303. }
  304. }
  305. //判断放地址是否满足条件
  306. if (pointDict.ContainsKey(req.data.destLocation))
  307. {
  308. string destLocation = pointDict[req.data.destLocation]; //放
  309. if (destLocation != null)
  310. {
  311. string putResult = s7.ReadInt16(destLocation).Content.ToString();
  312. if (putResult != "16")
  313. {
  314. s7.ConnectClose();
  315. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.destLocation + "放条件不满足【" + putResult + "】" + JsonConvert.SerializeObject(req),
  316. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  317. responseData.result = "false";
  318. responseData.msg = "异常===>>" + "点位" + req.data.destLocation + "放条件不满足【" + putResult + "】";
  319. return responseData;
  320. }
  321. }
  322. }
  323. // 查询需要操作的plc的db块
  324. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  325. actionAddressQuery.ActionId = actionInfo.Id;
  326. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  327. //查询出需要检查的地址列表
  328. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  329. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  330. {
  331. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  332. {
  333. string operateResult = "";
  334. if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.BOOL.ToString()))
  335. {
  336. operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  337. }
  338. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.SHORT.ToString()))
  339. {
  340. operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  341. }
  342. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.String.ToString()))
  343. {
  344. operateResult = s7.ReadString(actionAddress.Address).Content.ToString();
  345. }
  346. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.Byte.ToString()))
  347. {
  348. operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
  349. }
  350. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  351. {
  352. s7.ConnectClose();
  353. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult +",要查询的参数"+ JsonConvert.SerializeObject(actionAddress) +", 请求参数"+ JsonConvert.SerializeObject(req),
  354. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  355. responseData.result = "false";
  356. responseData.resultMsg = "异常===>>" + "条件不满足"+ actionAddress.Description+";采集数据:" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  357. return responseData;
  358. }
  359. }
  360. }
  361. //写入子盘编码,让plc去校验编码是否正确
  362. if (req.data.trayLatheType == "1")
  363. {
  364. s7.Write("DB1001.6", ToolUtils.ReturnBtyesWtitString(req.data.trayLatheCode, 39));
  365. }
  366. else if (req.data.trayLatheType == "4")
  367. {
  368. s7.Write("DB1001.54", ToolUtils.ReturnBtyesWtitString(req.data.trayLatheCode, 39));
  369. }
  370. //查询写入地址列表
  371. string log = "任务【" + req.taskNodeId + "】写入:";
  372. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  373. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  374. {
  375. if (!string.IsNullOrEmpty(actionAddress.Address))
  376. {
  377. if (string.IsNullOrEmpty(actionAddress.Value))
  378. {
  379. //取参数传参值
  380. string dataValue = getProperties(req.data, actionAddress.Description);
  381. if (!string.IsNullOrEmpty(dataValue))
  382. {
  383. s7.Write(actionAddress.Address, Convert.ToInt16(dataValue));
  384. log = log + "地址:" + actionAddress.Address + "【" + dataValue + "】";
  385. }
  386. }
  387. else
  388. {
  389. s7.Write(actionAddress.Address, Convert.ToBoolean(actionAddress.Value));
  390. log = log + "地址:" + actionAddress.Address + "【" + actionAddress.Value + "】";
  391. }
  392. }
  393. }
  394. s7.ConnectClose();
  395. //查询回调表是否存在此数据(避免在数据重复下发时,产生多条回调数据)
  396. TaskCallback vo = new TaskCallback(null, ActionTypeEnum.RobotAction.ToString(),
  397. null, req.taskId, req.taskNodeId);
  398. List<TaskCallback> taskCallbackList = await _taskCallbackService.GetListByCondition(vo);
  399. //插入回调
  400. TaskCallback taskCallbackData = new TaskCallback();
  401. if (taskCallbackList != null && taskCallbackList.Count > 0)
  402. {
  403. taskCallbackData = taskCallbackList[0];
  404. taskCallbackData.State = true;
  405. }
  406. else
  407. {
  408. taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.RobotAction.ToString(),
  409. EnumHelper.GetDescription(ActionTypeEnum.RobotAction), req.taskId, req.taskNodeId);
  410. }
  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. public string getProperties<T>(T t, string propertyName)
  434. {
  435. string tStr = string.Empty;
  436. if (t == null)
  437. {
  438. return tStr;
  439. }
  440. System.Reflection.PropertyInfo[] properties = t.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
  441. if (properties.Length <= 0)
  442. {
  443. return tStr;
  444. }
  445. foreach (System.Reflection.PropertyInfo item in properties)
  446. {
  447. string name = item.Name;
  448. object value = item.GetValue(t, null);
  449. /*if ((item.PropertyType.IsValueType || item.PropertyType.Name.StartsWith("String")) && name == propertyName)
  450. {
  451. tStr = value.ToString();
  452. break;
  453. }*/
  454. if ((item.PropertyType.IsValueType || item.PropertyType == typeof(string))
  455. && string.Equals(name, propertyName, StringComparison.OrdinalIgnoreCase))
  456. {
  457. tStr = value?.ToString() ?? string.Empty;
  458. break;
  459. }
  460. }
  461. return tStr;
  462. }
  463. /// <summary>
  464. /// 天轨机器人取放动作
  465. /// </summary>
  466. ///
  467. public async Task<ResponseECSData> CutterRobotAction(RequestData<CutterLocationData> req)
  468. {
  469. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "任务接受===>>" + JsonConvert.SerializeObject(req),
  470. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  471. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "执行成功");
  472. SiemensS7Net s7 = null;
  473. try
  474. {
  475. // 获取所有在线的设备
  476. List<Device> devices = _deviceService.GetDeviceList();
  477. // 比较在线设备是否在其中
  478. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  479. if (device == null)
  480. {
  481. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  482. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  483. responseData.result = "false";
  484. responseData.resultMsg = "设备已离线:" + req.url;
  485. return responseData;
  486. }
  487. // 根据ip查询设备
  488. CcsAction actionQuery = new CcsAction();
  489. actionQuery.OperateType = ActionTypeEnum.CutterRobotAction.ToString();
  490. actionQuery.Ip = req.url;
  491. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  492. // 进行plc的连接
  493. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  494. OperateResult ConnectionResult = s7.ConnectServer();
  495. if (!ConnectionResult.IsSuccess)
  496. {
  497. s7.ConnectClose();
  498. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  499. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  500. responseData.result = "false";
  501. responseData.resultMsg = ActionTypeEnum.CutterRobotAction + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  502. return responseData;
  503. }
  504. // 检查出发地,目的地比对数据开始====
  505. if (req.data.LocationDevice != null)
  506. { // 判断取料设备是否满足条件
  507. CcsActionDeviceSourceCheck ccsActionDeviceSourceCheck = new CcsActionDeviceSourceCheck();
  508. ccsActionDeviceSourceCheck.Type = CcsActionDeviceSourceCheckTypeEnum.CHECK.ToString();
  509. ccsActionDeviceSourceCheck.ActionId = actionInfo.Id;
  510. ccsActionDeviceSourceCheck.DeviceCode = req.data.LocationDevice;
  511. ccsActionDeviceSourceCheck.DeviceSource = "out";
  512. ResponseECSCallbackData callbackData = _ccsActionDeviceSourceCheckService.checkDataAddress(ccsActionDeviceSourceCheck, s7);
  513. if (!callbackData.isSuccess)
  514. {
  515. s7.ConnectClose();
  516. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====" + callbackData.msg + "====" + JsonConvert.SerializeObject(req),
  517. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  518. responseData.result = "false";
  519. responseData.resultMsg = callbackData.msg;
  520. return responseData;
  521. }
  522. }
  523. if (req.data.DestLocationDevice != null)
  524. {
  525. CcsActionDeviceSourceCheck ccsActionDeviceSourceCheck = new CcsActionDeviceSourceCheck();
  526. ccsActionDeviceSourceCheck.Type = CcsActionDeviceSourceCheckTypeEnum.CHECK.ToString();
  527. ccsActionDeviceSourceCheck.ActionId = actionInfo.Id;
  528. ccsActionDeviceSourceCheck.DeviceCode = req.data.DestLocationDevice;
  529. ccsActionDeviceSourceCheck.DeviceSource = "in";
  530. ResponseECSCallbackData callbackData = _ccsActionDeviceSourceCheckService.checkDataAddress(ccsActionDeviceSourceCheck, s7);
  531. if (!callbackData.isSuccess)
  532. {
  533. s7.ConnectClose();
  534. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "====" + callbackData.msg + "====" + JsonConvert.SerializeObject(req),
  535. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  536. responseData.result = "false";
  537. responseData.resultMsg = callbackData.msg;
  538. return responseData;
  539. }
  540. }
  541. // 检查出发地,目的地比对数据结束===
  542. //=========================上下料站请求判断 开始======================
  543. // 目标点位是上下料站的判断下料请求是否为true,上料请求为false,
  544. // 如果不是判断上料请求是否为true,
  545. // 是提示状态不对,否则写下料请求状态
  546. // 上料料请求
  547. //=========================上下料站请求判断 结束======================
  548. // 查询需要操作的plc的db块
  549. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  550. actionAddressQuery.ActionId = actionInfo.Id;
  551. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  552. //查询出需要检查的地址列表
  553. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  554. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  555. {
  556. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  557. {
  558. string operateResult = "";
  559. if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.BOOL.ToString()))
  560. {
  561. operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  562. }
  563. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.SHORT.ToString()))
  564. {
  565. operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  566. }
  567. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.String.ToString()))
  568. {
  569. operateResult = s7.ReadString(actionAddress.Address).Content.ToString();
  570. }
  571. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.Byte.ToString()))
  572. {
  573. operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
  574. }
  575. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  576. {
  577. s7.ConnectClose();
  578. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(req),
  579. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  580. responseData.result = "false";
  581. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  582. return responseData;
  583. }
  584. }
  585. }
  586. // 报文
  587. string baowen = null;
  588. //查询需要写入地址列表
  589. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  590. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  591. {
  592. if (!string.IsNullOrEmpty(actionAddress.Address))
  593. {
  594. string parValue = "";
  595. // 写入取放点位、需要进行点位拼接
  596. if (actionAddress.Sort == 1)
  597. {
  598. //区域块为七位,点位为三位
  599. //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');
  600. parValue = req.data.Location + req.data.DestLocation;
  601. baowen = Convert.ToString(parValue);
  602. s7.Write(actionAddress.Address, baowen);
  603. }
  604. else if (actionAddress.Sort == 2)
  605. {
  606. // 需要写入启动状态
  607. parValue = actionAddress.Value;
  608. s7.Write(actionAddress.Address, Convert.ToBoolean(parValue));
  609. }
  610. else if (actionAddress.Sort == 3)
  611. {
  612. // 写入源刀位号
  613. parValue = req.data.LocationNo;
  614. if (req.data.LocationNo == null || req.data.LocationNo == "")
  615. {
  616. parValue = "0";
  617. }
  618. s7.Write(actionAddress.Address, Convert.ToByte(parValue));
  619. }
  620. else if (actionAddress.Sort == 4)
  621. {
  622. // 写入目的刀位号
  623. parValue = req.data.DestLocationNo;
  624. if (req.data.DestLocationNo == null || req.data.DestLocationNo == "")
  625. {
  626. parValue = "0";
  627. }
  628. s7.Write(actionAddress.Address, Convert.ToByte(parValue));
  629. }
  630. else if (actionAddress.Sort == 5) {
  631. parValue = req.data.rfid;
  632. s7.Write(actionAddress.Address, Convert.ToInt16(parValue));
  633. }
  634. // 同步TagValue数据状态
  635. CcsTagValue tagValueQuery = new CcsTagValue();
  636. tagValueQuery.Ip = req.url;
  637. tagValueQuery.Address = actionAddress.Address;
  638. CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).ToList().FirstOrDefault();
  639. if (tagValue != null)
  640. {
  641. tagValue.TagValue = parValue;
  642. await _ccsTagValueService.Update(tagValue);
  643. }
  644. Thread.Sleep(SLEEP_TIME);
  645. }
  646. }
  647. s7.ConnectClose();
  648. //插入回调
  649. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.CutterRobotAction.ToString(),
  650. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction), req.taskId, req.taskNodeId);
  651. taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData);
  652. //比较数据设为动态数据
  653. taskCallbackData.CallBackCheckAddressValue = baowen;
  654. // 保存数据
  655. await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  656. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction) + "命令下发成功===>>" + JsonConvert.SerializeObject(req)
  657. , EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  658. return responseData;
  659. }
  660. catch (Exception ex)
  661. {
  662. // 记录日志
  663. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterRobotAction + "取放异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  664. EnumHelper.GetDescription(ActionTypeEnum.CutterRobotAction));
  665. responseData.resultMsg = ActionTypeEnum.CutterRobotAction + "取放异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
  666. responseData.result = "false";
  667. // 关闭plc连接
  668. if (s7 != null)
  669. {
  670. s7.ConnectClose();
  671. }
  672. return responseData;
  673. }
  674. }
  675. /// <summary>
  676. /// CNC刀具库请求上下料动作
  677. /// </summary>
  678. /// <param name="req"></param>
  679. /// <returns></returns>
  680. public async Task<ResponseECSData> CutterDeviceTakeOrPutRequest(RequestData<CutterLocationData> req)
  681. {
  682. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterCncDeviceAction + "任务接受===>>" + JsonConvert.SerializeObject(req),
  683. EnumHelper.GetDescription(ActionTypeEnum.CutterCncDeviceAction));
  684. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "执行成功");
  685. SiemensS7Net s7 = null;
  686. String dizhi = "";
  687. try
  688. {
  689. dizhi = req.data.Location;
  690. if (req.data.Location == null) {
  691. dizhi = req.data.DestLocation;
  692. }
  693. // 获取所有在线的设备
  694. List<Device> devices = _deviceService.GetDeviceList();
  695. // 比较在线设备是否在其中
  696. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  697. if (device == null)
  698. {
  699. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterCncDeviceAction+ dizhi + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  700. EnumHelper.GetDescription(ActionTypeEnum.CutterCncDeviceAction));
  701. responseData.result = "false";
  702. responseData.resultMsg = "设备已离线:" + req.url;
  703. return responseData;
  704. }
  705. // 根据ip查询设备
  706. CcsAction actionQuery = new CcsAction();
  707. actionQuery.OperateType = ActionTypeEnum.CutterCncDeviceAction.ToString() + dizhi;
  708. actionQuery.Ip = req.url;
  709. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  710. // 进行plc的连接
  711. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  712. OperateResult ConnectionResult = s7.ConnectServer();
  713. if (!ConnectionResult.IsSuccess)
  714. {
  715. s7.ConnectClose();
  716. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterCncDeviceAction + dizhi + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  717. EnumHelper.GetDescription(ActionTypeEnum.CutterCncDeviceAction));
  718. responseData.result = "false";
  719. responseData.resultMsg = ActionTypeEnum.CutterCncDeviceAction + dizhi + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  720. return responseData;
  721. }
  722. // 查询需要操作的plc的db块
  723. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  724. actionAddressQuery.ActionId = actionInfo.Id;
  725. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  726. //查询出需要检查的地址列表
  727. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  728. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  729. {
  730. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  731. {
  732. string operateResult = "";
  733. if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.BOOL.ToString()))
  734. {
  735. operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  736. }
  737. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.SHORT.ToString()))
  738. {
  739. operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  740. }
  741. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.String.ToString()))
  742. {
  743. operateResult = s7.ReadString(actionAddress.Address).Content.ToString();
  744. }
  745. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.Byte.ToString()))
  746. {
  747. operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
  748. }
  749. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  750. {
  751. s7.ConnectClose();
  752. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterCncDeviceAction + dizhi + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(req),
  753. EnumHelper.GetDescription(ActionTypeEnum.CutterCncDeviceAction));
  754. responseData.result = "false";
  755. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  756. return responseData;
  757. }
  758. }
  759. }
  760. //查询需要写入地址列表
  761. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  762. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  763. {
  764. if (!string.IsNullOrEmpty(actionAddress.Address))
  765. {
  766. string parValue = "";
  767. // 写入取放点位、需要进行点位拼接
  768. if (actionAddress.Sort == 1)
  769. {
  770. string before = "EMPTY00000";
  771. if (req.data.Location != null && req.data.Location.Length>0) {
  772. int separatorIndex = req.data.LocationNo.IndexOf(".");
  773. string substring = req.data.LocationNo.Substring(separatorIndex+1); // 从第7个字符开始截取5个字符
  774. int num = int.Parse(substring);
  775. string formatted = num.ToString("D2");
  776. before = "ATC00" + formatted + req.data.Location.Substring(7, 3);
  777. }
  778. string theTail = "EMPTY00000";
  779. if (req.data.DestLocation != null && req.data.DestLocation.Length>0) {
  780. int separatorIndex = req.data.DestLocationNo.IndexOf(".");
  781. string substring = req.data.DestLocationNo.Substring(separatorIndex+1); // 从第7个字符开始截取5个字符
  782. int num = int.Parse(substring);
  783. string formatted = num.ToString("D2");
  784. theTail = "ATC00" + formatted + req.data.DestLocation.Substring(7, 3);
  785. }
  786. parValue = before + theTail;
  787. s7.Write(actionAddress.Address, Convert.ToString(parValue));
  788. }
  789. else if (actionAddress.Sort == 2)
  790. {
  791. // 需要写入启动状态
  792. parValue = actionAddress.Value;
  793. s7.Write(actionAddress.Address, Convert.ToBoolean(parValue));
  794. }
  795. // 同步TagValue数据状态
  796. CcsTagValue tagValueQuery = new CcsTagValue();
  797. tagValueQuery.Ip = req.url;
  798. tagValueQuery.Address = actionAddress.Address;
  799. CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).ToList().FirstOrDefault();
  800. if (tagValue != null)
  801. {
  802. tagValue.TagValue = parValue;
  803. await _ccsTagValueService.Update(tagValue);
  804. }
  805. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterCncDeviceAction + "CNC刀具库请求上下料动作数据写入成功===>>" + JsonConvert.SerializeObject(tagValue),
  806. EnumHelper.GetDescription(ActionTypeEnum.CutterCncDeviceAction));
  807. Thread.Sleep(SLEEP_TIME);
  808. }
  809. }
  810. s7.ConnectClose();
  811. return responseData;
  812. }
  813. catch (Exception ex)
  814. {
  815. // 记录日志
  816. Log.Instance.WriteLogAdd(ActionTypeEnum.CutterCncDeviceAction + dizhi + "取放异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  817. EnumHelper.GetDescription(ActionTypeEnum.CutterCncDeviceAction));
  818. responseData.resultMsg = ActionTypeEnum.CutterCncDeviceAction + dizhi + "取放异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
  819. responseData.result = "false";
  820. // 关闭plc连接
  821. if (s7 != null)
  822. {
  823. s7.ConnectClose();
  824. }
  825. return responseData;
  826. }
  827. }
  828. /// <summary>
  829. /// 上传文件
  830. /// </summary>
  831. public async Task<ResponseECSData> UploadFile(RequestData<UploadFileData> req)
  832. {
  833. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "任务接受===>>" + JsonConvert.SerializeObject(req),
  834. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  835. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  836. try
  837. {
  838. List<Device> devices = _deviceService.GetDeviceList();
  839. Device deviceFtp = devices.Where(x => x.Ip.Equals(req.url)
  840. && x.ProtocolType.Equals(ProtocalTypeEnum.FTP.ToString())).FirstOrDefault();
  841. Device deviceOpcUa = devices.Where(x => x.Ip.Equals(req.url)
  842. && x.ProtocolType.Equals(ProtocalTypeEnum.OPCUA.ToString())).FirstOrDefault();
  843. Device deviceHeidenhain = devices.Where(x => x.Ip.Equals(req.url)
  844. && x.ProtocolType.Equals(ProtocalTypeEnum.HEIDEHAIN.ToString())).FirstOrDefault();
  845. if (deviceOpcUa == null && deviceHeidenhain == null)
  846. {
  847. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  848. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  849. responseData.result = "false";
  850. responseData.resultMsg = ActionTypeEnum.UploadFile + "设备已离线===>>" + JsonConvert.SerializeObject(req);
  851. return responseData;
  852. }
  853. //西门子系统上传
  854. if (deviceOpcUa != null)
  855. {
  856. RequestOpcUaData opcUaReq = new RequestOpcUaData();
  857. opcUaReq.ServerUrl = deviceOpcUa.ServerUrl;
  858. opcUaReq.UserName = deviceOpcUa.UserName;
  859. opcUaReq.Password = deviceOpcUa.Password;
  860. opcUaReq.Path = req.data.fileName;
  861. opcUaReq.Type = OpcUaActionTypeEnum.Upload.ToString();
  862. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, opcuacUrlContext, opcUaReq, null);
  863. ResponseOpcUaData responseOpcUaData = JsonConvert.DeserializeObject<ResponseOpcUaData>(Result.Message);
  864. if (!Result.IsSuccess || !responseOpcUaData.result)
  865. {
  866. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常===>>" + JsonConvert.SerializeObject(req),
  867. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  868. responseData.result = "false";
  869. responseData.resultMsg = Result.Message;
  870. return responseData;
  871. }
  872. }
  873. else if(deviceHeidenhain != null)
  874. {
  875. RequestHeidhData hdhReq = new RequestHeidhData();
  876. hdhReq.ServerUrl = deviceHeidenhain.ServerUrl;
  877. hdhReq.MachineName = deviceHeidenhain.UserName;
  878. hdhReq.Path = req.data.fileName;
  879. hdhReq.Type = OpcUaActionTypeEnum.Upload.ToString();
  880. //远程机床相对路径
  881. hdhReq.Address = req.data.remotePath;
  882. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
  883. ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  884. if (!Result.IsSuccess || !responseHeidhData.result)
  885. {
  886. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "预上传异常===>>" + JsonConvert.SerializeObject(req),
  887. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  888. responseData.result = "false";
  889. responseData.resultMsg = responseHeidhData.msg;
  890. return responseData;
  891. }
  892. }
  893. //插入回调
  894. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.UploadFile.ToString(),
  895. EnumHelper.GetDescription(ActionTypeEnum.UploadFile), req.taskId, req.taskNodeId);
  896. await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  897. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传成功===>>" + JsonConvert.SerializeObject(req),
  898. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  899. return responseData;
  900. }
  901. catch (Exception ex)
  902. {
  903. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  904. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  905. responseData.resultMsg = ActionTypeEnum.UploadFile + "上传异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
  906. responseData.result = "false";
  907. return responseData;
  908. }
  909. }
  910. /// <summary>
  911. /// 启动机床程序
  912. /// </summary>
  913. public async Task<ResponseECSData> StartNCProgram(RequestData<StartNCProgramData> req)
  914. {
  915. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "任务接受===>>" + JsonConvert.SerializeObject(req),
  916. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  917. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  918. try
  919. {
  920. List<Device> devices = _deviceService.GetDeviceList();
  921. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  922. if (device == null)
  923. {
  924. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  925. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  926. responseData.result = "false";
  927. responseData.resultMsg = ActionTypeEnum.StartNCProgram + "设备已离线===>>" + JsonConvert.SerializeObject(req);
  928. return responseData;
  929. }
  930. CcsAction actionQuery = new CcsAction();
  931. actionQuery.OperateType = ActionTypeEnum.StartNCProgram.ToString();
  932. actionQuery.Ip = req.url;
  933. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  934. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  935. actionAddressQuery.ActionId = actionInfo.Id;
  936. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  937. //opcua启动程序
  938. if (actionInfo.ProtocolType == ProtocalTypeEnum.OPCUA.ToString())
  939. {
  940. //插入回调
  941. //获取启动前放的 工位
  942. TaskCallback queryTaskCallBack = new TaskCallback();
  943. queryTaskCallBack.IP = actionInfo.PlcIp;
  944. queryTaskCallBack.Description = ProtocalTypeEnum.OPCUA.ToString();
  945. TaskCallback TaskBean = await _taskCallbackService.GetRobotActionList(queryTaskCallBack);
  946. TaskCallback taskCallbackData = new TaskCallback(actionInfo.PlcIp, ActionTypeEnum.StartNCProgram.ToString(),
  947. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram), req.taskId, req.taskNodeId);
  948. taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData);
  949. taskCallbackData.Description = ProtocalTypeEnum.OPCUA.ToString();
  950. if(TaskBean != null)
  951. {
  952. taskCallbackData.Data = TaskBean.Data;
  953. }
  954. else
  955. {
  956. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "失败,上一放动作 没有工位信息===>>" + JsonConvert.SerializeObject(req),
  957. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  958. return responseData;
  959. }
  960. await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  961. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req),
  962. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  963. return responseData;
  964. }
  965. else if (actionInfo.ProtocolType == ProtocalTypeEnum.HEIDEHAIN.ToString())
  966. {
  967. //调用机器人plc启动海德汉程序
  968. //SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.PlcIp);
  969. //OperateResult ConnectionResult = s7.ConnectServer();
  970. //if (!ConnectionResult.IsSuccess)
  971. //{
  972. // s7.ConnectClose();
  973. // Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  974. // EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  975. // responseData.result = "false";
  976. // return responseData;
  977. //}
  978. ////查询条件
  979. //List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  980. //foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  981. //{
  982. // if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  983. // {
  984. // string operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  985. // if (actionAddress.CheckType ? operateResult.Equals(actionAddress.Value) : operateResult != actionAddress.Value)
  986. // {
  987. // s7.ConnectClose();
  988. // Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
  989. // EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  990. // responseData.result = "false";
  991. // return responseData;
  992. // }
  993. // }
  994. //}
  995. //s7.ConnectClose();
  996. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "任务接受===>>" + JsonConvert.SerializeObject(req),
  997. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  998. RequestHeidhData hdhReq = new RequestHeidhData();
  999. hdhReq.ServerUrl = device.ServerUrl;
  1000. hdhReq.MachineName = device.UserName;
  1001. hdhReq.Path = req.data.remotePath;
  1002. hdhReq.Type = OpcUaActionTypeEnum.StartNcProgram.ToString();
  1003. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
  1004. ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  1005. if (!Result.IsSuccess || !responseHeidhData.result)
  1006. {
  1007. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req),
  1008. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  1009. responseData.result = "false";
  1010. responseData.resultMsg = responseHeidhData.msg;
  1011. responseData.resultMsg = ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req);
  1012. return responseData;
  1013. }
  1014. //插入回调
  1015. TaskCallback taskCallbackData = new TaskCallback(actionInfo.PlcIp, ActionTypeEnum.StartNCProgram.ToString(),
  1016. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram), req.taskId, req.taskNodeId);
  1017. await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
  1018. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "调用成功===>>" + JsonConvert.SerializeObject(req),
  1019. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  1020. return responseData;
  1021. }
  1022. else
  1023. {
  1024. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req),
  1025. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  1026. responseData.result = "false";
  1027. responseData.resultMsg = ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req);
  1028. return responseData;
  1029. }
  1030. }
  1031. catch (Exception ex)
  1032. {
  1033. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "程序异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1034. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  1035. responseData.result = "false";
  1036. return responseData;
  1037. }
  1038. }
  1039. /// <summary>
  1040. /// 启动清洗机
  1041. /// </summary>
  1042. public async Task<ResponseECSData> StartCleanMachine(RequestData<object> req)
  1043. {
  1044. Log.Instance.WriteLogAdd(ActionTypeEnum.StartCleanMachine + "任务接受===>>" + JsonConvert.SerializeObject(req),
  1045. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  1046. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1047. try
  1048. {
  1049. List<Device> devices = _deviceService.GetDeviceList();
  1050. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  1051. if (device == null)
  1052. {
  1053. Log.Instance.WriteLogAdd(ActionTypeEnum.StartCleanMachine + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1054. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  1055. responseData.result = "false";
  1056. responseData.resultMsg= ActionTypeEnum.StartCleanMachine + "设备已离线===>>" + JsonConvert.SerializeObject(req);
  1057. return responseData;
  1058. }
  1059. CcsAction actionQuery = new CcsAction();
  1060. actionQuery.OperateType = ActionTypeEnum.StartCleanMachine.ToString();
  1061. actionQuery.Ip = req.url;
  1062. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1063. SiemensS7Net s7 = DevicePlcS7.SiemensS7(req.url);
  1064. HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
  1065. if (!ConnectionResult.IsSuccess)
  1066. {
  1067. s7.ConnectClose();
  1068. Log.Instance.WriteLogAdd(ActionTypeEnum.StartCleanMachine + "启动故障===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1069. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  1070. responseData.result = "false";
  1071. return responseData;
  1072. }
  1073. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1074. actionAddressQuery.ActionId = actionInfo.Id;
  1075. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1076. s7.ConnectClose();
  1077. //插入回调
  1078. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.StartCleanMachine.ToString(),
  1079. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine), req.taskId, req.taskNodeId);
  1080. await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
  1081. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine) + "启动成功===>>" + JsonConvert.SerializeObject(req)
  1082. , EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  1083. return responseData;
  1084. }
  1085. catch (Exception ex)
  1086. {
  1087. Log.Instance.WriteLogAdd(ActionTypeEnum.StartCleanMachine + "启动故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1088. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  1089. responseData.result = "false";
  1090. return responseData;
  1091. }
  1092. }
  1093. /// <summary>
  1094. /// 启动吹干
  1095. /// </summary>
  1096. public async Task<ResponseECSData> StartDryMachine(RequestData<object> req)
  1097. {
  1098. Log.Instance.WriteLogAdd(ActionTypeEnum.StartDryMachine + "任务接受===>>" + JsonConvert.SerializeObject(req),
  1099. EnumHelper.GetDescription(ActionTypeEnum.StartDryMachine));
  1100. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1101. try
  1102. {
  1103. List<Device> devices = _deviceService.GetDeviceList();
  1104. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  1105. if (device == null)
  1106. {
  1107. Log.Instance.WriteLogAdd(ActionTypeEnum.StartDryMachine + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1108. EnumHelper.GetDescription(ActionTypeEnum.StartDryMachine));
  1109. responseData.result = "false";
  1110. return responseData;
  1111. }
  1112. CcsAction actionQuery = new CcsAction();
  1113. actionQuery.OperateType = ActionTypeEnum.StartDryMachine.ToString();
  1114. actionQuery.Ip = req.url;
  1115. CcsAction action = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1116. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1117. actionAddressQuery.ActionId = action.Id;
  1118. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1119. SiemensS7Net s7 = DevicePlcS7.SiemensS7(req.url);
  1120. HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
  1121. if (!ConnectionResult.IsSuccess)
  1122. {
  1123. s7.ConnectClose();
  1124. Log.Instance.WriteLogAdd(ActionTypeEnum.StartDryMachine + "启动吹干机异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1125. EnumHelper.GetDescription(ActionTypeEnum.StartDryMachine));
  1126. responseData.result = "false";
  1127. return responseData;
  1128. }
  1129. s7.ConnectClose();
  1130. //插入回调
  1131. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.StartDryMachine.ToString(),
  1132. EnumHelper.GetDescription(ActionTypeEnum.StartDryMachine), req.taskId, req.taskNodeId);
  1133. await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
  1134. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.StartDryMachine) + "启动吹干机成功===>>" + JsonConvert.SerializeObject(req)
  1135. , EnumHelper.GetDescription(ActionTypeEnum.StartDryMachine));
  1136. return responseData;
  1137. }
  1138. catch (Exception ex)
  1139. {
  1140. Log.Instance.WriteLogAdd(ActionTypeEnum.StartDryMachine + "启动吹干机故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1141. EnumHelper.GetDescription(ActionTypeEnum.StartDryMachine));
  1142. responseData.result = "false";
  1143. return responseData;
  1144. }
  1145. }
  1146. /// <summary>
  1147. /// 刀具接口列表
  1148. /// </summary>
  1149. public async Task<ResponseData<List<ResponseToolData>>> GetTools(RequestToolData req)
  1150. {
  1151. Log.Instance.WriteLogAdd(ActionTypeEnum.ToolList + "任务接受===>>" + JsonConvert.SerializeObject(req),
  1152. EnumHelper.GetDescription(ActionTypeEnum.ToolList));
  1153. ResponseData<List<ResponseToolData>> responseData = new ResponseData<List<ResponseToolData>>();
  1154. responseData.result = "true";
  1155. List<Device> devices = _deviceService.GetDeviceList();
  1156. List<Device> deviceList = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).ToList();
  1157. if (deviceList ==null || deviceList.Count <= 0) {
  1158. throw new InvalidOperationException("没查询到在线设备数据");
  1159. }
  1160. Device device = deviceList.FirstOrDefault();
  1161. List<ResponseToolData> list = new List<ResponseToolData>();
  1162. if (device.ProtocolType == ProtocalTypeEnum.OPCUA.ToString())
  1163. {
  1164. CcsTagValue tagValueQuery = new CcsTagValue();
  1165. tagValueQuery.Ip = req.url;
  1166. tagValueQuery.Component = "刀具";
  1167. List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery);
  1168. List<CcsTagValue> toolNumberList = tagValues.GroupBy(x => x.ComponentNumber)
  1169. .Select(group => new CcsTagValue
  1170. {
  1171. ComponentNumber = group.Key
  1172. }).ToList();
  1173. foreach (CcsTagValue toolNumber in toolNumberList)
  1174. {
  1175. ResponseToolData toolData = new ResponseToolData();
  1176. foreach (CcsTagValue tagValue in tagValues)
  1177. {
  1178. if (toolNumber.ComponentNumber == tagValue.ComponentNumber)
  1179. {
  1180. toolData.number = toolNumber.ComponentNumber;
  1181. if (tagValue.Description == "刀具寿命预警")
  1182. {
  1183. toolData.warnLife = tagValue.TagValue;
  1184. }
  1185. else if (tagValue.Description == "刀具寿命目标值")
  1186. {
  1187. toolData.targetLife = tagValue.TagValue;
  1188. }
  1189. else if (tagValue.Description == "工件数")
  1190. {
  1191. toolData.workPiece = tagValue.TagValue;
  1192. }
  1193. else if (tagValue.Description == "工件数预警值")
  1194. {
  1195. toolData.workPieceWarn = tagValue.TagValue;
  1196. }
  1197. else if (tagValue.Description == "工件数目标值")
  1198. {
  1199. toolData.workPieceTarget = tagValue.TagValue;
  1200. }
  1201. else if (tagValue.Description == "磨损量")
  1202. {
  1203. toolData.wear = tagValue.TagValue;
  1204. }
  1205. else if (tagValue.Description == "磨损量预警值")
  1206. {
  1207. toolData.wearWarn = tagValue.TagValue;
  1208. }
  1209. else if (tagValue.Description == "磨损量目标值")
  1210. {
  1211. toolData.wearTarget = tagValue.TagValue;
  1212. }
  1213. else if (tagValue.Description == "刀具名称")
  1214. {
  1215. toolData.name = tagValue.TagValue;
  1216. }
  1217. }
  1218. }
  1219. list.Add(toolData);
  1220. }
  1221. }
  1222. else if (device.ProtocolType == ProtocalTypeEnum.FANUC.ToString())
  1223. {
  1224. string Url = fanucUrlContext + "?ip=" + device.Ip + "&port=" + device.Port;
  1225. //调用发那科接口
  1226. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Get, Url + "&fun=ToolList", null, null);
  1227. if (Result.IsSuccess)
  1228. {
  1229. List<ResponseToolData> responseFanucData = JsonConvert.DeserializeObject<List<ResponseToolData>>(Result.Message);
  1230. //list = JsonConvert.DeserializeObject<List<ResponseToolData>>(Result.Message.ToolLife);
  1231. //list = JsonConvert.DeserializeObject<List<ResponseToolData>>(responseFanucData.ToolLife);
  1232. list = responseFanucData;
  1233. }
  1234. else {
  1235. responseData.result = "false";
  1236. responseData.Msg = Result.Message;
  1237. }
  1238. }
  1239. else if(device.ProtocolType == ProtocalTypeEnum.HEIDEHAIN.ToString())
  1240. {
  1241. //检查机床是否在线,双层校验,检查PLC的DB块
  1242. CcsAction actionQuery = new CcsAction();
  1243. actionQuery.OperateType = ActionTypeEnum.CNCIsOnline.ToString();
  1244. actionQuery.Ip = req.url;
  1245. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1246. if (actionInfo != null) {
  1247. //连接PLC
  1248. SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.PlcIp);
  1249. HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
  1250. if (!ConnectionResult.IsSuccess)
  1251. {
  1252. s7.ConnectClose();
  1253. Log.Instance.WriteLogAdd(ActionTypeEnum.CNCIsOnline + "启动故障===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1254. EnumHelper.GetDescription(ActionTypeEnum.ToolList));
  1255. responseData.result = "false";
  1256. return responseData;
  1257. }
  1258. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1259. actionAddressQuery.ActionId = actionInfo.Id;
  1260. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1261. // 检查字段
  1262. foreach (CcsActionAddress actionAddress in CcsActionAddresses)
  1263. {
  1264. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  1265. {
  1266. string operateResult = "";
  1267. if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.BOOL.ToString()))
  1268. {
  1269. operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  1270. }
  1271. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.SHORT.ToString()))
  1272. {
  1273. operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  1274. }
  1275. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.String.ToString()))
  1276. {
  1277. operateResult = s7.ReadString(actionAddress.Address).Content.ToString();
  1278. }
  1279. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.Byte.ToString()))
  1280. {
  1281. operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
  1282. }
  1283. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  1284. {
  1285. s7.ConnectClose();
  1286. Log.Instance.WriteLogAdd(ActionTypeEnum.CNCIsOnline + "机床不在线===>>" + "条件不满足,参数:"+ actionAddress.Address,
  1287. EnumHelper.GetDescription(ActionTypeEnum.ToolList));
  1288. responseData.result = "false";
  1289. responseData.Msg = "机床不在线,条件不满足:" + actionAddress.Address;
  1290. return responseData;
  1291. }
  1292. }
  1293. }
  1294. }
  1295. // 读取机床刀具数据
  1296. RequestHeidhData hdhReq = new RequestHeidhData();
  1297. hdhReq.ServerUrl = device.ServerUrl;
  1298. hdhReq.MachineName = device.UserName;
  1299. hdhReq.Type = ActionTypeEnum.ToolList.ToString();
  1300. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
  1301. if (Result.IsSuccess)
  1302. {
  1303. ResponseHeidhData response = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  1304. list = JsonConvert.DeserializeObject<List<ResponseToolData>>(response.toolsInfo);
  1305. }
  1306. else
  1307. {
  1308. Log.Instance.WriteLogAdd(ActionTypeEnum.ToolList + "任务执行失败===>>" + JsonConvert.SerializeObject(Result),
  1309. EnumHelper.GetDescription(ActionTypeEnum.ToolList));
  1310. responseData.result = "false";
  1311. responseData.Msg = Result.Message;
  1312. }
  1313. }
  1314. responseData.Data = list;
  1315. responseData.Total = list.Count;
  1316. return responseData;
  1317. }
  1318. /// <summary>
  1319. /// 设备上线离线
  1320. /// </summary>
  1321. public async Task<ResponseCommonData> UpdateDeviceState(RequestDeviceUpdateData req)
  1322. {
  1323. ResponseCommonData responseData = new ResponseCommonData();
  1324. List<Device> devices = _deviceService.GetDevices();
  1325. try
  1326. {
  1327. Device device = devices.Where(x => x.Ip == req.ip).FirstOrDefault();
  1328. if (device == null)
  1329. {
  1330. responseData.msg = "设备不存在";
  1331. responseData.result = "false";
  1332. return responseData;
  1333. }
  1334. device.UseState = req.useState;
  1335. device.OfflineUpdateTime = DateTime.Now;
  1336. await _deviceService.UpdateAndCache(device);
  1337. return responseData;
  1338. }
  1339. catch (Exception ex)
  1340. {
  1341. responseData.msg = ex.Message;
  1342. responseData.result = "false";
  1343. return responseData;
  1344. }
  1345. }
  1346. /// <summary>
  1347. /// 获取回调列表
  1348. /// </summary>
  1349. public async Task<List<TaskCallback>> GetCallBackListByCondition(RequestCallBackData vo)
  1350. {
  1351. List<TaskCallback> list = new List<TaskCallback>();
  1352. try {
  1353. TaskCallback taskCallback = new TaskCallback();
  1354. if (!string.IsNullOrEmpty(vo.IP))
  1355. {
  1356. taskCallback.IP = vo.IP;
  1357. }
  1358. if (!string.IsNullOrEmpty(vo.TaskId))
  1359. {
  1360. taskCallback.TaskId = vo.TaskId;
  1361. }
  1362. if (!string.IsNullOrEmpty(vo.TaskNodeId))
  1363. {
  1364. taskCallback.TaskNodeId = vo.TaskNodeId;
  1365. }
  1366. list = await _taskCallbackService.GetListByCondition(taskCallback);
  1367. }
  1368. catch (Exception ex)
  1369. {
  1370. return list;
  1371. }
  1372. return list;
  1373. }
  1374. //设置回调值
  1375. private TaskCallback setCallBackValue(List<CcsActionAddress> CcsActionAddresses, TaskCallback taskCallbackData)
  1376. {
  1377. List<CcsActionAddress> CcsActionAddressCallBackChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CALLBACK_CHECK.ToString()).ToList();
  1378. List<CcsActionAddress> CcsActionAddressCallBacks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CALLBACK.ToString()).ToList();
  1379. List<CcsActionAddress> CcsActionAddressCallBackFails = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CALLBACK_FAIL.ToString()).ToList();
  1380. List<CcsActionAddress> CcsActionAddressCallBackResets = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.RESET.ToString()).ToList();
  1381. // 回调检查项
  1382. foreach (var item in CcsActionAddressCallBackChecks)
  1383. {
  1384. if (item.Sort == 1)
  1385. {
  1386. taskCallbackData.CallBackCheckAddress = item.Address;
  1387. taskCallbackData.CallBackCheckAddressValue = item.Value;
  1388. }
  1389. }
  1390. foreach (CcsActionAddress actionAddress in CcsActionAddressCallBacks)
  1391. {
  1392. if (actionAddress.Sort == 1)
  1393. {
  1394. taskCallbackData.Address = actionAddress.Address;
  1395. taskCallbackData.CallbackValue = actionAddress.Value;
  1396. }
  1397. else if (actionAddress.Sort == 2)
  1398. {
  1399. taskCallbackData.Address2 = actionAddress.Address;
  1400. taskCallbackData.CallbackValue2 = actionAddress.Value;
  1401. }
  1402. else if (actionAddress.Sort == 3)
  1403. {
  1404. taskCallbackData.Address3 = actionAddress.Address;
  1405. taskCallbackData.CallbackValue3 = actionAddress.Value;
  1406. }
  1407. }
  1408. foreach (CcsActionAddress actionAddress in CcsActionAddressCallBackFails)
  1409. {
  1410. if (actionAddress.Sort == 1)
  1411. {
  1412. taskCallbackData.FailAddress = actionAddress.Address;
  1413. taskCallbackData.CallbackFailValue = actionAddress.Value;
  1414. }
  1415. else if (actionAddress.Sort == 2)
  1416. {
  1417. taskCallbackData.FailAddress2 = actionAddress.Address;
  1418. taskCallbackData.CallbackFailValue2 = actionAddress.Value;
  1419. }
  1420. else if (actionAddress.Sort == 3)
  1421. {
  1422. taskCallbackData.FailAddress3 = actionAddress.Address;
  1423. taskCallbackData.CallbackFailValue3 = actionAddress.Value;
  1424. }
  1425. }
  1426. foreach (CcsActionAddress actionAddress in CcsActionAddressCallBackResets)
  1427. {
  1428. if (actionAddress.Sort == 1)
  1429. {
  1430. taskCallbackData.SuccessResetAddress = actionAddress.Address;
  1431. taskCallbackData.SuccessResetValue = actionAddress.Value;
  1432. }
  1433. else if (actionAddress.Sort == 2)
  1434. {
  1435. taskCallbackData.SuccessResetAddress2 = actionAddress.Address;
  1436. taskCallbackData.SuccessResetValue2 = actionAddress.Value;
  1437. }
  1438. }
  1439. taskCallbackData.FailNumber = 0;
  1440. return taskCallbackData;
  1441. }
  1442. public async Task<ResponseECSData> PushPushToMachine(RequestData<CutterTestData> req)
  1443. {
  1444. Log.Instance.WriteLogAdd(ActionTypeEnum.ReadAndWriteTool + "任务接受===>>" + JsonConvert.SerializeObject(req),
  1445. EnumHelper.GetDescription(ActionTypeEnum.ReadAndWriteTool));
  1446. // 1、根据url查询设备信息 2、调用httpserveer 发送执行消息
  1447. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1448. try
  1449. {
  1450. List<Device> devices = _deviceService.GetDeviceList();
  1451. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  1452. if (device == null)
  1453. {
  1454. Log.Instance.WriteLogAdd(ActionTypeEnum.ReadAndWriteTool + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1455. EnumHelper.GetDescription(ActionTypeEnum.ReadAndWriteTool));
  1456. responseData.result = "false";
  1457. responseData.resultMsg = ActionTypeEnum.ReadAndWriteTool + "设备已离线===>>" + JsonConvert.SerializeObject(req);
  1458. return responseData;
  1459. }
  1460. if (device.ProtocolType == ProtocalTypeEnum.HEIDEHAIN.ToString())
  1461. {
  1462. RequestHeidhData hdhReq = new RequestHeidhData();
  1463. hdhReq.ServerUrl = device.ServerUrl;
  1464. hdhReq.MachineName = device.UserName;
  1465. hdhReq.Type = ActionTypeEnum.ReadAndWriteTool.ToString();
  1466. hdhReq.CutterData = JsonConvert.SerializeObject(req.data);
  1467. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
  1468. ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  1469. JObject jsonObject = JObject.Parse(Result.Message);
  1470. if (!Result.IsSuccess || !responseHeidhData.result)
  1471. {
  1472. Log.Instance.WriteLogAdd(ActionTypeEnum.ReadAndWriteTool + "机外对刀仪数据上传异常1===>>" + Result,
  1473. EnumHelper.GetDescription(ActionTypeEnum.ReadAndWriteTool));
  1474. responseData.result = "false";
  1475. responseData.resultMsg = jsonObject.GetValue("msg").ToString();
  1476. }
  1477. else
  1478. {
  1479. if (jsonObject.GetValue("result")!=null && bool.Parse(jsonObject.GetValue("result").ToString())) {
  1480. responseData.result = "true";
  1481. responseData.resultMsg = jsonObject.GetValue("msg").ToString();
  1482. responseData.returnData = jsonObject.GetValue("returnData").ToString();
  1483. }
  1484. else {
  1485. Log.Instance.WriteLogAdd(ActionTypeEnum.ReadAndWriteTool + "机外对刀仪数据上传异常2===>>" + Result,
  1486. EnumHelper.GetDescription(ActionTypeEnum.ReadAndWriteTool));
  1487. responseData.result = "false";
  1488. responseData.resultMsg = jsonObject.GetValue("msg").ToString();
  1489. }
  1490. }
  1491. }
  1492. else {
  1493. responseData.result = "false";
  1494. responseData.resultMsg = "没找到对应的类型方法";
  1495. }
  1496. }
  1497. catch (Exception ex) {
  1498. Log.Instance.WriteLogAdd(ActionTypeEnum.ReadAndWriteTool + "任务下发异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1499. EnumHelper.GetDescription(ActionTypeEnum.ReadAndWriteTool));
  1500. responseData.result = "false";
  1501. responseData.resultMsg = ex.Message;
  1502. return responseData;
  1503. }
  1504. return responseData;
  1505. }
  1506. /// <summary>
  1507. /// 查询三坐标是否允许取
  1508. /// </summary>
  1509. public async Task<ResponseECSData> GetMiddleThreeCoordinates(RequestData<RequestToolData> req) {
  1510. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalTakeStatus + "任务接受===>>" + JsonConvert.SerializeObject(req),
  1511. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalTakeStatus));
  1512. // 1、根据url查询设备信息 2、调用httpserveer 发送执行消息
  1513. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "允许下料");
  1514. SiemensS7Net s7 = null;
  1515. try
  1516. {
  1517. // 获取所有在线的设备
  1518. List<Device> devices = _deviceService.GetDeviceList();
  1519. // 比较在线设备是否在其中
  1520. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  1521. if (device == null)
  1522. {
  1523. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalTakeStatus + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1524. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalTakeStatus));
  1525. responseData.result = "false";
  1526. responseData.resultMsg = "设备已离线:" + req.url;
  1527. return responseData;
  1528. }
  1529. // 根据ip查询配置的字节数据
  1530. CcsAction actionQuery = new CcsAction();
  1531. actionQuery.OperateType = ActionTypeEnum.ThreeDimensionalTakeStatus.ToString();
  1532. actionQuery.Ip = req.url;
  1533. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1534. // 进行plc的连接
  1535. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  1536. OperateResult ConnectionResult = s7.ConnectServer();
  1537. if (!ConnectionResult.IsSuccess)
  1538. {
  1539. s7.ConnectClose();
  1540. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalTakeStatus + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),"三坐标");
  1541. responseData.result = "false";
  1542. responseData.resultMsg = ActionTypeEnum.ThreeDimensionalTakeStatus + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  1543. return responseData;
  1544. }
  1545. // 查询需要操作的plc的db块
  1546. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1547. actionAddressQuery.ActionId = actionInfo.Id;
  1548. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1549. //查询出需要检查的地址列表
  1550. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  1551. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  1552. {
  1553. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  1554. {
  1555. string operateResult = "";
  1556. if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.BOOL.ToString()))
  1557. {
  1558. operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  1559. }
  1560. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.SHORT.ToString()))
  1561. {
  1562. operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  1563. }
  1564. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.String.ToString()))
  1565. {
  1566. operateResult = s7.ReadString(actionAddress.Address).Content.ToString();
  1567. }
  1568. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.Byte.ToString()))
  1569. {
  1570. operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
  1571. }
  1572. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  1573. {
  1574. s7.ConnectClose();
  1575. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalTakeStatus + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(req),
  1576. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalTakeStatus));
  1577. responseData.result = "false";
  1578. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  1579. return responseData;
  1580. }
  1581. }
  1582. }
  1583. // 关闭连接
  1584. s7.ConnectClose();
  1585. }
  1586. catch (Exception ex)
  1587. {
  1588. s7.ConnectClose();
  1589. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalTakeStatus + "任务下发异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1590. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalTakeStatus));
  1591. responseData.result = "false";
  1592. responseData.resultMsg = ex.Message;
  1593. return responseData;
  1594. }
  1595. return responseData;
  1596. }
  1597. /// <summary>
  1598. /// 查询三坐标是否允许放
  1599. /// </summary>
  1600. public async Task<ResponseECSData> QueryThreeCoordinatesFreePos(RequestData<RequestToolData> req) {
  1601. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalPutStatus + "任务接受===>>" + JsonConvert.SerializeObject(req),
  1602. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalPutStatus));
  1603. // 1、根据url查询设备信息 2、调用httpserveer 发送执行消息
  1604. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "允许上料");
  1605. SiemensS7Net s7 = null;
  1606. try
  1607. {
  1608. // 获取所有在线的设备
  1609. List<Device> devices = _deviceService.GetDeviceList();
  1610. // 比较在线设备是否在其中
  1611. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  1612. if (device == null)
  1613. {
  1614. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalPutStatus + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1615. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalPutStatus));
  1616. responseData.result = "false";
  1617. responseData.resultMsg = "设备已离线:" + req.url;
  1618. return responseData;
  1619. }
  1620. // 根据ip查询配置的字节数据
  1621. CcsAction actionQuery = new CcsAction();
  1622. actionQuery.OperateType = ActionTypeEnum.ThreeDimensionalPutStatus.ToString();
  1623. actionQuery.Ip = req.url;
  1624. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1625. // 进行plc的连接
  1626. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  1627. OperateResult ConnectionResult = s7.ConnectServer();
  1628. if (!ConnectionResult.IsSuccess)
  1629. {
  1630. s7.ConnectClose();
  1631. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalPutStatus + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1632. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalPutStatus));
  1633. responseData.result = "false";
  1634. responseData.resultMsg = ActionTypeEnum.ThreeDimensionalPutStatus + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  1635. return responseData;
  1636. }
  1637. // 查询需要操作的plc的db块
  1638. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1639. actionAddressQuery.ActionId = actionInfo.Id;
  1640. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1641. //查询出需要检查的地址列表
  1642. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  1643. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  1644. {
  1645. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  1646. {
  1647. string operateResult = "";
  1648. if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.BOOL.ToString()))
  1649. {
  1650. operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  1651. }
  1652. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.SHORT.ToString()))
  1653. {
  1654. operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  1655. }
  1656. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.String.ToString()))
  1657. {
  1658. operateResult = s7.ReadString(actionAddress.Address).Content.ToString();
  1659. }
  1660. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.Byte.ToString()))
  1661. {
  1662. operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
  1663. }
  1664. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  1665. {
  1666. s7.ConnectClose();
  1667. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalPutStatus + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(req),
  1668. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalPutStatus));
  1669. responseData.result = "false";
  1670. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  1671. return responseData;
  1672. }
  1673. }
  1674. }
  1675. // 关闭连接
  1676. s7.ConnectClose();
  1677. }
  1678. catch (Exception ex)
  1679. {
  1680. // 关闭连接
  1681. s7.ConnectClose();
  1682. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalPutStatus + "任务下发异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1683. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalPutStatus));
  1684. responseData.result = "false";
  1685. responseData.resultMsg = ex.Message;
  1686. return responseData;
  1687. }
  1688. return responseData;
  1689. }
  1690. /// <summary>
  1691. /// 三坐标启动
  1692. /// </summary>
  1693. public async Task<ResponseECSData> SendThreeCoordinates(RequestData<ThreeDimensional> req)
  1694. {
  1695. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalRun + "任务接受===>>" + JsonConvert.SerializeObject(req),
  1696. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalRun));
  1697. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "执行成功");
  1698. SiemensS7Net s7 = null;
  1699. try
  1700. {
  1701. // 获取所有在线的设备
  1702. List<Device> devices = _deviceService.GetDeviceList();
  1703. // 比较在线设备是否在其中
  1704. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  1705. if (device == null)
  1706. {
  1707. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalRun + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1708. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalRun));
  1709. responseData.result = "false";
  1710. responseData.resultMsg = "设备已离线:" + req.url;
  1711. return responseData;
  1712. }
  1713. // 根据ip查询设备
  1714. CcsAction actionQuery = new CcsAction();
  1715. actionQuery.OperateType = ActionTypeEnum.ThreeDimensionalRun.ToString();
  1716. actionQuery.Ip = req.url;
  1717. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1718. // 进行plc的连接
  1719. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  1720. OperateResult ConnectionResult = s7.ConnectServer();
  1721. if (!ConnectionResult.IsSuccess)
  1722. {
  1723. s7.ConnectClose();
  1724. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalRun + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1725. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalRun));
  1726. responseData.result = "false";
  1727. responseData.resultMsg = ActionTypeEnum.ThreeDimensionalRun + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  1728. return responseData;
  1729. }
  1730. // 查询需要操作的plc的db块
  1731. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1732. actionAddressQuery.ActionId = actionInfo.Id;
  1733. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1734. //查询出需要检查的地址列表
  1735. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  1736. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  1737. {
  1738. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  1739. {
  1740. string operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
  1741. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  1742. {
  1743. s7.ConnectClose();
  1744. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalRun + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(req),
  1745. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalRun));
  1746. responseData.result = "false";
  1747. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  1748. return responseData;
  1749. }
  1750. }
  1751. }
  1752. //查询需要写入地址列表
  1753. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  1754. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  1755. {
  1756. if (!string.IsNullOrEmpty(actionAddress.Address))
  1757. {
  1758. string parValue = "";
  1759. // 写入取放点位、需要进行点位拼接
  1760. if (actionAddress.Sort == 1)
  1761. {
  1762. parValue = req.data.workType;
  1763. s7.Write(actionAddress.Address, Convert.ToString(parValue));
  1764. }
  1765. else if (actionAddress.Sort == 2)
  1766. {
  1767. // 需要写入启动状态
  1768. parValue = actionAddress.Value;
  1769. s7.Write(actionAddress.Address, Convert.ToBoolean(parValue));
  1770. }
  1771. // 同步TagValue数据状态
  1772. CcsTagValue tagValueQuery = new CcsTagValue();
  1773. tagValueQuery.Ip = req.url;
  1774. tagValueQuery.Address = actionAddress.Address;
  1775. CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).ToList().FirstOrDefault();
  1776. if (tagValue != null)
  1777. {
  1778. tagValue.TagValue = parValue;
  1779. await _ccsTagValueService.Update(tagValue);
  1780. }
  1781. Thread.Sleep(SLEEP_TIME);
  1782. }
  1783. }
  1784. s7.ConnectClose();
  1785. // 睡100毫秒,保证plc那边进行数据处理完成,防止回调时候,plc状态不是最新状态
  1786. Thread.Sleep(100);
  1787. //插入回调
  1788. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.ThreeDimensionalRun.ToString(),
  1789. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalRun), req.taskId, req.taskNodeId);
  1790. taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData);
  1791. // 保存数据
  1792. await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  1793. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalRun) + "命令下发成功===>>" + JsonConvert.SerializeObject(req)
  1794. , EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalRun));
  1795. return responseData;
  1796. }
  1797. catch (Exception ex)
  1798. {
  1799. // 记录日志
  1800. Log.Instance.WriteLogAdd(ActionTypeEnum.ThreeDimensionalRun + "任务异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1801. EnumHelper.GetDescription(ActionTypeEnum.ThreeDimensionalRun));
  1802. responseData.resultMsg = ActionTypeEnum.ThreeDimensionalRun + "任务异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
  1803. responseData.result = "false";
  1804. // 关闭plc连接
  1805. if (s7 != null)
  1806. {
  1807. s7.ConnectClose();
  1808. }
  1809. return responseData;
  1810. }
  1811. }
  1812. /// <summary>
  1813. /// 坐标系偏移量设置
  1814. /// </summary>
  1815. public async Task<ResponseECSData> SendOffsetSetting(RequestData<ThreeDimensionalOffset> req)
  1816. {
  1817. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteDeviationValue + "任务接受===>>"+ JsonConvert.SerializeObject(req),
  1818. EnumHelper.GetDescription(ActionTypeEnum.WriteDeviationValue));
  1819. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId,"设置成功");
  1820. try
  1821. {
  1822. List<Device> devices = _deviceService.GetDeviceList();
  1823. Device deviceHeidenhain = devices.Where(x => x.Ip.Equals(req.url)
  1824. && x.ProtocolType.Equals(ProtocalTypeEnum.HEIDEHAIN.ToString())).FirstOrDefault();
  1825. if (deviceHeidenhain == null)
  1826. {
  1827. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteDeviationValue + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1828. EnumHelper.GetDescription(ActionTypeEnum.WriteDeviationValue));
  1829. responseData.result = "false";
  1830. responseData.resultMsg = ActionTypeEnum.WriteDeviationValue + "设备已离线===>>" + JsonConvert.SerializeObject(req);
  1831. return responseData;
  1832. }
  1833. if (deviceHeidenhain != null)
  1834. {
  1835. RequestHeidhData hdhReq = new RequestHeidhData();
  1836. hdhReq.ServerUrl = deviceHeidenhain.ServerUrl;
  1837. hdhReq.MachineName = deviceHeidenhain.UserName;
  1838. hdhReq.Type = OpcUaActionTypeEnum.WriteDeviationValue.ToString();
  1839. hdhReq.DeviationValue = JsonConvert.SerializeObject(req.data);
  1840. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
  1841. ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  1842. if (!Result.IsSuccess || !responseHeidhData.result)
  1843. {
  1844. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteDeviationValue + "坐标系偏差值设置失败===>>" + JsonConvert.SerializeObject(req) + "======结果数据:" + Result,
  1845. EnumHelper.GetDescription(ActionTypeEnum.WriteDeviationValue));
  1846. responseData.result = "false";
  1847. responseData.resultMsg = Result.Message;
  1848. return responseData;
  1849. }
  1850. else
  1851. {
  1852. responseData.result = "true";
  1853. responseData.resultMsg = "消费成功";
  1854. }
  1855. }
  1856. else
  1857. {
  1858. responseData.result = "false";
  1859. responseData.resultMsg = "没找到对应的类型方法";
  1860. return responseData;
  1861. }
  1862. //插入回调
  1863. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.WriteDeviationValue.ToString(),
  1864. EnumHelper.GetDescription(ActionTypeEnum.WriteDeviationValue), req.taskId, req.taskNodeId);
  1865. await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  1866. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteDeviationValue + "任务执行成功===>>" + JsonConvert.SerializeObject(req),
  1867. EnumHelper.GetDescription(ActionTypeEnum.WriteDeviationValue));
  1868. return responseData;
  1869. }
  1870. catch (Exception ex)
  1871. {
  1872. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteDeviationValue + "任务异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1873. EnumHelper.GetDescription(ActionTypeEnum.WriteDeviationValue));
  1874. responseData.resultMsg = ActionTypeEnum.WriteDeviationValue + "任务异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
  1875. responseData.result = "false";
  1876. return responseData;
  1877. }
  1878. }
  1879. public async Task<ResponseECSData> findRfidData(RequestData<RequestToolData> reqs)
  1880. {
  1881. Log.Instance.WriteLogAdd(ActionTypeEnum.RfidRead + "任务接受===>>" + JsonConvert.SerializeObject(reqs),
  1882. EnumHelper.GetDescription(ActionTypeEnum.RfidRead));
  1883. // 1、根据url查询设备信息 2、调用httpserveer 发送执行消息
  1884. ResponseECSData responseData = new ResponseECSData(reqs.taskId, reqs.taskNodeId, "执行成功");
  1885. SiemensS7Net s7 = null;
  1886. try
  1887. {
  1888. // 获取所有在线的设备
  1889. List<Device> devices = _deviceService.GetDeviceList();
  1890. // 比较在线设备是否在其中
  1891. Device device = devices.Where(x => x.Ip == reqs.url && x.Port == reqs.port).FirstOrDefault();
  1892. if (device == null)
  1893. {
  1894. Log.Instance.WriteLogAdd(ActionTypeEnum.RfidRead + "设备已离线===>>" + JsonConvert.SerializeObject(reqs),
  1895. EnumHelper.GetDescription(ActionTypeEnum.RfidRead));
  1896. responseData.result = "false";
  1897. responseData.resultMsg = "设备已离线:" + reqs.url;
  1898. return responseData;
  1899. }
  1900. // 根据ip查询设备
  1901. CcsAction actionQuery = new CcsAction();
  1902. actionQuery.OperateType = ActionTypeEnum.RfidRead.ToString();
  1903. actionQuery.Ip = reqs.url;
  1904. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1905. // 进行plc的连接
  1906. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  1907. OperateResult ConnectionResult = s7.ConnectServer();
  1908. if (!ConnectionResult.IsSuccess)
  1909. {
  1910. s7.ConnectClose();
  1911. Log.Instance.WriteLogAdd(ActionTypeEnum.RfidRead + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(reqs),
  1912. EnumHelper.GetDescription(ActionTypeEnum.RfidRead));
  1913. responseData.result = "false";
  1914. responseData.resultMsg = ActionTypeEnum.RfidRead + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(reqs);
  1915. return responseData;
  1916. }
  1917. // 查询需要操作的plc的db块
  1918. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1919. actionAddressQuery.ActionId = actionInfo.Id;
  1920. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1921. //查询出需要检查的地址列表
  1922. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  1923. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  1924. {
  1925. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  1926. {
  1927. string operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  1928. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  1929. {
  1930. s7.ConnectClose();
  1931. Log.Instance.WriteLogAdd("查询RFID异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(reqs),
  1932. EnumHelper.GetDescription(ActionTypeEnum.RfidRead));
  1933. responseData.result = "false";
  1934. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  1935. return responseData;
  1936. }
  1937. }
  1938. }
  1939. // 查询需要读取的地址列表
  1940. List<CcsActionAddress> CcsActionAddressReads = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.READ.ToString()).ToList();
  1941. Dictionary<string, string> map = new Dictionary<string, string>();
  1942. int i = 1;
  1943. foreach (CcsActionAddress actionAddress in CcsActionAddressReads)
  1944. {
  1945. if (string.IsNullOrEmpty(actionAddress.Address)) {
  1946. continue;
  1947. }
  1948. string operateResult = "";
  1949. if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.BOOL.ToString()))
  1950. {
  1951. operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  1952. }
  1953. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.SHORT.ToString()))
  1954. {
  1955. operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  1956. }
  1957. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.String.ToString()))
  1958. {
  1959. operateResult = s7.ReadString(actionAddress.Address).Content.ToString();
  1960. }
  1961. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.Byte.ToString()))
  1962. {
  1963. operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
  1964. }
  1965. map.Add("par"+1, operateResult);
  1966. }
  1967. responseData.returnData = JsonConvert.SerializeObject(map, Formatting.Indented);
  1968. //查询需要写入地址列表
  1969. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  1970. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  1971. {
  1972. if (!string.IsNullOrEmpty(actionAddress.Address))
  1973. {
  1974. string parValue = "";
  1975. if (actionAddress.Sort == 1)
  1976. {
  1977. parValue = actionAddress.Value;
  1978. s7.Write(actionAddress.Address, Convert.ToBoolean(parValue));
  1979. }
  1980. else if (actionAddress.Sort == 2)
  1981. {
  1982. parValue = actionAddress.Value;
  1983. s7.Write(actionAddress.Address, Convert.ToBoolean(parValue));
  1984. }
  1985. // 同步TagValue数据状态
  1986. CcsTagValue tagValueQuery = new CcsTagValue();
  1987. tagValueQuery.Ip = reqs.url;
  1988. tagValueQuery.Address = actionAddress.Address;
  1989. CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).ToList().FirstOrDefault();
  1990. if (tagValue != null)
  1991. {
  1992. tagValue.TagValue = parValue;
  1993. await _ccsTagValueService.Update(tagValue);
  1994. }
  1995. Thread.Sleep(SLEEP_TIME);
  1996. }
  1997. }
  1998. s7.ConnectClose();
  1999. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.RfidRead) + "取成功===>>" + JsonConvert.SerializeObject(reqs)
  2000. , EnumHelper.GetDescription(ActionTypeEnum.RfidRead));
  2001. return responseData;
  2002. }
  2003. catch (Exception ex)
  2004. {
  2005. s7.ConnectClose();
  2006. Log.Instance.WriteLogAdd(ActionTypeEnum.RfidRead + "任务异常===>>" + ex.Message + JsonConvert.SerializeObject(reqs),
  2007. EnumHelper.GetDescription(ActionTypeEnum.RfidRead));
  2008. responseData.resultMsg = ActionTypeEnum.RfidRead + "任务异常===>>" + ex.Message + JsonConvert.SerializeObject(reqs);
  2009. responseData.result = "false";
  2010. return responseData;
  2011. }
  2012. }
  2013. public async Task<ResponseECSData> rfidReset(RequestData<RequestToolData> reqs)
  2014. {
  2015. Log.Instance.WriteLogAdd(ActionTypeEnum.RfidReset + "任务接受===>>" + JsonConvert.SerializeObject(reqs)
  2016. , EnumHelper.GetDescription(ActionTypeEnum.RfidReset));
  2017. // 1、根据url查询设备信息 2、调用httpserveer 发送执行消息
  2018. ResponseECSData responseData = new ResponseECSData(reqs.taskId, reqs.taskNodeId, "执行成功");
  2019. SiemensS7Net s7 = null;
  2020. try
  2021. {
  2022. // 获取所有在线的设备
  2023. List<Device> devices = _deviceService.GetDeviceList();
  2024. // 比较在线设备是否在其中
  2025. Device device = devices.Where(x => x.Ip == reqs.url && x.Port == reqs.port).FirstOrDefault();
  2026. if (device == null)
  2027. {
  2028. Log.Instance.WriteLogAdd(ActionTypeEnum.RfidReset + "设备已离线===>>" + JsonConvert.SerializeObject(reqs),
  2029. EnumHelper.GetDescription(ActionTypeEnum.RfidReset));
  2030. responseData.result = "false";
  2031. responseData.resultMsg = "设备已离线:" + reqs.url;
  2032. return responseData;
  2033. }
  2034. // 根据ip查询设备
  2035. CcsAction actionQuery = new CcsAction();
  2036. actionQuery.OperateType = ActionTypeEnum.RfidReset.ToString();
  2037. actionQuery.Ip = reqs.url;
  2038. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  2039. // 进行plc的连接
  2040. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  2041. OperateResult ConnectionResult = s7.ConnectServer();
  2042. if (!ConnectionResult.IsSuccess)
  2043. {
  2044. s7.ConnectClose();
  2045. Log.Instance.WriteLogAdd(ActionTypeEnum.RfidReset + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(reqs),
  2046. EnumHelper.GetDescription(ActionTypeEnum.RfidReset));
  2047. responseData.result = "false";
  2048. responseData.resultMsg = ActionTypeEnum.RfidReset + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(reqs);
  2049. return responseData;
  2050. }
  2051. // 查询需要操作的plc的db块
  2052. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  2053. actionAddressQuery.ActionId = actionInfo.Id;
  2054. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  2055. //查询需要写入地址列表
  2056. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  2057. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  2058. {
  2059. if (!string.IsNullOrEmpty(actionAddress.Address))
  2060. {
  2061. string parValue = "";
  2062. if (actionAddress.Sort == 1)
  2063. {
  2064. parValue = actionAddress.Value;
  2065. s7.Write(actionAddress.Address, Convert.ToBoolean(parValue));
  2066. }
  2067. else if (actionAddress.Sort == 2)
  2068. {
  2069. parValue = actionAddress.Value;
  2070. s7.Write(actionAddress.Address, Convert.ToBoolean(parValue));
  2071. }
  2072. // 同步TagValue数据状态
  2073. CcsTagValue tagValueQuery = new CcsTagValue();
  2074. tagValueQuery.Ip = reqs.url;
  2075. tagValueQuery.Address = actionAddress.Address;
  2076. CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).ToList().FirstOrDefault();
  2077. if (tagValue != null)
  2078. {
  2079. tagValue.TagValue = parValue;
  2080. await _ccsTagValueService.Update(tagValue);
  2081. }
  2082. Thread.Sleep(SLEEP_TIME);
  2083. }
  2084. }
  2085. s7.ConnectClose();
  2086. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.RfidReset) + "任务成功===>>" + JsonConvert.SerializeObject(reqs),
  2087. EnumHelper.GetDescription(ActionTypeEnum.RfidReset));
  2088. return responseData;
  2089. }
  2090. catch (Exception ex)
  2091. {
  2092. s7.ConnectClose();
  2093. Log.Instance.WriteLogAdd(ActionTypeEnum.RfidReset + "任务异常===>>" + ex.Message + JsonConvert.SerializeObject(reqs),
  2094. EnumHelper.GetDescription(ActionTypeEnum.RfidReset));
  2095. responseData.resultMsg = ActionTypeEnum.RfidReset + "任务异常===>>" + ex.Message + JsonConvert.SerializeObject(reqs);
  2096. responseData.result = "false";
  2097. return responseData;
  2098. }
  2099. }
  2100. /// <summary>
  2101. /// 查询刀具上下料站、机床刀具位是否允许取
  2102. /// </summary>
  2103. /// <returns></returns>
  2104. public async Task<ResponseECSData> getCutterDeviceIsTake(RequestData<RequestToolData> req)
  2105. {
  2106. Log.Instance.WriteLogAdd("查询刀具上下料站、机床刀具位是否允许取===>> " + JsonConvert.SerializeObject(req), "CNC刀具取放状态");
  2107. // 1、根据url查询设备信息 2、调用httpserveer 发送执行消息
  2108. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "允许下料");
  2109. SiemensS7Net s7 = null;
  2110. try
  2111. {
  2112. // 获取所有在线的设备
  2113. List<Device> devices = _deviceService.GetDeviceList();
  2114. // 比较在线设备是否在其中
  2115. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  2116. if (device == null)
  2117. {
  2118. Log.Instance.WriteLogAdd("取==CutterTake" + req.data.location + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  2119. "CNC刀具取放状态");
  2120. responseData.result = "false";
  2121. responseData.resultMsg = "设备已离线:" + req.url;
  2122. return responseData;
  2123. }
  2124. // 根据ip查询配置的字节数据
  2125. CcsAction actionQuery = new CcsAction();
  2126. actionQuery.OperateType = "CutterTake" + req.data.location.ToString();
  2127. actionQuery.Ip = req.url;
  2128. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  2129. if (actionInfo == null)
  2130. {
  2131. Log.Instance.WriteLogAdd("取==CutterTake" + req.data.location + "没有查询到校验信息===>>" + "没有查询到配置方法,默认通过" + JsonConvert.SerializeObject(req),
  2132. "CNC刀具取放状态");
  2133. responseData.result = "true";
  2134. responseData.resultMsg = "取==CutterTake" + req.data.location + "没有查询到校验信息===>>" + "没有查询到配置方法,默认通过" + JsonConvert.SerializeObject(req);
  2135. return responseData;
  2136. }
  2137. // 进行plc的连接
  2138. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  2139. OperateResult ConnectionResult = s7.ConnectServer();
  2140. if (!ConnectionResult.IsSuccess)
  2141. {
  2142. s7.ConnectClose();
  2143. Log.Instance.WriteLogAdd("取==CutterTake" + req.data.location + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  2144. "CNC刀具取放状态");
  2145. responseData.result = "false";
  2146. responseData.resultMsg = "取==CutterTake" + req.data.location + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  2147. return responseData;
  2148. }
  2149. //=========================上下料站请求判断 开始======================
  2150. // 目标点位是上下料站的判断下料请求是否为true,上料请求为false,
  2151. // 如果不是判断上料请求是否为true,
  2152. // 是提示状态不对,否则写下料请求状态
  2153. // 下料允许
  2154. /*if (cutterTakeRequest.ContainsKey(req.data.location))
  2155. {
  2156. string shangliaoqingqiuDB = cutterPutRequest[req.data.location];
  2157. string xialiaoqingqiuDB = cutterTakeRequest[req.data.location];
  2158. string shangliaoyunxuDB = cutterPutStatus[req.data.location];
  2159. string xialiaoyunxuDB = cutterTakeStatus[req.data.location];
  2160. string shangliaoqingqiu = s7.ReadBool(shangliaoqingqiuDB).Content.ToString();
  2161. string xialiaoqingqiu = s7.ReadBool(xialiaoqingqiuDB).Content.ToString();
  2162. string shangliaoyunxu = s7.ReadBool(shangliaoyunxuDB).Content.ToString();
  2163. string xialiaoyunxu = s7.ReadBool(xialiaoyunxuDB).Content.ToString();
  2164. if (shangliaoqingqiu == "False" && xialiaoqingqiu == "False")
  2165. {
  2166. s7.Write(xialiaoqingqiuDB, true);
  2167. s7.ConnectClose();
  2168. Log.Instance.WriteLogAdd("取==已发送下料请求,等待下料允许====" + JsonConvert.SerializeObject(req), "CNC刀具取放状态");
  2169. responseData.result = "false";
  2170. responseData.resultMsg = "已发送下料请求,等待下料允许";
  2171. return responseData;
  2172. }
  2173. else if (shangliaoqingqiu == "True" && xialiaoqingqiu == "False")
  2174. {
  2175. s7.ConnectClose();
  2176. Log.Instance.WriteLogAdd("取==状态不对,现在上料请求状态,等待上料任务完成====" + JsonConvert.SerializeObject(req), "CNC刀具取放状态"); ;
  2177. responseData.result = "false";
  2178. responseData.resultMsg = "已被上料请求占用,等待上料任务完成";
  2179. return responseData;
  2180. }
  2181. else if (xialiaoqingqiu == "True" && xialiaoyunxu == "False")
  2182. {
  2183. s7.ConnectClose();
  2184. Log.Instance.WriteLogAdd("取==已经发送下料请求,下料允许状态不满足====" + JsonConvert.SerializeObject(req), "CNC刀具取放状态"); ;
  2185. responseData.result = "false";
  2186. responseData.resultMsg = "已经发送下料请求,下料允许状态不满足";
  2187. return responseData;
  2188. }
  2189. }*/
  2190. //=========================上下料站请求判断 结束======================
  2191. // 查询需要操作的plc的db块
  2192. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  2193. actionAddressQuery.ActionId = actionInfo.Id;
  2194. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  2195. //查询出需要检查的地址列表
  2196. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  2197. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  2198. {
  2199. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  2200. {
  2201. string operateResult = "";
  2202. if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.BOOL.ToString()))
  2203. {
  2204. operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  2205. }
  2206. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.SHORT.ToString()))
  2207. {
  2208. operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  2209. }
  2210. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.String.ToString()))
  2211. {
  2212. operateResult = s7.ReadString(actionAddress.Address).Content.ToString();
  2213. }
  2214. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.Byte.ToString()))
  2215. {
  2216. operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
  2217. }
  2218. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  2219. {
  2220. s7.ConnectClose();
  2221. Log.Instance.WriteLogAdd("取==CutterTake" + req.data.location + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(req),
  2222. "CNC刀具取放状态");
  2223. responseData.result = "false";
  2224. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  2225. return responseData;
  2226. }
  2227. }
  2228. }
  2229. // 关闭连接
  2230. s7.ConnectClose();
  2231. }
  2232. catch (Exception ex)
  2233. {
  2234. // 关闭连接
  2235. s7.ConnectClose();
  2236. Log.Instance.WriteLogAdd("取==CutterTake" + req.data.location + "任务下发异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  2237. "CNC刀具取放状态");
  2238. responseData.result = "false";
  2239. responseData.resultMsg = ex.Message;
  2240. return responseData;
  2241. }
  2242. Log.Instance.WriteLogAdd("取==CutterTake" + req.data.location + "结果===>>" + JsonConvert.SerializeObject(responseData), "CNC刀具取放状态");
  2243. return responseData;
  2244. }
  2245. /// <summary>
  2246. /// 查询刀具上下料站、机床刀具位是否允许放
  2247. /// </summary>
  2248. /// <returns></returns>
  2249. public async Task<ResponseECSData> getCutterDeviceIsPut(RequestData<RequestToolData> req)
  2250. {
  2251. Log.Instance.WriteLogAdd("查询刀具上下料站、机床刀具位是否允许放===>> " + JsonConvert.SerializeObject(req), "刀具取放状态");
  2252. // 1、根据url查询设备信息 2、调用httpserveer 发送执行消息
  2253. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "允许下料");
  2254. SiemensS7Net s7 = null;
  2255. try
  2256. {
  2257. // 获取所有在线的设备
  2258. List<Device> devices = _deviceService.GetDeviceList();
  2259. // 比较在线设备是否在其中
  2260. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  2261. if (device == null)
  2262. {
  2263. Log.Instance.WriteLogAdd("放==CutterPut" + req.data.location + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  2264. "刀具取放状态");
  2265. responseData.result = "false";
  2266. responseData.resultMsg = "设备已离线:" + req.url;
  2267. return responseData;
  2268. }
  2269. // 根据ip查询配置的字节数据
  2270. CcsAction actionQuery = new CcsAction();
  2271. actionQuery.OperateType = "CutterPut" + req.data.location.ToString();
  2272. actionQuery.Ip = req.url;
  2273. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  2274. if (actionInfo == null) {
  2275. Log.Instance.WriteLogAdd("放==CutterPut" + req.data.location + "没有查询到校验信息===>>" + "没有查询到配置方法,默认通过" + JsonConvert.SerializeObject(req),
  2276. "刀具取放状态");
  2277. responseData.result = "true";
  2278. responseData.resultMsg = "放==CutterPut" + req.data.location + "没有查询到校验信息===>>" + "没有查询到配置方法,默认通过" + JsonConvert.SerializeObject(req);
  2279. return responseData;
  2280. }
  2281. // 进行plc的连接
  2282. s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  2283. OperateResult ConnectionResult = s7.ConnectServer();
  2284. if (!ConnectionResult.IsSuccess)
  2285. {
  2286. s7.ConnectClose();
  2287. Log.Instance.WriteLogAdd("放==CutterPut" + req.data.location + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  2288. "刀具取放状态");
  2289. responseData.result = "false";
  2290. responseData.resultMsg = "放==CutterPut" + req.data.location + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req);
  2291. return responseData;
  2292. }
  2293. //=========================上下料站请求判断 开始======================
  2294. // 目标点位是上下料站的判断下料请求是否为true,上料请求为false,
  2295. // 如果不是判断上料请求是否为true,
  2296. // 是提示状态不对,否则写下料请求状态
  2297. // 上料料请求
  2298. /*if (cutterPutRequest.ContainsKey(req.data.location))
  2299. {
  2300. string shangliaoqingqiuDB = cutterPutRequest[req.data.location];
  2301. string xialiaoqingqiuDB = cutterTakeRequest[req.data.location];
  2302. string shangliaoyunxuDB = cutterPutStatus[req.data.location];
  2303. string xialiaoyunxuDB = cutterTakeStatus[req.data.location];
  2304. string shangliaoqingqiu = s7.ReadBool(shangliaoqingqiuDB).Content.ToString();
  2305. string xialiaoqingqiu = s7.ReadBool(xialiaoqingqiuDB).Content.ToString();
  2306. string shangliaoyunxu = s7.ReadBool(shangliaoyunxuDB).Content.ToString();
  2307. string xialiaoyunxu = s7.ReadBool(xialiaoyunxuDB).Content.ToString();
  2308. if (shangliaoqingqiu == "False" && xialiaoqingqiu == "False")
  2309. {
  2310. s7.Write(shangliaoqingqiuDB, true);
  2311. s7.ConnectClose();
  2312. Log.Instance.WriteLogAdd("放==已发送上料请求,等待上料允许====" + JsonConvert.SerializeObject(req), "刀具取放状态");
  2313. responseData.result = "false";
  2314. responseData.resultMsg = "已发送上料请求,等待上料允许";
  2315. return responseData;
  2316. }
  2317. else if (shangliaoqingqiu == "False" && xialiaoqingqiu == "True")
  2318. {
  2319. s7.ConnectClose();
  2320. Log.Instance.WriteLogAdd("放==状态不对,现在下料请求状态,等待下料任务完成====" + JsonConvert.SerializeObject(req), "刀具取放状态");
  2321. responseData.result = "false";
  2322. responseData.resultMsg = "已被下料请求占用,等待下料任务完成";
  2323. return responseData;
  2324. }
  2325. else if (shangliaoqingqiu == "True" && shangliaoyunxu == "False")
  2326. {
  2327. s7.ConnectClose();
  2328. Log.Instance.WriteLogAdd("放 == 已经发送上料请求,上料允许状态不满足====" + JsonConvert.SerializeObject(req), "刀具取放状态");
  2329. responseData.result = "false";
  2330. responseData.resultMsg = "已经发送上料请求,上料允许状态不满";
  2331. return responseData;
  2332. }
  2333. }*/
  2334. //=========================上下料站请求判断 结束======================
  2335. // 查询需要操作的plc的db块
  2336. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  2337. actionAddressQuery.ActionId = actionInfo.Id;
  2338. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  2339. //查询出需要检查的地址列表
  2340. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  2341. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  2342. {
  2343. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  2344. {
  2345. string operateResult = "";
  2346. if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.BOOL.ToString()))
  2347. {
  2348. operateResult = s7.ReadBool(actionAddress.Address).Content.ToString();
  2349. }
  2350. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.SHORT.ToString()))
  2351. {
  2352. operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  2353. }
  2354. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.String.ToString()))
  2355. {
  2356. operateResult = s7.ReadString(actionAddress.Address).Content.ToString();
  2357. }
  2358. else if (actionAddress.AddressType.Equals(TagValueReadTypeEnum.Byte.ToString()))
  2359. {
  2360. operateResult = s7.ReadByte(actionAddress.Address).Content.ToString();
  2361. }
  2362. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  2363. {
  2364. s7.ConnectClose();
  2365. Log.Instance.WriteLogAdd("放==CutterPut" + req.data.location + "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "====实际为:" + operateResult + JsonConvert.SerializeObject(req),
  2366. "刀具取放状态");
  2367. responseData.result = "false";
  2368. responseData.resultMsg = "异常===>>" + "条件不满足" + actionAddress.Address + "值应为:" + actionAddress.Value + "==实际为:" + operateResult;
  2369. return responseData;
  2370. }
  2371. }
  2372. }
  2373. // 关闭连接
  2374. s7.ConnectClose();
  2375. }
  2376. catch (Exception ex)
  2377. {
  2378. // 关闭连接
  2379. s7.ConnectClose();
  2380. Log.Instance.WriteLogAdd("放==CutterPut" + req.data.location + "任务下发异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  2381. "刀具取放状态");
  2382. responseData.result = "false";
  2383. responseData.resultMsg = "异常错误"+ex.Message;
  2384. return responseData;
  2385. }
  2386. return responseData;
  2387. }
  2388. public async Task<ResponseECSData> setWriteTakeCutter(RequestData<CutterTestData> req)
  2389. {
  2390. Log.Instance.WriteLogAdd("刀具取状态设置===>> " + JsonConvert.SerializeObject(req), "刀具取状态设置");
  2391. // 1、根据url查询设备信息 2、调用httpserveer 发送执行消息
  2392. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "刀具取状态设置");
  2393. try
  2394. {
  2395. // 获取所有在线的设备
  2396. List<Device> devices = _deviceService.GetDeviceList();
  2397. // 比较在线设备是否在其中
  2398. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  2399. if (device == null)
  2400. {
  2401. Log.Instance.WriteLogAdd("设备已离线===>>" + JsonConvert.SerializeObject(req),
  2402. "刀具取状态设置");
  2403. responseData.result = "false";
  2404. responseData.resultMsg = "设备已离线:" + req.url;
  2405. return responseData;
  2406. }
  2407. // 调用httpserver 设置参数
  2408. if (null != device && device.ProtocolType == "HEIDEHAIN")
  2409. {
  2410. RequestHeidhData hdhReq = new RequestHeidhData();
  2411. hdhReq.ServerUrl = device.ServerUrl;
  2412. hdhReq.MachineName = device.UserName;
  2413. hdhReq.Type = "WriteTakeCutter";
  2414. hdhReq.CutterData = JsonConvert.SerializeObject(req.data);
  2415. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
  2416. ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  2417. if (!Result.IsSuccess || !responseHeidhData.result)
  2418. {
  2419. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteDeviationValue + "设置失败===>>" + JsonConvert.SerializeObject(req) + "======结果数据:" + Result, "刀具取状态设置");
  2420. responseData.result = "false";
  2421. responseData.resultMsg = Result.Message;
  2422. return responseData;
  2423. }
  2424. else
  2425. {
  2426. responseData.result = "true";
  2427. responseData.resultMsg = "消费成功";
  2428. }
  2429. }
  2430. }
  2431. catch (Exception ex)
  2432. {
  2433. // 关闭连接
  2434. Log.Instance.WriteLogAdd("任务执行异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  2435. "刀具取状态设置");
  2436. responseData.result = "false";
  2437. responseData.resultMsg = ex.Message;
  2438. }
  2439. return responseData;
  2440. }
  2441. public async Task<ResponseECSData> sendTheBindingInfo(RequestData<BindInfo> req)
  2442. {
  2443. Log.Instance.WriteLogAdd(ActionTypeEnum.BindingInfo + "任务接受===>>" + JsonConvert.SerializeObject(req),
  2444. EnumHelper.GetDescription(ActionTypeEnum.BindingInfo));
  2445. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId, "设置成功");
  2446. try
  2447. {
  2448. List<Device> devices = _deviceService.GetDeviceList();
  2449. Device deviceHeidenhain = devices.Where(x => x.Ip.Equals(req.url)
  2450. && x.ProtocolType.Equals(ProtocalTypeEnum.HEIDEHAIN.ToString())).FirstOrDefault();
  2451. if (deviceHeidenhain == null)
  2452. {
  2453. Log.Instance.WriteLogAdd(ActionTypeEnum.BindingInfo + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  2454. EnumHelper.GetDescription(ActionTypeEnum.BindingInfo));
  2455. responseData.result = "false";
  2456. responseData.resultMsg = ActionTypeEnum.BindingInfo + "设备已离线===>>" + JsonConvert.SerializeObject(req);
  2457. return responseData;
  2458. }
  2459. if (deviceHeidenhain != null)
  2460. {
  2461. RequestHeidhData hdhReq = new RequestHeidhData();
  2462. hdhReq.ServerUrl = deviceHeidenhain.ServerUrl;
  2463. hdhReq.MachineName = deviceHeidenhain.UserName;
  2464. hdhReq.Type = OpcUaActionTypeEnum.BindingInfo.ToString();
  2465. hdhReq.BindInfo = JsonConvert.SerializeObject(req.data);
  2466. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, hdhUrlContext, hdhReq, null);
  2467. ResponseHeidhData responseHeidhData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  2468. if (!Result.IsSuccess || !responseHeidhData.result)
  2469. {
  2470. Log.Instance.WriteLogAdd(ActionTypeEnum.BindingInfo + "绑定数据设置失败===>>" + JsonConvert.SerializeObject(req) + "======结果数据:" + Result, "设备绑定数据设置");
  2471. responseData.result = "false";
  2472. responseData.resultMsg = Result.Message;
  2473. return responseData;
  2474. }
  2475. else
  2476. {
  2477. responseData.result = "true";
  2478. responseData.resultMsg = "消费成功";
  2479. }
  2480. }
  2481. else
  2482. {
  2483. responseData.result = "false";
  2484. responseData.resultMsg = "没找到对应的类型方法";
  2485. return responseData;
  2486. }
  2487. //插入回调
  2488. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.BindingInfo.ToString(),
  2489. EnumHelper.GetDescription(ActionTypeEnum.BindingInfo), req.taskId, req.taskNodeId);
  2490. await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  2491. Log.Instance.WriteLogAdd(ActionTypeEnum.BindingInfo + "任务成功===>>" + JsonConvert.SerializeObject(req),
  2492. EnumHelper.GetDescription(ActionTypeEnum.BindingInfo));
  2493. return responseData;
  2494. }
  2495. catch (Exception ex)
  2496. {
  2497. Log.Instance.WriteLogAdd(ActionTypeEnum.BindingInfo + "任务异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  2498. EnumHelper.GetDescription(ActionTypeEnum.BindingInfo));
  2499. responseData.resultMsg = ActionTypeEnum.BindingInfo + "任务异常===>>" + ex.Message + JsonConvert.SerializeObject(req);
  2500. responseData.result = "false";
  2501. return responseData;
  2502. }
  2503. }
  2504. public async Task<ResponseECSData> writePoint(RequestData<RequestPoint> req)
  2505. {
  2506. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  2507. List<string> pointList = req.data.pointList;
  2508. if (pointList == null || pointList.Count == 0)
  2509. {
  2510. responseData.result = "false";
  2511. responseData.msg = "参数点位集合为空";
  2512. return responseData;
  2513. }
  2514. SiemensS7Net s7 = DevicePlcS7.SiemensS7(req.url);
  2515. OperateResult ConnectionResult = s7.ConnectServer();
  2516. if (!ConnectionResult.IsSuccess)
  2517. {
  2518. s7.ConnectClose();
  2519. responseData.result = "false";
  2520. responseData.msg = "PLC连接不上";
  2521. return responseData;
  2522. }
  2523. foreach (string point in pointList)
  2524. {
  2525. s7.Write(point, Convert.ToInt16("0"));
  2526. }
  2527. responseData.result = "true";
  2528. s7.ConnectClose();
  2529. return responseData;
  2530. }
  2531. public async Task<ResponseCCSData<List<ResponseEcsPoint>>> readPoint(RequestData<RequestPoint> req)
  2532. {
  2533. ResponseCCSData<List<ResponseEcsPoint>> responseData = new ResponseCCSData<List<ResponseEcsPoint>>();
  2534. List<string> pointList = req.data.pointList;
  2535. if (pointList == null || pointList.Count == 0)
  2536. {
  2537. responseData.result = "false";
  2538. responseData.msg = "参数点位集合为空";
  2539. return responseData;
  2540. }
  2541. SiemensS7Net s7 = DevicePlcS7.SiemensS7(req.url);
  2542. OperateResult ConnectionResult = s7.ConnectServer();
  2543. if (!ConnectionResult.IsSuccess)
  2544. {
  2545. s7.ConnectClose();
  2546. responseData.result = "false";
  2547. responseData.msg = "PLC连接不上," + ConnectionResult.ErrorCode + "," + ConnectionResult.Message;
  2548. return responseData;
  2549. }
  2550. List<ResponseEcsPoint> responseEcsPointList = new List<ResponseEcsPoint>();
  2551. foreach (string point in pointList)
  2552. {
  2553. ResponseEcsPoint responseEcsPoint = new ResponseEcsPoint();
  2554. string result = s7.ReadInt16(point).Content.ToString();
  2555. responseEcsPoint.point = point;
  2556. responseEcsPoint.result = result;
  2557. responseEcsPointList.Add(responseEcsPoint);
  2558. }
  2559. responseData.result = "true";
  2560. responseData.data = responseEcsPointList;
  2561. s7.ConnectClose();
  2562. return responseData;
  2563. }
  2564. }
  2565. }