using BasicData; using bizFacade; using OpcData; using System; using System.Collections; using System.Data; using System.Threading; using System.Windows.Forms; using SystemFramework; using System.Drawing; using MesServerWork; using System.Configuration; using MisDataFunction; using System.Collections.Generic; using MQTTnet.Client.Connecting; using MQTTnet.Client.Disconnecting; using MQTTnet.Client.Receiving; using System.Linq; using OpcBasic; using System.Collections.Concurrent; using MesWork; using Newtonsoft.Json; using System.Net.Http; using System.Text; using MesWork.DeviceDriver; using NPOI.SS.Formula; /// /// /// namespace MisDataName { /// /// /// /// /// public delegate void RefreshForm(object obj1, EventArgs obj2); /// /// /// public partial class MisData : MIS_BASE { /// /// /// public static string BasicDataTableFile = ConfigurationManager.AppSettings["BasicDataTableFile"]; /// /// /// public static int IsDemoMesServer = Convert.ToInt32(ConfigurationManager.AppSettings["IsDemoMesServer"]); /// /// /// public static string MqttUrl = ConfigurationManager.AppSettings["MqttUrl"]; //public static string MqttUrlPLC = ConfigurationManager.AppSettings["MqttUrlPLC"]; /// /// /// public static string MqttTargetTopic = ConfigurationManager.AppSettings["MqttTargetTopic"]; public static string MqttTargetTopicPLC = ConfigurationManager.AppSettings["MqttTargetTopicPLC"]; /// /// /// public static int IsWriteMonitorLog = Convert.ToInt32(ConfigurationManager.AppSettings["IsWriteMonitorLog"]); /// /// /// public static string ConnectionString_MES = ConfigurationManager.AppSettings["ConnectionString_MES"]; /// /// /// public static int WebApiPort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["WebApiPort"]); /// /// /// public static RefreshForm MainFormRefresh, TestPlcStatusDel; /// /// 允许使用附加功能的变量,只有在系统开始加载Tag时,才允许读取PLC数据 /// public static bool AllowLoad; /// /// /// public MisData() { InitializeComponent(); this.DoubleBuffered = true; CheckForIllegalCrossThreadCalls = false; this.Cursor = Cursors.WaitCursor; TopMost = true; Never_Know.Hello_You_All_Never_Know = Hello_You_All_Never_Know; new ApplicationLog(); ThreadPool.SetMaxThreads(1000, 500); MIS_BASE.MqttTargetTopic = MqttTargetTopic; MIS_BASE.MqttTargetTopicPLC = MqttTargetTopicPLC; new DataLinkMesWork.ApplicationConfig(); DataTable dt_Signal; DataTable dt_Device; DataTable dt_TagTypeDataType; dt_Signal = bizFacade.BaseDataSystemMES.dt_Signal(); dt_Device = bizFacade.BaseDataSystemMES.dt_Device(); dt_TagTypeDataType = bizFacade.BaseDataSystemMES.dt_TagTypeDataType(); //if (LoadOPCData(BasicDataTableFile, IsDemoMesServer, IsWriteMonitorLog, true)) if (LoadOPCData(dt_Signal, dt_Device, IsDemoMesServer, IsWriteMonitorLog, true)) { //MisData_SyncRawData(); MesDataFunction.LoadTagTypeCodeID.Load(dt_TagTypeDataType); //MesDataFunction.LoadTagTypeCodeID.Load(BasicDataTableFile); showMessagePLCInvoke = new ShowMessagePLCInvoke(ShowMessagePLC); TestPlcConnectInit(); MainFormRefresh = new RefreshForm(button_ReadData_Click); QueryMainFormPosition = new QueryFormData(QueryFormPosition); MainActived = new MainAct(this.Activate); TestPlcStatusDel = new RefreshForm(RefreshPlcConnectStatus); AssemblyManagement.InitAssembly_Recycle(); new InitTagValueListData(); //设备保养通知计划:设备保养通知计划调度 InitMachinePlan(new MachinePlan_Invoke(MachinePlan)); if (IsDemoMesServer == 1) { toolStripStatusLabel_RunningStatus.Text = "变量模拟"; toolStripStatusLabel_RunningStatus.BackColor = System.Drawing.Color.Yellow; } else { toolStripStatusLabel_RunningStatus.Text = "PLC"; toolStripStatusLabel_RunningStatus.BackColor = System.Drawing.Color.Green; } StartTime = Convert.ToDateTime(toolStripStatusLabel_StartTime.Text = DateTime.Now.ToString()); Runtime_Thread(); //查询出“全部原始基本数据列表” var drs = MesWork.PlcLinkForm.dt_BasicData.Select($"是否启用 = 1 and 变量类型代码=101 or 变量类型代码 = 102 or 变量类型代码 = 105 and 监控属性代码 = '{DataLinkMesWork.ApplicationConfig.MES_Code.ToString()}'"); if(drs.Length>1) { BasicDataTagValue = MesWork.PlcLinkForm.dt_BasicData.Select($"是否启用 = 1 and 变量类型代码=101 or 变量类型代码 = 102 or 变量类型代码 = 105 and 监控属性代码 = '{DataLinkMesWork.ApplicationConfig.MES_Code.ToString()}'").CopyToDataTable(); if (BasicDataTagValue.Columns.Contains("上限值")) { BasicDataTagValue.Columns["上限值"].ColumnName = "值上限"; } if (BasicDataTagValue.Columns.Contains("下限值")) { BasicDataTagValue.Columns["下限值"].ColumnName = "值下限"; } } // BasicDataTagValue = MesWork.PlcLinkForm.dt_BasicData.Select($"是否启用 = 1 and 监控属性代码 = '{DataLinkMesWork.ApplicationConfig.MES_Code.ToString()}'").CopyToDataTable(); //查询出“MES_基本数据_测量范围” BasicDataTagValueUpDown = MesWork.PlcLinkForm.dt_BasicData; if (BasicDataTagValueUpDown.Columns.Contains("上限值")) { BasicDataTagValueUpDown.Columns["上限值"].ColumnName = "值上限"; } if (BasicDataTagValueUpDown.Columns.Contains("下限值")) { BasicDataTagValueUpDown.Columns["下限值"].ColumnName = "值下限"; } // 模拟时,写入质量数据 InitBasicDataTagValue(); // 变量代码与其他字段的对应关系 InitHashtableTagID(); this.Cursor = Cursors.Default; Cbx_StatusDisplay_CheckedChanged(null, null); AllowLoad = true; Cbx_StatusDisplay.Enabled = true; button_ReadData_Click(null, null); timer_TestPLC.Enabled = true; EToolStripMenuItem_EquipAlarm_Click(null, null); timer_LoadOver.Enabled = true; TopMost = false; // Thread.Sleep(200); //First_TagMonitor(); //开启发送监控变量第一次的值 // Thread.Sleep(200); // Init_TagMonitor(); //开启初始化监控变量 Thread.Sleep(200); var deviceState = StartServer(WebApiPort); //开启监控服务 loadFinish = true; InitcomboBox_OpName(); //初始化程序集列表 InitProgramFunctionAssembly(); WorkStationNum_Now = comboBox_OpName.SelectedValue.ToString(); ListBox1_Item_Init(); } } /// /// 模拟时,写入质量数据 /// private void InitBasicDataTagValue() { if (IsDemoMesServer != 1) return; string tagID; double tagValue; //写工位总合格标志 变量类型代码=21 for (int i = 0; i < MesWork.PlcLinkForm.dt_BasicData.Rows.Count; i++) { if(MesWork.PlcLinkForm.dt_BasicData.Rows[i]["变量类型代码"].ToString()=="21") { tagID = MesWork.PlcLinkForm.dt_BasicData.Rows[i]["TagID"].ToString(); WritePLC(tagID, 1); } } if(BasicDataTagValue!=null) { for (int i = 0; i < BasicDataTagValue.Rows.Count; i++) { try { switch (Convert.ToInt32(BasicDataTagValue.Rows[i]["变量特点"])) { case 7: tagID = BasicDataTagValue.Rows[i]["TagID"].ToString(); WritePLC(tagID, 1); break; case 6: tagID = BasicDataTagValue.Rows[i]["TagID"].ToString(); tagValue = Convert.ToDouble(BasicDataTagValue.Rows[i]["列位置"]) * 100 + Convert.ToDouble(BasicDataTagValue.Rows[i]["变量排序"]) / 100; WritePLC(tagID, tagValue); break; } } catch { } } } } private void InitBasicDataTagValue(string opName) { var BaseDate = BasicDataTagValue.AsEnumerable(); var BaseDateOpName = from row in BaseDate where row["工位号"].ToString() == opName select row; string tagID; double tagValue; //写工位总合格标志 变量类型代码=21 for (int i = 0; i < MesWork.PlcLinkForm.dt_BasicData.Rows.Count; i++) { if (MesWork.PlcLinkForm.dt_BasicData.Rows[i]["变量类型代码"].ToString() == "21" && MesWork.PlcLinkForm.dt_BasicData.Rows[i]["工位号"].ToString() == opName) { tagID = MesWork.PlcLinkForm.dt_BasicData.Rows[i]["TagID"].ToString(); WritePLC(tagID, 1); } } foreach (var item in BaseDateOpName) { try { switch (Convert.ToInt32(item["变量特点"])) { case 7: tagID = item["TagID"].ToString(); WritePLC(tagID, 1); break; case 6: tagID = item["TagID"].ToString(); tagValue = Convert.ToDouble(item["列位置"]) * 100 + Convert.ToDouble(item["变量排序"]) / 100; WritePLC(tagID, tagValue); break; } } catch { } } } static bool loadFinish = false; /// /// 初始化Function对应的程序集 /// void InitProgramFunctionAssembly() { int mesServerCode=0; string mesServerdllName=""; System.Reflection.Assembly assembly = null; foreach (var opName in opNameList) { try { mesServerCode = GetMesServerCodeByOpName(opName); mesServerdllName = GetMesServeDllByOpName(opName); assembly = System.Reflection.Assembly.Load(mesServerdllName); if (assembly == null) { // return; } if (!MesDataFunction.OpcOperation.Hashtable_assembly.ContainsKey(mesServerdllName)) { MesDataFunction.OpcOperation.Hashtable_assembly.Add(mesServerdllName, assembly); } } catch (Exception err) { if (!MesDataFunction.OpcOperation.Hashtable_assembly.ContainsKey(mesServerdllName)) { MesDataFunction.OpcOperation.Hashtable_assembly.Add(mesServerdllName, null); } ApplicationLog.WriteLog(err, err.Message); } } } List opNameList; /// /// 初始化comboBox_OpName(工位号) /// private void InitcomboBox_OpName() { //全部工位号 comboBox_OpName.DataSource = opNameList = MesWork.PlcLinkForm.opNameList; FunctionForm_HashiTable.OpName_Hash_Write("OpNameList", opNameList); toolStripStatusLabel_WorkStationNum.Text = MesWork.PlcLinkForm.opNameList.Count.ToString(); toolStripStatusLabel_DownLine.Text = toolStripStatusLabel_WorkStationNum.Text; } private void listBox1_SelectedValueChanged(object sender, EventArgs e) { try { string cmd; string opName; string tagValue; string[] strList; if (listBox1.Text != null) { strList = listBox1.Text.Split('|'); if (strList.Length >= 4) { cmd = strList[1]; opName = strList[2]; tagValue = strList[3]; textBox_Cmd.Text = cmd; textBox_tagValue.Text = tagValue; } } } catch (Exception err) { ApplicationLog.WriteLog(err, err.Message); } } private void button_Write_Click(object sender, EventArgs e) { try { short tagValue_int; string tagValue_str; byte tagValue_byte; bool tagValue_bool; int tagType; int tagDataType; string cmd = textBox_Cmd.Text; string opName = WorkStationNum_Now; string tagValue = textBox_tagValue.Text; tagType = Convert.ToInt32(MesDataFunction.OpcOperation.hashtable_TagType[cmd]); tagDataType = Convert.ToInt32(MesDataFunction.OpcOperation.hashtable_TagTypeDataType[tagType.ToString()]); switch (tagDataType) { case 2: tagValue_int = Convert.ToInt16(tagValue); WriteAnyData_Thread(tagType, opName, tagValue_int); break; case 8: tagValue_str = tagValue.ToString(); WriteAnyData_Thread(tagType, opName, tagValue_str); break; case 17: tagValue_byte = Convert.ToByte(tagValue); WriteAnyData_Thread(tagType, opName, tagValue_byte); break; case 11: tagValue_bool = Convert.ToBoolean(Convert.ToInt32(tagValue)); WriteAnyData_Thread(tagType, opName, tagValue_bool); break; } } catch (Exception err) { MessageBox.Show("输入命令异常,请重新输入!"); ApplicationLog.WriteLog(err, err.Message); } } private void button_Read_Click(object sender, EventArgs e) { try { int tagType; string cmd = textBox_Cmd.Text; string opName = WorkStationNum_Now; string tagValue = textBox_tagValue.Text; tagType = Convert.ToInt32(MesDataFunction.OpcOperation.hashtable_TagType[cmd]); QualityDataQueryStruct QualityStruct = new QualityDataQueryStruct(opName, tagType, textBox_tagValue_Read); Thread t = new Thread(new ParameterizedThreadStart(ReadPLC_ByTagType_Thread)); t.Start(QualityStruct); } catch (Exception err) { ApplicationLog.WriteLog(err, err.Message); } } void ReadPLC_ByTagType_Thread(object obj) { try { QualityDataQueryStruct QualityStruct = (QualityDataQueryStruct)obj; TextBox tbx = (TextBox)QualityStruct.Ctrl; tbx.Text = ReadPLC(QualityStruct.tagType, QualityStruct.OpName).ToString(); } catch (Exception err) { ApplicationLog.WriteLog(err, err.Message); } } bool isWorkStart; private void timer_WorkStart_Tick(object sender, EventArgs e) { if (isWorkStart) isWorkStart = false; else isWorkStart = true; if (isWorkStart) { textBox_tagValue.Text = "1"; button_Write_Click(null, null); } else { textBox_tagValue.Text = "0"; button_Write_Click(null, null); } } private void checkBox_WorkStart_CheckedChanged(object sender, EventArgs e) { if (textBox_Cmd.Text == "" && checkBox_WorkStart.Checked) { MessageBox.Show("请选择命令"); checkBox_WorkStart.Checked = false; return; } if (checkBox_WorkStart.Checked) { timer_WorkStart.Enabled = true; listBox1.Enabled = false; textBox_Cmd.ReadOnly = true; } else { timer_WorkStart.Enabled = false; listBox1.Enabled = true; textBox_Cmd.ReadOnly = false; } } private void numericUpDown1_ValueChanged(object sender, EventArgs e) { timer_WorkStart.Interval = Convert.ToInt32(numericUpDown1.Value) * 1000; } static Thread ReadQuality_t = null; private void ReadQualityData(string opName) { try { if (ReadQualityRunning) return; ReadQualityRunning = true; QualityDataQueryStruct QltyQueryStr = new QualityDataQueryStruct(opName, listView_ShowQualityData); //ReadQualityData_Thread(QltyQueryStr); ReadQuality_t = new Thread(new ParameterizedThreadStart(ReadQualityData_Thread)); ReadQuality_t.Start(QltyQueryStr); //if (ReadQualityRunning) return; //ReadQualityRunning = true; //QualityDataQueryStruct QltyQueryStr = new QualityDataQueryStruct(opName, listView_ShowQualityData); //ReadQuality_t = new Thread(new ParameterizedThreadStart(ReadQualityData_Thread)); //ReadQuality_t.Start(QltyQueryStr); } catch (Exception err) { ApplicationLog.WriteLog(err, err.Message); } } static bool ReadQualityRunning = false; void ReadQualityData_Thread(object obj) { int fTime = 0; try { QualityDataQueryStruct QualityStruct = (QualityDataQueryStruct)obj; ListView listViewTemp = (ListView)QualityStruct.Ctrl; ListViewItem listViewItem = null; string[] listViewItemString = new string[4]; if (listViewTemp.InvokeRequired) { Action ActionDelegate = () => { listViewTemp.Items.Clear(); }; listViewTemp.Invoke(ActionDelegate); } else { listViewTemp.Items.Clear(); } //System.Collections.Concurrent.ConcurrentDictionary cd = null; IEnumerable cd=null; //IEnumerable items; string opName = QualityStruct.OpName; var opTagList = GetDbAndMaxLengthByOpNameByBytes(opName); //TagID 排序 //var cd_OpName = opTagList.OrderBy(x => x.Key).ToDictionary(k => k.Key, v => v.Value); //全部数据 var cd_OpName = from r in opTagList orderby r.Key select r; //质量数据 var query_Qd = from r in opTagList where ((OpcBasic.TagFormat)r.Value).TagTypeCodeID == 105 orderby r.Key select r; //监控变量 var query_Monitor = from r in opTagList where ((OpcBasic.TagFormat)r.Value).TagTypeCodeID != 105 orderby r.Key select r; if (cb_MonitorData.Checked) { cd = query_Monitor ; //cd = MesWork.PlcLinkForm.ReadPLC_GroupMonitor(QualityStruct.OpName); } if (cb_QdData.Checked) { cd = query_Qd ; //cd = MesWork.PlcLinkForm.ReadPLC_GroupData_Qd(QualityStruct.OpName); } if (cb_MonitorData.Checked == false & cb_QdData.Checked == false) { cd = cd_OpName ; //cd = MesWork.PlcLinkForm.ReadPLC_GroupData(QualityStruct.OpName); } if (cb_MonitorData.Checked == true & cb_QdData.Checked == true) { cd = cd_OpName ; //cd = MesWork.PlcLinkForm.ReadPLC_GroupData(QualityStruct.OpName); } //排序 var result2 = cd;// from pair in cd orderby pair.Key select pair; ThisWorkStationData = new QualityDataType[1000]; foreach (KeyValuePair _cd in result2) { var tagID = _cd.Key; var TF = (OpcBasic.TagFormat)_cd.Value; listViewItemString[0] = TF.OpName; listViewItemString[3] = TF.TagID; listViewItemString[1] = TF.ItemName; listViewItemString[2] = TF.TagValue.ToString (); listViewItem = new ListViewItem(listViewItemString); if (TF.IsMonitor == 1) { listViewItem.BackColor = Color.LimeGreen; } if (listViewTemp.InvokeRequired) { Action ActionDelegate = (x) => { listViewTemp.Items.Add(x); }; listViewTemp.BeginInvoke(ActionDelegate, listViewItem); } else { listViewTemp.Items.Add(listViewItem); } ThisWorkStationData[fTime].opName = TF.OpName; ThisWorkStationData[fTime].tagID = TF.TagID; ThisWorkStationData[fTime].tagTypeID = TF.TagTypeID; ThisWorkStationData[fTime].tagValue = TF.TagValue; fTime++; } ReadQualityRunning = false; } catch (Exception err) { ReadQualityRunning = false; ApplicationLog.WriteLog(err, err.Message); } } private void ListViewPlcData() { } private void button_ReadData_Click(object sender, EventArgs e) { if (loadFinish) { ReadQualityData(WorkStationNum_Now); } } private void comboBox_OpName_SelectedIndexChanged(object sender, EventArgs e) { //此处需要异步查询当前工位在线状态 try { if (AllowLoad) { WorkStationNum_Now = comboBox_OpName.SelectedValue.ToString(); InitFormBtnColor();//初始化按钮颜色 initStationStatus();//初始化工位状态栏 ListBox1_Item_Init(); if (Cbx_StatusDisplay.Checked) { ReadPLC_ProductInfo();//读取PLC状态 ReadMES_ProductInfo();//读取MES状态 button_ReadData_Click(null, null); } } } catch (Exception err) { ApplicationLog.WriteLog(err, err.Message); } } private void listView_ShowQualityData_MouseDoubleClick(object sender, MouseEventArgs e) { try { QualityDataType SelectData = new QualityDataType(); ListView.SelectedIndexCollection index = new ListView.SelectedIndexCollection(listView_ShowQualityData); SelectData = ThisWorkStationData[index[0]]; WriteQualityValueForm WriteForm = new WriteQualityValueForm(SelectData, this); WriteForm.ShowDialog(); } catch (Exception err) { ApplicationLog.WriteLog(err, err.Message); } } private void groupBox_SignialSimulatorBtn_Click(object sender, EventArgs e) { WriteBoolSignalByFormBtn(sender); } private void Btn_Write_PLC_Click(object sender, EventArgs e) { WriteNormalDataBygroupBox_SignialSimulatorWriteBtn(sender); } private void Btn_Write_MES_Click(object sender, EventArgs e) { WriteNormalDataBygroupBox_SignialSimulatorWriteBtn(sender); } private void Btn_ClearRichBox_Click(object sender, EventArgs e) { richTextBox_MessagePLC.Clear(); } private void Cbx_StatusDisplay_CheckedChanged(object sender, EventArgs e) { if (Cbx_StatusDisplay.Checked) { InitFormBtnColor(); initStationStatus(); button_ReadData_Click(null, null); checkBox_PLCData_Display.Visible = true; checkBox_MESData_Display.Visible = true; checkBox_Quality_Display.Visible = true; } else { RefreshBtnColorWriteNull(); RefreshStationStatusWriteNull(); checkBox_PLCData_Display.Visible = false; checkBox_MESData_Display.Visible = false; checkBox_Quality_Display.Visible = false; } } private void Btn_Read_PLC_Click(object sender, EventArgs e) { ReadPLC_ProductInfo(); } private void Btn_Read_MES_Click(object sender, EventArgs e) { ReadMES_ProductInfo(); } private void MisData_FormClosed(object sender, FormClosedEventArgs e) { notifyIcon_MIS.Visible = false; this.Dispose(); Application.Exit(); System.Environment.Exit(0); } private void toolStripMenuItem_Show_Click(object sender, EventArgs e) { this.Show(); this.WindowState = FormWindowState.Normal; this.Activate(); } private void toolStripMenuItem_Hide_Click(object sender, EventArgs e) { this.Hide(); if (PlcChange != null) { Sencondform.Invoke(SecondFormClose); ToolStripMenuItem_VWSStatus.Checked = false; } } private void toolStripMenuItem_Exit_Click(object sender, EventArgs e) { this.Close(); } private void MisData_Resize(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Minimized) { this.Hide(); if (PlcChange != null) { Sencondform.Invoke(SecondFormClose); ToolStripMenuItem_VWSStatus.Checked = false; } } } public static string WorkStationNum_Now; private void MisData_FormClosing(object sender, FormClosingEventArgs e) { notifyIcon_MIS.Visible = false; if (MessageBox.Show("你确定要退出程序吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK) { notifyIcon_MIS.Visible = false; e.Cancel = false; //判断SecondForm是否关闭 if (PlcChange != null) { Sencondform.BeginInvoke(SecondFormClose); } StopServer(); MesWork.Mqtt.StopAsync(); } else { notifyIcon_MIS.Visible = true; e.Cancel = true; } } private void notifyIcon_MIS_MouseDoubleClick(object sender, MouseEventArgs e) { if (!this.Visible) { this.Show(); this.WindowState = FormWindowState.Normal; } this.Activate(); } private void ToolStripMenuItem_PrintScreen_Click(object sender, EventArgs e) { PrintMainForm_Thread(); } private void ToolStripMenuItem_Quit_Click(object sender, EventArgs e) { this.Close(); } private void ToolStripMenuItem_SaveLog_Click(object sender, EventArgs e) { SavePLCMessage SavePlcMSG = new SavePLCMessage(); SavePlcMSG.SavePlcMessage_Thread(richTextBox_MessagePLC.Text); } private string Hello_You_All_Never_Know(string[] args) { return Guid.NewGuid().ToString(); //return string.Empty; } private void ToolStripMenuItem_LockForm_Click(object sender, EventArgs e) { MainFormLock = new MainAct(LockMainForm); MainFormUnlock = new MainAct(UnLockForm); MainLockConfirm LockConfirm = new MainLockConfirm(this, Sencondform); LockConfirm.ShowDialog(); } private void ToolStripMenuItem_VWSStatus_Click(object sender, EventArgs e) { if (PlcChange == null) { OpenSecondForm_Thread(); } else { Sencondform.BeginInvoke(SecondFormClose); ToolStripMenuItem_VWSStatus.Checked = false; } } private void MisData_LocationChanged(object sender, EventArgs e) { if (SyncSecondForm != null) { Sencondform.Invoke(SyncSecondForm, new Point(this.Left + this.Width, this.Top)); } } private void MisData_Activated(object sender, EventArgs e) { //Thread t = new Thread(new ParameterizedThreadStart(MainFormActive_Thread)); //t.Start(true); } void MainFormActive_Thread(object obj) { if (MainFormActive != null) MainFormActive(obj); } private void WToolStripMenuItem_EWSStatus_Click(object sender, EventArgs e) { } private void MToolStripMenuItem_AboutMacroinf_Click(object sender, EventArgs e) { System.Diagnostics.Process.Start("https://www.meswork.com"); } private void toolStripMenuItem_HVersion_Click(object sender, EventArgs e) { VersionsInformation VersionForm = new VersionsInformation(); VersionForm.ShowDialog(); } private void MisData_Load(object sender, EventArgs e) { new MesWork.WebApi().InitWebApi(); MesWork.Mqtt.StartAsync(MqttUrl); MesWork.Mqtt.mqttClient.ConnectedHandler = new MqttClientConnectedHandlerDelegate(OnSubscriberConnected); MesWork.Mqtt.mqttClient.DisconnectedHandler = new MqttClientDisconnectedHandlerDelegate(OnSubscriberDisconnected); MesWork.Mqtt.mqttClient.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(OnSubscriberMessageReceived); } void Runtime_Thread() { DateTime Now = DateTime.Now; TimeSpan x = Now.Subtract(StartTime); toolStripStatusLabel_RunTime.Text = x.Days.ToString() + "天" + x.Hours.ToString("00") + "小时" + x.Minutes.ToString("00") + "分" + x.Seconds.ToString("00") + "秒"; //Thread t = new Thread(new ParameterizedThreadStart (Runtime)); //t.Start(toolStripStatusLabel_RunTime); } DateTime StartTime; void Runtime(object obj) { try { ToolStripStatusLabel toolStripStatusLabel_RunningTime = (ToolStripStatusLabel)obj; DateTime Now = DateTime.Now; TimeSpan ts = Now.Subtract(StartTime); Action ActionDelegate = (x) => { toolStripStatusLabel_RunningTime.Text = x.Days.ToString() + "天" + x.Hours.ToString("00") + "小时" + x.Minutes.ToString("00") + "分" + x.Seconds.ToString("00") + "秒"; }; ActionDelegate(ts); } catch (Exception err) { ApplicationLog.WriteLog(err, err.Message); } } private void timer_TestPLC_Tick(object sender, EventArgs e) { try { if (!AllowLoad) return; timer_TestPLC.Enabled = false; Runtime_Thread(); timer_TestPLC.Enabled = true; SystemFramework.SystemClock.SystemClockTimerTick(); } catch (Exception err) { ApplicationLog.WriteLog(err, err.Message); } } void RefreshPlcConnectStatus(object sender, EventArgs e) { try { toolStripStatusLabel_OnlineNum.Text = sender.ToString(); toolStripStatusLabel_DownLine.Text = (Convert.ToInt32(toolStripStatusLabel_WorkStationNum.Text) - Convert.ToInt32(sender.ToString())).ToString(); } catch (Exception err) { ApplicationLog.WriteLog(err, err.Message); } } bool EToolStripMenuItem_EquipAlarm_Visiable = false; private void timer_LoadOver_Tick(object sender, EventArgs e) { if (this.Opacity == 1) { timer_LoadOver.Enabled = false; } else { this.Opacity = this.Opacity + 0.01; } } private void ToolStripMenuItem_HHelp_Click(object sender, EventArgs e) { string file = Environment.CurrentDirectory+ "\\MisData操作手册.pdf"; string str = file.Replace("\\bin\\Debug", "\\PDF\\MisData说明文档.pdf"); System.Diagnostics.Process.Start(file); } /// /// 程序集界面 /// /// /// private void ToolStripMenuItem_Assembly_Click(object sender, EventArgs e) { AssemblyManagement AssemblyView = new AssemblyManagement(); AssemblyView.ShowDialog(); } MesWork.OpcForm opcForm = null; private void TSM_DebugPage_Click(object sender, EventArgs e) { if (opcForm != null) { opcForm.Close(); opcForm.Dispose(); opcForm = null; } opcForm = new MesWork.OpcForm(IsDemoMesServer); opcForm.Show(); } private void button1_Click(object sender, EventArgs e) { WritePLC("71015001",1); WritePLC("71015002",1.1); WritePLC("71015003",2.2); WritePLC("71015004", 0); WritePLC("71015005", 3.3); WritePLC("71015006", 4.4); } private void btn_Bytes_Test_Click(object sender, EventArgs e) { byte[] bts = new byte[] { 67, 68 }; var textByte = System.Text.Encoding.ASCII.GetString(new byte[] { 67, 68 }); WritePLC(104, "OP0010", textByte); var readResult = ReadPLC(104, "OP0010").ToString(); var readResult1 = System.Text.Encoding.ASCII.GetBytes(ReadPLC(104,"OP0010").ToString ()); } private void AppConfigSet_Click(object sender, EventArgs e) { new AppConfigSetting.AppConfigSetForm().ShowDialog(); } //private ConcurrentDictionary GetDbAndMaxLengthByOpNameByBytes(string opName) //{ // string tagStartAdr = ""; // ushort tagAdrListMaxLength = 0; // GetDbAndMaxLengthByOpName(opName, out tagStartAdr, out tagAdrListMaxLength); // var tagAdrListTagFormat = ReadQualityDataList(opName, tagStartAdr, tagAdrListMaxLength); // return tagAdrListTagFormat; //} private void button_TeadTagValussByBytes_Click(object sender, EventArgs e) { //ConcurrentDictionary cdQd = new ConcurrentDictionary(); string opName = WorkStationNum_Now; var opTagList = GetDbAndMaxLengthByOpNameByBytes(opName); //TagID 排序 var keyValues = opTagList.OrderBy(x => x.Key).ToDictionary(k => k.Key, v => v.Value); TagFormat tagFormat1=new TagFormat (); TagFormat tagFormat2; TagFormat tagFormatTemp; int tagIndex=0; ushort length=0; string OpName=""; foreach (KeyValuePair kv in keyValues) { if (kv.Key.ToString()[0].ToString()=="7") { if (tagIndex == 0) { tagFormat1 = (TagFormat)kv.Value; tagFormatTemp = (TagFormat)kv.Value; ; //length = (ushort)tagFormat1.Length; } else { tagFormat2 = (TagFormat)kv.Value; tagFormat2.IsGoodBad = tagFormat1.TagValue.ToString(); //length = (ushort)((int)length + tagFormat2.Length); } tagIndex++; } else { continue; } //Console.WriteLine($"key:{kv.Key} value:{kv.Value}"); } } private void CacheAddChannelQualityDataTagList_Qd(string ChannelName, ConcurrentDictionary TagCache) { try { ConcurrentDictionary cd; if (DriverCache.ContainsKey(CacheType.Cache_OpQualityDataList_Qd)) { cd = DriverCache[CacheType.Cache_OpQualityDataList_Qd]; } else { cd = new ConcurrentDictionary(); } cd.AddOrUpdate(ChannelName, TagCache, (string key, object oldValue) => TagCache); DriverCache.AddOrUpdate(CacheType.Cache_OpQualityDataList_Qd, cd, (string key, ConcurrentDictionary oldValue) => cd); } catch (Exception eerr) { ApplicationLog.WriteLog("CacheAddChannelQualityDataTagList_Qd" + eerr); } } private ConcurrentDictionary GetDbAndMaxLengthByOpNameByBytes(string opName) { string tagStartAdr = ""; ushort tagAdrListMaxLength = 0; GetDbAndMaxLengthByOpName(opName, out tagStartAdr, out tagAdrListMaxLength); var tagAdrListTagFormat = ReadQualityDataList(opName, tagStartAdr, tagAdrListMaxLength); return tagAdrListTagFormat; } //public static bool BufferTransformationTag_Siemens(string whatDevice, byte[] recPlcBuffer, ref ConcurrentDictionary cdPlcTag, out string errorMessage) //public void ReadByteData_Op(string OpName, string Adr, string Length) //{ // ushort LengthValue = Convert.ToUInt16(Length); // var tagValue = PlcLinkForm.ReadByteData_Op(OpName, Adr, LengthValue); // //ReturnValueString rv = new ReturnValueString(); // //rv.CmdPlcReadWrite = ""; // //rv.OpName = ""; // //rv.TagValue = System.Text.Encoding.UTF8.GetString(tagValue); // //rv.TagID = ""; // //rv.ValueType = tagValue.GetType().Name.ToLower(); // //var pp = JsonConvert.SerializeObject(rv); // //HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(pp, Encoding.GetEncoding("UTF-8"), "application/json") }; // //return result; //} private void button_OnlyReadQtData_Click(object sender, EventArgs e) { string opName = WorkStationNum_Now; Function.MesRead_ByOnlyDataGroup(opName); //Hashtable ht = GetQualityDataTypeList(opName); //GetEngineMainData_ByOnlyDataGroup(opName, //out int qualityMask, //out int engineTypeID, //out string engineID, //out string engineType, out string partPallet, out string engineTraceCode, out string engineCap, Hashtable hashtable_EngineTypeID=null, //out int mes_MustTest, out int onLineState, out int partMoveDirection, //out int pressIsOK, out int pressIsNoOK); } private void button_ReadTagID_Click(object sender, EventArgs e) { string tagID = textBox_TagIDRead.Text; var tagValue = PlcLinkForm.ReadPLC(tagID); textBox_ReadTagIdValue.Text = tagValue.ToString(); } private void button_TestOpNameDataWrite_Click(object sender, EventArgs e) { string opName = WorkStationNum_Now; InitBasicDataTagValue(opName); } /// /// /// /// /// //public static object ReadPLC_Sync_DataList_MesRead_____(string opName) //{ // lock (l) // { // Hashtable ht = new Hashtable(); // var cd = PlcLinkForm.ReadPLC_GroupData(opName); // foreach (KeyValuePair _cd in cd) // { // var tagID = Convert.ToInt32(_cd.Key); // var TF = (TagFormat)_cd.Value; // QualityDataType qualityDataType; // qualityDataType = new QualityDataType(); // qualityDataType.tagID = TF.TagID; // qualityDataType.tagTypeID = TF.TagTypeID;//变量类型 // qualityDataType.opName = opName; // qualityDataType.isGoodBad = 192; // int.TryParse(TF.TagQuality, out int TagQuality); // qualityDataType.tagQuality = TagQuality; // qualityDataType.tagValueType = TF.TagTypeCodeID; // int.TryParse(TF.TagOrderBy, out int TagOrderBy); // qualityDataType.tagOrderBy = TagOrderBy; // int.TryParse(TF.TagItemOrderBy, out int TagItemOrderBy); // qualityDataType.tagItemOrderBy = TagItemOrderBy; // qualityDataType.tagProperty = TF.TagProperty;//变量特点 // qualityDataType.tagValue = TF.TagValue;//变量值 // ht.Add(tagID, qualityDataType); // } // return ht; // } //} private void EToolStripMenuItem_EquipAlarm_Click(object sender, EventArgs e) { try { if (!EToolStripMenuItem_EquipAlarm.Checked) { groupBox_WorkStationQuality.Width = 307; groupBox_WorkStationQuality.Height = 313; listView_ShowQualityData.Width = 294; listView_ShowQualityData.Height = 234; button_ReadData_Click(null, null); groupBox_Alarm.Visible = true; EToolStripMenuItem_EquipAlarm.Checked = true; EToolStripMenuItem_EquipAlarm_Visiable = true; } else { groupBox_Alarm.Visible = false; groupBox_WorkStationQuality.Width = 307; groupBox_WorkStationQuality.Height = 642; listView_ShowQualityData.Width = 294; listView_ShowQualityData.Height = 572; button_ReadData_Click(null, null); EToolStripMenuItem_EquipAlarm.Checked = false; } } catch (Exception err) { ApplicationLog.WriteLog(err, err.Message); } } } }