HttpRequestService.cs 120 KB

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