Files

97 lines
3.7 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Cowain.Bake.BLL;
using Cowain.Bake.Common;
using Cowain.Bake.Common.Core;
using Cowain.Bake.Common.Enums;
using Cowain.Bake.Common.Models;
using Cowain.Bake.Communication.Interface;
using Cowain.Bake.Model;
using Cowain.Bake.Model.Models;
using Prism.Ioc;
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Threading.Tasks;
using Unity;
namespace Cowain.Bake.Communication.PLC
{
public class PLCManage
{
IUnityContainer _unityContainer;
private List<TDeviceConfig> plcList;
public PLCManage(IUnityContainer unityContainer)
{
_unityContainer = unityContainer;
plcList = _unityContainer.Resolve<DeviceConfigService>().GetConfig(EDeviceType.PLC);
foreach (var item in plcList)
{
Assembly asm = Assembly.GetExecutingAssembly(); //获得当前程序的绝对路径
Type type = asm.GetType(MyPath.PLC + item.DriverName);
unityContainer.RegisterSingleton(typeof(IPLCDevice), type, item.Name);
var plc = _unityContainer.Resolve<IPLCDevice>(item.Name); //几个PLC就实例化几个
plc.Id = item.Id;
plc.Name = item.Name;
plc.DeviceName = item.DriverName;
plc.GetJsonParam(item.Json);
//2023.3.1修改不需要读取StorageList驱动自己分批读取
var plcTagList = _unityContainer.Resolve<TagListService>().GetTagList(item.Id); //获取PLC的标签和节点
if (plcTagList != null && plcTagList.Count > 0)
{
int q = 0;
plcTagList.ForEach((x) =>
{
plc.TagList.Add(x);
plc.VariableList.Add(new Variable()
{
Id = (int)x.Id,
Quality = false,
VarType = x.VarType,
ArrayLength = x.ArrayLen,
StationId = x.StationId,
ParamName = x.ParamName,
Number = x.Number,
Index = q++,
TrigEnable = x.TirgEnable,
TrigJson = x.TrigJson,
OperType = x.OperType.Value,
Json = x.Json,
VarDesc = x.VarDesc,
VarName = x.VarName,
Address = x.Address,
TagType = x.TagType
});
});
foreach (var v in plc.VariableList)
{
if (!plc.VariableDic.ContainsKey(v.Id))
{
plc.VariableDic.Add(v.Id, v);
}
else
{
LogHelper.Instance.Error($"PLC有相同的节点,Node=[{v.VarName}]");
}
}
}
if (item.Enable)
{
plc.AnalysisAddress(); //把地址拆开,并计算长度
plc.GetStorageArea(); //获取存储区域
//plc.Connect();
//plc.StartRead();
Task t = new Task(() => //var t = Task.Run(async delegate
{
plc.Connect();
});
plc.StartRead();
}
}
}
}
}