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.
lj_plc/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/AutoControl/PlcAutoWriteHelper.cs

784 lines
27 KiB
C#

using DataBlockHelper.DBHelpers;
using DataBlockHelper.Entity.DB2104Entity;
using DevExpress.XtraEditors.Filtering.Templates;
using Mesnac.Action.ChemicalWeighing.AutoControl.DB;
using Mesnac.Action.ChemicalWeighing.AutoControl.Entity;
using Mesnac.Action.ChemicalWeighing.LjMixManager;
using Mesnac.Action.ChemicalWeighing.LjPlanning;
using Mesnac.Action.ChemicalWeighing.MinAn;
using Mesnac.Controls.Default;
using Mesnac.Core.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static Mesnac.Action.ChemicalWeighing.AutoControl.AutoLogHelper;
namespace Mesnac.Action.ChemicalWeighing.AutoControl
{
public static class PlcAutoWriteHelper
{
private static int TFlag = 0;
#region 湿混糊化下传
public static void GelWetDownload(MCTextBoxEntity TextE, MCComboBoxEntity ComboE, MCRadioButtonEntity RadioE)
{
int b1 = Convert.ToInt32(ComboE.ChooseMaterial1.MCValue.ToString());
int b2 = Convert.ToInt32(ComboE.ChooseMaterial2.MCValue.ToString());
short bin1 = (short)StockMaterrialDbHelp.GetCodeById(b1);
short bin2 = (short)StockMaterrialDbHelp.GetCodeById(b2);
float MatTol1 = Convert.ToSingle(TextE.MaterialTolerance1.MCValue.ToString());
float MatTol2 = Convert.ToSingle(TextE.MaterialTolerance2.MCValue.ToString());
float MatWei1 = Convert.ToSingle(TextE.MaterialWeight1.MCValue.ToString());
float MatWei2 = Convert.ToSingle(TextE.MaterialWeight2.MCValue.ToString());
float GelSpeed = Convert.ToSingle(TextE.GelSpeedSet.MCValue.ToString());
float GelPosA = Convert.ToSingle(TextE.GelPosTimeA.MCValue.ToString());
float GelNagB = Convert.ToSingle(TextE.GelNagTimeB.MCValue.ToString());
short GelPosC = Convert.ToInt16(TextE.GelPosTimeC.MCValue.ToString());
short GelWater = Convert.ToInt16(TextE.GelWaterTime.MCValue.ToString());
short GelWait = Convert.ToInt16(TextE.GelWaitTime.MCValue.ToString());
short GelCloseHeat = Convert.ToInt16(TextE.GelCloseHeatTime.MCValue.ToString());
float GelDelayTime = Convert.ToSingle(TextE.GelOutDelayTime.MCValue.ToString());
if (b2 == -1)
{
if (MatTol1 < 0.1)
{
MessageBox.Show("公差不能小于0.1");
return;
}
}
else
{
if (MatTol1 < 0.1 || MatTol2 < 0.1)
{
MessageBox.Show("公差不能小于0.1");
return;
}
}
List<RecipePlcView> recipes = new List<RecipePlcView>();
RecipePlcView recipe1 = new RecipePlcView()
{
Bin = bin1,
Set = MatWei1,
Tolerance = MatTol1,
};
RecipePlcView recipe2 = new RecipePlcView()
{
Bin = bin2,
Set = MatWei2,
Tolerance = MatTol2,
};
recipes.Add(recipe1);
recipes.Add(recipe2);
List<Step> steps = new List<Step>();
Step step1 = new Step()
{
MixCode = 1,
MixSpeed = GelSpeed
};
Step step2 = new Step()
{
MixCode = 2,
};
Step step3 = new Step()
{
MixCode = 3,
MixTime = GelPosC,
MixTemp = GelPosA,
MixSpeed = GelNagB
};
Step step4 = new Step()
{
MixCode = 4,
};
Step step5 = new Step()
{
MixCode = 5,
MixTime = GelWater
};
Step step6 = new Step()
{
MixCode = 6,
};
Step step7 = new Step()
{
MixCode = 5,
MixTime = GelWait
};
Step step8 = new Step()
{
MixCode = 7,
MixTime = GelCloseHeat,
MixTemp = GelDelayTime
};
steps.Add(step1);
steps.Add(step2);
steps.Add(step3);
steps.Add(step4);
steps.Add(step5);
steps.Add(step6);
steps.Add(step7);
steps.Add(step8);
float WetDryWei = Convert.ToSingle(TextE.WetDryWeight.MCValue.ToString());
short WetMix = Convert.ToInt16(TextE.WetMixTime.MCValue.ToString());
short WetOutDelay = Convert.ToInt16(TextE.WetOutDelayTime.MCValue.ToString());
List<MixStep> mixSteps = new List<MixStep>();
MixStep mixStep1 = new MixStep()
{
MixCode = 1,
};
MixStep mixStep2 = new MixStep()
{
MixCode = 2,
SetValue = WetDryWei
};
MixStep mixStep3 = new MixStep()
{
MixCode = 3,
MixTime = WetMix
};
MixStep mixStep4 = new MixStep()
{
MixCode = 4,
};
MixStep mixStep5 = new MixStep()
{
MixCode = 5,
MixTime = WetOutDelay
};
mixSteps.Add(mixStep1);
mixSteps.Add(mixStep2);
mixSteps.Add(mixStep3);
mixSteps.Add(mixStep4);
mixSteps.Add(mixStep5);
List<DeviceMaterrial> materials = new List<DeviceMaterrial>();
DeviceMaterrial deviceMaterial1 = new DeviceMaterrial()
{
DeviceId = ControlsHelper.SingleSelect(RadioE),
MaterrialId = b1,
Type = 2,
Code = StockMaterrialDbHelp.GetCodeById(b1)
};
DeviceMaterrial deviceMaterial2 = new DeviceMaterrial()
{
DeviceId = ControlsHelper.SingleSelect(RadioE),
MaterrialId = b2,
Type = 2,
Code = StockMaterrialDbHelp.GetCodeById(b2)
};
materials.Add(deviceMaterial1);
materials.Add(deviceMaterial2);
switch (ControlsHelper.SingleSelect(RadioE))
{
case 1:
LjPlanningPlcHelp.DownG1Recipe(recipes, steps);
LjPlanningPlcHelp.DownM1Recipe(mixSteps);
DeviceMaterrialService.Save(materials);
break;
case 2:
LjPlanningPlcHelp.DownG2Recipe(recipes, steps);
LjPlanningPlcHelp.DownM2Recipe(mixSteps);
DeviceMaterrialService.Save(materials);
break;
case 3:
LjPlanningPlcHelp.DownG3Recipe(recipes, steps);
LjPlanningPlcHelp.DownM3Recipe(mixSteps);
DeviceMaterrialService.Save(materials);
break;
case 4:
LjPlanningPlcHelp.DownG4Recipe(recipes, steps);
LjPlanningPlcHelp.DownM4Recipe(mixSteps);
DeviceMaterrialService.Save(materials);
break;
case 5:
LjPlanningPlcHelp.DownG5Recipe(recipes, steps);
LjPlanningPlcHelp.DownM5Recipe(mixSteps);
DeviceMaterrialService.Save(materials);
break;
case 6:
LjPlanningPlcHelp.DownG6Recipe(recipes, steps);
LjPlanningPlcHelp.DownM6Recipe(mixSteps);
DeviceMaterrialService.Save(materials);
break;
case 7:
LjPlanningPlcHelp.DownG7Recipe(recipes, steps);
LjPlanningPlcHelp.DownM7Recipe(mixSteps);
DeviceMaterrialService.Save(materials);
break;
case 8:
LjPlanningPlcHelp.DownG8Recipe(recipes, steps);
LjPlanningPlcHelp.DownM8Recipe(mixSteps);
DeviceMaterrialService.Save(materials);
break;
default:
MessageBox.Show("请选择一条产线!");
return;
}
GWlog(recipes, steps, mixSteps, RadioE);
}
#endregion
#region 干混下传
public static void DryDownload(MCTextBoxEntity TextE, MCComboBoxEntity ComboE, MCRadioButtonEntity RadioE)
{
List<RecipePlcView> recipes = new List<RecipePlcView>();
List<Step> steps = new List<Step>();
List<DeviceMaterrial> materials = new List<DeviceMaterrial>();
DryerGetValue(ComboE.DryM1, TextE.DryW1, TextE.DryT1, recipes, materials, RadioE);
DryerGetValue(ComboE.DryM2, TextE.DryW2, TextE.DryT2, recipes, materials, RadioE);
DryerGetValue(ComboE.DryM3, TextE.DryW3, TextE.DryT3, recipes, materials, RadioE);
DryerGetValue(ComboE.DryM4, TextE.DryW4, TextE.DryT4, recipes, materials, RadioE);
DryerGetValue(ComboE.DryM5, TextE.DryW5, TextE.DryT5, recipes, materials, RadioE);
DryerGetValue(ComboE.DryM6, TextE.DryW6, TextE.DryT6, recipes, materials, RadioE);
DryerGetValue(ComboE.DryM7, TextE.DryW7, TextE.DryT7, recipes, materials, RadioE);
DryerGetValue(ComboE.DryM8, TextE.DryW8, TextE.DryT8, recipes, materials, RadioE);
DryerGetValue(ComboE.DryM9, TextE.DryW9, TextE.DryT9, recipes, materials, RadioE);
DryerGetValue(ComboE.DryM10, TextE.DryW10, TextE.DryT10, recipes, materials, RadioE);
DryerGetValue(ComboE.DryM11, TextE.DryW11, TextE.DryT11, recipes, materials, RadioE);
DryerGetValue(ComboE.DryM12, TextE.DryW12, TextE.DryT12, recipes, materials, RadioE);
if (TFlag == 1)
{
MessageBox.Show("公差不能小于0.1");
TFlag = 0;
return;
}
switch (ControlsHelper.DrySelect(RadioE))
{
case 1:
LjPlanningPlcHelp.DownD1Recipe(recipes, steps);
DeviceMaterrialService.Save(materials);
break;
case 2:
LjPlanningPlcHelp.DownD2Recipe(recipes, steps);
DeviceMaterrialService.Save(materials);
break;
case 3:
LjPlanningPlcHelp.DownD3Recipe(recipes, steps);
DeviceMaterrialService.Save(materials);
break;
case 4:
LjPlanningPlcHelp.DownD4Recipe(recipes, steps);
DeviceMaterrialService.Save(materials);
break;
}
}
#endregion
#region 水称下传
public static void WaterDownload(MCTextBoxEntity TextE)
{
WaterEntity HotA = new WaterEntity();
WaterEntity ColdA = new WaterEntity();
WaterEntity HotB = new WaterEntity();
WaterEntity ColdB = new WaterEntity();
float hotASet, hotBSet, coldASet, coldBSet, hotATol, hotBTol, coldATol, coldBTol;
if (float.TryParse(Convert.ToString(TextE.HotValueA.MCValue), out hotASet) &&
float.TryParse(Convert.ToString(TextE.HotToleranceA.MCValue), out hotATol) &&
float.TryParse(Convert.ToString(TextE.HotValueB.MCValue), out hotBSet) &&
float.TryParse(Convert.ToString(TextE.HotToleranceB.MCValue), out hotBTol) &&
float.TryParse(Convert.ToString(TextE.ColdValueA.MCValue), out coldASet) &&
float.TryParse(Convert.ToString(TextE.ColdToleranceA.MCValue), out coldATol) &&
float.TryParse(Convert.ToString(TextE.ColdValueB.MCValue), out coldBSet) &&
float.TryParse(Convert.ToString(TextE.ColdToleranceB.MCValue), out coldBTol))
{
HotA.Set = hotASet;
HotB.Set = hotBSet;
ColdA.Set = coldASet;
ColdB.Set = coldBSet;
HotA.Tolerance = hotATol;
HotB.Tolerance = hotBTol;
ColdA.Tolerance = coldATol;
ColdB.Tolerance = coldBTol;
Db2104WriteHelper.WriteAHostWater(HotA);
Db2104WriteHelper.WriteBHostWater(HotB);
Db2104WriteHelper.WriteAColWater(ColdA);
Db2104WriteHelper.WriteBColWater(ColdB);
MesnacServiceManager.Instance.LoggingService.Info("水称数据下发成功!");
MessageBox.Show("水称数据下发成功");
}
else
{
MesnacServiceManager.Instance.LoggingService.Info("输入数值的格式有误");
MessageBox.Show("输入数值的格式有误!");
return;
}
}
#endregion
#region 手动控制
#region 糊化锅手动下粉料
public static bool GelPowderDownload(MCRadioButtonEntity RadioE)
{
bool isReady;
switch (ControlsHelper.SingleSelect(RadioE))
{
case 1:
isReady = DB2105WriteHelper.WriteG1Pd();
break;
case 2:
isReady = DB2105WriteHelper.WriteG2Pd();
break;
case 3:
isReady = DB2105WriteHelper.WriteG3Pd();
break;
case 4:
isReady = DB2105WriteHelper.WriteG4Pd();
break;
case 5:
isReady = DB2105WriteHelper.WriteG5Pd();
break;
case 6:
isReady = DB2105WriteHelper.WriteG6Pd();
break;
case 7:
isReady = DB2105WriteHelper.WriteG7Pd();
break;
case 8:
isReady = DB2105WriteHelper.WriteG8Pd();
break;
default:
isReady = false;
MessageBox.Show("当前未选择产线!");
break;
}
return isReady;
}
#endregion
#region 糊化锅手动加冷水
public static bool GelColdWaterDownload(MCRadioButtonEntity RadioE)
{
bool isReady;
switch (ControlsHelper.SingleSelect(RadioE))
{
case 1:
isReady = DB2105WriteHelper.WriteG1Cw();
break;
case 2:
isReady = DB2105WriteHelper.WriteG2Cw();
break;
case 3:
isReady = DB2105WriteHelper.WriteG3Cw();
break;
case 4:
isReady = DB2105WriteHelper.WriteG4Cw();
break;
case 5:
isReady = DB2105WriteHelper.WriteG5Cw();
break;
case 6:
isReady = DB2105WriteHelper.WriteG6Cw();
break;
case 7:
isReady = DB2105WriteHelper.WriteG7Cw();
break;
case 8:
isReady = DB2105WriteHelper.WriteG8Cw();
break;
default:
isReady = false;
MessageBox.Show("当前未选择产线!");
break;
}
return isReady;
}
#endregion
#region 糊化锅手动加热水
public static bool GelHotWaterDownload(MCRadioButtonEntity RadioE)
{
bool isReady;
switch (ControlsHelper.SingleSelect(RadioE))
{
case 1:
isReady = DB2105WriteHelper.WriteG1Hw();
break;
case 2:
isReady = DB2105WriteHelper.WriteG2Hw();
break;
case 3:
isReady = DB2105WriteHelper.WriteG3Hw();
break;
case 4:
isReady = DB2105WriteHelper.WriteG4Hw();
break;
case 5:
isReady = DB2105WriteHelper.WriteG5Hw();
break;
case 6:
isReady = DB2105WriteHelper.WriteG6Hw();
break;
case 7:
isReady = DB2105WriteHelper.WriteG7Hw();
break;
case 8:
isReady = DB2105WriteHelper.WriteG8Hw();
break;
default:
isReady = false;
MessageBox.Show("当前未选择产线!");
break;
}
return isReady;
}
#endregion
#region 湿混机手动下糊化料
public static bool WetGelatDownload(MCRadioButtonEntity RadioE)
{
bool isReady;
switch (ControlsHelper.SingleSelect(RadioE))
{
case 1:
isReady = DB2105WriteHelper.WriteM1();
break;
case 2:
isReady = DB2105WriteHelper.WriteM2();
break;
case 3:
isReady = DB2105WriteHelper.WriteM3();
break;
case 4:
isReady = DB2105WriteHelper.WriteM4();
break;
case 5:
isReady = DB2105WriteHelper.WriteM5();
break;
case 6:
isReady = DB2105WriteHelper.WriteM6();
break;
case 7:
isReady = DB2105WriteHelper.WriteM7();
break;
case 8:
isReady = DB2105WriteHelper.WriteM8();
break;
default:
isReady = false;
MessageBox.Show("当前未选择产线!");
break;
}
return isReady;
}
#endregion
#region 湿混机手动下粉料
public static void WetGelatDownload(MCTextBoxEntity TextE, MCRadioButtonEntity RadioE)
{
float t = Convert.ToSingle(TextE.ManualTolerance.MCValue.ToString());
float w = Convert.ToSingle(TextE.ManualWeight.MCValue.ToString());
if (t < 0.1)
{
MessageBox.Show("公差不能小于0.1");
return;
}
SetValue value = new SetValue()
{
Value = w,
Toterance = t
};
switch (ControlsHelper.SingleSelect(RadioE))
{
case 1:
PowderDownSignel(MinAnPlc.Heir1, 1);
DB2105WriteHelper.WriteManScrewH1();
DB2105WriteHelper.WriteSetValueH1(value);
break;
case 2:
PowderDownSignel(MinAnPlc.Heir1, 1);
DB2105WriteHelper.WriteManScrewH2();
DB2105WriteHelper.WriteSetValueH1(value);
break;
case 3:
PowderDownSignel(MinAnPlc.Heir2, 2);
DB2105WriteHelper.WriteManScrewH3();
DB2105WriteHelper.WriteSetValueH2(value);
break;
case 4:
PowderDownSignel(MinAnPlc.Heir2, 2);
DB2105WriteHelper.WriteManScrewH4();
DB2105WriteHelper.WriteSetValueH2(value);
break;
case 5:
PowderDownSignel(MinAnPlc.Heir3, 3);
DB2105WriteHelper.WriteManScrewH5();
DB2105WriteHelper.WriteSetValueH3(value);
break;
case 6:
PowderDownSignel(MinAnPlc.Heir3, 3);
DB2105WriteHelper.WriteManScrewH6();
DB2105WriteHelper.WriteSetValueH3(value);
break;
case 7:
PowderDownSignel(MinAnPlc.Heir4, 4);
DB2105WriteHelper.WriteManScrewH7();
DB2105WriteHelper.WriteSetValueH4(value);
break;
case 8:
PowderDownSignel(MinAnPlc.Heir4, 4);
DB2105WriteHelper.WriteManScrewH8();
DB2105WriteHelper.WriteSetValueH4(value);
break;
default:
MessageBox.Show("当前未选择产线!");
return;
}
ManualWeightLog(w, t, RadioE);
}
#endregion
#endregion
#region 产线启停
#region 产线启动
public static void LineStart(MCRadioButtonEntity RadioE)
{
switch (ControlsHelper.SingleSelect(RadioE))
{
case 1:
DB2105WriteHelper.WriteStartJob1();
break;
case 2:
DB2105WriteHelper.WriteStartJob2();
break;
case 3:
DB2105WriteHelper.WriteStartJob3();
break;
case 4:
DB2105WriteHelper.WriteStartJob4();
break;
case 5:
DB2105WriteHelper.WriteStartJob5();
break;
case 6:
DB2105WriteHelper.WriteStartJob6();
break;
case 7:
DB2105WriteHelper.WriteStartJob7();
break;
case 8:
DB2105WriteHelper.WriteStartJob8();
break;
default:
MessageBox.Show("请选择一条产线!");
return;
}
SingleLog("产线启动", RadioE);
}
#endregion
#region 产线停止
public static void LineStop(MCRadioButtonEntity RadioE)
{
switch (ControlsHelper.SingleSelect(RadioE))
{
case 1:
DB2105WriteHelper.WriteStopJob1();
break;
case 2:
DB2105WriteHelper.WriteStopJob2();
break;
case 3:
DB2105WriteHelper.WriteStopJob3();
break;
case 4:
DB2105WriteHelper.WriteStopJob4();
break;
case 5:
DB2105WriteHelper.WriteStopJob5();
break;
case 6:
DB2105WriteHelper.WriteStopJob6();
break;
case 7:
DB2105WriteHelper.WriteStopJob7();
break;
case 8:
DB2105WriteHelper.WriteStopJob8();
break;
default:
MessageBox.Show("请选择一条产线!");
return;
}
SingleLog("产线停止", RadioE);
}
#endregion
#endregion
#region 维修模式
public static void RepairOnOff(MCLabelEntity LabelE, MCRadioButtonEntity RadioE)
{
if (LabelE.RepairState.MCValue.ToString() == "关")
{
if (MessageBox.Show("是否开启维修模式?", "维修模式确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
return;
}
Db3000Helper.WriteModel(ControlsHelper.SingleSelect(RadioE), true);
LabelE.RepairState.MCValue = "开";
SingleLog("维修模式开启", RadioE);
MessageBox.Show("维修模式已开启");
}
else
{
if (LabelE.RepairState.MCValue.ToString() == "开")
{
if (MessageBox.Show("是否关闭维修模式?", "维修模式确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
return;
}
Db3000Helper.WriteModel(ControlsHelper.SingleSelect(RadioE), false);
LabelE.RepairState.MCValue = "关";
SingleLog("维修模式关闭", RadioE);
MessageBox.Show("维修模式已关闭");
}
}
}
#endregion
#region 湿混机物料封装
/// <summary>
/// 干混机数据打包封装
/// </summary>
/// <param name="DryM">物料类型</param>
/// <param name="DryW">重量</param>
/// <param name="DryT">公差</param>
/// <param name="recipes">物料集合</param>
/// <param name="steps">步骤集合</param>
/// <param name="materials">数据库物料记录</param>
private static void DryerGetValue(MCCombobox DryM, MCTextBox DryW, MCTextBox DryT,
List<RecipePlcView> recipes, List<DeviceMaterrial> materials, MCRadioButtonEntity RadioE)
{
int b = Convert.ToInt32(DryM.MCValue.ToString());
short bin = (short)StockMaterrialDbHelp.GetCodeById(b);
float w = Convert.ToSingle(DryW.MCValue.ToString());
float t = Convert.ToSingle(DryT.MCValue.ToString());
if (b != -1 && t < 0.1)
{
TFlag = 1;
}
RecipePlcView recipe1 = new RecipePlcView()
{
Bin = bin,
Set = w,
Tolerance = t,
};
recipes.Add(recipe1);
DeviceMaterrial deviceMaterial1 = new DeviceMaterrial()
{
DeviceId = ControlsHelper.DrySelect(RadioE),
MaterrialId = b,
Type = 1,
Code = StockMaterrialDbHelp.GetCodeById(b)
};
materials.Add(deviceMaterial1);
}
#endregion
#region 上料提示封装
private static void PowderDownSignel(bool minanResult, int num)
{
if (minanResult)
{
DialogResult result = MessageBox.Show(num + "号罐正在上料", "温馨提示:", MessageBoxButtons.OK, MessageBoxIcon.Information);
if (result == DialogResult.OK)
{
return;
}
}
}
#endregion
}
}