HttpRequestService.cs 118 KB

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