HttpRequestService.cs 153 KB

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