using HslCommunication.Core.Pipe; using HslCommunication.Profinet.Siemens; using System; namespace S7Driver { public class PLCS7Driver : IDisposable { private SiemensS7Net client; private string Ip; private int Port; public PLCS7Driver(string ip, int port) { this.Ip = ip; this.Port = port; } public bool Connect(out string errMsg) { try { client = new SiemensS7Net(SiemensPLCS.S1500); PipeTcpNet pipeTcpNet = new PipeTcpNet(Ip, Port); pipeTcpNet.ConnectTimeOut = 5000; pipeTcpNet.ReceiveTimeOut = 10000; client.CommunicationPipe = pipeTcpNet; var or = client.ConnectServer(); errMsg = or.Message; return or.IsSuccess; } catch (Exception ex) { errMsg = ex.Message; return false; } } public bool DisConnect(out string errMsg) { try { if (client == null) { errMsg = "未连接"; return false; } var or = client.ConnectClose(); errMsg = or.Message; return or.IsSuccess; } catch (Exception ex) { errMsg = ex.Message; return false; } } public void Dispose() { client?.Dispose(); } public bool Simens_S7_ReadBool(int DB, int StartAdd, int Pos) { var or = client.ReadBool($"DB{DB}.DBX{StartAdd}.{Pos}"); return or.Content; } public void Simens_S7_WriteBool(int DB, int StartAdd, int Pos, bool Val) { var or = client.Write($"DB{DB}.DBX{StartAdd}.{Pos}", Val); return; } public int Simens_S7_ReadInt(int DB, int StartAdd, int Length) { var or = client.ReadInt16($"DB{DB}.DBW{StartAdd}"); return or.Content; } public void Simens_S7_WriteInt(int DB, int StartAdd, short Val) { client.Write($"DB{DB}.DBW{StartAdd}", Val); } public float Simens_S7_ReadReal(int DB, int StartAdd, int Length) { var or = client.ReadFloat($"DB{DB}.DBW{StartAdd}"); return or.Content; } public void Simens_S7_WriteReal(int DB, int StartAdd, float Val) { client.Write($"DB{DB}.DBW{StartAdd}", Val); } public bool ReadShort(string address, out short value, out string errMsg) { value = 0; errMsg = null; try { var or = client.ReadInt16(address); if (or.IsSuccess) { value = or.Content; } else { errMsg = or.Message; } return or.IsSuccess; } catch (Exception e) { errMsg = e.Message; return false; } } } }