HttpRequestService.cs 118 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204
  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. await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses , taskCallbackData));
  1556. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.SendThreeCoordinates) + "放三坐标成功===>>" + JsonConvert.SerializeObject(req)
  1557. , EnumHelper.GetDescription(ActionTypeEnum.SendThreeCoordinates));
  1558. return responseData;
  1559. }
  1560. catch (Exception ex)
  1561. {
  1562. Log.Instance.WriteLogAdd(ActionTypeEnum.SendThreeCoordinates + "放三坐标故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1563. EnumHelper.GetDescription(ActionTypeEnum.SendThreeCoordinates));
  1564. responseData.result = "false";
  1565. return responseData;
  1566. }
  1567. }
  1568. /// <summary>
  1569. /// 伺服舵机取物品
  1570. /// </summary>
  1571. public async Task<ResponseECSData> GetServoStacker(RequestData<LocationData> req)
  1572. {
  1573. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1574. try
  1575. {
  1576. List<Device> devices = _deviceService.GetDeviceList();
  1577. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  1578. if (device == null)
  1579. {
  1580. Log.Instance.WriteLogAdd(ActionTypeEnum.GetServoStacker + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1581. EnumHelper.GetDescription(ActionTypeEnum.GetServoStacker));
  1582. responseData.result = "false";
  1583. return responseData;
  1584. }
  1585. CcsAction actionQuery = new CcsAction();
  1586. actionQuery.OperateType = ActionTypeEnum.GetServoStacker.ToString();
  1587. actionQuery.Ip = req.url;
  1588. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1589. Plc s7 = DevicePlcS7.S7(req.url, ProtocalTypeEnum.S7_1500.ToString());
  1590. if (s7.IsConnected != true)
  1591. {
  1592. s7.Close();
  1593. Log.Instance.WriteLogAdd(ActionTypeEnum.GetServoStacker + "取物品故障===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1594. EnumHelper.GetDescription(ActionTypeEnum.GetServoStacker));
  1595. responseData.result = "false";
  1596. return responseData;
  1597. }
  1598. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1599. actionAddressQuery.ActionId = actionInfo.Id;
  1600. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1601. //查询条件
  1602. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  1603. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  1604. {
  1605. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  1606. {
  1607. string CheckAddress = ToolUtils.AddressConvertDBW(actionAddress.Address);
  1608. var operateResult = ((ushort)s7.Read(CheckAddress)).ConvertToShort();
  1609. if (actionAddress.CheckType ? operateResult.ToString().Equals(actionAddress.Value) : operateResult.ToString() != actionAddress.Value)
  1610. {
  1611. s7.Close();
  1612. Log.Instance.WriteLogAdd(ActionTypeEnum.GetServoStacker + "取物品异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
  1613. EnumHelper.GetDescription(ActionTypeEnum.GetServoStacker));
  1614. responseData.result = "false";
  1615. return responseData;
  1616. }
  1617. }
  1618. }
  1619. //查询写入地址列表
  1620. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  1621. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  1622. {
  1623. if (!string.IsNullOrEmpty(actionAddress.Address))
  1624. {
  1625. string Address = ToolUtils.AddressConvertDBW(actionAddress.Address);
  1626. s7.Write(Address, Convert.ToInt16(string.IsNullOrEmpty(actionAddress.Value) ? req.data.Location : actionAddress.Value)); ;
  1627. Thread.Sleep(SLEEP_TIME);
  1628. }
  1629. }
  1630. s7.Close();
  1631. //插入回调
  1632. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.GetServoStacker.ToString(),
  1633. EnumHelper.GetDescription(ActionTypeEnum.GetServoStacker), req.taskId, req.taskNodeId);
  1634. await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
  1635. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.GetServoStacker) + "取物品成功===>>" + JsonConvert.SerializeObject(req)
  1636. , EnumHelper.GetDescription(ActionTypeEnum.GetServoStacker));
  1637. return responseData;
  1638. }
  1639. catch (Exception ex)
  1640. {
  1641. Log.Instance.WriteLogAdd(ActionTypeEnum.GetServoStacker + "取物品故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1642. EnumHelper.GetDescription(ActionTypeEnum.GetServoStacker));
  1643. responseData.result = "false";
  1644. return responseData;
  1645. }
  1646. }
  1647. /// <summary>
  1648. /// 伺服舵机放物品
  1649. /// </summary>
  1650. public async Task<ResponseECSData> SendServoStacker(RequestData<LocationData> req)
  1651. {
  1652. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1653. try
  1654. {
  1655. List<Device> devices = _deviceService.GetDeviceList();
  1656. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  1657. if (device == null)
  1658. {
  1659. Log.Instance.WriteLogAdd(ActionTypeEnum.SendServoStacker + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1660. EnumHelper.GetDescription(ActionTypeEnum.SendServoStacker));
  1661. responseData.result = "false";
  1662. return responseData;
  1663. }
  1664. CcsAction actionQuery = new CcsAction();
  1665. actionQuery.OperateType = ActionTypeEnum.SendServoStacker.ToString();
  1666. actionQuery.Ip = req.url;
  1667. List<CcsAction> actions = _ccsActionService.GetList(actionQuery);
  1668. CcsAction actionInfo = actions[0];
  1669. Plc s7 = DevicePlcS7.S7(req.url, ProtocalTypeEnum.S7_1500.ToString());
  1670. if (s7.IsConnected != true)
  1671. {
  1672. s7.Close();
  1673. Log.Instance.WriteLogAdd(ActionTypeEnum.SendServoStacker + "放物品故障===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1674. EnumHelper.GetDescription(ActionTypeEnum.SendServoStacker));
  1675. responseData.result = "false";
  1676. return responseData;
  1677. }
  1678. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1679. actionAddressQuery.ActionId = actionInfo.Id;
  1680. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1681. //查询条件
  1682. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  1683. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  1684. {
  1685. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  1686. {
  1687. string CheckAddress = ToolUtils.AddressConvertDBW(actionAddress.Address);
  1688. var operateResult = ((ushort)s7.Read(CheckAddress)).ConvertToShort();
  1689. if (actionAddress.CheckType ? operateResult.ToString().Equals(actionAddress.Value) : operateResult.ToString() != actionAddress.Value)
  1690. {
  1691. s7.Close();
  1692. Log.Instance.WriteLogAdd(ActionTypeEnum.SendServoStacker + "放物品异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
  1693. EnumHelper.GetDescription(ActionTypeEnum.SendServoStacker));
  1694. responseData.result = "false";
  1695. return responseData;
  1696. }
  1697. }
  1698. }
  1699. //查询写入地址列表
  1700. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  1701. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  1702. {
  1703. if (!string.IsNullOrEmpty(actionAddress.Address))
  1704. {
  1705. string Address = ToolUtils.AddressConvertDBW(actionAddress.Address);
  1706. s7.Write(Address, Convert.ToInt16(string.IsNullOrEmpty(actionAddress.Value) ? req.data.Location : actionAddress.Value)); ;
  1707. Thread.Sleep(SLEEP_TIME);
  1708. }
  1709. }
  1710. s7.Close();
  1711. //插入回调
  1712. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.SendServoStacker.ToString(),
  1713. EnumHelper.GetDescription(ActionTypeEnum.SendServoStacker), req.taskId, req.taskNodeId);
  1714. await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
  1715. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.SendServoStacker) + "放物品成功===>>" + JsonConvert.SerializeObject(req)
  1716. , EnumHelper.GetDescription(ActionTypeEnum.SendServoStacker));
  1717. return responseData;
  1718. }
  1719. catch (Exception ex)
  1720. {
  1721. Log.Instance.WriteLogAdd(ActionTypeEnum.SendServoStacker + "放物品故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1722. EnumHelper.GetDescription(ActionTypeEnum.SendServoStacker));
  1723. responseData.result = "false";
  1724. return responseData;
  1725. }
  1726. }
  1727. /// <summary>
  1728. /// 刀具接口列表
  1729. /// </summary>
  1730. public async Task<List<ResponseToolData>> GetTools(RequestToolData req)
  1731. {
  1732. List<Device> devices = _deviceService.GetDeviceList();
  1733. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  1734. List<ResponseToolData> list = new List<ResponseToolData>();
  1735. if (device.ProtocolType == ProtocalTypeEnum.OPCUA.ToString())
  1736. {
  1737. CcsTagValue tagValueQuery = new CcsTagValue();
  1738. tagValueQuery.Ip = req.url;
  1739. tagValueQuery.Component = "刀具";
  1740. List<CcsTagValue> tagValues = _ccsTagValueService.GetList(tagValueQuery);
  1741. List<CcsTagValue> toolNumberList = tagValues.GroupBy(x => x.ComponentNumber)
  1742. .Select(group => new CcsTagValue
  1743. {
  1744. ComponentNumber = group.Key
  1745. }).ToList();
  1746. foreach (CcsTagValue toolNumber in toolNumberList)
  1747. {
  1748. ResponseToolData toolData = new ResponseToolData();
  1749. foreach (CcsTagValue tagValue in tagValues)
  1750. {
  1751. if (toolNumber.ComponentNumber == tagValue.ComponentNumber)
  1752. {
  1753. toolData.number = toolNumber.ComponentNumber;
  1754. if (tagValue.Description == "刀具寿命预警")
  1755. {
  1756. toolData.warnLife = tagValue.TagValue;
  1757. }
  1758. else if (tagValue.Description == "刀具寿命目标值")
  1759. {
  1760. toolData.targetLife = tagValue.TagValue;
  1761. }
  1762. else if (tagValue.Description == "工件数")
  1763. {
  1764. toolData.workPiece = tagValue.TagValue;
  1765. }
  1766. else if (tagValue.Description == "工件数预警值")
  1767. {
  1768. toolData.workPieceWarn = tagValue.TagValue;
  1769. }
  1770. else if (tagValue.Description == "工件数目标值")
  1771. {
  1772. toolData.workPieceTarget = tagValue.TagValue;
  1773. }
  1774. else if (tagValue.Description == "磨损量")
  1775. {
  1776. toolData.wear = tagValue.TagValue;
  1777. }
  1778. else if (tagValue.Description == "磨损量预警值")
  1779. {
  1780. toolData.wearWarn = tagValue.TagValue;
  1781. }
  1782. else if (tagValue.Description == "磨损量目标值")
  1783. {
  1784. toolData.wearTarget = tagValue.TagValue;
  1785. }
  1786. else if (tagValue.Description == "刀具名称")
  1787. {
  1788. toolData.name = tagValue.TagValue;
  1789. }
  1790. }
  1791. }
  1792. list.Add(toolData);
  1793. }
  1794. }
  1795. else if (device.ProtocolType == ProtocalTypeEnum.FANUC.ToString())
  1796. {
  1797. string Url = fanucUrlContext + "?ip=" + device.Ip + "&port=" + device.Port;
  1798. //调用发那科接口
  1799. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Get, Url + "&fun=ToolList", null, null);
  1800. if (Result.IsSuccess)
  1801. {
  1802. list = JsonConvert.DeserializeObject<List<ResponseToolData>>(Result.Message);
  1803. }
  1804. }
  1805. return list;
  1806. }
  1807. /// <summary>
  1808. /// 读RFID
  1809. /// </summary>
  1810. public async Task<ResponseECSData> ReadRFID(RequestData<WorkData> req)
  1811. {
  1812. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1813. try
  1814. {
  1815. List<Device> devices = _deviceService.GetDeviceList();
  1816. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  1817. if (device == null)
  1818. {
  1819. Log.Instance.WriteLogAdd(ActionTypeEnum.ReadRFID + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1820. EnumHelper.GetDescription(ActionTypeEnum.ReadRFID));
  1821. responseData.result = "false";
  1822. return responseData;
  1823. }
  1824. CcsAction actionQuery = new CcsAction();
  1825. actionQuery.OperateType = ActionTypeEnum.ReadRFID.ToString();
  1826. actionQuery.Ip = req.url;
  1827. List<CcsAction> actions = _ccsActionService.GetList(actionQuery);
  1828. CcsAction actionInfo = actions[0];
  1829. Plc s7 = DevicePlcS7.S7(req.url, ProtocalTypeEnum.S7_1500.ToString());
  1830. if (s7.IsConnected != true)
  1831. {
  1832. s7.Close();
  1833. Log.Instance.WriteLogAdd(ActionTypeEnum.ReadRFID + "读取RFID故障===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1834. EnumHelper.GetDescription(ActionTypeEnum.ReadRFID));
  1835. responseData.result = "false";
  1836. return responseData;
  1837. }
  1838. /* string Address1 = ToolUtils.AddressConvertDBW(actionInfo.Address);
  1839. string[] sArray = actionInfo.Address.Split('.');
  1840. s7.WriteBytes(DataType.DataBlock, Convert.ToInt16(sArray[0].Substring(2)), Convert.ToInt16(sArray[1]) + 2, ToolUtils.ReturnBtyesWtitString(Content, 128));
  1841. Thread.Sleep(SLEEP_TIME);
  1842. short n = 1;
  1843. s7.Write(actionInfo.Address2, n);
  1844. Thread.Sleep(SLEEP_TIME);
  1845. n = 0;
  1846. s7.Write(actionInfo.Address2, n);*/
  1847. s7.Close();
  1848. //插入回调
  1849. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.ReadRFID.ToString(),
  1850. EnumHelper.GetDescription(ActionTypeEnum.ReadRFID), req.taskId, req.taskNodeId);
  1851. // await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  1852. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.ReadRFID) + "读取RFID故障===>>" + JsonConvert.SerializeObject(req)
  1853. , EnumHelper.GetDescription(ActionTypeEnum.GetServoStacker));
  1854. return responseData;
  1855. }
  1856. catch (Exception ex)
  1857. {
  1858. Log.Instance.WriteLogAdd(ActionTypeEnum.ReadRFID + "读取RFID故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1859. EnumHelper.GetDescription(ActionTypeEnum.ReadRFID));
  1860. responseData.result = "false";
  1861. return responseData;
  1862. }
  1863. }
  1864. /// <summary>
  1865. /// 写RFID
  1866. /// </summary>
  1867. public async Task<ResponseECSData> WriteRFID(RequestData<WorkData> req)
  1868. {
  1869. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1870. List<Device> devices = _deviceService.GetDeviceList();
  1871. try
  1872. {
  1873. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  1874. if (device == null)
  1875. {
  1876. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteRFID + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1877. EnumHelper.GetDescription(ActionTypeEnum.WriteRFID));
  1878. responseData.result = "false";
  1879. return responseData;
  1880. }
  1881. CcsAction actionQuery = new CcsAction();
  1882. actionQuery.OperateType = ActionTypeEnum.WriteRFID.ToString();
  1883. actionQuery.Ip = req.url;
  1884. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1885. Plc s7 = DevicePlcS7.S7(req.url, ProtocalTypeEnum.S7_1500.ToString());
  1886. if (s7.IsConnected != true)
  1887. {
  1888. s7.Close();
  1889. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteRFID + "写RFID故障===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1890. EnumHelper.GetDescription(ActionTypeEnum.WriteRFID));
  1891. responseData.result = "false";
  1892. return responseData;
  1893. }
  1894. /*string Address1 = ToolUtils.AddressConvertDBW(actionInfo.Address);
  1895. string[] sArray = actionInfo.Address.Split('.');
  1896. s7.WriteBytes(DataType.DataBlock, Convert.ToInt16(sArray[0].Substring(2)), Convert.ToInt16(sArray[1]) + 2, ToolUtils.ReturnBtyesWtitString(Content, 128));
  1897. Thread.Sleep(SLEEP_TIME);
  1898. short n = 1;
  1899. s7.Write(actionInfo.Address2, n);
  1900. Thread.Sleep(SLEEP_TIME);
  1901. n = 0;
  1902. s7.Write(actionInfo.Address2, n);*/
  1903. s7.Close();
  1904. //插入回调
  1905. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.WriteRFID.ToString(),
  1906. EnumHelper.GetDescription(ActionTypeEnum.WriteRFID), req.taskId, req.taskNodeId);
  1907. // await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  1908. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.WriteRFID) + "写RFID故障===>>" + JsonConvert.SerializeObject(req)
  1909. , EnumHelper.GetDescription(ActionTypeEnum.GetServoStacker));
  1910. return responseData;
  1911. }
  1912. catch (Exception ex)
  1913. {
  1914. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteRFID + "写RFID故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1915. EnumHelper.GetDescription(ActionTypeEnum.WriteRFID));
  1916. responseData.result = "false";
  1917. return responseData;
  1918. }
  1919. }
  1920. //设置回调值
  1921. private TaskCallback setCallBackValue(List<CcsActionAddress> CcsActionAddresses, TaskCallback taskCallbackData)
  1922. {
  1923. List<CcsActionAddress> CcsActionAddressCallBacks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CALLBACK.ToString()).ToList();
  1924. List<CcsActionAddress> CcsActionAddressCallBackFails = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CALLBACK_FAIL.ToString()).ToList();
  1925. List<CcsActionAddress> CcsActionAddressCallBackResets = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.RESET.ToString()).ToList();
  1926. foreach (CcsActionAddress actionAddress in CcsActionAddressCallBacks)
  1927. {
  1928. if (actionAddress.Sort == 1)
  1929. {
  1930. taskCallbackData.Address = actionAddress.Address;
  1931. taskCallbackData.CallbackValue = actionAddress.Value;
  1932. }
  1933. else if (actionAddress.Sort == 2)
  1934. {
  1935. taskCallbackData.Address2 = actionAddress.Address;
  1936. taskCallbackData.CallbackValue2 = actionAddress.Value;
  1937. }
  1938. else if (actionAddress.Sort == 3)
  1939. {
  1940. taskCallbackData.Address3 = actionAddress.Address;
  1941. taskCallbackData.CallbackValue3 = actionAddress.Value;
  1942. }
  1943. }
  1944. foreach (CcsActionAddress actionAddress in CcsActionAddressCallBackFails)
  1945. {
  1946. if (actionAddress.Sort == 1)
  1947. {
  1948. taskCallbackData.FailAddress = actionAddress.Address;
  1949. taskCallbackData.CallbackFailValue = actionAddress.Value;
  1950. }
  1951. else if (actionAddress.Sort == 2)
  1952. {
  1953. taskCallbackData.FailAddress2 = actionAddress.Address;
  1954. taskCallbackData.CallbackFailValue2 = actionAddress.Value;
  1955. }
  1956. else if (actionAddress.Sort == 3)
  1957. {
  1958. taskCallbackData.FailAddress3 = actionAddress.Address;
  1959. taskCallbackData.CallbackFailValue3 = actionAddress.Value;
  1960. }
  1961. }
  1962. foreach (CcsActionAddress actionAddress in CcsActionAddressCallBackResets)
  1963. {
  1964. if (actionAddress.Sort == 1)
  1965. {
  1966. taskCallbackData.SuccessResetAddress = actionAddress.Address;
  1967. taskCallbackData.SuccessResetValue = actionAddress.Value;
  1968. }
  1969. else if (actionAddress.Sort == 2)
  1970. {
  1971. taskCallbackData.SuccessResetAddress2 = actionAddress.Address;
  1972. taskCallbackData.SuccessResetValue2 = actionAddress.Value;
  1973. }
  1974. }
  1975. return taskCallbackData;
  1976. }
  1977. }
  1978. }