HttpRequestService.cs 118 KB

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