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.

209 lines
8.2 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.Windows.Forms;
using System.Data;
using Mesnac.Action.Base;
using Mesnac.Codd.Session;
using Mesnac.Action.ChemicalWeighing.Entity;
using ICSharpCode.Core;
using Mesnac.Controls.Default;
namespace Mesnac.Action.ChemicalWeighing.Product.StorageBinViewDio
{
/// <summary>
/// 料仓参数设置:弹窗初始化
/// </summary>
public class SBVSetFromViewAction : ChemicalWeighingAction,IAction
{
public void Run(RuntimeParameter runtime)
{
base.RunIni(runtime); //必须调用
ICSharpCode.Core.LoggingService<SBVSetFromViewAction>.Debug("料仓参数设置");
#region 料仓号获取
SpecialButton2 CurrentSB2 = runtime.Sender as SpecialButton2;
int _sbvNumber = CurrentSB2.SbvNumber;
if(_sbvNumber == 0)
{
ICSharpCode.Core.LoggingService<SBVSetFromViewAction>.Warn(String.Format("请设置正确的料仓号!"));
return;
}
#endregion
#region 初始化料仓设置窗口
StorageBinViewSetForm frmSVBSForm = new StorageBinViewSetForm(_sbvNumber);
frmSVBSForm.Text = _sbvNumber + frmSVBSForm.Text;
#endregion
#region 从PLC读取已有参数并显示
#region 变量定义
int offset = 0; //偏移量
int[] dataValue = null;
RT_Parameter entity = new RT_Parameter();
string readEquipRunName = String.Empty;
System.Reflection.PropertyInfo[] pis = null;
string tableName = "FeederParameter" + _sbvNumber + "Data";
#endregion
#region 读取料仓参数的数据结构
List<PlcRecipeReader> readerList = PlcSchemaHelper.Instance.GetCWSSPlcReader(tableName);
if (readerList == null || readerList.Count == 0)
{
ICSharpCode.Core.LoggingService<SBVSetFromViewAction>.Warn(String.Format("设置料仓时读取PLC数据结构失败PlcSchema.xml中没有对应WeighDataInfo的配置节!"));
return;
}
readEquipRunName = readerList[0].PlcFiledName;
#endregion
#region 获取PLC品牌名称处理西门子与其他PLC差异
foreach (PlcRecipeReader reader in readerList)
{
string equipBrand = Mesnac.Equips.Factory.Instance.GetEquipBrandByRunName(reader.PlcFiledName);
reader.EquipBrand = equipBrand;
foreach (PlcRecipeReaderItem readerItem in reader.ItemList)
{
readerItem.EquipBrand = equipBrand;
}
}
#endregion
#region 读取料仓设置数据
if (!BasePlcHelper.Instance.PlcReadByRunName(readEquipRunName, out dataValue))
{
ICSharpCode.Core.LoggingService<SBVSetFromViewAction>.Warn(String.Format("基础报表数据存盘失败读取对应的PLC设备变量[{0}]数据失败!", readEquipRunName));
return;
}
else
{
ICSharpCode.Core.LoggingService<SBVSetFromViewAction>.Debug(String.Format("基础报表数据存盘_读取PLC设备变量[{0}]成功,长度={1}", readEquipRunName, dataValue.Length));
}
#endregion
#region 整理读取到的数据
foreach (PlcRecipeReader reader in readerList)
{
pis = typeof(Entity.RT_Parameter).GetProperties();
foreach (PlcRecipeReaderItem item in reader.ItemList)
{
int[] value = new int[item.ValueLen];
Array.Copy(dataValue, offset, value, 0, value.Length);
item.SetValue = value;
offset += value.Length;
foreach (System.Reflection.PropertyInfo pi in pis)
{
if (pi.Name == item.DataFieldName)
{
object objValue = null;
try
{
objValue = Mesnac.Basic.DataProcessor.ChangeType(item.GetValue(), pi.PropertyType);
}
catch
{
objValue = item.GetValue();
}
pi.SetValue(entity, objValue, null);
}
}
}
}
#endregion
#region 显示在画面上
frmSVBSForm.numericUpDown_HighMax.Value = (decimal)entity.Big_MaxSpeed;
frmSVBSForm.numericUpDown_HighMin.Value = (decimal)entity.Big_MinSpeed;
frmSVBSForm.numericUpDown_BigF.Value = (decimal)entity.Big_F;
frmSVBSForm.numericUpDown_LowMax.Value = (decimal)entity.Small_MaxSpeed;
frmSVBSForm.numericUpDown_LowMin.Value = (decimal)entity.Small_MinSpeed;
frmSVBSForm.numericUpDown_SmallF.Value = (decimal)entity.Small_F;
#endregion
#endregion
#region 画面参数下传至PLC
DialogResult result = frmSVBSForm.ShowDialog();
if (result == DialogResult.OK)
{
//将最新值先更新到数据库表中
entity.Big_MaxSpeed = (int)frmSVBSForm.numericUpDown_HighMax.Value;
entity.Big_MinSpeed = (int)frmSVBSForm.numericUpDown_HighMin.Value;
entity.Big_F = (int)frmSVBSForm.numericUpDown_BigF.Value;
entity.Small_MaxSpeed = (int)frmSVBSForm.numericUpDown_LowMax.Value;
entity.Small_MinSpeed = (int)frmSVBSForm.numericUpDown_LowMin.Value;
entity.Small_F = (int)frmSVBSForm.numericUpDown_SmallF.Value;
//下传写入
ICSharpCode.Core.LoggingService<SBVSetFromViewAction>.Debug("下传" + _sbvNumber + "号料仓参数");
try
{
List<string> msgList = new List<string>();
bool downresult = ChemicalWeighingPlc.PlcStorageBinParaSetHelper.DownloadStorageBinPara(msgList, tableName, entity, _sbvNumber);
if (downresult)
{
string msg1 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Product_SBVSetFromViewAction_DownloadAction_msg1")); //下传料仓参数完毕!
#region 记录操作日志
//base.DBLog(msg1);
#endregion
MessageBox.Show(msg1, Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
//string msg2 = StringParser.Parse(ResourceService.GetString("Mesnac_Action_ChemicalWeighing_Product_SBVSetFromViewAction_DownloadAction_msg2")); //下传料仓参数失败!
string msg2 = Mesnac.Basic.DataProcessor.CombineMsgList(msgList);
#region 记录操作日志
base.DBLog(msg2);
#endregion
MessageBox.Show(msg2, Mesnac.Basic.LanguageHelper.Caption, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService<SBVSetFromViewAction>.Error("下传" + _sbvNumber + "号料仓参数异常:" + ex.Message, ex);
#region 记录操作日志
//base.DBLog(ex.Message);
#endregion
MessageBox.Show(ex.Message, Mesnac.Basic.LanguageHelper.ErrorCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
#endregion
}
}
}