/// <summary> /// 转换PG /// </summary> /// <param name="iixServer"></param> /// <returns></returns> public static CmdResultCode TableRotation(IIXServer iixServer) { CmdResultCode cmdRes = CmdResultCode.Other; //查询当前屏幕是否在集合中存在 OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault(); if (panel != null) { if (panel.CmdResWork == CmdResultCode.Success) { cmdRes = iixServer.DmrSvrApi.TableRotation(); iixServer.LatestResult = cmdRes.ToString(); if (cmdRes == CmdResultCode.Success) { iixServer.SetTableRotation(); Log.GetInstance().NormalWrite(string.Format("[{0}]转换PG成功", iixServer.Ip)); } else { Log.GetInstance().ErrorWrite(string.Format("[{0}]转换PG失败,Error:{1}", iixServer.Ip, cmdRes.ToString())); } } else { cmdRes = panel.CmdResWork; Log.GetInstance().ErrorWrite(string.Format("[{0}]转换PG失败,Error:{1}", iixServer.Ip, cmdRes.ToString())); } } Global.UpdateDgv(ip: iixServer.Ip, pgPrimary: iixServer.OutlineState[0].ToString(), pgSecondary: iixServer.OutlineState[1].ToString(), latestResult: iixServer.LatestResult); return(cmdRes); }
/// <summary> /// 连续指令结束 /// </summary> /// <param name="iixServer"></param> /// <param name="pg"></param> /// <returns></returns> public static CmdResultCode SequenceEnd(IIXServer iixServer, PgSelectCode pg) { CmdResultCode cmdRes = CmdResultCode.Other; //查询当前屏幕是否在集合中存在 OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault(); if (panel != null) { if (panel.CmdResWork == CmdResultCode.Success) { cmdRes = iixServer.DmrSvrApi.SequenceEnd(pg); iixServer.LatestResult = cmdRes.ToString(); if (cmdRes == CmdResultCode.Success) { iixServer.SetSequenceEnd(pg); Log.GetInstance().NormalWrite(string.Format("[{0}]连续指令[{1}]结束成功", iixServer.Ip, pg.ToString())); } else { Log.GetInstance().ErrorWrite(string.Format("[{0}]连续指令[{1}]结束失败,Error:{2}", iixServer.Ip, pg.ToString(), cmdRes.ToString())); } } else { cmdRes = panel.CmdResWork; Log.GetInstance().ErrorWrite(string.Format("[{0}]连续指令结束失败,Error:{1}", iixServer.Ip, cmdRes.ToString())); } } Global.UpdateDgv(ip: iixServer.Ip, pgPrimary: OutlineStateCode.Stable.ToString(), latestResult: iixServer.LatestResult); return(cmdRes); }
/// <summary> /// 打开服务端完成报告 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void api_OpenFinished(object sender, EventArgs e) { IIXServer iixServer = (IIXServer)sender; iixServer.IsOpenFinish = true; Log.GetInstance().NormalWrite(string.Format("打开[{0}]服务端完成", iixServer.Ip)); }
/// <summary> /// DeMura拍摄完成报告 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void api_CaptureFinished(object sender, FinishedSequenceEventArgs e) { IIXServer iixServer = (IIXServer)sender; iixServer.IsCaptureFinish = true; Log.GetInstance().NormalWrite(string.Format("[{0}]DeMura拍摄完成", iixServer.Ip)); }
/// <summary> /// Flash保存完成报告 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void api_SaveFinished(object sender, SaveFinishedEventArgs e) { IIXServer iixServer = (IIXServer)sender; iixServer.IsSaveFinish = true; Log.GetInstance().NormalWrite(string.Format("[{0}]Flash保存完成", iixServer.Ip)); }
/// <summary> /// Focus自动调整完成报告 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void api_FocusFinished(object sender, FinishedSequenceEventArgs e) { IIXServer iixServer = (IIXServer)sender; iixServer.IsFocusFinish = true; Log.GetInstance().NormalWrite(string.Format("[{0}]Focus自动调整完成", iixServer.Ip)); }
/// <summary> /// Device的检测异常完成报告 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void api_AbnormalDetected(object sender, AbnormalDetectedEventArgs e) { IIXServer iixServer = (IIXServer)sender; iixServer.IsAbnormalDetect = true; Log.GetInstance().NormalWrite(string.Format("[{0}]Device的检测异常完成", iixServer.Ip)); }
/// <summary> /// 获取SlavePC管理Device的状态 /// </summary> /// <param name="iixServer"></param> public static void GetDeviceState(IIXServer iixServer) { List <DevStatCode> listState = iixServer.DmrSvrApi.GetDeviceStatus(); if (listState[0].ToString() == "AllOK") { iixServer.LatestResult = listState[0].ToString(); Log.GetInstance().NormalWrite(string.Format("获取[{0}]管理Device的状态成功", iixServer.Ip)); } else { iixServer.LatestResult = listState[0].ToString(); Log.GetInstance().ErrorWrite(string.Format("获取[{0}]管理Device的状态失败,Error:{1}", iixServer.Ip, iixServer.LatestResult)); } Global.UpdateDgv(ip: iixServer.Ip, latestResult: iixServer.LatestResult); }
/// <summary> /// 修改时间 /// </summary> /// <param name="iixServer"></param> /// <param name="dateTime"></param> /// <returns></returns> public static CmdResultCode AdjustPCTime(IIXServer iixServer, DateTimeInfo dateTime) { CmdResultCode cmdRes = CmdResultCode.Other; cmdRes = iixServer.DmrSvrApi.AdjustPCTime(dateTime); iixServer.LatestResult = cmdRes.ToString(); if (cmdRes == CmdResultCode.Success) { Log.GetInstance().NormalWrite(string.Format("[{0}]修改时间成功", iixServer.Ip)); } else { Log.GetInstance().ErrorWrite(string.Format("[{0}]修改时间失败,Error:{1}", iixServer.Ip, cmdRes.ToString())); } return(cmdRes); }
/// <summary> /// 更新License /// </summary> /// <param name="iixServer"></param> /// <param name="licenseFile"></param> /// <returns></returns> public static CmdResultCode UpdateLicense(IIXServer iixServer, string licenseFile) { CmdResultCode cmdRes = CmdResultCode.Other; cmdRes = iixServer.DmrSvrApi.UpdateLicense(licenseFile); iixServer.LatestResult = cmdRes.ToString(); if (cmdRes == CmdResultCode.Success) { Log.GetInstance().NormalWrite(string.Format("[{0}]更新License成功", iixServer.Ip)); } else { Log.GetInstance().ErrorWrite(string.Format("[{0}]更新License失败,Error:{1}", iixServer.Ip, cmdRes.ToString())); } return(cmdRes); }
/// <summary> /// 注册事件 /// </summary> /// <param name="api"></param> private void SetEventHandlers(IIXServer iixServer) { //SlavePC 管理 Device 初始化完了的报告 iixServer.DmrSvrApi.OpenFinished += api_OpenFinished; //DeMura 拍摄完了的报告 iixServer.DmrSvrApi.CaptureFinished += api_CaptureFinished; //Flash保存报告 iixServer.DmrSvrApi.SaveFinished += api_SaveFinished; //Flash 写入完成报告 iixServer.DmrSvrApi.WriteFinished += api_WriteFinished; //补正结果确认处理完了的报告 iixServer.DmrSvrApi.CheckFinished += api_CheckFinished; //Focus 自动调整完了報告 iixServer.DmrSvrApi.FocusFinished += api_FocusFinished; //报告Device的检测异常 iixServer.DmrSvrApi.AbnormalDetected += api_AbnormalDetected; //Flash 擦除完成报告 iixServer.DmrSvrApi.EraseFinished += api_EraseFinished; }
/// <summary> /// 切断和 SlavePC 的连接 /// </summary> /// <param name="iixServer"></param> /// <returns></returns> public static CmdResultCode Disconnect(IIXServer iixServer) { CmdResultCode cmdRes = CmdResultCode.Other; cmdRes = iixServer.DmrSvrApi.Disconnect(); iixServer.LatestResult = cmdRes.ToString(); if (cmdRes == CmdResultCode.Success) { iixServer.ConnState = ConnectionCode.Disconnect; Log.GetInstance().NormalWrite(string.Format("关闭[{0}]服务端成功", iixServer.Ip)); } else { Log.GetInstance().ErrorWrite(string.Format("关闭[{0}]服务端成功,Error:{1}", iixServer.Ip, cmdRes.ToString())); } Global.UpdateDgv(ip: iixServer.Ip, connOpen: iixServer.ConnState.ToString(), latestResult: iixServer.LatestResult); return(cmdRes); }
/// <summary> /// 向Flash Memory写入文件 /// </summary> /// <param name="iixServer"></param> /// <param name="pg"></param> /// <param name="fileName"></param> /// <returns></returns> public static CmdResultCode WriteFlashMemory(IIXServer iixServer, PgSelectCode pg, string fileName) { CmdResultCode cmdRes = CmdResultCode.Other; //查询当前屏幕是否在集合中存在 OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault(); if (panel != null) { //如果上一次的检测结果是正确的才继续执行当前的工作 if (panel.CmdResWork == CmdResultCode.Success) { cmdRes = iixServer.DmrSvrApi.WriteFlashMemory(pg, fileName); iixServer.LatestResult = cmdRes.ToString(); if (cmdRes == CmdResultCode.Success) { Log.GetInstance().NormalWrite(string.Format("[{0}]向Flash Memory写入文件[{1}]成功", iixServer.Ip, fileName)); } else { Log.GetInstance().ErrorWrite(string.Format("[{0}]向Flash Memory写入文件[{1}]失败,Error:{2}", iixServer.Ip, fileName, cmdRes.ToString())); } //修改执行结果 panel.CmdResWork = cmdRes; } else { cmdRes = panel.CmdResWork; Log.GetInstance().ErrorWrite(string.Format("[{0}]向Flash Memory写入文件[{1}]失败,Error:{2}", iixServer.Ip, fileName, cmdRes.ToString())); } } Global.UpdateDgv(ip: iixServer.Ip, latestResult: iixServer.LatestResult); return(cmdRes); }
/// <summary> /// 关闭 SlavePC 所管理的 Device /// </summary> /// <param name="iixServer"></param> /// <returns></returns> public static CmdResultCode Close(IIXServer iixServer) { CmdResultCode cmdRes = CmdResultCode.Other; cmdRes = iixServer.DmrSvrApi.Close(); iixServer.LatestResult = cmdRes.ToString(); if (cmdRes == CmdResultCode.Success) { iixServer.ConnState = ConnectionCode.Close; iixServer.SetCloseFinished(); Log.GetInstance().NormalWrite(string.Format("关闭[{0}]所管理的Device成功", iixServer.Ip)); } else { Log.GetInstance().ErrorWrite(string.Format("关闭[{0}]所管理的Device失败,Error:{1}", iixServer.Ip, cmdRes.ToString())); } Global.UpdateDgv(ip: iixServer.Ip, connOpen: iixServer.ConnState.ToString(), pgPrimary: iixServer.OutlineState[0].ToString(), pgSecondary: iixServer.OutlineState[1].ToString(), latestResult: iixServer.LatestResult); return(cmdRes); }
/// <summary> /// 设置Panel显示Raster图像 /// </summary> /// <param name="iixServer"></param> /// <param name="pg"></param> /// <param name="color"></param> /// <param name="isFactory"></param> /// <returns></returns> public static CmdResultCode SetRasterImage(IIXServer iixServer, PgSelectCode pg, Color color, bool isFactory) { CmdResultCode cmdRes = CmdResultCode.Other; //查询当前屏幕是否在集合中存在 OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault(); if (panel != null) { //如果上一次的检测结果是正确的才继续执行当前的工作 if (panel.CmdResWork == CmdResultCode.Success) { cmdRes = iixServer.DmrSvrApi.SetRasterImage(pg, color.R, color.G, color.B, isFactory); iixServer.LatestResult = cmdRes.ToString(); if (cmdRes == CmdResultCode.Success) { Log.GetInstance().NormalWrite(string.Format("设置[{0}]Panel显示Raster图像成功", iixServer.Ip)); } else { Log.GetInstance().ErrorWrite(string.Format("设置[{0}]Panel显示Raster图像失败,Error:{1}", iixServer.Ip, cmdRes.ToString())); } //修改执行结果 panel.CmdResWork = cmdRes; } else { cmdRes = panel.CmdResWork; Log.GetInstance().ErrorWrite(string.Format("设置[{0}]Panel显示Raster图像失败,Error:{1}", iixServer.Ip, cmdRes.ToString())); } } Global.UpdateDgv(ip: iixServer.Ip, latestResult: iixServer.LatestResult); return(cmdRes); }
/// <summary> /// 获取Capture(获取拍摄数据)处理结果 /// </summary> /// <param name="iixServer"></param> /// <param name="pg"></param> /// <returns></returns> public static CmdResultCode GetCaptureResult(IIXServer iixServer, PgSelectCode pg) { CmdResultCode cmdRes = CmdResultCode.Other; //查询当前屏幕是否在集合中存在 OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault(); if (panel != null) { //如果上一次的检测结果是正确的才继续执行当前的工作 if (panel.CmdResWork == CmdResultCode.Success) { cmdRes = iixServer.DmrSvrApi.GetCaptureResult(pg); iixServer.LatestResult = cmdRes.ToString(); if (cmdRes == CmdResultCode.Success) { Log.GetInstance().NormalWrite(string.Format("获取[{0}]Capture(获取拍摄数据)处理结果成功", iixServer.Ip)); } else { Log.GetInstance().ErrorWrite(string.Format("获取[{0}]Capture(获取拍摄数据)处理结果失败,Error:{1}", iixServer.Ip, cmdRes.ToString())); } //修改执行结果 panel.CmdResWork = cmdRes; } else { cmdRes = panel.CmdResWork; Log.GetInstance().ErrorWrite(string.Format("获取[{0}]Capture(获取拍摄数据)处理结果失败,Error:{1}", iixServer.Ip, cmdRes.ToString())); } } Global.UpdateDgv(ip: iixServer.Ip, latestResult: iixServer.LatestResult); return(cmdRes); }
/// <summary> /// 获取License剩余次数的请求 /// </summary> /// <param name="iixServer"></param> /// <returns></returns> public static int GetLicenseRemainingCount(IIXServer iixServer) { CmdResultCode cmdRes = CmdResultCode.Other; TransferCounterInfo tci = iixServer.DmrSvrApi.GetRemainingCount(); cmdRes = tci.CmdResult; iixServer.LatestResult = cmdRes.ToString(); if (cmdRes == CmdResultCode.Success) { Log.GetInstance().NormalWrite(string.Format("获取[{0}]License剩余次数[{1}]成功 ", iixServer.Ip, tci.Count)); } else { Log.GetInstance().ErrorWrite(string.Format("获取[{0}]License剩余次数失败,Error:{1}", iixServer.Ip, cmdRes.ToString())); } Global.UpdateDgv(ip: iixServer.Ip, latestResult: iixServer.LatestResult); return(tci.Count); }
/// <summary> /// DeMura Check(补正结果确认)开始 /// </summary> /// <param name="iixServer"></param> /// <param name="pg"></param> /// <returns></returns> public static CmdResultCode DeMuraCheckStart(IIXServer iixServer, PgSelectCode pg) { CmdResultCode cmdRes = CmdResultCode.Other; //查询当前屏幕是否在集合中存在 OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault(); if (panel != null) { //如果上一次的检测结果是正确的才继续执行当前的工作 if (panel.CmdResWork == CmdResultCode.Success) { cmdRes = iixServer.DmrSvrApi.DeMuraCheckStart(pg); iixServer.LatestResult = cmdRes.ToString(); if (cmdRes == CmdResultCode.Success) { Log.GetInstance().NormalWrite(string.Format("[{0}]DeMura Check(补正结果确认)开始成功", iixServer.Ip)); } else { Log.GetInstance().ErrorWrite(string.Format("[{0}]DeMura Check(补正结果确认)开始失败,Error:{1}", iixServer.Ip, cmdRes.ToString())); } //修改执行结果 panel.CmdResWork = cmdRes; } else { cmdRes = panel.CmdResWork; Log.GetInstance().ErrorWrite(string.Format("[{0}]DeMura Check(补正结果确认)开始失败,Error:{1}", iixServer.Ip, cmdRes.ToString())); } } return(cmdRes); }
/// <summary> /// 点灯 /// </summary> /// <param name="iixServer"></param> /// <param name="pg"></param> /// <returns></returns> public static CmdResultCode PanelOn(IIXServer iixServer, PgSelectCode pg) { CmdResultCode cmdRes = CmdResultCode.Other; //查询当前屏幕是否在集合中存在 OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault(); if (panel != null) { if (panel.CmdResWork == CmdResultCode.Success) { cmdRes = iixServer.DmrSvrApi.PanelOn(pg); iixServer.LatestResult = cmdRes.ToString(); if (cmdRes == CmdResultCode.Success) { panel.IsPanelOn = true; iixServer.IsPanelOn = true; Log.GetInstance().NormalWrite(string.Format("屏[{0}]点灯成功", iixServer.AssociatedPanelPos)); } else { iixServer.IsPanelOn = false; Log.GetInstance().ErrorWrite(string.Format("屏[{0}]点灯失败,Error:{1}", iixServer.AssociatedPanelPos, cmdRes.ToString())); } } else { cmdRes = panel.CmdResWork; Log.GetInstance().ErrorWrite(string.Format("屏[{0}]点灯失败,Error:{1}", iixServer.Ip, cmdRes.ToString())); } } Global.UpdateDgv(ip: iixServer.Ip, latestResult: iixServer.LatestResult); return(cmdRes); }
/// <summary> /// 获取Recipe /// </summary> /// <param name="iixServer"></param> /// <param name="recipePath"></param> /// <returns></returns> public static CmdResultCode GetRecipe(IIXServer iixServer, string recipePath) { TransferFileInfo tfi = iixServer.DmrSvrApi.GetRecipe(); CmdResultCode cmdRes = (tfi.IsValid) ? CmdResultCode.Success : CmdResultCode.Other; if (tfi.IsValid) { tfi.Save(recipePath); } iixServer.LatestResult = cmdRes.ToString(); if (cmdRes == CmdResultCode.Success) { Log.GetInstance().NormalWrite(string.Format("[{0}]获取Recipe成功", iixServer.Ip)); } else { Log.GetInstance().ErrorWrite(string.Format("[{0}]获取Recipe失败,Error:{1}", iixServer.Ip, cmdRes.ToString())); } return(cmdRes); }
/// <summary> /// VCR扫码 /// </summary> /// <param name="iixServer"></param> /// <returns></returns> public static bool SweepCode(IIXServer iixServer, ref string code) { try { var tasks = new List <Task>(); var fX = false; var fY = false; tasks.Add(Task.Factory.StartNew(() => { var axisInfoX = Global.ListAxis.Where(info => info.AxisName == "VCR-X").FirstOrDefault(); axisInfoX.PosiMode = 1; if (iixServer.AssociatedPanelPos == "#1") { axisInfoX.Dist = (int)axisInfoX.WorkPos1; } else if (iixServer.AssociatedPanelPos == "#2") { axisInfoX.Dist = (int)axisInfoX.WorkPos2; } else if (iixServer.AssociatedPanelPos == "#3") { axisInfoX.Dist = (int)axisInfoX.WorkPos3; } fX = MoveExecute.Pmove(axisInfoX, false); })); tasks.Add(Task.Factory.StartNew(() => { var axisInfoZ = Global.ListAxis.Where(info => info.AxisName == "VCR-Z").FirstOrDefault(); axisInfoZ.PosiMode = 1; if (iixServer.AssociatedPanelPos == "#1") { axisInfoZ.Dist = (int)axisInfoZ.WorkPos1; } else if (iixServer.AssociatedPanelPos == "#2") { axisInfoZ.Dist = (int)axisInfoZ.WorkPos2; } else if (iixServer.AssociatedPanelPos == "#3") { axisInfoZ.Dist = (int)axisInfoZ.WorkPos3; } fY = MoveExecute.Pmove(axisInfoZ, false); })); Task.WaitAll(tasks.ToArray()); if (!fX || !fY) { Log.GetInstance().ErrorWrite("VCR移动到指定位置失败"); return(false); } //发送扫码指令 Global.SocketServer.Send("Trigger"); //休眠500毫秒,等待扫码完成 Thread.Sleep(500); //获取二维码编号 code = Global.SocketServer.Code; Log.GetInstance().NormalWrite(string.Format("")); //清空二维码 Global.SocketServer.Code = ""; //判断二维码的结果 var codeResult = MoveExecute.Result.Successful; //查询当前屏幕是否在集合中存在 OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault(); //存在则删除 if (panel != null) { //操作检测屏幕集合时加锁,防止线程启动过快导致集合修改的异常 lock (Global.ListOLEDPanel) { Global.ListOLEDPanel.Remove(panel); } } lock (Global.ListOLEDPanel) { panel = new OLEDPanel(); panel.PanelNumber = code; panel.PanelPos = iixServer.AssociatedPanelPos; panel.DmrSvrApi = iixServer.DmrSvrApi; panel.PanelWorkPos = "工位#1"; panel.CmdResWork = codeResult == MoveExecute.Result.Successful ? CmdResultCode.Success : CmdResultCode.Other; panel.bRotated = false; panel.IsPanelOn = false; //将屏添加到集合中 Global.ListOLEDPanel.Add(panel); } return(true); } catch (Exception ex) { Log.WriterExceptionLog(ex.ToString()); return(false); } }
/// <summary> /// 设置屏幕真空/破真空,并检测是否成功 /// </summary> /// <param name="iixServer"></param> /// <param name="isVacuum">true = 真空,false = 破真空</param> /// <returns></returns> public static bool SetVacuum(IIXServer iixServer, bool isVacuum) { bool f = false; try { int waitTime = 0; while (true) { if (waitTime == Global.CardWaitTime) { //报警提示 Global.ControlCard.WriteOutbit(28, 1); //亮红灯 Global.ControlCard.WriteOutbit((ushort)Global.GetIOPortNoByName("红灯"), 1); Log.GetInstance().WarningWrite(string.Format("屏[{0}]{1}超时", iixServer.AssociatedPanelPos, isVacuum == true ? "真空" : "破真空")); Log.GetInstance().WarningWrite(string.Format("请重新{0},如还不成功,可能是部件损坏,需检查设备", isVacuum == true ? "点灯" : "关灯")); return(false); } //当前工位是#1 if (Global.WorkPos == 1) { //IIX服务端关联的屏幕#1 if (iixServer.AssociatedPanelPos == "#1") { if (waitTime == 0) { //真空 if (isVacuum) { Global.IoCard.WriteOutBit(1, 1); } //破真空 else { Global.IoCard.WriteOutBit(4, 1); } } //检测动作完成 if (Global.IoCard.ReadInBit(12) == 1) { return(true); } } else if (iixServer.AssociatedPanelPos == "#2") { if (waitTime == 0) { //真空 if (isVacuum) { Global.IoCard.WriteOutBit(2, 1); } //破真空 else { Global.IoCard.WriteOutBit(5, 1); } } //检测动作完成 if (Global.IoCard.ReadInBit(13) == 1) { return(true); } } else if (iixServer.AssociatedPanelPos == "#3") { if (waitTime == 0) { //真空 if (isVacuum) { Global.IoCard.WriteOutBit(3, 1); } //破真空 else { Global.IoCard.WriteOutBit(6, 1); } } //检测动作完成 if (Global.IoCard.ReadInBit(14) == 1) { return(true); } } } else if (Global.WorkPos == 2) { //IIX服务端关联的屏幕#1 if (iixServer.AssociatedPanelPos == "#1") { if (waitTime == 0) { //真空 if (isVacuum) { Global.IoCard.WriteOutBit(7, 1); } //破真空 else { Global.IoCard.WriteOutBit(10, 1); } } //检测动作完成 if (Global.IoCard.ReadInBit(15) == 1) { return(true); } } else if (iixServer.AssociatedPanelPos == "#2") { if (waitTime == 0) { //真空 if (isVacuum) { Global.IoCard.WriteOutBit(8, 1); } //破真空 else { Global.IoCard.WriteOutBit(11, 1); } } //检测动作完成 if (Global.IoCard.ReadInBit(16) == 1) { return(true); } } else if (iixServer.AssociatedPanelPos == "#3") { if (waitTime == 0) { //真空 if (isVacuum) { Global.IoCard.WriteOutBit(9, 1); } //破真空 else { Global.IoCard.WriteOutBit(12, 1); } } //检测动作完成 if (Global.IoCard.ReadInBit(17) == 1) { return(true); } } } else if (Global.WorkPos == 3) { //IIX服务端关联的屏幕#1 if (iixServer.AssociatedPanelPos == "#1") { if (waitTime == 0) { //真空 if (isVacuum) { Global.IoCard.WriteOutBit(13, 1); } //破真空 else { Global.IoCard.WriteOutBit(16, 1); } } //检测动作完成 while (Global.IoCard.ReadInBit(18) == 1) { return(true); } } else if (iixServer.AssociatedPanelPos == "#2") { if (waitTime == 0) { //真空 if (isVacuum) { Global.IoCard.WriteOutBit(14, 1); } //破真空 else { Global.IoCard.WriteOutBit(17, 1); } } //检测动作完成 if (Global.IoCard.ReadInBit(19) == 1) { return(true); } } else if (iixServer.AssociatedPanelPos == "#3") { if (waitTime == 0) { //真空 if (isVacuum) { Global.IoCard.WriteOutBit(15, 1); } //破真空 else { Global.IoCard.WriteOutBit(18, 1); } } //检测动作完成 if (Global.IoCard.ReadInBit(20) == 1) { return(true); } } } else if (Global.WorkPos == 4) { //IIX服务端关联的屏幕#1 if (iixServer.AssociatedPanelPos == "#1") { if (waitTime == 0) { //真空 if (isVacuum) { Global.IoCard.WriteOutBit(19, 1); } //破真空 else { Global.IoCard.WriteOutBit(22, 1); } } //检测动作完成 if (Global.IoCard.ReadInBit(21) == 1) { return(true); } } else if (iixServer.AssociatedPanelPos == "#2") { if (waitTime == 0) { //真空 if (isVacuum) { Global.IoCard.WriteOutBit(20, 1); } //破真空 else { Global.IoCard.WriteOutBit(23, 1); } } //检测动作完成 if (Global.IoCard.ReadInBit(22) == 1) { return(true); } } else if (iixServer.AssociatedPanelPos == "#3") { if (waitTime == 0) { //真空 if (isVacuum) { Global.IoCard.WriteOutBit(21, 1); } //破真空 else { Global.IoCard.WriteOutBit(24, 1); } } //检测动作完成 if (Global.IoCard.ReadInBit(23) == 1) { return(true); } } } waitTime++; Thread.Sleep(1000); } } catch (Exception ex) { f = false; Log.WriterExceptionLog(ex.ToString()); } //Log.GetInstance().NormalWrite(string.Format("屏[{0}]{1}{2}", iixServer.AssociatedPanelPos, isVacuum == true ? "真空" : "破真空", f == true ? "成功" : "失败")); return(f); }
/// <summary> /// 关灯 /// </summary> /// <param name="iixServer"></param> /// <param name="pg"></param> /// <returns></returns> public static CmdResultCode PanelOff(IIXServer iixServer, PgSelectCode pg) { CmdResultCode cmdRes = CmdResultCode.Other; //查询当前屏幕是否在集合中存在 OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault(); if (panel != null && panel.IsPanelOn) { cmdRes = iixServer.DmrSvrApi.PanelOff(pg); iixServer.LatestResult = cmdRes.ToString(); if (cmdRes == CmdResultCode.Success) { iixServer.IsPanelOn = false; Log.GetInstance().NormalWrite(string.Format("屏[{0}]关灯成功", iixServer.AssociatedPanelPos)); } else { iixServer.IsPanelOn = true; Log.GetInstance().ErrorWrite(string.Format("屏[{0}]关灯失败,Error:{1}", iixServer.AssociatedPanelPos, cmdRes.ToString())); } //如果上一个工位的检测结果是正确的才继续执行当前工位的工作 if (panel.CmdResWork == CmdResultCode.Success) { Global.UpdateDgv(ip: iixServer.Ip, latestResult: iixServer.LatestResult); //修改执行结果 panel.CmdResWork = cmdRes; //修改当前的工作位置 panel.PanelWorkPos = "工位1"; } else { cmdRes = panel.CmdResWork; panel.PanelWorkPos = "工位1"; } lock (Global.ListOLEDPanel) { //将屏从集合中移除 Global.ListOLEDPanel.Remove(panel); } //当所有流程执行完后关灯时添加成功/失败数 if (panel.bRotated) { if (cmdRes == CmdResultCode.Success) { Global.PassNumber++; } else { Global.FailNumber++; } } } Global.SetNumber(); return(cmdRes); }
/// <summary> /// 设置屏幕锁住与否,点灯锁住,关灯解锁 /// </summary> /// <param name="iixServer"></param> /// <param name="isPanelOn"></param> /// <returns></returns> public static void SetPanelLock(IIXServer iixServer, bool isPanelOn) { try { //当前工位是#1 if (Global.WorkPos == 1) { //IIX服务端关联的屏幕#1 if (iixServer.AssociatedPanelPos == "#1") { //点灯 if (isPanelOn) { Global.ControlCard.WriteOutbit((ushort)Global.GetIOPortNoByName("红灯"), 1); } //关灯 else { Global.ControlCard.WriteOutbit(25, 0); } } else if (iixServer.AssociatedPanelPos == "#2") { //点灯 if (isPanelOn) { Global.ControlCard.WriteOutbit((ushort)Global.GetIOPortNoByName("红灯"), 1); } //关灯 else { Global.ControlCard.WriteOutbit((ushort)Global.GetIOPortNoByName("黄灯"), 0); } } else if (iixServer.AssociatedPanelPos == "#3") { //点灯 if (isPanelOn) { //Global.ControlCard.WriteOutbit(27, 1); Global.ControlCard.WriteOutbit((ushort)Global.GetIOPortNoByName("绿灯"), 1); } //关灯 else { Global.ControlCard.WriteOutbit(27, 0); } } } else if (Global.WorkPos == 2) { //IIX服务端关联的屏幕#1 if (iixServer.AssociatedPanelPos == "#1") { //点灯 if (isPanelOn) { Global.ControlCard.WriteOutbit(28, 1); } //关灯 else { Global.ControlCard.WriteOutbit((ushort)Global.GetIOPortNoByName("报警"), 1); } } else if (iixServer.AssociatedPanelPos == "#2") { //点灯 if (isPanelOn) { Global.ControlCard.WriteOutbit((ushort)Global.GetIOPortNoByName("启动按钮1灯"), 1); } //关灯 else { Global.ControlCard.WriteOutbit(29, 0); } } else if (iixServer.AssociatedPanelPos == "#3") { //点灯 if (isPanelOn) { Global.ControlCard.WriteOutbit((ushort)Global.GetIOPortNoByName("启动按钮2灯"), 1); } //关灯 else { Global.ControlCard.WriteOutbit(30, 0); } } } else if (Global.WorkPos == 3) { //IIX服务端关联的屏幕#1 if (iixServer.AssociatedPanelPos == "#1") { //点灯 if (isPanelOn) { Global.ControlCard.WriteOutbit((ushort)Global.GetIOPortNoByName("按钮1灯"), 1); } //关灯 else { Global.ControlCard.WriteOutbit(31, 0); } } else if (iixServer.AssociatedPanelPos == "#2") { //点灯 if (isPanelOn) { Global.ControlCard.WriteOutbit((ushort)Global.GetIOPortNoByName("按钮2灯"), 1); } //关灯 else { Global.ControlCard.WriteOutbit(32, 0); } } else if (iixServer.AssociatedPanelPos == "#3") { //点灯 if (isPanelOn) { Global.ControlCard.WriteOutbit((ushort)Global.GetIOPortNoByName("按钮3灯"), 1); } //关灯 else { Global.ControlCard.WriteOutbit(59, 0); } } } else if (Global.WorkPos == 4) { //IIX服务端关联的屏幕#1 if (iixServer.AssociatedPanelPos == "#1") { //点灯 if (isPanelOn) { Global.ControlCard.WriteOutbit(60, 1); } //关灯 else { Global.ControlCard.WriteOutbit(60, 0); } } else if (iixServer.AssociatedPanelPos == "#2") { //点灯 if (isPanelOn) { Global.ControlCard.WriteOutbit(61, 1); } //关灯 else { Global.ControlCard.WriteOutbit(61, 0); } } else if (iixServer.AssociatedPanelPos == "#3") { //点灯 if (isPanelOn) { Global.ControlCard.WriteOutbit(62, 1); } //关灯 else { Global.ControlCard.WriteOutbit(62, 0); } } } } catch (Exception ex) { Log.WriterExceptionLog(ex.ToString()); } }
/// <summary> /// 初始化IIX服务端 /// </summary> /// <returns></returns> private bool InitIIXServer() { bool f = false; try { IIXServer iixServer = null; CmdResultCode cmdRes = CmdResultCode.Other; #region Ted modified 20180522 foreach (SlaveGroup slaveGroup in stationConfig.SlaveGroups) { foreach (Slave slave in slaveGroup.Slaves) { int index = this.dgvServer.Rows.Add(); iixServer = new IIXServer(); iixServer.DmrSvrApi = new IixDmrSvrApi(); iixServer.Ip = slave.ip; iixServer.IsEnable = slave.enable; iixServer.AssociatedPanelPos = slave.description; //iixServer.SvrType = SvrType.Left; this.SetEventHandlers(iixServer); DataGridViewRow row = this.dgvServer.Rows[index]; row.Cells["Enable"].Value = slave.enable; row.Cells["ServerIP"].Value = slave.ip; row.Cells["ServerPort"].Value = iixServer.Port; row.Cells["Open"].Value = iixServer.ConnState.ToString(); row.Cells["PgPrimary"].Value = iixServer.OutlineState[0].ToString(); row.Cells["PgSecondary"].Value = iixServer.OutlineState[1].ToString();; row.Cells["Status"].Value = iixServer.ResultState.ToString(); row.Cells["LatestResult"].Value = iixServer.LatestResult; Global.ListIIXSerevr.Add(iixServer); } } //for (int i = 1; i <= 3; i++) //{ // int index = this.dgvServer.Rows.Add(); // iixServer = new IIXServer(); // string ip = IniFile.IniReadValue(string.Format("ServerLeft#" + i), "IP", Global.ConfigPath); // bool isEnable = IniFile.IniReadValue(string.Format("ServerLeft#" + i), "IsEnable", Global.ConfigPath) == "1" ? true : false; // iixServer.DmrSvrApi = new IixDmrSvrApi(); // iixServer.Ip = ip; // iixServer.IsEnable = isEnable; // iixServer.AssociatedPanelPos = "#" + i; // iixServer.SvrType = SvrType.Left; // this.SetEventHandlers(iixServer); // this.dgvServer.Rows[index].Cells["Enable"].Value = isEnable; // this.dgvServer.Rows[index].Cells["ServerIP"].Value = ip; // this.dgvServer.Rows[index].Cells["ServerPort"].Value = iixServer.Port; // this.dgvServer.Rows[index].Cells["Open"].Value = iixServer.ConnState.ToString(); // this.dgvServer.Rows[index].Cells["PgPrimary"].Value = iixServer.OutlineState[0].ToString(); // this.dgvServer.Rows[index].Cells["PgSecondary"].Value = iixServer.OutlineState[1].ToString(); ; // this.dgvServer.Rows[index].Cells["Status"].Value = iixServer.ResultState.ToString(); // this.dgvServer.Rows[index].Cells["LatestResult"].Value = iixServer.LatestResult; // Global.ListIIXSerevr.Add(iixServer); //} //for (int i = 1; i <= 3; i++) //{ // int index = this.dgvServer.Rows.Add(); // iixServer = new IIXServer(); // string ip = IniFile.IniReadValue(string.Format("ServerRight#" + i), "IP", Global.ConfigPath); // bool isEnable = IniFile.IniReadValue(string.Format("ServerRight#" + i), "IsEnable", Global.ConfigPath) == "1" ? true : false; // iixServer.DmrSvrApi = new IixDmrSvrApi(); // iixServer.Ip = ip; // iixServer.IsEnable = isEnable; // iixServer.AssociatedPanelPos = "#" + i; // iixServer.SvrType = SvrType.Right; // this.SetEventHandlers(iixServer); // this.dgvServer.Rows[index].Cells["Enable"].Value = isEnable; // this.dgvServer.Rows[index].Cells["ServerIP"].Value = ip; // this.dgvServer.Rows[index].Cells["ServerPort"].Value = iixServer.Port; // this.dgvServer.Rows[index].Cells["Open"].Value = iixServer.ConnState.ToString(); // this.dgvServer.Rows[index].Cells["PgPrimary"].Value = iixServer.OutlineState[0].ToString(); // this.dgvServer.Rows[index].Cells["PgSecondary"].Value = iixServer.OutlineState[1].ToString(); ; // this.dgvServer.Rows[index].Cells["Status"].Value = iixServer.ResultState.ToString(); // this.dgvServer.Rows[index].Cells["LatestResult"].Value = iixServer.LatestResult; // Global.ListIIXSerevr.Add(iixServer); //} #endregion var tasks = new List <Task>(); foreach (var _iixServer in Global.ListIIXSerevr) { tasks.Add(Task.Factory.StartNew(() => { //连接 cmdRes = IIXExecute.ConnectToSlave(_iixServer); //连接成功后就打开 if (cmdRes == CmdResultCode.Success) { Log.WriterActionLog(string.Format("Slave {0}:{1} connected SUCCESS!", _iixServer.Ip, _iixServer.Port)); cmdRes = IIXExecute.Open(_iixServer); if (cmdRes == CmdResultCode.Success) { Log.WriterActionLog(string.Format("Slave {0}:{1} open SUCCESS!", _iixServer.Ip, _iixServer.Port)); } else { Log.WriterExceptionLog(string.Format("Slave {0}:{1} open FAIL!", _iixServer.Ip, _iixServer.Port)); } } else { Log.WriterExceptionLog(string.Format("Slave {0}:{1} connected FAIL!", _iixServer.Ip, _iixServer.Port)); } })); } Task.WaitAll(tasks.ToArray()); f = true; } catch (Exception ex) { f = false; Log.WriterExceptionLog(ex.ToString()); } return(f); }