using iWareOpc.Cache.Entity;
|
using iWareOpc.Properties;
|
using iWareOpc.Utils;
|
using OpcAccess.Access.Entity;
|
using OpcAccess.Access.Service;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace iWareOpc.Opc.Service
|
{
|
public class OpcService
|
{
|
private static object Lock = new object();
|
|
private OpcService() { }
|
|
private static OpcService Instance = null;
|
|
/// <summary>
|
/// 获取单例的方法
|
/// </summary>
|
/// <returns>Opc的单例实体</returns>
|
public static OpcService GetInstance()
|
{
|
if (Instance == null)
|
{
|
lock (Lock)
|
{
|
if (Instance == null)
|
{
|
Instance = new OpcService();
|
}
|
}
|
}
|
return Instance;
|
}
|
|
/// <summary>
|
/// 根据ip,群获取opc服务
|
/// </summary>
|
/// <param name="ip"></param>
|
/// <param name="opcGroups"></param>
|
/// <returns></returns>
|
public OpcAccessService GetOpcAccessService(string ip, List<OpcGroupEntity> opcGroups)
|
{
|
var opcAccessService = new OpcAccessService(ip);
|
opcAccessService.Init(opcGroups);
|
return opcAccessService;
|
}
|
|
/// <summary>
|
/// 写入OPC值
|
/// </summary>
|
/// <param name="groupName">组名</param>
|
/// <param name="itemName">项名</param>
|
/// <param name="value">写入值</param>
|
/// <returns>是否写入成功</returns>
|
public bool WriteValue(string groupName, string itemName, object value)
|
{
|
|
try
|
{
|
return CacheEntity.OpcAccessService.WriteValuePoint(groupName, itemName, value);
|
}
|
catch (Exception ex)
|
{
|
LogTextHelper.WriteLog(Resources.LogDir,this.ToString(),"WriteValue",ex.Message);
|
return false;
|
}
|
}
|
|
|
/// <summary>
|
/// 批量写入OPC值
|
/// </summary>
|
/// <param name="groupName">组名</param>
|
/// <param name="itemNames">项目名列表</param>
|
/// <param name="values">写入值列表</param>
|
/// <returns>是否写入成功</returns>
|
public bool WriteValue(string groupName, List<string> itemNames, List<object> values)
|
{
|
|
try
|
{
|
return CacheEntity.OpcAccessService.WriteValuePoint(groupName, itemNames, values);
|
}
|
catch (Exception ex)
|
{
|
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "WriteValue", ex.Message);
|
return false;
|
}
|
}
|
|
/// <summary>
|
/// 读取地址的值
|
/// </summary>
|
/// <param name="groupName">组名</param>
|
/// <param name="itemName">项目名</param>
|
/// <returns>读到的值</returns>
|
public object ReadValue(string groupName, string itemName)
|
{
|
|
try
|
{
|
|
var opcData = CacheEntity.OpcAccessService.ReadValuePoint(groupName, itemName);
|
|
return opcData == null ? null : opcData.ItemValue;
|
|
}
|
catch (Exception ex)
|
{
|
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "ReadValue", ex.Message);
|
return null;
|
}
|
|
|
}
|
|
/// <summary>
|
/// 批量读取地址的值
|
/// </summary>
|
/// <param name="groupName">组名</param>
|
/// <param name="itemNames">项目名</param>
|
/// <returns>读到的值列表</returns>
|
public List<object> ReadValue(string groupName, List<string> itemNames)
|
{
|
|
try
|
{
|
var values = new List<object>();
|
|
var opcDatas = CacheEntity.OpcAccessService.ReadValuePoint(groupName, itemNames);
|
|
opcDatas.ForEach(x => values.Add(x.ItemValue));
|
|
return values;
|
|
}
|
catch (Exception ex)
|
{
|
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "ReadValues", ex.Message);
|
return new List<object>();
|
}
|
}
|
}
|
}
|