HttpRequestService.cs 133 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668
  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 IMCS_CCS.Utils.DeviceProtocol;
  13. using HslCommunication.Profinet.Siemens;
  14. using Microsoft.Extensions.Configuration;
  15. using IMCS.CCS.Service;
  16. using IMCS_CCS.Model.vo;
  17. using FTP;
  18. using HslCommunication;
  19. using System.Text.RegularExpressions;
  20. using System.IO;
  21. using System.Reflection;
  22. using Newtonsoft.Json;
  23. using static Google.Protobuf.Reflection.SourceCodeInfo.Types;
  24. using System.Drawing;
  25. using Google.Protobuf.WellKnownTypes;
  26. using Type = System.Type;
  27. using Flurl.Util;
  28. using HslCommunication.Enthernet;
  29. using MySqlX.XDevAPI.Common;
  30. using Newtonsoft.Json.Linq;
  31. namespace IMCS.CCS.Services
  32. {
  33. public class HttpRequestService : IHttpRequestService
  34. {
  35. private readonly IDeviceService _deviceService;
  36. private readonly ITaskCallbackService _taskCallbackService;
  37. private readonly ICcsActionService _ccsActionService;
  38. private readonly ICcsTagValueService _ccsTagValueService;
  39. private readonly IEquipmentMonitorService _equipmentMonitorService;
  40. private readonly ICcsActionAddressService _ccsActionAddressService;
  41. private readonly ITaskJobService _taskJobService;
  42. private int SLEEP_TIME = 3000;
  43. string LocalPath = "D:\\PROG";
  44. private string mazakUrlContext;
  45. private string ecsRootUrlContext;
  46. public IConfiguration Configuration { get; }
  47. private readonly IApiRequestService _apiRequestService;
  48. private static Dictionary<string, string> pointDict = new Dictionary<string, string>();
  49. private static Dictionary<string, string> threeDengDict = new Dictionary<string, string>();
  50. private static Dictionary<string, string> threeDengPostDict = new Dictionary<string, string>();
  51. private static Dictionary<string, string> ipDict = new Dictionary<string, string>();
  52. public HttpRequestService(IDeviceService deviceService, ITaskCallbackService taskCallbackService,
  53. ICcsActionService ccsActionService, ICcsTagValueService ccsTagValueService,
  54. IEquipmentMonitorService equipmentMonitorService, ICcsActionAddressService ccsActionAddressService,
  55. IApiRequestService apiRequestService, ITaskJobService taskJobService,
  56. IConfiguration configuration)
  57. {
  58. _deviceService = deviceService;
  59. _taskCallbackService = taskCallbackService;
  60. _ccsActionService = ccsActionService;
  61. _ccsTagValueService = ccsTagValueService;
  62. _equipmentMonitorService = equipmentMonitorService;
  63. _ccsActionAddressService = ccsActionAddressService;
  64. _apiRequestService = apiRequestService;
  65. _taskJobService = taskJobService;
  66. Configuration = configuration;
  67. mazakUrlContext = Configuration.GetConnectionString("mazakUrlContext");
  68. ecsRootUrlContext = Configuration.GetConnectionString("ecsRootUrlContext");
  69. if(pointDict.Count == 0)
  70. {
  71. pointDict.Add("1", "DB1.116");
  72. pointDict.Add("2", "DB1.118");
  73. pointDict.Add("3", "DB1.120");
  74. pointDict.Add("201", "DB1.124");
  75. pointDict.Add("202", "DB1.126");
  76. pointDict.Add("11", "DB1.122");
  77. }
  78. if (threeDengDict.Count == 0)
  79. {
  80. threeDengDict.Add("201", "DB1.124");
  81. threeDengDict.Add("202", "DB1.126");
  82. }
  83. if (threeDengPostDict.Count == 0)
  84. {
  85. threeDengPostDict.Add("201", "DB2.120");
  86. threeDengPostDict.Add("202", "DB2.122");
  87. }
  88. if (ipDict.Count == 0)
  89. {
  90. Console.WriteLine("ipDict:" + ipDict.Count);
  91. ipDict.Add("10.161.30.245", "DB1.116");
  92. ipDict.Add("10.161.30.246", "DB1.118");
  93. ipDict.Add("10.161.30.247", "DB1.120");
  94. }
  95. }
  96. /// <summary>
  97. /// 获取状态当前值
  98. /// </summary>
  99. public string GetTagValue(RequestTagValueData req)
  100. {
  101. CcsTagValue queryParam = new CcsTagValue();
  102. queryParam.Ip = req.ip;
  103. queryParam.Address = req.tagname;
  104. List<CcsTagValue> tagValues = _ccsTagValueService.GetList(queryParam);
  105. string tagValue = "0";
  106. if (tagValues != null && tagValues.Count > 0)
  107. {
  108. tagValue = tagValues[0].TagValue;
  109. }
  110. return tagValue;
  111. }
  112. /// <summary>
  113. /// 益模调用接口,显示3D
  114. /// </summary>
  115. public async Task<List<ResponseDigitalTwinsData>> GetDigitalTwins()
  116. {
  117. List<Device> devices = _deviceService.GetDeviceList();
  118. List<ResponseDigitalTwinsData> list = new List<ResponseDigitalTwinsData>();
  119. //String query3dUrl = ecsRootUrlContext + "/api/authority/agv/agvCallbackService/query3dResouceDataInfo";
  120. //var result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, query3dUrl, new Object(), null);
  121. //ResponsePageData<ResponseDigitalTwinsData> responseData = JsonConvert.DeserializeObject<ResponsePageData<ResponseDigitalTwinsData>>(result.Message);
  122. //list = responseData.Data;
  123. ResponseDigitalTwinsData aa = new ResponseDigitalTwinsData();
  124. list.Add(aa);
  125. List<ResponseDigitalTwinsData> collectDatas = new List<ResponseDigitalTwinsData>();
  126. foreach (ResponseDigitalTwinsData responseDigitalTwinsData in list)
  127. {
  128. //EquipmentMonitor equipmentMonitor = await _equipmentMonitorService.GetById(long.Parse(responseDigitalTwinsData.resourceId));
  129. //if (equipmentMonitor == null || equipmentMonitor.IP == null)
  130. //{
  131. // continue;
  132. //}
  133. //Device device = devices.Where(x => x.Ip.Equals(equipmentMonitor.IP)).FirstOrDefault();
  134. //if (null != device && equipmentMonitor.Type == ProtocalTypeEnum.MAZAK.ToString())
  135. if(1==1)
  136. {
  137. RequestHeidhData reqBody = new RequestHeidhData();
  138. reqBody.ServerUrl = "127.0.0.1";
  139. reqBody.DeviceType = "Mazaka";
  140. reqBody.Type = "Collect";
  141. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, mazakUrlContext, reqBody, null);
  142. if (Result.IsSuccess)
  143. {
  144. ResponseHeidhData retData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  145. if (retData != null && retData.code == 0)
  146. {
  147. ResponseDigitalTwinsData twinsData = JsonConvert.DeserializeObject<ResponseDigitalTwinsData>(retData.runDatasInfo);
  148. //responseDigitalTwinsData.feedRate = !string.IsNullOrEmpty(twinsData.feedRate) ? twinsData.feedRate : "0";
  149. //responseDigitalTwinsData.spindleMagnification = !string.IsNullOrEmpty(twinsData.spindleMagnification) ? twinsData.spindleMagnification : "0";
  150. //responseDigitalTwinsData.spindleSpeed = !string.IsNullOrEmpty(twinsData.spindleSpeed) ? twinsData.spindleSpeed + "00" : "0";
  151. //responseDigitalTwinsData.spindleLoad = !string.IsNullOrEmpty(twinsData.spindleLoad) ? twinsData.spindleMagnification : "-";
  152. twinsData.toolsInfo = JsonConvert.DeserializeObject<List<ToolsInfo>>(retData.toolsInfo);
  153. //twinsData.alarms = JsonConvert.DeserializeObject<List<ErrorInfo>>(retData.errorsInfo);
  154. twinsData.id = responseDigitalTwinsData.id;
  155. twinsData.deviceType = responseDigitalTwinsData.deviceType;
  156. twinsData.resourceId = responseDigitalTwinsData.resourceId;
  157. twinsData.deviceName = responseDigitalTwinsData.deviceName;
  158. twinsData.monitoringStatus = responseDigitalTwinsData.monitoringStatus;
  159. collectDatas.Add(twinsData);
  160. }
  161. }
  162. }
  163. }
  164. return list;
  165. }
  166. /// <summary>
  167. /// 查询设备状态
  168. /// </summary>
  169. public async Task<List<EquipmentMonitor>> GetEquipMent()
  170. {
  171. return await _equipmentMonitorService.GetList();
  172. }
  173. /// <summary>
  174. /// 机器人取放动作
  175. /// </summary>
  176. public async Task<ResponseECSData> RobotAction(RequestData<LocationData> req)
  177. {
  178. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  179. try
  180. {
  181. List<Device> devices = _deviceService.GetDeviceList();
  182. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  183. if (device == null)
  184. {
  185. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  186. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  187. responseData.result = "false";
  188. responseData.msg = ActionTypeEnum.RobotAction + "设备已离线===>>" + req.url;
  189. return responseData;
  190. }
  191. CcsAction actionQuery = new CcsAction();
  192. actionQuery.OperateType = ActionTypeEnum.RobotAction.ToString();
  193. actionQuery.Ip = req.url;
  194. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  195. SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  196. OperateResult ConnectionResult = s7.ConnectServer();
  197. if (!ConnectionResult.IsSuccess)
  198. {
  199. s7.ConnectClose();
  200. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  201. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  202. responseData.msg = ActionTypeEnum.RobotAction + "异常===>>" + "PLC连接不上" + actionInfo.Ip;
  203. responseData.result = "false";
  204. return responseData;
  205. }
  206. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  207. actionAddressQuery.ActionId = actionInfo.Id;
  208. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  209. List<CcsActionAddress> CcsActionAddressChecks = new List<CcsActionAddress>();
  210. CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK_PLC.ToString()).ToList();
  211. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  212. {
  213. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  214. {
  215. string operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  216. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  217. {
  218. s7.ConnectClose();
  219. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "条件不满足==地址:" + actionAddress.Address + "目标值:" + operateResult + "期望值:" + actionAddress.Value,
  220. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  221. responseData.result = "false";
  222. responseData.msg = ActionTypeEnum.RobotAction + "异常===>>" + "条件不满足==地址:" + actionAddress.Address + "目标值:" + operateResult + "期望值:" + actionAddress.Value;
  223. return responseData;
  224. }
  225. }
  226. }
  227. //为装载站三色灯特殊判断
  228. if (threeDengDict.ContainsKey(req.data.location))
  229. {
  230. //取
  231. string location = threeDengDict[req.data.location];
  232. string getResult = s7.ReadInt16(location).Content.ToString();
  233. //判断装载站是否允许取料
  234. if (getResult != "9")
  235. {
  236. //判断装载站是否有料
  237. if (getResult != "1" && getResult != "3")
  238. {
  239. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】,非有托盘状态" + JsonConvert.SerializeObject(req),
  240. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  241. responseData.result = "false";
  242. responseData.msg = "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】,非有托盘状态";
  243. s7.ConnectClose();
  244. return responseData;
  245. }
  246. else
  247. {
  248. string postLocation = threeDengPostDict[req.data.location];
  249. string postResult = s7.ReadInt16(postLocation).Content.ToString();
  250. if (postResult == "8")
  251. {
  252. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】,等待允许取料中" + JsonConvert.SerializeObject(req),
  253. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  254. responseData.result = "false";
  255. responseData.msg = "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】,等待允许取料中";
  256. s7.ConnectClose();
  257. return responseData;
  258. }
  259. //先请求取料
  260. s7.Write(postLocation, Convert.ToInt16("8"));
  261. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】,已请求取料" + JsonConvert.SerializeObject(req),
  262. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  263. responseData.result = "false";
  264. responseData.msg = "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】,已请求取料";
  265. s7.ConnectClose();
  266. return responseData;
  267. }
  268. }
  269. else if (getResult == "9")
  270. {
  271. //判断是否存在请求取料
  272. string postLocation = threeDengPostDict[req.data.location];
  273. string postResult = s7.ReadInt16(location).Content.ToString();
  274. if (postResult == "9")
  275. {
  276. //消除请求
  277. s7.Write(postLocation, Convert.ToInt16("0"));
  278. }
  279. }
  280. }
  281. else if (threeDengDict.ContainsKey(req.data.destLocation))
  282. {
  283. //放
  284. string destLocation = threeDengDict[req.data.destLocation];
  285. string getResult = s7.ReadInt16(destLocation).Content.ToString();
  286. //判断装载站是否允许放料
  287. if (getResult != "16")
  288. {
  289. //判断装载站是否有料
  290. if (getResult != "0" && getResult != "2")
  291. {
  292. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.destLocation + "放条件不满足【" + getResult + "】,非无托盘状态" + JsonConvert.SerializeObject(req),
  293. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  294. responseData.result = "false";
  295. responseData.msg = "异常===>>" + "点位" + req.data.destLocation + "放条件不满足【" + getResult + "】,非无托盘状态";
  296. s7.ConnectClose();
  297. return responseData;
  298. }
  299. else
  300. {
  301. string postLocation = threeDengPostDict[req.data.destLocation];
  302. string postResult = s7.ReadInt16(postLocation).Content.ToString();
  303. if (postResult == "16")
  304. {
  305. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.location + "放条件不满足【" + getResult + "】,等待允许放料中" + JsonConvert.SerializeObject(req),
  306. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  307. responseData.result = "false";
  308. responseData.msg = "异常===>>" + "点位" + req.data.location + "放条件不满足【" + getResult + "】,等待允许放料中";
  309. s7.ConnectClose();
  310. return responseData;
  311. }
  312. //先请求放料
  313. s7.Write(postLocation, Convert.ToInt16("16"));
  314. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.destLocation + "放条件不满足【" + getResult + "】,已请求放料" + JsonConvert.SerializeObject(req),
  315. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  316. responseData.result = "false";
  317. responseData.msg = "异常===>>" + "点位" + req.data.destLocation + "放条件不满足【" + getResult + "】,已请求放料";
  318. s7.ConnectClose();
  319. return responseData;
  320. }
  321. }
  322. else if (getResult == "16")
  323. {
  324. //判断是否存在请求取料
  325. string postLocation = threeDengPostDict[req.data.destLocation];
  326. string postResult = s7.ReadInt16(postLocation).Content.ToString();
  327. if (postResult == "16")
  328. {
  329. //消除请求
  330. s7.Write(postLocation, Convert.ToInt16("0"));
  331. }
  332. }
  333. }
  334. //判断取地址是否满足条件
  335. if (pointDict.ContainsKey(req.data.location))
  336. {
  337. string location = pointDict[req.data.location]; //取
  338. if (location != null)
  339. {
  340. string getResult = s7.ReadInt16(location).Content.ToString();
  341. if (getResult != "9" && getResult != "8")
  342. {
  343. s7.ConnectClose();
  344. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】" + JsonConvert.SerializeObject(req),
  345. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  346. responseData.result = "false";
  347. responseData.msg = "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】";
  348. return responseData;
  349. }
  350. }
  351. }
  352. //判断放地址是否满足条件
  353. if (pointDict.ContainsKey(req.data.destLocation))
  354. {
  355. string destLocation = pointDict[req.data.destLocation]; //放
  356. if (destLocation != null)
  357. {
  358. string putResult = s7.ReadInt16(destLocation).Content.ToString();
  359. if (putResult != "16")
  360. {
  361. s7.ConnectClose();
  362. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.destLocation + "放条件不满足【" + putResult + "】" + JsonConvert.SerializeObject(req),
  363. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  364. responseData.result = "false";
  365. responseData.msg = "异常===>>" + "点位" + req.data.destLocation + "放条件不满足【" + putResult + "】";
  366. return responseData;
  367. }
  368. }
  369. }
  370. //查询写入地址列表
  371. string log = "任务【" + req.taskNodeId + "】写入:";
  372. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  373. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  374. {
  375. if (!string.IsNullOrEmpty(actionAddress.Address))
  376. {
  377. if (string.IsNullOrEmpty(actionAddress.Value))
  378. {
  379. //取参数传参值
  380. string dataValue = getProperties(req.data, actionAddress.Description);
  381. if (!string.IsNullOrEmpty(dataValue))
  382. {
  383. s7.Write(actionAddress.Address, Convert.ToInt16(dataValue));
  384. log = log + "地址:" + actionAddress.Address + "【" + dataValue + "】";
  385. }
  386. }
  387. else
  388. {
  389. s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
  390. log = log + "地址:" + actionAddress.Address + "【" + actionAddress.Value + "】";
  391. }
  392. }
  393. }
  394. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.RobotAction) + "===>>" + log
  395. , EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  396. Thread.Sleep(SLEEP_TIME);
  397. //写入检查
  398. List<CcsActionAddress> CcsActionAddressWriteChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE_CHECK.ToString()).ToList();
  399. bool checkFlag = true;
  400. string returnMsg = "";
  401. foreach (CcsActionAddress actionAddress in CcsActionAddressWriteChecks)
  402. {
  403. if (!string.IsNullOrEmpty(actionAddress.Address))
  404. {
  405. //取参数传参值
  406. string dataValue = getProperties(req.data, actionAddress.Description);
  407. //读取写入结果
  408. string readWriteResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  409. if (dataValue != readWriteResult)
  410. {
  411. returnMsg = "地址位:" + actionAddress.Address + "写入值:" + dataValue + "读出值:" + readWriteResult;
  412. checkFlag = false;
  413. break;
  414. }
  415. }
  416. }
  417. //不通过不写执行
  418. if (!checkFlag)
  419. {
  420. s7.ConnectClose();
  421. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "写入失败,plc没有写入相应的值" + JsonConvert.SerializeObject(req),
  422. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  423. responseData.result = "false";
  424. responseData.msg = "写入异常===>>" + returnMsg;
  425. return responseData;
  426. }
  427. //二次写入地址列表
  428. string log2 = "任务【" + req.taskNodeId + "】二次写入:";
  429. List<CcsActionAddress> CcsActionAddressWriteSeconds = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE_SECOND.ToString()).ToList();
  430. foreach (CcsActionAddress actionAddress in CcsActionAddressWriteSeconds)
  431. {
  432. if (!string.IsNullOrEmpty(actionAddress.Address))
  433. {
  434. if (string.IsNullOrEmpty(actionAddress.Value))
  435. {
  436. //取参数传参值
  437. string dataValue = getProperties(req.data, actionAddress.Description);
  438. if (!string.IsNullOrEmpty(dataValue))
  439. {
  440. log2 = log2 + "地址:" + actionAddress.Address + "【" + actionAddress.Value + "】";
  441. s7.Write(actionAddress.Address, Convert.ToInt16(dataValue));
  442. }
  443. }
  444. else
  445. {
  446. log2 = log2 + "地址:" + actionAddress.Address + "【" + actionAddress.Value + "】";
  447. s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
  448. }
  449. Thread.Sleep(SLEEP_TIME);
  450. }
  451. }
  452. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.RobotAction) + "二次写入===>>" + log2
  453. , EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  454. s7.ConnectClose();
  455. //查询回调表是否存在此数据(避免在数据重复下发时,产生多条回调数据)
  456. TaskCallback vo = new TaskCallback(null, ActionTypeEnum.RobotAction.ToString(),
  457. null, req.taskId, req.taskNodeId);
  458. List<TaskCallback> taskCallbackList = await _taskCallbackService.GetListByCondition(vo);
  459. //插入回调
  460. TaskCallback taskCallbackData = new TaskCallback();
  461. if (taskCallbackList != null && taskCallbackList.Count > 0)
  462. {
  463. taskCallbackData = taskCallbackList[0];
  464. taskCallbackData.State = true;
  465. }
  466. else
  467. {
  468. taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.RobotAction.ToString(),
  469. EnumHelper.GetDescription(ActionTypeEnum.RobotAction), req.taskId, req.taskNodeId);
  470. }
  471. taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData);
  472. if(req.data.taskType == "1" && (req.data.destLocation == "30" || req.data.destLocation == "900")) //取料完成
  473. {
  474. taskCallbackData.CallbackValue = "2";
  475. }else if (req.data.taskType == "1" && (req.data.destLocation != "30" && req.data.destLocation != "900")) //放料完成
  476. {
  477. taskCallbackData.CallbackValue = "5";
  478. }
  479. else if (req.data.taskType == "512" ) //移动完成
  480. {
  481. taskCallbackData.CallbackValue = "4"; //todo 待确定移动完成 值
  482. }
  483. await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  484. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.RobotAction) + "操作成功===>>" + JsonConvert.SerializeObject(req)
  485. , EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  486. return responseData;
  487. }
  488. catch (Exception ex)
  489. {
  490. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "取异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  491. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  492. responseData.result = "false";
  493. return responseData;
  494. }
  495. }
  496. /// <summary>
  497. /// 上传文件
  498. /// </summary>
  499. public async Task<ResponseECSData> UploadFile(RequestData<UploadFileData> req)
  500. {
  501. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  502. try
  503. {
  504. List<Device> devices = _deviceService.GetDeviceList();
  505. Device deviceMazak = devices.Where(x => x.Ip.Equals(req.url)
  506. && x.ProtocolType.Equals(ProtocalTypeEnum.OPCUA.ToString())).FirstOrDefault();
  507. if (deviceMazak == null)
  508. {
  509. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  510. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  511. responseData.msg = "设备已离线";
  512. responseData.result = "false";
  513. return responseData;
  514. }
  515. CcsAction actionQuery = new CcsAction();
  516. actionQuery.OperateType = ActionTypeEnum.StartNCProgram.ToString();
  517. actionQuery.Ip = req.url;
  518. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  519. SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.PlcIp);
  520. OperateResult ConnectionResult = s7.ConnectServer();
  521. if (!ConnectionResult.IsSuccess)
  522. {
  523. s7.ConnectClose();
  524. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  525. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  526. responseData.msg = "PLC连接不上";
  527. responseData.result = "false";
  528. return responseData;
  529. }
  530. //判断是是否允许上传
  531. if (ipDict.ContainsKey(req.url))
  532. {
  533. string db = ipDict[req.url];
  534. if (db != null)
  535. {
  536. string getResult = s7.ReadInt16(db).Content.ToString();
  537. /* if (getResult != "2")
  538. {
  539. s7.ConnectClose();
  540. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "异常===>>" + "url" + req.url + "上传程序条件不满足【" + getResult + "】" + JsonConvert.SerializeObject(req),
  541. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  542. responseData.result = "false";
  543. responseData.msg = req.url + "上传程序条件不满足【" + getResult + "】";
  544. return responseData;
  545. }*/
  546. }
  547. }
  548. if(req.data.subFileList !=null && req.data.subFileList.Count > 0)
  549. {
  550. //西门子one系统子文件上传
  551. if (deviceMazak != null)
  552. {
  553. RequestOpcUaData deviceReq = new RequestOpcUaData();
  554. deviceReq.ServerUrl = "opc.tcp://"+req.url+ ":4840";
  555. deviceReq.UserName = "OpcUaClient";
  556. deviceReq.Password = "12345678";
  557. deviceReq.Type = OpcUaActionTypeEnum.UploadFileList.ToString();
  558. deviceReq.prgName = req.data.fileName;
  559. deviceReq.subFileList = req.data.subFileList;
  560. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, mazakUrlContext, deviceReq, null);
  561. ResponseOpcUaData responseOpcUaData = JsonConvert.DeserializeObject<ResponseOpcUaData>(Result.Message);
  562. if (!Result.IsSuccess || !responseOpcUaData.result)
  563. {
  564. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常===>>" + Result.Message + "===>>" + deviceReq.Path,
  565. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  566. responseData.msg = "上传失败===>>" + Result.Message + "===>>" + deviceReq.Path;
  567. responseData.result = "false";
  568. return responseData;
  569. }
  570. }
  571. }
  572. else
  573. {
  574. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常===>>加工程序为空",
  575. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  576. responseData.msg = "上传失败===>>加工程序为空";
  577. responseData.result = "false";
  578. return responseData;
  579. }
  580. //查询回调表是否存在此数据(避免在数据重复下发时,产生多条回调数据)
  581. TaskCallback vo = new TaskCallback(null, ActionTypeEnum.UploadFile.ToString(),
  582. null, req.taskId, req.taskNodeId);
  583. List<TaskCallback> taskCallbackList = await _taskCallbackService.GetListByCondition(vo);
  584. //插入回调
  585. TaskCallback taskCallbackData = new TaskCallback();
  586. if (taskCallbackList != null && taskCallbackList.Count > 0)
  587. {
  588. taskCallbackData = taskCallbackList[0];
  589. taskCallbackData.State = true;
  590. }
  591. else
  592. {
  593. taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.UploadFile.ToString(),
  594. EnumHelper.GetDescription(ActionTypeEnum.UploadFile), req.taskId, req.taskNodeId);
  595. }
  596. await _taskCallbackService.CreateOrUpdateAndCache(taskCallbackData);
  597. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传成功===>>" + JsonConvert.SerializeObject(req),
  598. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  599. return responseData;
  600. }
  601. catch (Exception ex)
  602. {
  603. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  604. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  605. responseData.result = "false";
  606. return responseData;
  607. }
  608. }
  609. /// <summary>
  610. /// 启动机床程序
  611. /// </summary>
  612. public async Task<ResponseECSData> StartNCProgram(RequestData<StartNCProgramData> req)
  613. {
  614. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  615. try
  616. {
  617. List<Device> devices = _deviceService.GetDeviceList();
  618. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  619. if (device == null)
  620. {
  621. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  622. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  623. responseData.result = "false";
  624. responseData.msg = req.url+ "设备已离线";
  625. return responseData;
  626. }
  627. CcsAction actionQuery = new CcsAction();
  628. actionQuery.OperateType = ActionTypeEnum.StartNCProgram.ToString();
  629. actionQuery.Ip = req.url;
  630. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  631. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  632. actionAddressQuery.ActionId = actionInfo.Id;
  633. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  634. if (actionInfo.ProtocolType == ProtocalTypeEnum.OPCUA.ToString())
  635. {
  636. SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.PlcIp);
  637. OperateResult ConnectionResult = s7.ConnectServer();
  638. if (!ConnectionResult.IsSuccess)
  639. {
  640. s7.ConnectClose();
  641. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  642. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  643. responseData.result = "false";
  644. responseData.msg = req.url + "PLC连接不上";
  645. return responseData;
  646. }
  647. //判断是否允许启动
  648. if (ipDict.ContainsKey(req.url))
  649. {
  650. string db = ipDict[req.url];
  651. string getResult = s7.ReadInt16(db).Content.ToString();
  652. if (getResult != "2")
  653. {
  654. s7.ConnectClose();
  655. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "异常===>>" + "url:" + req.url + "启动程序条件不满足【" + getResult + "】" + JsonConvert.SerializeObject(req),
  656. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  657. responseData.result = "false";
  658. responseData.msg = req.url + "启动程序条件不满足【" + getResult + "】";
  659. return responseData;
  660. }
  661. }
  662. //查询条件
  663. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK.ToString()).ToList();
  664. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  665. {
  666. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  667. {
  668. string operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  669. if (actionAddress.CheckType ? operateResult.Equals(actionAddress.Value) : operateResult != actionAddress.Value)
  670. {
  671. s7.ConnectClose();
  672. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "条件不满足" + JsonConvert.SerializeObject(req),
  673. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  674. responseData.result = "false";
  675. responseData.msg = req.url + "条件不满足,地址:" + actionAddress.Address + "值:" + operateResult;
  676. return responseData;
  677. }
  678. }
  679. }
  680. //查询写入地址列表
  681. /* List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  682. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  683. {
  684. if (!string.IsNullOrEmpty(actionAddress.Address))
  685. {
  686. s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
  687. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "写入正常===>>地址位:" + actionAddress.Address + "值:" + actionAddress.Value + JsonConvert.SerializeObject(req),
  688. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  689. }else
  690. {
  691. //取参数传参值
  692. string dataValue = getProperties(req.data, actionAddress.Description);
  693. if (!string.IsNullOrEmpty(dataValue))
  694. {
  695. s7.Write(actionAddress.Address, ToolUtils.ReturnBtyesWtitString(dataValue, dataValue.Length));
  696. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "写入正常===>>地址位:" + actionAddress.Address + "值:" + dataValue + JsonConvert.SerializeObject(req),
  697. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  698. }
  699. else
  700. {
  701. s7.ConnectClose();
  702. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动程序异常===>>" + "程序名为空" + JsonConvert.SerializeObject(req),
  703. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  704. responseData.result = "false";
  705. responseData.msg = req.url + "条件不满足程序名为空";
  706. return responseData;
  707. }
  708. }
  709. }*/
  710. //Thread.Sleep(2000);
  711. //写入检查
  712. /* List<CcsActionAddress> CcsActionAddressWriteChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE_CHECK.ToString()).ToList();
  713. bool checkFlag = true;
  714. string returnMsg = "";
  715. foreach (CcsActionAddress actionAddress in CcsActionAddressWriteChecks)
  716. {
  717. if (!string.IsNullOrEmpty(actionAddress.Address))
  718. {
  719. //取参数传参值
  720. string dataValue = getProperties(req.data, actionAddress.Description);
  721. //读取写入结果
  722. byte[] bytes = s7.Read(actionAddress.Address, 32).Content;
  723. string value = ToolUtils.ReturnStringByBytes(bytes);
  724. string readWriteResult = value.Trim();
  725. if (dataValue != readWriteResult)
  726. {
  727. returnMsg = "地址位:" + actionAddress.Address + "写入值:" + dataValue + "读出值:" + readWriteResult;
  728. checkFlag = false;
  729. break;
  730. }
  731. }
  732. }*/
  733. //不通过不写执行
  734. /* if (!checkFlag)
  735. {
  736. s7.ConnectClose();
  737. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "异常===>>" + "写入失败,plc没有写入相应的值" + JsonConvert.SerializeObject(req),
  738. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  739. responseData.result = "false";
  740. responseData.msg = "程序名写入异常===>>" + returnMsg;
  741. return responseData;
  742. }*/
  743. //二次写入地址列表
  744. string log2 = "任务【" + req.taskNodeId + "】二次写入:";
  745. List<CcsActionAddress> CcsActionAddressWriteSeconds = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE_SECOND.ToString()).ToList();
  746. foreach (CcsActionAddress actionAddress in CcsActionAddressWriteSeconds)
  747. {
  748. if (!string.IsNullOrEmpty(actionAddress.Address))
  749. {
  750. if (string.IsNullOrEmpty(actionAddress.Value))
  751. {
  752. //取参数传参值
  753. string dataValue = getProperties(req.data, actionAddress.Description);
  754. if (!string.IsNullOrEmpty(dataValue))
  755. {
  756. log2 = log2 + "地址:" + actionAddress.Address + "【" + actionAddress.Value + "】";
  757. s7.Write(actionAddress.Address, Convert.ToInt16(dataValue));
  758. }
  759. }
  760. else
  761. {
  762. log2 = log2 + "地址:" + actionAddress.Address + "【" + actionAddress.Value + "】";
  763. s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
  764. }
  765. }
  766. }
  767. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram) + "二次写入===>>" + log2
  768. , EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  769. Thread.Sleep(5000);
  770. //查询写入地址列表
  771. List<CcsActionAddress> CcsActionAddressDeclear = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE_SECOND.ToString()).ToList();
  772. foreach (CcsActionAddress actionAddress in CcsActionAddressDeclear)
  773. {
  774. if (!string.IsNullOrEmpty(actionAddress.Address))
  775. {
  776. s7.Write(actionAddress.Address, Convert.ToInt16("0"));
  777. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "写入正常===>>地址位清零" + JsonConvert.SerializeObject(req),
  778. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  779. }
  780. }
  781. s7.ConnectClose();
  782. //查询回调表是否存在此数据(避免在数据重复下发时,产生多条回调数据)
  783. TaskCallback vo = new TaskCallback(null, ActionTypeEnum.StartNCProgram.ToString(),
  784. null, req.taskId, req.taskNodeId);
  785. List<TaskCallback> taskCallbackList = await _taskCallbackService.GetListByCondition(vo);
  786. //插入回调
  787. TaskCallback taskCallbackData = new TaskCallback();
  788. if (taskCallbackList != null && taskCallbackList.Count > 0)
  789. {
  790. taskCallbackData = taskCallbackList[0];
  791. taskCallbackData.State = true;
  792. }
  793. else
  794. {
  795. taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.StartNCProgram.ToString(),
  796. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram), req.taskId, req.taskNodeId);
  797. }
  798. await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
  799. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动成功===>>" + JsonConvert.SerializeObject(req),
  800. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  801. return responseData;
  802. }
  803. else
  804. {
  805. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "启动异常===>>" + JsonConvert.SerializeObject(req),
  806. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  807. responseData.result = "false";
  808. return responseData;
  809. }
  810. }
  811. catch (Exception ex)
  812. {
  813. Log.Instance.WriteLogAdd(ActionTypeEnum.StartNCProgram + "程序异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  814. EnumHelper.GetDescription(ActionTypeEnum.StartNCProgram));
  815. responseData.result = "false";
  816. return responseData;
  817. }
  818. }
  819. /// <summary>
  820. /// 启动喷墨机
  821. /// </summary>
  822. public async Task<ResponseECSData> StartCleanMachine(RequestData<printingData> req)
  823. {
  824. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  825. try
  826. {
  827. List<Device> devices = _deviceService.GetDeviceList();
  828. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  829. if (device == null)
  830. {
  831. Log.Instance.WriteLogAdd(ActionTypeEnum.StartCleanMachine + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  832. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  833. responseData.result = "false";
  834. responseData.msg = "设备已离线";
  835. return responseData;
  836. }
  837. CcsAction actionQuery = new CcsAction();
  838. actionQuery.OperateType = ActionTypeEnum.StartCleanMachine.ToString();
  839. actionQuery.Ip = req.url;
  840. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  841. SiemensS7Net s7 = DevicePlcS7.SiemensS7(req.url);
  842. HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
  843. if (!ConnectionResult.IsSuccess)
  844. {
  845. s7.ConnectClose();
  846. Log.Instance.WriteLogAdd(ActionTypeEnum.StartCleanMachine + "启动故障===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  847. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  848. responseData.result = "false";
  849. responseData.msg = "PLC连接不上";
  850. return responseData;
  851. }
  852. s7.Write("DB2.220", ToolUtils.ReturnBtyesWtitString("", 64));
  853. s7.Write("DB2.118", Convert.ToInt16("0"));
  854. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  855. actionAddressQuery.ActionId = actionInfo.Id;
  856. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  857. //查询写入地址列表
  858. string log = "任务【" + req.taskNodeId + "】写入:";
  859. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  860. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  861. {
  862. if (!string.IsNullOrEmpty(actionAddress.Address))
  863. {
  864. //string operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  865. if (string.IsNullOrEmpty(actionAddress.Value))
  866. {
  867. //取参数传参值
  868. string dataValue = getProperties(req.data, actionAddress.Description);
  869. if (!string.IsNullOrEmpty(dataValue))
  870. {
  871. if (actionAddress.dataType == "bytes")
  872. {
  873. s7.Write(actionAddress.Address, ToolUtils.ReturnBtyesWtitString(dataValue, dataValue.Length));
  874. log = log + "地址:" + actionAddress.Address + "【" + dataValue + "】";
  875. }
  876. else if(actionAddress.dataType == "int")
  877. {
  878. s7.Write(actionAddress.Address, Convert.ToInt16(dataValue));
  879. log = log + "地址:" + actionAddress.Address + "【" + dataValue + "】";
  880. }
  881. }
  882. }
  883. else
  884. {
  885. s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
  886. log = log + "地址:" + actionAddress.Address + "【" + actionAddress.Value + "】";
  887. }
  888. }
  889. }
  890. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine) + "===>>" + log
  891. , EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  892. Thread.Sleep(2000);
  893. //写入检查
  894. List<CcsActionAddress> CcsActionAddressWriteChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE_CHECK.ToString()).ToList();
  895. bool checkFlag = true;
  896. string returnMsg = "";
  897. foreach (CcsActionAddress actionAddress in CcsActionAddressWriteChecks)
  898. {
  899. if (!string.IsNullOrEmpty(actionAddress.Address))
  900. {
  901. //取参数传参值
  902. string dataValue = getProperties(req.data, actionAddress.Description);
  903. string readWriteResult = "";
  904. //读取写入结果
  905. if (actionAddress.dataType == "bytes")
  906. {
  907. byte[] bytes = s7.Read(actionAddress.Address, 64).Content;
  908. readWriteResult = ToolUtils.ReturnStringByBytes(bytes);
  909. readWriteResult = readWriteResult.Trim();
  910. }
  911. else if (actionAddress.dataType == "int")
  912. {
  913. readWriteResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  914. }
  915. if (dataValue != readWriteResult)
  916. {
  917. returnMsg = "地址位:" + actionAddress.Address + "写入值:" + dataValue + "读出值:" + readWriteResult;
  918. checkFlag = false;
  919. break;
  920. }
  921. }
  922. }
  923. //不通过不写执行
  924. if (!checkFlag)
  925. {
  926. s7.ConnectClose();
  927. Log.Instance.WriteLogAdd(ActionTypeEnum.StartCleanMachine + "异常===>>" + "写入失败,plc没有写入相应的值" + JsonConvert.SerializeObject(req),
  928. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  929. responseData.result = "false";
  930. responseData.msg = "写入异常===>>" + returnMsg;
  931. return responseData;
  932. }
  933. List<CcsActionAddress> CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK_PLC.ToString()).ToList();
  934. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  935. {
  936. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  937. {
  938. string operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  939. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  940. {
  941. s7.ConnectClose();
  942. Log.Instance.WriteLogAdd(ActionTypeEnum.StartCleanMachine + "异常===>>" + "启动条件不满足==地址:" + actionAddress.Address + "目标值:" + operateResult + "期望值:" + actionAddress.Value,
  943. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  944. responseData.result = "false";
  945. responseData.msg = "启动条件不满足==地址:" + actionAddress.Address + "目标值:" + operateResult + "期望值:" + actionAddress.Value;
  946. return responseData;
  947. }
  948. }
  949. }
  950. //二次写入地址列表
  951. string log2 = "任务【" + req.taskNodeId + "】二次写入:";
  952. List<CcsActionAddress> CcsActionAddressWriteSeconds = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE_SECOND.ToString()).ToList();
  953. foreach (CcsActionAddress actionAddress in CcsActionAddressWriteSeconds)
  954. {
  955. if (!string.IsNullOrEmpty(actionAddress.Address))
  956. {
  957. if (string.IsNullOrEmpty(actionAddress.Value))
  958. {
  959. //取参数传参值
  960. string dataValue = getProperties(req.data, actionAddress.Description);
  961. if (!string.IsNullOrEmpty(dataValue))
  962. {
  963. log2 = log2 + "地址:" + actionAddress.Address + "【" + actionAddress.Value + "】";
  964. s7.Write(actionAddress.Address, Convert.ToInt16(dataValue));
  965. }
  966. }
  967. else
  968. {
  969. log2 = log2 + "地址:" + actionAddress.Address + "【" + actionAddress.Value + "】";
  970. s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
  971. }
  972. }
  973. }
  974. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine) + "二次写入===>>" + log2
  975. , EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  976. Thread.Sleep(5000);
  977. //清空
  978. List<CcsActionAddress> CcsActionAddressDeclear = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE_SECOND.ToString()).ToList();
  979. foreach (CcsActionAddress actionAddress in CcsActionAddressDeclear)
  980. {
  981. if (!string.IsNullOrEmpty(actionAddress.Address))
  982. {
  983. s7.Write(actionAddress.Address, Convert.ToInt16("0"));
  984. Log.Instance.WriteLogAdd(ActionTypeEnum.StartCleanMachine + "写入正常===>>地址位清零" + JsonConvert.SerializeObject(req),
  985. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  986. }
  987. }
  988. //查询回调表是否存在此数据(避免在数据重复下发时,产生多条回调数据)
  989. TaskCallback vo = new TaskCallback(null, ActionTypeEnum.StartCleanMachine.ToString(),
  990. null, req.taskId, req.taskNodeId);
  991. List<TaskCallback> taskCallbackList = await _taskCallbackService.GetListByCondition(vo);
  992. //插入回调
  993. TaskCallback taskCallbackData = new TaskCallback();
  994. if (taskCallbackList != null && taskCallbackList.Count > 0)
  995. {
  996. taskCallbackData = taskCallbackList[0];
  997. taskCallbackData.State = true;
  998. }
  999. else
  1000. {
  1001. taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.StartCleanMachine.ToString(),
  1002. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine), req.taskId, req.taskNodeId);
  1003. }
  1004. await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
  1005. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine) + "启动成功===>>" + JsonConvert.SerializeObject(req)
  1006. , EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  1007. //s7.ConnectClose();
  1008. return responseData;
  1009. }
  1010. catch (Exception ex)
  1011. {
  1012. Log.Instance.WriteLogAdd(ActionTypeEnum.StartCleanMachine + "启动故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1013. EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine));
  1014. responseData.result = "false";
  1015. return responseData;
  1016. }
  1017. }
  1018. /// <summary>
  1019. /// 读RFID
  1020. /// </summary>
  1021. public async Task<ResponseECSData> ReadRFID(RequestData<RFIData> req)
  1022. {
  1023. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1024. try
  1025. {
  1026. List<Device> devices = _deviceService.GetDeviceList();
  1027. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  1028. if (device == null)
  1029. {
  1030. Log.Instance.WriteLogAdd(ActionTypeEnum.ReadRFID + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1031. EnumHelper.GetDescription(ActionTypeEnum.ReadRFID));
  1032. responseData.result = "false";
  1033. return responseData;
  1034. }
  1035. CcsAction actionQuery = new CcsAction();
  1036. actionQuery.OperateType = ActionTypeEnum.ReadRFID.ToString();
  1037. actionQuery.Ip = req.url;
  1038. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1039. SiemensS7Net s7 = DevicePlcS7.SiemensS7(req.url);
  1040. HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
  1041. if (!ConnectionResult.IsSuccess)
  1042. {
  1043. s7.ConnectClose();
  1044. Log.Instance.WriteLogAdd(ActionTypeEnum.ReadRFID + "读取RFID故障===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1045. EnumHelper.GetDescription(ActionTypeEnum.ReadRFID));
  1046. responseData.result = "false";
  1047. return responseData;
  1048. }
  1049. //查询写入地址列表
  1050. if (req.type == "AUTO")
  1051. {
  1052. }
  1053. else
  1054. {
  1055. //校验
  1056. if(req.type == "FIVE")
  1057. {
  1058. string state = s7.ReadInt16("DB1.2100").Content.ToString();
  1059. if (!(state == "1" || state == "3" || state == "5"))
  1060. {
  1061. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteRFID + "写RFID故障===>>" + "读写头未就绪" + JsonConvert.SerializeObject(req),
  1062. EnumHelper.GetDescription(ActionTypeEnum.WriteRFID));
  1063. responseData.result = "false";
  1064. return responseData;
  1065. }
  1066. }
  1067. }
  1068. RFIData rFIData = new RFIData();
  1069. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1070. actionAddressQuery.ActionId = actionInfo.Id;
  1071. //actionAddressQuery.Type = ActionAddressTypeEnum.WRITE.ToString();
  1072. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1073. //读启动
  1074. string typeReadStart = "TOOl_READ_" + req.type;
  1075. List<CcsActionAddress> CcsActionAddressReadStart = CcsActionAddresses.Where(o => o.Type == typeReadStart + "_START").ToList();
  1076. foreach (CcsActionAddress actionAddress in CcsActionAddressReadStart)
  1077. {
  1078. if (!string.IsNullOrEmpty(actionAddress.Address))
  1079. {
  1080. s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
  1081. }
  1082. }
  1083. Thread.Sleep(1000);
  1084. string type = "TOOl_READ_" + req.type;
  1085. //查询写入地址列表
  1086. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == type).ToList();
  1087. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  1088. {
  1089. string value = "";
  1090. if (actionAddress.dataType == "bytes")
  1091. {
  1092. byte[] bytes = s7.Read(actionAddress.Address, 19).Content;
  1093. value = ToolUtils.ReturnStringByBytes(bytes);
  1094. }
  1095. else if (actionAddress.dataType == "int")
  1096. {
  1097. value = s7.ReadInt16(actionAddress.Address).Content.ToString();
  1098. }
  1099. else if (actionAddress.dataType == "float")
  1100. {
  1101. value = s7.ReadFloat(actionAddress.Address).Content.ToString();
  1102. }
  1103. else if (actionAddress.dataType == "byte")
  1104. {
  1105. value = s7.ReadByte(actionAddress.Address).Content.ToString();
  1106. }
  1107. SetProperty(rFIData, actionAddress.Description, value);
  1108. }
  1109. //读归零
  1110. string typeReadZero = "TOOl_READ_" + req.type;
  1111. List<CcsActionAddress> CcsActionAddressReadZero = CcsActionAddresses.Where(o => o.Type == typeReadStart + "_ZERO").ToList();
  1112. foreach (CcsActionAddress actionAddress in CcsActionAddressReadZero)
  1113. {
  1114. if (!string.IsNullOrEmpty(actionAddress.Address))
  1115. {
  1116. s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
  1117. }
  1118. }
  1119. /* List<CcsActionAddress> CcsActionAddressWriteChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE_CHECK.ToString()).ToList();
  1120. foreach (CcsActionAddress actionAddress in CcsActionAddressWriteChecks)
  1121. {
  1122. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  1123. {
  1124. string operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  1125. if (operateResult != actionAddress.Value)
  1126. {
  1127. s7.ConnectClose();
  1128. Log.Instance.WriteLogAdd(ActionTypeEnum.ReadRFID + "异常===>>" + "写入失败" + JsonConvert.SerializeObject(req),
  1129. EnumHelper.GetDescription(ActionTypeEnum.ReadRFID));
  1130. responseData.result = "false";
  1131. return responseData;
  1132. }
  1133. }
  1134. }
  1135. //插入回调
  1136. TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.ReadRFID.ToString(),
  1137. EnumHelper.GetDescription(ActionTypeEnum.ReadRFID), req.taskId, req.taskNodeId);
  1138. await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
  1139. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.StartCleanMachine) + "读取RFID成功===>>" + JsonConvert.SerializeObject(req)
  1140. , EnumHelper.GetDescription(ActionTypeEnum.ReadRFID));
  1141. return responseData;*/
  1142. s7.ConnectClose();
  1143. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.ReadRFID) + " 读取RFID成功===>>" + JsonConvert.SerializeObject(req)
  1144. , EnumHelper.GetDescription(ActionTypeEnum.ReadRFID));
  1145. responseData.data = JsonConvert.SerializeObject(rFIData);
  1146. return responseData;
  1147. }
  1148. catch (Exception ex)
  1149. {
  1150. Log.Instance.WriteLogAdd(ActionTypeEnum.ReadRFID + "读取RFID故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1151. EnumHelper.GetDescription(ActionTypeEnum.ReadRFID));
  1152. responseData.result = "false";
  1153. return responseData;
  1154. }
  1155. }
  1156. /// <summary>
  1157. /// 写RFID
  1158. /// </summary>
  1159. public async Task<ResponseECSData> WriteRFID(RequestData<RFIData> req)
  1160. {
  1161. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1162. List<Device> devices = _deviceService.GetDeviceList();
  1163. try
  1164. {
  1165. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  1166. if (device == null)
  1167. {
  1168. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteRFID + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1169. EnumHelper.GetDescription(ActionTypeEnum.WriteRFID));
  1170. responseData.msg = "设备已离线";
  1171. responseData.result = "false";
  1172. return responseData;
  1173. }
  1174. CcsAction actionQuery = new CcsAction();
  1175. actionQuery.OperateType = ActionTypeEnum.WriteRFID.ToString();
  1176. actionQuery.Ip = req.url;
  1177. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1178. SiemensS7Net s7 = DevicePlcS7.SiemensS7(req.url);
  1179. HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
  1180. if (!ConnectionResult.IsSuccess)
  1181. {
  1182. s7.ConnectClose();
  1183. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteRFID + "写RFID故障===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1184. EnumHelper.GetDescription(ActionTypeEnum.WriteRFID));
  1185. responseData.result = "false";
  1186. return responseData;
  1187. }
  1188. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  1189. actionAddressQuery.ActionId = actionInfo.Id;
  1190. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  1191. //查询写入地址列表
  1192. if (req.type == "AUTO")
  1193. {
  1194. }
  1195. else
  1196. {
  1197. if(req.type == "FIVE"){
  1198. //校验
  1199. string state = s7.ReadInt16("DB1.2100").Content.ToString();
  1200. if (!(state == "1" || state == "3" || state == "5"))
  1201. {
  1202. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteRFID + "写RFID故障===>>" + "读写头未就绪" + JsonConvert.SerializeObject(req),
  1203. EnumHelper.GetDescription(ActionTypeEnum.WriteRFID));
  1204. responseData.result = "false";
  1205. return responseData;
  1206. }
  1207. }
  1208. }
  1209. string type = "TOOl_WRITE_" + req.type;
  1210. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == type).ToList();
  1211. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  1212. {
  1213. if (!string.IsNullOrEmpty(actionAddress.Address))
  1214. {
  1215. if (string.IsNullOrEmpty(actionAddress.Value))
  1216. {
  1217. //取参数传参值
  1218. string dataValue = getProperties(req.data, actionAddress.Description);
  1219. if (!string.IsNullOrEmpty(dataValue))
  1220. {
  1221. if(actionAddress.dataType == "bytes")
  1222. {
  1223. s7.Write(actionAddress.Address, ToolUtils.ReturnBtyesWtitString(dataValue, 19));
  1224. }else if(actionAddress.dataType == "int")
  1225. {
  1226. s7.Write(actionAddress.Address, Convert.ToInt16(dataValue));
  1227. }else if (actionAddress.dataType == "float")
  1228. {
  1229. s7.Write(actionAddress.Address, float.Parse(dataValue));
  1230. }else if (actionAddress.dataType == "byte")
  1231. {
  1232. s7.Write(actionAddress.Address, Convert.ToByte(dataValue));
  1233. }
  1234. }
  1235. }
  1236. else
  1237. {
  1238. s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
  1239. }
  1240. }
  1241. }
  1242. //启动
  1243. List<CcsActionAddress> CcsActionAddressWriteStart = CcsActionAddresses.Where(o => o.Type == type+ "_START").ToList();
  1244. foreach (CcsActionAddress actionAddress in CcsActionAddressWriteStart)
  1245. {
  1246. if (!string.IsNullOrEmpty(actionAddress.Address))
  1247. {
  1248. s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
  1249. }
  1250. }
  1251. Thread.Sleep(2000);
  1252. //校验是否已写入RFID---读一下
  1253. CcsAction actionQueryRead = new CcsAction();
  1254. actionQueryRead.OperateType = ActionTypeEnum.ReadRFID.ToString();
  1255. actionQueryRead.Ip = req.url;
  1256. CcsAction actionInfoRead = _ccsActionService.GetList(actionQueryRead).FirstOrDefault();
  1257. CcsActionAddress actionAddressQueryRead = new CcsActionAddress();
  1258. actionAddressQueryRead.ActionId = actionInfoRead.Id;
  1259. List<CcsActionAddress> CcsActionAddressesRead = _ccsActionAddressService.GetList(actionAddressQueryRead);
  1260. string typeReadStart = "TOOl_READ_" + req.type;
  1261. List<CcsActionAddress> CcsActionAddressReadStart = CcsActionAddressesRead.Where(o => o.Type == typeReadStart+"_START").ToList();
  1262. foreach (CcsActionAddress actionAddress in CcsActionAddressReadStart)
  1263. {
  1264. if (!string.IsNullOrEmpty(actionAddress.Address))
  1265. {
  1266. s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
  1267. }
  1268. }
  1269. Thread.Sleep(1000);
  1270. RFIData rFIData = new RFIData();
  1271. string typeRead = "TOOl_READ_" + req.type;
  1272. //查询写入地址列表
  1273. List<CcsActionAddress> CcsActionAddressReads = CcsActionAddressesRead.Where(o => o.Type == typeRead).ToList();
  1274. foreach (CcsActionAddress actionAddress in CcsActionAddressReads)
  1275. {
  1276. if (!string.IsNullOrEmpty(actionAddress.Address))
  1277. {
  1278. //取参数传参值
  1279. string dataValue = getProperties(req.data, actionAddress.Description);
  1280. //读取写入结果
  1281. string value = "";
  1282. if (actionAddress.dataType == "bytes")
  1283. {
  1284. byte[] bytes = s7.Read(actionAddress.Address, 19).Content;
  1285. value = ToolUtils.ReturnStringByBytes(bytes);
  1286. }
  1287. else if (actionAddress.dataType == "int")
  1288. {
  1289. value = s7.ReadInt16(actionAddress.Address).Content.ToString();
  1290. }
  1291. else if (actionAddress.dataType == "float")
  1292. {
  1293. value = s7.ReadFloat(actionAddress.Address).Content.ToString();
  1294. }
  1295. else if (actionAddress.dataType == "byte")
  1296. {
  1297. value = s7.ReadByte(actionAddress.Address).Content.ToString();
  1298. }
  1299. if (value != dataValue)
  1300. {
  1301. s7.ConnectClose();
  1302. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteRFID + "异常===>>" + "写入失败:" + actionAddress.Description + "写入值【"+ dataValue + "】和读出值【"+ value + "】不一致" ,
  1303. EnumHelper.GetDescription(ActionTypeEnum.WriteRFID));
  1304. responseData.msg = "写入失败:" + actionAddress.Description + "写入值【" + dataValue + "】和读出值【" + value + "】不一致";
  1305. responseData.result = "false";
  1306. return responseData;
  1307. }
  1308. SetProperty(rFIData, actionAddress.Description, value);
  1309. }
  1310. }
  1311. string typeReadZero = "TOOl_READ_" + req.type;
  1312. List<CcsActionAddress> CcsActionAddressReadZero = CcsActionAddressesRead.Where(o => o.Type == typeReadStart + "_ZERO").ToList();
  1313. foreach (CcsActionAddress actionAddress in CcsActionAddressReadZero)
  1314. {
  1315. if (!string.IsNullOrEmpty(actionAddress.Address))
  1316. {
  1317. s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
  1318. }
  1319. }
  1320. s7.ConnectClose();
  1321. //插入回调
  1322. /*TaskCallback taskCallbackData = new TaskCallback(req.url, ActionTypeEnum.WriteRFID.ToString(),
  1323. EnumHelper.GetDescription(ActionTypeEnum.WriteRFID), req.taskId, req.taskNodeId);
  1324. await _taskCallbackService.CreateOrUpdateAndCache(setCallBackValue(CcsActionAddresses, taskCallbackData));
  1325. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.WriteRFID) + "写RFID成功===>>" + JsonConvert.SerializeObject(req)
  1326. , EnumHelper.GetDescription(ActionTypeEnum.WriteRFID));
  1327. return responseData;*/
  1328. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.WriteRFID) + " 写RFID成功===>>" + JsonConvert.SerializeObject(req)
  1329. , EnumHelper.GetDescription(ActionTypeEnum.WriteRFID));
  1330. return responseData;
  1331. }
  1332. catch (Exception ex)
  1333. {
  1334. Log.Instance.WriteLogAdd(ActionTypeEnum.WriteRFID + "写RFID故障===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1335. EnumHelper.GetDescription(ActionTypeEnum.WriteRFID));
  1336. responseData.result = "false";
  1337. return responseData;
  1338. }
  1339. }
  1340. /// <summary>
  1341. /// 刀具接口列表
  1342. /// </summary>
  1343. public async Task<List<ResponseToolData>> GetTools(RequestToolData req)
  1344. {
  1345. List<Device> devices = _deviceService.GetDeviceList();
  1346. Device device = devices.Where(x => x.Ip.Equals(req.url) && x.Port.Equals(req.port)).FirstOrDefault();
  1347. List<ResponseToolData> list = new List<ResponseToolData>();
  1348. if(device.ProtocolType == ProtocalTypeEnum.MAZAK.ToString())
  1349. {
  1350. RequestHeidhData hdhReq = new RequestHeidhData();
  1351. hdhReq.ServerUrl = device.ServerUrl;
  1352. hdhReq.Type = "ToolList";
  1353. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, mazakUrlContext, hdhReq, null);
  1354. if (Result.IsSuccess)
  1355. {
  1356. ResponseHeidhData responseData = JsonConvert.DeserializeObject<ResponseHeidhData>(Result.Message);
  1357. list = JsonConvert.DeserializeObject<List<ResponseToolData>>(responseData.toolsInfo);
  1358. }
  1359. }
  1360. return list;
  1361. }
  1362. /// <summary>
  1363. /// 设备上线离线
  1364. /// </summary>
  1365. public async Task<ResponseCommonData> UpdateDeviceState(RequestDeviceUpdateData req)
  1366. {
  1367. ResponseCommonData responseData = new ResponseCommonData();
  1368. List<Device> devices = _deviceService.GetDevices();
  1369. try
  1370. {
  1371. Device device = devices.Where(x => x.Ip == req.ip).FirstOrDefault();
  1372. if (device == null)
  1373. {
  1374. responseData.msg = "设备不存在";
  1375. responseData.result = "false";
  1376. return responseData;
  1377. }
  1378. device.UseState = req.useState;
  1379. device.OfflineUpdateTime = DateTime.Now;
  1380. await _deviceService.UpdateAndCache(device);
  1381. return responseData;
  1382. }
  1383. catch (Exception ex)
  1384. {
  1385. responseData.msg = ex.Message;
  1386. responseData.result = "false";
  1387. return responseData;
  1388. }
  1389. }
  1390. /// <summary>
  1391. /// 获取回调列表
  1392. /// </summary>
  1393. public async Task<List<TaskCallback>> GetCallBackListByCondition(RequestCallBackData vo)
  1394. {
  1395. List<TaskCallback> list = new List<TaskCallback>();
  1396. try {
  1397. TaskCallback taskCallback = new TaskCallback();
  1398. if (!string.IsNullOrEmpty(vo.IP))
  1399. {
  1400. taskCallback.IP = vo.IP;
  1401. }
  1402. if (!string.IsNullOrEmpty(vo.TaskId))
  1403. {
  1404. taskCallback.TaskId = vo.TaskId;
  1405. }
  1406. if (!string.IsNullOrEmpty(vo.TaskNodeId))
  1407. {
  1408. taskCallback.TaskNodeId = vo.TaskNodeId;
  1409. }
  1410. list = await _taskCallbackService.GetListByCondition(taskCallback);
  1411. }
  1412. catch (Exception ex)
  1413. {
  1414. return list;
  1415. }
  1416. return list;
  1417. }
  1418. //设置回调值
  1419. private TaskCallback setCallBackValue(List<CcsActionAddress> CcsActionAddresses, TaskCallback taskCallbackData)
  1420. {
  1421. List<CcsActionAddress> CcsActionAddressCallBacks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CALLBACK.ToString()).ToList();
  1422. List<CcsActionAddress> CcsActionAddressCallBackFails = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CALLBACK_FAIL.ToString()).ToList();
  1423. List<CcsActionAddress> CcsActionAddressCallBackResets = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.RESET.ToString()).ToList();
  1424. foreach (CcsActionAddress actionAddress in CcsActionAddressCallBacks)
  1425. {
  1426. if (actionAddress.Sort == 1)
  1427. {
  1428. taskCallbackData.Address = actionAddress.Address;
  1429. taskCallbackData.CallbackValue = actionAddress.Value;
  1430. }
  1431. else if (actionAddress.Sort == 2)
  1432. {
  1433. taskCallbackData.Address2 = actionAddress.Address;
  1434. taskCallbackData.CallbackValue2 = actionAddress.Value;
  1435. }
  1436. else if (actionAddress.Sort == 3)
  1437. {
  1438. taskCallbackData.Address3 = actionAddress.Address;
  1439. taskCallbackData.CallbackValue3 = actionAddress.Value;
  1440. }
  1441. }
  1442. foreach (CcsActionAddress actionAddress in CcsActionAddressCallBackFails)
  1443. {
  1444. if (actionAddress.Sort == 1)
  1445. {
  1446. taskCallbackData.FailAddress = actionAddress.Address;
  1447. taskCallbackData.CallbackFailValue = actionAddress.Value;
  1448. }
  1449. else if (actionAddress.Sort == 2)
  1450. {
  1451. taskCallbackData.FailAddress2 = actionAddress.Address;
  1452. taskCallbackData.CallbackFailValue2 = actionAddress.Value;
  1453. }
  1454. else if (actionAddress.Sort == 3)
  1455. {
  1456. taskCallbackData.FailAddress3 = actionAddress.Address;
  1457. taskCallbackData.CallbackFailValue3 = actionAddress.Value;
  1458. }
  1459. }
  1460. foreach (CcsActionAddress actionAddress in CcsActionAddressCallBackResets)
  1461. {
  1462. if (actionAddress.Sort == 1)
  1463. {
  1464. taskCallbackData.SuccessResetAddress = actionAddress.Address;
  1465. taskCallbackData.SuccessResetValue = actionAddress.Value;
  1466. }
  1467. else if (actionAddress.Sort == 2)
  1468. {
  1469. taskCallbackData.SuccessResetAddress2 = actionAddress.Address;
  1470. taskCallbackData.SuccessResetValue2 = actionAddress.Value;
  1471. }
  1472. }
  1473. return taskCallbackData;
  1474. }
  1475. public string getProperties<T>(T t , string propertyName)
  1476. {
  1477. string tStr = string.Empty;
  1478. if (t == null)
  1479. {
  1480. return tStr;
  1481. }
  1482. System.Reflection.PropertyInfo[] properties = t.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
  1483. if (properties.Length <= 0)
  1484. {
  1485. return tStr;
  1486. }
  1487. foreach (System.Reflection.PropertyInfo item in properties)
  1488. {
  1489. string name = item.Name;
  1490. object value = item.GetValue(t, null);
  1491. if ((item.PropertyType.IsValueType || item.PropertyType.Name.StartsWith("String")) && name == propertyName)
  1492. {
  1493. tStr = value.ToString();
  1494. break;
  1495. }
  1496. }
  1497. return tStr;
  1498. }
  1499. public void SetProperty<T>(T t, string propertyName, object value)
  1500. {
  1501. // 获取对象的类型
  1502. Type type = t.GetType();
  1503. // 获取指定名称的属性
  1504. PropertyInfo propertyInfo = type.GetProperty(propertyName);
  1505. if (propertyInfo != null && propertyInfo.CanWrite)
  1506. {
  1507. // 设置属性值
  1508. propertyInfo.SetValue(t, value);
  1509. }
  1510. }
  1511. /// <summary>
  1512. /// 非任务上传文件
  1513. /// </summary>
  1514. public async Task<ResponseECSData> UploadFileWithOutTask(RequestData<UploadFileData> req)
  1515. {
  1516. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1517. try
  1518. {
  1519. List<Device> devices = _deviceService.GetDeviceList();
  1520. Device deviceMazak = devices.Where(x => x.Ip.Equals(req.url)
  1521. && x.ProtocolType.Equals(ProtocalTypeEnum.MAZAK.ToString())).FirstOrDefault();
  1522. if (deviceMazak == null)
  1523. {
  1524. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1525. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  1526. responseData.result = "false";
  1527. responseData.msg = "上传异常===>>设备离线【" + req.url + "】";
  1528. return responseData;
  1529. }
  1530. CcsAction actionQuery = new CcsAction();
  1531. actionQuery.OperateType = ActionTypeEnum.StartNCProgram.ToString();
  1532. actionQuery.Ip = req.url;
  1533. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1534. SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.PlcIp);
  1535. OperateResult ConnectionResult = s7.ConnectServer();
  1536. if (!ConnectionResult.IsSuccess)
  1537. {
  1538. s7.ConnectClose();
  1539. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1540. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  1541. responseData.result = "false";
  1542. responseData.msg = "上传异常===>>PLC连接不上" + req.url;
  1543. return responseData;
  1544. }
  1545. //判断是是否允许上传
  1546. if (ipDict.ContainsKey(req.url))
  1547. {
  1548. string db = ipDict[req.url];
  1549. if (db != null)
  1550. {
  1551. string getResult = s7.ReadInt16(db).Content.ToString();
  1552. /*if (getResult == "0")
  1553. {
  1554. s7.ConnectClose();
  1555. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "异常===>>" + "url:" + req.url + "当前机床不在线【" + getResult + "】" + JsonConvert.SerializeObject(req),
  1556. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  1557. responseData.result = "false";
  1558. responseData.msg = "上传失败===>>url:" + req.url + "当前机床不在线【" + getResult + "】";
  1559. return responseData;
  1560. }*/
  1561. if (getResult == "1")
  1562. {
  1563. s7.ConnectClose();
  1564. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "异常===>>" + "url:" + req.url + "当前机床正在加工【" + getResult + "】" + JsonConvert.SerializeObject(req),
  1565. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  1566. responseData.result = "false";
  1567. responseData.msg = "上传失败===>>url:" + req.url + "当前机床正在加工【" + getResult + "】";
  1568. return responseData;
  1569. }
  1570. }
  1571. }
  1572. //mazak系统上传
  1573. if (deviceMazak != null)
  1574. {
  1575. RequestOpcUaData deviceReq = new RequestOpcUaData();
  1576. deviceReq.ServerUrl = req.url;
  1577. deviceReq.Path = req.data.fileName;
  1578. deviceReq.Type = OpcUaActionTypeEnum.UploadNoSet.ToString();
  1579. deviceReq.deviceType = "Mazaka";
  1580. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, mazakUrlContext, deviceReq, null);
  1581. ResponseOpcUaData responseOpcUaData = JsonConvert.DeserializeObject<ResponseOpcUaData>(Result.Message);
  1582. if (!Result.IsSuccess || !responseOpcUaData.result)
  1583. {
  1584. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常===>>" + JsonConvert.SerializeObject(req),
  1585. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  1586. responseData.msg = "上传失败===>>" + Result.Message + "===>>" + JsonConvert.SerializeObject(req);
  1587. responseData.result = "false";
  1588. return responseData;
  1589. }
  1590. }
  1591. return responseData;
  1592. }
  1593. catch (Exception ex)
  1594. {
  1595. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "上传异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1596. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  1597. responseData.result = "false";
  1598. responseData.msg = "上传异常:" + ex.Message + "===>> " + JsonConvert.SerializeObject(req);
  1599. return responseData;
  1600. }
  1601. }
  1602. /// <summary>
  1603. /// 非任务删除文件
  1604. /// </summary>
  1605. public async Task<ResponseECSData> DeleteFileWithOutTask(RequestData<UploadFileData> req)
  1606. {
  1607. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1608. try
  1609. {
  1610. List<Device> devices = _deviceService.GetDeviceList();
  1611. Device deviceMazak = devices.Where(x => x.Ip.Equals(req.url)
  1612. && x.ProtocolType.Equals(ProtocalTypeEnum.MAZAK.ToString())).FirstOrDefault();
  1613. if (deviceMazak == null)
  1614. {
  1615. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  1616. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  1617. responseData.result = "false";
  1618. responseData.msg = "删除异常===>>设备离线【" + req.url + "】";
  1619. return responseData;
  1620. }
  1621. CcsAction actionQuery = new CcsAction();
  1622. actionQuery.OperateType = ActionTypeEnum.StartNCProgram.ToString();
  1623. actionQuery.Ip = req.url;
  1624. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  1625. SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.PlcIp);
  1626. OperateResult ConnectionResult = s7.ConnectServer();
  1627. if (!ConnectionResult.IsSuccess)
  1628. {
  1629. s7.ConnectClose();
  1630. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  1631. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  1632. responseData.result = "false";
  1633. responseData.msg = "删除异常===>>PLC连接不上" + req.url;
  1634. return responseData;
  1635. }
  1636. //判断是是否允许删除
  1637. if (ipDict.ContainsKey(req.url))
  1638. {
  1639. string db = ipDict[req.url];
  1640. if (db != null)
  1641. {
  1642. string getResult = s7.ReadInt16(db).Content.ToString();
  1643. if (getResult == "0")
  1644. {
  1645. s7.ConnectClose();
  1646. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "异常===>>" + "url:" + req.url + "当前机床不在线【" + getResult + "】" + JsonConvert.SerializeObject(req),
  1647. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  1648. responseData.result = "false";
  1649. responseData.msg = "删除失败===>>url:" + req.url + "当前机床不在线【" + getResult + "】";
  1650. return responseData;
  1651. }
  1652. if (getResult == "1")
  1653. {
  1654. s7.ConnectClose();
  1655. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "异常===>>" + "url:" + req.url + "当前机床正在加工【" + getResult + "】" + JsonConvert.SerializeObject(req),
  1656. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  1657. responseData.result = "false";
  1658. responseData.msg = "上传失败===>>url:" + req.url + "当前机床正在加工【" + getResult + "】";
  1659. return responseData;
  1660. }
  1661. }
  1662. }
  1663. //mazak系统删除
  1664. if (deviceMazak != null)
  1665. {
  1666. RequestOpcUaData deviceReq = new RequestOpcUaData();
  1667. deviceReq.ServerUrl = req.url;
  1668. deviceReq.Path = req.data.fileName;
  1669. deviceReq.Type = OpcUaActionTypeEnum.DeleteNc.ToString();
  1670. deviceReq.deviceType = "Mazaka";
  1671. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, mazakUrlContext, deviceReq, null);
  1672. ResponseOpcUaData responseOpcUaData = JsonConvert.DeserializeObject<ResponseOpcUaData>(Result.Message);
  1673. if (!Result.IsSuccess || !responseOpcUaData.result)
  1674. {
  1675. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "删除异常===>>" + JsonConvert.SerializeObject(req),
  1676. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  1677. responseData.msg = "删除失败===>>" + Result.Message + "===>>" + JsonConvert.SerializeObject(req);
  1678. responseData.result = "false";
  1679. return responseData;
  1680. }
  1681. }
  1682. return responseData;
  1683. }
  1684. catch (Exception ex)
  1685. {
  1686. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "删除异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  1687. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  1688. responseData.result = "false";
  1689. responseData.msg = "删除异常:" + ex.Message + "===>> " + JsonConvert.SerializeObject(req);
  1690. return responseData;
  1691. }
  1692. }
  1693. public async Task<ResponseCCSData<List<ResponseEcsPoint>>> readPoint(RequestData<RequestPoint> req)
  1694. {
  1695. ResponseCCSData<List<ResponseEcsPoint>> responseData = new ResponseCCSData<List<ResponseEcsPoint>>();
  1696. List<string> pointList = req.data.pointList;
  1697. if (pointList == null || pointList.Count == 0)
  1698. {
  1699. responseData.result = "false";
  1700. responseData.msg = "参数点位集合为空";
  1701. return responseData;
  1702. }
  1703. SiemensS7Net s7 = DevicePlcS7.SiemensS7("10.161.30.248");
  1704. OperateResult ConnectionResult = s7.ConnectServer();
  1705. if (!ConnectionResult.IsSuccess)
  1706. {
  1707. s7.ConnectClose();
  1708. responseData.result = "false";
  1709. responseData.msg = "PLC连接不上";
  1710. return responseData;
  1711. }
  1712. List<ResponseEcsPoint> responseEcsPointList = new List<ResponseEcsPoint>();
  1713. foreach (string point in pointList)
  1714. {
  1715. ResponseEcsPoint responseEcsPoint = new ResponseEcsPoint();
  1716. string result = s7.ReadInt16(point).Content.ToString();
  1717. responseEcsPoint.point = point;
  1718. responseEcsPoint.result = result;
  1719. responseEcsPointList.Add(responseEcsPoint);
  1720. }
  1721. responseData.result = "true";
  1722. responseData.data = responseEcsPointList;
  1723. return responseData;
  1724. }
  1725. public async Task<ResponseECSData> writePoint(RequestData<RequestPoint> req)
  1726. {
  1727. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1728. List<string> pointList = req.data.pointList;
  1729. if (pointList == null || pointList.Count == 0)
  1730. {
  1731. responseData.result = "false";
  1732. responseData.msg = "参数点位集合为空";
  1733. return responseData;
  1734. }
  1735. SiemensS7Net s7 = DevicePlcS7.SiemensS7("10.161.30.248");
  1736. OperateResult ConnectionResult = s7.ConnectServer();
  1737. if (!ConnectionResult.IsSuccess)
  1738. {
  1739. s7.ConnectClose();
  1740. responseData.result = "false";
  1741. responseData.msg = "PLC连接不上";
  1742. return responseData;
  1743. }
  1744. foreach (string point in pointList)
  1745. {
  1746. ResponseEcsPoint responseEcsPoint = new ResponseEcsPoint();
  1747. s7.Write(point, Convert.ToInt16("0"));
  1748. }
  1749. responseData.result = "true";
  1750. return responseData;
  1751. }
  1752. public async Task<ResponseECSData> updateToolInfo(RequestData<ToolData> req)
  1753. {
  1754. string type = req.type;
  1755. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1756. SiemensS7Net s7 = DevicePlcS7.SiemensS7("10.161.30.248");
  1757. HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
  1758. if (!ConnectionResult.IsSuccess)
  1759. {
  1760. s7.ConnectClose();
  1761. responseData.result = "false";
  1762. responseData.msg = "PLC连接不上";
  1763. return responseData;
  1764. }
  1765. //判断是是否已执行换刀小程序
  1766. if (type == "ONE")
  1767. {
  1768. //一号机床
  1769. }
  1770. else if (type == "TWO")
  1771. {
  1772. //二号机床
  1773. }
  1774. else if (type == "THREE")
  1775. {
  1776. //三号机床
  1777. }
  1778. else if (type == "FOUR")
  1779. {
  1780. //四号机床
  1781. }
  1782. else if (type == "FIVE")
  1783. {
  1784. //五号机床
  1785. string state = s7.ReadInt16("DB1.2110").Content.ToString();
  1786. if (state != "1")
  1787. {
  1788. responseData.result = "false";
  1789. responseData.msg = "机床五换刀小程序未执行";
  1790. return responseData;
  1791. }
  1792. }
  1793. RequestBody<ToolData> deviceReq = new RequestBody<ToolData>();
  1794. deviceReq.serverUrl = req.url;
  1795. deviceReq.type = OpcUaActionTypeEnum.DeleteOrSetTool.ToString();
  1796. deviceReq.deviceType = "Mazaka";
  1797. deviceReq.toolNo = req.toolNo;
  1798. deviceReq.data = req.data;
  1799. if(req.storgeFlag == "in")
  1800. {
  1801. deviceReq.value = "set";
  1802. }else if(req.storgeFlag == "out")
  1803. {
  1804. deviceReq.value = "delete";
  1805. }
  1806. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, mazakUrlContext, deviceReq, null);
  1807. ResponseOpcUaData responseOpcUaData = JsonConvert.DeserializeObject<ResponseOpcUaData>(Result.Message);
  1808. if (!responseOpcUaData.result || !responseOpcUaData.result)
  1809. {
  1810. Log.Instance.WriteLogAdd(ActionTypeEnum.UploadFile + "更新刀库信息异常===>>" + JsonConvert.SerializeObject(req),
  1811. EnumHelper.GetDescription(ActionTypeEnum.UploadFile));
  1812. responseData.msg = "更新刀库信息失败===>>" + Result.Message ;
  1813. responseData.result = "false";
  1814. return responseData;
  1815. }
  1816. responseData.data = responseOpcUaData.toolsData;
  1817. //清除手动换刀信息
  1818. if (type == "ONE")
  1819. {
  1820. //一号机床
  1821. }
  1822. else if (type == "TWO")
  1823. {
  1824. //二号机床
  1825. }
  1826. else if (type == "THREE")
  1827. {
  1828. //三号机床
  1829. }
  1830. else if (type == "FOUR")
  1831. {
  1832. //四号机床
  1833. }
  1834. else if (type == "FIVE")
  1835. {
  1836. //五号机床
  1837. //取放刀标识
  1838. s7.Write("DB2.3096", Convert.ToInt16("0"));
  1839. }
  1840. responseData.result = "true";
  1841. return responseData;
  1842. }
  1843. /// <summary>
  1844. /// 写RFID
  1845. /// </summary>
  1846. public async Task<ResponseECSData> WriteRFIDTemp(RequestData<RFIData> req)
  1847. {
  1848. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1849. SiemensS7Net s7 = DevicePlcS7.SiemensS7(req.url);
  1850. HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
  1851. //刀具ID
  1852. s7.Write("DB2.14", ToolUtils.ReturnBtyesWtitString("2754691583333295000", 19));
  1853. byte[] toolIdBt = s7.Read("DB2.14",19).Content;
  1854. string toolId = ToolUtils.ReturnStringByBytes(toolIdBt);
  1855. //刀柄ID
  1856. s7.Write("DB2.54", ToolUtils.ReturnBtyesWtitString("1754691583333294081", 19));
  1857. byte[] toolHandleIdBt = s7.Read("DB2.54", 19).Content;
  1858. string toolHandleId = ToolUtils.ReturnStringByBytes(toolHandleIdBt);
  1859. //刀号
  1860. s7.Write("DB2.94", Convert.ToInt16("40"));
  1861. string tno = s7.ReadInt16("DB2.94").Content.ToString();
  1862. //刀长
  1863. float len = float.Parse("153.26");
  1864. s7.Write("DB2.96", len);
  1865. string length = s7.ReadFloat("DB2.96").Content.ToString();
  1866. //刀具名称
  1867. s7.Write("DB2.100", Convert.ToByte("10"));
  1868. string name = s7.ReadByte("DB2.100").Content.ToString();
  1869. //公称径
  1870. float intll = float.Parse("0.21");
  1871. s7.Write("DB2.102", intll);
  1872. string int0 = s7.ReadFloat("DB2.102").Content.ToString();
  1873. //刀具径刀尖角
  1874. float diametep = float.Parse("0.36");
  1875. s7.Write("DB2.106", diametep);
  1876. string diameter = s7.ReadFloat("DB2.106").Content.ToString();
  1877. //刀具寿命
  1878. s7.Write("DB2.110", Convert.ToInt16("480"));
  1879. string lifetime = s7.ReadInt16("DB2.110").Content.ToString();
  1880. //刀具次数
  1881. s7.Write("DB2.112", Convert.ToInt16("50"));
  1882. string lifenumber = s7.ReadInt16("DB2.112").Content.ToString();
  1883. //刀具已使用寿命
  1884. s7.Write("DB2.114", Convert.ToInt16("360"));
  1885. string usetime = s7.ReadInt16("DB2.114").Content.ToString();
  1886. //刀具已使用次数
  1887. s7.Write("DB2.116", Convert.ToInt16("20"));
  1888. string usenumber = s7.ReadInt16("DB2.116").Content.ToString();
  1889. //组号
  1890. s7.Write("DB2.118", Convert.ToInt16("104"));
  1891. string int1 = s7.ReadInt16("DB2.118").Content.ToString();
  1892. //磨损补偿
  1893. s7.Write("DB2.120", float.Parse("20.265"));
  1894. string wearcompZ = s7.ReadFloat("DB2.120").Content.ToString();
  1895. //磨损极限
  1896. s7.Write("DB2.124", float.Parse("120.253"));
  1897. string maxwearZ = s7.ReadFloat("DB2.124").Content.ToString();
  1898. //刀具补偿
  1899. s7.Write("DB2.128", float.Parse("40.23"));
  1900. string angle = s7.ReadFloat("DB2.128").Content.ToString();
  1901. //最高转速
  1902. s7.Write("DB2.132", float.Parse("50000"));
  1903. string easycompX = s7.ReadFloat("DB2.132").Content.ToString();
  1904. //径补偿量
  1905. s7.Write("DB2.136", float.Parse("200"));
  1906. string easycompY = s7.ReadFloat("DB2.136").Content.ToString();
  1907. //长度补偿
  1908. s7.Write("DB2.140", float.Parse("15.289"));
  1909. string conscompZ = s7.ReadFloat("DB2.140").Content.ToString();
  1910. //托盘
  1911. //托盘ID
  1912. s7.Write("DB2.144", ToolUtils.ReturnBtyesWtitString("1778980910222282754", 19));
  1913. byte[] trayIdBt = s7.Read("DB2.144", 19).Content;
  1914. string trayId = ToolUtils.ReturnStringByBytes(trayIdBt);
  1915. //托盘类型
  1916. s7.Write("DB2.184", Convert.ToByte("1"));
  1917. string type = s7.ReadByte("DB2.184").Content.ToString();
  1918. //零件状态
  1919. s7.Write("DB2.185", Convert.ToByte("3"));
  1920. string state = s7.ReadByte("DB2.185").Content.ToString();
  1921. //零件ID
  1922. s7.Write("DB2.186", ToolUtils.ReturnBtyesWtitString("1778980910222282755", 19));
  1923. byte[] itemIdBt = s7.Read("DB2.186", 19).Content;
  1924. string itemId = ToolUtils.ReturnStringByBytes(itemIdBt);
  1925. return responseData;
  1926. }
  1927. /// <summary>
  1928. /// 手动换刀
  1929. /// </summary>
  1930. public async Task<ResponseECSData> HandleChangeTool(RequestData<HandleChangeTool> req)
  1931. {
  1932. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1933. SiemensS7Net s7 = DevicePlcS7.SiemensS7(req.url);
  1934. HslCommunication.OperateResult ConnectionResult = s7.ConnectServer();
  1935. if (!ConnectionResult.IsSuccess)
  1936. {
  1937. s7.ConnectClose();
  1938. responseData.result = "false";
  1939. responseData.msg = "PLC连接不上";
  1940. return responseData;
  1941. }
  1942. HandleChangeTool handleChangeTool = req.data;
  1943. if(handleChangeTool.location == "ONE")
  1944. {
  1945. //一号机床
  1946. }else if (handleChangeTool.location == "TWO")
  1947. {
  1948. //二号机床
  1949. }
  1950. else if (handleChangeTool.location == "THREE")
  1951. {
  1952. //三号机床
  1953. }
  1954. else if (handleChangeTool.location == "FOUR")
  1955. {
  1956. //四号机床
  1957. }
  1958. else if (handleChangeTool.location == "FIVE")
  1959. {
  1960. //五号机床
  1961. //刀号
  1962. s7.Write("DB2.2968", Convert.ToInt16(handleChangeTool.tno));
  1963. //取放刀标识
  1964. s7.Write("DB2.3096", Convert.ToInt16(handleChangeTool.handleFlag));
  1965. }
  1966. return responseData;
  1967. }
  1968. public async Task<ResponseECSData> StorgeOut(RequestData<RFIData> req)
  1969. {
  1970. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  1971. try
  1972. {
  1973. //读取刀具信息
  1974. RequestBody<ToolData> deviceReq = new RequestBody<ToolData>();
  1975. deviceReq.serverUrl = req.url;
  1976. deviceReq.type = OpcUaActionTypeEnum.ToolNoData.ToString();
  1977. deviceReq.deviceType = "Mazaka";
  1978. deviceReq.toolNo = req.toolNo;
  1979. var Result = await _apiRequestService.RequestAsync(RequsetModeEnum.Post, mazakUrlContext, deviceReq, null);
  1980. ResponseOpcUaData responseOpcUaData = JsonConvert.DeserializeObject<ResponseOpcUaData>(Result.Message);
  1981. if (!responseOpcUaData.result || responseOpcUaData.toolsData == null)
  1982. {
  1983. Log.Instance.WriteLogAdd(ActionTypeEnum.ToolOut + "刀具手动出库==》获取刀具信息异常" + JsonConvert.SerializeObject(req),
  1984. EnumHelper.GetDescription(ActionTypeEnum.ToolOut));
  1985. responseData.msg = "获取刀具【" + req.toolNo + "】信息失败===>>" + Result.Message;
  1986. responseData.result = "false";
  1987. return responseData;
  1988. }
  1989. ToolData toolData = JsonConvert.DeserializeObject<ToolData>(responseOpcUaData.toolsData);
  1990. //更新RFID信息
  1991. RFIData rFIData = req.data;
  1992. rFIData.length = toolData.lengthA + "";
  1993. rFIData.name = toolData.name + "";
  1994. rFIData.int0 = toolData.int0 + "";
  1995. rFIData.diameter = toolData.diameter + "";
  1996. rFIData.lifetime = toolData.lifetime + "";
  1997. rFIData.lifenumber = toolData.lifenumber + "";
  1998. rFIData.usetime = toolData.usetime + "";
  1999. rFIData.usenumber = toolData.usenumber + "";
  2000. rFIData.int1 = toolData.int1 + "";
  2001. rFIData.wearcompZ = toolData.wearcompZ + "";
  2002. rFIData.maxwearZ = toolData.maxwearZ + "";
  2003. rFIData.angle = toolData.angle + "";
  2004. rFIData.easycompX = toolData.easycompX + "";
  2005. rFIData.easycompY = toolData.easycompY + "";
  2006. rFIData.conscompZ = toolData.conscompZ + "";
  2007. RequestData<RFIData> rfidReq = new RequestData<RFIData>();
  2008. rfidReq.url = "10.161.30.248";
  2009. rfidReq.port = "102";
  2010. rfidReq.type = req.type;
  2011. rfidReq.data = rFIData;
  2012. Task<ResponseECSData> rfidResult = this.WriteRFID(rfidReq);
  2013. if (rfidResult.Result.result != "true")
  2014. {
  2015. Log.Instance.WriteLogAdd(ActionTypeEnum.ToolOut + "刀具出库==》写入RFID失败" + rfidResult.Result.msg + "=========" + JsonConvert.SerializeObject(req),
  2016. EnumHelper.GetDescription(ActionTypeEnum.ToolOut));
  2017. responseData.msg = "写入RFID失败===》" + rfidResult.Result.msg;
  2018. responseData.result = "false";
  2019. return responseData;
  2020. }
  2021. responseData.data = JsonConvert.SerializeObject(rfidReq);
  2022. //更新机床刀具库
  2023. RequestData<ToolData> toolOutReq = new RequestData<ToolData>();
  2024. toolOutReq.url = req.url;
  2025. toolOutReq.port = req.port;
  2026. toolOutReq.toolNo = req.toolNo;
  2027. toolOutReq.storgeFlag = req.storgeFlag;
  2028. toolOutReq.type = req.type;
  2029. Task<ResponseECSData> toolOutResult = this.updateToolInfo(toolOutReq);
  2030. if (toolOutResult.Result.result != "true")
  2031. {
  2032. Log.Instance.WriteLogAdd(ActionTypeEnum.ToolOut + "刀具出库==》更新机床刀具库失败:" + toolOutResult.Result.msg + "=====" + JsonConvert.SerializeObject(req),
  2033. EnumHelper.GetDescription(ActionTypeEnum.ToolOut));
  2034. responseData.msg = "更新机床刀具库失败===》" + toolOutResult.Result.msg;
  2035. responseData.result = "false";
  2036. return responseData;
  2037. }
  2038. }
  2039. catch (Exception ex)
  2040. {
  2041. Log.Instance.WriteLogAdd(ActionTypeEnum.ToolOut + "刀具出库===>>" + ex.Message + JsonConvert.SerializeObject(req),
  2042. EnumHelper.GetDescription(ActionTypeEnum.ToolOut));
  2043. responseData.msg = "更新机床刀具库失败===》" + ex.Message;
  2044. responseData.result = "false";
  2045. return responseData;
  2046. }
  2047. responseData.result = "true";
  2048. return responseData;
  2049. }
  2050. /// <summary>
  2051. /// 手动处理机器人取放动作
  2052. /// </summary>
  2053. public async Task<ResponseECSData> HandRobotAction(RequestData<LocationData> req)
  2054. {
  2055. ResponseECSData responseData = new ResponseECSData(req.taskId, req.taskNodeId);
  2056. try
  2057. {
  2058. List<Device> devices = _deviceService.GetDeviceList();
  2059. Device device = devices.Where(x => x.Ip == req.url && x.Port == req.port).FirstOrDefault();
  2060. if (device == null)
  2061. {
  2062. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "设备已离线===>>" + JsonConvert.SerializeObject(req),
  2063. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  2064. responseData.result = "false";
  2065. responseData.msg = ActionTypeEnum.RobotAction + "设备已离线===>>" + req.url;
  2066. return responseData;
  2067. }
  2068. CcsAction actionQuery = new CcsAction();
  2069. actionQuery.OperateType = ActionTypeEnum.RobotAction.ToString();
  2070. actionQuery.Ip = req.url;
  2071. CcsAction actionInfo = _ccsActionService.GetList(actionQuery).FirstOrDefault();
  2072. SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.Ip);
  2073. OperateResult ConnectionResult = s7.ConnectServer();
  2074. if (!ConnectionResult.IsSuccess)
  2075. {
  2076. s7.ConnectClose();
  2077. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(req),
  2078. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  2079. responseData.msg = ActionTypeEnum.RobotAction + "异常===>>" + "PLC连接不上" + actionInfo.Ip;
  2080. responseData.result = "false";
  2081. return responseData;
  2082. }
  2083. CcsActionAddress actionAddressQuery = new CcsActionAddress();
  2084. actionAddressQuery.ActionId = actionInfo.Id;
  2085. List<CcsActionAddress> CcsActionAddresses = _ccsActionAddressService.GetList(actionAddressQuery);
  2086. //查询条件
  2087. List<CcsActionAddress> CcsActionAddressChecks = new List<CcsActionAddress>();
  2088. CcsActionAddressChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.CHECK_PLC.ToString()).ToList();
  2089. foreach (CcsActionAddress actionAddress in CcsActionAddressChecks)
  2090. {
  2091. if (!string.IsNullOrEmpty(actionAddress.Address) && !string.IsNullOrEmpty(actionAddress.Value))
  2092. {
  2093. string operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  2094. if (actionAddress.CheckType ? operateResult != actionAddress.Value : operateResult == actionAddress.Value)
  2095. {
  2096. s7.ConnectClose();
  2097. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "条件不满足==地址:" + actionAddress.Address + "目标值:" + operateResult + "期望值:" + actionAddress.Value,
  2098. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  2099. responseData.result = "false";
  2100. responseData.msg = ActionTypeEnum.RobotAction + "异常===>>" + "条件不满足==地址:" + actionAddress.Address + "目标值:" + operateResult + "期望值:" + actionAddress.Value;
  2101. return responseData;
  2102. }
  2103. }
  2104. }
  2105. //为装载站三色灯特殊判断
  2106. if (threeDengDict.ContainsKey(req.data.location))
  2107. {
  2108. //取
  2109. string location = threeDengDict[req.data.location];
  2110. string getResult = s7.ReadInt16(location).Content.ToString();
  2111. //判断装载站是否允许取料
  2112. if (getResult != "9")
  2113. {
  2114. //判断装载站是否有料
  2115. if (getResult != "1" && getResult != "3")
  2116. {
  2117. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】,非有托盘状态" + JsonConvert.SerializeObject(req),
  2118. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  2119. responseData.result = "false";
  2120. responseData.msg = "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】,非有托盘状态";
  2121. s7.ConnectClose();
  2122. return responseData;
  2123. }
  2124. else
  2125. {
  2126. string postLocation = threeDengPostDict[req.data.location];
  2127. string postResult = s7.ReadInt16(postLocation).Content.ToString();
  2128. if (postResult == "8")
  2129. {
  2130. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】,等待允许取料中" + JsonConvert.SerializeObject(req),
  2131. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  2132. responseData.result = "false";
  2133. responseData.msg = "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】,等待允许取料中";
  2134. s7.ConnectClose();
  2135. return responseData;
  2136. }
  2137. //先请求取料
  2138. s7.Write(postLocation, Convert.ToInt16("8"));
  2139. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】,已请求取料" + JsonConvert.SerializeObject(req),
  2140. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  2141. responseData.result = "false";
  2142. responseData.msg = "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】,已请求取料";
  2143. s7.ConnectClose();
  2144. return responseData;
  2145. }
  2146. }
  2147. else if (getResult == "9")
  2148. {
  2149. //判断是否存在请求取料
  2150. string postLocation = threeDengPostDict[req.data.location];
  2151. string postResult = s7.ReadInt16(location).Content.ToString();
  2152. if (postResult == "9")
  2153. {
  2154. //消除请求
  2155. s7.Write(postLocation, Convert.ToInt16("0"));
  2156. }
  2157. }
  2158. }
  2159. else if (threeDengDict.ContainsKey(req.data.destLocation))
  2160. {
  2161. //放
  2162. string destLocation = threeDengDict[req.data.destLocation];
  2163. string getResult = s7.ReadInt16(destLocation).Content.ToString();
  2164. //判断装载站是否允许放料
  2165. if (getResult != "16")
  2166. {
  2167. //判断装载站是否有料
  2168. if (getResult != "0" && getResult != "2")
  2169. {
  2170. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.destLocation + "放条件不满足【" + getResult + "】,非无托盘状态" + JsonConvert.SerializeObject(req),
  2171. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  2172. responseData.result = "false";
  2173. responseData.msg = "异常===>>" + "点位" + req.data.destLocation + "放条件不满足【" + getResult + "】,非无托盘状态";
  2174. s7.ConnectClose();
  2175. return responseData;
  2176. }
  2177. else
  2178. {
  2179. string postLocation = threeDengPostDict[req.data.destLocation];
  2180. string postResult = s7.ReadInt16(postLocation).Content.ToString();
  2181. if (postResult == "16")
  2182. {
  2183. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.location + "放条件不满足【" + getResult + "】,等待允许放料中" + JsonConvert.SerializeObject(req),
  2184. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  2185. responseData.result = "false";
  2186. responseData.msg = "异常===>>" + "点位" + req.data.location + "放条件不满足【" + getResult + "】,等待允许放料中";
  2187. s7.ConnectClose();
  2188. return responseData;
  2189. }
  2190. //先请求放料
  2191. s7.Write(postLocation, Convert.ToInt16("16"));
  2192. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.destLocation + "放条件不满足【" + getResult + "】,已请求放料" + JsonConvert.SerializeObject(req),
  2193. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  2194. responseData.result = "false";
  2195. responseData.msg = "异常===>>" + "点位" + req.data.destLocation + "放条件不满足【" + getResult + "】,已请求放料";
  2196. s7.ConnectClose();
  2197. return responseData;
  2198. }
  2199. }
  2200. else if (getResult == "16")
  2201. {
  2202. //判断是否存在请求取料
  2203. string postLocation = threeDengPostDict[req.data.destLocation];
  2204. string postResult = s7.ReadInt16(postLocation).Content.ToString();
  2205. if (postResult == "16")
  2206. {
  2207. //消除请求
  2208. s7.Write(postLocation, Convert.ToInt16("0"));
  2209. }
  2210. }
  2211. }
  2212. //判断取放地址是否满足条件
  2213. if (pointDict.ContainsKey(req.data.location))
  2214. {
  2215. string location = pointDict[req.data.location]; //取
  2216. if (location != null)
  2217. {
  2218. string getResult = s7.ReadInt16(location).Content.ToString();
  2219. if (getResult != "9" && getResult != "8")
  2220. {
  2221. s7.ConnectClose();
  2222. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】" + JsonConvert.SerializeObject(req),
  2223. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  2224. responseData.result = "false";
  2225. responseData.msg = "异常===>>" + "点位" + req.data.location + "取条件不满足【" + getResult + "】";
  2226. return responseData;
  2227. }
  2228. }
  2229. }
  2230. if (pointDict.ContainsKey(req.data.destLocation))
  2231. {
  2232. string destLocation = pointDict[req.data.destLocation]; //放
  2233. if (destLocation != null)
  2234. {
  2235. string putResult = s7.ReadInt16(destLocation).Content.ToString();
  2236. if (putResult != "16")
  2237. {
  2238. s7.ConnectClose();
  2239. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "点位" + req.data.destLocation + "放条件不满足【" + putResult + "】" + JsonConvert.SerializeObject(req),
  2240. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  2241. responseData.result = "false";
  2242. responseData.msg = "异常===>>" + "点位" + req.data.destLocation + "放条件不满足【" + putResult + "】";
  2243. return responseData;
  2244. }
  2245. }
  2246. }
  2247. string log = "任务【" + req.taskNodeId + "】写入:";
  2248. //查询写入地址列表
  2249. List<CcsActionAddress> CcsActionAddressWrites = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE.ToString()).ToList();
  2250. foreach (CcsActionAddress actionAddress in CcsActionAddressWrites)
  2251. {
  2252. if (!string.IsNullOrEmpty(actionAddress.Address))
  2253. {
  2254. //string operateResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  2255. if (string.IsNullOrEmpty(actionAddress.Value))
  2256. {
  2257. //取参数传参值
  2258. string dataValue = getProperties(req.data, actionAddress.Description);
  2259. if (!string.IsNullOrEmpty(dataValue))
  2260. {
  2261. s7.Write(actionAddress.Address, Convert.ToInt16(dataValue));
  2262. log = log + "地址:" + actionAddress.Address + "【" + dataValue + "】";
  2263. }
  2264. }
  2265. else
  2266. {
  2267. s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
  2268. log = log + "地址:" + actionAddress.Address + "【" + actionAddress.Value + "】";
  2269. }
  2270. //同步更新数据库状态
  2271. //CcsTagValue tagValueQuery = new CcsTagValue();
  2272. //tagValueQuery.Ip = req.url;
  2273. //tagValueQuery.Address = actionAddress.Address;
  2274. //CcsTagValue tagValue = _ccsTagValueService.GetList(tagValueQuery).ToList().FirstOrDefault();
  2275. //if(tagValue != null)
  2276. //{
  2277. // tagValue.TagValue = actionAddress.Value;
  2278. // await _ccsTagValueService.Update(tagValue);
  2279. //}
  2280. }
  2281. }
  2282. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.RobotAction) + "===>>" + log
  2283. , EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  2284. Thread.Sleep(SLEEP_TIME);
  2285. List<CcsActionAddress> CcsActionAddressWriteChecks = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE_CHECK.ToString()).ToList();
  2286. bool checkFlag = true;
  2287. string returnMsg = "";
  2288. foreach (CcsActionAddress actionAddress in CcsActionAddressWriteChecks)
  2289. {
  2290. if (!string.IsNullOrEmpty(actionAddress.Address))
  2291. {
  2292. //取参数传参值
  2293. string dataValue = getProperties(req.data, actionAddress.Description);
  2294. //读取写入结果
  2295. string readWriteResult = s7.ReadInt16(actionAddress.Address).Content.ToString();
  2296. if (dataValue != readWriteResult)
  2297. {
  2298. returnMsg = "地址位:" + actionAddress.Address + "写入值:" + dataValue + "读出值:" + readWriteResult;
  2299. checkFlag = false;
  2300. break;
  2301. }
  2302. }
  2303. }
  2304. //不通过不写执行
  2305. if (!checkFlag)
  2306. {
  2307. s7.ConnectClose();
  2308. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "异常===>>" + "写入失败,plc没有写入相应的值" + JsonConvert.SerializeObject(req),
  2309. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  2310. responseData.result = "false";
  2311. responseData.msg = "写入异常===>>" + returnMsg;
  2312. return responseData;
  2313. }
  2314. //二次写入地址列表
  2315. string log2 = "任务【" + req.taskNodeId + "】二次写入:";
  2316. List<CcsActionAddress> CcsActionAddressWriteSeconds = CcsActionAddresses.Where(o => o.Type == ActionAddressTypeEnum.WRITE_SECOND.ToString()).ToList();
  2317. foreach (CcsActionAddress actionAddress in CcsActionAddressWriteSeconds)
  2318. {
  2319. if (!string.IsNullOrEmpty(actionAddress.Address))
  2320. {
  2321. if (string.IsNullOrEmpty(actionAddress.Value))
  2322. {
  2323. //取参数传参值
  2324. string dataValue = getProperties(req.data, actionAddress.Description);
  2325. if (!string.IsNullOrEmpty(dataValue))
  2326. {
  2327. log2 = log2 + "地址:" + actionAddress.Address + "【" + actionAddress.Value + "】";
  2328. s7.Write(actionAddress.Address, Convert.ToInt16(dataValue));
  2329. }
  2330. }
  2331. else
  2332. {
  2333. log2 = log2 + "地址:" + actionAddress.Address + "【" + actionAddress.Value + "】";
  2334. s7.Write(actionAddress.Address, Convert.ToInt16(actionAddress.Value));
  2335. }
  2336. Thread.Sleep(SLEEP_TIME);
  2337. }
  2338. }
  2339. Log.Instance.WriteLogAdd(EnumHelper.GetDescription(ActionTypeEnum.RobotAction) + "二次写入===>>" + log2
  2340. , EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  2341. s7.ConnectClose();
  2342. return responseData;
  2343. }
  2344. catch (Exception ex)
  2345. {
  2346. Log.Instance.WriteLogAdd(ActionTypeEnum.RobotAction + "取异常===>>" + ex.Message + JsonConvert.SerializeObject(req),
  2347. EnumHelper.GetDescription(ActionTypeEnum.RobotAction));
  2348. responseData.result = "false";
  2349. return responseData;
  2350. }
  2351. }
  2352. }
  2353. }