@@ -2,19 +2,39 @@ | |||
namespace BPASmartClient.FoodStationTest.Model.GVL | |||
{ | |||
/// <summary> | |||
/// PLC变量信息 | |||
/// </summary> | |||
public class PlcInfos : ObservableObject | |||
{ | |||
/// <summary> | |||
/// 变量序号 | |||
/// </summary> | |||
public int Count { get { return _Count; } set { _Count = value; OnPropertyChanged(); } } | |||
private int _Count { get; set; } | |||
/// <summary> | |||
/// 变量名称 | |||
/// </summary> | |||
public string Name { get { return _Name; } set { _Name = value; OnPropertyChanged(); } } | |||
private string _Name { get; set; } | |||
/// <summary> | |||
/// 变量地址 | |||
/// </summary> | |||
public string Address { get { return _Address; } set { _Address = value; OnPropertyChanged(); } } | |||
private string _Address { get; set; } | |||
/// <summary> | |||
/// 变量类型 | |||
/// </summary> | |||
public string Type { get { return _Type; } set { _Type = value; OnPropertyChanged(); } } | |||
private string _Type { get; set; } | |||
/// <summary> | |||
/// 变量描述 | |||
/// </summary> | |||
public string Describe { get { return _Describe; } set { _Describe = value; OnPropertyChanged(); } } | |||
private string _Describe { get; set; } | |||
/// <summary> | |||
/// 变量值 | |||
/// </summary> | |||
public string Value { get { return _Value; } set { _Value = value; OnPropertyChanged(); } } | |||
private string _Value { get; set; } | |||
@@ -10,7 +10,13 @@ namespace BPASmartClient.FoodStationTest.Model.GVL | |||
Address = address; | |||
Describe = des; | |||
} | |||
/// <summary> | |||
/// 变量信息描述。 | |||
/// </summary> | |||
public string Describe { get; set; } | |||
/// <summary> | |||
/// 变量地址 | |||
/// </summary> | |||
public string Address { get; set; } | |||
} | |||
} |
@@ -2,23 +2,45 @@ | |||
namespace BPASmartClient.FoodStationTest.Model.Par | |||
{ | |||
/// <summary> | |||
/// 连接参数设置。 | |||
/// </summary> | |||
public class ConnectParMode : ObservableObject | |||
{ | |||
/// <summary> | |||
/// 海科PLC是否连接 | |||
/// </summary> | |||
public bool HKPlcConnect { get { return _mHKPlcConnect; } set { _mHKPlcConnect = value; OnPropertyChanged(); } } | |||
private bool _mHKPlcConnect; | |||
/// <summary> | |||
/// 是否屏蔽料仓报警 | |||
/// </summary> | |||
public bool ShieldStockbinAlarm { get { return _mShieldStockbinAlarm; } set { _mShieldStockbinAlarm = value; OnPropertyChanged(); } } | |||
private bool _mShieldStockbinAlarm; | |||
/// <summary> | |||
/// 进桶侧调速电机速度 | |||
/// </summary> | |||
public short AxisLoadSpeed { get { return _mAxisLoadSpeed; } set { _mAxisLoadSpeed = value; OnPropertyChanged(); } } | |||
private short _mAxisLoadSpeed; | |||
/// <summary> | |||
/// 过度侧调速电机速度 | |||
/// </summary> | |||
public short AxisMidSpeed { get { return _mAxisMidSpeed; } set { _mAxisMidSpeed = value; OnPropertyChanged(); } } | |||
private short _mAxisMidSpeed; | |||
/// <summary> | |||
/// 出桶侧调速电机速度 | |||
/// </summary> | |||
public short AxisUnLoadSpeed { get { return _mAxisUnLoadSpeed; } set { _mAxisUnLoadSpeed = value; OnPropertyChanged(); } } | |||
private short _mAxisUnLoadSpeed; | |||
/// <summary> | |||
/// 进桶侧伺服电机速度 | |||
/// </summary> | |||
public float Axis1Speed { get { return _mAxis1Speed; } set { _mAxis1Speed = value; OnPropertyChanged(); } } | |||
private float _mAxis1Speed; | |||
/// <summary> | |||
/// 出桶侧伺服电机速度 | |||
/// </summary> | |||
public float Axis2Speed { get { return _mAxis2Speed; } set { _mAxis2Speed = value; OnPropertyChanged(); } } | |||
private float _mAxis2Speed; | |||
} | |||
@@ -4,6 +4,9 @@ namespace BPASmartClient.FoodStationTest.Model | |||
{ | |||
public class LocalPar | |||
{ | |||
/// <summary> | |||
/// 本地模拟配方列表。 | |||
/// </summary> | |||
public ObservableCollection<RecipeModel> Recipes { get; set; } = new ObservableCollection<RecipeModel>(); | |||
/// <summary> | |||
@@ -15,7 +18,9 @@ namespace BPASmartClient.FoodStationTest.Model | |||
/// 味魔方数量,每个项目应该固定的。 | |||
/// </summary> | |||
public int RawMaterialDeviceNum { get; } = 6; | |||
/// <summary> | |||
/// 海科PLC的IP地址。 | |||
/// </summary> | |||
public string HK_PLC_IP { get; } | |||
} | |||
} |
@@ -8,8 +8,8 @@ using System; | |||
using System.Collections.Concurrent; | |||
using System.Collections.Generic; | |||
using System.Collections.ObjectModel; | |||
using System.Configuration; | |||
using System.Linq; | |||
using System.Printing; | |||
using System.Reflection; | |||
using System.Threading; | |||
@@ -17,31 +17,34 @@ namespace BPASmartClient.FoodStationTest.Model | |||
{ | |||
public class ProcessControl | |||
{ | |||
private volatile static ProcessControl _Instance; | |||
private static volatile ProcessControl _Instance; | |||
public static ProcessControl GetInstance => _Instance ?? (_Instance = new ProcessControl()); | |||
private ProcessControl() { } | |||
private ProcessControl() | |||
{ } | |||
/// <summary> | |||
/// 配方数据 | |||
/// </summary> | |||
public ObservableCollection<RemoteRecipeData> RemoteRecipes = new ObservableCollection<RemoteRecipeData>(); | |||
/// <summary> | |||
/// 原料的名称和料仓的位置对应 | |||
/// </summary> | |||
public Dictionary<string, short> RawMaterialsNamePos = new Dictionary<string, short>(); | |||
public ObservableCollection<RawMaterialStockBin> RawMaterialsInfo => Json<DevicePar>.Data.rawMaterialStockBin; | |||
/// <summary> | |||
/// 配方队列 | |||
/// </summary> | |||
public ConcurrentQueue<string> RecipeQueueTray1 = new ConcurrentQueue<string>(); | |||
/// <summary> | |||
/// 物料集合 | |||
/// </summary> | |||
public Dictionary<int, ConcurrentQueue<string>> RecipeQueueTray { get; set; } = new Dictionary<int, ConcurrentQueue<string>>(); | |||
public HKDeviceStatus HKDevice = new HKDeviceStatus(); | |||
public ObservableCollection<PlcInfos> CommData { get; set; } = new ObservableCollection<PlcInfos>(); | |||
@@ -49,8 +52,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
public DateTime StockBinAlarmTime = DateTime.Now; | |||
//public string? HK_PLC_IP = ConfigurationManager.AppSettings["HKPlc_IP"]; | |||
public string? HK_PLC_IP = Json<LocalPar>.Data.HK_PLC_IP; | |||
public string? HK_PLC_IP => Json<LocalPar>.Data.HK_PLC_IP; | |||
public void Init() | |||
{ | |||
@@ -115,6 +117,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
Thread.Sleep(10); | |||
}), "海科PLC实时数据", true); | |||
} | |||
/// <summary> | |||
/// 气缸的传感器值 | |||
/// </summary> | |||
@@ -138,6 +141,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
GVL_SmallStation.GetInstance.Cylinder_JackInfo[26] = HKDevice.HK_PLC_S7.Read<bool>("DB5.DBX4.4").Content;//托盘2_1气缸 | |||
GVL_SmallStation.GetInstance.Cylinder_JackInfo[27] = HKDevice.HK_PLC_S7.Read<bool>("DB5.DBX4.5").Content;//托盘2_2气缸 | |||
} | |||
/// <summary> | |||
/// DB块的变量实时值 | |||
/// </summary> | |||
@@ -198,6 +202,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// 小料站和西门子PLC之间的实时数据 | |||
/// </summary> | |||
@@ -235,6 +240,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
GVL_SmallStation.GetInstance.RobotProgramNum = HKDevice.HK_PLC_S7.Read<byte>("DB3.DBB1").Content; | |||
} | |||
} | |||
public void CancelOrder() | |||
{ | |||
if (GVL_SmallStation.GetInstance.Order_Cancel) //订单取消 | |||
@@ -289,6 +295,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
GVL_SmallStation.GetInstance.OrderCancelStep = 3; | |||
} | |||
break; | |||
case 2: | |||
if (HKDevice.HK_PLC_S7.Read<bool>("DB3.DBX42." + index1).Content) | |||
{ | |||
@@ -299,10 +306,12 @@ namespace BPASmartClient.FoodStationTest.Model | |||
} | |||
} | |||
break; | |||
case 3: | |||
// SiemensDevice.Siemens_PLC_S7.Write("DB2201.DBX450.1", true); | |||
GVL_SmallStation.GetInstance.OrderCancelStep = 4; | |||
break; | |||
case 4: | |||
// SiemensDevice.Siemens_PLC_S7.Write("DB2201.DBX450.1", false); | |||
@@ -310,6 +319,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
MessageNotify.GetInstance.ShowRunLog($"队列1,西门子取消订单完成,订单号:{code}"); | |||
break; | |||
case 9: | |||
App.Current.Dispatcher.Invoke(() => | |||
{ | |||
@@ -321,15 +331,18 @@ namespace BPASmartClient.FoodStationTest.Model | |||
GVL_SmallStation.GetInstance.Order_CancelRecipeCode = ""; | |||
GVL_SmallStation.GetInstance.OrderCancelStep = 0; | |||
break; | |||
case 20: | |||
GVL_SmallStation.GetInstance.OrderCancelStep = 21; | |||
break; | |||
case 21: | |||
GVL_SmallStation.GetInstance.OrderCancelStep = 29; | |||
MessageNotify.GetInstance.ShowRunLog($"队列1,西门子取消订单完成,订单号:{code}"); | |||
break; | |||
case 29: | |||
App.Current.Dispatcher.Invoke(() => | |||
{ | |||
@@ -345,12 +358,14 @@ namespace BPASmartClient.FoodStationTest.Model | |||
case 30: | |||
GVL_SmallStation.GetInstance.OrderCancelStep = 31; | |||
break; | |||
case 31: | |||
GVL_SmallStation.GetInstance.OrderCancelStep = 39; | |||
MessageNotify.GetInstance.ShowRunLog($"西门子取消订单完成,订单号:{code}"); | |||
break; | |||
case 39: | |||
GVL_SmallStation.GetInstance.Order_Cancel = false; | |||
GVL_SmallStation.GetInstance.Order_CancelRecipeCode = ""; | |||
@@ -360,6 +375,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// 将配方添加到配方队列中 | |||
/// </summary> | |||
@@ -376,6 +392,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
{ | |||
if (GVL_SmallStation.GetInstance.NotUseSmallStation) | |||
{ | |||
//查询都不包含此配方 | |||
if (RecipeQueueTray[i].Count == 0 && !RecipeQueueTray[0].Contains(data.RecipeCode) && !RecipeQueueTray[1].Contains(data.RecipeCode) && !RecipeQueueTray[2].Contains(data.RecipeCode) && !RecipeQueueTray[3].Contains(data.RecipeCode) && !RecipeQueueTray[4].Contains(data.RecipeCode)) | |||
{ | |||
RecipeQueueTray[i].Enqueue(data.RecipeCode); | |||
@@ -404,8 +421,8 @@ namespace BPASmartClient.FoodStationTest.Model | |||
GVL_SmallStation.GetInstance.WindSendDosingStatus = 0; | |||
GVL_SmallStation.GetInstance.WindSendDosing = false; | |||
} | |||
} | |||
/// <summary> | |||
/// 小料站配料 | |||
/// </summary> | |||
@@ -413,6 +430,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
{ | |||
if (!GVL_SmallStation.GetInstance.NotUseSmallStation) | |||
{ | |||
//如果使用小料站配料,更新查询5个工位的AGV状态。 | |||
for (int i = 0; i < 5; i++) | |||
{ | |||
switch (GVL_SmallStation.GetInstance.Tray_AGVLogic[i]) | |||
@@ -427,6 +445,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
MessageNotify.GetInstance.ShowRunLog("AGV到位 发送到位信号给plc"); | |||
} | |||
break; | |||
case 1: | |||
if (GVL_SmallStation.GetInstance.Station1HaveTray) | |||
@@ -436,6 +455,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
MessageNotify.GetInstance.ShowRunLog("托盘1有货架"); | |||
} | |||
break; | |||
case 2: | |||
if (GVL_SmallStation.GetInstance.AGV_GetTray1Finish && GVL_SmallStation.GetInstance.RecipeProcessStatus[i] == 0) | |||
{ | |||
@@ -445,6 +465,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
MessageNotify.GetInstance.ShowRunLog("AGV取托盘1完成,发送给海科信号后1s后复位"); | |||
} | |||
break; | |||
case 3: | |||
if (HKDevice.HK_PLC_S7.Read<bool>("DB4.DBX10." + i).Content) | |||
{ | |||
@@ -455,6 +476,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
MessageNotify.GetInstance.ShowRunLog("AGV取托盘1完成,信号复位"); | |||
} | |||
break; | |||
default: | |||
break; | |||
} | |||
@@ -482,8 +504,6 @@ namespace BPASmartClient.FoodStationTest.Model | |||
var res = Json<RemoteRecipeDataColl>.Data.Recipes.FirstOrDefault(p => p.RecipeCode == code); | |||
if (/*SiemensDevice.IsConnected &&*/ !GVL_SmallStation.GetInstance.IsUseLocalRecipe) | |||
{ | |||
MessageNotify.GetInstance.ShowRunLog($"托盘1,配方{res.RecipeName},配料完成,数据反馈给西门子"); | |||
} | |||
else | |||
@@ -502,10 +522,9 @@ namespace BPASmartClient.FoodStationTest.Model | |||
} | |||
else | |||
{ | |||
//粉料仓下发配方 | |||
//粉料仓下发配方并配料。 | |||
if (/*GVL_SmallStation.GetInstance.IsUseWindSend &&*/ GVL_SmallStation.GetInstance.WindSendDosing == false /*&& GVL_SmallStation.GetInstance.Tray_AGVLogic[recipeNum] == 2*/) | |||
{ | |||
} | |||
else | |||
{ | |||
@@ -516,6 +535,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
} | |||
} | |||
} | |||
//上位机下发配方。并检测下发完成。 | |||
if (GVL_SmallStation.GetInstance.RecipeProcessStatus[recipeNum] == 0) | |||
{ | |||
GVL_SmallStation.GetInstance.RecipeStockBinDosing[recipeNum] = 0; | |||
@@ -525,6 +545,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
GVL_SmallStation.GetInstance.RecipeProcessStatus[recipeNum] = 1; | |||
MessageNotify.GetInstance.ShowRunLog($"托盘1,配方编号{code},配方号{recipeNum + 1},下发完成"); | |||
} | |||
//需要等待下位机检测确认正确接收到配方。 | |||
bool recipeReceviceFinish = HKDevice.HK_PLC_S7.Read<bool>("DB3.DBX4." + recipeNum).Content; | |||
if (recipeReceviceFinish && GVL_SmallStation.GetInstance.RecipeProcessStatus[recipeNum] == 1) | |||
{ | |||
@@ -533,11 +554,14 @@ namespace BPASmartClient.FoodStationTest.Model | |||
GVL_SmallStation.GetInstance.StockBinDosingIssue[recipeNum] = 0; | |||
MessageNotify.GetInstance.ShowRunLog($"托盘1,配方编号{code},配方号{recipeNum + 1},配方接收完成"); | |||
} | |||
//下面是配料流程。 | |||
if (GVL_SmallStation.GetInstance.RecipeProcessStatus[recipeNum] == 2) | |||
{ | |||
for (byte i = 1; i < 16; i++) | |||
//下面是味魔方配料。 | |||
for (byte i = 1; i <= Json<LocalPar>.Data.RawMaterialDeviceNum; i++) | |||
{ | |||
int indexArr = -1; | |||
//获取配方每个配方的三个桶的位置。 | |||
if (GVL_SmallStation.GetInstance.plcReadDataDB3.StockBinAllowIssue[i - 1]) | |||
{ | |||
switch (recipeNum) | |||
@@ -545,23 +569,29 @@ namespace BPASmartClient.FoodStationTest.Model | |||
case 0: | |||
indexArr = Array.FindIndex(GVL_SmallStation.GetInstance.plcReadDataDB3.Recipe1BarrelPosReserve.ToArray(), p => p == i); | |||
break; | |||
case 1: | |||
indexArr = Array.FindIndex(GVL_SmallStation.GetInstance.plcReadDataDB3.Recipe2BarrelPosReserve.ToArray(), p => p == i); | |||
break; | |||
case 2: | |||
indexArr = Array.FindIndex(GVL_SmallStation.GetInstance.plcReadDataDB3.Recipe3BarrelPosReserve.ToArray(), p => p == i); | |||
break; | |||
case 3: | |||
indexArr = Array.FindIndex(GVL_SmallStation.GetInstance.plcReadDataDB3.Recipe4BarrelPosReserve.ToArray(), p => p == i); | |||
break; | |||
case 4: | |||
indexArr = Array.FindIndex(GVL_SmallStation.GetInstance.plcReadDataDB3.Recipe5BarrelPosReserve.ToArray(), p => p == i); | |||
break; | |||
} | |||
if (indexArr >= 0 && GVL_SmallStation.GetInstance.StockBinDosingIssue[recipeNum].Get16bitValue((byte)i) == false) | |||
{ | |||
//查找每个料仓对应的重量。 | |||
int loc_index = Array.FindIndex(RemoteRecipes.ElementAt(index).RawMaterial.ToArray(), p => p.RawMaterialLocation == i); | |||
float weight = RemoteRecipes.ElementAt(index).RawMaterial.ElementAt(loc_index).RawMaterialWeight * 1000;//单位g转换kg | |||
//小于等于0代表这个料仓不需要配料。 | |||
if (weight <= 0) | |||
{ | |||
if (i >= 1 && i <= 8) | |||
@@ -577,6 +607,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
GVL_SmallStation.GetInstance.RecipeStockBinDosing[recipeNum] = GVL_SmallStation.GetInstance.RecipeStockBinDosing[recipeNum].SetBitValue((byte)i, false);//配料完成设备写成false | |||
GVL_SmallStation.GetInstance.StockBinDosingIssue[recipeNum] = GVL_SmallStation.GetInstance.StockBinDosingIssue[recipeNum].SetBitValue((byte)i, true);//配料完成设备写成false | |||
} | |||
//写入重量并开始配料 | |||
else | |||
{ | |||
if (loc_index >= 0) | |||
@@ -597,10 +628,10 @@ namespace BPASmartClient.FoodStationTest.Model | |||
} | |||
if ((DeviceInquire.GetInstance.GetDevice(i).deviceStatus.RunStatus == 3) && indexArr >= 0 && GVL_SmallStation.GetInstance.RecipeStockBinDosing[recipeNum].Get16bitValue((byte)i)) | |||
{ | |||
//配料完成处理。 | |||
int res = Array.FindIndex(RemoteRecipes.ElementAt(index).RawMaterial.ToArray(), p => p.RawMaterialLocation == i); | |||
if (res < 0) | |||
{ | |||
} | |||
else | |||
{ | |||
@@ -608,10 +639,12 @@ namespace BPASmartClient.FoodStationTest.Model | |||
RemoteRecipes.ElementAt(index).RawMaterial.ElementAt(res).Laying_Off_Weight = DeviceInquire.GetInstance.GetDevice(i).deviceStatus.NowWeightFeedback; | |||
bool info = DeviceInquire.GetInstance.GetDevice(i).StatusReset(); | |||
MessageNotify.GetInstance.ShowRunLog($"柔性味魔方,托盘1,配方:{recipeName},{i}号仓,配料完成,下料完成重量:{RemoteRecipes.ElementAt(index).RawMaterial.ElementAt(res).Laying_Off_Weight}"); | |||
//查找配料完成的味魔方的报警偏差限值。 | |||
float AlarmRange = Math.Abs(RemoteRecipes.ElementAt(index).RawMaterial.ElementAt(res).Laying_Off_Weight - RemoteRecipes.ElementAt(index).RawMaterial.ElementAt(res).RawMaterialWeight * 1000); | |||
int iIndex = Array.FindIndex(Json<DevicePar>.Data.deviceParModels.ToArray(), p => p.MaterialName == DeviceInquire.GetInstance.GetDevice(i).DeviceName); | |||
if (iIndex >= 0) | |||
{ | |||
//如果偏差过大则报警。 | |||
if (Math.Abs(Json<DevicePar>.Data.deviceParModels.ElementAt(iIndex).ErrorRange) < AlarmRange) | |||
{ | |||
HKDevice.HK_PLC_S7.Write("DB44.DBX3.0", true); | |||
@@ -622,6 +655,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
}); | |||
} | |||
} | |||
//对海科PLC写入味魔方配料完成。 | |||
if (i >= 1 && i <= 8) | |||
{ | |||
string commInfo = HKDevice.HK_PLC_S7.Write("DB4.DBX12." + (i - 1), true).IsSuccess.ToString(); | |||
@@ -638,10 +672,13 @@ namespace BPASmartClient.FoodStationTest.Model | |||
} | |||
} | |||
} | |||
//配方整体配料完成处理。 | |||
bool DosingComple = HKDevice.HK_PLC_S7.Read<bool>("DB3.DBX6." + recipeNum).Content; | |||
if ((RTrig.GetInstance("配方配料完成").Start(DosingComple)) || (GVL_SmallStation.GetInstance.StockBinDosingIssue[recipeNum] > 0 && DosingComple)) | |||
{ | |||
//配方制作完成数量+1 | |||
GVL_SmallStation.GetInstance.RecipeDosingCompleNum = GVL_SmallStation.GetInstance.RecipeDosingCompleNum + 1; | |||
GVL_SmallStation.GetInstance.StockBinDosingIssue[recipeNum] = 0; | |||
if (GVL_SmallStation.GetInstance.RecipeStockBinDosing[recipeNum] > 0) | |||
{ | |||
@@ -661,6 +698,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
} | |||
GVL_SmallStation.GetInstance.WindSendDosing = false; | |||
//移除配方。 | |||
App.Current.Dispatcher.Invoke(() => | |||
{ | |||
Json<RemoteRecipeDataColl>.Data.Recipes.Remove(res); | |||
@@ -689,6 +727,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// 料仓的位置和原料名称的对应 | |||
/// </summary> | |||
@@ -706,6 +745,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// PLC的DB3变量列表。初始化PLC读取DB块变量以及流程变量数据。 | |||
/// </summary> | |||
@@ -728,8 +768,6 @@ namespace BPASmartClient.FoodStationTest.Model | |||
} | |||
} | |||
foreach (PropertyInfo item in typeof(GVL_SmallStation).GetProperties()) | |||
{ | |||
if (Attribute.IsDefined(item, typeof(VarCommAttribute))) | |||
@@ -747,6 +785,7 @@ namespace BPASmartClient.FoodStationTest.Model | |||
} | |||
} | |||
} | |||
/// <summary> | |||
/// 注册需要用到的委托,主要是用于手动控制的。 | |||
/// </summary> | |||
@@ -951,8 +990,6 @@ namespace BPASmartClient.FoodStationTest.Model | |||
ActionManage.GetInstance.Register(new Action(() => { HKDevice.HK_PLC_S7.Write<bool>("DB5.DBX5.2", true); }), "StartAxis2Command", true); | |||
ActionManage.GetInstance.Register(new Action(() => { HKDevice.HK_PLC_S7.Write<bool>("DB5.DBX5.2", false); }), "StopAxis2Command", true); | |||
//将本地配方发送到西门子配方里,执行配料 | |||
ActionManage.GetInstance.Register(new Action<Object>((res) => | |||
{ | |||
@@ -1112,8 +1149,8 @@ namespace BPASmartClient.FoodStationTest.Model | |||
HKDevice.HK_PLC_S7.Write("DB4.DBB1", (byte)Value); | |||
} | |||
}), "RobotSetProgramNum", true); | |||
} | |||
/// <summary> | |||
/// 连接海科PLC,并开启重连线程。 | |||
/// </summary> | |||
@@ -1154,7 +1191,6 @@ namespace BPASmartClient.FoodStationTest.Model | |||
{ | |||
} | |||
Thread.Sleep(50); | |||
}), "设备连接", true); | |||
} | |||
@@ -1243,4 +1279,4 @@ namespace BPASmartClient.FoodStationTest.Model | |||
GVL_SmallStation.GetInstance.RawMaterialsNameCode.TryAdd("0060", "孜然油"); | |||
} | |||
} | |||
} | |||
} |
@@ -2,6 +2,9 @@ | |||
namespace BPASmartClient.FoodStationTest.Model | |||
{ | |||
/// <summary> | |||
/// 料仓报警信息。 | |||
/// </summary> | |||
public class AlarmInfo | |||
{ | |||
/// <summary> | |||
@@ -2,6 +2,9 @@ | |||
namespace BPASmartClient.FoodStationTest.Model | |||
{ | |||
/// <summary> | |||
/// 味魔方当前状态。 | |||
/// </summary> | |||
public class DeviceCurrentStatus : ObservableObject | |||
{ | |||
@@ -2,6 +2,9 @@ | |||
namespace BPASmartClient.FoodStationTest.Model | |||
{ | |||
/// <summary> | |||
/// 本地模拟配方集合。 | |||
/// </summary> | |||
internal class LocalRecipeDataColl | |||
{ | |||
public ObservableCollection<RemoteRecipeData> Recipes { get; set; } = new ObservableCollection<RemoteRecipeData>(); | |||
@@ -26,55 +26,6 @@ | |||
HorizontalAlignment="left" | |||
VerticalAlignment="Center" | |||
Orientation="Horizontal"> | |||
<Button | |||
Name="test1" | |||
Width="200" | |||
Height="40" | |||
Margin="5" | |||
Panel.ZIndex="0" | |||
Command="{Binding Test1Command}" | |||
Content="AGV送托盘完成" | |||
FontSize="20" | |||
Style="{StaticResource ImageButtonStyle}" | |||
Visibility="{Binding VisibilityBtn1}" /> | |||
<Button | |||
Name="test2" | |||
Width="200" | |||
Height="40" | |||
Margin="5" | |||
Panel.ZIndex="0" | |||
Command="{Binding Test2Command}" | |||
Content="粉料仓配料完成" | |||
FontSize="20" | |||
Style="{StaticResource ImageButtonStyle}" | |||
Visibility="{Binding VisibilityBtn2}" /> | |||
<Button | |||
Name="test3" | |||
Width="200" | |||
Height="40" | |||
Margin="5" | |||
Panel.ZIndex="0" | |||
Command="{Binding Test3Command}" | |||
Content="AGV取托盘完成" | |||
FontSize="20" | |||
Style="{StaticResource ImageButtonStyle}" | |||
Visibility="{Binding VisibilityBtn3}" /> | |||
<TextBlock | |||
Width="100" | |||
Margin="10" | |||
HorizontalAlignment="Center" | |||
VerticalAlignment="Center" | |||
FontSize="25" | |||
Foreground="#FF2AB2E7" /> | |||
<!--<Button | |||
Width="200" | |||
Height="40" | |||
Margin="5" | |||
Panel.ZIndex="0" | |||
Command="{Binding Test5Command}" | |||
Content="粉料仓提升到位" | |||
FontSize="20" | |||
Style="{StaticResource ImageButtonStyle}" />--> | |||
<Button | |||
Width="200" | |||
Height="40" | |||
@@ -151,13 +102,32 @@ | |||
</Grid.RowDefinitions> | |||
<StackPanel Grid.Column="1" Orientation="Vertical"> | |||
</StackPanel> | |||
<WrapPanel Grid.Row="0"> | |||
<StackPanel Orientation="Horizontal"> | |||
<TextBlock | |||
Margin="10,0,5,0" | |||
VerticalAlignment="Center" | |||
FontSize="25" | |||
Foreground="#FF2AB2E7" | |||
Text="海科PLC连接状态:" /> | |||
<TextBlock | |||
Margin="10" | |||
HorizontalAlignment="Center" | |||
VerticalAlignment="Center" | |||
FontSize="25" | |||
Foreground="#FF2AB2E7" | |||
Text="{Binding HKPlcIsConnect}" /> | |||
</StackPanel> | |||
<StackPanel Orientation="Horizontal"> | |||
<TextBlock | |||
Margin="10,0,5,0" | |||
VerticalAlignment="Center" | |||
FontSize="25" | |||
Foreground="#FF2AB2E7" | |||
Text="海科plc心跳:" /> | |||
Text="海科PLC心跳:" /> | |||
<TextBlock | |||
Margin="10" | |||
HorizontalAlignment="Center" | |||
@@ -166,22 +136,6 @@ | |||
Foreground="#FF2AB2E7" | |||
Text="{Binding Heartbeat}" /> | |||
</StackPanel> | |||
</StackPanel> | |||
<WrapPanel Grid.Row="0"> | |||
<TextBlock | |||
Margin="10,0,5,0" | |||
VerticalAlignment="Center" | |||
FontSize="25" | |||
Foreground="#FF2AB2E7" | |||
Text="海科plc连接状态:" /> | |||
<TextBlock | |||
Margin="10" | |||
HorizontalAlignment="Center" | |||
VerticalAlignment="Center" | |||
FontSize="25" | |||
Foreground="#FF2AB2E7" | |||
Text="{Binding HKPlcIsConnect}" /> | |||
</WrapPanel> | |||
<WrapPanel Grid.Row="2"> | |||
@@ -141,7 +141,7 @@ | |||
</Grid.RowDefinitions> | |||
<Grid Grid.Row="0"> | |||
<Grid.ColumnDefinitions> | |||
<ColumnDefinition Width="2*" /> | |||
<ColumnDefinition Width="2.5*" /> | |||
<ColumnDefinition Width="2*" /> | |||
<ColumnDefinition Width="2*" /> | |||
<ColumnDefinition Width="2*" /> | |||
@@ -189,7 +189,7 @@ | |||
<DataTemplate> | |||
<Grid x:Name="grb" Height="25"> | |||
<Grid.ColumnDefinitions> | |||
<ColumnDefinition Width="2*" /> | |||
<ColumnDefinition Width="2.5*" /> | |||
<ColumnDefinition Width="2*" /> | |||
<ColumnDefinition Width="2*" /> | |||
<ColumnDefinition Width="2*" /> | |||
@@ -20,54 +20,7 @@ namespace BPASmartClient.FoodStationTest.ViewModel | |||
public ManualFlowViewModel() | |||
{ | |||
time = GVL_SmallStation.GetInstance.Time; | |||
Test1Command = new RelayCommand(() => | |||
{ | |||
if (DateTime.Now.Subtract(GVL_SmallStation.GetInstance.LatestIssueRecipe).TotalSeconds <= 10) | |||
{ | |||
NoticeDemoViewModel.OpenMsg(EnumPromptType.Error, App.MainWindow, "提示", $"最后一次手动下发订单间隔不足10秒,请稍后再点击。"); | |||
return; | |||
} | |||
ActionManage.GetInstance.Send("PLCWrite", new HKDeviceWrite() { Address = "DB4.DBX8.0", PlcVarType = PlcVarType.Bool, Value = true }); | |||
//Thread.Sleep(200); | |||
//ActionManage.GetInstance.Send("PLCWrite", new HKDeviceWrite() { Address = "DB4.DBX8.0", PlcVarType = PlcVarType.Bool, Value = false }); | |||
//GVL_SmallStation.GetInstance.AGV_PutTray1Finish = true; | |||
MessageNotify.GetInstance.ShowUserLog("手动点击按钮,AGV送托盘完成"); | |||
VisibilityBtn1 = Visibility.Hidden; | |||
VisibilityBtn2 = Visibility.Visible; | |||
VisibilityBtn3 = Visibility.Hidden; | |||
NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"手动点击按钮,AGV送托盘完成"); | |||
}); | |||
Test2Command = new RelayCommand(() => | |||
{ | |||
ActionManage.GetInstance.Send("PLCWrite", new HKDeviceWrite() { Address = "DB4.DBX4.0", PlcVarType = PlcVarType.Bool, Value = true }); | |||
//Thread.Sleep(200); | |||
//ActionManage.GetInstance.Send("PLCWrite", new HKDeviceWrite() { Address = "DB4.DBX4.0", PlcVarType = PlcVarType.Bool, Value = false }); | |||
//GVL_SmallStation.GetInstance.WindSendDosingComple = true; | |||
MessageNotify.GetInstance.ShowUserLog("手动点击按钮,粉料仓配料完成"); | |||
VisibilityBtn1 = Visibility.Hidden; | |||
VisibilityBtn2 = Visibility.Hidden; | |||
VisibilityBtn3 = Visibility.Visible; | |||
NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"手动点击按钮,粉料仓配料完成"); | |||
}); | |||
Test3Command = new RelayCommand(() => | |||
{ | |||
ActionManage.GetInstance.Send("PLCWrite", new HKDeviceWrite() { Address = "DB4.DBX10.0", PlcVarType = PlcVarType.Bool, Value = true }); | |||
//Thread.Sleep(200); | |||
//ActionManage.GetInstance.Send("PLCWrite", new HKDeviceWrite() { Address = "DB4.DBX10.0", PlcVarType = PlcVarType.Bool, Value = false }); | |||
//GVL_SmallStation.GetInstance.AGV_GetTray1Finish = true; | |||
MessageNotify.GetInstance.ShowUserLog("手动点击按钮,AGV取托盘完成"); | |||
VisibilityBtn1 = Visibility.Visible; | |||
VisibilityBtn2 = Visibility.Hidden; | |||
VisibilityBtn3 = Visibility.Hidden; | |||
NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"手动点击按钮,AGV取托盘完成"); | |||
}); | |||
Test4Command = new RelayCommand(() => | |||
{ | |||
ActionManage.GetInstance.Send("PLCWrite", new HKDeviceWrite() { Address = "DB4.DBX1.5", PlcVarType = PlcVarType.Bool, Value = true }); | |||
@@ -75,16 +28,7 @@ namespace BPASmartClient.FoodStationTest.ViewModel | |||
MessageNotify.GetInstance.ShowUserLog("手动点击按钮,气缸收紧错位复位"); | |||
NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"手动点击按钮,气缸收紧错位复位"); | |||
}); | |||
//Test5Command = new RelayCommand(() => | |||
//{ | |||
// GVL_SmallStation.GetInstance.WindSendAllowAGVPutGet = true; | |||
// MessageNotify.GetInstance.ShowUserLog("手动点击按钮,粉料仓提升到位"); | |||
//}); | |||
Test6Command = new RelayCommand(() => | |||
{ | |||
ActionManage.GetInstance.Send("AGVPutTrayFinish"); | |||
MessageNotify.GetInstance.ShowUserLog("手动点击按钮,AGV放货架流程完成"); | |||
}); | |||
CLearRecipeInfo = new RelayCommand(() => | |||
{ | |||
App.Current.Dispatcher.Invoke(() => | |||
@@ -143,12 +87,7 @@ namespace BPASmartClient.FoodStationTest.ViewModel | |||
}); | |||
StockbinDosingCompleClear = new RelayCommand(() => | |||
{ | |||
//for (int i = 0; i < GVL_SmallStation.GetInstance.StockInDosingComple.Length; i++) | |||
//{ | |||
// GVL_SmallStation.GetInstance.StockInDosingComple[i] = false; | |||
//} | |||
//MessageNotify.GetInstance.ShowUserLog($"手动点击按钮,清除所有手动配料完成信号"); | |||
//NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"清除所有手动配料完成信号"); | |||
}); | |||
CancelRecipeCommand = new RelayCommand(() => | |||
{ | |||
@@ -297,12 +236,9 @@ namespace BPASmartClient.FoodStationTest.ViewModel | |||
}); | |||
HKPlcIsConnect = ProcessControl.GetInstance.HKDevice.IsConnected; | |||
} | |||
public RelayCommand Test1Command { get; set; } | |||
public RelayCommand Test2Command { get; set; } | |||
public RelayCommand Test3Command { get; set; } | |||
public RelayCommand Test4Command { get; set; } | |||
public RelayCommand Test5Command { get; set; } | |||
public RelayCommand Test6Command { get; set; } | |||
public RelayCommand TimeSet { get; set; } | |||
public RelayCommand CompletedNumResetCommand { get; set; } | |||
public static bool Heartbeat { get { return _mHeartbeat; } set { _mHeartbeat = value; OnStaticPropertyChanged(); } } | |||
@@ -364,16 +300,9 @@ namespace BPASmartClient.FoodStationTest.ViewModel | |||
private static int _RecipeDosingCompleNum { get; set; } | |||
public static int RecipeDosingCompleNum { get { return _RecipeDosingCompleNum; } set { _RecipeDosingCompleNum = value; OnStaticPropertyChanged(); } } | |||
public static Visibility VisibilityBtn1 { get { return _VisibilityBtn1; } set { _VisibilityBtn1 = value; OnStaticPropertyChanged(); } } | |||
private static Visibility _VisibilityBtn1 = Visibility.Visible; | |||
public static Visibility VisibilityBtn2 { get { return _VisibilityBtn2; } set { _VisibilityBtn2 = value; OnStaticPropertyChanged(); } } | |||
private static Visibility _VisibilityBtn2 = Visibility.Hidden; | |||
public static Visibility VisibilityBtn3 { get { return _VisibilityBtn3; } set { _VisibilityBtn3 = value; OnStaticPropertyChanged(); } } | |||
public string CancelRecipeCode { get { return _CancelRecipeCode; } set { _CancelRecipeCode = value; OnPropertyChanged(); } } | |||
public string _CancelRecipeCode { get; set; } | |||
private static Visibility _VisibilityBtn3 = Visibility.Hidden; | |||
} | |||
@@ -214,6 +214,13 @@ namespace BPASmartClient.JXJFoodBigStation | |||
AssemblyName = "BPASmartClient.CustomResource", | |||
ToggleWindowPath = "Pages.View.PasswordChangeView" | |||
}); | |||
UserManager.Add(new SubMenumodel() | |||
{ | |||
SubMenuName = "用户管理", | |||
SubMenuPermission = new Permission[] { Permission.管理员 }, | |||
AssemblyName = "BPASmartClient.CustomResource", | |||
ToggleWindowPath = "Pages.View.UserManagerView" | |||
}); | |||
MenuManage.GetInstance.menuModels.Add(new MenuModel() | |||
{ | |||
@@ -104,11 +104,11 @@ | |||
</Grid> | |||
<Grid Grid.Column="1" Margin="5"> | |||
<TextBox | |||
Width="200" | |||
HorizontalAlignment="Center" | |||
VerticalAlignment="Center" | |||
HorizontalContentAlignment="Center" | |||
VerticalContentAlignment="Center" | |||
Width="200" | |||
FontSize="16" | |||
Text="{Binding RawMaterialName}" /> | |||
</Grid> | |||
@@ -174,7 +174,7 @@ | |||
VerticalAlignment="Center" | |||
FontSize="25" | |||
Foreground="#FF2AB2E7" | |||
Text="plc心跳:" /> | |||
Text="PLC心跳:" /> | |||
<TextBlock | |||
Margin="10" | |||
HorizontalAlignment="Center" | |||
@@ -108,7 +108,7 @@ | |||
Content="PLC配方清零" | |||
FontSize="20" | |||
Style="{StaticResource ImageButtonStyle}" /> | |||
<WrapPanel Margin="400,0"> | |||
<WrapPanel Margin="10,0"> | |||
<TextBlock | |||
Margin="10,0,5,0" | |||
VerticalAlignment="Center" | |||
@@ -116,8 +116,7 @@ | |||
Foreground="#FF2AB2E7" | |||
Text="订单号:" /> | |||
<TextBox | |||
Width="300" | |||
Margin="5" | |||
Width="241" | |||
VerticalAlignment="Center" | |||
FontSize="24" | |||
Text="{Binding CancelRecipeCode}" /> | |||
@@ -157,7 +156,7 @@ | |||
VerticalAlignment="Center" | |||
FontSize="25" | |||
Foreground="#FF2AB2E7" | |||
Text="海科plc心跳:" /> | |||
Text="海科PLC心跳:" /> | |||
<TextBlock | |||
Margin="10" | |||
HorizontalAlignment="Center" | |||
@@ -173,7 +172,7 @@ | |||
VerticalAlignment="Center" | |||
FontSize="25" | |||
Foreground="#FF2AB2E7" | |||
Text="西门子 连接状态:" /> | |||
Text="西门子PLC连接状态:" /> | |||
<TextBlock | |||
Margin="10" | |||
HorizontalAlignment="Center" | |||
@@ -186,7 +185,7 @@ | |||
VerticalAlignment="Center" | |||
FontSize="25" | |||
Foreground="#FF2AB2E7" | |||
Text="海科plc连接状态:" /> | |||
Text="海科PLC连接状态:" /> | |||
<TextBlock | |||
Margin="10" | |||
HorizontalAlignment="Center" | |||
@@ -199,7 +198,7 @@ | |||
VerticalAlignment="Center" | |||
FontSize="25" | |||
Foreground="#FF2AB2E7" | |||
Text="风送plc连接状态:" /> | |||
Text="风送PLC连接状态:" /> | |||
<TextBlock | |||
Margin="10" | |||
HorizontalAlignment="Center" | |||
@@ -246,9 +245,8 @@ | |||
Foreground="#FF2AB2E7" | |||
Text="ms" /> | |||
<Button | |||
Width="100" | |||
Width="179" | |||
Height="40" | |||
Margin="5,0,5,0" | |||
Panel.ZIndex="0" | |||
Command="{Binding TimeSet}" | |||
Content="设置" | |||
@@ -449,7 +447,7 @@ | |||
Foreground="#FF2AB2E7" | |||
Text="料仓号:" /> | |||
<TextBox | |||
Width="50" | |||
Width="90" | |||
Margin="10" | |||
HorizontalAlignment="Center" | |||
VerticalAlignment="Center" | |||
@@ -497,7 +495,7 @@ | |||
Margin="5,0,5,0" | |||
Panel.ZIndex="0" | |||
Command="{Binding CompletedNumResetCommand}" | |||
Content="完成数目清零" | |||
Content="配方完成数目清零" | |||
FontSize="20" | |||
Style="{StaticResource ImageButtonStyle}" /> | |||
</WrapPanel> | |||
@@ -1,12 +1,14 @@ | |||
<UserControl x:Class="BPASmartClient.JXJFoodSmallStation.View.RobotView" | |||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | |||
xmlns:pry="clr-namespace:BPASmartClient.CustomResource.UserControls;assembly=BPASmartClient.CustomResource" | |||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | |||
xmlns:vm="clr-namespace:BPASmartClient.JXJFoodSmallStation.ViewModel" | |||
mc:Ignorable="d" | |||
d:DesignHeight="1080" d:DesignWidth="1920"> | |||
<UserControl | |||
x:Class="BPASmartClient.JXJFoodSmallStation.View.RobotView" | |||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | |||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | |||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | |||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | |||
xmlns:pry="clr-namespace:BPASmartClient.CustomResource.UserControls;assembly=BPASmartClient.CustomResource" | |||
xmlns:vm="clr-namespace:BPASmartClient.JXJFoodSmallStation.ViewModel" | |||
d:DesignHeight="1080" | |||
d:DesignWidth="1920" | |||
mc:Ignorable="d"> | |||
<UserControl.Resources> | |||
<Style x:Key="radioButtonStyle" TargetType="RadioButton"> | |||
<Setter Property="Template"> | |||
@@ -45,45 +47,101 @@ | |||
</Style> | |||
</UserControl.Resources> | |||
<UserControl.DataContext> | |||
<vm:RobotViewModel/> | |||
<vm:RobotViewModel /> | |||
</UserControl.DataContext> | |||
<Grid Margin="10"> | |||
<Grid.ColumnDefinitions> | |||
<ColumnDefinition Width="4*"/> | |||
<ColumnDefinition Width="4*"/> | |||
<ColumnDefinition Width="4*"/> | |||
<ColumnDefinition Width="4*" /> | |||
<ColumnDefinition Width="4*" /> | |||
<ColumnDefinition Width="4*" /> | |||
</Grid.ColumnDefinitions> | |||
<!--#region 表格标题栏设置--> | |||
<Grid> | |||
<StackPanel> | |||
<WrapPanel> | |||
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="机器人自动运行模式:"></TextBlock> | |||
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="{Binding RobotIsAutoMode}"></TextBlock> | |||
<TextBlock | |||
Margin="5" | |||
FontSize="22" | |||
Foreground="Aqua" | |||
Text="机器人自动运行模式:" /> | |||
<TextBlock | |||
Margin="5" | |||
FontSize="22" | |||
Foreground="Aqua" | |||
Text="{Binding RobotIsAutoMode}" /> | |||
</WrapPanel> | |||
<WrapPanel> | |||
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="机器人正在自动运行:"></TextBlock> | |||
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="{Binding RobotIsAutoRun}"></TextBlock> | |||
<TextBlock | |||
Margin="5" | |||
FontSize="22" | |||
Foreground="Aqua" | |||
Text="机器人正在自动运行:" /> | |||
<TextBlock | |||
Margin="5" | |||
FontSize="22" | |||
Foreground="Aqua" | |||
Text="{Binding RobotIsAutoRun}" /> | |||
</WrapPanel> | |||
<WrapPanel> | |||
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="机器人停止状态:"></TextBlock> | |||
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="{Binding RobotIsStop}"></TextBlock> | |||
<TextBlock | |||
Margin="5" | |||
FontSize="22" | |||
Foreground="Aqua" | |||
Text="机器人停止状态:" /> | |||
<TextBlock | |||
Margin="49,5" | |||
FontSize="22" | |||
Foreground="Aqua" | |||
Text="{Binding RobotIsStop}" /> | |||
</WrapPanel> | |||
<WrapPanel> | |||
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="机器人运行正常:"></TextBlock> | |||
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="{Binding RobotIsRun}"></TextBlock> | |||
<TextBlock | |||
Margin="5" | |||
FontSize="22" | |||
Foreground="Aqua" | |||
Text="机器人运行正常:" /> | |||
<TextBlock | |||
Margin="49,5" | |||
FontSize="22" | |||
Foreground="Aqua" | |||
Text="{Binding RobotIsRun}" /> | |||
</WrapPanel> | |||
<WrapPanel> | |||
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="机器人运行故障:"></TextBlock> | |||
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="{Binding RobotIsAlarm}"></TextBlock> | |||
<TextBlock | |||
Margin="5" | |||
FontSize="22" | |||
Foreground="Aqua" | |||
Text="机器人运行故障:" /> | |||
<TextBlock | |||
Margin="49,5" | |||
FontSize="22" | |||
Foreground="Aqua" | |||
Text="{Binding RobotIsAlarm}" /> | |||
</WrapPanel> | |||
<WrapPanel> | |||
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="机器人在Home点:"></TextBlock> | |||
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="{Binding RobotIsHomed}"></TextBlock> | |||
<TextBlock | |||
Margin="5" | |||
FontSize="22" | |||
Foreground="Aqua" | |||
Text="机器人在Home点:" /> | |||
<TextBlock | |||
Margin="30,5" | |||
FontSize="22" | |||
Foreground="Aqua" | |||
Text="{Binding RobotIsHomed}" /> | |||
</WrapPanel> | |||
<WrapPanel> | |||
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="机器人运行的程序号:"></TextBlock> | |||
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="{Binding IsRunProgramNum}"></TextBlock> | |||
<TextBlock | |||
Margin="5" | |||
FontSize="22" | |||
Foreground="Aqua" | |||
Text="机器人运行的程序号:" /> | |||
<TextBlock | |||
Margin="5" | |||
FontSize="22" | |||
Foreground="Aqua" | |||
Text="{Binding IsRunProgramNum}" /> | |||
</WrapPanel> | |||
<!--<WrapPanel> | |||
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="抓空桶完成:"></TextBlock> | |||
@@ -105,37 +163,37 @@ | |||
</Grid> | |||
<Grid Grid.Column="1"> | |||
<Grid.RowDefinitions> | |||
<RowDefinition Height="1*"></RowDefinition> | |||
<RowDefinition Height="7*"></RowDefinition> | |||
<RowDefinition Height="1*" /> | |||
<RowDefinition Height="7*" /> | |||
</Grid.RowDefinitions> | |||
<Grid> | |||
<Grid.ColumnDefinitions> | |||
<ColumnDefinition></ColumnDefinition> | |||
<ColumnDefinition></ColumnDefinition> | |||
<ColumnDefinition></ColumnDefinition> | |||
<ColumnDefinition></ColumnDefinition> | |||
<ColumnDefinition /> | |||
<ColumnDefinition /> | |||
<ColumnDefinition /> | |||
<ColumnDefinition /> | |||
</Grid.ColumnDefinitions> | |||
<Button | |||
Margin="20,15" | |||
Background="LightGreen" | |||
Command="{Binding SystemStart}" | |||
Content="启动" | |||
FontSize="40" | |||
Background="LightGreen"></Button> | |||
FontSize="40" /> | |||
<Button | |||
Grid.Column="1" | |||
Margin="20,15" | |||
Background="OrangeRed" | |||
Command="{Binding SystemStop}" | |||
Content="停止" | |||
FontSize="40" | |||
Background="OrangeRed"></Button> | |||
FontSize="40" /> | |||
<Button | |||
Grid.Column="2" | |||
Grid.ColumnSpan="2" | |||
Margin="20,15" | |||
Background="DodgerBlue" | |||
Command="{Binding EStopReset}" | |||
Content="急停复位" | |||
FontSize="40" | |||
Background="DodgerBlue"></Button> | |||
FontSize="40" /> | |||
</Grid> | |||
</Grid> | |||
<!--<Grid Grid.Column="2"> | |||
@@ -190,7 +248,8 @@ | |||
FontSize="32" | |||
Style="{StaticResource ImageButtonStyle}"></Button> | |||
</Grid> | |||
--><!--<ListView | |||
--> | |||
<!--<ListView | |||
Grid.Row="1" | |||
Background="Transparent" | |||
BorderBrush="#00BEFA" | |||
@@ -264,7 +323,8 @@ | |||
</Grid> | |||
</DataTemplate> | |||
</ListView.ItemTemplate> | |||
</ListView>--><!-- | |||
</ListView>--> | |||
<!-- | |||
<Grid Grid.Row="1" Visibility="Hidden"> | |||
<Grid.ColumnDefinitions> | |||
<ColumnDefinition></ColumnDefinition> | |||
@@ -165,6 +165,7 @@ | |||
Content="西门子设备连接" | |||
FontFamily="楷体" | |||
FontSize="20" | |||
VerticalContentAlignment="Center" | |||
Foreground="Aqua" | |||
IsChecked="{Binding SiemensConnect}" /> | |||
<CheckBox | |||
@@ -173,6 +174,7 @@ | |||
Content="粉料仓设备连接" | |||
FontFamily="楷体" | |||
FontSize="20" | |||
VerticalContentAlignment="Center" | |||
Foreground="Aqua" | |||
IsChecked="{Binding WindSendConnect}" /> | |||
<CheckBox | |||
@@ -181,6 +183,7 @@ | |||
Content="小料站产线PLC设备连接" | |||
FontFamily="楷体" | |||
FontSize="20" | |||
VerticalContentAlignment="Center" | |||
Foreground="Aqua" | |||
IsChecked="{Binding HKPlcConnect}" /> | |||
@@ -190,6 +193,7 @@ | |||
VerticalAlignment="Center" | |||
Content="屏蔽小料仓数量读取报警" | |||
FontFamily="楷体" | |||
VerticalContentAlignment="Center" | |||
FontSize="20" | |||
Foreground="Aqua" | |||
IsChecked="{Binding ShieldStockbinAlarm}" /> | |||
@@ -276,7 +280,7 @@ | |||
Text="伺服1速度(进桶侧)" /> | |||
<TextBox | |||
Width="50" | |||
Margin="10" | |||
Margin="33,10" | |||
FontSize="16" | |||
Text="{Binding Axis1Speed}" /> | |||
<TextBlock | |||
@@ -295,7 +299,7 @@ | |||
Text="伺服2速度(出桶侧)" /> | |||
<TextBox | |||
Width="50" | |||
Margin="10" | |||
Margin="33,10" | |||
FontSize="16" | |||
Text="{Binding Axis2Speed}" /> | |||
<TextBlock | |||