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, out bool value, out string msg) { value = false; msg = null; try { var or = client.ReadBool($"DB{DB}.DBX{StartAdd}.{Pos}"); if (!or.IsSuccess) { msg = $"{or.ErrorCode} {or.Message}"; return false; } value = or.Content; return true; } catch (Exception ex) { msg = ex.Message; return false; } } public bool Simens_S7_WriteBool(int DB, int StartAdd, int Pos, bool Val, out string msg) { msg = null; try { var or = client.Write($"DB{DB}.DBX{StartAdd}.{Pos}", Val); if (!or.IsSuccess) { msg = $"{or.ErrorCode} {or.Message}"; return false; } return true; } catch (Exception ex) { msg = ex.Message; return false; } } public bool Simens_S7_ReadInt(int DB, int StartAdd, out int value, out string msg) { value = 0; msg = null; try { var or = client.ReadInt16($"DB{DB}.DBW{StartAdd}"); if (!or.IsSuccess) { msg = $"{or.ErrorCode} {or.Message}"; return false; } value = or.Content; return true; } catch (Exception ex) { msg = ex.Message; return false; } } public bool Simens_S7_WriteInt(int DB, int StartAdd, short Val, out string msg) { msg = null; try { var or = client.Write($"DB{DB}.DBW{StartAdd}", Val); if (!or.IsSuccess) { msg = $"{or.ErrorCode} {or.Message}"; return false; } return true; } catch (Exception ex) { msg = ex.Message; return false; } } public bool Simens_S7_ReadReal(int DB, int StartAdd, out float value, out string msg) { value = 0; msg = null; try { var or = client.ReadFloat($"DB{DB}.DBW{StartAdd}"); if (!or.IsSuccess) { msg = $"{or.ErrorCode} {or.Message}"; return false; } value = or.Content; return true; } catch (Exception ex) { msg = ex.Message; return false; } } public bool Simens_S7_WriteReal(int DB, int StartAdd, float Val, out string msg) { msg = null; try { var or = client.Write($"DB{DB}.DBW{StartAdd}", Val); if (!or.IsSuccess) { msg = $"{or.ErrorCode} {or.Message}"; return false; } return true; } catch (Exception ex) { msg = ex.Message; return false; } } public bool ReadShort(string address, out short value, out string msg) { value = 0; msg = null; try { var or = client.ReadInt16(address); if (!or.IsSuccess) { msg = $"{or.ErrorCode} {or.Message}"; return false; } value = or.Content; return true; } catch (Exception e) { msg = e.Message; return false; } } } }