using HslCommunication.Profinet.Omron; using HslCommunication.Profinet.Siemens; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace YG.Device { public class DeviceS7 : DeviceList { public SiemensS7Net SiemensS7Net { get; set; } private SiemensPLCS siemensPLCS; private string ip; public DeviceS7(SiemensPLCS _siemensPLCS, string _ip, int port = 102) { siemensPLCS = _siemensPLCS; ip = _ip; SiemensS7Net = new SiemensS7Net(siemensPLCS, ip) { ConnectTimeOut = 5000 }; SiemensS7Net.ConnectionId = Guid.NewGuid().ToString(); } public HslCommunication.OperateResult ConnectionResult { get; set; } public override void DeviceInit() { ConnectionResult = SiemensS7Net.ConnectServer(); base.DeviceInit(); } bool isShow = false; public override void DeviceState() { Task.Factory.StartNew(async () => { while (true) { await Task.Delay(200); if (!ConnectionResult.IsSuccess&&ip.Ping()) { if (!isShow) { isShow = true; System.Windows.Forms.MessageBox.Show($"PLC{SiemensS7Net.IpAddress} 连接失败!{ConnectionResult.Message}"); } } } }); base.DeviceState(); } public override T DeviceRead(string value, ushort leng =0) { Type tp = typeof(T); { if (tp.Equals(typeof(short))) { var operateResult = SiemensS7Net.ReadInt16(value); return (T)(object)operateResult.Content; } else if (tp.Equals(typeof(bool))) { var operateResult = SiemensS7Net.ReadBool(value); return (T)(object)operateResult.Content; } else if (tp.Equals(typeof(int))) { var operateResult = SiemensS7Net.ReadInt32(value); return (T)(object)operateResult.Content; } else if (tp.Equals(typeof(long))) { var operateResult = SiemensS7Net.ReadInt64(value); return (T)(object)operateResult.Content; } else if (tp.Equals(typeof(byte[]))) { var operateResult= SiemensS7Net.Read(value, leng); return (T)(object)operateResult.Content; } else if (tp.Equals(typeof(string))) { var operateResult = SiemensS7Net.ReadString(value, leng, Encoding.ASCII); return (T)(object)operateResult.Content; } } return default(T); } public string DeviceRead(string value, string readType,ushort leng=0) { string retResponse = ""; if (readType.Equals("1")) //short { var operateResult = SiemensS7Net.ReadInt16(value); retResponse = operateResult.Content.ToString(); return retResponse; } else if (readType.Equals("2"))//bool { var operateResult = SiemensS7Net.ReadBool(value); retResponse = operateResult.Content.ToString(); return retResponse; } else if (readType.Equals("3"))//int { var operateResult = SiemensS7Net.ReadInt32(value); retResponse = operateResult.Content.ToString(); return retResponse; } else if (readType.Equals("4"))//long { var operateResult = SiemensS7Net.ReadInt64(value); retResponse = operateResult.Content.ToString(); return retResponse; } else if (readType.Equals("5")) //string { var operateResult = SiemensS7Net.ReadString(value, leng,Encoding.ASCII); retResponse = operateResult.Content.ToString(); return retResponse; } return retResponse; } public override object Clone() { return this.MemberwiseClone(); } /// /// /// /// 地址 /// 地址的值 public override void DeviceSend(object ob, object ob1) { System.Threading.Thread.Sleep(100); HslCommunication.OperateResult resultt = new HslCommunication.OperateResult() { IsSuccess = false, Message = "resutt为空" }; if (ConnectionResult.IsSuccess) { Type ty = ob1.GetType(); if (ty == typeof(string)) { resultt = SiemensS7Net.Write(ob.ToString(), ob1.ToString()); } else if (ty == typeof(int)) { resultt = SiemensS7Net.Write(ob.ToString(), (int)ob1); } else if (ty == typeof(byte)) { resultt = SiemensS7Net.Write(ob.ToString(), (byte)ob1); } else if (ty == typeof(byte[])) { resultt = SiemensS7Net.Write(ob.ToString(), (byte[])ob1); } else if (ty == typeof(short)) { if (short.TryParse(ob1.ToString(), out short value)) { resultt = SiemensS7Net.Write(ob.ToString(), (short)value); } } else if (ty == typeof(bool)) { resultt = SiemensS7Net.Write(ob.ToString(), (bool)ob1); } YG.Log.Instance.WriteLogAdd($"{SiemensS7Net.IpAddress}+地址{ob.ToString()}+写入值{ob1.ToString()}+写入结果:{ resultt.IsSuccess}+信息提示{resultt.Message}"); } base.DeviceSend(ob, ob1); } public override void DeviceSend(object ob, object ob1, string readType) { System.Threading.Thread.Sleep(100); HslCommunication.OperateResult resultt = new HslCommunication.OperateResult() { IsSuccess = false, Message = "result为空" }; Type ty = ob1.GetType(); if (readType.Equals("5")) //string { resultt = SiemensS7Net.Write(ob.ToString(), ob1.ToString()); } else if (readType.Equals("3")) //int { resultt = SiemensS7Net.Write(ob.ToString(), (int)ob1); } else if (readType.Equals("6")) //byte { resultt = SiemensS7Net.Write(ob.ToString(), (byte)ob1); } else if (readType.Equals("1")) //short { if (short.TryParse(ob1.ToString(), out short value)) { resultt = SiemensS7Net.Write(ob.ToString(), (short)value); } } else if (readType.Equals("2")) //bool { resultt = SiemensS7Net.Write(ob.ToString(), (bool)ob1); } YG.Log.Instance.WriteLogAdd($"{SiemensS7Net.IpAddress}+地址{ob.ToString()}+写入值{ob1.ToString()}+写入结果:{ resultt.IsSuccess}+信息提示{resultt.Message}"); } public override void DeviceStart() { base.DeviceStart(); } public override void DeviceClose() { try { if (ConnectionResult.IsSuccess) { SiemensS7Net.ConnectClose(); } } catch (Exception ex) { YG.Log.Instance.WriteLogAdd($"206-->{ex.Message}"); } base.DeviceClose(); } } }