using IWareCommon.Help; using S7.Net; using S7Test.CacheInfo; using S7Test.Model; using S7Test.Properties; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using System.ServiceModel; using S7Test.WCF; namespace S7Test { public partial class Form1 : Form { #region 线程 const int cycleDelay = 1010;//各个线程的延迟毫秒数 Thread tskGetConveyorInfo1;//获取立库输送线的任务完成等信息的线程 Thread tskGetSrmInfo1;//获取立库Srm1的任务完成等信息的线程 Thread tskGetSrmInfo2;//获取立库Srm2的任务完成等信息的线程 Thread tskGetRgvInfo1;//获取立库Srm1的任务完成等信息的线程 Thread tskGetRgvInfo2;//获取立库Srm2的任务完成等信息的线程 public ServiceHost ControlCenterWcfHost = null; //创建连接对象 List lst1Db = new List(); #endregion public Form1() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; 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"); ControlCenterWcfHost = new ServiceHost(typeof(DevInfoService)); ControlCenterWcfHost.Open(); tskGetConveyorInfo1 = new Thread(GetConveyorInfo1); tskGetConveyorInfo1.Start(); tskGetSrmInfo1 = new Thread(GetSrmInfo1); tskGetSrmInfo1.Start(); tskGetSrmInfo2 = new Thread(GetSrmInfo2); tskGetSrmInfo2.Start(); tskGetRgvInfo1 = new Thread(GetRgvInfo1); tskGetRgvInfo1.Start(); tskGetRgvInfo2 = new Thread(GetRgvInfo2); tskGetRgvInfo2.Start(); } private void GetConveyorInfo1(object obj) { try { CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200"); //创建连接对象 Plc S7 = new Plc(t, "192.168.0.20", 0, 1); List opclst = new List(); lst1Db.ForEach(x => { opclst.Add(new COpcReadItem(x)); }); while (true) { try { if(!S7.IsConnected) { LogTextHelper.WriteLine(Resources.LogDir + @"/S8Test", "1数据读取通道重启"); S7.Open(); } opclst.ForEach(x => { int Mode = Convert.ToInt32(S7.Read(x.Mode)); int TaskNo = Convert.ToInt32(S7.Read(x.TaskNo)); int State = Convert.ToInt32(S7.Read(x.State)); int Ph1 = Convert.ToInt32(S7.Read(x.Ph1)); int Ph2 = Convert.ToInt32(S7.Read(x.Ph2)); int Shape=0; if (!string.IsNullOrEmpty(x.Shape)) { Shape = Convert.ToInt32(S7.Read(x.Shape)); } int Taskid = Convert.ToInt32(S7.Read(x.TaskNo)); bool Ack = Convert.ToBoolean(S7.Read(x.Ack).ToString()); bool Stb = Convert.ToBoolean(S7.Read(x.STP).ToString()); int AlarmCode = Convert.ToInt32(S7.Read(x.AlarmCode)); bool Alarm = Convert.ToBoolean(S7.Read(x.Alarm).ToString()); 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.RShape = Shape; s.WTaskNo = Taskid; s.WSTP = Stb; } }); } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir + @"/S8Test", "1数据读取错误:{0}", ex.Message); } Thread.Sleep(100); } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir + @"/S8Test", "1数据读取连接错误:{0}", ex.Message); } } private void GetSrmInfo1(object obj) { try { CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200"); //创建连接对象 Plc SSrm1 = new Plc(t, "192.168.0.200", 0, 1); SOpcReadItem s= new SOpcReadItem(); while (true) { try { if (!SSrm1.IsConnected) { LogTextHelper.WriteLine(Resources.LogDir + @"/S8Test", "Srm1数据读取通道重启"); SSrm1.Open(); } short RSrmNo = ((ushort)SSrm1.Read(s.SrmNo)).ConvertToShort(); short RMode = ((ushort)SSrm1.Read(s.Mode)).ConvertToShort(); short RAlarm = ((ushort)SSrm1.Read(s.Alarm)).ConvertToShort(); short RLiftFull = ((ushort)SSrm1.Read(s.LiftFull)).ConvertToShort(); short RPosX = ((ushort)SSrm1.Read(s.PosX)).ConvertToShort(); short RPosY = ((ushort)SSrm1.Read(s.PosY)).ConvertToShort(); short RPosZ = ((ushort)SSrm1.Read(s.PosZ)).ConvertToShort(); int RPosXmm = ((uint)SSrm1.Read(s.PosXmm)).ConvertToInt(); int RPosYmm = ((uint)SSrm1.Read(s.PosYmm)).ConvertToInt(); int RPosZmm = ((uint)SSrm1.Read(s.PosZmm)).ConvertToInt(); short RPickFinish = ((ushort)SSrm1.Read(s.PickFinish)).ConvertToShort(); short RDeliveryFinish = ((ushort)SSrm1.Read(s.DeliveryFinish)).ConvertToShort(); short RTaskFinish = ((ushort)SSrm1.Read(s.TaskFinish)).ConvertToShort(); short RTaskNo = ((ushort)SSrm1.Read(s.TaskNo)).ConvertToShort(); short RState = ((ushort)SSrm1.Read(s.State)).ConvertToShort(); short RActualLane = ((ushort)SSrm1.Read(s.ActualLane)).ConvertToShort(); short RAlarmCode = ((ushort)SSrm1.Read(s.AlarmCode)).ConvertToShort(); short RHandShake = ((ushort)SSrm1.Read(s.HandShake)).ConvertToShort(); short RAck = ((ushort)SSrm1.Read(s.Ack)).ConvertToShort(); short WStb = ((ushort)SSrm1.Read(s.Stb)).ConvertToShort(); short WTaskFinishConfirm = ((ushort)SSrm1.Read(s.TaskFinishConfirm)).ConvertToShort(); short WSourcePosX = ((ushort)SSrm1.Read(s.SourcePosX)).ConvertToShort(); short WSourcePosY = ((ushort)SSrm1.Read(s.SourcePosY)).ConvertToShort(); short WSourcePosZ = ((ushort)SSrm1.Read(s.SourcePosZ)).ConvertToShort(); short WDestinationPosX = ((ushort)SSrm1.Read(s.DestinationPosX)).ConvertToShort(); short WDestinationPosY = ((ushort)SSrm1.Read(s.DestinationPosY)).ConvertToShort(); short WDestinationPosZ = ((ushort)SSrm1.Read(s.DestinationPosZ)).ConvertToShort(); short WCommand = ((ushort)SSrm1.Read(s.Command)).ConvertToShort(); short WEmergencyStop = ((ushort)SSrm1.Read(s.EmergencyStop)).ConvertToShort(); short WCancleAlarm = ((ushort)SSrm1.Read(s.CancleAlarm)).ConvertToShort(); short WPalletType = ((ushort)SSrm1.Read(s.PalletType)).ConvertToShort(); short WHigh = ((ushort)SSrm1.Read(s.High)).ConvertToShort(); 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 + @"/S8Test", "Srm1数据读取错误:{0}", ex.Message); } Thread.Sleep(100); } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir + @"/S8Test", "Srm1数据读取连接错误:{0}", ex.Message); } } private void GetSrmInfo2(object obj) { try { CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200"); //创建连接对象 Plc SSrm2 = new Plc(t, "192.168.0.210", 0, 1); SOpcReadItem s = new SOpcReadItem(); while (true) { try { if (!SSrm2.IsConnected) { LogTextHelper.WriteLine(Resources.LogDir + @"/S8Test", "Srm2数据读取通道重启"); SSrm2.Open(); } short RSrmNo = ((ushort)SSrm2.Read(s.SrmNo)).ConvertToShort(); short RMode = ((ushort)SSrm2.Read(s.Mode)).ConvertToShort(); short RAlarm = ((ushort)SSrm2.Read(s.Alarm)).ConvertToShort(); short RLiftFull = ((ushort)SSrm2.Read(s.LiftFull)).ConvertToShort(); short RPosX = ((ushort)SSrm2.Read(s.PosX)).ConvertToShort(); short RPosY = ((ushort)SSrm2.Read(s.PosY)).ConvertToShort(); short RPosZ = ((ushort)SSrm2.Read(s.PosZ)).ConvertToShort(); int RPosXmm = ((uint)SSrm2.Read(s.PosXmm)).ConvertToInt(); int RPosYmm = ((uint)SSrm2.Read(s.PosYmm)).ConvertToInt(); int RPosZmm = ((uint)SSrm2.Read(s.PosZmm)).ConvertToInt(); short RPickFinish = ((ushort)SSrm2.Read(s.PickFinish)).ConvertToShort(); short RDeliveryFinish = ((ushort)SSrm2.Read(s.DeliveryFinish)).ConvertToShort(); short RTaskFinish = ((ushort)SSrm2.Read(s.TaskFinish)).ConvertToShort(); short RTaskNo = ((ushort)SSrm2.Read(s.TaskNo)).ConvertToShort(); short RState = ((ushort)SSrm2.Read(s.State)).ConvertToShort(); short RActualLane = ((ushort)SSrm2.Read(s.ActualLane)).ConvertToShort(); short RAlarmCode = ((ushort)SSrm2.Read(s.AlarmCode)).ConvertToShort(); short RHandShake = ((ushort)SSrm2.Read(s.HandShake)).ConvertToShort(); short RAck = ((ushort)SSrm2.Read(s.Ack)).ConvertToShort(); short WStb = ((ushort)SSrm2.Read(s.Stb)).ConvertToShort(); short WTaskFinishConfirm = ((ushort)SSrm2.Read(s.TaskFinishConfirm)).ConvertToShort(); short WSourcePosX = ((ushort)SSrm2.Read(s.SourcePosX)).ConvertToShort(); short WSourcePosY = ((ushort)SSrm2.Read(s.SourcePosY)).ConvertToShort(); short WSourcePosZ = ((ushort)SSrm2.Read(s.SourcePosZ)).ConvertToShort(); short WDestinationPosX = ((ushort)SSrm2.Read(s.DestinationPosX)).ConvertToShort(); short WDestinationPosY = ((ushort)SSrm2.Read(s.DestinationPosY)).ConvertToShort(); short WDestinationPosZ = ((ushort)SSrm2.Read(s.DestinationPosZ)).ConvertToShort(); short WCommand = ((ushort)SSrm2.Read(s.Command)).ConvertToShort(); short WEmergencyStop = ((ushort)SSrm2.Read(s.EmergencyStop)).ConvertToShort(); short WCancleAlarm = ((ushort)SSrm2.Read(s.CancleAlarm)).ConvertToShort(); short WPalletType = ((ushort)SSrm2.Read(s.PalletType)).ConvertToShort(); short WHigh = ((ushort)SSrm2.Read(s.High)).ConvertToShort(); 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 + @"/S8Test", "Srm2数据读取错误:{0}", ex.Message); } Thread.Sleep(100); } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir + @"/S8Test", "Srm2数据读取连接错误:{0}", ex.Message); } } private void GetRgvInfo1(object obj) { try { CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200"); //创建连接对象 Plc SRgv1 = new Plc(t, "192.168.0.1", 0, 1); ROpcReadItem s = new ROpcReadItem(); while (true) { try { if (!SRgv1.IsConnected) { LogTextHelper.WriteLine(Resources.LogDir + @"/S8Test", "Rgv1数据读取通道重启"); SRgv1.Open(); } int RMode = Convert.ToInt32(SRgv1.Read(s.Mode)); bool RAlarm = Convert.ToBoolean(SRgv1.Read(s.Alarm).ToString()); bool RLoaded = Convert.ToBoolean(SRgv1.Read(s.Loaded).ToString()); int RRgvPosition = Convert.ToInt32(SRgv1.Read(s.RgvPosition)); int RSPos = Convert.ToInt32(SRgv1.Read(s.SPos)); int RTPos = Convert.ToInt32(SRgv1.Read(s.TPos)); bool RTaskFinish = Convert.ToBoolean(SRgv1.Read(s.TaskFinish).ToString()); int RTaskNo = Convert.ToInt32(SRgv1.Read(s.TaskNo)); int RState = Convert.ToInt32(SRgv1.Read(s.State)); int RAlarmCode = Convert.ToInt32(SRgv1.Read(s.AlarmCode)); int RHandShake = Convert.ToInt32(SRgv1.Read(s.HandShake)); bool RAck = Convert.ToBoolean(SRgv1.Read(s.Ack).ToString()); bool WEStop = Convert.ToBoolean(SRgv1.Read(s.EStop).ToString()); int WStartPos = Convert.ToInt32(SRgv1.Read(s.StartPos)); int WEndPos = Convert.ToInt32(SRgv1.Read(s.EndPos)); bool WAckTaskFinish = Convert.ToBoolean(SRgv1.Read(s.AckTaskFinish).ToString()); bool WReset = Convert.ToBoolean(SRgv1.Read(s.Reset).ToString()); bool WStb = Convert.ToBoolean(SRgv1.Read(s.Stb).ToString()); int WPallType = Convert.ToInt32(SRgv1.Read(s.PallType)); 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 + @"/S8Test", "Rgv1数据读取错误:{0}", ex.Message); } Thread.Sleep(100); } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir + @"/S8Test", "Rgv1数据读取连接错误:{0}", ex.Message); } } private void GetRgvInfo2(object obj) { try { CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200"); //创建连接对象 Plc SRgv2 = new Plc(t, "192.168.0.10", 0, 1); ROpcReadItem s = new ROpcReadItem(); while (true) { try { if (!SRgv2.IsConnected) { LogTextHelper.WriteLine(Resources.LogDir + @"/S8Test", "Rgv2数据读取通道重启"); SRgv2.Open(); } int RMode = Convert.ToInt32(SRgv2.Read(s.Mode)); bool RAlarm = Convert.ToBoolean(SRgv2.Read(s.Alarm).ToString()); bool RLoaded = Convert.ToBoolean(SRgv2.Read(s.Loaded).ToString()); int RRgvPosition = Convert.ToInt32(SRgv2.Read(s.RgvPosition)); int RSPos = Convert.ToInt32(SRgv2.Read(s.SPos)); int RTPos = Convert.ToInt32(SRgv2.Read(s.TPos)); bool RTaskFinish = Convert.ToBoolean(SRgv2.Read(s.TaskFinish).ToString()); int RTaskNo = Convert.ToInt32(SRgv2.Read(s.TaskNo)); int RState = Convert.ToInt32(SRgv2.Read(s.State)); int RAlarmCode = Convert.ToInt32(SRgv2.Read(s.AlarmCode)); int RHandShake = Convert.ToInt32(SRgv2.Read(s.HandShake)); bool RAck = Convert.ToBoolean(SRgv2.Read(s.Ack).ToString()); bool WEStop = Convert.ToBoolean(SRgv2.Read(s.EStop).ToString()); int WStartPos = Convert.ToInt32(SRgv2.Read(s.StartPos)); int WEndPos = Convert.ToInt32(SRgv2.Read(s.EndPos)); bool WAckTaskFinish = Convert.ToBoolean(SRgv2.Read(s.AckTaskFinish).ToString()); bool WReset = Convert.ToBoolean(SRgv2.Read(s.Reset).ToString()); bool WStb = Convert.ToBoolean(SRgv2.Read(s.Stb).ToString()); int WPallType = Convert.ToInt32(SRgv2.Read(s.PallType)); 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 + @"/S8Test", "Rgv2数据读取错误:{0}", ex.Message); } Thread.Sleep(100); } } catch (Exception ex) { LogTextHelper.WriteLine(Resources.LogDir + @"/S8Test", "Rgv2数据读取连接错误:{0}", ex.Message); } } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { Environment.Exit(0); } } }