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