Files
6150-HMI/CowainHmi/FrmMain.cs
2026-01-15 15:06:36 +08:00

268 lines
8.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using CowainHmi.S1;
using PCHMI;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using XPHMI;
namespace CowainHmi
{
public partial class FrmMain : Form
{
int survey = 0;
int A = 0; //RFID读
int B = 0; //RFI写
int B1 = 0; ////回原弹窗
int C = 0; //相机NG弹窗
public FrmMain()
{
InitializeComponent();
}
private async void FrmMain_Load(object sender, EventArgs e)
{
config1.START(this);
FrmProgress frm = new FrmProgress();
frm.TopMost = true;
frm.Show();
frm.Activate();
await LoadDataAsync();
}
private async Task LoadDataAsync()
{
PCHMI.RT.SEND_UINT16(0, "U200", 0);
//窗体加载时把站名称都读上来
await ReadStationNames();
GlobalData.StationChanged += GlobalData_StationChanged;
GlobalData.StationId = 0;
this.timer1.Enabled = true;
}
private async Task ReadStationNames()
{
//PCHMI.VL.GET_SIEMENS_STRING(0, "DB999.0", 6); //设备名称
//PCHMI.VL.GET_SIEMENS_STRING(0, "DB999.8", 6); //设备名称
//PCHMI.VL.GET_SIEMENS_STRING(0, "DB999.16", 6); //设备名称
//PCHMI.VL.GET_SIEMENS_STRING(0, "DB999.24", 6); //设备名称
string[] names = this.Tag.ToString().Split(',');
await Task.Delay(300);
//List<string> list = new List<string>();
//list.Add(PCHMI.VL.GET_SIEMENS_STRING(0, "DB999.0", 6));
//list.Add(PCHMI.VL.GET_SIEMENS_STRING(0, "DB999.8", 6));
//list.Add(PCHMI.VL.GET_SIEMENS_STRING(0, "DB999.16", 6));
//list.Add(PCHMI.VL.GET_SIEMENS_STRING(0, "DB999.24", 6));
foreach (var item in names)
{
if (!string.IsNullOrEmpty(item))
{
GlobalData.StationNames.Add(item);
}
}
}
private void GlobalData_StationChanged(object sender, int e)
{
int pageId = (e + 1) * 100;
bool ret = ShowStation(e);
if (ret)
{
PCHMI.RT.SEND_UINT16(0, "U200", (ushort)pageId);
}
else
{
MessageBox.Show("画面为空,不能创建", "提示");
}
}
private ushort safeErrLast;
private void timer1_Tick(object sender, EventArgs e)
{
ushort safeErr = PCHMI.RT.GET_BIT(0, "U:S1_SafeErr");
//出现安全信号故障,主动弹出窗口
if (safeErr > 0 && safeErr != safeErrLast)
{
DlgS1安全.GetInstance().Show();
DlgS1安全.GetInstance().Activate();
}
safeErrLast = safeErr;
survey = PCHMI.RT.GET_INT16(0, "");
if (survey == 1)
{
ShowPotho();
}
if (survey == 2)
{
ShowPotho1();
}
////回原弹窗
B1 = PCHMI.RT.GET_INT16(0, "DB1651.20");
if (B1 == 1)
{
1_ OBJ = new 1_();
//OBJ.TopMost = true;
OBJ.Show();
PCHMI.RT.SEND_INT16(0, "DB1651.20", 2);
}
//RFID读
A = PCHMI.RT.GET_INT16(0, "DB1651.22");
if (A == 1)
{
DlgS1RFID1读超时 OBJ = new DlgS1RFID1读超时();
//OBJ.TopMost = true;
OBJ.Show();
PCHMI.RT.SEND_INT16(0, "DB1651.22", 2);
}
//RFID写
B = PCHMI.RT.GET_INT16(0, "DB1651.24");
if (B == 1)
{
DlgS1RFID1写超时 OBJ = new DlgS1RFID1写超时();
//OBJ.TopMost = true;
OBJ.Show();
PCHMI.RT.SEND_INT16(0, "DB1651.24", 2);
}
C = PCHMI.RT.GET_INT16(0, "DB1651.26");
if (C == 1)
{
2_NG弹窗 OBJ = new 2_NG弹窗();
//OBJ.TopMost = true;
OBJ.Show();
PCHMI.RT.SEND_INT16(0, "DB1651.26", 2);
}
}
private void ShowPotho() //打开笑脸
{
//DlgS1笑脸 OBJ = new DlgS1笑脸();
//OBJ.TopMost = true;
//OBJ.Location = new Point(300, 161);
//OBJ.Show();
//PCHMI.RT.SEND_INT16(0, "DB1651.20", 10);
}
private void ShowPotho1() //打开哭脸
{
//DlgS1哭脸 C = new DlgS1哭脸();
////C.TopMost = true;
//C.Location = new Point(300, 161);
//C.Show();
//PCHMI.RT.SEND_INT16(0, "DB1651.20", 10);
}
private bool ShowStation(int stationId)
{
RemoveControlByName(this, "顶部");
RemoveControlByName(this, "任务栏");
var top = CreateStationControl(stationId, "顶部");
if (top == null)
{
return false;
}
var bottom = CreateStationControl(stationId, "任务栏");
if (bottom == null)
{
return false;
}
//
// 顶部
//
top.Dock = System.Windows.Forms.DockStyle.Top;
top.Location = new System.Drawing.Point(0, 0);
top.Name = "顶部";
top.Size = new System.Drawing.Size(1366, 60);
top.TabIndex = 0;
//
// 任务栏
//
bottom.Dock = System.Windows.Forms.DockStyle.Bottom;
bottom.Location = new System.Drawing.Point(0, 688);
bottom.Name = "任务栏";
bottom.Size = new System.Drawing.Size(1366, 80);
bottom.TabIndex = 1;
this.Controls.Add(top);
this.Controls.Add(bottom);
return true;
}
private void RemoveControlByName(Control parent, string controlName)
{
// 遍历所有子控件
foreach (Control child in parent.Controls)
{
// 如果找到了指定名称的控件
if (child.Name == controlName)
{
// 从父控件的Controls集合中移除该控件
parent.Controls.Remove(child);
// 如果需要,可以在这里添加更多逻辑,比如释放资源等
// 因为我们找到了并移除了控件,所以不需要继续搜索
return;
}
// 如果当前控件还包含子控件,则递归搜索
if (child.HasChildren)
{
RemoveControlByName(child, controlName);
}
}
}
public UserControl CreateStationControl(int stationId, string name)
{
string topName = $"S{stationId + 1}{name}";
var baseType = typeof(UserControl);
Assembly asm = Assembly.GetExecutingAssembly();
var types = asm.GetTypes()
.Where(x => x != baseType && baseType.IsAssignableFrom(x)).ToArray();
if (types != null && types.Length > 0)
{
var type = types.Where(x => x.IsClass && x.Name == topName).FirstOrDefault();
if (type != null && type.IsSubclassOf(typeof(UserControl)))
{
// 假设所有相关控件都有一个接受int类型ID的构造函数
return (UserControl)Activator.CreateInstance(type);
}
}
return null; // 如果没有找到或类型不匹配则返回null
}
}
}