using HslCommunication; using HslCommunication.Profinet.Siemens; using IWareCommon.Help; using SiemenDevice.CacheInfo; using SiemenDevice.Model; using SiemenDevice.Properties; using SiemenDevice.WCF; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceModel; using System.ServiceProcess; using System.Text; using System.Threading; using System.Threading.Tasks; namespace SiemenDevice { partial class Service : ServiceBase { Thread tskGetConveyorInfo1;//获取立库输送线的任务完成等信息的线程 Thread tskGetSrmInfo1;//获取立库Srm1的任务完成等信息的线程 Thread tskGetSrmInfo2;//获取立库Srm2的任务完成等信息的线程 Thread tskGetRgvInfo1;//获取立库Srm1的任务完成等信息的线程 Thread tskGetRgvInfo2;//获取立库Srm2的任务完成等信息的线程 Thread tskGetCDInfo;//获取立库Srm2的任务完成等信息的线程 public ServiceHost ControlCenterWcfHost = null; //创建连接对象 List lst1Db = new List(); List lst2Db = new List(); public Service() { InitializeComponent(); } protected override void OnStart(string[] args) { LogTextHelper.WriteLine(Resources.LogDir, "西门子设备信息获取服务开始启动!"); lst1Db.Add("Line1030"); lst1Db.Add("Line1031"); lst1Db.Add("Line1032"); lst1Db.Add("Line1033"); lst1Db.Add("Line1013"); lst1Db.Add("Line1014"); lst1Db.Add("Line1015"); lst1Db.Add("Line1016"); lst1Db.Add("Line1021"); lst1Db.Add("Line1022"); lst1Db.Add("Line1023"); lst1Db.Add("Line1024"); lst1Db.Add("Line1026"); lst1Db.Add("Line1027"); lst1Db.Add("Line1028"); lst1Db.Add("Line1029"); lst1Db.Add("Line1001"); lst1Db.Add("Line1002"); lst1Db.Add("Line1003"); lst1Db.Add("Line1006"); lst1Db.Add("Line1007"); lst1Db.Add("Line1008"); lst1Db.Add("Line1012"); lst2Db.Add("ChaiDei3"); lst2Db.Add("ChaiDei4"); lst2Db.Add("ChaiDei2"); lst2Db.Add("ChaiDei1"); ControlCenterWcfHost = new ServiceHost(typeof(DevInfoService)); ControlCenterWcfHost.Open(); tskGetConveyorInfo1 = new Thread(GetConveyorInfo1); tskGetConveyorInfo1.Name = "获取输送线信息线程"; StartThread(tskGetConveyorInfo1); tskGetSrmInfo1 = new Thread(GetSrmInfo1); tskGetSrmInfo1.Name = "获取堆垛机1信息线程"; StartThread(tskGetSrmInfo1); tskGetSrmInfo2 = new Thread(GetSrmInfo2); tskGetSrmInfo2.Name = "获取堆垛机2信息线程"; StartThread(tskGetSrmInfo2); tskGetRgvInfo1 = new Thread(GetRgvInfo1); tskGetRgvInfo1.Name = "获取RGV1信息线程"; StartThread(tskGetRgvInfo1); tskGetRgvInfo2 = new Thread(GetRgvInfo2); tskGetRgvInfo2.Name = "获取RGV2信息线程"; StartThread(tskGetRgvInfo2); tskGetCDInfo = new Thread(GetCDInfo); tskGetCDInfo.Name = "获取拆叠机信息线程"; StartThread(tskGetCDInfo); } protected override void OnStop() { LogTextHelper.WriteLine(Resources.LogDir, "西门子设备信息获取服务开始关闭!"); CloseWcf(ControlCenterWcfHost); CloseThread(tskGetConveyorInfo1); CloseThread(tskGetSrmInfo1); CloseThread(tskGetSrmInfo2); CloseThread(tskGetRgvInfo1); CloseThread(tskGetRgvInfo2); CloseThread(tskGetCDInfo); } private void GetConveyorInfo1(object obj) { try { // CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200"); //创建连接对象 SiemensS7Net S7 = new SiemensS7Net(SiemensPLCS.S1500); S7.IpAddress = "192.168.0.20"; OperateResult operateResult = S7.ConnectServer(); // Plc S7 = new Plc(t, "192.168.0.20", 0, 1); int cHandShake = 0; int cerrocontain = 0; List opclst = new List(); lst1Db.ForEach(x => { opclst.Add(new COpcReadItem(x)); }); while (true) { try { if (!operateResult.IsSuccess || cerrocontain > 10) { LogTextHelper.WriteLine(Resources.LogDir, "1数据读取通道重启"); S7.ConnectClose(); Thread.Sleep(500); operateResult=S7.ConnectServer(); cerrocontain = 0; } int RHandShake = S7.ReadInt16("DB600.0").Content; if (cHandShake != RHandShake) { cHandShake = RHandShake; cerrocontain = 0; } else { cerrocontain = +1; } opclst.ForEach(x => { int Mode = S7.ReadInt16(x.Mode).Content; int TaskNo = S7.ReadInt32(x.TaskNo).Content; int State = S7.ReadInt16(x.State).Content; int Ph1 = S7.ReadInt16(x.Ph1).Content; int Ph2 = S7.ReadInt16(x.Ph2).Content; int Shape = 0; if (!string.IsNullOrEmpty(x.Shape)) { Shape = S7.ReadInt16(x.Shape).Content; } int Taskid = S7.ReadInt32(x.TaskNo).Content; bool Ack = S7.ReadBool(x.Ack).Content; bool Stb = S7.ReadBool(x.STP).Content; int AlarmCode = S7.ReadInt16(x.AlarmCode).Content; bool Alarm = S7.ReadBool(x.Alarm).Content; int Ph3 = 2; if (!string.IsNullOrEmpty(x.Ph3)) { Ph3 = S7.ReadInt16(x.Ph3).Content; } int Height = 0; if (!string.IsNullOrEmpty(x.Height)) { Height = S7.ReadInt16(x.Height).Content; } var s = CacheEntity.Conveyors.FirstOrDefault(y => y.ConveyorName == x.ConveyorName); if (true) { s.RMode = Mode; s.RAlarm = Alarm; s.RTaskNo = TaskNo; s.RState = State; s.RAlarmCode = AlarmCode; s.RAck = Ack; s.RPh1 = Ph1; s.RPh2 = Ph2; s.RPh3 = Ph3; s.RShape = Shape; s.WTaskNo = TaskNo; s.WSTP = Stb; s.Height = Height; } }); } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir, "输送线数据读取错误:{0}", ex.Message); } Thread.Sleep(250); } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir, "输送线数据读取连接错误:{0}", ex.Message); } } private void GetSrmInfo1(object obj) { try { // CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200"); SiemensS7Net SSrm1 = new SiemensS7Net(SiemensPLCS.S1500); SSrm1.IpAddress = "192.168.0.200"; OperateResult sm1Result = SSrm1.ConnectServer(); int s1HandShake = 0; int s1errocontain = 0; //创建连接对象 // Plc SSrm1 = new Plc(t, "192.168.0.200", 0, 1); SOpcReadItem s = new SOpcReadItem(); while (true) { try { if (!sm1Result.IsSuccess || s1errocontain > 10) { LogTextHelper.WriteLine(Resources.LogDir, "Srm1数据读取通道重启"); SSrm1.ConnectClose(); Thread.Sleep(500); sm1Result=SSrm1.ConnectServer(); s1errocontain = 0; } int RSrmNo = SSrm1.ReadInt16(s.SrmNo).Content; int RMode = SSrm1.ReadInt16(s.Mode).Content; int RAlarm = SSrm1.ReadInt16(s.Alarm).Content; int RLiftFull = SSrm1.ReadInt16(s.LiftFull).Content; int RPosX = SSrm1.ReadInt16(s.PosX).Content; int RPosY = SSrm1.ReadInt16(s.PosY).Content; int RPosZ = SSrm1.ReadInt16(s.PosZ).Content; int RPosXmm = SSrm1.ReadInt32(s.PosXmm).Content; int RPosYmm = SSrm1.ReadInt32(s.PosYmm).Content; int RPosZmm = SSrm1.ReadInt32(s.PosZmm).Content; int RPickFinish = SSrm1.ReadInt16(s.PickFinish).Content; int RDeliveryFinish = SSrm1.ReadInt16(s.DeliveryFinish).Content; int RTaskFinish = SSrm1.ReadInt16(s.TaskFinish).Content; int RTaskNo = SSrm1.ReadInt16(s.TaskNo).Content; int RState = SSrm1.ReadInt16(s.State).Content; int RActualLane = SSrm1.ReadInt16(s.ActualLane).Content; int RAlarmCode = SSrm1.ReadInt16(s.AlarmCode).Content; int RHandShake = SSrm1.ReadInt16(s.HandShake).Content; int RAck = SSrm1.ReadInt16(s.Ack).Content; int WStb = SSrm1.ReadInt16(s.Stb).Content; int WTaskFinishConfirm = SSrm1.ReadInt16(s.TaskFinishConfirm).Content; if (s1HandShake != RHandShake) { s1HandShake = RHandShake; s1errocontain = 0; } else { s1errocontain = +1; } int WSourcePosX = SSrm1.ReadInt16(s.SourcePosX).Content; int WSourcePosY = SSrm1.ReadInt16(s.SourcePosY).Content; int WSourcePosZ = SSrm1.ReadInt16(s.SourcePosZ).Content; int WDestinationPosX = SSrm1.ReadInt16(s.DestinationPosX).Content; int WDestinationPosY = SSrm1.ReadInt16(s.DestinationPosY).Content; int WDestinationPosZ = SSrm1.ReadInt16(s.DestinationPosZ).Content; int WCommand = SSrm1.ReadInt16(s.Command).Content; int WEmergencyStop = SSrm1.ReadInt16(s.EmergencyStop).Content; int WCancleAlarm = SSrm1.ReadInt16(s.CancleAlarm).Content; int WPalletType = SSrm1.ReadInt16(s.PalletType).Content; int WHigh = SSrm1.ReadInt16(s.High).Content; var srm = CacheEntity.Srms.FirstOrDefault(y => y.SrmName == "Srm1"); if (true) { srm.RSrmNo = RSrmNo; srm.RMode = RMode; srm.RAlarm = Convert.ToBoolean(RAlarm); srm.RLiftFull = Convert.ToBoolean(RLiftFull); srm.RPosX = RPosX; srm.RPosY = RPosY; srm.RPosZ = RPosZ; srm.RPosXmm = RPosXmm; srm.RPosYmm = RPosYmm; srm.RPosZmm = RPosZmm; srm.RPickFinish = Convert.ToBoolean(RPickFinish); srm.RDeliveryFinish = Convert.ToBoolean(RDeliveryFinish); srm.RTaskFinish = Convert.ToBoolean(RTaskFinish); srm.RTaskNo = RTaskNo; srm.RState = RState; srm.RActualLane = RActualLane; srm.RAlarmCode = RAlarmCode; srm.RHandShake = RHandShake; srm.RAck = Convert.ToBoolean(RAck); srm.WSourcePosX = WSourcePosX; srm.WSourcePosY = WSourcePosY; srm.WSourcePosZ = WSourcePosZ; srm.WDestinationPosX = WDestinationPosX; srm.WDestinationPosY = WDestinationPosY; srm.WDestinationPosZ = WDestinationPosZ; srm.WCommand = WCommand; srm.WEmergencyStop = WEmergencyStop; srm.WStb = Convert.ToBoolean(WStb); srm.WCancleAlarm = Convert.ToBoolean(WCancleAlarm); srm.WTaskFinishConfirm = Convert.ToBoolean(WTaskFinishConfirm); srm.WPalletType = WPalletType; srm.WHigh = WHigh; } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir, "Srm1数据读取错误:{0}", ex.Message); } Thread.Sleep(250); } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir, "Srm1数据读取连接错误:{0}", ex.Message); } } private void GetSrmInfo2(object obj) { try { // CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200"); SiemensS7Net SSrm2 = new SiemensS7Net(SiemensPLCS.S1500); SSrm2.IpAddress = "192.168.0.210"; OperateResult sm2Result = SSrm2.ConnectServer(); int s2HandShake = 0; int s2errocontain = 0; //创建连接对象 // Plc SSrm2 = new Plc(t, "192.168.0.210", 0, 1); SOpcReadItem s = new SOpcReadItem(); while (true) { try { if (!sm2Result.IsSuccess || s2errocontain > 10) { LogTextHelper.WriteLine(Resources.LogDir, "Srm2数据读取通道重启"); SSrm2.ConnectClose(); Thread.Sleep(500); sm2Result=SSrm2.ConnectServer(); s2errocontain = 0; } int RSrmNo = SSrm2.ReadInt16(s.SrmNo).Content; int RMode = SSrm2.ReadInt16(s.Mode).Content; int RAlarm = SSrm2.ReadInt16(s.Alarm).Content; int RLiftFull = SSrm2.ReadInt16(s.LiftFull).Content; int RPosX = SSrm2.ReadInt16(s.PosX).Content; int RPosY = SSrm2.ReadInt16(s.PosY).Content; int RPosZ = SSrm2.ReadInt16(s.PosZ).Content; int RPosXmm = SSrm2.ReadInt32(s.PosXmm).Content; int RPosYmm = SSrm2.ReadInt32(s.PosYmm).Content; int RPosZmm = SSrm2.ReadInt32(s.PosZmm).Content; int RPickFinish = SSrm2.ReadInt16(s.PickFinish).Content; int RDeliveryFinish = SSrm2.ReadInt16(s.DeliveryFinish).Content; int RTaskFinish = SSrm2.ReadInt16(s.TaskFinish).Content; int RTaskNo = SSrm2.ReadInt16(s.TaskNo).Content; int RState = SSrm2.ReadInt16(s.State).Content; int RActualLane = SSrm2.ReadInt16(s.ActualLane).Content; int RAlarmCode = SSrm2.ReadInt16(s.AlarmCode).Content; int RHandShake = SSrm2.ReadInt16(s.HandShake).Content; int RAck = SSrm2.ReadInt16(s.Ack).Content; int WStb = SSrm2.ReadInt16(s.Stb).Content; int WTaskFinishConfirm = SSrm2.ReadInt16(s.TaskFinishConfirm).Content; if (s2HandShake != RHandShake) { s2HandShake = RHandShake; s2errocontain = 0; } else { s2errocontain = +1; } int WSourcePosX = SSrm2.ReadInt16(s.SourcePosX).Content; int WSourcePosY = SSrm2.ReadInt16(s.SourcePosY).Content; int WSourcePosZ = SSrm2.ReadInt16(s.SourcePosZ).Content; int WDestinationPosX = SSrm2.ReadInt16(s.DestinationPosX).Content; int WDestinationPosY = SSrm2.ReadInt16(s.DestinationPosY).Content; int WDestinationPosZ = SSrm2.ReadInt16(s.DestinationPosZ).Content; int WCommand = SSrm2.ReadInt16(s.Command).Content; int WEmergencyStop = SSrm2.ReadInt16(s.EmergencyStop).Content; int WCancleAlarm = SSrm2.ReadInt16(s.CancleAlarm).Content; int WPalletType = SSrm2.ReadInt16(s.PalletType).Content; int WHigh = SSrm2.ReadInt16(s.High).Content; var srm = CacheEntity.Srms.FirstOrDefault(y => y.SrmName == "Srm2"); if (true) { srm.RSrmNo = RSrmNo; srm.RMode = RMode; srm.RAlarm = Convert.ToBoolean(RAlarm); srm.RLiftFull = Convert.ToBoolean(RLiftFull); srm.RPosX = RPosX; srm.RPosY = RPosY; srm.RPosZ = RPosZ; srm.RPosXmm = RPosXmm; srm.RPosYmm = RPosYmm; srm.RPosZmm = RPosZmm; srm.RPickFinish = Convert.ToBoolean(RPickFinish); srm.RDeliveryFinish = Convert.ToBoolean(RDeliveryFinish); srm.RTaskFinish = Convert.ToBoolean(RTaskFinish); srm.RTaskNo = RTaskNo; srm.RState = RState; srm.RActualLane = RActualLane; srm.RAlarmCode = RAlarmCode; srm.RHandShake = RHandShake; srm.RAck = Convert.ToBoolean(RAck); srm.WSourcePosX = WSourcePosX; srm.WSourcePosY = WSourcePosY; srm.WSourcePosZ = WSourcePosZ; srm.WDestinationPosX = WDestinationPosX; srm.WDestinationPosY = WDestinationPosY; srm.WDestinationPosZ = WDestinationPosZ; srm.WCommand = WCommand; srm.WEmergencyStop = WEmergencyStop; srm.WStb = Convert.ToBoolean(WStb); srm.WCancleAlarm = Convert.ToBoolean(WCancleAlarm); srm.WTaskFinishConfirm = Convert.ToBoolean(WTaskFinishConfirm); srm.WPalletType = WPalletType; srm.WHigh = WHigh; } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir, "Srm2数据读取错误:{0}", ex.Message); } Thread.Sleep(250); } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir, "Srm2数据读取连接错误:{0}", ex.Message); } } private void GetRgvInfo1(object obj) { try { // CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200"); SiemensS7Net SRgv1 = new SiemensS7Net(SiemensPLCS.S1500); SRgv1.IpAddress = "192.168.0.1"; OperateResult rgv1Result = SRgv1.ConnectServer(); int r1HandShake = 0; int r1errocontain = 0; //创建连接对象 // Plc SRgv1 = new Plc(t, "192.168.0.1", 0, 1); ROpcReadItem s = new ROpcReadItem(); while (true) { try { if (!rgv1Result.IsSuccess || r1errocontain > 10) { LogTextHelper.WriteLine(Resources.LogDir, "Rgv1数据读取通道重启"); SRgv1.ConnectClose(); Thread.Sleep(500); rgv1Result=SRgv1.ConnectServer(); r1errocontain = 0; } int RMode = SRgv1.ReadInt16(s.Mode).Content; bool RAlarm = SRgv1.ReadBool(s.Alarm).Content; bool RLoaded = SRgv1.ReadBool(s.Loaded).Content; int RRgvPosition = SRgv1.ReadInt32(s.RgvPosition).Content; int RSPos = SRgv1.ReadInt32(s.SPos).Content; int RTPos = SRgv1.ReadInt32(s.TPos).Content; bool RTaskFinish = SRgv1.ReadBool(s.TaskFinish).Content; int RTaskNo = SRgv1.ReadInt32(s.TaskNo).Content; int RState = SRgv1.ReadInt16(s.State).Content; int RAlarmCode = SRgv1.ReadInt16(s.AlarmCode).Content; int RHandShake = SRgv1.ReadInt16(s.HandShake).Content; bool RAck = SRgv1.ReadBool(s.Ack).Content; if (r1HandShake != RHandShake) { r1HandShake = RHandShake; r1errocontain = 0; } else { r1errocontain = +1; } bool WEStop = SRgv1.ReadBool(s.EStop).Content; int WStartPos = SRgv1.ReadInt16(s.StartPos).Content; int WEndPos = SRgv1.ReadInt16(s.EndPos).Content; bool WAckTaskFinish = SRgv1.ReadBool(s.AckTaskFinish).Content; bool WReset = SRgv1.ReadBool(s.Reset).Content; bool WStb = SRgv1.ReadBool(s.Stb).Content; int WPallType = SRgv1.ReadInt16(s.PallType).Content; var rgv = CacheEntity.Rgvs.FirstOrDefault(y => y.RgvName == "Rgv1"); if (true) { rgv.RMode = RMode; rgv.RAlarm = RAlarm; rgv.RLoaded = RLoaded; rgv.RRgvPosition = RRgvPosition; rgv.RSPos = RSPos; rgv.RTPos = RTPos; rgv.RTaskFinish = RTaskFinish; rgv.RTaskNo = RTaskNo; rgv.RState = RState; rgv.RAlarmCode = RAlarmCode; rgv.RHandShake = RHandShake; rgv.RAck = RAck; rgv.WEStop = WEStop; rgv.WAckTaskFinish = WAckTaskFinish; rgv.WReset = WReset; rgv.WStb = WStb; rgv.WPallType = WPallType; } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir, "Rgv1数据读取错误:{0}", ex.Message); } Thread.Sleep(250); } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir, "Rgv1数据读取连接错误:{0}", ex.Message); } } private void GetRgvInfo2(object obj) { try { // CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200"); SiemensS7Net SRgv2 = new SiemensS7Net(SiemensPLCS.S1500); SRgv2.IpAddress = "192.168.0.10"; OperateResult rgv2Result = SRgv2.ConnectServer(); int r2HandShake = 0; int r2errocontain = 0; //创建连接对象 // Plc SRgv2 = new Plc(t, "192.168.0.10", 0, 1); ROpcReadItem s = new ROpcReadItem(); while (true) { try { if (!rgv2Result.IsSuccess || r2errocontain > 10) { LogTextHelper.WriteLine(Resources.LogDir, "Rgv2数据读取通道重启"); SRgv2.ConnectClose(); Thread.Sleep(500); rgv2Result=SRgv2.ConnectServer(); r2errocontain = 0; } int RMode = SRgv2.ReadInt16(s.Mode).Content; bool RAlarm = SRgv2.ReadBool(s.Alarm).Content; bool RLoaded = SRgv2.ReadBool(s.Loaded).Content; int RRgvPosition = SRgv2.ReadInt32(s.RgvPosition).Content; int RSPos = SRgv2.ReadInt32(s.SPos).Content; int RTPos = SRgv2.ReadInt32(s.TPos).Content; bool RTaskFinish = SRgv2.ReadBool(s.TaskFinish).Content; int RTaskNo = SRgv2.ReadInt32(s.TaskNo).Content; int RState = SRgv2.ReadInt16(s.State).Content; int RAlarmCode = SRgv2.ReadInt16(s.AlarmCode).Content; int RHandShake = SRgv2.ReadInt16(s.HandShake).Content; bool RAck = SRgv2.ReadBool(s.Ack).Content; if (r2HandShake != RHandShake) { r2HandShake = RHandShake; r2errocontain = 0; } else { r2errocontain = +1; } bool WEStop = SRgv2.ReadBool(s.EStop).Content; int WStartPos = SRgv2.ReadInt16(s.StartPos).Content; ; int WEndPos = SRgv2.ReadInt16(s.EndPos).Content; ; bool WAckTaskFinish = SRgv2.ReadBool(s.AckTaskFinish).Content;; bool WReset = SRgv2.ReadBool(s.Reset).Content;; bool WStb = SRgv2.ReadBool(s.Stb).Content;; int WPallType = SRgv2.ReadInt16(s.PallType).Content; var rgv = CacheEntity.Rgvs.FirstOrDefault(y => y.RgvName == "Rgv2"); if (true) { rgv.RMode = RMode; rgv.RAlarm = RAlarm; rgv.RLoaded = RLoaded; rgv.RRgvPosition = RRgvPosition; rgv.RSPos = RSPos; rgv.RTPos = RTPos; rgv.RTaskFinish = RTaskFinish; rgv.RTaskNo = RTaskNo; rgv.RState = RState; rgv.RAlarmCode = RAlarmCode; rgv.RHandShake = RHandShake; rgv.RAck = RAck; rgv.WEStop = WEStop; rgv.WAckTaskFinish = WAckTaskFinish; rgv.WReset = WReset; rgv.WStb = WStb; rgv.WPallType = WPallType; } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir, "Rgv2数据读取错误:{0}", ex.Message); } Thread.Sleep(250); } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir, "Rgv2数据读取连接错误:{0}", ex.Message); } } private void GetCDInfo(object obj) { try { // CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200"); SiemensS7Net cd = new SiemensS7Net(SiemensPLCS.S1500); cd.IpAddress = "192.168.0.20"; OperateResult cdResult = cd.ConnectServer(); //创建连接对象 //Plc cd = new Plc(t, "192.168.0.20", 0, 1); List opclst = new List(); lst2Db.ForEach(x => { opclst.Add(new CDOpcReadItem(x)); }); while (true) { try { if (!cdResult.IsSuccess) { LogTextHelper.WriteLine(Resources.LogDir, "拆叠机数据读取通道重启"); cd.ConnectClose(); Thread.Sleep(500); cdResult=cd.ConnectServer(); } opclst.ForEach(x => { int status = cd.ReadInt16(x.EmptyStatus).Content; var s = CacheEntity.ChaiDies.FirstOrDefault(y => y.ChaiDieName == x.ChaiDieName); if (true) { s.EmptyStatus = status; } }); } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir, "拆叠机数据读取错误:{0}", ex.Message); } Thread.Sleep(1000); } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir, "拆叠机数据读取连接错误:{0}", ex.Message); } } /// /// 开启线程 /// private void StartThread(Thread thread) { if (thread != null) { thread.IsBackground = true; thread.Start(); } LogTextHelper.WriteLine(Resources.LogDir, "线程{0}已开启", thread.Name); } /// ///关闭WCF /// ///需要关闭的WCF private void CloseWcf(ServiceHost host) { if (host != null) { host.Close(); } } /// /// 关闭线程 /// /// 需要关闭的线程 private void CloseThread(Thread thread) { if (thread != null) { thread.Abort(); } LogTextHelper.WriteLine(Resources.LogDir, "线程{0}已关闭", thread.Name); } } }