using Rs.Motion.GugaoEcat;
using Rs.Motion;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Rs.Controls;
using Rs.MotionPlat.Flow;
using Rs.Framework;
using Rs.Camera;
using System.Threading;
using Rs.MotionPlat.Commom;
using static System.Runtime.CompilerServices.RuntimeHelpers;
using Rs.Motion.GugaoPulse;
using Rs.MotionPlat.SysConfig;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.IO;
using Rs.MotionPlat.Entitys;
using Rs.MotionPlat.Flow.SubFlow;
namespace Rs.MotionPlat
{
public partial class Home : BaseFormHeader
{
ButtonEx selectedButton;
public Home()
{
this.StartPosition = FormStartPosition.Manual;
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
this.MaximizedBounds = Screen.PrimaryScreen.WorkingArea;
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
}
void CloseSubWindow()
{
foreach(Control f in panel_main.Controls)
{
if(f is Form && ((Form)f).Name!= "FormMain")
{
((Form)f).Close();
}
}
panel_main.Controls.Clear();
}
protected void Menu_Clicked(object sender, EventArgs e)
{
ButtonEx button = (ButtonEx)sender;
if (button == btnSystem)
{
selectedButton = btnSystem;
ClearSelectBtn();
button.Selected = true;
CloseSubWindow();
BaseForm from = new SubMenuForm("SysConfig");
from.TopLevel = false;
from.Dock = DockStyle.Fill;
panel_main.Controls.Add(from);
from.Visible = true;
}
if (button == btnData)
{
if (Properties.Settings.Default.DefaultLanguage== "zh-CN")
{
LanguageHelper.SetDefaultLanguage("en-US");
}
else
{
LanguageHelper.SetDefaultLanguage("zh-CN");
}
FormCollection forms = Application.OpenForms;
foreach (Form fm in forms)
{
if (fm is SubMenuForm)
{
((SubMenuForm)fm).ReloadMenu();
}
else
{
if(fm.Name!= "Home")
{
LanguageHelper.LoadLanguage(fm, fm.GetType());
}
else
{
ChangeLang();
}
//if (fm is Home)
//{
// fm.FormBorderStyle = FormBorderStyle.None;
// //fm.MaximizedBounds = Screen.PrimaryScreen.WorkingArea;
// fm.ResumeLayout();
// fm.WindowState = System.Windows.Forms.FormWindowState.Maximized;
//}
}
}
//btnMain.PerformClick();
//if(selectedButton!=null)
//{
// selectedButton.PerformClick();
//}
forms = Application.OpenForms;
foreach (Form fm in forms)
{
if (fm is SubMenuForm)
{
((SubMenuForm)fm).SelectTab();
break;
}
}
//ClearSelectBtn();
//button.Selected = true;
//CloseSubWindow();
//BaseForm from = new SubMenuForm("Data");
//from.TopLevel = false;
//from.Dock = DockStyle.Fill;
//panel_main.Controls.Add(from);
//from.Visible = true;
}
else if (button == btnMain)
{
selectedButton = btnMain;
ClearSelectBtn();
button.Selected = true;
CloseSubWindow();
FormMain form = (FormMain)ActiveForms.Get("FormMain");
if(form!=null)
{
form.ReloadParameters();
panel_main.Controls.Add(form);
form.TopLevel = false;
form.Dock = DockStyle.Fill;
form.Visible = true;
}
else
{
form = new FormMain();
form.Name = "FormMain";
form.TopLevel = false;
form.Dock = DockStyle.Fill;
panel_main.Controls.Add(form);
form.Visible = true;
ActiveForms.Add(form);
}
}
else if (button == btnQuit)
{
selectedButton = null;
button.Selected = false;
if(WindowsClose())
{
System.Environment.Exit(-1);
}
}
else if (button == btnRecipe)
{
selectedButton = btnRecipe;
ClearSelectBtn();
button.Selected = true;
CloseSubWindow();
BaseForm from = new SubMenuForm("Recipe");
from.TopLevel = false;
from.Dock = DockStyle.Fill;
panel_main.Controls.Add(from);
from.Visible = true;
}
else if (button == btnAbout)
{
selectedButton = null;
btnAbout.Enabled = false;
BaseFormHeader form;
form = new DebugMove(ShowBtn);
//form = DebugMove.Instance;
form.HeaderBackgroundColor = Color.Gray;
form.TopMost = true;
form.ShowMax = false;
form.ShowMin = false;
form.ShowInTaskbar = false;
form.Location = new Point(this.Width - form.Width, this.Height - form.Height);
form.Show(this);
}
else if (button == btnPermission)
{
if(btnPermission.ShowText.IndexOf("-")>0)
{
DialogResult dr = Msg.ShowQuestion("Are you sure to exit login?");
if(dr== DialogResult.OK)
{
GlobalUser.UserName = "";
btnPermission.ShowText=btnPermission.ShowText.Substring(0,btnPermission.ShowText.IndexOf("-"));
}
}
else
{
selectedButton = null;
UserForm form;
form = new UserForm();
form.OnloginSuccessEvent += (uname) => {
btnPermission.ShowText += $"-({uname})";
//btnMain.PerformClick();
};
form.StartPosition = FormStartPosition.CenterScreen;
form.Opacity = 1;
form.TopMost = true;
form.ShowDialog(this);
}
}
else if (button == btnLanguage)
{
selectedButton = null;
//if (GlobalUser.IsVender() || GlobalUser.IsSuper())
{
ClearSelectBtn();
button.Selected = true;
CloseSubWindow();
BaseForm from = new SubMenuForm("Calib");
from.TopLevel = false;
from.Dock = DockStyle.Fill;
panel_main.Controls.Add(from);
from.Visible = true;
}
// btnLanguage.Enabled = false;
//VarConfig vc = new VarConfig(ShowBtn);
// vc.StartPosition = FormStartPosition.CenterScreen;
// vc.Show();
}
}
private void Form_OnloginSuccessEvent(string obj)
{
throw new NotImplementedException();
}
private void ShowBtn(string btnname)
{
if(btnname== "DebugMove")
{
btnAbout.Enabled = true;
}
else if(btnname== "VarConfig")
{
btnLanguage.Enabled = true ;
}
}
private void ClearSelectBtn()
{
btnMain.Selected = false;
btnData.Selected = false;
btnRecipe.Selected = false;
btnSystem.Selected = false;
btnAbout.Selected = false;
btnPermission.Selected = false;
btnLanguage.Selected = false;
btnQuit.Selected = false;
}
private void Home2_Load(object sender, EventArgs e)
{
if (GlobalVar.CheckVisionSwOpened)
{
while (true)
{
string vname = "KImage";
Process[] progresses = Process.GetProcesses();
if (progresses.Where(p => p.ProcessName == vname).Count() == 0)
{
Msgbox.ShowTipDialog(EButtonType.Retry, "Vision software hasn't open,please open vision software!");
}
else
{
break;
}
}
}
string language = Properties.Settings.Default.DefaultLanguage;
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
LanguageHelper.LoadLanguage(this, typeof(Home));
if(language=="zh-CN")
{
btnMain.ShowText = "主页";
btnRecipe.ShowText = "配方";
btnSystem.ShowText = "系统配置";
btnAbout.ShowText = "调试";
btnData.ShowText = "English";
btnLanguage.ShowText = "标定";
btnPermission.ShowText = "用户";
btnQuit.ShowText = "退出";
}
else
{
btnMain.ShowText = "Home";
btnRecipe.ShowText = "Recipe";
btnSystem.ShowText = "Settings";
btnAbout.ShowText = "Debuger";
btnLanguage.ShowText = "Vision calibration";
btnPermission.ShowText = "User";
btnQuit.ShowText = "Quit";
btnData.ShowText = "中文";
}
timer1.Enabled = false;
Ops.Init();
//SetFormStyle();
panel_main.Controls.Clear();
BaseForm form = ActiveForms.Get("FormMain");
if (form != null)
{
panel_main.Controls.Add(form);
form.TopLevel = false;
form.Dock = DockStyle.Fill;
form.Visible = true;
}
else
{
form = new FormMain();
form.Name = "FormMain";
form.TopLevel = false;
form.Dock = DockStyle.Fill;
panel_main.Controls.Add(form);
form.Visible = true;
ActiveForms.Add(form);
btnMain.Selected = true;
}
timer1.Enabled = true;
lblVersion.Text ="Version:"+System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
new HotKeyManager(Keys.P, 1, (o, arg) => {
UpCameraHelper.Grab();
//MonitorTray monitorTray = new MonitorTray();
//monitorTray.TopMost = true;
//monitorTray.ShowMax = false;
//monitorTray.ShowMin = false;
//monitorTray.ShowInTaskbar = false;
// monitorTray.Show();
});
new HotKeyManager(Keys.T, 1, (o, arg) => {
SelectProductFrm selectPro = new SelectProductFrm();
selectPro.TopMost = true;
selectPro.ShowInTaskbar = false;
selectPro.Show();
});
new HotKeyManager(Keys.N, 1, (o, arg) => {
NozzleStatusFrm nozzleFrm = new NozzleStatusFrm();
nozzleFrm.TopMost = true;
nozzleFrm.ShowInTaskbar = false;
nozzleFrm.Show();
});
new HotKeyManager(Keys.V, 1, (o, arg) => {
LocationData ld = new LocationData();
ld.StartPosition= FormStartPosition.CenterScreen;
ld.HeaderBackgroundColor = Color.Gray;
ld.Show();
//MonitorFlow mf = new MonitorFlow();
//mf.StartPosition= FormStartPosition.CenterParent;
//mf.HeaderBackgroundColor = Color.Gray;
//mf.Show();
});
timer2.Interval = 500;
timer2.Enabled = true;
timer3.Interval = 1000 * 60 * 60 * 2;
timer3.Enabled = true;
Task.Run(() =>
{
timer3_Tick(null, null);
});
if(File.Exists("breakdown.csv"))
{
File.Delete("breakdown.csv");
}
}
void ChangeLang()
{
string language = Properties.Settings.Default.DefaultLanguage;
if (language == "zh-CN")
{
btnMain.ShowText = "主页";
btnMain.Invalidate();
btnRecipe.ShowText = "配方";
btnRecipe.Invalidate();
btnSystem.ShowText = "系统配置";
btnSystem.Invalidate();
btnAbout.ShowText = "调试";
btnAbout.Invalidate();
btnData.ShowText = "English";
btnData.Invalidate();
btnLanguage.ShowText = "标定";
btnLanguage.Invalidate();
btnPermission.ShowText = "用户";
btnPermission.Invalidate();
btnQuit.ShowText = "退出";
btnQuit.Invalidate();
}
else
{
btnMain.ShowText = "Home";
btnMain.Invalidate();
btnRecipe.ShowText = "Recipe";
btnRecipe.Invalidate();
btnSystem.ShowText = "Settings";
btnSystem.Invalidate();
btnAbout.ShowText = "Debugger";
btnAbout.Invalidate();
btnLanguage.ShowText = "Vision calibration";
btnLanguage.Invalidate();
btnPermission.ShowText = "User";
btnPermission.Invalidate();
btnQuit.ShowText = "Quit";
btnQuit.Invalidate();
btnData.ShowText = "中文";
btnData.Invalidate();
}
}
private void SetFormStyle()
{
this.StartPosition = FormStartPosition.Manual;
this.FormBorderStyle = FormBorderStyle.None;//设置无边框
this.WindowState = FormWindowState.Maximized;//设置窗体最大化显示
this.MaximizedBounds = Screen.PrimaryScreen.WorkingArea;//设置窗体在无边框和最大化时不遮挡任务栏
}
private void timer1_Tick(object sender, EventArgs e)
{
//GC.Collect();
if(MachineManage.Instance.MachineStatus.ToString()!=lblMachineState.Text)
{
if(MachineManage.Instance.MachineStatus== EMachineStatus.NotInit)
{
this.panel1.BackColor = Color.Red;
}
else if(MachineManage.Instance.MachineStatus== EMachineStatus.Homing || MachineManage.Instance.MachineStatus == EMachineStatus.Stop)
{
this.panel1.BackColor = Color.FromArgb(192, 192, 0);
}
else
{
this.panel1.BackColor = Color.FromArgb(46, 46, 46);
}
lblMachineState.Text=MachineManage.Instance.MachineStatus.ToString();
}
if(DischargeFlow.Instance.GetCurStep().ToString()!=lblDischargeFlow.Text.Replace("主流程:", ""))
{
lblDischargeFlow.Text = "主流程:"+DischargeFlow.Instance.GetCurStep().ToString();
}
if (StockTakeFlow.Instance.GetCurStep().ToString() != lblStockLoadProductFlow.Text.Replace("料仓上料:", ""))
{
lblStockLoadProductFlow.Text = "料仓上料:" + StockTakeFlow.Instance.GetCurStep().ToString();
}
if (StockPlaceFlow.Instance.GetCurStep().ToString() != lblStockPlaceFlow.Text.Replace("料仓下料:", ""))
{
lblStockPlaceFlow.Text = "料仓下料:" + StockPlaceFlow.Instance.GetCurStep().ToString();
}
if (FixturePlaceFlow.Instance.GetCurStep().ToString() != lblFixturePlaceFlow.Text.Replace("治具上料:", ""))
{
lblFixturePlaceFlow.Text = "治具上料:" + FixturePlaceFlow.Instance.GetCurStep().ToString();
}
if (FixtureTakeFlow.Instance.GetCurStep().ToString() != lblFixtureTakeFlow.Text.Replace("治具下料:", ""))
{
lblFixtureTakeFlow.Text = "治具下料:" + FixtureTakeFlow.Instance.GetCurStep().ToString();
}
if (MonitorSystemButton.Instance.GetStep() != lblMonitorFlow.Text.Replace("Monitor:", ""))
{
lblMonitorFlow.Text = "Monitor:" + MonitorSystemButton.Instance.GetStep();
}
Process proc = Process.GetCurrentProcess();
if (proc != null)
{
long userdMem = proc.WorkingSet64;
lblMemory.Text = $"Mem:{(userdMem/1024)/1024} MB";
}
}
public override bool WindowsClose()
{
//DialogResult dr = MessageBox.Show("Are you sure to exit?", "tip", MessageBoxButtons.OKCancel);
EButtonType btnType = Msgbox.ShowTipDialog(EButtonType.Ok | EButtonType.Cancel, "Are you sure to exit?");
//if (dr == DialogResult.OK)
if(btnType== EButtonType.Ok)
{
LogHelper.Debug("手动退出软件");
Ops.Quit();
return true;
}
else
{
return false;
}
}
#region 内存回收
[DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
///
/// 释放内存
///
public static void ClearMemory()
{
GC.Collect();
GC.WaitForPendingFinalizers();
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
}
}
#endregion
///
/// 离子风扇报警
///
bool fanAlarm = false;
///
/// 正压报警
///
bool pPressvacAlarm = false;
///
/// 负压报警
///
bool nPressvacAlarm = false;
///
/// 安全们报警
///
bool doorAlarm = false;
///
/// 固定气缸报警
///
bool fixedCylinderAlarm = false;
private void timer2_Tick(object sender, EventArgs e)
{
//ClearMemory();
if (!GlobalVar.DisableDoor)
{
if(MachineManage.Instance.MachineStatus != EMachineStatus.NotInit)
{
if (!doorAlarm)
{
if (IoManager.Instance.ReadIn("门禁") == 0)
{
doorAlarm = true;
Ops.Stop();
Msgbox.Show(AlarmCollection.Get(AlarmConstID.安全门禁), EButtonType.None);
MessageQueue.Instance.Warn($"前安全门禁已触发,{AlarmCollection.Get(AlarmConstID.安全门禁).CN}");
}
}
else
{
if (IoManager.Instance.ReadIn("门禁") == 1)
{
doorAlarm = false;
MessageQueue.Instance.Warn("安全门禁已解除");
Msgbox.CloseBox(AlarmCollection.Get(AlarmConstID.安全门禁).AlarmID);
}
}
}
}
}
protected override CreateParams CreateParams
{
get
{
const int WS_MINIMIZEBOX = 0x00020000; // Winuser.h中定义
CreateParams cp = base.CreateParams;
cp.Style = cp.Style | WS_MINIMIZEBOX; // 允许最小化操作
return cp;
}
}
private void timer3_Tick(object sender, EventArgs e)
{
try
{
string dirpath = string.Empty;
dirpath = "D://Communition";
string[] dirs = Directory.GetDirectories(dirpath);
if (!Directory.Exists(dirpath))
{
Directory.CreateDirectory(dirpath);
}
foreach (var dir in dirs)
{
DirectoryInfo di = new DirectoryInfo(dir);
DateTime dtCreate = di.CreationTime;
if ((DateTime.Now - dtCreate).Days > 5)
{
di.Delete(true);
}
}
dirpath = "D://软件备份";
if (!Directory.Exists(dirpath))
{
Directory.CreateDirectory(dirpath);
}
dirs = Directory.GetDirectories(dirpath);
foreach (var dir in dirs)
{
DirectoryInfo di = new DirectoryInfo(dir);
DateTime dtCreate = di.CreationTime;
if ((DateTime.Now - dtCreate).Days > 15)
{
di.Delete(true);
}
}
//配置文件备份
string workDir = System.Environment.CurrentDirectory;
string zipFileName = DateTime.Now.ToString("yyyyMMddHH");
string bakDir = $"d://软件备份//{DateTime.Now.ToString("yyyyMMdd")}//{zipFileName}";
if (!Directory.Exists(bakDir))
{
Directory.CreateDirectory(bakDir);
CopyDirectory(workDir, bakDir);
string toDir = Path.Combine(Directory.GetParent(bakDir).FullName, zipFileName + ".zip");
ZipHelper.ZipDirectory(bakDir, toDir);
Directory.Delete(bakDir, true);
}
}
catch (Exception ex)
{
LogHelper.Error(ex.Message + ex.StackTrace);
}
}
public static void CopyDirectory(string sourceDir, string targetDir)
{
DirectoryInfo dir = new DirectoryInfo(sourceDir);
DirectoryInfo[] dirs = dir.GetDirectories();
// If the source directory does not exist, throw an exception.
if (!dir.Exists)
{
throw new DirectoryNotFoundException($"Source directory does not exist or could not be found: {sourceDir}");
}
// If the destination directory does not exist, create it.
if (!Directory.Exists(targetDir))
{
Directory.CreateDirectory(targetDir);
}
// Get the files in the directory and copy them to the new location.
FileInfo[] files = dir.GetFiles();
foreach (FileInfo file in files)
{
string tempPath = Path.Combine(targetDir, file.Name);
file.CopyTo(tempPath, false);
}
// If copying subdirectories, copy them and their contents to the new location.
foreach (DirectoryInfo subdir in dirs)
{
string tempPath = Path.Combine(targetDir, subdir.Name);
CopyDirectory(subdir.FullName, tempPath);
}
}
}
}