瀏覽代碼

代码更新

master
pengliangyang 2 年之前
父節點
當前提交
57e3bc70cd
共有 42 個文件被更改,包括 639 次插入1113 次删除
  1. +0
    -1
      BPASmartClient.JXJFoodBigStation/App.xaml.cs
  2. +6
    -1
      BPASmartClient.JXJFoodBigStation/Model/DeviceCurrentStatus.cs
  3. +12
    -19
      BPASmartClient.JXJFoodBigStation/Model/GVL_BigStation.cs
  4. +17
    -0
      BPASmartClient.JXJFoodBigStation/Model/HK_PLC/DB_Read.cs
  5. +0
    -41
      BPASmartClient.JXJFoodBigStation/Model/HK_PLC/DataComm.cs
  6. +1
    -1
      BPASmartClient.JXJFoodBigStation/Model/HK_PLC/HKDeviceStatus.cs
  7. +18
    -36
      BPASmartClient.JXJFoodBigStation/Model/ProcessControl.cs
  8. +0
    -2
      BPASmartClient.JXJFoodBigStation/Model/RawMaterial/RecipeData.cs
  9. +44
    -19
      BPASmartClient.JXJFoodBigStation/Model/Siemens/DL_DataColl_DB.cs
  10. +20
    -3
      BPASmartClient.JXJFoodBigStation/Model/Siemens/DL_Start_DB.cs
  11. +1
    -374
      BPASmartClient.JXJFoodBigStation/Model/Siemens/SiemensCommAddress.cs
  12. +32
    -1
      BPASmartClient.JXJFoodBigStation/Model/Siemens/SiemensDeviceStatus.cs
  13. +20
    -90
      BPASmartClient.JXJFoodBigStation/Model/TestData.cs
  14. +0
    -8
      BPASmartClient.JXJFoodBigStation/View/RecipeSendDownView.xaml
  15. +76
    -369
      BPASmartClient.JXJFoodBigStation/View/SiemensRecipeSendDownView.xaml
  16. +0
    -25
      BPASmartClient.JXJFoodBigStation/View/SiemensRecipeSendDownView.xaml.cs
  17. +1
    -1
      BPASmartClient.JXJFoodBigStation/ViewModel/DeviceManageViewModel.cs
  18. +6
    -11
      BPASmartClient.JXJFoodBigStation/ViewModel/HardwareStatusViewModel.cs
  19. +13
    -2
      BPASmartClient.JXJFoodBigStation/ViewModel/RecipeSendDownViewModel.cs
  20. +18
    -14
      BPASmartClient.JXJFoodBigStation/ViewModel/SiemensRecipeSendDownViewModel.cs
  21. +1
    -1
      BPASmartClient.JXJFoodSmallStation/Model/ProcessControl.cs
  22. +3
    -3
      BPASmartClient.JXJFoodSmallStation/Model/Siemens/SiemensDeviceStatus.cs
  23. +23
    -5
      BPASmartClient.MorkTSingle/Control_MORKJC.cs
  24. +4
    -0
      BPASmartClient.MorkTSingle/GVL_MORKJC.cs
  25. +11
    -6
      BPASmartClient.S7Net/SiemensHelper.cs
  26. +4
    -4
      BPASmartClient/App.config
  27. +6
    -0
      DosingSystem/App.config
  28. +0
    -6
      DosingSystem/App.xaml.cs
  29. +6
    -1
      DosingSystem/BPASmartClient.DosingSystem.csproj
  30. +6
    -3
      DosingSystem/Model/DeviceInquire.cs
  31. +4
    -0
      DosingSystem/Model/StockStatusModel.cs
  32. +1
    -1
      DosingSystem/Model/par/BasePar.cs
  33. +0
    -1
      DosingSystem/Model/par/DevicePar.cs
  34. +10
    -9
      DosingSystem/Service/SiemensDevice.cs
  35. +1
    -1
      DosingSystem/View/NewRecipeView.xaml.cs
  36. +0
    -1
      DosingSystem/ViewModel/ChangeDeviceNameViewModel.cs
  37. +0
    -1
      DosingSystem/ViewModel/ConveyerBeltManualViewModel.cs
  38. +3
    -4
      DosingSystem/ViewModel/NewRecipeViewModel.cs
  39. +255
    -37
      DosingSystem/ViewModel/RecipeControlViewModel.cs
  40. +3
    -10
      DosingSystem/ViewModel/RecipeSettingsViewModel.cs
  41. +0
    -1
      DosingSystem/ViewModel/StockControViewModel.cs
  42. +13
    -0
      DosingSystem/tsconfig1.json

+ 0
- 1
BPASmartClient.JXJFoodBigStation/App.xaml.cs 查看文件

@@ -29,7 +29,6 @@ namespace BPASmartClient.JXJFoodBigStation
DataInit();
ProcessControl.GetInstance.Init();
MainView mv = new MainView();
//mv.Show();
LoginView lv = new LoginView();
var res = lv.ShowDialog();
if (res != null && res == true)


+ 6
- 1
BPASmartClient.JXJFoodBigStation/Model/DeviceCurrentStatus.cs 查看文件

@@ -13,7 +13,9 @@ namespace BPASmartClient.JXJFoodBigStation.Model
public double Weight { get { return _mWeight; } set { _mWeight = value; OnPropertyChanged(); } }
private double _mWeight;


/// <summary>
/// 运行状态
/// </summary>
public bool RunStatus { get { return _mRunStatus; } set { _mRunStatus = value; OnPropertyChanged(); } }
private bool _mRunStatus;

@@ -21,6 +23,9 @@ namespace BPASmartClient.JXJFoodBigStation.Model
public string DeviceName { get { return _mDeviceName; } set { _mDeviceName = value; OnPropertyChanged(); } }
private string _mDeviceName;

/// <summary>
/// 设备编号
/// </summary>
public int DeviceNum { get { return _mDeviceNum; } set { _mDeviceNum = value; OnPropertyChanged(); } }
private int _mDeviceNum;



+ 12
- 19
BPASmartClient.JXJFoodBigStation/Model/GVL_BigStation.cs 查看文件

@@ -16,37 +16,30 @@ namespace BPASmartClient.JXJFoodBigStation.Model
/// </summary>
public static bool HeartBeatFromPlc { get; set; }
/// <summary>
/// 往输送带下发配方完成
/// </summary>
public bool IssueRecipeFinish { get; set; } = false;
/// <summary>
/// 当前料仓的位置
/// </summary>
public int StockInIsWork { get; set; } = 0;
/// <summary>
/// 单个配方执行完成标志
/// 配方下发状态 =0:配方未下发 ,1:配方下发给plc ,2:plc成功接收配方
/// </summary>
public bool RecipeFinish { get; set; } = false;
public static int Recipe1DosingStatus { get; set; }
/// <summary>
/// 记录AGV进站送货的指令顺序
/// 配方下发状态 =0:配方未下发 ,1:配方下发给plc ,2:plc成功接收配方
/// </summary>
public int AgvDeliveryPosition { get; set; }
public static int Recipe2DosingStatus { get; set; }
/// <summary>
/// 记录AGV进站取货的指令顺序
/// 配方下发状态 =0:配方未下发 ,1:配方下发给plc ,2:plc成功接收配方
/// </summary>
public int AgvPickUpPosition { get; set; }

public static int Recipe3DosingStatus { get; set; }
/// <summary>
/// 配方下发状态 =0:配方未下发 ,1:配方下发给plc ,2:plc成功接收配方
/// </summary>
public static int Recipe1DosingStatus { get; set; }
public static int Recipe2DosingStatus { get; set; }
public static int Recipe3DosingStatus { get; set; }
public static int Recipe4DosingStatus { get; set; }

/// <summary>
/// 是否处于手动下发配方
/// </summary>
public static bool IsUseLocalRecipe { get; set; } = false;
/// <summary>
/// 订单请求
/// </summary>
public static bool Order_Request { get; set; } = false;

public const int StockBinNum = 12;
}
}

+ 17
- 0
BPASmartClient.JXJFoodBigStation/Model/HK_PLC/DB_Read.cs 查看文件

@@ -8,20 +8,37 @@ namespace BPASmartClient.JXJFoodBigStation.Model.HK_PLC
{
public class DB_Read
{
/// <summary>
/// plc心跳上报
/// </summary>
public bool HeartBeat { get; set; }
/// <summary>
/// 配方1允许下发配方
/// </summary>
public bool IsAllowIssueRecipe1 { get; set; }
public bool IsAllowIssueRecipe2 { get; set; }
public bool IsAllowIssueRecipe3 { get; set; }
public bool IsAllowIssueRecipe4 { get; set; }

/// <summary>
/// 配方1 接收配方完成
/// </summary>
public bool ReceiveFinishRecipe1 { get; set; }
public bool ReceiveFinishRecipe2 { get; set; }
public bool ReceiveFinishRecipe3 { get; set; }
public bool ReceiveFinishRecipe4 { get; set; }

/// <summary>
/// 配方1 配料完成
/// </summary>
public bool Recipe1DosingFinish { get; set; }
public bool Recipe2DosingFinish { get; set; }
public bool Recipe3DosingFinish { get; set; }
public bool Recipe4DosingFinish { get; set; }

/// <summary>
/// 配方1 托盘编号
/// </summary>
public short Recipe1TrayCode { get; set; }
public short Recipe2TrayCode { get; set; }
public short Recipe3TrayCode { get; set; }


+ 0
- 41
BPASmartClient.JXJFoodBigStation/Model/HK_PLC/DataComm.cs 查看文件

@@ -1,41 +0,0 @@
using BPASmartClient.Helper;
using BPASmartClient.Modbus;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BPASmartClient.JXJFoodBigStation.Model.HK_PLC
{
public class DataComm
{
public volatile static DataComm Instance;
public static DataComm GetInstance => Instance ?? (new DataComm());
public DataComm() { }
/// <summary>
/// 是否允许配料
/// </summary>
public bool IsAllowDosing { get { return _mIsAllowDosing; } set { _mIsAllowDosing = value; } }
private bool _mIsAllowDosing;

public bool DosingFinishToPLC { get { return _mDosingFinishToPLC; } set { _mDosingFinishToPLC = value; } }
private bool _mDosingFinishToPLC;

private int _mStockBinLocationToPLC;
public int StockBinLocationToPLC { get { return _mStockBinLocationToPLC; } set { _mStockBinLocationToPLC = value; } }

public bool StatusSignToBPA { get { return _mStatusSignToBPA; } set { _mStatusSignToBPA = value; } }
private bool _mStatusSignToBPA;

private int _mStockBinLocationToBPA;
public int StockBinLocationToBPA { get { return _mStockBinLocationToBPA; } set { _mStockBinLocationToBPA = value; } }

private int _mBarrelNumToPLC;
public int BarrelNumToPLC { get { return _mBarrelNumToPLC; } set { _mBarrelNumToPLC = value; } }
/*public ConcurrentDictionary<int, StockBinLocations> DeviceLists = new ConcurrentDictionary<int, StockBinLocations>();*/
}
}

+ 1
- 1
BPASmartClient.JXJFoodBigStation/Model/HK_PLC/HKDeviceStatus.cs 查看文件

@@ -52,7 +52,7 @@ namespace BPASmartClient.JXJFoodBigStation.Model.HK_PLC
PlcWrite.TrayCode = Convert.ToInt16(recipe.TrayCode);
for (int barrel = 1; barrel < 6; barrel++)
{
if (barrel != 3)
if (barrel != 3)//桶的编号不为3 只为1,2,4,5号桶
{
for (int loc = 1; loc < 15; loc++)
{


+ 18
- 36
BPASmartClient.JXJFoodBigStation/Model/ProcessControl.cs 查看文件

@@ -20,12 +20,9 @@ namespace BPASmartClient.JXJFoodBigStation.Model
private volatile static ProcessControl _Instance;
public static ProcessControl GetInstance => _Instance ?? (_Instance = new ProcessControl());
private ProcessControl() { }

public SiemensDeviceStatus SiemensDevice = new SiemensDeviceStatus();
public HKDeviceStatus HKDevice = new HKDeviceStatus();
DL_Finish_DB FinishData = new DL_Finish_DB();

/// <summary>
/// 配方数据
/// </summary>
@@ -45,24 +42,21 @@ namespace BPASmartClient.JXJFoodBigStation.Model
public ConcurrentQueue<string> RecipeQueue2 = new ConcurrentQueue<string>();
public ConcurrentQueue<string> RecipeQueue3 = new ConcurrentQueue<string>();
public ConcurrentQueue<string> RecipeQueue4 = new ConcurrentQueue<string>();
/// <summary>
/// 接收原料数据
/// </summary>
public RecipeRawMaterial RawMaterial;
public void Init()
{
testData();
ActionManage.GetInstance.CancelRegister("SiemensSendRecipe");
ActionManage.GetInstance.Register(new Action<object>((res) =>
{
ObservableCollection<RawMaterial> RawMaterials = new ObservableCollection<RawMaterial>();
if (SiemensDevice.IsConnected)
if (SiemensDevice.IsConnected ||true)
{
if (res != null && res is DL_Start_DB recipe)
{
RawMaterials.Clear();
for (int i = 0; i < 15; i++)
for (int i = 0; i < 12; i++)
{
if (RawMaterialsNamePos.ContainsKey(recipe.RecipeName))
if (RawMaterialsNamePos.ContainsKey(recipe.Material[i].Material_Name))
{
RawMaterials.Add(new RawMaterial()
{
@@ -98,7 +92,7 @@ namespace BPASmartClient.JXJFoodBigStation.Model
HKDevice.Init();
MessageNotify.GetInstance.ShowRunLog("海科plc连接成功");
}
if (SiemensDevice.IsConnected)
if (SiemensDevice.IsConnected || true)
{
SiemensDevice.Init();
MessageNotify.GetInstance.ShowRunLog("西门子plc连接成功");
@@ -108,24 +102,10 @@ namespace BPASmartClient.JXJFoodBigStation.Model
{

}
ActionManage.GetInstance.CancelRegister("ManualSendRecipe");
ActionManage.GetInstance.Register(new Action<Object>((o) =>
{
if (o != null && o is RecipeData a)
{
Json<LocalRecipe>.Data.Recipes.Add(a);
for (int i = 0; i < Json<LocalRecipe>.Data.Recipes.Count; i++)
{
foreach (var item in Json<LocalRecipe>.Data.Recipes.ElementAt(i).RawMaterial)
{
item.RawMaterialLocation = Convert.ToInt32(item.RawMaterialName);
}
}
MessageNotify.GetInstance.ShowAlarmLog("手动下发配方完成");
}
}), "ManualSendRecipe", true);
RecipeQueue1.Clear();
RecipeQueue2.Clear();
RecipeQueue3.Clear();
RecipeQueue4.Clear();
ThreadManage.GetInstance().StartLong(new Action(() =>
{
SystemStatus();
@@ -152,22 +132,22 @@ namespace BPASmartClient.JXJFoodBigStation.Model
{
foreach (var data in Recipes)
{
if (RecipeQueue1.Count == 0)
if (RecipeQueue1.Count == 0 && !RecipeQueue2.Contains(data.RecipeCode) && !RecipeQueue3.Contains(data.RecipeCode) && !RecipeQueue4.Contains(data.RecipeCode))
{
if (!(RecipeQueue1.Contains(data.RecipeCode)))
RecipeQueue1.Enqueue(data.RecipeCode);
}
else if (RecipeQueue2.Count == 0)
else if (RecipeQueue2.Count == 0 && !RecipeQueue1.Contains(data.RecipeCode) && !RecipeQueue3.Contains(data.RecipeCode) && !RecipeQueue4.Contains(data.RecipeCode))
{
if (!(RecipeQueue2.Contains(data.RecipeCode)))
RecipeQueue2.Enqueue(data.RecipeCode);
}
else if (RecipeQueue3.Count == 0)
else if (RecipeQueue3.Count == 0 && !RecipeQueue1.Contains(data.RecipeCode) && !RecipeQueue2.Contains(data.RecipeCode) && !RecipeQueue4.Contains(data.RecipeCode))
{
if (!(RecipeQueue3.Contains(data.RecipeCode)))
RecipeQueue3.Enqueue(data.RecipeCode);
}
else if (RecipeQueue4.Count == 0)
else if (RecipeQueue4.Count == 0 && !RecipeQueue1.Contains(data.RecipeCode) && !RecipeQueue2.Contains(data.RecipeCode) && !RecipeQueue3.Contains(data.RecipeCode))
{
if (!(RecipeQueue4.Contains(data.RecipeCode)))
RecipeQueue4.Enqueue(data.RecipeCode);
@@ -292,11 +272,15 @@ namespace BPASmartClient.JXJFoodBigStation.Model
IssuedComplete.Add(Recipes.ElementAt(index));//将配方添加到完成列表
if (!GVL_BigStation.IsUseLocalRecipe)
{
Json<RemoteRecipe>.Data.Recipes.RemoveAt(index);//制作完成,移除当前配方
App.Current.Dispatcher.Invoke(() => {
Json<RemoteRecipe>.Data.Recipes.RemoveAt(index);//制作完成,移除当前配方
});
}
else
{
Json<LocalRecipe>.Data.Recipes.RemoveAt(index);//制作完成,移除当前配方
App.Current.Dispatcher.Invoke(() => {
Json<LocalRecipe>.Data.Recipes.RemoveAt(index);//制作完成,移除当前配方
});
}
GVL_BigStation.Recipe1DosingStatus = 0;
}
@@ -529,7 +513,6 @@ namespace BPASmartClient.JXJFoodBigStation.Model
}
GVL_BigStation.Recipe3DosingStatus = 0;
}
}
}
if (RecipeQueue4.Count > 0)
@@ -653,7 +636,6 @@ namespace BPASmartClient.JXJFoodBigStation.Model
/// </summary>
private void StockBinParReset()
{

HKDevice.PlcWrite.RecipeCode = 0;
HKDevice.PlcWrite.TrayCode = 0;



+ 0
- 2
BPASmartClient.JXJFoodBigStation/Model/RawMaterial/RecipeData.cs 查看文件

@@ -32,7 +32,5 @@ namespace BPASmartClient.JXJFoodBigStation.Model
/// 原料数据
/// </summary>
public ObservableCollection<RawMaterial> RawMaterial { get; set; } = new ObservableCollection<RawMaterial>();


}
}

+ 44
- 19
BPASmartClient.JXJFoodBigStation/Model/Siemens/DL_DataColl_DB.cs 查看文件

@@ -13,25 +13,50 @@ namespace BPASmartClient.JXJFoodBigStation.Model.Siemens
public string RecipeCode { get; set; }
[Siemens(16)]
public string RecipeName { get; set; }
public bool var1 { get; set; }
public bool var2 { get; set; }

public bool var3 { get; set; }

public bool var4 { get; set; }

public bool var5 { get; set; }

public bool var6 { get; set; }

public bool var7 { get; set; }

public bool var8 { get; set; }

public bool var9 { get; set; }
public short Mode { get; set; }

public bool[] Alarm { get; set; } = new bool[24];
/// <summary>
/// 缺料本机
/// </summary>
public bool DeviceInComplete { get; set; }
/// <summary>
/// 上游缺料
/// </summary>
public bool TopInComple { get; set; }
/// <summary>
/// 下游堵料
/// </summary>
public bool DownWindrow { get; set; }
/// <summary>
/// 设备启动
/// </summary>
public bool DeviceStart { get; set; }
/// <summary>
/// 设备停止
/// </summary>
public bool DeviceStop { get; set; }
/// <summary>
/// 设备急停
/// </summary>
public bool DeviceEStop { get; set; }
/// <summary>
/// 设备暂停
/// </summary>
public bool DevicePause { get; set; }
/// <summary>
/// 设备故障
/// </summary>
public bool DeviceAlarm { get; set; }
/// <summary>
/// 上位机给plc的心跳
/// </summary>
public bool HeartBeat { get; set; }
/// <summary>
/// 设备模式
/// </summary>
public short DeviceMode { get; set; }
/// <summary>
/// 设备报警
/// </summary>
public bool[] AlarmInfo { get; set; } = new bool[24];
public int Reserved1 { get; set; }
public int Reserved2 { get; set; }



+ 20
- 3
BPASmartClient.JXJFoodBigStation/Model/Siemens/DL_Start_DB.cs 查看文件

@@ -19,20 +19,37 @@ namespace BPASmartClient.JXJFoodBigStation.Model.Siemens
/// 配发名称
/// </summary>
public string RecipeName { get; set; }
public short Order_No { get; set; }
/// <summary>
/// 工位号
/// </summary>
public short Job_No { get; set; }
/// <summary>
/// 托盘号
/// </summary>
public short Pallet_No { get; set; }
/// <summary>
/// 物料信息
/// </summary>
public UDT[] Material { get; set; } = new UDT[20];
/// <summary>
/// 订单类型(0.其他、 1.洗锅)
/// </summary>
public bool Order_Type { get; set; }
/// <summary>
/// 订单请求确认
/// </summary>
public bool Order_Request_Ack { get; set; }

/// <summary>
/// 备用
/// </summary>
public short[] Standby { get; set; } = new short[4];
/// <summary>
/// 配方发送请求
/// </summary>
public bool Ask_For_Send_Bit { get; set; }
public bool Order_Request { get; set; }
/// <summary>
/// 备用
/// </summary>
public short[] Standby1 { get; set; } = new short[4];
}
public class UDT


+ 1
- 374
BPASmartClient.JXJFoodBigStation/Model/Siemens/SiemensCommAddress.cs 查看文件

@@ -8,380 +8,7 @@ namespace BPASmartClient.JXJFoodBigStation.Model.Siemens
{
public class SiemensCommAddress
{
#region 配方地址
/// <summary>
/// 配方状态
/// </summary>
public static string RecipeState { get; set; } = "";
/// <summary>
/// 配方名称
/// </summary>
public static string RecipeName { get; set; } = "";
/// <summary>
/// 配方ID
/// </summary>
public static string RecipeID { get; set; } = "";
/// <summary>
/// 原料信息
/// </summary>
public static string RawMaterial { get; set; } = "";
#endregion
#region AGV到位(与西门子PLC交互)西门子PLC ==> 上位机
/// <summary>
/// 托盘的位置编号
/// </summary>
public static string TrayLocationNum { get; set; } = "";
/// <summary>
/// 配方ID
/// </summary>
public static string TrayRecipeID { get; set; } = "";
/// <summary>
/// 状态信号
/// </summary>
public static string StateSign { get; set; } = "";
#endregion
#region Tray配料完成(与西门子PLC交互)上位机 ==> 西门子PLC
public static string TrayLocationNumToSiemens { get; set; } = "";
public static string TrayRecipeIDToSiemens { get; set; } = "";
public static string TrayStateToSiemens { get; set; } = "";
#endregion
/*#region AGV小车进出工站1
/// <summary>
/// Agv送货 进站申请 从西门子读取
/// </summary>
public static string DeliveryAGVApply1 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 写给西门子
/// </summary>
public static string DeliveryAGVIsApply1 { get; set; } = "";
/// <summary>
/// Agv送货 进站顶升申请 从西门子读取
/// </summary>
public static string DeliveryAGVApplyJack1 { get; set; } = "";
/// <summary>
/// Agv送货 进站顶升申请 写给西门子
/// </summary>
public static string DeliveryAGVIsApplyJack1 { get; set; } = "";
/// <summary>
/// Agv送货 送货完成 从西门子读取
/// </summary>
public static string DeliveryAGVFinsih1{ get; set; } = "";
/// <summary>
/// Agv送货 工位上有货架 写给西门子
/// </summary>
public static string StationHaveCargo1 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 从西门子读取
/// </summary>
public static string PickAGVApply1 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 写给西门子
/// </summary>
public static string PickAGVIsApply1 { get; set; } = "";
/// <summary>
/// Agv送货 取货架完成 从西门子读取
/// </summary>
public static string PickCargoAGVFinish1 { get; set; } = "";
/// <summary>
/// Agv送货 取料完成 写给西门子
/// </summary>
public static string PickAGVFinish1 { get; set; } = "";
/// <summary>
/// 工位上是否有小车
/// </summary>
public static string StationIsExistCar1 { get; set; } = "";
#endregion
#region AGV小车进出工站2
/// <summary>
/// Agv送货 进站申请 从西门子读取
/// </summary>
public static string DeliveryAGVApply2 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 写给西门子
/// </summary>
public static string DeliveryAGVIsApply2 { get; set; } = "";
/// <summary>
/// Agv送货 进站顶升申请 从西门子读取
/// </summary>
public static string DeliveryAGVApplyJack2 { get; set; } = "";
/// <summary>
/// Agv送货 进站顶升申请 写给西门子
/// </summary>
public static string DeliveryAGVIsApplyJack2 { get; set; } = "";
/// <summary>
/// Agv送货 送货完成 从西门子读取
/// </summary>
public static string DeliveryAGVFinsih2 { get; set; } = "";
/// <summary>
/// Agv送货 工位上有货架 写给西门子
/// </summary>
public static string StationHaveCargo2 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 从西门子读取
/// </summary>
public static string PickAGVApply2 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 写给西门子
/// </summary>
public static string PickAGVIsApply2 { get; set; } = "";
/// <summary>
/// Agv送货 取货架完成 从西门子读取
/// </summary>
public static string PickCargoAGVFinish2 { get; set; } = "";
/// <summary>
/// Agv送货 取料完成 写给西门子
/// </summary>
public static string PickAGVFinish2 { get; set; } = "";
/// <summary>
/// 工位上是否有小车
/// </summary>
public static string StationIsExistCar2 { get; set; } = "";
#endregion
#region AGV小车进出工站3
/// <summary>
/// Agv送货 进站申请 从西门子读取
/// </summary>
public static string DeliveryAGVApply3 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 写给西门子
/// </summary>
public static string DeliveryAGVIsApply3 { get; set; } = "";
/// <summary>
/// Agv送货 进站顶升申请 从西门子读取
/// </summary>
public static string DeliveryAGVApplyJack3 { get; set; } = "";
/// <summary>
/// Agv送货 进站顶升申请 写给西门子
/// </summary>
public static string DeliveryAGVIsApplyJack3 { get; set; } = "";
/// <summary>
/// Agv送货 送货完成 从西门子读取
/// </summary>
public static string DeliveryAGVFinsih3 { get; set; } = "";
/// <summary>
/// Agv送货 工位上有货架 写给西门子
/// </summary>
public static string StationHaveCargo3 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 从西门子读取
/// </summary>
public static string PickAGVApply3 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 写给西门子
/// </summary>
public static string PickAGVIsApply3 { get; set; } = "";
/// <summary>
/// Agv送货 取货架完成 从西门子读取
/// </summary>
public static string PickCargoAGVFinish3 { get; set; } = "";
/// <summary>
/// Agv送货 取料完成 写给西门子
/// </summary>
public static string PickAGVFinish3 { get; set; } = "";
/// <summary>
/// 工位上是否有小车
/// </summary>
public static string StationIsExistCar3 { get; set; } = "";
#endregion
#region AGV小车进出工站4
/// <summary>
/// Agv送货 进站申请 从西门子读取
/// </summary>
public static string DeliveryAGVApply4 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 写给西门子
/// </summary>
public static string DeliveryAGVIsApply4 { get; set; } = "";
/// <summary>
/// Agv送货 进站顶升申请 从西门子读取
/// </summary>
public static string DeliveryAGVApplyJack4 { get; set; } = "";
/// <summary>
/// Agv送货 进站顶升申请 写给西门子
/// </summary>
public static string DeliveryAGVIsApplyJack4 { get; set; } = "";
/// <summary>
/// Agv送货 送货完成 从西门子读取
/// </summary>
public static string DeliveryAGVFinsih4 { get; set; } = "";
/// <summary>
/// Agv送货 工位上有货架 写给西门子
/// </summary>
public static string StationHaveCargo4 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 从西门子读取
/// </summary>
public static string PickAGVApply4 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 写给西门子
/// </summary>
public static string PickAGVIsApply4 { get; set; } = "";
/// <summary>
/// Agv送货 取货架完成 从西门子读取
/// </summary>
public static string PickCargoAGVFinish4 { get; set; } = "";
/// <summary>
/// Agv送货 取料完成 写给西门子
/// </summary>
public static string PickAGVFinish4 { get; set; } = "";
/// <summary>
/// 工位上是否有小车
/// </summary>
public static string StationIsExistCar4 { get; set; } = "";
#endregion
#region AGV小车进出工站5
/// <summary>
/// Agv送货 进站申请 从西门子读取
/// </summary>
public static string DeliveryAGVApply5 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 写给西门子
/// </summary>
public static string DeliveryAGVIsApply5 { get; set; } = "";
/// <summary>
/// Agv送货 进站顶升申请 从西门子读取
/// </summary>
public static string DeliveryAGVApplyJack5 { get; set; } = "";
/// <summary>
/// Agv送货 进站顶升申请 写给西门子
/// </summary>
public static string DeliveryAGVIsApplyJack5 { get; set; } = "";
/// <summary>
/// Agv送货 送货完成 从西门子读取
/// </summary>
public static string DeliveryAGVFinsih5 { get; set; } = "";
/// <summary>
/// Agv送货 工位上有货架 写给西门子
/// </summary>
public static string StationHaveCargo5 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 从西门子读取
/// </summary>
public static string PickAGVApply5 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 写给西门子
/// </summary>
public static string PickAGVIsApply5 { get; set; } = "";
/// <summary>
/// Agv送货 取货架完成 从西门子读取
/// </summary>
public static string PickCargoAGVFinish5 { get; set; } = "";
/// <summary>
/// Agv送货 取料完成 写给西门子
/// </summary>
public static string PickAGVFinish5 { get; set; } = "";
/// <summary>
/// 工位上是否有小车
/// </summary>
public static string StationIsExistCar5 { get; set; } = "";
#endregion
#region AGV小车进出工站6
/// <summary>
/// Agv送货 进站申请 从西门子读取
/// </summary>
public static string DeliveryAGVApply6 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 写给西门子
/// </summary>
public static string DeliveryAGVIsApply6 { get; set; } = "";
/// <summary>
/// Agv送货 进站顶升申请 从西门子读取
/// </summary>
public static string DeliveryAGVApplyJack6 { get; set; } = "";
/// <summary>
/// Agv送货 进站顶升申请 写给西门子
/// </summary>
public static string DeliveryAGVIsApplyJack6 { get; set; } = "";
/// <summary>
/// Agv送货 送货完成 从西门子读取
/// </summary>
public static string DeliveryAGVFinsih6 { get; set; } = "";
/// <summary>
/// Agv送货 工位上有货架 写给西门子
/// </summary>
public static string StationHaveCargo6 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 从西门子读取
/// </summary>
public static string PickAGVApply6 { get; set; } = "";
/// <summary>
/// Agv送货 进站申请 写给西门子
/// </summary>
public static string PickAGVIsApply6 { get; set; } = "";
/// <summary>
/// Agv送货 取货架完成 从西门子读取
/// </summary>
public static string PickCargoAGVFinish6 { get; set; } = "";
/// <summary>
/// Agv送货 取料完成 写给西门子
/// </summary>
public static string PickAGVFinish6 { get; set; } = "";
/// <summary>
/// 工位上是否有小车
/// </summary>
public static string StationIsExistCar6 { get; set; } = "";
#endregion*/
#region AGV进出站
/// <summary>
/// Agv送货 进站申请
/// </summary>
public static string DeliveryAGVApply { get; set; } = "M4002";
/// <summary>
/// Agv送货 进站申请
/// </summary>
public static string DeliveryAGVIsApply { get; set; } = "M5002";
/// <summary>
/// Agv送货 进站顶升申请
/// </summary>
public static string DeliveryAGVApplyJack { get; set; } = "M4004";
/// <summary>
/// Agv送货 进站顶升申请
/// </summary>
public static string DeliveryAGVIsApplyJack { get; set; } = "M5004";
/// <summary>
/// Agv送货 送货完成
/// </summary>
public static string DeliveryAGVFinsih { get; set; } = "M4005";
/// <summary>
/// Agv送货 工位上有货架
/// </summary>
public static string StationHaveCargo { get; set; } = "M5005";
/// <summary>
/// Agv送货 进站申请
/// </summary>
public static string PickAGVApply { get; set; } = "M4003";
/// <summary>
/// Agv送货 进站申请
/// </summary>
public static string PickAGVIsApply { get; set; } = "M5003";
/// <summary>
/// Agv送货 取货架完成
/// </summary>
public static string PickCargoAGVFinish { get; set; } = "M4006";
/// <summary>
/// Agv送货 取料完成
/// </summary>
public static string PickAGVFinish { get; set; } = "M5006";
/// <summary>
/// 工位上是否有小车
/// </summary>
public static string StationIsExistCar { get; set; } = "M4007";
#endregion
}
public class RecipeRawMaterial
{
/// <summary>
/// 原料对应的桶号
/// </summary>
public int[] RawMaterialBarrelNum = new int[15];
/// <summary>
/// 需要原料重量
/// </summary>
public double[] RawMaterialWeight = new double[15];
/// <summary>
/// 原料对应料仓的位置
/// </summary>
public int[] RawMaterialLocation = new int[15];

}

}

+ 32
- 1
BPASmartClient.JXJFoodBigStation/Model/Siemens/SiemensDeviceStatus.cs 查看文件

@@ -15,9 +15,10 @@ namespace BPASmartClient.JXJFoodBigStation.Model.Siemens
public SiemensHelper Siemens_PLC_S7 = new SiemensHelper();
public bool IsConnected => Siemens_PLC_S7.IsConnected;

bool a = false;
public void Init()
{
if (IsConnected)
if (IsConnected)
{
ThreadManage.GetInstance().StartLong(new Action(() =>
{
@@ -25,6 +26,36 @@ namespace BPASmartClient.JXJFoodBigStation.Model.Siemens
var res1 = this.Siemens_PLC_S7.ReadClass<DL_Status_DB>(2331);
var res2 = this.Siemens_PLC_S7.ReadClass<DL_Finish_DB>(2361);
var res3 = this.Siemens_PLC_S7.ReadClass<DL_DataColl_DB>(2391);
if (res != null && res is DL_Start_DB start)
{
if (a)
{
start.RecipeName = "配方1";
start.RecipeCode = "1201";
start.Order_Request_Ack = true;

for (int i = 0; i < GVL_BigStation.StockBinNum ; i++)
{
start.Material[i] = new UDT();
start.Material[i].Material_Name = "" + (i +1);
start.Material[i].Material_Weight = 100 + (i + 1);
start.Material[i].Material_BarrelNum = (short)(i + 1);
}
}
if (RTrig.GetInstance("Order_Request").Start(GVL_BigStation.Order_Request))
{
start.Order_Request = true;
Siemens_PLC_S7.WriteClass<DL_Start_DB>(start, 2301);
}
if (RTrig.GetInstance("Order_Request_Ack").Start(start.Order_Request_Ack))
{
ActionManage.GetInstance.Send("SiemensSendRecipe", start);
}
}
if (res1 != null && res1 is DL_Status_DB status)
{
}
if (res2 != null && res2.Ask_For_Finish_PLC)
{
ActionManage.GetInstance.Send("配料完成信号确认完成");


+ 20
- 90
BPASmartClient.JXJFoodBigStation/Model/TestData.cs 查看文件

@@ -17,96 +17,26 @@ namespace BPASmartClient.JXJFoodBigStation.Model
public ObservableCollection<RawMaterial> RawMaterials { get; set; } = new ObservableCollection<RawMaterial>();
public TestData()
{
string recipeName = "配方1";
string recipeCode = "10001";
int Traycode = 1;

float RawmaterialWeight = 10;
short RawMaterialbarrelNum = 1;
int RawMaterialLocation = 5;

float RawmaterialWeight1 = 20;
short RawMaterialbarrelNum1 = 2;
int RawMaterialLocation1 = 7;

float RawmaterialWeight2 = 30;
short RawMaterialbarrelNum2 = 3;
int RawMaterialLocation2 = 9;
RawMaterials.Add(new RawMaterial()
{
DeviceIp = RawMaterials.Count + 1,
RawMaterialWeight = RawmaterialWeight,
RawMaterialBarrelNum = RawMaterialbarrelNum,
RawMaterialLocation = RawMaterialLocation
});
RawMaterials.Add(new RawMaterial()
{
DeviceIp = RawMaterials.Count + 1,
RawMaterialWeight = RawmaterialWeight1,
RawMaterialBarrelNum = RawMaterialbarrelNum1,
RawMaterialLocation = RawMaterialLocation1
});
RawMaterials.Add(new RawMaterial()
{
DeviceIp = RawMaterials.Count + 1,
RawMaterialWeight = RawmaterialWeight2,
RawMaterialBarrelNum = RawMaterialbarrelNum2,
RawMaterialLocation = RawMaterialLocation2
});

Recipes.Add(new Model.RecipeData()
{
RecipeName = recipeName,
RecipeCode = recipeCode,
TrayCode = Traycode,
RawMaterial = RawMaterials
});

RawMaterials.Clear();
string recipeName_2 = "配方2";
string recipeCode_2 = "20001";
int Traycode_2 = 3;

float RawmaterialWeight_2 = 10;
short RawMaterialbarrelNum_2 = 1;
int RawMaterialLocation_2 = 5;

float RawmaterialWeight1_2 = 20;
short RawMaterialbarrelNum1_2 = 2;
int RawMaterialLocation1_2 = 7;

float RawmaterialWeight2_2 = 30;
short RawMaterialbarrelNum2_2 = 3;
int RawMaterialLocation2_2 = 9;
RawMaterials.Add(new RawMaterial()
{
DeviceIp = RawMaterials.Count + 1,
RawMaterialWeight = RawmaterialWeight_2,
RawMaterialBarrelNum = RawMaterialbarrelNum_2,
RawMaterialLocation = RawMaterialLocation_2
});
RawMaterials.Add(new RawMaterial()
{
DeviceIp = RawMaterials.Count + 1,
RawMaterialWeight = RawmaterialWeight1_2,
RawMaterialBarrelNum = RawMaterialbarrelNum1_2,
RawMaterialLocation = RawMaterialLocation1_2
});
RawMaterials.Add(new RawMaterial()
{
DeviceIp = RawMaterials.Count + 1,
RawMaterialWeight = RawmaterialWeight2_2,
RawMaterialBarrelNum = RawMaterialbarrelNum2_2,
RawMaterialLocation = RawMaterialLocation2_2
});

Recipes.Add(new Model.RecipeData()
{
RecipeName = recipeName_2,
RecipeCode = recipeCode_2,
TrayCode = Traycode_2,
RawMaterial = RawMaterials
});
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 10; i++)
{
RawMaterials.Add(new RawMaterial()
{
DeviceIp = RawMaterials.Count + 1,
RawMaterialWeight = new Random().Next(),
RawMaterialBarrelNum = j,
RawMaterialLocation = j
});
}
Recipes.Add(new Model.RecipeData()
{
RecipeName = "配方" + i,
RecipeCode = new Random().Next(1000,9999) + "",
TrayCode = new Random().Next(1,3),
RawMaterial = RawMaterials
});
}
}
}
}

+ 0
- 8
BPASmartClient.JXJFoodBigStation/View/RecipeSendDownView.xaml 查看文件

@@ -423,9 +423,7 @@
</Grid.ColumnDefinitions>

<Grid Name="ggr" Margin="10">

<pry:ImageBorder Width="{Binding ElementName=ggr, Path=ActualWidth}" Height="{Binding ElementName=ggr, Path=ActualHeight}" />

<ListBox
Margin="5"
VerticalAlignment="Top"
@@ -444,7 +442,6 @@

<ListBox.ItemTemplate>
<DataTemplate>

<Grid
Name="tt"
Height="220"
@@ -456,7 +453,6 @@
<RowDefinition Height="2" />
<RowDefinition Height="40" />
</Grid.RowDefinitions>

<Image
Grid.RowSpan="5"
Source="/BPASmartClient.CustomResource;component/Image/配方背景/竖背景框.png"
@@ -785,10 +781,7 @@
Content="已完成"
GroupName="state"
Style="{DynamicResource RadioState}" />

</Grid>


<ScrollViewer
Grid.Row="1"
HorizontalScrollBarVisibility="Hidden"
@@ -873,6 +866,5 @@
</Border>
</ScrollViewer>
</Grid>

</Grid>
</UserControl>

+ 76
- 369
BPASmartClient.JXJFoodBigStation/View/SiemensRecipeSendDownView.xaml 查看文件

@@ -22,7 +22,7 @@
<SolidColorBrush
x:Key="{x:Static SystemColors.HighlightBrushKey}"
Opacity=".4"
Color="White" />
Color="White" />
<!-- SelectedItem without focus -->
<SolidColorBrush
x:Key="{x:Static SystemColors.ControlBrushKey}"
@@ -337,18 +337,6 @@
</Grid>

<ControlTemplate.Triggers>
<!--<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" Value="#FFd2e7f4" />
</Trigger>
<Trigger Property="IsChecked" Value="true">
<Setter TargetName="border2" Property="Background" Value="#191E36" />
</Trigger>
<Trigger Property="IsChecked" Value="false">
<Setter TargetName="border2" Property="Background" Value="#191E36" />
</Trigger>-->
<!--<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="White" />
</Trigger>-->
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border2" Property="Background" Value="#191E36" />
</Trigger>
@@ -419,7 +407,7 @@

<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="0.25*" />
<!--<ColumnDefinition Width="0.25*" />-->
</Grid.ColumnDefinitions>

<Grid Name="ggr" Margin="10">
@@ -444,40 +432,97 @@

<ListBox.ItemTemplate>
<DataTemplate>

<Grid
Name="tt"
Height="220"
Height="300"
Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition Height="80" />
<RowDefinition Height="20" />
<RowDefinition Height="128" />
<RowDefinition Height="198" />
<RowDefinition Height="2" />
<RowDefinition Height="40" />
</Grid.RowDefinitions>

<Image
Grid.RowSpan="5"
Source="/BPASmartClient.CustomResource;component/Image/配方背景/竖背景框.png"
Stretch="Fill" />

<TextBlock
Grid.Row="0"
Margin="2,5,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Top"
FontSize="18"
Foreground="#FF2AB2E7"
Text="{Binding RecipeName}" />
<Grid Grid.Row="0">

<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>

<TextBlock
Grid.Row="0"
Grid.Column="0"
Margin="7,5,0,0"
HorizontalAlignment="left"
VerticalAlignment="Center"
FontSize="16"
Foreground="#FF2AB2E7"
Text="配方名称:"></TextBlock>
<TextBlock
Grid.Row="0"
Grid.Column="1"
Margin="7,5,0,0"
HorizontalAlignment="left"
VerticalAlignment="Center"
FontSize="16"
Foreground="#FF2AB2E7"
Text="{Binding RecipeName}" />
<TextBlock
Grid.Row="1"
Grid.Column="0"
Margin="7,5,0,0"
HorizontalAlignment="left"
VerticalAlignment="Center"
FontSize="16"
Foreground="#FF2AB2E7"
Text="配方编号:"></TextBlock>
<TextBlock
Grid.Row="1"
Grid.Column="1"
Margin="7,5,0,0"
HorizontalAlignment="left"
VerticalAlignment="Center"
FontSize="16"
Foreground="#FF2AB2E7"
Text="{Binding RecipeCode}" />
<TextBlock
Grid.Row="2"
Grid.Column="0"
Margin="7,5,0,0"
HorizontalAlignment="left"
VerticalAlignment="Center"
FontSize="16"
Foreground="#FF2AB2E7"
Text="托盘编号:"></TextBlock>
<TextBlock
Grid.Row="2"
Grid.Column="1"
Margin="7,5,0,0"
HorizontalAlignment="left"
VerticalAlignment="Center"
FontSize="16"
Foreground="#FF2AB2E7"
Text="{Binding TrayCode}" />
</Grid>

<TextBlock
Grid.Row="1"
FontSize="16"
Margin="5,0,0,0"
Margin="7,2,0,0"
VerticalAlignment="Top"
Foreground="#FF2AB2E7"
Text="配方信息:" />
Text="原料信息:" />

<ScrollViewer
Grid.Row="2"
@@ -510,7 +555,7 @@
<Expander.Content>
<StackPanel Margin="36,0,0,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="托盘编号:" Foreground="#FF2AB2E7"/>
<TextBlock Text="原料桶号:" Foreground="#FF2AB2E7"/>
<TextBlock Text="{Binding RawMaterialBarrelNum}" Foreground="#FF2AB2E7"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
@@ -518,17 +563,12 @@
<TextBlock Text="{Binding RawMaterialWeight}" Foreground="#FF2AB2E7"/>
</StackPanel>
</StackPanel>

</Expander.Content>
</Expander>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>


</ScrollViewer>

<Image
Grid.Row="3"
Width="{Binding ElementName=tt, Path=ActualWidth}"
@@ -536,343 +576,10 @@
VerticalAlignment="Bottom"
Source="/BPASmartClient.CustomResource;component/Image/直线.png"
Stretch="Fill" />

<Grid
Name="gr"
Grid.Row="4"
Height="30"
Margin="0,0,0,10"
VerticalAlignment="Bottom"
Background="Transparent">
<!--<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>-->

<!--<Image
Height="2"
Grid.ColumnSpan="2"
Width="{Binding ElementName=gr, Path=ActualWidth}"
VerticalAlignment="Top"
Source="/BPASmartClient.CustomResource;component/Image/直线.png" />-->

<!--<pry:IcoButton
Width="{Binding ElementName=gr, Path=ActualWidth}"
Height="{Binding ElementName=gr, Path=ActualHeight}"
Margin="4,4,4,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="#222bd06f"
BorderThickness="0"
Command="{Binding DataContext.StartCommand, RelativeSource={RelativeSource AncestorType=ListBox, Mode=FindAncestor}}"
CommandParameter="{Binding RecipeName}"
Content="配方下发"
EnterBackground="#332bd06f"
FontStyle="Normal"
Foreground="#ff2bd06f"
IcoText="&#xe6cf;"
IsEnabled="{Binding IsEnable}"
Style="{StaticResource IcoButtonStyle}" />-->

<!--<pry:IcoButton
Width="{Binding ElementName=gr, Path=ActualWidth}"
Height="{Binding ElementName=gr, Path=ActualHeight}"
Margin="4,4,3,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="#11F53F62"
BorderThickness="0"
Command="{Binding DataContext.RemoveCommand, RelativeSource={RelativeSource AncestorType=ListBox, Mode=FindAncestor}}"
CommandParameter="{Binding RecipCode}"
Content="删除"
EnterBackground="#22F53F62"
FontStyle="Normal"
Foreground="#FFF53F62"
IcoText="&#xe68e;"
Style="{StaticResource IcoButtonStyle}" />

<pry:IcoButton
Grid.Column="1"
Width="{Binding ElementName=gr, Path=ActualWidth}"
Height="{Binding ElementName=gr, Path=ActualHeight}"
Margin="3,4,4,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="#112AB2E7"
BorderThickness="0"
Command="{Binding DataContext.DetailsCommand, RelativeSource={RelativeSource AncestorType=ListBox, Mode=FindAncestor}}"
CommandParameter="{Binding RecipCode}"
Content="编辑"
EnterBackground="#222AB2E7"
Foreground="#FF2AB2E7"
IcoText="&#xe636;"
Style="{StaticResource IcoButtonStyle}" />-->

</Grid>
<!--</StackPanel>-->
</Grid>

<!--<Grid Name="tt" Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>

<Image
Grid.RowSpan="4"
Source="/BPASmartClient.CustomResource;component/Image/配方背景/竖背景框.png"
Stretch="Fill" />

<TextBlock
Grid.Row="0"
Margin="2,5,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Top"
FontSize="18"
Foreground="#FF2AB2E7"
Text="{Binding RecipeName}" />


<TextBlock
Grid.Row="1"
Margin="5,0,0,5"
Foreground="#ffc000"
Text="配方信息:" />

<ScrollViewer
Grid.Row="2"
HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Hidden">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>

<ItemsControl ItemsSource="{Binding RawMaterials}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock
Grid.Row="1"
Margin="5,0,0,0"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Foreground="#aaffc000"
Text="{Binding RawMaterialName}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

<ItemsControl Grid.Column="1" ItemsSource="{Binding RawMaterials}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">

<TextBlock
Margin="5,0,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="#aaffc000"
Text=":" />

<TextBlock
Margin="5,0,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="#aaffc000"
Text="{Binding RawMaterialWeight}" />

<TextBlock
Margin="5,0,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="#aaffc000"
Text="g" />

</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

</Grid>

</ScrollViewer>



<Grid
Name="grb"
Grid.Row="3"
Height="30"
Margin="0,0,0,10"
VerticalAlignment="Bottom"
Background="Transparent">

<Image
Width="{Binding ElementName=grb, Path=ActualWidth}"
VerticalAlignment="Top"
StretchDirection="Both"
Source="/BPASmartClient.CustomResource;component/Image/直线.png" />

<pry:IcoButton
Width="{Binding ElementName=grb, Path=ActualWidth}"
Height="{Binding ElementName=grb, Path=ActualHeight}"
Margin="4,4,4,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="#222bd06f"
BorderThickness="0"
Command="{Binding DataContext.StartCommand, RelativeSource={RelativeSource AncestorType=ListBox, Mode=FindAncestor}}"
CommandParameter="{Binding RecipeName}"
Content="配方下发"
EnterBackground="#332bd06f"
FontStyle="Normal"
Foreground="#ff2bd06f"
IcoText="&#xe6cf;"
IsEnabled="{Binding IsEnable}"
Style="{StaticResource IcoButtonStyle}" />


</Grid>

</Grid>-->
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

</Grid>

<Grid
Name="gr"
Grid.Column="1"
Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition />
</Grid.RowDefinitions>

<pry:ImageBorder
Grid.RowSpan="2"
Width="{Binding ElementName=gr, Path=ActualWidth}"
Height="{Binding ElementName=gr, Path=ActualHeight}" />

<Grid Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<RadioButton
Click="RadioButtonWait_Click"
Command="{Binding ChangeRecipeStateCommand}"
Content="等待中"
GroupName="state"
IsChecked="True"
Style="{DynamicResource RadioState}" />
<RadioButton
Grid.Column="1"
Click="RadioButtonMaking_Click"
Content="执行中"
GroupName="state"
Style="{DynamicResource RadioState}" />
<RadioButton
Grid.Column="2"
Click="RadioButtonCompelete_Click"
Content="已完成"
GroupName="state"
Style="{DynamicResource RadioState}" />

</Grid>


<ScrollViewer
Grid.Row="1"
HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Hidden">
<Border>
<Grid Grid.Row="1">
<Grid x:Name="repiceListMaking" Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock
Margin="10,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
FontSize="18"
Foreground="#FF2AB2E7"
Text="{Binding CurrentRecipeName}" />
<ItemsControl
Grid.Row="1"
Margin="50,0"
ItemsSource="{Binding recipeProcesses}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="16" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock
Margin="10,0,5,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
FontSize="15"
Foreground="#AA2AB2E7"
Text="{Binding RawMaterialName}"
ToolTip="{Binding RawMaterialSource, Converter={StaticResource IntToSourceConvert}}" />
<TextBlock
Grid.Column="1"
Margin="0,0,5,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
FontSize="15"
Foreground="#AA2AB2E7"
Text=":" />
<Button
Grid.Column="2"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Command="{Binding DataContext.ChangeRecipeStateCommand, RelativeSource={RelativeSource AncestorType=ItemsControl, Mode=FindAncestor}}"
CommandParameter="{Binding RawMaterialId}"
Content="{Binding RecipeStatus, Converter={StaticResource RunStatusConvert}}"
IsEnabled="{Binding RawMaterialSource, Converter={StaticResource EnbleConvert}}"
Style="{StaticResource materialMakingButton}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>

</ItemsControl>

</Grid>
<!--<TreeView x:Name="repiceListMaking" ItemsSource="{Binding RecipeProcesse}"
ScrollViewer.VerticalScrollBarVisibility="Disabled" HorizontalAlignment="Stretch" Background="Wheat" ItemContainerStyle="{StaticResource recipeTreeItem}">
</TreeView>-->

<!-- 等待和已完成 -->

<TreeView
x:Name="repiceList"
HorizontalAlignment="Stretch"
Background="Transparent"
BorderThickness="0"
ItemContainerStyle="{StaticResource recipeTreeItem}"
ItemsSource="{Binding UserTreeWait}"
ScrollViewer.VerticalScrollBarVisibility="Visible" />




</Grid>
</Border>
</ScrollViewer>
</Grid>

</Grid>
</UserControl>

+ 0
- 25
BPASmartClient.JXJFoodBigStation/View/SiemensRecipeSendDownView.xaml.cs 查看文件

@@ -25,30 +25,5 @@ namespace BPASmartClient.JXJFoodBigStation.View
{
InitializeComponent();
}

private void RadioButtonCompelete_Click(object sender, RoutedEventArgs e)
{
repiceList.ItemsSource = RecipeSendDownViewModel.UserTreeCompelete;
repiceList.Visibility = Visibility.Visible;
repiceListMaking.Visibility = Visibility.Hidden;


}

private void RadioButtonWait_Click(object sender, RoutedEventArgs e)
{
repiceList.ItemsSource = RecipeSendDownViewModel.UserTreeWait;
repiceList.Visibility = Visibility.Visible;
repiceListMaking.Visibility = Visibility.Hidden;
}

private void RadioButtonMaking_Click(object sender, RoutedEventArgs e)
{
repiceListMaking.Visibility = Visibility.Visible;
repiceList.Visibility = Visibility.Hidden;

}
}

}

+ 1
- 1
BPASmartClient.JXJFoodBigStation/ViewModel/DeviceManageViewModel.cs 查看文件

@@ -16,7 +16,7 @@ namespace BPASmartClient.JXJFoodBigStation.ViewModel
internal class DeviceManageViewModel:ObservableObject
{

public ObservableCollection<DeviceInfo> Devices { get; set; }=new ObservableCollection<DeviceInfo>() { new DeviceInfo {DeviceName="123",IpAddress="123.213.123.213." } };
public ObservableCollection<DeviceInfo> Devices { get; set; } = new ObservableCollection<DeviceInfo>() { new DeviceInfo { DeviceName = "123", IpAddress = "123.213.123.213." } };

public RelayCommand<object> ChangeNameCommand { get; set; }



+ 6
- 11
BPASmartClient.JXJFoodBigStation/ViewModel/HardwareStatusViewModel.cs 查看文件

@@ -25,7 +25,7 @@ namespace BPASmartClient.JXJFoodBigStation.ViewModel
TopDeviceCurrentStatuses.Add(new DeviceCurrentStatus()
{
DeviceName = i.ToString(),
DeviceNum=i,
DeviceNum = i,
RunStatus = true,
Weight = new Random().Next(0, 100)
});
@@ -40,13 +40,11 @@ namespace BPASmartClient.JXJFoodBigStation.ViewModel
Weight = new Random().Next(0, 100)
});
}
StartCommand = new RelayCommand<string>((deviceName) => {
//PLC控制

//动画
StartCommand = new RelayCommand<string>((deviceName) =>
{
if (deviceName != null)
{
var top= TopDeviceCurrentStatuses.FirstOrDefault(p => p.DeviceName == deviceName);
var top = TopDeviceCurrentStatuses.FirstOrDefault(p => p.DeviceName == deviceName);
if (top != null)
{
ActionManage.GetInstance.Send("StartTopDevice", deviceName);
@@ -58,10 +56,8 @@ namespace BPASmartClient.JXJFoodBigStation.ViewModel
}
}
});
StopCommand = new RelayCommand<string>((deviceName) => {
//PLC控制

//动画
StopCommand = new RelayCommand<string>((deviceName) =>
{
if (deviceName != null)
{
var top = TopDeviceCurrentStatuses.FirstOrDefault(p => p.DeviceName == deviceName);
@@ -120,7 +116,6 @@ namespace BPASmartClient.JXJFoodBigStation.ViewModel
view.ShowDialog();
});
}
public ObservableCollection<DeviceCurrentStatus> AllDeviceCurrentStatuses;
public ObservableCollection<DeviceCurrentStatus> TopDeviceCurrentStatuses { get; set; } = new ObservableCollection<DeviceCurrentStatus>();
public ObservableCollection<DeviceCurrentStatus> BottomDeviceCurrentStatuses { get; set; } = new ObservableCollection<DeviceCurrentStatus>();
public RelayCommand<string> UpdateRawMaterName { get; set; }


+ 13
- 2
BPASmartClient.JXJFoodBigStation/ViewModel/RecipeSendDownViewModel.cs 查看文件

@@ -1,4 +1,5 @@
using BPASmartClient.Helper;
using BPASmartClient.CustomResource.Pages.Model;
using BPASmartClient.Helper;
using BPASmartClient.JXJFoodBigStation.Model;
using Microsoft.Toolkit.Mvvm.ComponentModel;
using Microsoft.Toolkit.Mvvm.Input;
@@ -37,7 +38,17 @@ namespace BPASmartClient.JXJFoodBigStation.ViewModel
//配方下发逻辑
var res = Recipes.FirstOrDefault(p => p.RecipeName == recipeName);
if (res != null)
ActionManage.GetInstance.Send("ManualSendRecipe", res);
{
Json<LocalRecipe>.Data.Recipes.Add(res);
for (int i = 0; i < Json<LocalRecipe>.Data.Recipes.Count; i++)
{
foreach (var item in Json<LocalRecipe>.Data.Recipes.ElementAt(i).RawMaterial)
{
item.RawMaterialLocation = Convert.ToInt32(item.RawMaterialName);
}
}
MessageNotify.GetInstance.ShowAlarmLog("手动下发配方完成");
}
}
});
}


+ 18
- 14
BPASmartClient.JXJFoodBigStation/ViewModel/SiemensRecipeSendDownViewModel.cs 查看文件

@@ -14,22 +14,26 @@ namespace BPASmartClient.JXJFoodBigStation.ViewModel
{
internal class SiemensRecipeSendDownViewModel : ObservableObject
{
public ObservableCollection<RecipeData> Recipes { get; set; } = Json<RemoteRecipe>.Data.Recipes;
/// <summary>
/// 当前正在制作的配方
/// </summary>
public static ObservableCollection<RawMaterial> recipeProcesses { get; set; } = new ObservableCollection<RawMaterial>();
/// <summary>
/// 等待制作的配方
/// </summary>
public static ObservableCollection<RecipeData> UserTreeWait { get; set; } = new ObservableCollection<RecipeData>();
/// <summary>
/// 已完成的配方
/// </summary>
public static ObservableCollection<RecipeData> UserTreeCompelete { get; set; } = new ObservableCollection<RecipeData>();
//Json<RemoteRecipe>.Data.Recipes
public static ObservableCollection<RawMaterial> a = new ObservableCollection<RawMaterial>()
{
new RawMaterial() { RawMaterialName= "1",RawMaterialWeight=101, RawMaterialBarrelNum=1 },
new RawMaterial() { RawMaterialName= "2",RawMaterialWeight=102, RawMaterialBarrelNum=1 },
new RawMaterial() { RawMaterialName= "3",RawMaterialWeight=103, RawMaterialBarrelNum=1 },
new RawMaterial() { RawMaterialName= "4",RawMaterialWeight=104, RawMaterialBarrelNum=1 },
new RawMaterial() { RawMaterialName= "5",RawMaterialWeight=105, RawMaterialBarrelNum=1 },
new RawMaterial() { RawMaterialName= "6",RawMaterialWeight=106, RawMaterialBarrelNum=1 },
new RawMaterial() { RawMaterialName= "7",RawMaterialWeight=107, RawMaterialBarrelNum=1 },
new RawMaterial() { RawMaterialName= "8",RawMaterialWeight=108, RawMaterialBarrelNum=1 },
new RawMaterial() { RawMaterialName= "9",RawMaterialWeight=109, RawMaterialBarrelNum=1 },
new RawMaterial() { RawMaterialName= "10",RawMaterialWeight=110, RawMaterialBarrelNum=1 },
new RawMaterial() { RawMaterialName= "11",RawMaterialWeight=111, RawMaterialBarrelNum=1 },
new RawMaterial() { RawMaterialName= "12",RawMaterialWeight=112, RawMaterialBarrelNum=1 }
};
public ObservableCollection<RecipeData> Recipes { get; set; } = Json<RemoteRecipe>.Data.Recipes;
public SiemensRecipeSendDownViewModel()
{
}
}
}

+ 1
- 1
BPASmartClient.JXJFoodSmallStation/Model/ProcessControl.cs 查看文件

@@ -139,7 +139,7 @@ namespace BPASmartClient.JXJFoodSmallStation.Model
try
{
//HKDevice.HK_PLC_S7.Connect(S7.Net.CpuType.S71200, HK_PLC_IP);
//SiemensDevice.Siemens_PLC_S7.Connect(S7.Net.CpuType.S71500, Siemens_PLC_IP);
SiemensDevice.Siemens_PLC_S7.Connect(S7.Net.CpuType.S71500, Siemens_PLC_IP);
//WindSendDevice.Siemens_PLC_S7.Connect(S7.Net.CpuType.S71200,WindSend_PLC_IP);
if (HKDevice.IsConnected)
{


+ 3
- 3
BPASmartClient.JXJFoodSmallStation/Model/Siemens/SiemensDeviceStatus.cs 查看文件

@@ -25,18 +25,18 @@ namespace BPASmartClient.JXJFoodSmallStation.Model.Siemens
var Status = this.Siemens_PLC_S7.ReadClass<XL_Status_DB>(2231);
var Finish = this.Siemens_PLC_S7.ReadClass<XL_Finish_DB>(2261);
var DataColl = this.Siemens_PLC_S7.ReadClass<XL_DataColl_DB>(2291);
if (Start != null && Start.Order_Request == false && GVL_SmallStation.IsAllowSiemensSendRecipe)
if (Start != null && Start.Order_Request == false && GVL_SmallStation.IsAllowSiemensSendRecipe)
{
Start.Order_Request = true;
this.Siemens_PLC_S7.WriteClass<XL_Start_DB>(Start, 1);
}
if (Start != null && RTrig.GetInstance("RecipeTrig").Start(Start.Order_Request_ACK))
if (Start != null && RTrig.GetInstance("RecipeTrig").Start(Start.Order_Request_ACK))
{
ActionManage.GetInstance.Send("SiemensRecipeRecive", Start);
Start.Order_Request_ACK = false;
this.Siemens_PLC_S7.WriteClass<XL_Start_DB>(Start, 1);
}
if (Status != null && RTrig.GetInstance("Allow_AGV_Put[0]").Start(Status.AgvRequestPut))
{
ActionManage.GetInstance.Send("AGV放货架到位",Status);


+ 23
- 5
BPASmartClient.MorkTSingle/Control_MORKJC.cs 查看文件

@@ -89,7 +89,14 @@ namespace BPASmartClient.MorkTSingle
{
Thread.Sleep(1000);
OrderChange(morkT.morkOrderPushesCoffee.ElementAt(0).SuborderId, BPA.Message.Enum.ORDER_STATUS.COOKING);
new KLMCoffee_MakeCoffeeEvent() { DeviceId=DeviceId, KLMDrinkFaultCode = (KLMDrinkFaultType)(morkT.morkOrderPushesCoffee.ElementAt(0).Loc) }.Publish(); //接咖啡控制 //DrCoffeeDrinksCode.热水
if (!GVL_MORKJC.CoffeeKind)
{
new KLMCoffee_MakeCoffeeEvent() { DeviceId = DeviceId, KLMDrinkFaultCode = (KLMDrinkFaultType)(morkT.morkOrderPushesCoffee.ElementAt(0).Loc) }.Publish(); //接咖啡控制 //DrCoffeeDrinksCode.热水
}
else
{
new DRCoffee_MakeCoffeeEvent() { DeviceId = DeviceId, DrinkCode = (DrCoffeeDrinksCode)int.Parse(mainMaterialLoc) }.Publish();
}
morkT.IsCoffeeMake = true;
}
else if (morkT.MakeCoffeeFinish && IsHealth && morkT.morkOrderPushesCoffee.Count > 0 && morkT.IsCoffeeMake)
@@ -233,11 +240,22 @@ namespace BPASmartClient.MorkTSingle
{
if (morkT.IsCoffeeMake)
{
EventBus.EventBus.GetInstance().Subscribe<KLMCoffee_CoffeEndCookEvent>(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack)
if (!GVL_MORKJC.CoffeeKind)
{
bFirstTrig_Coffee = false;
morkT.MakeCoffeeFinish = true;
});
EventBus.EventBus.GetInstance().Subscribe<KLMCoffee_CoffeEndCookEvent>(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack)
{
bFirstTrig_Coffee = false;
morkT.MakeCoffeeFinish = true;
});
}
else
{
EventBus.EventBus.GetInstance().Subscribe<DRCoffee_CoffeEndCookEvent>(DeviceId, delegate (IEvent @event, EventCallBackHandle callBack)
{
bFirstTrig_Coffee = false;
morkT.MakeCoffeeFinish = true;
});
}
if (morkT.MakeCoffeeFinish != true)
{
if (!bFirstTrig_Coffee)


+ 4
- 0
BPASmartClient.MorkTSingle/GVL_MORKJC.cs 查看文件

@@ -19,5 +19,9 @@ namespace BPASmartClient.MorkTSingle
/// 咖乐美咖啡机心跳
/// </summary>
public bool KLMCoffeeIsConnected = false;
/// <summary>
/// 咖啡种类false:咖乐美咖啡 true:咖博士
/// </summary>
public static bool CoffeeKind { get; set; } = true;
}
}

+ 11
- 6
BPASmartClient.S7Net/SiemensHelper.cs 查看文件

@@ -94,19 +94,24 @@ namespace BPASmartClient.S7Net
TResult sourceClass = new TResult();
int num = (int)EntityClassResolution.GetClassSize(sourceClass);
if (num <= 0) return sourceClass;
byte[] array = myPlc.ReadBytes(DataType.DataBlock, db, startByteAdr, num);
EntityClassResolution.FromBytes(sourceClass, array);
if (IsConnected)
{
byte[] array = myPlc.ReadBytes(DataType.DataBlock, db, startByteAdr, num);
EntityClassResolution.FromBytes(sourceClass, array);
}
return sourceClass;
}

public void WriteClass<TWriteModel>(TWriteModel sourceClass, int db, int startAddress = 0) where TWriteModel : class, new()
{
byte[] array = new byte[(int)EntityClassResolution.GetClassSize(sourceClass)];
EntityClassResolution.ToBytes(sourceClass, array);
myPlc.WriteBytes(DataType.DataBlock, db, startAddress, array);
if (IsConnected)
{
byte[] array = new byte[(int)EntityClassResolution.GetClassSize(sourceClass)];
EntityClassResolution.ToBytes(sourceClass, array);
myPlc.WriteBytes(DataType.DataBlock, db, startAddress, array);
}
}


//public ushort[] ReadMW(int address, int count)
//{
// if (!IsConnected) return default;


+ 4
- 4
BPASmartClient/App.config 查看文件

@@ -12,14 +12,14 @@
<add key ="Namespaces" value="DEV.test1.Config"/>-->

<!--开发环境-->
<add key="apollouri" value="http://10.2.1.21:28080/"/>
<!--<add key="apollouri" value="http://10.2.1.21:28080/"/>
<add key="AppId" value="HostComputer"/>
<add key ="Namespaces" value="DEV.Config"/>
<add key ="Namespaces" value="DEV.Config"/>-->

<!--正式环境-->
<!--<add key="apollouri" value="http://47.108.65.220:28080/"/>
<add key="apollouri" value="http://47.108.65.220:28080/"/>
<add key="appid" value="hostcomputer"/>
<add key ="namespaces" value="test1.config"/>-->
<add key ="namespaces" value="test1.config"/>

<!--阿里云上报启动方式:API 或者 LOCAL-->
<!--API :通过客户端ID,调用接口查询“设备连接信息”-->


+ 6
- 0
DosingSystem/App.config 查看文件

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="IP" value="192.168.0.15"/>
</appSettings>
</configuration>

+ 0
- 6
DosingSystem/App.xaml.cs 查看文件

@@ -28,12 +28,8 @@ namespace BPASmartClient.DosingSystem
BPASmartClient.Helper.SystemHelper.GetInstance.CreateDesktopShortcut();
MenuInit();
DataInit();
string ip = "192.168.0.15";
SiemensDevice.GetInstance.Connect(ip);
DeviceInquire.GetInstance.Init();//配料机设备上线监听,设备列表初始化
MainView mv = new MainView();

//mv.Show();
LoginView lv = new LoginView();
var res = lv.ShowDialog();
if (res != null && res == true)
@@ -57,8 +53,6 @@ namespace BPASmartClient.DosingSystem

private void MenuInit()
{
//NfcServer.GetInstance.Init();

#region 配方管理菜单
ObservableCollection<SubMenumodel> RecipeManage = new ObservableCollection<SubMenumodel>();
RecipeManage.Add(new SubMenumodel()


+ 6
- 1
DosingSystem/BPASmartClient.DosingSystem.csproj 查看文件

@@ -11,12 +11,17 @@
<EnforceCodeStyleInBuild>True</EnforceCodeStyleInBuild>
</PropertyGroup>

<ItemGroup>
<None Remove="App.config" />
<None Remove="tsconfig1.json" />
</ItemGroup>

<ItemGroup>
<Content Include="hbl.ico" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="BPA.Helper" Version="1.0.22" />
<PackageReference Include="BPA.Helper" Version="1.0.25" />
<PackageReference Include="BPA.Message" Version="1.0.46" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>


+ 6
- 3
DosingSystem/Model/DeviceInquire.cs 查看文件

@@ -52,10 +52,11 @@ namespace BPASmartClient.DosingSystem
BottomDeviceCurrentStatuses.ElementAt(BottomIndex).DeviceNum = DeviceLists.ElementAt(i).Value.deviceStatus.DeviceNum;
}

int deviceIndex = Array.FindIndex(devices.ToArray(), p => p.IpAddress == DeviceLists.ElementAt(i).Key && p.DeviceName != DeviceLists.ElementAt(i).Value.DeviceName);
int deviceIndex = Array.FindIndex(devices.ToArray(), p => p.IpAddress == DeviceLists.ElementAt(i).Key/* && p.DeviceName != DeviceLists.ElementAt(i).Value.DeviceName && p.DeviceNum != DeviceLists.ElementAt(i).Value.deviceStatus.DeviceNum*/);
if (deviceIndex >= 0 && deviceIndex < devices.Count)
{
devices.ElementAt(deviceIndex).DeviceName = DeviceLists.ElementAt(i).Value.DeviceName;
devices.ElementAt(deviceIndex).DeviceNum = DeviceLists.ElementAt(i).Value.deviceStatus.DeviceNum;
}
}
Thread.Sleep(200);
@@ -113,9 +114,10 @@ namespace BPASmartClient.DosingSystem
{
if (!string.IsNullOrEmpty(Json<DevicePar>.Data.BaseParModel.NetworkSegAddress)) IPSegment = Json<DevicePar>.Data.BaseParModel.NetworkSegAddress;
else Json<DevicePar>.Data.BaseParModel.NetworkSegAddress = IPSegment;
TestData();
//TestData();
IpAddressLines();
//DeviceDataInit();
SiemensDevice.GetInstance.Connect(Json<DevicePar>.Data.BaseParModel.DeviceAddress);
DeviceDataInit();
ThreadManage.GetInstance().StartLong(new Action(() =>
{
if (IPQueues.Count >= IPLists.Count)
@@ -305,6 +307,7 @@ namespace BPASmartClient.DosingSystem
modbusTcp.ShowEx = new Action<string>((s) => { MessageNotify.GetInstance.ShowRunLog(s); });
this.DeviceName = DeviceName;
AlarmHelper<AlarmInfo>.Init();
if (modbusTcp.Connected)
{
ThreadManage.GetInstance().StartLong(new Action(() =>


+ 4
- 0
DosingSystem/Model/StockStatusModel.cs 查看文件

@@ -14,11 +14,13 @@ namespace BPASmartClient.DosingSystem
/// </summary>
public double MaterialWeight { get { return _materialWeight; } set { _materialWeight = value; OnPropertyChanged(); } }
private double _materialWeight;

/// <summary>
/// 料仓物料名称
/// </summary>
public string MaterialName { get { return _materialName; } set { _materialName = value; OnPropertyChanged(); } }
private string _materialName;

/// <summary>
/// 是否真在运行
/// </summary>
@@ -48,10 +50,12 @@ namespace BPASmartClient.DosingSystem
/// </summary>
public int IssueStatus { get { return _isIssueStatus; } set { _isIssueStatus = value; OnPropertyChanged(); } }
private int _isIssueStatus;

/// <summary>
/// 下料重量
/// </summary>
public double IssueWeight { get { return _IssueWeight; } set { _IssueWeight = value; OnPropertyChanged(); } }
private double _IssueWeight;

}
}

+ 1
- 1
DosingSystem/Model/par/BasePar.cs 查看文件

@@ -24,7 +24,7 @@ namespace BPASmartClient.DosingSystem
/// 输送带设备 PLC IP 地址
/// </summary>
public string DeviceAddress { get { return _mDeviceAddress; } set { _mDeviceAddress = value; OnPropertyChanged(); } }
private string _mDeviceAddress = "192.168.0.1";
private string _mDeviceAddress = "192.168.0.15";

/// <summary>
/// 输送带数量


+ 0
- 1
DosingSystem/Model/par/DevicePar.cs 查看文件

@@ -17,7 +17,6 @@ namespace BPASmartClient.DosingSystem

public ObservableCollection<OutletInfoModel> OutletInfoModels { get; set; } = new ObservableCollection<OutletInfoModel>();


public BasePar BaseParModel { get { return _mBaseParModel; } set { _mBaseParModel = value; OnPropertyChanged(); } }
private BasePar _mBaseParModel = new BasePar();



+ 10
- 9
DosingSystem/Service/SiemensDevice.cs 查看文件

@@ -22,11 +22,17 @@ namespace BPASmartClient.DosingSystem

public void Connect(string ip)
{
//GlobalDevice.PlcData = MySiemens.ReadClass<PlcToComputer>(3);//获取PLC到上位机的数据
while (!MySiemens.IsConnected)
try
{
MySiemens.Connect(S7.Net.CpuType.S71200, ip);
Thread.Sleep(2000);
while (!MySiemens.IsConnected)
{
MySiemens.Connect(S7.Net.CpuType.S71200, ip);
Thread.Sleep(2000);
}
}
catch (Exception ex)
{
}
IsConnect = MySiemens.IsConnected;
bool tempValue = false;
@@ -41,7 +47,6 @@ namespace BPASmartClient.DosingSystem
{
if (IsConnect)
{
//测试使用
GlobalDevice.PlcData = MySiemens.ReadClass<PlcToComputer>(3);//获取PLC到上位机的数据
var res = MySiemens.Read(DataType.DataBlock, 4, 134, VarType.Word, 32);
if (res != null && res is ushort[] ushorts && ushorts.Length == 32)
@@ -80,11 +85,7 @@ namespace BPASmartClient.DosingSystem
return Add;
}
return default;


}



}
}

+ 1
- 1
DosingSystem/View/NewRecipeView.xaml.cs 查看文件

@@ -31,7 +31,7 @@ namespace BPASmartClient.DosingSystem.View

private void cb_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ActionManage.GetInstance.SendAsync("原料选择修改", (sender as ComboBox).SelectedValue);
//ActionManage.GetInstance.SendAsync("原料选择修改", (sender as ComboBox).SelectedValue);
}
}
}

+ 0
- 1
DosingSystem/ViewModel/ChangeDeviceNameViewModel.cs 查看文件

@@ -49,7 +49,6 @@ namespace BPASmartClient.DosingSystem.ViewModel
}
}
}

});
}



+ 0
- 1
DosingSystem/ViewModel/ConveyerBeltManualViewModel.cs 查看文件

@@ -23,7 +23,6 @@ namespace BPASmartClient.DosingSystem.ViewModel
});
}
}

public ObservableCollection<ConveyerBeltModel> ConveyerBeltModels { get; set; } = new ObservableCollection<ConveyerBeltModel>();
}
}

+ 3
- 4
DosingSystem/ViewModel/NewRecipeViewModel.cs 查看文件

@@ -17,15 +17,15 @@ namespace BPASmartClient.DosingSystem.ViewModel
public NewRecipeViewModel()
{
ActionManage.GetInstance.RegisterAsync(new Action<object>((o) =>
{
{
if (!string.IsNullOrEmpty(o?.ToString()))
{
if (RawMaterials.FirstOrDefault(p => p.RawMaterialName == o.ToString()) != null)
{
App.Current.Dispatcher.Invoke(() => { MessageNotify.GetInstance.ShowDialog("前原料和其它原料重复,请重新选择!", DialogType.Warning); });
App.Current.Dispatcher.Invoke(() => { MessageNotify.GetInstance.ShowDialog("前原料和其它原料重复,请重新选择!", DialogType.Warning); });
}
}
}), "原料选择修改");
}), "原料选择修改");
ActionManage.GetInstance.Register(new Action<object>((o) =>
{
if (o != null && o is RecipeModel rm)
@@ -74,7 +74,6 @@ namespace BPASmartClient.DosingSystem.ViewModel
SaveCommand = new RelayCommand(() =>
{
if (string.IsNullOrEmpty(RecipeName)) { MessageNotify.GetInstance.ShowDialog("请输入配方名称!", DialogType.Warning); ErrorInfo = "请输入配方名称"; return; }

var tempRes = RawMaterials.GroupBy(p => p.RawMaterialName);
if (tempRes.Count() != RawMaterials.Count)
{


+ 255
- 37
DosingSystem/ViewModel/RecipeControlViewModel.cs 查看文件

@@ -90,7 +90,8 @@ namespace BPASmartClient.DosingSystem.ViewModel
#region 配方下发到PLC操作相关
//配方数据写入到输送机
var res = Json<LocaPar>.Data.Recipes.FirstOrDefault(p => p.RecipeName == CurrentRecipeName);
List<int> recipeData = new List<int>();
/*List<int> recipeData = new List<int>();*/
List<int> BarrelNum = new List<int>();
if (res != null)
{
var tInfo = res.RawMaterials.GroupBy(p => p.Loc);//获取桶号信息
@@ -105,27 +106,47 @@ namespace BPASmartClient.DosingSystem.ViewModel
var tempDevice = DeviceInquire.GetInstance.devices.FirstOrDefault(p => p.DeviceName == TempName);
if (tempDevice != null)
{
data = data.SetBitValue((byte)tempDevice.DeviceNum, true);
/*data = data.SetBitValue((byte)tempDevice.DeviceNum, true);*/
if (tempDevice.DeviceNum > 0)
{
int a = data.SetBitValue((byte)tInfo.ElementAt(i).ElementAt(m).Loc, true);
byte[] test1 = a.ToBytes(BPA.Helper.DataFormat.ABCD);
int item = test1.ToInt();
SiemensDevice.GetInstance.MySiemens.Write($"DB4.DBD{2 + (tempDevice.DeviceNum - 1) * 4}", item);
MessageNotify.GetInstance.ShowRunLog($"下发配方DB4.DBD{2 + (tempDevice.DeviceNum - 1) * 4} :{item.ToBinString()}");
}
}
if (tInfo.ElementAt(i).ElementAt(m).Loc >0)
{
if (!BarrelNum.Contains(tInfo.ElementAt(i).ElementAt(m).Loc))
{
BarrelNum.Add(tInfo.ElementAt(i).ElementAt(m).Loc);
}
}
}
recipeData.Add(data);
/*recipeData.Add(data);*/

}
}
}
if (recipeData.Count <= 0)
SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD198", BarrelNum.Count);//配方使用桶数写入
/*if (recipeData.Count <= 0)
{
MessageNotify.GetInstance.ShowRunLog("配方数据解析失败");
return;
}
int offset = 2;
}*/
/*int offset = 2;
//写入配方数据
MessageNotify.GetInstance.ShowRunLog("开始写入配方数据");
recipeData.ForEach(item =>
{
byte[] test1 = item.ToBytes(BPA.Helper.DataFormat.ABCD);
item = test1.ToInt();
SiemensDevice.GetInstance.MySiemens.Write($"DB4.DBD{offset}", item);
MessageNotify.GetInstance.ShowRunLog($"下发配方DB4.DBD{offset} :{item.ToBinString()}");
offset = offset += 4;
});
SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD198", recipeData.Count);//配方使用桶数写入
});*/
/*SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD198", recipeData.Count);//配方使用桶数写入*/
SiemensDevice.GetInstance.MySiemens.Write("DB4.DBX0.1", true);//配方执行启动
Stopwatch sw = new Stopwatch();
var recipe = Recipes.ElementAt(index);
@@ -246,48 +267,244 @@ namespace BPASmartClient.DosingSystem.ViewModel
if (index >= 0 && index < recipeProcesses.ElementAt(recIndex).RawMaterials.Count)
{
//测试使用
//recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(index).RecipeStatus = RunStatus;
recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(index).RecipeStatus = RunStatus;
}
for (int j = 0; j < GlobalDevice.PlcData.IsAllowIngredients.Length; j++)
{
if (GlobalDevice.PlcData.IsAllowIngredients[j])
{
int cnt = j + 1;//获取允许配料信号桶号的料仓位置
int Raw_Loc = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.Loc == cnt);
int Device_Loc = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == cnt);
if (Raw_Loc >= 0 && Device_Loc >= 0)
int barrel = j + 1;//桶号
int cnt = GlobalDevice.PlcData.LocationFeedback[j];//允许配料的位置 0~6
int Location1 = 0;
int Location2 = 0;
if (cnt == -1)
{
MessageNotify.GetInstance.ShowRunLog("错误");
return;
}
else
{
float weight = Recipes.ElementAt(i).RawMaterials.ElementAt(Raw_Loc).RawMaterialWeight;
string deviceName = DeviceInquire.GetInstance.devices.ElementAt(Device_Loc).DeviceName;
int loc = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == deviceName);
if (cnt > 0 && loc >= 0 && deviceName != null && weight >= 0)
switch (cnt)
{
int St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == deviceName);
if (St_index < 0)
case 1:
int a1 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == 1);
int b1 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == 2);
if (a1 >= 0)
{
Location1 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(a1).DeviceName && p.Loc == barrel);
}
if (b1 >= 0)
{
Location2 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(b1).DeviceName && p.Loc == barrel);
}
break;
case 2:
int a2 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == 3);
int b2 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == 4);
if (a2 >= 0)
{
Location1 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(a2).DeviceName && p.Loc == barrel);
}
if (b2 >= 0)
{
Location2 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(b2).DeviceName && p.Loc == barrel);
}
break;
case 3:
int a3 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == 5);
int b3 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == 6);
if (a3 >= 0)
{
Location1 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(a3).DeviceName && p.Loc == barrel);
}
if (b3 >= 0)
{
Location2 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(b3).DeviceName && p.Loc == barrel);
}
break;
case 4:
int a4 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == 7);
int b4 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == 8);
if (a4 >= 0)
{
Location1 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(a4).DeviceName && p.Loc == barrel);
}
if (b4 >= 0)
{
Location2 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(b4).DeviceName && p.Loc == barrel);
}
break;
case 5:
int a5 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == 9);
int b5 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == 10);
if (a5 >= 0)
{
Location1 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(a5).DeviceName && p.Loc == barrel);
}
if (b5 >= 0)
{
Location2 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(b5).DeviceName && p.Loc == barrel);
}
break;
case 6:
int a6 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == 11);
int b6 = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceNum == 12);
if (a6 >= 0)
{
Location1 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(a6).DeviceName && p.Loc == barrel);
}
if (b6 >= 0)
{
Location2 = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == DeviceInquire.GetInstance.devices.ElementAt(b6).DeviceName && p.Loc == barrel);
}
break;
default:
break;
}
}
if (Location1 >= 0)
{
string RawName = Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).RawMaterialName;
int abc = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceName == RawName);
int DeviceNum = DeviceInquire.GetInstance.devices.ElementAt(abc).DeviceNum;
if (DeviceNum > 0)
{
float weight = Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).RawMaterialWeight;
int loc = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == RawName);
if (loc >= 0 && RawName != null && weight >= 0)
{
StockStatus.Add(new StockStatusModel()
int St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
if (St_index < 0)
{
StockStatus.Add(new StockStatusModel()
{
MaterialName = RawName,
IssueWeight = weight,
IssueStatus = 0,
});
}
St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
if (St_index >= 0)
{
MaterialName = deviceName,
IssueWeight = weight,
IssueStatus = 0,
});
if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 1 && StockStatus.ElementAt(St_index).IssueStatus == 0)
{
StockStatus.ElementAt(St_index).IssueStatus = 1;
DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).Start(weight);
MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},开始出料");
}
if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 3 && StockStatus.ElementAt(St_index).IssueStatus == 1)
{
//GlobalDevice.PlcData.IsAllowIngredients[j] = false;//测试使用
StockStatus.ElementAt(St_index).IssueStatus = 2;
DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).StatusReset();
int a = 0.SetBitValue((byte)(DeviceNum), true);
byte[] test1 = a.ToBytes(BPA.Helper.DataFormat.ABCD);
int item = test1.ToInt();
SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD130", item);
MessageNotify.GetInstance.ShowRunLog($"DB4.DBD130:{item.ToBinString()}");
MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},出料完成,状态复位");
}
}
}
St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == deviceName);
if (St_index >= 0)
}
}
if (Location1 >= 0)
{

string RawName111 = Recipes.ElementAt(i).RawMaterials.ElementAt(Location1).RawMaterialName;
int St_index111 = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName111);
if (Location2 >= 0 && ((Location1 >= 0 && StockStatus.ElementAt(St_index111).IssueStatus == 2)))
{
string RawName = Recipes.ElementAt(i).RawMaterials.ElementAt(Location2).RawMaterialName;
int abc = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceName == RawName);
int DeviceNum = DeviceInquire.GetInstance.devices.ElementAt(abc).DeviceNum;
if (DeviceNum > 0)
{
if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 1 && StockStatus.ElementAt(St_index).IssueStatus == 0)
float weight = Recipes.ElementAt(i).RawMaterials.ElementAt(Location2).RawMaterialWeight;
int loc = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == RawName);
if (loc >= 0 && RawName != null && weight >= 0)
{
StockStatus.ElementAt(St_index).IssueStatus = 1;
DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).Start(weight);
MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},开始出料");
int St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
if (St_index < 0)
{
StockStatus.Add(new StockStatusModel()
{
MaterialName = RawName,
IssueWeight = weight,
IssueStatus = 0,
});
}
St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
if (St_index >= 0)
{
if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 1 && StockStatus.ElementAt(St_index).IssueStatus == 0)
{
StockStatus.ElementAt(St_index).IssueStatus = 1;
DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).Start(weight);
MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},开始出料");
}
if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 3 && StockStatus.ElementAt(St_index).IssueStatus == 1)
{
//GlobalDevice.PlcData.IsAllowIngredients[j] = false;//测试使用
StockStatus.ElementAt(St_index).IssueStatus = 2;
DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).StatusReset();
int a = 0.SetBitValue((byte)(DeviceNum), true);
byte[] test1 = a.ToBytes(BPA.Helper.DataFormat.ABCD);
int item = test1.ToInt();
SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD130", item);
MessageNotify.GetInstance.ShowRunLog($"DB4.DBD130:{item.ToBinString()}");
MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},出料完成,状态复位");
}
}
}
if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 3 && StockStatus.ElementAt(St_index).IssueStatus == 1)
}
}
}
else
{
if (Location2 >= 0)
{
string RawName = Recipes.ElementAt(i).RawMaterials.ElementAt(Location2).RawMaterialName;
int abc = Array.FindIndex(DeviceInquire.GetInstance.devices.ToArray(), p => p.DeviceName == RawName);
int DeviceNum = DeviceInquire.GetInstance.devices.ElementAt(abc).DeviceNum;
if (DeviceNum >= 0)
{
float weight = Recipes.ElementAt(i).RawMaterials.ElementAt(Location2).RawMaterialWeight;
int loc = Array.FindIndex(Recipes.ElementAt(i).RawMaterials.ToArray(), p => p.RawMaterialName == RawName);
if (cnt > 0 && loc >= 0 && RawName != null && weight >= 0)
{
GlobalDevice.PlcData.IsAllowIngredients[j] = false;//测试使用
StockStatus.ElementAt(St_index).IssueStatus = 2;
DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).StatusReset();
SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD130", 0.SetBitValue((byte)loc, true));
MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},出料完成,状态复位");
int St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
if (St_index < 0)
{
StockStatus.Add(new StockStatusModel()
{
MaterialName = RawName,
IssueWeight = weight,
IssueStatus = 0,
});
}
St_index = Array.FindIndex(StockStatus.ToArray(), p => p.MaterialName == RawName);
if (St_index >= 0)
{
if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 1 && StockStatus.ElementAt(St_index).IssueStatus == 0)
{
StockStatus.ElementAt(St_index).IssueStatus = 1;
DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).Start(weight);
MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},开始出料");
}
if (recipeProcesses.ElementAt(recIndex).RawMaterials.ElementAt(loc).RecipeStatus == 3 && StockStatus.ElementAt(St_index).IssueStatus == 1)
{
//GlobalDevice.PlcData.IsAllowIngredients[j] = false;//测试使用
StockStatus.ElementAt(St_index).IssueStatus = 2;
DeviceInquire.GetInstance.GetDevice(Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp).StatusReset();
int a = 0.SetBitValue((byte)(DeviceNum), true);
byte[] test1 = a.ToBytes(BPA.Helper.DataFormat.ABCD);
int item = test1.ToInt();
SiemensDevice.GetInstance.MySiemens.Write("DB4.DBD130", item);
MessageNotify.GetInstance.ShowRunLog($"DB4.DBD130:{item.ToBinString()}");
MessageNotify.GetInstance.ShowRunLog($"柔性味魔方{Recipes.ElementAt(i).RawMaterials.ElementAt(loc).DeviceIp},出料完成,状态复位");
}
}
}
}
}
@@ -298,7 +515,8 @@ namespace BPASmartClient.DosingSystem.ViewModel
if (StockStatus.Count >= Recipes.ElementAt(i).RawMaterials.Count && Finish_Count >= Recipes.ElementAt(i).RawMaterials.Count) //配方配料完成
{
StockStatus.Clear();
SiemensDevice.GetInstance.MySiemens.Write("DB4.DBX202.1", true);//配方使用桶数写入
SiemensDevice.GetInstance.MySiemens.Write("DB4.DBX202.1", true);//配料完成
MessageNotify.GetInstance.ShowRunLog($"配料完成");
int recipIndex = Array.FindIndex(Recipes.ToArray(), p => p.RecipeName == CurrentRecipeName);
App.Current.Dispatcher.Invoke(new Action(() => { recipeProcesses.Clear(); }));
Recipes.ElementAt(recipIndex).IsEnable = true;


+ 3
- 10
DosingSystem/ViewModel/RecipeSettingsViewModel.cs 查看文件

@@ -72,16 +72,9 @@ namespace BPASmartClient.DosingSystem.ViewModel
var res = Json<LocaPar>.Data.Recipes.FirstOrDefault(p => p.RecipeName == o.ToString());
if (res != null)
{
if (res.IsEnable)
{
NewRecipeView nrv = new NewRecipeView();
ActionManage.GetInstance.Send("Details", res);
nrv.ShowDialog();
}
else
{
NoticeDemoViewModel.OpenMsg(EnumPromptType.Error, App.MainWindow, "提示", $"编辑【{o.ToString()}】配方失败,配方正在使用!");
}
NewRecipeView nrv = new NewRecipeView();
ActionManage.GetInstance.Send("Details", res);
nrv.ShowDialog();
}
//MessageLog.GetInstance.ShowUserLog($"编辑配方名称——{res.RecipeName}");
}


+ 0
- 1
DosingSystem/ViewModel/StockControViewModel.cs 查看文件

@@ -28,7 +28,6 @@ namespace BPASmartClient.DosingSystem.ViewModel
// }
// });
//});

statusTop = DeviceInquire.GetInstance.TopDeviceCurrentStatuses;
statusDown = DeviceInquire.GetInstance.BottomDeviceCurrentStatuses;



+ 13
- 0
DosingSystem/tsconfig1.json 查看文件

@@ -0,0 +1,13 @@
{
"compilerOptions": {
"noImplicitAny": false,
"noEmitOnError": true,
"removeComments": false,
"sourceMap": true,
"target": "es5"
},
"exclude": [
"node_modules",
"wwwroot"
]
}

Loading…
取消
儲存