123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979 |
-
- using System;
- using System.Collections.Generic;
- using System.Reflection;
- using System.Windows.Forms;
- using Newtonsoft.Json;
- using System.Net;
- using System.Threading.Tasks;
- using System.Threading;
- using System.Text;
- using System.Configuration;
- using System.IO;
- using EasyModbusClient.redis;
- using EasyModbusClient.util;
- using EasyModbusClient.businessBody;
- using Newtonsoft.Json.Serialization;
- using EasyModbus;
- using YG.Device;
- using YG;
- using IMCS.Device;
- using IMCS.Device.body;
- using Newtonsoft.Json.Linq;
- using IMCS.Http.businessBody;
- using IMCS.Lib;
- using System.Linq;
- namespace EasyModbusClient
- {
- /*
- * string cmdreceive= CMDLib.Instance.WriteCmd($"netsh http add urlacl url={HttpServerUrlString} user=Everyone");
- YG.Log.Instance.WriteLogAdd($"启动HttpServer 默认添加允许项:{cmdreceive}");
- System.Threading.Thread.Sleep(500);
- */
- class ControllerHelper
- {
- private static string RETVAL = "success";
- private static int ASK_TIMES = 20;
- private static string VirtualProgram = ConfigurationManager.AppSettings["VirtualProgram"];
- private static int HEX_BINARY = 8;
- private uint currentToolArea = 1;
- private static string ConncetionRedisString = ConfigurationManager.AppSettings["ConncetionRedisString"];
- private static string HttpServerUrlString = ConfigurationManager.AppSettings["HttpServerUrlString"];
- private static string NcExtendPath = ConfigurationManager.AppSettings["NcExtendPath"];
- private static string NcUpLoadPath = ConfigurationManager.AppSettings["NcUpLoadPath"];
- private static string LocalNcPath = ConfigurationManager.AppSettings["LocalNcPath"];
- private static string ClsSFTP_IP = ConfigurationManager.AppSettings["ClsSFTP_Ip"];
- private static string ClsSFTP_Port = ConfigurationManager.AppSettings["ClsSFTP_Port"];
- private static string ClsSFTP_UserName = ConfigurationManager.AppSettings["ClsSFTP_UserName"];
- private static string ClsSFTP_PWD = ConfigurationManager.AppSettings["ClsSFTP_Pwd"];
- private void send(HttpListenerResponse response, short value, string machine = "WL")
- {
- ResponseBody responseBody = new ResponseBody();
- responseBody.Code = 0;
- responseBody.Msg = Constants.OPERATE_SUCCESS_MSG;
- response.StatusCode = 200;
- response.ContentType = "application/json;charset=UTF-8";
- response.ContentEncoding = Encoding.UTF8;
- response.AppendHeader("Content-Type", "application/json;charset=UTF-8");
- using (StreamWriter writer = new StreamWriter(response.OutputStream, Encoding.UTF8))
- {
- string respstring = "";
- if (value == -3)
- {
- respstring = "关状态";
- }
- else if (value == -4)
- {
- respstring = "开状态";
- }
- if (machine == "JC")
- {
- switch (value)
- {
- case 1:
- respstring = "执行程序成功";
- break;
- case 2:
- respstring = "执行程序失败";
- break;
- case 3:
- respstring = "不满足前置条件";
- break;
- }
- }
- if (machine == "WL")
- {
- switch (value)
- {
- case 1:
- respstring = "执行取动作";
- break;
- case 4:
- respstring = "执行放动作";
- break;
- case 7:
- respstring = "执行移动动作";
- break;
- case 2:
- respstring = "取执行中";
- break;
- case 3:
- respstring = "取完成";
- break;
- case 5:
- respstring = "放执行中";
- break;
- case 6:
- respstring = "放完成";
- break;
- case 8:
- respstring = "移动完成";
- break;
- case 9:
- respstring = "机器人故障";
- break;
- case 10:
- respstring = "打标完成";
- break;
- case 11:
- respstring = "清洗剂执行中";
- break;
- case 12:
- respstring = "不满足清晰条件";
- break;
- }
- }
- else if (machine == "LHT")
- {
- switch (value)
- {
- case 1:
- respstring = "执行取动作";
- break;
- case 2:
- respstring = "取完成";
- break;
- case 3:
- respstring = "执行放动作";
- break;
- case 4:
- respstring = "放完成";
- break;
- case 5:
- respstring = "取执行中";
- break;
- case 6:
- respstring = "放执行中";
- break;
- }
- }
- writer.Write(respstring);
- writer.Close();
- response.Close();
- }
- }
- //httpser服务
- public void StartHttpServer()
- {
- CommonUtil.InitXml();
- HttpListener listener = new HttpListener();// HTTP 协议侦听器
- LibCMD.Instance.WriteCmd(HttpServerUrlString);
- listener.Prefixes.Add(HttpServerUrlString);// 配置访问权限地址
- listener.Start();
- CommonUtil.WriteAccessLog(DateTime.Now + ">>>监听服务启动Listening>>>>");
- Task task = Task.Factory.StartNew(() =>
- { // 创建异步task
- while (listener.IsListening)
- {
- HttpListenerContext context = listener.GetContext();
- HttpListenerRequest request = context.Request;
- HttpListenerResponse response = context.Response;
- try
- {
- Servlet servlet = new MyServlet();
- servlet.onCreate();
- if (!request.Url.ToString().Contains("favicon"))
- {
- if (request.HttpMethod == "POST")
- {
- Stream stream = context.Request.InputStream;
- StreamReader reader = new StreamReader(stream, Encoding.UTF8);
- string body = reader.ReadToEnd();
- YG.Log.Instance.WriteLogAdd(">>>===收到POST数据 : >>>>===" + body);
- CcsRequestBody ccsRequestBody = JsonJavaScriptSerializer.FromJSON<CcsRequestBody>(body);
- string url = (ccsRequestBody.Url + ":" + ccsRequestBody.Port);
- string businessType = ccsRequestBody.BusinessType;
- DeviceList conDeviceInfo = DeviceManage.Instance.GetOne(url);
- ResponseBody responseBody = ResponseBody.newObject();
- response.StatusCode = 200;
- response.ContentType = "application/json;charset=UTF-8";
- response.ContentEncoding = Encoding.UTF8;
- response.AppendHeader("Content-Type", "application/json;charset=UTF-8");
- if (conDeviceInfo != null)
- {
- if (!string.IsNullOrEmpty(businessType))
- {
- if (businessType.Equals("testwork"))
- {
- conDeviceInfo.DeviceSend("DB200.52", "1111".ReturnBtyesWtitString(40));
- System.Threading.Thread.Sleep(1100);
- conDeviceInfo.DeviceSend("DB200.92", "1111".ReturnBtyesWtitString(20));
- }
- if (businessType.Equals("uploadProgram"))
- {
- responseBody = UpLoadNc(conDeviceInfo, ccsRequestBody.Data, ccsRequestBody);
- }
- else if (businessType.Equals("deleteProgram"))
- {
- responseBody = DeleteNCProgram(conDeviceInfo, ccsRequestBody.Data, ccsRequestBody);
- }
- else if (businessType.Equals("execProgram"))
- {
- CcsRequestBody itemrequestbody = ccsRequestBody.clone() as CcsRequestBody;
- DeviceOPCUat itemreadopcua = (DeviceOPCUat)conDeviceInfo;
- int runcount = 0;
- Task.Factory.StartNew(async () =>
- {
- while (true)
- {
- runcount++;
- if (runcount > 10)
- {
- break;
- }
- await Task.Delay(2000);
- List<string> itemopcuavalue = itemreadopcua.OpcUa_Read(new List<string> { "/Plc/M1300.0", "/Plc/I37.1" });
- if (itemopcuavalue.Where(m => m.Equals("False")).Count() == 0 && itemopcuavalue.Count > 0)
- // List<string> itemopcuavalue = itemreadopcua.OpcUa_Read(new List<string> { "/Plc/M1300.0"});
- //if (itemopcuavalue.Where(m => m.Equals("False")).Count() == 0 && itemopcuavalue.Count > 0)
- {
- try
- {
- if (SelectedNCProgram(conDeviceInfo, itemrequestbody.Data, itemrequestbody))
- {
- try
- {
- System.Threading.Thread.Sleep(2000);
- responseBody = WriteValue(conDeviceInfo, itemrequestbody, true);
- break;
- }
- catch (Exception eex)
- {
- YG.Log.Instance.WriteLogAdd($"247-->程序执行中出现了异常情况-->{eex.Message}");
- }
- }
- else
- {
- YG.Log.Instance.WriteLogAdd($"------------->>>选择程序出现异常");
- }
- }
- catch (Exception ex)
- {
- YG.Log.Instance.WriteLogAdd($"247-->程序出现异常-->{ex.Message}");
- }
- }
- }
- });
- //将选中程序和执行程序合并 一个指令执行
- }
- else
- {
- responseBody = WriteValue(conDeviceInfo, ccsRequestBody, true);
- }
- //如果此操作成功,加入回调任务队列
- if (responseBody.Code == Constants.RET_SUCCESS_CODE)
- {
- callResponse(ccsRequestBody, conDeviceInfo.ServerUrl, Constants.RET_SUCCESS_CODE, Constants.OPERATE_SUCCESS_MSG);
- }
- var serializerSettings = new JsonSerializerSettings()
- {
- // 设置为驼峰命名
- ContractResolver = new CamelCasePropertyNamesContractResolver()
- };
- using (StreamWriter writer = new StreamWriter(response.OutputStream, Encoding.UTF8))
- {
- YG.Log.Instance.WriteLogAdd($"WMS--->>{responseBody.Json_SerializeObject()}--->>{body}\r\n");
- writer.Write(JsonConvert.SerializeObject(responseBody, Formatting.Indented, serializerSettings));
- writer.Close();
- response.Close();
- }
- }
- }
- else
- {
- using (StreamWriter writer = new StreamWriter(response.OutputStream, Encoding.UTF8))
- {
- YG.Log.Instance.WriteLogAdd($"WMS--->>{responseBody.Json_SerializeObject()}--->>{body}\r\n");
- responseBody.Code = 3;
- responseBody.Msg = "无法找到相关设备,请检查网络是否通畅";
- writer.Write(responseBody.Json_SerializeObject());
- writer.Close();
- response.Close();
- }
- YG.Log.Instance.WriteLogAdd("---->>没有检测到当前设备");
- }
- }
- }
- }
- catch (Exception ex)
- {
- CommonUtil.WriteAccessLog(DateTime.Now + ">>>===HTTP Server监听器异常 {0}信息 : >>>>===" + ex.ToString());
- listener.Stop();
- StartHttpServer();
- }
- }
- });
- task.Wait();
- }
- bool IsRun = true;
- private ResponseBody UpLoadNc(DeviceList device, object data, CcsRequestBody ccsRequestBody)
- {
- CcsRequestBody itemrequestbody = ccsRequestBody.clone() as CcsRequestBody;
- DeviceOPCUat itemreadopcua = (DeviceOPCUat)device;
- int runcount = 0;
- bool tasksleep = true;
- while (tasksleep)
- {
- List<string> itemopcuavalue = itemreadopcua.OpcUa_Read(new List<string> { "/Plc/M1300.0", "/Plc/I37.1" });
- if (itemopcuavalue.Where(m => m.Equals("False")).Count() == 0 && itemopcuavalue.Count > 0)
- // List<string> itemopcuavalue = itemreadopcua.OpcUa_Read(new List<string> { "/Plc/M1300.0"});
- if (itemopcuavalue.Where(m => m.Equals("False")).Count() == 0 && itemopcuavalue.Count > 0)
- {
- tasksleep = false;
- }
- }
- SFTPDeviceBody sftpBody = DeviceManage.Instance.GetSFTPOne(device.Ip);
- ResponseBody resBody = ResponseBody.newObject();
- //将对象转为文件名数组
- //string json = JsonConvert.SerializeObject(data);
- JArray array = (JArray)JsonConvert.DeserializeObject(data.ToString());
- List<UploadFileBody> list = array.ToObject<List<UploadFileBody>>();
- foreach (UploadFileBody uploadBody in list)
- {
- string fileName = uploadBody.fileName;
- DeviceSFTP helper = new DeviceSFTP(sftpBody);
- try
- {
- bool ifcon = helper.Connect();
- if (ifcon)
- {
- var cc = helper.Put(LocalNcPath + fileName, sftpBody.Path + fileName);
- helper.Disconnect();
- }
- else
- {
- resBody.Msg = "upload failed";
- resBody.Code = Constants.RET_FAILURE_CODE;
- return resBody;
- }
- }
- catch (Exception ex)
- {
- YG.Log.Instance.WriteLogAdd($"297-->{ex.Message}");
- resBody.Msg = ex.Message;
- resBody.Code = Constants.RET_FAILURE_CODE;
- return resBody;
- }
- }
- return resBody;
- }
- //选中机床中的NC程序
- public bool SelectedNCProgram(DeviceList device, object data, CcsRequestBody ccsRequestBody)
- {
- string fileName = data.ObjectToString();
- SFTPDeviceBody sftpBody = DeviceManage.Instance.GetSFTPOne(device.Ip);
- DeviceOPCUat opc = (DeviceOPCUat)device;
- bool flag = opc.OpcUa_Select(sftpBody.NcExtendPath, fileName);
- return flag;
- }
- //删除机床中的NC程序
- public ResponseBody DeleteNCProgram(DeviceList device, object data, CcsRequestBody ccsRequestBody)
- {
- ResponseBody resBody = ResponseBody.newObject();
- SFTPDeviceBody sftpBody = DeviceManage.Instance.GetSFTPOne(device.Ip);
- DeviceOPCUat opc = (DeviceOPCUat)device;
- //将对象转为文件名数组
- //string json = JsonConvert.SerializeObject(data);
- JArray array = (JArray)JsonConvert.DeserializeObject(data.ToString());
- List<UploadFileBody> list = array.ToObject<List<UploadFileBody>>();
- foreach (UploadFileBody uploadBody in list)
- {
- string fileName = uploadBody.fileName;
- DeviceSFTP helper = new DeviceSFTP(sftpBody);
- helper.DeleteFile(sftpBody, fileName);
- //string status = opc.OpcUa_DeleteFile(sftpBody.Path,fileName);
- }
- resBody.Msg = Constants.DEL_PROGRAME_SUCCESS_MSG;
- resBody.Code = Constants.RET_SUCCESS_CODE;
- return resBody;
- }
- private void callResponse(CcsRequestBody ccsRequestBody, string serverUrl, int code = -1, string msg = "")
- {
- if (code == -1)
- {
- code = Constants.RET_SUCCESS_CODE;
- }
- if (string.IsNullOrWhiteSpace(msg))
- {
- msg = Constants.OPERATE_SUCCESS_MSG;
- }
- //如果此操作成功,加入回调任务队列
- ccsRequestBody.Data = code + "";
- ccsRequestBody.Msg = msg;
- CommonUtil.ResponseTaskList(ccsRequestBody, serverUrl);
- }
- //写入对应的值
- public ResponseBody WriteValue(DeviceList device, CcsRequestBody ccsRequestBody, bool isCheck)
- {
- string parentKey = ccsRequestBody.BusinessType;
- ResponseBody resBody = ResponseBody.newObject();
- Node parentNode = CommonUtil.GetTargetNode(device.ServerUrl, parentKey);
- //将读类型赋予设备,供s7协议使用
- device.ReadType = parentNode.ReadType;
- bool isAsk = parentNode.IsAsk;
- try
- {
- //校验条件是否满足
- resBody = CheckCondition(parentKey, device, isAsk);
- if (resBody.Code != 2)
- {
- resBody.Msg = Constants.CONDITUIN_CHECK_FAILURE_MSG;
- resBody.Code = Constants.RET_CONDITUIN_CHECK_FAILURE_CODE;
- return resBody;
- }
- if (device.Dtype.Equals(DeviceType.OPCUa))
- {
- DeviceOPCUat opcua = (DeviceOPCUat)device;
- bool flag = opcua.OpcUa_WriteValue(parentNode.Address, parentNode.Value);
- //如果此操作失败返回
- if (!flag)
- {
- YG.Log.Instance.WriteLogAdd($"------------------>>>>>>>>>>>>>>>>>>>>>>>机床执行程序出现错误");
- resBody.Data = Constants.RET_FAILURE_CODE + "";
- resBody.Msg = Constants.OPERATE_FAILURE_MSG;
- return resBody;
- }
- }
- else if (device.Dtype.Equals(DeviceType.PLC_S7))
- {
- DeviceS7 s7 = (DeviceS7)device;
- //当是智能取或放时 先调智能单元取和放的方法,再执行,如果是柔性产线 需在此处再加一个判断
- //取物品
- if (parentKey.ToUpper().Equals("FETCHMATERIAL") || parentKey.ToUpper().Equals("PUTMATERIAL"))
- {
- #region 取物品
- if (parentKey.ToUpper().Equals("FETCHMATERIAL") && ccsRequestBody.Data != null)
- {
- if (parentNode.Title.Contains("智能单元"))
- {
- int v = ccsRequestBody.Data.ObjectToInt();
- s7.DeviceSend("DB3.6", ccsRequestBody.Data.ObjectToString(), parentNode.ReadType);
- }
- else if (parentNode.Title.Contains("柔性线"))
- {
- int v = ccsRequestBody.Data.ObjectToInt();
- s7.DeviceSend("DB200.46", ccsRequestBody.Data.ObjectToString(), parentNode.ReadType);
- }
- else if (parentNode.Title.Contains("质量中心"))
- {
- int v = ccsRequestBody.Data.ObjectToInt();
- s7.DeviceSend("DB200.46", ccsRequestBody.Data.ObjectToString(), parentNode.ReadType);
- }
- Thread.Sleep(50);
- }
- #endregion
- #region 放物品
- //放物品
- if (parentKey.ToUpper().Equals("PUTMATERIAL") && ccsRequestBody.Data != null)
- {
- if (parentNode.Title.Contains("智能单元"))
- {
- s7.DeviceSend("DB3.8", ccsRequestBody.Data.ObjectToString(), parentNode.ReadType);
- }
- else if (parentNode.Title.Contains("柔性线"))
- {
- int v = ccsRequestBody.Data.ObjectToInt();
- s7.DeviceSend("DB200.48", ccsRequestBody.Data.ObjectToString(), parentNode.ReadType);
- }
- else if (parentNode.Title.Contains("质量中心"))
- {
- int v = ccsRequestBody.Data.ObjectToInt();
- s7.DeviceSend("DB200.48", ccsRequestBody.Data.ObjectToString(), parentNode.ReadType);
- }
- Thread.Sleep(50);
- }
- #endregion
- System.Threading.Thread.Sleep(1100);
- s7.DeviceSend(parentNode.Address, parentNode.Value, parentNode.ReadType);
- #region 取,放下发动作之后,上报mes
- //resBody.Code = Constants.RET_SUCCESS_CODE;
- //resBody.Msg = Constants.OPERATE_SUCCESS_MSG;
- //如果此操作成功,加入回调任务队列
- //ccsRequestBody.Data = resBody.Code + "";
- //ccsRequestBody.Msg = resBody.Msg;
- // CommonUtil.RequestTaskList(ccsRequestBody);
- #endregion
- }
- #region 移动
- //移动
- if (parentKey.ToUpper().Equals("MOVEMATERIAL") && parentNode.Title.Contains("柔性线") && ccsRequestBody.Data != null)
- {
- int v = ccsRequestBody.Data.ObjectToInt();
- short pintindex = s7.DeviceRead<short>("DB200.40");
- var cc = DeviceConfig.Instance.PointDefaultList.Where(m => m.Train_Index.Equals(pintindex)).FirstOrDefault();
- //if (cc.Point.Where(m => m.Equals(ccsRequestBody.Data.ObjectToShort())).Count() == 0)
- //{
- s7.DeviceSend("DB200.48", ccsRequestBody.Data.ObjectToString(), parentNode.ReadType);
- System.Threading.Thread.Sleep(500);
- s7.DeviceSend(parentNode.Address, parentNode.Value, parentNode.ReadType);
- //}
- //response(ccsRequestBody, Constants.RET_SUCCESS_CODE, Constants.OPERATE_SUCCESS_MSG);
- }
- #endregion
- #region 清洗剂操作
- if (parentKey.ToUpper().Equals("CLEAN"))
- {
- //if (s7.DeviceRead<bool>("DB300.0.7"))
- // {
- // s7.DeviceSend("DB300.1.2", true);
- s7.DeviceSend("DB300.1.2", true, "2");
- System.Threading.Thread.Sleep(500);
- s7.DeviceSend("DB300.1.0", true, "2");
- //s7.DeviceSend("DB300.1.0", true);
- System.Threading.Thread.Sleep(1000);
- s7.DeviceSend("DB300.1.0", false, "2");
- System.Threading.Thread.Sleep(1000);
- //s7.DeviceSend("DB300.1.0", false);
- // response(ccsRequestBody, Constants.RET_SUCCESS_CODE, Constants.OPERATE_SUCCESS_MSG);
- }
- #endregion
- #region 三坐标处理
- if (parentKey.ToUpper().Equals("TESTWORK"))
- {
- TestWorkData testWorkData = Newtonsoft.Json.JsonConvert.DeserializeObject<TestWorkData>(ccsRequestBody.Data.ToString());
- if (testWorkData != null)
- {
- var te = testWorkData.WorkId.ReturnBtyesWtitString(40);
- device.DeviceSend("DB200.52", testWorkData.WorkId.ReturnBtyesWtitString(40));
- System.Threading.Thread.Sleep(1100);
- device.DeviceSend("DB200.92", testWorkData.WorkType.ReturnBtyesWtitString(20));
- System.Threading.Thread.Sleep(1000);
- short mc = 1;
- device.DeviceSend("DB200.34", mc);
- System.Threading.Thread.Sleep(1000);
- mc = 0;
- device.DeviceSend("DB200.34", mc);
- }
- }
- #endregion
- #region 打标
- if (parentKey.ToUpper().Equals("PRINT"))
- {
- try
- {
- DeviceList devicesocket = DeviceManage.Instance.deviceList.Where(m => m.Key.Equals("192.168.170.76:8074")).FirstOrDefault().Value;
- devicesocket.DeviceSend(ccsRequestBody.Data);
- short mc = 1;
- mc = 0;
- device.DeviceSend("DB200.24", mc);
- System.Threading.Thread.Sleep(1000);
- mc = 1;
- s7.DeviceSend("DB200.28", mc, "1");
- System.Threading.Thread.Sleep(1000);
- mc = 0;
- //s7.DeviceSend("DB200.28", mc);
- s7.DeviceSend("DB200.28", mc, "1");
- }
- catch (Exception ex)
- {
- YG.Log.Instance.WriteLogAdd($"498-->{ex.Message}");
- //response(ccsRequestBody, Constants.RET_CONDITUIN_CHECK_FAILURE_CODE, Constants.CONDITUIN_CHECK_FAILURE_MSG);
- YG.Log.Instance.WriteLogAdd($"{ex.Message}");
- }
- }
- #endregion
- #region RFID读写
- if (parentKey.ToUpper().Equals("RFIDREAD"))
- {
- try
- {
- //List<RfidDefaultList> testWorkData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<RfidDefaultList>>(ccsRequestBody.Data.ToString());
- //var te = ccsRequestBody.Data.ToString().ReturnBtyesWtitString(256);
- ////device.DeviceSend("DB200.938", testWorkData.WorkId.ReturnBtyesWtitString(40));
- ////System.Threading.Thread.Sleep(1100);
- ////device.DeviceSend("DB200.92", testWorkData.WorkType.ReturnBtyesWtitString(20));
- //short mc = 1;
- //device.DeviceSend("DB200.112", mc);
- //System.Threading.Thread.Sleep(1000);
- //mc = 0;
- //device.DeviceSend("DB200.112", mc);
- //string rfidvalue = s7.DeviceRead("DB200.116.0", "5", 256);
- ccsRequestBody.IsCallBackFlag = 0;
- resBody.Data = DeviceRfid.Instance.DeviceRead($"{ccsRequestBody.Url}:{ccsRequestBody.Port}").Json_SerializeObject();
- YG.Log.Instance.WriteLogAdd($"RFIDREAD-->{resBody.Json_SerializeObject()}");
- }
- catch (Exception ex) { YG.Log.Instance.WriteLogAdd($"549--->{ex.Message}"); }
- }
- if (parentKey.ToUpper().Equals("RFIDWRITE"))
- {
- try
- {
- List<RfidDefaultList> testWorkData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<RfidDefaultList>>(ccsRequestBody.Data.ToString());
- ////TestWorkData testWorkData = Newtonsoft.Json.JsonConvert.DeserializeObject<TestWorkData>(ccsRequestBody.Data.ToString());
- //device.DeviceSend("DB200.372.0", ccsRequestBody.Data.ToString().ReturnBtyesWtitString(256));
- //short mc = 1;
- //device.DeviceSend("DB200.114", mc);
- //System.Threading.Thread.Sleep(1000);
- //mc = 0;
- //device.DeviceSend("DB200.114", mc);
- //YG.Log.Instance.WriteLogAdd($"RFIDWRITE-->");
- ccsRequestBody.IsCallBackFlag = 0;
- resBody.Data = "RFID写入结果->" + DeviceRfid.Instance.DeviceSend(testWorkData, $"{ccsRequestBody.Url}:{ccsRequestBody.Port}").Json_SerializeObject();
- YG.Log.Instance.WriteLogAdd($"RFIDREAD-->{resBody.Json_SerializeObject()}");
- }
- catch (Exception ex) { YG.Log.Instance.WriteLogAdd($"567--->{ex.Message}"); }
- }
- #endregion
- }
- }
- catch (Exception ex)
- {
- YG.Log.Instance.WriteLogAdd($"508-->{ex.Message}");
- resBody.Code = Constants.RET_FAILURE_CODE;
- resBody.Msg = ex.Message;
- return resBody;
- }
- resBody.Code = Constants.RET_SUCCESS_CODE;
- resBody.Msg = Constants.OPERATE_SUCCESS_MSG;
- return resBody;
- }
- public ResponseBody CheckCondition(string parentKey, DeviceList device, bool isAsk)
- {
- ResponseBody resBody = ResponseBody.newObject();
- List<Node> list = CommonUtil.GetTargetList(device.ServerUrl, parentKey);
- if (list.Count == 0)
- {
- resBody.Code = Constants.RET_CONDITUIN_CHECK_SUCCESS_CODE;
- resBody.Msg = Constants.CONDITUIN_CHECK_SUCCESS_MSG;
- return resBody;
- }
- try
- {
- if (device.Dtype.Equals(DeviceType.OPCUa))
- {
- DeviceOPCUat opcua = (DeviceOPCUat)device;
- List<string> nodeIdStrings = new List<string>();
- foreach (Node nd in list)
- {
- nodeIdStrings.Add(nd.Address);
- }
- List<string> retValueList = opcua.OpcUa_Read(nodeIdStrings);
- //比较目标值是否一致
- for (int i = 0; i < list.Count; i++)
- {
- Node cNode = list[i];
- if (!retValueList[i].Equals(cNode.TargetValue))
- {
- Node parentNode = CommonUtil.GetTargetNode(device.ServerUrl, parentKey);
- resBody.Code = Constants.RET_CONDITUIN_CHECK_FAILURE_CODE;
- resBody.Msg = cNode.Title + "状态不符合" + parentNode.Title + "条件。";
- break;
- }
- }
- }
- else if (device.Dtype.Equals(DeviceType.PLC_S7))
- {
- DeviceS7 s7 = (DeviceS7)device;
- foreach (Node nd in list)
- {
- string respvalue = "";
- if (nd == null || nd.Address.StringIsEmpty())
- {
- Log.Instance.WriteLogAdd($"593-->为空->{s7.DeviceName}");
- }
- respvalue = s7.DeviceRead(nd.Address.Trim(), nd.ReadType);
- int itemnumber = nd.TargetValue.StringToInt();
- if (itemnumber < 0)
- {
- if (respvalue.Equals(Math.Abs(itemnumber).ToString()))
- {
- Node parentNode = CommonUtil.GetTargetNode(device.ServerUrl, parentKey);
- resBody.Code = Constants.RET_CONDITUIN_CHECK_FAILURE_CODE;
- resBody.Msg = nd.Title + "状态不符合" + parentNode.Title + "条件。";
- break;
- }
- }
- else if (!respvalue.Equals(nd.TargetValue))
- {
- Node parentNode = CommonUtil.GetTargetNode(device.ServerUrl, parentKey);
- resBody.Code = Constants.RET_CONDITUIN_CHECK_FAILURE_CODE;
- resBody.Msg = nd.Title + "状态不符合" + parentNode.Title + "条件。";
- break;
- }
- }
- }
- }
- catch (Exception ex)
- {
- YG.Log.Instance.WriteLogAdd($"582-->{ex.Message}");
- resBody.Code = Constants.RET_CONDITUIN_CHECK_FAILURE_CODE;
- resBody.Msg = ex.Message;
- return resBody;
- }
- if (resBody.Code == 1)
- {
- resBody.Code = Constants.RET_CONDITUIN_CHECK_SUCCESS_CODE;
- resBody.Msg = Constants.CONDITUIN_CHECK_SUCCESS_MSG;
- }
- return resBody;
- }
- private string OperAsk(Node parentNode, ModbusClient server, int times)
- {
- string ret = RETVAL;
- bool isContinue = true;
- for (int n = 0; n < times; n++)
- {
- if (parentNode != null)
- {
- string[] adresses = (parentNode.Address).Split(util.CommonUtil.SEPLIT_CHAR);
- string[] targetValues = (parentNode.TargetValue).Split(util.CommonUtil.SEPLIT_CHAR);
- List<string> nodeIdStrings = new List<string>();
- //foreach (string row in adresses)
- //{
- // nodeIdStrings.Add(new NodeId(row, (ushort)2).ToString());
- //}
- //List<string> readValueList = server.ReadValues(nodeIdStrings);
- //for (int i = 0; i < readValueList.Count; i++)
- //{
- // if (targetValues[i].ToLower().Equals(readValueList[i].ToLower()))
- // {
- // //ret = parentNode.Title + "当前已是操作状态,无需重复操作。";
- // isContinue = false;
- // break;
- // }
- //}
- }
- Thread.Sleep(1000 * 5);
- if (!isContinue)
- {
- break;
- }
- }
- return ret;
- }
- //采集信息
- public bool GetDeviceCollectData()
- {
- foreach (ConnectDeviceBody body in DeviceManage.Instance.GetConnectDeviceList())
- {
- try
- {
- DeviceList device = DeviceManage.Instance.GetOne(body.ServerUrl);
- //read组的配置
- List<Node> readNodeList = CommonUtil.GetTargetList(device.ServerUrl, "read");
- CollectDataBody deviceRedisState = new CollectDataBody();
- //根据配置里边的read组配置, 把读到的值放到这个里边
- List<string> readNodeValueStrings = new List<string>();
- if (device.Dtype.Equals(DeviceType.OPCUa))
- {
- try
- {
- DeviceOPCUat opcua = (DeviceOPCUat)device;
- //read组配置的地址列表
- List<string> readNodeAddressStrings = new List<string>();
- foreach (Node nd in readNodeList)
- {
- readNodeAddressStrings.Add(nd.Address);
- }
- Thread.Sleep(20);
- readNodeValueStrings = opcua.OpcUa_Read(readNodeAddressStrings);
- }
- catch (Exception exxx) { YG.Log.Instance.WriteLogAdd($"692-->{exxx.Message}"); }
- }
- else if (device.Dtype.Equals(DeviceType.PLC_S7))
- {
- DeviceS7 s7 = (DeviceS7)device;
- try
- {
- foreach (Node nd in readNodeList)
- {
- if (nd == null || nd.Address.StringIsEmpty())
- {
- Log.Instance.WriteLogAdd($"709-->为空->{s7.DeviceName}");
- }
- readNodeValueStrings.Add(s7.DeviceRead(nd.Address, nd.ReadType));
- Thread.Sleep(20);
- }
- }
- catch (Exception exxx) { YG.Log.Instance.WriteLogAdd($"706-->{exxx.Message}"); }
- }
- //将结果值赋给节点
- for (int i = 0; i < readNodeList.Count; i++)
- {
- try
- {
- if (readNodeValueStrings.Count > 0)
- {
- Node readValNode = readNodeList[i];
- readValNode.Value = readNodeValueStrings[i];
- }
- }
- catch (Exception exxx) { YG.Log.Instance.WriteLogAdd($"719-->{exxx.Message}"); }
- }
- //反射赋值
- Type t = deviceRedisState.GetType();
- foreach (PropertyInfo pi in t.GetProperties())
- {
- try
- {
- string name = pi.Name;//获得属性的名字,后面就可以根据名字判断来进行些自己想要的操作
- if (pi.Name.Equals("AllowFetchMaterial"))
- {
- }
- foreach (Node nd in readNodeList)
- {
- if (nd.Key == name)
- {
- if (nd.IsBinary)
- {
- //处理二进制值,赋给对象
- pi.SetValue(deviceRedisState, CommonUtil.GetBinaryBit(Convert.ToInt32(nd.Value), nd.StartPos, nd.EndPos), null);
- }
- else
- {//主程序取名称
- if (name == "MainProgNo" && !string.IsNullOrEmpty(nd.Value))
- {
- string[] mainProgNoArray = nd.Value.Split('/');
- string mainProgNo = mainProgNoArray[mainProgNoArray.Length - 1];
- mainProgNo = mainProgNo.StartsWith("_") ? mainProgNo.Substring(1, mainProgNo.Length - 1) : mainProgNo;
- pi.SetValue(deviceRedisState, mainProgNo, null);
- }
- else if (name == "SpActSpeed" && !string.IsNullOrEmpty(nd.Value))
- {
- pi.SetValue(deviceRedisState, (Convert.ToInt32(Convert.ToDouble(nd.Value)) + ""), null);
- }
- else
- {
- pi.SetValue(deviceRedisState, nd.Value, null);//给对象赋值
- }
- }
- }
- }
- }
- catch (Exception exx)
- {
- YG.Log.Instance.WriteLogAdd($"764-->{exx.Message}");
- }
- }
- try
- {
- deviceRedisState.NowDate = string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now);
- string jsonData = JsonConvert.SerializeObject(deviceRedisState);
- ServiceStackRedisHelper.SetValue(device.ServerUrl, jsonData.ToString());
- }
- catch (Exception exs)
- {
- YG.Log.Instance.WriteLogAdd($"916------>>{exs.Message}");
- }
- //回调请求 每隔5秒调一次
- int currentSencond = DateTime.Now.Second;
- // if (currentSencond % 3 == 0)
- {
- try
- {
- CommonUtil.CallBackRequest(device);
- }
- catch(Exception exs)
- {
- YG.Log.Instance.WriteLogAdd($"922------>>{exs.Message}");
- }
- }
- }
- catch (Exception ex)
- {
- YG.Log.Instance.WriteLogAdd($"776-->{ex.Message}");
- return false;
- }
- }
- return true;
- }
- }
- public class Servlet
- {
- public virtual void onGet(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response, string info) { }
- public virtual void onPost(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response) { }
- public virtual void onCreate()
- {
- }
- }
- public class MyServlet : Servlet
- {
- public override void onCreate()
- {
- base.onCreate();
- }
- public override void onGet(HttpListenerRequest request, HttpListenerResponse response, string info)
- {
- byte[] buffer = Encoding.UTF8.GetBytes(info);
- System.IO.Stream output = response.OutputStream;
- output.Write(buffer, 0, buffer.Length);
- output.Close();
- }
- public override void onPost(HttpListenerRequest request, HttpListenerResponse response)
- {
- Console.WriteLine("POST:" + request.Url);
- byte[] res = Encoding.UTF8.GetBytes("OK");
- response.OutputStream.Write(res, 0, res.Length);
- }
- }
- }
|