using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WCS.DAL.Db; using WCS.DAL.DbModels; namespace WCS.BLL.HardWare { public class SmartShelfModule : IModuleBase { #region 协议 /// /// 进入入库模式 /// public byte[] GoInInstoreData = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; /// /// 确认入库 /// public byte[] ComfirmInstoreData = { 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; public byte[] ComfirmErrInstoreData = { 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; /// /// 退出入库模式 /// public byte[] GoOutInstoreData = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; /// /// 自检模式 /// public byte[] CheckModeData = { 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; #endregion public int ModuleId { get; set; } public string ModuleCode { get; set; } public int BoardId { get; set; } public bool IsEnable { get; set; } public Mode CurrentMode { get; set; } public void SetCurrentMode() { } public void GoInInstoreMode(TCPClient tcpClient) { if (CurrentMode != Mode.待机模式) { //TO DO 退出对应的模式 然后再发送进入入库模式 } var storeInfos = DbHelp.db.Queryable() .Where(t => t.BoardId == BoardId) .OrderBy(t => t.LightNumber) .ToList(); char[] data = "0000000000000000".ToCharArray(); var boardStoreNumber = storeInfos.Count(); foreach (var storeInfo in storeInfos) { if (!string.IsNullOrEmpty(storeInfo.CurrentMatSn) && storeInfo.LightNumber > 0 && storeInfo.LightNumber <= boardStoreNumber) { data[storeInfo.LightNumber - 1] = '1'; } } var dataStr = string.Join("", data.Reverse()); var data1 = dataStr.Substring(8, 8); var data2 = dataStr.Substring(0, 8); GoInInstoreData[1] = Convert.ToByte(data1, 2); GoInInstoreData[2] = Convert.ToByte(data2, 2); tcpClient.Send(tcpClient.GenerateMessage(BoardId, GoInInstoreData)); } public void ComfirmInstore(TCPClient tcpClient) { tcpClient.Send(tcpClient.GenerateMessage(BoardId, ComfirmInstoreData)); } public void ComfirmErrInstore(TCPClient tcpClient) { tcpClient.Send(tcpClient.GenerateMessage(BoardId, ComfirmErrInstoreData)); } public void GoOutInstoreMode(TCPClient tcpClient) { if (CurrentMode == Mode.入库模式) { tcpClient.Send(tcpClient.GenerateMessage(BoardId, GoOutInstoreData)); } else { //退出对应的模式 回到待机状态 并记录对应的状态日志(这个分支肯定是异常了) //记录错误日志 } } public void ShelfCheck(TCPClient tcpClient) { if (CurrentMode != Mode.待机模式) { //TO DO 退出对应的模式 然后再发送进入入库模式 } var storeInfos = DbHelp.db.Queryable() .Where(t => t.BoardId == BoardId) .OrderBy(t => t.LightNumber) .ToList(); char[] data = "0000000000000000".ToCharArray(); var boardStoreNumber = storeInfos.Count(); foreach (var storeInfo in storeInfos) { if (!string.IsNullOrEmpty(storeInfo.CurrentMatSn) && storeInfo.LightNumber > 0 && storeInfo.LightNumber <= boardStoreNumber) { data[storeInfo.LightNumber - 1] = '1'; } } var dataStr = string.Join("", data.Reverse()); var data1 = dataStr.Substring(8, 8); var data2 = dataStr.Substring(0, 8); CheckModeData[1] = Convert.ToByte(data1, 2); CheckModeData[2] = Convert.ToByte(data2, 2); tcpClient.Send(tcpClient.GenerateMessage(BoardId, CheckModeData)); } } }