@@ -134,6 +134,7 @@ namespace HBLConsole.Business.AbstractServer | |||||
/// <returns></returns> | /// <returns></returns> | ||||
public override bool OrderStatusChange(string subOrderId, ORDER_STATUS status) | public override bool OrderStatusChange(string subOrderId, ORDER_STATUS status) | ||||
{ | { | ||||
return false; | |||||
string result = string.Empty; | string result = string.Empty; | ||||
OrderStatusChange orderStatusChange = new OrderStatusChange() { CookingStatus = status, SuborderId = subOrderId }; | OrderStatusChange orderStatusChange = new OrderStatusChange() { CookingStatus = status, SuborderId = subOrderId }; | ||||
try | try | ||||
@@ -19,11 +19,6 @@ namespace HBLConsole.Communication | |||||
private MCUSerialHelper() { } | private MCUSerialHelper() { } | ||||
private SerialPort comPort = new SerialPort(); | private SerialPort comPort = new SerialPort(); | ||||
ConcurrentQueue<byte[]> SerialMessages = new ConcurrentQueue<byte[]>(); | |||||
//帧尾 | |||||
private byte end = 0xDD; | |||||
//帧头 | |||||
private byte start = 0xCC; | |||||
public bool IsOpen => comPort.IsOpen; | public bool IsOpen => comPort.IsOpen; | ||||
public bool Open(string portName, int baudRate) | public bool Open(string portName, int baudRate) | ||||
@@ -41,8 +36,9 @@ namespace HBLConsole.Communication | |||||
comPort.StopBits = StopBits.One; | comPort.StopBits = StopBits.One; | ||||
comPort.ReadTimeout = 1000; | comPort.ReadTimeout = 1000; | ||||
comPort.WriteTimeout = 1000; | comPort.WriteTimeout = 1000; | ||||
comPort.DataReceived += ComPort_DataReceived; | |||||
comPort.RtsEnable = true; | |||||
//comPort.RtsEnable = true; //设置为 true后会读取不到数据 | |||||
//comPort.DtrEnable = true;//获取或设置一个值,该值在串行通信过程中启用数据终端就绪 (DTR) 信号。 | |||||
//comPort.RtsEnable = true;//获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号 | |||||
try | try | ||||
{ | { | ||||
comPort.Open(); | comPort.Open(); | ||||
@@ -57,28 +53,6 @@ namespace HBLConsole.Communication | |||||
return comPort.IsOpen; | return comPort.IsOpen; | ||||
} | } | ||||
private void ComPort_DataReceived(object sender, SerialDataReceivedEventArgs e) | |||||
{ | |||||
int len = comPort.BytesToRead; | |||||
if (len <= 0) return; | |||||
byte[] receive = new byte[len]; | |||||
comPort.Read(receive, 0, receive.Length); | |||||
if (receive[len - 1] != end) return; | |||||
List<byte> ReceiveList = new List<byte>(); | |||||
for (int i = 0; i < receive.Length; i++) | |||||
{ | |||||
ReceiveList.Add(receive[i]); | |||||
if (ReceiveList.Count > 0) | |||||
{ | |||||
if (ReceiveList.ElementAt(0) == start && ReceiveList.ElementAt(ReceiveList.Count - 1) == end) | |||||
{ | |||||
SerialMessages.Enqueue(ReceiveList.ToArray()); | |||||
ReceiveList.Clear(); | |||||
} | |||||
} | |||||
} | |||||
comPort.DiscardInBuffer(); | |||||
} | |||||
/// <summary> | /// <summary> | ||||
/// 单片机输出端口控制 | /// 单片机输出端口控制 | ||||
@@ -87,13 +61,9 @@ namespace HBLConsole.Communication | |||||
/// <param name="value">控制值</param> | /// <param name="value">控制值</param> | ||||
public void OutputControl(byte index, bool value) | public void OutputControl(byte index, bool value) | ||||
{ | { | ||||
byte NumValue = (byte)(value ? 1 : 0); | |||||
byte NumValue = (byte)(value ? 0x01 : 0x00); | |||||
byte[] buffers = new byte[6] { 0xCC, 0x01, 0x01, index, NumValue, 0xDD }; | byte[] buffers = new byte[6] { 0xCC, 0x01, 0x01, index, NumValue, 0xDD }; | ||||
if (comPort.IsOpen) | |||||
{ | |||||
comPort.Write(buffers, 0, buffers.Length); | |||||
} | |||||
if (IsOpen) comPort.Write(buffers, 0, buffers.Length); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -104,10 +74,7 @@ namespace HBLConsole.Communication | |||||
public void ServoControl(byte index, byte value) | public void ServoControl(byte index, byte value) | ||||
{ | { | ||||
byte[] buffers = new byte[6] { 0xCC, 0x01, 0x02, index, value, 0xDD }; | byte[] buffers = new byte[6] { 0xCC, 0x01, 0x02, index, value, 0xDD }; | ||||
if (comPort.IsOpen) | |||||
{ | |||||
comPort.Write(buffers, 0, buffers.Length); | |||||
} | |||||
if (IsOpen) comPort.Write(buffers, 0, buffers.Length); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -119,21 +86,28 @@ namespace HBLConsole.Communication | |||||
{ | { | ||||
if (index <= 0 || index > 8) return false; | if (index <= 0 || index > 8) return false; | ||||
byte[] buffers = new byte[6] { 0xCC, 0x01, 0x03, index, 0x00, 0xDD }; | byte[] buffers = new byte[6] { 0xCC, 0x01, 0x03, index, 0x00, 0xDD }; | ||||
if (comPort.IsOpen) | |||||
if (IsOpen) | |||||
{ | { | ||||
comPort.Write(buffers, 0, buffers.Length); | comPort.Write(buffers, 0, buffers.Length); | ||||
while (SerialMessages.Count <= 0) | |||||
DateTime dt = DateTime.Now; | |||||
List<byte> receive = new List<byte>(); | |||||
while (true) | |||||
{ | { | ||||
byte[] re = new byte[comPort.BytesToRead]; | |||||
comPort.Read(re, 0, re.Length); | |||||
if (re.Contains<byte>(0xcc) && re.Contains<byte>(0xDD)) receive.AddRange(re); | |||||
comPort.DiscardInBuffer(); | |||||
if (receive.Contains(0xcc) && receive.Contains(0xdd)) break; | |||||
if (DateTime.Now.Subtract(dt).TotalSeconds >= 2) break; | |||||
Thread.Sleep(1); | Thread.Sleep(1); | ||||
} | } | ||||
if (SerialMessages.TryDequeue(out byte[] receive)) | |||||
if (receive != null) | |||||
{ | { | ||||
if (receive.Length == 6) | |||||
int Reindex = Array.FindIndex(receive.ToArray(), p => p == 0xcc); | |||||
if (Reindex < receive.Count && Reindex >= 0) | |||||
{ | { | ||||
if (receive[2] == 0x03) | |||||
{ | |||||
return receive[4] == 0x01; | |||||
} | |||||
var res = receive.GetRange(Array.FindIndex(receive.ToArray(), p => p == 0xcc), 6); | |||||
return res != null && res.Count() == 6 && res.ElementAt(4) == 0x01; | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -202,7 +202,7 @@ namespace HBLConsole.Communication | |||||
} | } | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 读取数据 | /// 读取数据 | ||||
/// </summary> | /// </summary> | ||||
@@ -215,7 +215,7 @@ namespace HBLConsole.Communication | |||||
if (!(comPort.IsOpen)) comPort.Open(); | if (!(comPort.IsOpen)) comPort.Open(); | ||||
byte[] buffer = new byte[1024]; | byte[] buffer = new byte[1024]; | ||||
comPort.Read(buffer, 0, buffer.Length); | comPort.Read(buffer, 0, buffer.Length); | ||||
return buffer; | |||||
return buffer; | |||||
} | } | ||||
} | } | ||||
public void Start() | public void Start() | ||||
@@ -474,7 +474,9 @@ namespace HBLConsole.MORKM | |||||
{ | { | ||||
if (mORKS.RBTakeNoodleTask.TryDequeue(out OrderLocInfo orderLocInfo)) | if (mORKS.RBTakeNoodleTask.TryDequeue(out OrderLocInfo orderLocInfo)) | ||||
{ | { | ||||
mORKS.CookNodelId[loc] = orderLocInfo.SuborderId; | |||||
mORKS.CookNodelId.ElementAt(loc).CookNodelId = orderLocInfo.SuborderId; | |||||
mORKS.CookNodelId.ElementAt(loc).Loc = mORKS.TurntableFeedbackloc; | |||||
SetFallNoodleLoc((ushort)(loc + 1)); | SetFallNoodleLoc((ushort)(loc + 1)); | ||||
//机器人开始取面 | //机器人开始取面 | ||||
RobotTakeNoodle(); | RobotTakeNoodle(); | ||||
@@ -500,28 +502,86 @@ namespace HBLConsole.MORKM | |||||
{ | { | ||||
if (mORKS.AllowFallNoodle && mORKS.RobotTaskInterlock && !mORKS.TakeNoodleInterlock && mORKS.RobotIdle && !mORKS.TakeMealDetect) | if (mORKS.AllowFallNoodle && mORKS.RobotTaskInterlock && !mORKS.TakeNoodleInterlock && mORKS.RobotIdle && !mORKS.TakeMealDetect) | ||||
{ | { | ||||
int loc = Array.FindIndex(mORKS.CookNodelId, p => p == mORKS.IngredientsCompleteId && p.Length > 0); | |||||
if (loc >= 0 && loc <= 5) | |||||
var CookNodelIdList = mORKS.CookNodelId.Where(p => p.CookNodelId == mORKS.IngredientsCompleteId && p.CookNodelId.Length > 0).ToList(); | |||||
if (CookNodelIdList != null) | |||||
{ | { | ||||
if (mORKS.CookNoodlesComplete[loc]) | |||||
var res = mORKS.RBTakeNoodleTask.FirstOrDefault(p => p.SuborderId == mORKS.IngredientsCompleteId); | |||||
if (res == null)//排队订单中不存在该订单 | |||||
{ | { | ||||
SetTakeNoodleLoc((ushort)(loc + 1)); | |||||
RobotOutMeal(); | |||||
CookNoodleStatusReset((ushort)(loc + 1)); | |||||
ResetAllowFallNoodle(); | |||||
mORKS.OutMealId = mORKS.IngredientsCompleteId; | |||||
mORKS.IngredientsCompleteId = string.Empty; | |||||
mORKS.CookNodelId[loc] = string.Empty; | |||||
if (mORKS.CookNodelId.GetIndex(mORKS.OutMealId) < 0) | |||||
var isHaveEven = CookNodelIdList.FirstOrDefault(p => p.Loc > 0 && p.Loc % 2 == 0);//偶数,判断是否有素菜 | |||||
var isHaveOddNumber = CookNodelIdList.FirstOrDefault(p => p.Loc % 2 != 0);//奇数,判断是否有荤菜 | |||||
if (isHaveEven != null) | |||||
{ | |||||
//素菜 | |||||
OutMealControl(Array.FindIndex(mORKS.CookNodelId.ToArray(), p => p.CookNodelId == isHaveEven.CookNodelId && p.CookNodelId.Length > 0)); | |||||
} | |||||
else | |||||
{ | { | ||||
CookComplete(); //告诉机器人冒菜已经煮完 | |||||
//IsAddSoup();//判断是否加汤 | |||||
if (isHaveOddNumber != null) | |||||
//荤菜 | |||||
OutMealControl(Array.FindIndex(mORKS.CookNodelId.ToArray(), p => p.CookNodelId == isHaveOddNumber.CookNodelId && p.CookNodelId.Length > 0)); | |||||
} | } | ||||
MessageLog.GetInstance.Show($"{loc + 1}号位置出餐控制"); | |||||
mORKS.OutNoodleing = true; | |||||
} | } | ||||
else//排队订单中有该订单 | |||||
{ | |||||
} | |||||
} | |||||
//int loc = Array.FindIndex(mORKS.CookNodelId.ToArray(), p => p.CookNodelId == mORKS.IngredientsCompleteId && p.CookNodelId.Length > 0); | |||||
//if (loc >= 0 && loc <= 5) | |||||
//{ | |||||
// if (mORKS.CookNoodlesComplete[loc]) | |||||
// { | |||||
// SetTakeNoodleLoc((ushort)(loc + 1)); | |||||
// RobotOutMeal(); | |||||
// CookNoodleStatusReset((ushort)(loc + 1)); | |||||
// mORKS.OutMealId = mORKS.IngredientsCompleteId; | |||||
// mORKS.IngredientsCompleteId = string.Empty; | |||||
// mORKS.CookNodelId.ElementAt(loc).CookNodelId = string.Empty; | |||||
// mORKS.CookNodelId.ElementAt(loc).Loc = -1; | |||||
// if (mORKS.RBTakeNoodleTask.FirstOrDefault(p => p.SuborderId == mORKS.OutMealId) == null && mORKS.CookNodelId.FirstOrDefault(p => p.CookNodelId == mORKS.OutMealId) == null) | |||||
// { | |||||
// CookComplete(); //告诉机器人冒菜已经煮完 | |||||
// //IsAddSoup();//判断是否加汤 | |||||
// ResetAllowFallNoodle(); | |||||
// MessageLog.GetInstance.Show($"{mORKS.OutMealId} 出餐完成"); | |||||
// } | |||||
// MessageLog.GetInstance.Show($"{loc + 1}号位置出餐控制"); | |||||
// mORKS.OutNoodleing = true; | |||||
// } | |||||
//} | |||||
} | |||||
} | |||||
private void OutMealControl(int loc) | |||||
{ | |||||
if (loc >= 0 && loc <= 5) | |||||
{ | |||||
if (mORKS.CookNoodlesComplete[loc]) | |||||
{ | |||||
SetTakeNoodleLoc((ushort)(loc + 1)); | |||||
RobotOutMeal(); | |||||
CookNoodleStatusReset((ushort)(loc + 1)); | |||||
mORKS.CookNodelId.ElementAt(loc).CookNodelId = string.Empty; | |||||
mORKS.CookNodelId.ElementAt(loc).Loc = -1; | |||||
if (mORKS.RBTakeNoodleTask.FirstOrDefault(p => p.SuborderId == mORKS.IngredientsCompleteId) == null && mORKS.CookNodelId.FirstOrDefault(p => p.CookNodelId == mORKS.IngredientsCompleteId) == null) | |||||
{ | |||||
CookComplete(); //告诉机器人冒菜已经煮完 | |||||
//IsAddSoup();//判断是否加汤 | |||||
ResetAllowFallNoodle(); | |||||
mORKS.OutMealId = mORKS.IngredientsCompleteId; | |||||
mORKS.IngredientsCompleteId = string.Empty; | |||||
MessageLog.GetInstance.Show($"{mORKS.OutMealId} 出餐完成"); | |||||
} | |||||
MessageLog.GetInstance.Show($"{loc + 1}号位置出餐控制"); | |||||
mORKS.OutNoodleing = true; | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -16,6 +16,14 @@ namespace HBLConsole.MORKM | |||||
/// </summary> | /// </summary> | ||||
public class GVL_MORKM : IGvl | public class GVL_MORKM : IGvl | ||||
{ | { | ||||
public GVL_MORKM() | |||||
{ | |||||
for (int i = 0; i < 6; i++) | |||||
{ | |||||
CookNodelId.Add(new CookNodleLocAndId() { CookNodelId = "", Loc = -1 }); | |||||
} | |||||
} | |||||
/// <summary> | /// <summary> | ||||
/// 机器人取面 | /// 机器人取面 | ||||
/// PLC -> M0.3 | /// PLC -> M0.3 | ||||
@@ -330,7 +338,9 @@ namespace HBLConsole.MORKM | |||||
/// <summary> | /// <summary> | ||||
/// 煮面口对应的订单ID | /// 煮面口对应的订单ID | ||||
/// </summary> | /// </summary> | ||||
public string[] CookNodelId = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, }; | |||||
//public string[] CookNodelId = new string[6] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, }; | |||||
public List<CookNodleLocAndId> CookNodelId { get; set; } = new List<CookNodleLocAndId>(); | |||||
/// <summary> | /// <summary> | ||||
/// 出餐订单ID | /// 出餐订单ID | ||||
@@ -350,4 +360,11 @@ namespace HBLConsole.MORKM | |||||
#endregion | #endregion | ||||
} | } | ||||
public class CookNodleLocAndId | |||||
{ | |||||
public string CookNodelId { get; set; } | |||||
public int Loc { get; set; } | |||||
} | |||||
} | } |
@@ -12,6 +12,7 @@ using HBLConsole.Business; | |||||
using HBLConsole.Factory; | using HBLConsole.Factory; | ||||
using BPA.Message.Enum; | using BPA.Message.Enum; | ||||
using System.Collections.ObjectModel; | using System.Collections.ObjectModel; | ||||
using System.Threading; | |||||
namespace HBLConsole.MainConsole | namespace HBLConsole.MainConsole | ||||
{ | { | ||||
@@ -67,6 +68,13 @@ namespace HBLConsole.MainConsole | |||||
public void BusinessInit() | public void BusinessInit() | ||||
{ | { | ||||
//MCUSerialHelper.GetInstance.Open("COM7", 9600); | |||||
//MCUSerialHelper.GetInstance.OutputControl(1, true); | |||||
//while (true) | |||||
//{ | |||||
// Thread.Sleep(1000); | |||||
//} | |||||
//var res = MCUSerialHelper.GetInstance.GetInputStatus(1); | |||||
ThreadManage.GetInstance.Start(new Action(() => | ThreadManage.GetInstance.Start(new Action(() => | ||||
{ | { | ||||
InternetInfo.ConfigInit();//从 consul 获取配置数据 | InternetInfo.ConfigInit();//从 consul 获取配置数据 | ||||