Files
6150-HMI/CowainHmi/FrmMain.cs

268 lines
8.1 KiB
C#
Raw Normal View History

2026-01-15 15:06:36 +08:00
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
}
}
}