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
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|