using DC_A95;
using DC_A95.MES_A95;
using MesToMs;
using SlMesDbIterface;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using SystemFramework;
using WebApi;
namespace MesWork
{
///
///
///
public partial class Temp { }
///
/// 程式启动
///
public partial class MesWorkForm
{
InitServer initServer = null;
///
/// 从这里启动
///
///
protected override void OnShown(EventArgs e)
{
//【0】基础信息检查
SqlOperation.ExecuteSql("select getdate()", out DataTable dt, out string error);
if (error.Length > 0)
{
MessageBox.Show($"数据库配置错误!请检查数据库连接!!\r\n\r\n{MesWorkForm.ConnectionString}");
Process.GetCurrentProcess().Kill();
}
DataLinkMesWork.ApplicationConfig.ConnectionString_MES = MesWorkForm.ConnectionString;
label_SqlConn.Text = MesWorkForm.ConnectionString;
//【1】系统基本参数设定
ThreadPool.SetMaxThreads(workerThreads, completionPortThreads);
Never_Know.Hello_You_All_Never_Know = Hello_You_All_Never_Know;
new ApplicationLog();
//【2】初始化
ReLoadStationIcon();
Visible_SaveLyoutBtn(false);
Hanger.Load_Station_PageShowSignal();
//【3】创建通讯
LoadOpcData();
Hanger.Load_Table();
// LoadOPCData(BasicDataTableFile, IsDemoMesServer, IsWriteMonitorLog, true);
Thread.Sleep(200);
StartServer();
Thread.Sleep(200);
First_TagMonitor();
//var onList = CheckDeviceOnLine();
//【4】检查在线状态
CommunicationCheckOnLine();
//【5】通讯成功的初始化设备数据
timer_OnLine_Show.Interval = 1000;
timer_OnLine_Show.Enabled = true;
timer_ShowStation.Interval = 1000;
timer_ShowStation.Enabled = true;
//【7】HashTable 加载TaskType
Upload_TaskTypeInfo();
var task1 = new Thread(new ThreadStart(Loop));
task1.IsBackground = true;
task1.Start();
Text = Text + $"【{MesWorkForm.ProgramPartial}】";
// 【8】 WebApi 相关
initServer = new WebApi.InitServer(MesWorkForm.WebSvrPort);
LogRecord.LogRecord.Insert_Log(Type_Log.Login,"", $"MES系统启动成功!");
}
private void Upload_TaskTypeInfo()
{
ht_TaskTypeInfo=new System.Collections.Hashtable();
DataTable dt = ExecuteDB.Get_TaskTypeInfo();
foreach (DataRow itemRow in dt.Rows)
{
TaskTypeInfo taskTypeInfo = new TaskTypeInfo();
taskTypeInfo.TaskTypeID = short.Parse(itemRow["任务类型"].ToString());
taskTypeInfo.TaskTypeName = itemRow["任务类型名称"].ToString();
taskTypeInfo.QCDataCount = int.Parse(itemRow["质量数据数量"].ToString());
taskTypeInfo.DataName1 = itemRow["数据名称1"].ToString();
taskTypeInfo.DataUnit1 = itemRow["数据单位1"].ToString();
taskTypeInfo.DataName2 = itemRow["数据名称2"].ToString();
taskTypeInfo.DataUnit2 = itemRow["数据单位2"].ToString();
taskTypeInfo.DataName3 = itemRow["数据名称3"].ToString();
taskTypeInfo.DataUnit3 = itemRow["数据单位3"].ToString();
taskTypeInfo.DataName4 = itemRow["数据名称4"].ToString();
taskTypeInfo.DataUnit4 = itemRow["数据单位4"].ToString();
ht_TaskTypeInfo.Add(taskTypeInfo.TaskTypeID,taskTypeInfo);
}
}
private void LoadOpcData()
{
DataTable dt_Tag = null;
ExecuteDB.Select_Station(out DataTable dt_Station);
dt_OPNameInfo = dt_Station.Copy();
int tableLength = NPOITest.ExeclHelper.ExcelToDataTable(BasicDataTableFile, "MES_基本变量原始数据", true).Select($"是否启用='1'").Length;
var dt_Tag_Mes = new DataTable();
if (tableLength > 0)
{
dt_Tag_Mes = NPOITest.ExeclHelper.ExcelToDataTable(BasicDataTableFile, "MES_基本变量原始数据", true).Select($"是否启用='1'").CopyToDataTable();
}
var dt_Tag_Model = NPOITest.ExeclHelper.ExcelToDataTable(BasicDataTableFile, "MES_信号表模板", true).Select($"是否启用='1'").CopyToDataTable();
var dt_Device = NPOITest.ExeclHelper.ExcelToDataTable(BasicDataTableFile, "设备类型对应表", true).Select($"是否启用='1'").CopyToDataTable();
dt_Tag = dt_Tag_Model.Clone();
for (int i = 0; i < dt_Station.Rows.Count; i++)
{
//[工位号],[工位名称],[PLC],[PLC代码],[PX],[PY],[PX_T],[PY_T],[控件启用]
var 工位名称 = dt_Station.Rows[i]["工位名称"].ToString();
var PLC = dt_Station.Rows[i]["PLC"].ToString();
var stationName = dt_Station.Rows[i]["工位号"].ToString();
var DB_NAME = dt_Station.Rows[i]["PLC代码"].ToString();
var zoneCode = dt_Station.Rows[i]["区域代码"].ToString();
var dt_Op_QC_DATA = dt_Tag_Model.Copy().Select($"DbName='DB_NAME'").CopyToDataTable();
UpdateOpTable(dt_Op_QC_DATA, stationName, 工位名称, PLC, DB_NAME);
dt_Tag.Merge(dt_Op_QC_DATA);
}
dt_Tag.Merge(dt_Tag_Mes);
LoadOPCData(dt_Tag, dt_Device, IsDemoMesServer, IsWriteMonitorLog, true, false, out string error);
if (error.Length > 0)
{
MessageBox.Show($"加载信号产生错误,程序不能启动!!错误:{error}");
Process.GetCurrentProcess().Kill();
}
var dt_Tag1 = dt_Tag.Copy();
dt_Tag1.TableName = "MES_基本变量_原始数据";
SqlOperation.ExecuteSql($" truncate table {dt_Tag1.TableName}", out string error1);
SqlOperation.SqlbulkcopyInsert(dt_Tag1);
var dt_Device1 = dt_Device.Copy();
dt_Device1.TableName = "MES_基本变量设备类型对应表";
SqlOperation.ExecuteSql($" truncate table {dt_Device1.TableName}", out string error2);
SqlOperation.SqlbulkcopyInsert(dt_Device1);
}
private void UpdateOpTable(DataTable dt,string opName,string opNameName,string ip, string dbName)
{
foreach (DataRow row in dt.Rows)
{
//TagID TagName 工位号 数据来源 IP DbName 变量特点 变量类型代码
var TagName = row["TagName"].ToString();
var 变量类型代码 = row["变量类型代码"].ToString();
var 变量特点 = row["变量特点"].ToString();
var 变量排序 = row["变量排序"].ToString();
row["TagID"] = $"8{opName.Substring(opName.Length - 4, 4)}{变量排序.PadLeft(3,'0')}";
//row["TagID"] = Guid.NewGuid().ToString ().ToUpper ();
row["工位号"] = opName;
row["数据来源"] = opNameName;
row["IP"] = ip;
row["DbName"] = dbName;
row["监控组"] = $"{row["监控组"].ToString()}_{opName}";
}
}
}
}