HttpRequestService.cs 145 KB

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