268 lines
8.1 KiB
C#
268 lines
8.1 KiB
C#
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
|
||
}
|
||
}
|
||
}
|