213 lines
8.0 KiB
C#
213 lines
8.0 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
using HslCommunication;
|
|||
|
|
using HslCommunication.Profinet.Siemens;
|
|||
|
|
namespace LangGuan.Command.Extension
|
|||
|
|
{
|
|||
|
|
public class PlcHelper
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 写数据
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="ip"></param>
|
|||
|
|
public Task WriteVal(string ip, string key)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
using (var siemensTcpNet = new SiemensS7Net(SiemensPLCS.S200Smart, ip) { ConnectTimeOut = 5000 })
|
|||
|
|
{
|
|||
|
|
var con = siemensTcpNet.ConnectServer();
|
|||
|
|
if (con.IsSuccess)
|
|||
|
|
{
|
|||
|
|
var result = siemensTcpNet.Write(key, (ushort)1);
|
|||
|
|
Console.WriteLine($"连接plc成功..{ip},写入key:{key},是否写入成功:{result.IsSuccess},msg:{result.Message}code:{result.ErrorCode}");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
Console.WriteLine($"连接plc失败..{ip},msg:{ex.Message}");
|
|||
|
|
}
|
|||
|
|
return Task.CompletedTask;
|
|||
|
|
}
|
|||
|
|
public Task WriteVal(string ip, string key, int val)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
using (var siemensTcpNet = new SiemensS7Net(SiemensPLCS.S200Smart, ip) { ConnectTimeOut = 5000 })
|
|||
|
|
{
|
|||
|
|
var con = siemensTcpNet.ConnectServer();
|
|||
|
|
if (con.IsSuccess)
|
|||
|
|
{
|
|||
|
|
var result = siemensTcpNet.Write(key, (ushort)val);
|
|||
|
|
Console.WriteLine($"连接plc成功..{ip},写入key:{key},是否写入成功:{result.IsSuccess},msg:{result.Message}code:{result.ErrorCode}");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
Console.WriteLine($"连接plc失败..{ip},msg:{ex.Message}");
|
|||
|
|
}
|
|||
|
|
return Task.CompletedTask;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// SetVal
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="ip"></param>
|
|||
|
|
/// <param name="key"></param>
|
|||
|
|
/// <param name="val"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public async Task<bool> SetVal(string ip, string key, bool val)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
using (var siemensTcpNet = new SiemensS7Net(SiemensPLCS.S200Smart, ip) { ConnectTimeOut = 5000 })
|
|||
|
|
{
|
|||
|
|
var con = siemensTcpNet.ConnectServer();
|
|||
|
|
if (con.IsSuccess)
|
|||
|
|
{
|
|||
|
|
var result = await siemensTcpNet.WriteAsync(key, val);
|
|||
|
|
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm ss")}" +
|
|||
|
|
$"--- 连接plc成功..{ip},写key:{key},value:{val},是否写入成功:{result.IsSuccess}");
|
|||
|
|
await siemensTcpNet.ConnectCloseAsync();
|
|||
|
|
return result.IsSuccess;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
Console.WriteLine($"连接plc失败..{ip},msg:{ex.Message}");
|
|||
|
|
}
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// GetVal
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="ip"></param>
|
|||
|
|
/// <param name="key"></param>
|
|||
|
|
/// <param name="val"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public async Task<bool> GetVal(string ip, string key)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
using (var siemensTcpNet = new SiemensS7Net(SiemensPLCS.S200Smart, ip) { ConnectTimeOut = 5000 })
|
|||
|
|
{
|
|||
|
|
var con = siemensTcpNet.ConnectServer();
|
|||
|
|
if (con.IsSuccess)
|
|||
|
|
{
|
|||
|
|
var result = await siemensTcpNet.ReadBoolAsync(key);
|
|||
|
|
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm ss")}" +
|
|||
|
|
$"连接plc成功..{ip},GetVal:{key},value:{result.Content}");
|
|||
|
|
await siemensTcpNet.ConnectCloseAsync();
|
|||
|
|
return result.Content;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
Console.WriteLine($"连接plc失败..{ip},msg:{ex.Message}");
|
|||
|
|
}
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
public async Task<string> GetAngleVal(string ip, string key)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
using (var siemensTcpNet = new SiemensS7Net(SiemensPLCS.S200Smart, ip) { ConnectTimeOut = 2000 })
|
|||
|
|
{
|
|||
|
|
var con = siemensTcpNet.ConnectServer();
|
|||
|
|
if (con.IsSuccess)
|
|||
|
|
{
|
|||
|
|
var uint_M100 = await siemensTcpNet.ReadUInt32Async(key);
|
|||
|
|
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm ss")}" +
|
|||
|
|
$"连接plc成功..{ip},GetVal:{key},value:{uint_M100.Content }");
|
|||
|
|
await siemensTcpNet.ConnectCloseAsync();
|
|||
|
|
return (uint_M100.Content / 100).ToString();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine($"连接plc失败..{ip},msg:{ex.Message}");
|
|||
|
|
}
|
|||
|
|
return "";
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 俯仰角度
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="ip"></param>
|
|||
|
|
/// <param name="key"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public async Task<string> GetAngleVal1(string ip, string key)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
using (var siemensTcpNet = new SiemensS7Net(SiemensPLCS.S200Smart, ip) { ConnectTimeOut = 2000 })
|
|||
|
|
{
|
|||
|
|
string result = string.Empty;
|
|||
|
|
var con = siemensTcpNet.ConnectServer();
|
|||
|
|
if (con.IsSuccess)
|
|||
|
|
{
|
|||
|
|
//var int_16 = await siemensTcpNet.ReadInt16Async(key);
|
|||
|
|
//var ushort_M100 = await siemensTcpNet.ReadUInt16Async(key);
|
|||
|
|
//var double_M100 = await siemensTcpNet.ReadDoubleAsync(key);
|
|||
|
|
//var float_M100 = await siemensTcpNet.ReadFloatAsync(key);
|
|||
|
|
if (key == "VD4030")
|
|||
|
|
{
|
|||
|
|
var uint_M100 = await siemensTcpNet.ReadInt32Async(key);
|
|||
|
|
result = (uint_M100.Content / 10.0).ToString();
|
|||
|
|
}
|
|||
|
|
if (key == "VW4034")
|
|||
|
|
{
|
|||
|
|
var ushort_M100 = await siemensTcpNet.ReadUInt16Async(key);
|
|||
|
|
result = (ushort_M100.Content / 100.0).ToString();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm ss")}" +
|
|||
|
|
$"连接plc成功..{ip},GetVal:{key},value:{result }");
|
|||
|
|
await siemensTcpNet.ConnectCloseAsync();
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
Console.WriteLine($"连接plc失败..{ip},msg:{ex.Message}");
|
|||
|
|
}
|
|||
|
|
return "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public async Task<object> read(string ip, string key)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
using (var siemensTcpNet = new SiemensS7Net(SiemensPLCS.S200Smart, ip) { ConnectTimeOut = 5000 })
|
|||
|
|
{
|
|||
|
|
var con = siemensTcpNet.ConnectServer();
|
|||
|
|
if (con.IsSuccess)
|
|||
|
|
{
|
|||
|
|
var result = await siemensTcpNet.ReadUInt16Async(key);
|
|||
|
|
Console.WriteLine($"连接plc成功..{ip},读取key:{key},value{result.Content}");
|
|||
|
|
return result.Content;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
Console.WriteLine($"连接plc失败..{ip},msg:{ex.Message}");
|
|||
|
|
}
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|