You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
4.7 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using ICSharpCode.Core;
namespace Mesnac.Action.ChemicalWeighing.ChemicalWeighingPlc
{
/// <summary>
/// 料仓参数设置下传辅助类
/// </summary>
public class PlcStorageBinParaSetHelper
{
#region 料仓参数下传方法
/// <summary>
/// 下传料仓参数至PLC
/// </summary>
/// <param name="msgList">输出消息列表</param>
/// <param name="plcNodeName">PlcSchema.xml对应的节点名称</param>
/// <param name="entity">收集到的要下传的数据</param>
/// <param name="binNum">料仓号</param>
/// <returns>成功返回true失败返回false</returns>
public static bool DownloadStorageBinPara(List<string> msgList, string plcNodeName, Entity.RT_Parameter entity,int binNum)
{
try
{
#region 定义变量
string msg = String.Empty;
List<Int16> writeDataList = new List<Int16>();
PropertyInfo[] ps = typeof(Entity.RT_Parameter).GetProperties();
if (msgList == null)
{
msgList = new List<string>();
}
#endregion
#region 验证处理
PlcWriter writer = PlcSchemaHelper.Instance.GetPlcWriter(plcNodeName).FirstOrDefault();
if (writer == null)
{
msg = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_ChemicalWeighingPlc_PlcStorageBinParaSetHelper_RT_Parameter_msg10")); //料仓参数下传PLC失败在PlcSchema.xml中没有RT_Parameter配置节!
msgList.Add(msg);
ICSharpCode.Core.LoggingService<PlcStorageBinParaSetHelper>.Error(msg);
return false;
}
#endregion
#region 获取PLC品牌名称处理西门子与其他PLC差异
string equipBrand = Mesnac.Equips.Factory.Instance.GetEquipBrandByRunName(writer.EquipRunName);
writer.EquipBrand = equipBrand;
#endregion
#region 整理数据
if (entity != null)
{
foreach (PlcWriteItem item in writer.SchemaList)
{
item.ClearData();
item.EquipBrand = equipBrand; //设置PLC设备品牌
foreach (PropertyInfo pi in ps)
{
if (item.DataFieldName == pi.Name)
{
item.SetValue = pi.GetValue(entity, null);
break;
}
}
writeDataList.AddRange(item.WriteData());
}
}
else
{
foreach (PlcWriteItem item in writer.SchemaList)
{
item.ClearData();
item.EquipBrand = equipBrand; //设置PLC设备品牌
writeDataList.AddRange(item.WriteData());
}
}
#endregion
#region 下传数据
object[] buff = new object[writeDataList.Count];
Array.Copy(writeDataList.ToArray(), buff, buff.Length);
ICSharpCode.Core.LoggingService<PlcStorageBinParaSetHelper>.Debug(String.Format("开始下传" + binNum + "号料仓的参数"));
if (!BasePlcHelper.Instance.PlcWriteByRunName(writer.EquipRunName, buff))
{
msg = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_ChemicalWeighingPlc_PlcStorageBinParaSetHelper_RT_Parameter_msg2")); //下传料仓参数失败!
msgList.Add(msg);
ICSharpCode.Core.LoggingService<PlcStorageBinParaSetHelper>.Error(msg);
return false;
}
ICSharpCode.Core.LoggingService<PlcStorageBinParaSetHelper>.Debug(String.Format("下传料仓参数完毕!"));
#endregion
return true;
}
catch (Exception ex)
{
msgList.Add(ex.Message);
ICSharpCode.Core.LoggingService<PlcStorageBinParaSetHelper>.Error(ex.Message, ex);
return false;
}
}
#endregion
}
}