using Aurora.Api.Services; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AuroraLBAD.Services { public class StreamLBADClient : StreamClient { public enum eJudgeFlag { NO_RESPONSE = -1, OK = 0, NG, NA, FAILED, ERROR } //LBAD public const string MESSAGE_PC_LBAD_READY_STATUS = "PcLBADReadyStatus"; public const string MESSAGE_PC_LBAD_WELDING_TRIGGER = "PcLBADWeldingTrigger"; public const string MESSAGE_PC_LBAD_WELDING_STOP = "PcLBADWeldingStop"; public const string MESSAGE_PC_LBAD_JUDGEMENT_COMPLETE = "PcLBADJudgementComplete"; public const string MESSAGE_PC_LBAD_CELL_ID = "PcLBADCellID"; public const string MESSAGE_PC_LBAD_LOT_ID = "PcLBADLotID"; public StreamLBADClient(string serviceName) : base(serviceName) { AddParser(MESSAGE_PC_LBAD_READY_STATUS, new StreamNumberParser(), new StreamNumberParser()); AddParser(MESSAGE_PC_LBAD_WELDING_TRIGGER, new StreamNumberParser(), new StreamNumberParser()); AddParser(MESSAGE_PC_LBAD_WELDING_STOP, new StreamNumberParser(), new StreamNumberParser()); //용접 완료 후 LBAD측에 JudgeComplete를 요청한뒤 JudgeFlag를 회신 받는다 AddParser(MESSAGE_PC_LBAD_JUDGEMENT_COMPLETE, new StreamNumberParser(), new StreamNumberParser()); AddParser(MESSAGE_PC_LBAD_CELL_ID, new StreamStringParser(), new StreamNumberParser()); AddParser(MESSAGE_PC_LBAD_LOT_ID, new StreamStringParser(), new StreamNumberParser()); } public bool CheckReadyStatus() { int requestData = 1; var reply = RequestNReply(requestData, MESSAGE_PC_LBAD_READY_STATUS); if (reply != null) { var replyParsed = (int)reply; _Log.I($"Stream {MESSAGE_PC_LBAD_READY_STATUS} Reply Result : {replyParsed}"); return true; } else { _Log.E($"Stream {MESSAGE_PC_LBAD_READY_STATUS} reply is null!"); } return false; } public bool SendCellID(int cellId) { string cellID = $"CELL_ID_{cellId}"; var reply = RequestNReply(cellID, MESSAGE_PC_LBAD_CELL_ID); if (reply != null) { var replyParsed = (int)reply; _Log.I($"Stream {MESSAGE_PC_LBAD_CELL_ID} Reply Result : {replyParsed}"); return true; } else { _Log.E($"Stream {MESSAGE_PC_LBAD_CELL_ID} reply is null!"); } return false; } public bool SendLotID(int lotId) { string lotID = $"LOT_ID_{lotId}"; var reply = RequestNReply(lotID, MESSAGE_PC_LBAD_LOT_ID); if (reply != null) { var replyParsed = (int)reply; _Log.I($"Stream {MESSAGE_PC_LBAD_LOT_ID} Reply Result : {replyParsed}"); } else { _Log.E($"Stream {MESSAGE_PC_LBAD_LOT_ID} reply is null!"); } return false; } public bool SetWeldTriggerOn() { int requestData = 1; var reply = RequestNReply(requestData, MESSAGE_PC_LBAD_WELDING_TRIGGER); if (reply != null) { var replyParsed = (int)reply; _Log.I($"Stream {MESSAGE_PC_LBAD_WELDING_TRIGGER} Reply Result : {replyParsed}"); return true; } else { _Log.E($"Stream {MESSAGE_PC_LBAD_WELDING_TRIGGER} reply is null!"); } return false; } public bool SendWeldingStop() { //Welding Stop On int requestData = 1; var reply = RequestNReply(requestData, MESSAGE_PC_LBAD_WELDING_STOP); if (reply != null) { var replyParsed = (int)reply; _Log.I($"Stream {MESSAGE_PC_LBAD_WELDING_STOP} Reply Result : {replyParsed}"); return true; } else { _Log.E($"Stream {MESSAGE_PC_LBAD_WELDING_STOP} reply is null!"); } return false; } public eJudgeFlag CheckJudgeComplete() { int requestData = 1; var reply = RequestNReply(requestData, MESSAGE_PC_LBAD_JUDGEMENT_COMPLETE); if (reply != null) { var replyParsed = (int)reply; _Log.I($"Stream {MESSAGE_PC_LBAD_JUDGEMENT_COMPLETE} Reply Result : {replyParsed}"); //JudgeFlag에 따라서 시퀀스 결정 //(OK = 0, NG = 1, NA = 2, FAILED = 3, ERROR = 4) if (Enum.IsDefined(typeof(eJudgeFlag), replyParsed)) { return (eJudgeFlag)replyParsed; } _Log.E($"Stream {MESSAGE_PC_LBAD_JUDGEMENT_COMPLETE} reply is abnormal value : {replyParsed}!"); } else { _Log.E($"Stream {MESSAGE_PC_LBAD_JUDGEMENT_COMPLETE} reply is null!"); } return eJudgeFlag.NO_RESPONSE; } } }