HttpRequestService.cs 153 KB

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