Browse Source

1. 大料站新增用户管理界面,修改参数显示样式。2. 小料站修改参数显示样式。

master
ZhaoGang 1 year ago
parent
commit
47097ed096
18 changed files with 275 additions and 225 deletions
  1. +21
    -1
      BPASmartClient.FoodStationTest/Model/GVL/PlcInfos.cs
  2. +6
    -0
      BPASmartClient.FoodStationTest/Model/GVL/VarCommAttribute.cs
  3. +0
    -0
      BPASmartClient.FoodStationTest/Model/GVL/VarMonitor.cs
  4. +24
    -2
      BPASmartClient.FoodStationTest/Model/Par/ConnectParMode.cs
  5. +6
    -1
      BPASmartClient.FoodStationTest/Model/Par/LocaPar.cs
  6. +57
    -21
      BPASmartClient.FoodStationTest/Model/ProcessControl.cs
  7. +3
    -0
      BPASmartClient.FoodStationTest/Model/RawMaterial/AlarmInfo.cs
  8. +3
    -0
      BPASmartClient.FoodStationTest/Model/RawMaterial/DeviceCurrentStatus.cs
  9. +3
    -0
      BPASmartClient.FoodStationTest/Model/Recipe/LocalRecipeDataColl.cs
  10. +20
    -66
      BPASmartClient.FoodStationTest/View/ManualFlowView.xaml
  11. +2
    -2
      BPASmartClient.FoodStationTest/View/RecipeInfosView.xaml
  12. +5
    -76
      BPASmartClient.FoodStationTest/ViewModel/ManualFlowViewModel.cs
  13. +7
    -0
      BPASmartClient.JXJFoodBigStation/App.xaml.cs
  14. +1
    -1
      BPASmartClient.JXJFoodBigStation/View/BomOfMaterialView.xaml
  15. +1
    -1
      BPASmartClient.JXJFoodBigStation/View/ManualFlowView.xaml
  16. +9
    -11
      BPASmartClient.JXJFoodSmallStation/View/ManualFlowView.xaml
  17. +101
    -41
      BPASmartClient.JXJFoodSmallStation/View/RobotView.xaml
  18. +6
    -2
      BPASmartClient.JXJFoodSmallStation/View/SystemParView.xaml

+ 21
- 1
BPASmartClient.FoodStationTest/Model/GVL/PlcInfos.cs View File

@@ -2,19 +2,39 @@


namespace BPASmartClient.FoodStationTest.Model.GVL namespace BPASmartClient.FoodStationTest.Model.GVL
{ {
/// <summary>
/// PLC变量信息
/// </summary>
public class PlcInfos : ObservableObject public class PlcInfos : ObservableObject
{ {
/// <summary>
/// 变量序号
/// </summary>
public int Count { get { return _Count; } set { _Count = value; OnPropertyChanged(); } } public int Count { get { return _Count; } set { _Count = value; OnPropertyChanged(); } }
private int _Count { get; set; } private int _Count { get; set; }

/// <summary>
/// 变量名称
/// </summary>
public string Name { get { return _Name; } set { _Name = value; OnPropertyChanged(); } } public string Name { get { return _Name; } set { _Name = value; OnPropertyChanged(); } }
private string _Name { get; set; } private string _Name { get; set; }
/// <summary>
/// 变量地址
/// </summary>
public string Address { get { return _Address; } set { _Address = value; OnPropertyChanged(); } } public string Address { get { return _Address; } set { _Address = value; OnPropertyChanged(); } }
private string _Address { get; set; } private string _Address { get; set; }
/// <summary>
/// 变量类型
/// </summary>
public string Type { get { return _Type; } set { _Type = value; OnPropertyChanged(); } } public string Type { get { return _Type; } set { _Type = value; OnPropertyChanged(); } }
private string _Type { get; set; } private string _Type { get; set; }
/// <summary>
/// 变量描述
/// </summary>
public string Describe { get { return _Describe; } set { _Describe = value; OnPropertyChanged(); } } public string Describe { get { return _Describe; } set { _Describe = value; OnPropertyChanged(); } }
private string _Describe { get; set; } private string _Describe { get; set; }
/// <summary>
/// 变量值
/// </summary>
public string Value { get { return _Value; } set { _Value = value; OnPropertyChanged(); } } public string Value { get { return _Value; } set { _Value = value; OnPropertyChanged(); } }
private string _Value { get; set; } private string _Value { get; set; }




+ 6
- 0
BPASmartClient.FoodStationTest/Model/GVL/VarCommAttribute.cs View File

@@ -10,7 +10,13 @@ namespace BPASmartClient.FoodStationTest.Model.GVL
Address = address; Address = address;
Describe = des; Describe = des;
} }
/// <summary>
/// 变量信息描述。
/// </summary>
public string Describe { get; set; } public string Describe { get; set; }
/// <summary>
/// 变量地址
/// </summary>
public string Address { get; set; } public string Address { get; set; }
} }
} }

BPASmartClient.FoodStationTest/Model/VarMonitor.cs → BPASmartClient.FoodStationTest/Model/GVL/VarMonitor.cs View File


+ 24
- 2
BPASmartClient.FoodStationTest/Model/Par/ConnectParMode.cs View File

@@ -2,23 +2,45 @@


namespace BPASmartClient.FoodStationTest.Model.Par namespace BPASmartClient.FoodStationTest.Model.Par
{ {
/// <summary>
/// 连接参数设置。
/// </summary>
public class ConnectParMode : ObservableObject public class ConnectParMode : ObservableObject
{ {
/// <summary>
/// 海科PLC是否连接
/// </summary>
public bool HKPlcConnect { get { return _mHKPlcConnect; } set { _mHKPlcConnect = value; OnPropertyChanged(); } } public bool HKPlcConnect { get { return _mHKPlcConnect; } set { _mHKPlcConnect = value; OnPropertyChanged(); } }
private bool _mHKPlcConnect; private bool _mHKPlcConnect;
/// <summary>
/// 是否屏蔽料仓报警
/// </summary>
public bool ShieldStockbinAlarm { get { return _mShieldStockbinAlarm; } set { _mShieldStockbinAlarm = value; OnPropertyChanged(); } } public bool ShieldStockbinAlarm { get { return _mShieldStockbinAlarm; } set { _mShieldStockbinAlarm = value; OnPropertyChanged(); } }
private bool _mShieldStockbinAlarm; private bool _mShieldStockbinAlarm;



/// <summary>
/// 进桶侧调速电机速度
/// </summary>
public short AxisLoadSpeed { get { return _mAxisLoadSpeed; } set { _mAxisLoadSpeed = value; OnPropertyChanged(); } } public short AxisLoadSpeed { get { return _mAxisLoadSpeed; } set { _mAxisLoadSpeed = value; OnPropertyChanged(); } }
private short _mAxisLoadSpeed; private short _mAxisLoadSpeed;
/// <summary>
/// 过度侧调速电机速度
/// </summary>
public short AxisMidSpeed { get { return _mAxisMidSpeed; } set { _mAxisMidSpeed = value; OnPropertyChanged(); } } public short AxisMidSpeed { get { return _mAxisMidSpeed; } set { _mAxisMidSpeed = value; OnPropertyChanged(); } }
private short _mAxisMidSpeed; private short _mAxisMidSpeed;
/// <summary>
/// 出桶侧调速电机速度
/// </summary>
public short AxisUnLoadSpeed { get { return _mAxisUnLoadSpeed; } set { _mAxisUnLoadSpeed = value; OnPropertyChanged(); } } public short AxisUnLoadSpeed { get { return _mAxisUnLoadSpeed; } set { _mAxisUnLoadSpeed = value; OnPropertyChanged(); } }
private short _mAxisUnLoadSpeed; private short _mAxisUnLoadSpeed;
/// <summary>
/// 进桶侧伺服电机速度
/// </summary>
public float Axis1Speed { get { return _mAxis1Speed; } set { _mAxis1Speed = value; OnPropertyChanged(); } } public float Axis1Speed { get { return _mAxis1Speed; } set { _mAxis1Speed = value; OnPropertyChanged(); } }
private float _mAxis1Speed; private float _mAxis1Speed;
/// <summary>
/// 出桶侧伺服电机速度
/// </summary>
public float Axis2Speed { get { return _mAxis2Speed; } set { _mAxis2Speed = value; OnPropertyChanged(); } } public float Axis2Speed { get { return _mAxis2Speed; } set { _mAxis2Speed = value; OnPropertyChanged(); } }
private float _mAxis2Speed; private float _mAxis2Speed;
} }


+ 6
- 1
BPASmartClient.FoodStationTest/Model/Par/LocaPar.cs View File

@@ -4,6 +4,9 @@ namespace BPASmartClient.FoodStationTest.Model
{ {
public class LocalPar public class LocalPar
{ {
/// <summary>
/// 本地模拟配方列表。
/// </summary>
public ObservableCollection<RecipeModel> Recipes { get; set; } = new ObservableCollection<RecipeModel>(); public ObservableCollection<RecipeModel> Recipes { get; set; } = new ObservableCollection<RecipeModel>();


/// <summary> /// <summary>
@@ -15,7 +18,9 @@ namespace BPASmartClient.FoodStationTest.Model
/// 味魔方数量,每个项目应该固定的。 /// 味魔方数量,每个项目应该固定的。
/// </summary> /// </summary>
public int RawMaterialDeviceNum { get; } = 6; public int RawMaterialDeviceNum { get; } = 6;

/// <summary>
/// 海科PLC的IP地址。
/// </summary>
public string HK_PLC_IP { get; } public string HK_PLC_IP { get; }
} }
} }

+ 57
- 21
BPASmartClient.FoodStationTest/Model/ProcessControl.cs View File

@@ -8,8 +8,8 @@ using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Configuration;
using System.Linq; using System.Linq;
using System.Printing;
using System.Reflection; using System.Reflection;
using System.Threading; using System.Threading;


@@ -17,31 +17,34 @@ namespace BPASmartClient.FoodStationTest.Model
{ {
public class ProcessControl public class ProcessControl
{ {
private volatile static ProcessControl _Instance;
private static volatile ProcessControl _Instance;
public static ProcessControl GetInstance => _Instance ?? (_Instance = new ProcessControl()); public static ProcessControl GetInstance => _Instance ?? (_Instance = new ProcessControl());
private ProcessControl() { }

private ProcessControl()
{ }


/// <summary> /// <summary>
/// 配方数据 /// 配方数据
/// </summary> /// </summary>
public ObservableCollection<RemoteRecipeData> RemoteRecipes = new ObservableCollection<RemoteRecipeData>(); public ObservableCollection<RemoteRecipeData> RemoteRecipes = new ObservableCollection<RemoteRecipeData>();

/// <summary> /// <summary>
/// 原料的名称和料仓的位置对应 /// 原料的名称和料仓的位置对应
/// </summary> /// </summary>
public Dictionary<string, short> RawMaterialsNamePos = new Dictionary<string, short>(); public Dictionary<string, short> RawMaterialsNamePos = new Dictionary<string, short>();

public ObservableCollection<RawMaterialStockBin> RawMaterialsInfo => Json<DevicePar>.Data.rawMaterialStockBin; public ObservableCollection<RawMaterialStockBin> RawMaterialsInfo => Json<DevicePar>.Data.rawMaterialStockBin;

/// <summary> /// <summary>
/// 配方队列 /// 配方队列
/// </summary> /// </summary>
public ConcurrentQueue<string> RecipeQueueTray1 = new ConcurrentQueue<string>(); public ConcurrentQueue<string> RecipeQueueTray1 = new ConcurrentQueue<string>();



/// <summary> /// <summary>
/// 物料集合 /// 物料集合
/// </summary> /// </summary>
public Dictionary<int, ConcurrentQueue<string>> RecipeQueueTray { get; set; } = new Dictionary<int, ConcurrentQueue<string>>(); public Dictionary<int, ConcurrentQueue<string>> RecipeQueueTray { get; set; } = new Dictionary<int, ConcurrentQueue<string>>();



public HKDeviceStatus HKDevice = new HKDeviceStatus(); public HKDeviceStatus HKDevice = new HKDeviceStatus();


public ObservableCollection<PlcInfos> CommData { get; set; } = new ObservableCollection<PlcInfos>(); public ObservableCollection<PlcInfos> CommData { get; set; } = new ObservableCollection<PlcInfos>();
@@ -49,8 +52,7 @@ namespace BPASmartClient.FoodStationTest.Model


public DateTime StockBinAlarmTime = DateTime.Now; 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() public void Init()
{ {
@@ -115,6 +117,7 @@ namespace BPASmartClient.FoodStationTest.Model
Thread.Sleep(10); Thread.Sleep(10);
}), "海科PLC实时数据", true); }), "海科PLC实时数据", true);
} }

/// <summary> /// <summary>
/// 气缸的传感器值 /// 气缸的传感器值
/// </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[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气缸 GVL_SmallStation.GetInstance.Cylinder_JackInfo[27] = HKDevice.HK_PLC_S7.Read<bool>("DB5.DBX4.5").Content;//托盘2_2气缸
} }

/// <summary> /// <summary>
/// DB块的变量实时值 /// DB块的变量实时值
/// </summary> /// </summary>
@@ -198,6 +202,7 @@ namespace BPASmartClient.FoodStationTest.Model
} }
} }
} }

/// <summary> /// <summary>
/// 小料站和西门子PLC之间的实时数据 /// 小料站和西门子PLC之间的实时数据
/// </summary> /// </summary>
@@ -235,6 +240,7 @@ namespace BPASmartClient.FoodStationTest.Model
GVL_SmallStation.GetInstance.RobotProgramNum = HKDevice.HK_PLC_S7.Read<byte>("DB3.DBB1").Content; GVL_SmallStation.GetInstance.RobotProgramNum = HKDevice.HK_PLC_S7.Read<byte>("DB3.DBB1").Content;
} }
} }

public void CancelOrder() public void CancelOrder()
{ {
if (GVL_SmallStation.GetInstance.Order_Cancel) //订单取消 if (GVL_SmallStation.GetInstance.Order_Cancel) //订单取消
@@ -289,6 +295,7 @@ namespace BPASmartClient.FoodStationTest.Model
GVL_SmallStation.GetInstance.OrderCancelStep = 3; GVL_SmallStation.GetInstance.OrderCancelStep = 3;
} }
break; break;

case 2: case 2:
if (HKDevice.HK_PLC_S7.Read<bool>("DB3.DBX42." + index1).Content) if (HKDevice.HK_PLC_S7.Read<bool>("DB3.DBX42." + index1).Content)
{ {
@@ -299,10 +306,12 @@ namespace BPASmartClient.FoodStationTest.Model
} }
} }
break; break;

case 3: case 3:
// SiemensDevice.Siemens_PLC_S7.Write("DB2201.DBX450.1", true); // SiemensDevice.Siemens_PLC_S7.Write("DB2201.DBX450.1", true);
GVL_SmallStation.GetInstance.OrderCancelStep = 4; GVL_SmallStation.GetInstance.OrderCancelStep = 4;
break; break;

case 4: case 4:


// SiemensDevice.Siemens_PLC_S7.Write("DB2201.DBX450.1", false); // SiemensDevice.Siemens_PLC_S7.Write("DB2201.DBX450.1", false);
@@ -310,6 +319,7 @@ namespace BPASmartClient.FoodStationTest.Model
MessageNotify.GetInstance.ShowRunLog($"队列1,西门子取消订单完成,订单号:{code}"); MessageNotify.GetInstance.ShowRunLog($"队列1,西门子取消订单完成,订单号:{code}");


break; break;

case 9: case 9:
App.Current.Dispatcher.Invoke(() => App.Current.Dispatcher.Invoke(() =>
{ {
@@ -321,15 +331,18 @@ namespace BPASmartClient.FoodStationTest.Model
GVL_SmallStation.GetInstance.Order_CancelRecipeCode = ""; GVL_SmallStation.GetInstance.Order_CancelRecipeCode = "";
GVL_SmallStation.GetInstance.OrderCancelStep = 0; GVL_SmallStation.GetInstance.OrderCancelStep = 0;
break; break;

case 20: case 20:
GVL_SmallStation.GetInstance.OrderCancelStep = 21; GVL_SmallStation.GetInstance.OrderCancelStep = 21;
break; break;

case 21: case 21:


GVL_SmallStation.GetInstance.OrderCancelStep = 29; GVL_SmallStation.GetInstance.OrderCancelStep = 29;
MessageNotify.GetInstance.ShowRunLog($"队列1,西门子取消订单完成,订单号:{code}"); MessageNotify.GetInstance.ShowRunLog($"队列1,西门子取消订单完成,订单号:{code}");


break; break;

case 29: case 29:
App.Current.Dispatcher.Invoke(() => App.Current.Dispatcher.Invoke(() =>
{ {
@@ -345,12 +358,14 @@ namespace BPASmartClient.FoodStationTest.Model
case 30: case 30:
GVL_SmallStation.GetInstance.OrderCancelStep = 31; GVL_SmallStation.GetInstance.OrderCancelStep = 31;
break; break;

case 31: case 31:


GVL_SmallStation.GetInstance.OrderCancelStep = 39; GVL_SmallStation.GetInstance.OrderCancelStep = 39;
MessageNotify.GetInstance.ShowRunLog($"西门子取消订单完成,订单号:{code}"); MessageNotify.GetInstance.ShowRunLog($"西门子取消订单完成,订单号:{code}");


break; break;

case 39: case 39:
GVL_SmallStation.GetInstance.Order_Cancel = false; GVL_SmallStation.GetInstance.Order_Cancel = false;
GVL_SmallStation.GetInstance.Order_CancelRecipeCode = ""; GVL_SmallStation.GetInstance.Order_CancelRecipeCode = "";
@@ -360,6 +375,7 @@ namespace BPASmartClient.FoodStationTest.Model
} }
} }
} }

/// <summary> /// <summary>
/// 将配方添加到配方队列中 /// 将配方添加到配方队列中
/// </summary> /// </summary>
@@ -376,6 +392,7 @@ namespace BPASmartClient.FoodStationTest.Model
{ {
if (GVL_SmallStation.GetInstance.NotUseSmallStation) 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)) 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); RecipeQueueTray[i].Enqueue(data.RecipeCode);
@@ -404,8 +421,8 @@ namespace BPASmartClient.FoodStationTest.Model
GVL_SmallStation.GetInstance.WindSendDosingStatus = 0; GVL_SmallStation.GetInstance.WindSendDosingStatus = 0;
GVL_SmallStation.GetInstance.WindSendDosing = false; GVL_SmallStation.GetInstance.WindSendDosing = false;
} }

} }

/// <summary> /// <summary>
/// 小料站配料 /// 小料站配料
/// </summary> /// </summary>
@@ -413,6 +430,7 @@ namespace BPASmartClient.FoodStationTest.Model
{ {
if (!GVL_SmallStation.GetInstance.NotUseSmallStation) if (!GVL_SmallStation.GetInstance.NotUseSmallStation)
{ {
//如果使用小料站配料,更新查询5个工位的AGV状态。
for (int i = 0; i < 5; i++) for (int i = 0; i < 5; i++)
{ {
switch (GVL_SmallStation.GetInstance.Tray_AGVLogic[i]) switch (GVL_SmallStation.GetInstance.Tray_AGVLogic[i])
@@ -427,6 +445,7 @@ namespace BPASmartClient.FoodStationTest.Model
MessageNotify.GetInstance.ShowRunLog("AGV到位 发送到位信号给plc"); MessageNotify.GetInstance.ShowRunLog("AGV到位 发送到位信号给plc");
} }
break; break;

case 1: case 1:
if (GVL_SmallStation.GetInstance.Station1HaveTray) if (GVL_SmallStation.GetInstance.Station1HaveTray)


@@ -436,6 +455,7 @@ namespace BPASmartClient.FoodStationTest.Model
MessageNotify.GetInstance.ShowRunLog("托盘1有货架"); MessageNotify.GetInstance.ShowRunLog("托盘1有货架");
} }
break; break;

case 2: case 2:
if (GVL_SmallStation.GetInstance.AGV_GetTray1Finish && GVL_SmallStation.GetInstance.RecipeProcessStatus[i] == 0) 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后复位"); MessageNotify.GetInstance.ShowRunLog("AGV取托盘1完成,发送给海科信号后1s后复位");
} }
break; break;

case 3: case 3:
if (HKDevice.HK_PLC_S7.Read<bool>("DB4.DBX10." + i).Content) if (HKDevice.HK_PLC_S7.Read<bool>("DB4.DBX10." + i).Content)
{ {
@@ -455,6 +476,7 @@ namespace BPASmartClient.FoodStationTest.Model
MessageNotify.GetInstance.ShowRunLog("AGV取托盘1完成,信号复位"); MessageNotify.GetInstance.ShowRunLog("AGV取托盘1完成,信号复位");
} }
break; break;

default: default:
break; break;
} }
@@ -482,8 +504,6 @@ namespace BPASmartClient.FoodStationTest.Model
var res = Json<RemoteRecipeDataColl>.Data.Recipes.FirstOrDefault(p => p.RecipeCode == code); var res = Json<RemoteRecipeDataColl>.Data.Recipes.FirstOrDefault(p => p.RecipeCode == code);
if (/*SiemensDevice.IsConnected &&*/ !GVL_SmallStation.GetInstance.IsUseLocalRecipe) if (/*SiemensDevice.IsConnected &&*/ !GVL_SmallStation.GetInstance.IsUseLocalRecipe)
{ {


MessageNotify.GetInstance.ShowRunLog($"托盘1,配方{res.RecipeName},配料完成,数据反馈给西门子"); MessageNotify.GetInstance.ShowRunLog($"托盘1,配方{res.RecipeName},配料完成,数据反馈给西门子");
} }
else else
@@ -502,10 +522,9 @@ namespace BPASmartClient.FoodStationTest.Model
} }
else else
{ {
//粉料仓下发配方
//粉料仓下发配方并配料。
if (/*GVL_SmallStation.GetInstance.IsUseWindSend &&*/ GVL_SmallStation.GetInstance.WindSendDosing == false /*&& GVL_SmallStation.GetInstance.Tray_AGVLogic[recipeNum] == 2*/) if (/*GVL_SmallStation.GetInstance.IsUseWindSend &&*/ GVL_SmallStation.GetInstance.WindSendDosing == false /*&& GVL_SmallStation.GetInstance.Tray_AGVLogic[recipeNum] == 2*/)
{ {

} }
else else
{ {
@@ -516,6 +535,7 @@ namespace BPASmartClient.FoodStationTest.Model
} }
} }
} }
//上位机下发配方。并检测下发完成。
if (GVL_SmallStation.GetInstance.RecipeProcessStatus[recipeNum] == 0) if (GVL_SmallStation.GetInstance.RecipeProcessStatus[recipeNum] == 0)
{ {
GVL_SmallStation.GetInstance.RecipeStockBinDosing[recipeNum] = 0; GVL_SmallStation.GetInstance.RecipeStockBinDosing[recipeNum] = 0;
@@ -525,6 +545,7 @@ namespace BPASmartClient.FoodStationTest.Model
GVL_SmallStation.GetInstance.RecipeProcessStatus[recipeNum] = 1; GVL_SmallStation.GetInstance.RecipeProcessStatus[recipeNum] = 1;
MessageNotify.GetInstance.ShowRunLog($"托盘1,配方编号{code},配方号{recipeNum + 1},下发完成"); MessageNotify.GetInstance.ShowRunLog($"托盘1,配方编号{code},配方号{recipeNum + 1},下发完成");
} }
//需要等待下位机检测确认正确接收到配方。
bool recipeReceviceFinish = HKDevice.HK_PLC_S7.Read<bool>("DB3.DBX4." + recipeNum).Content; bool recipeReceviceFinish = HKDevice.HK_PLC_S7.Read<bool>("DB3.DBX4." + recipeNum).Content;
if (recipeReceviceFinish && GVL_SmallStation.GetInstance.RecipeProcessStatus[recipeNum] == 1) if (recipeReceviceFinish && GVL_SmallStation.GetInstance.RecipeProcessStatus[recipeNum] == 1)
{ {
@@ -533,11 +554,14 @@ namespace BPASmartClient.FoodStationTest.Model
GVL_SmallStation.GetInstance.StockBinDosingIssue[recipeNum] = 0; GVL_SmallStation.GetInstance.StockBinDosingIssue[recipeNum] = 0;
MessageNotify.GetInstance.ShowRunLog($"托盘1,配方编号{code},配方号{recipeNum + 1},配方接收完成"); MessageNotify.GetInstance.ShowRunLog($"托盘1,配方编号{code},配方号{recipeNum + 1},配方接收完成");
} }
//下面是配料流程。
if (GVL_SmallStation.GetInstance.RecipeProcessStatus[recipeNum] == 2) 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; int indexArr = -1;
//获取配方每个配方的三个桶的位置。
if (GVL_SmallStation.GetInstance.plcReadDataDB3.StockBinAllowIssue[i - 1]) if (GVL_SmallStation.GetInstance.plcReadDataDB3.StockBinAllowIssue[i - 1])
{ {
switch (recipeNum) switch (recipeNum)
@@ -545,23 +569,29 @@ namespace BPASmartClient.FoodStationTest.Model
case 0: case 0:
indexArr = Array.FindIndex(GVL_SmallStation.GetInstance.plcReadDataDB3.Recipe1BarrelPosReserve.ToArray(), p => p == i); indexArr = Array.FindIndex(GVL_SmallStation.GetInstance.plcReadDataDB3.Recipe1BarrelPosReserve.ToArray(), p => p == i);
break; break;

case 1: case 1:
indexArr = Array.FindIndex(GVL_SmallStation.GetInstance.plcReadDataDB3.Recipe2BarrelPosReserve.ToArray(), p => p == i); indexArr = Array.FindIndex(GVL_SmallStation.GetInstance.plcReadDataDB3.Recipe2BarrelPosReserve.ToArray(), p => p == i);
break; break;

case 2: case 2:
indexArr = Array.FindIndex(GVL_SmallStation.GetInstance.plcReadDataDB3.Recipe3BarrelPosReserve.ToArray(), p => p == i); indexArr = Array.FindIndex(GVL_SmallStation.GetInstance.plcReadDataDB3.Recipe3BarrelPosReserve.ToArray(), p => p == i);
break; break;

case 3: case 3:
indexArr = Array.FindIndex(GVL_SmallStation.GetInstance.plcReadDataDB3.Recipe4BarrelPosReserve.ToArray(), p => p == i); indexArr = Array.FindIndex(GVL_SmallStation.GetInstance.plcReadDataDB3.Recipe4BarrelPosReserve.ToArray(), p => p == i);
break; break;

case 4: case 4:
indexArr = Array.FindIndex(GVL_SmallStation.GetInstance.plcReadDataDB3.Recipe5BarrelPosReserve.ToArray(), p => p == i); indexArr = Array.FindIndex(GVL_SmallStation.GetInstance.plcReadDataDB3.Recipe5BarrelPosReserve.ToArray(), p => p == i);
break; break;
} }
if (indexArr >= 0 && GVL_SmallStation.GetInstance.StockBinDosingIssue[recipeNum].Get16bitValue((byte)i) == false) 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); 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 float weight = RemoteRecipes.ElementAt(index).RawMaterial.ElementAt(loc_index).RawMaterialWeight * 1000;//单位g转换kg
//小于等于0代表这个料仓不需要配料。
if (weight <= 0) if (weight <= 0)
{ {
if (i >= 1 && i <= 8) 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.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 GVL_SmallStation.GetInstance.StockBinDosingIssue[recipeNum] = GVL_SmallStation.GetInstance.StockBinDosingIssue[recipeNum].SetBitValue((byte)i, true);//配料完成设备写成false
} }
//写入重量并开始配料
else else
{ {
if (loc_index >= 0) 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)) 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); int res = Array.FindIndex(RemoteRecipes.ElementAt(index).RawMaterial.ToArray(), p => p.RawMaterialLocation == i);
if (res < 0) if (res < 0)
{ {

} }
else else
{ {
@@ -608,10 +639,12 @@ namespace BPASmartClient.FoodStationTest.Model
RemoteRecipes.ElementAt(index).RawMaterial.ElementAt(res).Laying_Off_Weight = DeviceInquire.GetInstance.GetDevice(i).deviceStatus.NowWeightFeedback; RemoteRecipes.ElementAt(index).RawMaterial.ElementAt(res).Laying_Off_Weight = DeviceInquire.GetInstance.GetDevice(i).deviceStatus.NowWeightFeedback;
bool info = DeviceInquire.GetInstance.GetDevice(i).StatusReset(); bool info = DeviceInquire.GetInstance.GetDevice(i).StatusReset();
MessageNotify.GetInstance.ShowRunLog($"柔性味魔方,托盘1,配方:{recipeName},{i}号仓,配料完成,下料完成重量:{RemoteRecipes.ElementAt(index).RawMaterial.ElementAt(res).Laying_Off_Weight}"); 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); 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); int iIndex = Array.FindIndex(Json<DevicePar>.Data.deviceParModels.ToArray(), p => p.MaterialName == DeviceInquire.GetInstance.GetDevice(i).DeviceName);
if (iIndex >= 0) if (iIndex >= 0)
{ {
//如果偏差过大则报警。
if (Math.Abs(Json<DevicePar>.Data.deviceParModels.ElementAt(iIndex).ErrorRange) < AlarmRange) if (Math.Abs(Json<DevicePar>.Data.deviceParModels.ElementAt(iIndex).ErrorRange) < AlarmRange)
{ {
HKDevice.HK_PLC_S7.Write("DB44.DBX3.0", true); HKDevice.HK_PLC_S7.Write("DB44.DBX3.0", true);
@@ -622,6 +655,7 @@ namespace BPASmartClient.FoodStationTest.Model
}); });
} }
} }
//对海科PLC写入味魔方配料完成。
if (i >= 1 && i <= 8) if (i >= 1 && i <= 8)
{ {
string commInfo = HKDevice.HK_PLC_S7.Write("DB4.DBX12." + (i - 1), true).IsSuccess.ToString(); 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; bool DosingComple = HKDevice.HK_PLC_S7.Read<bool>("DB3.DBX6." + recipeNum).Content;
if ((RTrig.GetInstance("配方配料完成").Start(DosingComple)) || (GVL_SmallStation.GetInstance.StockBinDosingIssue[recipeNum] > 0 && DosingComple)) 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.RecipeDosingCompleNum = GVL_SmallStation.GetInstance.RecipeDosingCompleNum + 1;

GVL_SmallStation.GetInstance.StockBinDosingIssue[recipeNum] = 0; GVL_SmallStation.GetInstance.StockBinDosingIssue[recipeNum] = 0;
if (GVL_SmallStation.GetInstance.RecipeStockBinDosing[recipeNum] > 0) if (GVL_SmallStation.GetInstance.RecipeStockBinDosing[recipeNum] > 0)
{ {
@@ -661,6 +698,7 @@ namespace BPASmartClient.FoodStationTest.Model
} }


GVL_SmallStation.GetInstance.WindSendDosing = false; GVL_SmallStation.GetInstance.WindSendDosing = false;
//移除配方。
App.Current.Dispatcher.Invoke(() => App.Current.Dispatcher.Invoke(() =>
{ {
Json<RemoteRecipeDataColl>.Data.Recipes.Remove(res); Json<RemoteRecipeDataColl>.Data.Recipes.Remove(res);
@@ -689,6 +727,7 @@ namespace BPASmartClient.FoodStationTest.Model
} }
} }
} }

/// <summary> /// <summary>
/// 料仓的位置和原料名称的对应 /// 料仓的位置和原料名称的对应
/// </summary> /// </summary>
@@ -706,6 +745,7 @@ namespace BPASmartClient.FoodStationTest.Model
} }
} }
} }

/// <summary> /// <summary>
/// PLC的DB3变量列表。初始化PLC读取DB块变量以及流程变量数据。 /// PLC的DB3变量列表。初始化PLC读取DB块变量以及流程变量数据。
/// </summary> /// </summary>
@@ -728,8 +768,6 @@ namespace BPASmartClient.FoodStationTest.Model
} }
} }




foreach (PropertyInfo item in typeof(GVL_SmallStation).GetProperties()) foreach (PropertyInfo item in typeof(GVL_SmallStation).GetProperties())
{ {
if (Attribute.IsDefined(item, typeof(VarCommAttribute))) if (Attribute.IsDefined(item, typeof(VarCommAttribute)))
@@ -747,6 +785,7 @@ namespace BPASmartClient.FoodStationTest.Model
} }
} }
} }

/// <summary> /// <summary>
/// 注册需要用到的委托,主要是用于手动控制的。 /// 注册需要用到的委托,主要是用于手动控制的。
/// </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", 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(() => { HKDevice.HK_PLC_S7.Write<bool>("DB5.DBX5.2", false); }), "StopAxis2Command", true);




//将本地配方发送到西门子配方里,执行配料 //将本地配方发送到西门子配方里,执行配料
ActionManage.GetInstance.Register(new Action<Object>((res) => ActionManage.GetInstance.Register(new Action<Object>((res) =>
{ {
@@ -1112,8 +1149,8 @@ namespace BPASmartClient.FoodStationTest.Model
HKDevice.HK_PLC_S7.Write("DB4.DBB1", (byte)Value); HKDevice.HK_PLC_S7.Write("DB4.DBB1", (byte)Value);
} }
}), "RobotSetProgramNum", true); }), "RobotSetProgramNum", true);

} }

/// <summary> /// <summary>
/// 连接海科PLC,并开启重连线程。 /// 连接海科PLC,并开启重连线程。
/// </summary> /// </summary>
@@ -1154,7 +1191,6 @@ namespace BPASmartClient.FoodStationTest.Model
{ {
} }



Thread.Sleep(50); Thread.Sleep(50);
}), "设备连接", true); }), "设备连接", true);
} }
@@ -1243,4 +1279,4 @@ namespace BPASmartClient.FoodStationTest.Model
GVL_SmallStation.GetInstance.RawMaterialsNameCode.TryAdd("0060", "孜然油"); GVL_SmallStation.GetInstance.RawMaterialsNameCode.TryAdd("0060", "孜然油");
} }
} }
}
}

+ 3
- 0
BPASmartClient.FoodStationTest/Model/RawMaterial/AlarmInfo.cs View File

@@ -2,6 +2,9 @@


namespace BPASmartClient.FoodStationTest.Model namespace BPASmartClient.FoodStationTest.Model
{ {
/// <summary>
/// 料仓报警信息。
/// </summary>
public class AlarmInfo public class AlarmInfo
{ {
/// <summary> /// <summary>


+ 3
- 0
BPASmartClient.FoodStationTest/Model/RawMaterial/DeviceCurrentStatus.cs View File

@@ -2,6 +2,9 @@


namespace BPASmartClient.FoodStationTest.Model namespace BPASmartClient.FoodStationTest.Model
{ {
/// <summary>
/// 味魔方当前状态。
/// </summary>
public class DeviceCurrentStatus : ObservableObject public class DeviceCurrentStatus : ObservableObject
{ {




+ 3
- 0
BPASmartClient.FoodStationTest/Model/Recipe/LocalRecipeDataColl.cs View File

@@ -2,6 +2,9 @@


namespace BPASmartClient.FoodStationTest.Model namespace BPASmartClient.FoodStationTest.Model
{ {
/// <summary>
/// 本地模拟配方集合。
/// </summary>
internal class LocalRecipeDataColl internal class LocalRecipeDataColl
{ {
public ObservableCollection<RemoteRecipeData> Recipes { get; set; } = new ObservableCollection<RemoteRecipeData>(); public ObservableCollection<RemoteRecipeData> Recipes { get; set; } = new ObservableCollection<RemoteRecipeData>();


+ 20
- 66
BPASmartClient.FoodStationTest/View/ManualFlowView.xaml View File

@@ -26,55 +26,6 @@
HorizontalAlignment="left" HorizontalAlignment="left"
VerticalAlignment="Center" VerticalAlignment="Center"
Orientation="Horizontal"> 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 <Button
Width="200" Width="200"
Height="40" Height="40"
@@ -151,13 +102,32 @@
</Grid.RowDefinitions> </Grid.RowDefinitions>


<StackPanel Grid.Column="1" Orientation="Vertical"> <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"> <StackPanel Orientation="Horizontal">
<TextBlock <TextBlock
Margin="10,0,5,0" Margin="10,0,5,0"
VerticalAlignment="Center" VerticalAlignment="Center"
FontSize="25" FontSize="25"
Foreground="#FF2AB2E7" Foreground="#FF2AB2E7"
Text="海科plc心跳:" />
Text="海科PLC心跳:" />
<TextBlock <TextBlock
Margin="10" Margin="10"
HorizontalAlignment="Center" HorizontalAlignment="Center"
@@ -166,22 +136,6 @@
Foreground="#FF2AB2E7" Foreground="#FF2AB2E7"
Text="{Binding Heartbeat}" /> Text="{Binding Heartbeat}" />
</StackPanel> </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>
<WrapPanel Grid.Row="2"> <WrapPanel Grid.Row="2">


+ 2
- 2
BPASmartClient.FoodStationTest/View/RecipeInfosView.xaml View File

@@ -141,7 +141,7 @@
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid Grid.Row="0"> <Grid Grid.Row="0">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="2.5*" />
<ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" />
<ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" />
<ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" />
@@ -189,7 +189,7 @@
<DataTemplate> <DataTemplate>
<Grid x:Name="grb" Height="25"> <Grid x:Name="grb" Height="25">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="2.5*" />
<ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" />
<ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" />
<ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" />


+ 5
- 76
BPASmartClient.FoodStationTest/ViewModel/ManualFlowViewModel.cs View File

@@ -20,54 +20,7 @@ namespace BPASmartClient.FoodStationTest.ViewModel
public ManualFlowViewModel() public ManualFlowViewModel()
{ {
time = GVL_SmallStation.GetInstance.Time; 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(() => Test4Command = new RelayCommand(() =>
{ {
ActionManage.GetInstance.Send("PLCWrite", new HKDeviceWrite() { Address = "DB4.DBX1.5", PlcVarType = PlcVarType.Bool, Value = true }); 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("手动点击按钮,气缸收紧错位复位"); MessageNotify.GetInstance.ShowUserLog("手动点击按钮,气缸收紧错位复位");
NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"手动点击按钮,气缸收紧错位复位"); 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(() => CLearRecipeInfo = new RelayCommand(() =>
{ {
App.Current.Dispatcher.Invoke(() => App.Current.Dispatcher.Invoke(() =>
@@ -143,12 +87,7 @@ namespace BPASmartClient.FoodStationTest.ViewModel
}); });
StockbinDosingCompleClear = new RelayCommand(() => 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(() => CancelRecipeCommand = new RelayCommand(() =>
{ {
@@ -297,12 +236,9 @@ namespace BPASmartClient.FoodStationTest.ViewModel
}); });
HKPlcIsConnect = ProcessControl.GetInstance.HKDevice.IsConnected; 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 Test4Command { get; set; }
public RelayCommand Test5Command { get; set; }
public RelayCommand Test6Command { get; set; }

public RelayCommand TimeSet { get; set; } public RelayCommand TimeSet { get; set; }
public RelayCommand CompletedNumResetCommand { get; set; } public RelayCommand CompletedNumResetCommand { get; set; }
public static bool Heartbeat { get { return _mHeartbeat; } set { _mHeartbeat = value; OnStaticPropertyChanged(); } } 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; } private static int _RecipeDosingCompleNum { get; set; }
public static int RecipeDosingCompleNum { get { return _RecipeDosingCompleNum; } set { _RecipeDosingCompleNum = value; OnStaticPropertyChanged(); } } 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 { return _CancelRecipeCode; } set { _CancelRecipeCode = value; OnPropertyChanged(); } }
public string _CancelRecipeCode { get; set; } public string _CancelRecipeCode { get; set; }


private static Visibility _VisibilityBtn3 = Visibility.Hidden;




} }


+ 7
- 0
BPASmartClient.JXJFoodBigStation/App.xaml.cs View File

@@ -214,6 +214,13 @@ namespace BPASmartClient.JXJFoodBigStation
AssemblyName = "BPASmartClient.CustomResource", AssemblyName = "BPASmartClient.CustomResource",
ToggleWindowPath = "Pages.View.PasswordChangeView" 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() MenuManage.GetInstance.menuModels.Add(new MenuModel()
{ {


+ 1
- 1
BPASmartClient.JXJFoodBigStation/View/BomOfMaterialView.xaml View File

@@ -104,11 +104,11 @@
</Grid> </Grid>
<Grid Grid.Column="1" Margin="5"> <Grid Grid.Column="1" Margin="5">
<TextBox <TextBox
Width="200"
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"
HorizontalContentAlignment="Center" HorizontalContentAlignment="Center"
VerticalContentAlignment="Center" VerticalContentAlignment="Center"
Width="200"
FontSize="16" FontSize="16"
Text="{Binding RawMaterialName}" /> Text="{Binding RawMaterialName}" />
</Grid> </Grid>


+ 1
- 1
BPASmartClient.JXJFoodBigStation/View/ManualFlowView.xaml View File

@@ -174,7 +174,7 @@
VerticalAlignment="Center" VerticalAlignment="Center"
FontSize="25" FontSize="25"
Foreground="#FF2AB2E7" Foreground="#FF2AB2E7"
Text="plc心跳:" />
Text="PLC心跳:" />
<TextBlock <TextBlock
Margin="10" Margin="10"
HorizontalAlignment="Center" HorizontalAlignment="Center"


+ 9
- 11
BPASmartClient.JXJFoodSmallStation/View/ManualFlowView.xaml View File

@@ -108,7 +108,7 @@
Content="PLC配方清零" Content="PLC配方清零"
FontSize="20" FontSize="20"
Style="{StaticResource ImageButtonStyle}" /> Style="{StaticResource ImageButtonStyle}" />
<WrapPanel Margin="400,0">
<WrapPanel Margin="10,0">
<TextBlock <TextBlock
Margin="10,0,5,0" Margin="10,0,5,0"
VerticalAlignment="Center" VerticalAlignment="Center"
@@ -116,8 +116,7 @@
Foreground="#FF2AB2E7" Foreground="#FF2AB2E7"
Text="订单号:" /> Text="订单号:" />
<TextBox <TextBox
Width="300"
Margin="5"
Width="241"
VerticalAlignment="Center" VerticalAlignment="Center"
FontSize="24" FontSize="24"
Text="{Binding CancelRecipeCode}" /> Text="{Binding CancelRecipeCode}" />
@@ -157,7 +156,7 @@
VerticalAlignment="Center" VerticalAlignment="Center"
FontSize="25" FontSize="25"
Foreground="#FF2AB2E7" Foreground="#FF2AB2E7"
Text="海科plc心跳:" />
Text="海科PLC心跳:" />
<TextBlock <TextBlock
Margin="10" Margin="10"
HorizontalAlignment="Center" HorizontalAlignment="Center"
@@ -173,7 +172,7 @@
VerticalAlignment="Center" VerticalAlignment="Center"
FontSize="25" FontSize="25"
Foreground="#FF2AB2E7" Foreground="#FF2AB2E7"
Text="西门子 连接状态:" />
Text="西门子PLC连接状态:" />
<TextBlock <TextBlock
Margin="10" Margin="10"
HorizontalAlignment="Center" HorizontalAlignment="Center"
@@ -186,7 +185,7 @@
VerticalAlignment="Center" VerticalAlignment="Center"
FontSize="25" FontSize="25"
Foreground="#FF2AB2E7" Foreground="#FF2AB2E7"
Text="海科plc连接状态:" />
Text="海科PLC连接状态:" />
<TextBlock <TextBlock
Margin="10" Margin="10"
HorizontalAlignment="Center" HorizontalAlignment="Center"
@@ -199,7 +198,7 @@
VerticalAlignment="Center" VerticalAlignment="Center"
FontSize="25" FontSize="25"
Foreground="#FF2AB2E7" Foreground="#FF2AB2E7"
Text="风送plc连接状态:" />
Text="风送PLC连接状态:" />
<TextBlock <TextBlock
Margin="10" Margin="10"
HorizontalAlignment="Center" HorizontalAlignment="Center"
@@ -246,9 +245,8 @@
Foreground="#FF2AB2E7" Foreground="#FF2AB2E7"
Text="ms" /> Text="ms" />
<Button <Button
Width="100"
Width="179"
Height="40" Height="40"
Margin="5,0,5,0"
Panel.ZIndex="0" Panel.ZIndex="0"
Command="{Binding TimeSet}" Command="{Binding TimeSet}"
Content="设置" Content="设置"
@@ -449,7 +447,7 @@
Foreground="#FF2AB2E7" Foreground="#FF2AB2E7"
Text="料仓号:" /> Text="料仓号:" />
<TextBox <TextBox
Width="50"
Width="90"
Margin="10" Margin="10"
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"
@@ -497,7 +495,7 @@
Margin="5,0,5,0" Margin="5,0,5,0"
Panel.ZIndex="0" Panel.ZIndex="0"
Command="{Binding CompletedNumResetCommand}" Command="{Binding CompletedNumResetCommand}"
Content="完成数目清零"
Content="配方完成数目清零"
FontSize="20" FontSize="20"
Style="{StaticResource ImageButtonStyle}" /> Style="{StaticResource ImageButtonStyle}" />
</WrapPanel> </WrapPanel>


+ 101
- 41
BPASmartClient.JXJFoodSmallStation/View/RobotView.xaml View File

@@ -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> <UserControl.Resources>
<Style x:Key="radioButtonStyle" TargetType="RadioButton"> <Style x:Key="radioButtonStyle" TargetType="RadioButton">
<Setter Property="Template"> <Setter Property="Template">
@@ -45,45 +47,101 @@
</Style> </Style>
</UserControl.Resources> </UserControl.Resources>
<UserControl.DataContext> <UserControl.DataContext>
<vm:RobotViewModel/>
<vm:RobotViewModel />
</UserControl.DataContext> </UserControl.DataContext>


<Grid Margin="10"> <Grid Margin="10">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="4*"/>
<ColumnDefinition Width="4*"/>
<ColumnDefinition Width="4*"/>
<ColumnDefinition Width="4*" />
<ColumnDefinition Width="4*" />
<ColumnDefinition Width="4*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<!--#region 表格标题栏设置--> <!--#region 表格标题栏设置-->
<Grid> <Grid>
<StackPanel> <StackPanel>
<WrapPanel> <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>
<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>
<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>
<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>
<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>
<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>
<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>
<!--<WrapPanel> <!--<WrapPanel>
<TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="抓空桶完成:"></TextBlock> <TextBlock Margin="5" FontSize="22" Foreground="Aqua" Text="抓空桶完成:"></TextBlock>
@@ -105,37 +163,37 @@
</Grid> </Grid>
<Grid Grid.Column="1"> <Grid Grid.Column="1">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="1*"></RowDefinition>
<RowDefinition Height="7*"></RowDefinition>
<RowDefinition Height="1*" />
<RowDefinition Height="7*" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Button <Button
Margin="20,15" Margin="20,15"
Background="LightGreen"
Command="{Binding SystemStart}" Command="{Binding SystemStart}"
Content="启动" Content="启动"
FontSize="40"
Background="LightGreen"></Button>
FontSize="40" />
<Button <Button
Grid.Column="1" Grid.Column="1"
Margin="20,15" Margin="20,15"
Background="OrangeRed"
Command="{Binding SystemStop}" Command="{Binding SystemStop}"
Content="停止" Content="停止"
FontSize="40"
Background="OrangeRed"></Button>
FontSize="40" />
<Button <Button
Grid.Column="2" Grid.Column="2"
Grid.ColumnSpan="2" Grid.ColumnSpan="2"
Margin="20,15" Margin="20,15"
Background="DodgerBlue"
Command="{Binding EStopReset}" Command="{Binding EStopReset}"
Content="急停复位" Content="急停复位"
FontSize="40"
Background="DodgerBlue"></Button>
FontSize="40" />
</Grid> </Grid>
</Grid> </Grid>
<!--<Grid Grid.Column="2"> <!--<Grid Grid.Column="2">
@@ -190,7 +248,8 @@
FontSize="32" FontSize="32"
Style="{StaticResource ImageButtonStyle}"></Button> Style="{StaticResource ImageButtonStyle}"></Button>
</Grid> </Grid>
--><!--<ListView
-->
<!--<ListView
Grid.Row="1" Grid.Row="1"
Background="Transparent" Background="Transparent"
BorderBrush="#00BEFA" BorderBrush="#00BEFA"
@@ -264,7 +323,8 @@
</Grid> </Grid>
</DataTemplate> </DataTemplate>
</ListView.ItemTemplate> </ListView.ItemTemplate>
</ListView>--><!--
</ListView>-->
<!--
<Grid Grid.Row="1" Visibility="Hidden"> <Grid Grid.Row="1" Visibility="Hidden">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition>


+ 6
- 2
BPASmartClient.JXJFoodSmallStation/View/SystemParView.xaml View File

@@ -165,6 +165,7 @@
Content="西门子设备连接" Content="西门子设备连接"
FontFamily="楷体" FontFamily="楷体"
FontSize="20" FontSize="20"
VerticalContentAlignment="Center"
Foreground="Aqua" Foreground="Aqua"
IsChecked="{Binding SiemensConnect}" /> IsChecked="{Binding SiemensConnect}" />
<CheckBox <CheckBox
@@ -173,6 +174,7 @@
Content="粉料仓设备连接" Content="粉料仓设备连接"
FontFamily="楷体" FontFamily="楷体"
FontSize="20" FontSize="20"
VerticalContentAlignment="Center"
Foreground="Aqua" Foreground="Aqua"
IsChecked="{Binding WindSendConnect}" /> IsChecked="{Binding WindSendConnect}" />
<CheckBox <CheckBox
@@ -181,6 +183,7 @@
Content="小料站产线PLC设备连接" Content="小料站产线PLC设备连接"
FontFamily="楷体" FontFamily="楷体"
FontSize="20" FontSize="20"
VerticalContentAlignment="Center"
Foreground="Aqua" Foreground="Aqua"
IsChecked="{Binding HKPlcConnect}" /> IsChecked="{Binding HKPlcConnect}" />


@@ -190,6 +193,7 @@
VerticalAlignment="Center" VerticalAlignment="Center"
Content="屏蔽小料仓数量读取报警" Content="屏蔽小料仓数量读取报警"
FontFamily="楷体" FontFamily="楷体"
VerticalContentAlignment="Center"
FontSize="20" FontSize="20"
Foreground="Aqua" Foreground="Aqua"
IsChecked="{Binding ShieldStockbinAlarm}" /> IsChecked="{Binding ShieldStockbinAlarm}" />
@@ -276,7 +280,7 @@
Text="伺服1速度(进桶侧)" /> Text="伺服1速度(进桶侧)" />
<TextBox <TextBox
Width="50" Width="50"
Margin="10"
Margin="33,10"
FontSize="16" FontSize="16"
Text="{Binding Axis1Speed}" /> Text="{Binding Axis1Speed}" />
<TextBlock <TextBlock
@@ -295,7 +299,7 @@
Text="伺服2速度(出桶侧)" /> Text="伺服2速度(出桶侧)" />
<TextBox <TextBox
Width="50" Width="50"
Margin="10"
Margin="33,10"
FontSize="16" FontSize="16"
Text="{Binding Axis2Speed}" /> Text="{Binding Axis2Speed}" />
<TextBlock <TextBlock


Loading…
Cancel
Save