1
0
Fork 0
nodyang
nodyang@aliyun.com 3 months ago
parent 8a5ea7686c
commit b40ae28a60

File diff suppressed because it is too large Load Diff

@ -1,7 +1,71 @@
namespace HighWayIot.Plc
using System.ComponentModel;
namespace HighWayIot.Plc
{
public class DataTypeEnum
/// <summary>
/// 数据类型
/// </summary>
public enum DataTypeEnum
{
/// <summary>
/// 未定义
/// </summary>
[Description("未定义")]
None = 0,
/// <summary>
/// Bool
/// </summary>
[Description("Bool")]
Bool = 1,
/// <summary>
/// Byte
/// </summary>
[Description("Byte")]
Byte = 2,
/// <summary>
/// Int16
/// </summary>
[Description("Int16")]
Int16 = 3,
/// <summary>
/// UInt16
/// </summary>
[Description("UInt16")]
UInt16 = 4,
/// <summary>
/// Int32
/// </summary>
[Description("Int32")]
Int32 = 5,
/// <summary>
/// UInt32
/// </summary>
[Description("UInt32")]
UInt32 = 6,
/// <summary>
/// Int64
/// </summary>
[Description("Int64")]
Int64 = 7,
/// <summary>
/// UInt64
/// </summary>
[Description("UInt64")]
UInt64 = 8,
/// <summary>
/// Float
/// </summary>
[Description("Float")]
Float = 9,
/// <summary>
/// Double
/// </summary>
[Description("Double")]
Double = 10,
/// <summary>
/// String
/// </summary>
[Description("String")]
String = 11,
}
}

@ -45,10 +45,8 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Impl\InovancePlc.cs" />
<Compile Include="Impl\OmronNJPlc.CS" />
<Compile Include="Impl\SiemensPlc.cs" />
<Compile Include="IPlc.cs" />
<Compile Include="DataTypeEnum.cs" />
<Compile Include="PlcConnect.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
@ -61,5 +59,8 @@
<Name>HighWayIot.Log4net</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Folder Include="Impl\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

@ -1,7 +1,122 @@
namespace HighWayIot.Plc
{
public class PlcConnect
{
using System;
using HighWayIot.Log4net;
using HslCommunication;
using HslCommunication.LogNet;
using HslCommunication.Profinet.AllenBradley;
using HslCommunication.Profinet.Melsec;
namespace HighWayIot.Plc
{ public class PlcConnect
{
private static LogHelper logNet = LogHelper.Instance;
private static readonly Lazy<MelsecMcNet> lazy = new Lazy<MelsecMcNet>(() => new PlcConnect().CreateAb());
public static MelsecMcNet Instance => lazy.Value;
private PlcConnect()
{
}
}
/// <summary>
/// 初始化三菱的服务器
/// </summary>
/// <returns></returns>
private MelsecMcNet CreateAb()
{
string Ip = "";
MelsecMcNet plc = new MelsecMcNet();
plc.CommunicationPipe = new HslCommunication.Core.Pipe.PipeTcpNet(Ip, 44818)
{
ConnectTimeOut = 1000, // 连接超时时间,单位毫秒
SleepTime = 0,
SocketKeepAliveTime = -1,
IsPersistentConnection = true,
};
return plc;
}
/// <summary>
/// 读取bool 页面
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public static bool ReadBool(string address)
{
var result = Instance.ReadBool(address);
return result.IsSuccess && result.Content;
}
/// <summary>
/// plc 是不是保持链接
/// </summary>
public static bool IsConnect
{
get
{
var result = Instance.ReadPlcType();
return result.IsSuccess;
}
}
/// <summary>
/// 写入数据
/// </summary>
/// <param name="address">地址</param>
/// <param name="value">值</param>
/// <param name="type">数据类型</param>
/// <returns></returns>
public static OperateResult Write(string address, object value, DataTypeEnum type)
{
var result = new OperateResult() { IsSuccess = false };
switch (type)
{
case DataTypeEnum.Bool:
result= Instance.Write(address, Convert.ToBoolean(value));
break;
case DataTypeEnum.Byte:
result = Instance.Write(address, Convert.ToByte(value));
break;
case DataTypeEnum.Int16:
result = Instance.Write(address, Convert.ToInt16(value));
break;
case DataTypeEnum.UInt16:
result = Instance.Write(address, Convert.ToUInt16(value));
break;
case DataTypeEnum.Int32:
result = Instance.Write(address, Convert.ToInt32(value));
break;
case DataTypeEnum.UInt32:
result = Instance.Write(address, Convert.ToUInt32(value));
break;
case DataTypeEnum.Int64:
result = Instance.Write(address, Convert.ToInt64(value));
break;
case DataTypeEnum.UInt64:
result = Instance.Write(address, Convert.ToUInt64(value));
break;
case DataTypeEnum.Float:
result = Instance.Write(address, Convert.ToSingle(value));
break;
case DataTypeEnum.Double:
result = Instance.Write(address, Convert.ToDouble(value));
break;
}
logNet.Info($"write 地址[{address}] value:[{value.ToString()}] type:[{type.ToString()}] result:[{result.IsSuccess}]");
return result;
}
}
}
Loading…
Cancel
Save