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;
|
}
|
}
|
}
|
}
|