using Rs.Controls; using Rs.DataAccess; using Rs.Framework; using Rs.Motion; using Rs.Motion.Base; using Rs.Motion.GugaoEcat; using Rs.MotionPlat.Commom; using Rs.MotionPlat.SysConfig; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Rs.MotionPlat { public partial class FormIO : BaseForm { SqliteHelper db = new SqliteHelper(); private TabControlEx tab; List ioCards = new List(); private Dictionary ioDicIn = new Dictionary(); private Dictionary ioDicOut = new Dictionary(); private IOStatus selectIOStatus; List btnList = new List(); PanelEx mainPanel; string m_query = ""; public FormIO() { InitializeComponent(); } public FormIO(string query) { InitializeComponent(); m_query = query; } private void FormIO_Load(object sender, EventArgs e) { DataTable dt= new DataTable(); if(string.IsNullOrEmpty(m_query)) { dt = db.GetDataTable("select * from io where enable=1 order by sortindex asc"); } else { dt = db.GetDataTable($"select * from io where enable=1 and cardname like '%{m_query}%' order by sortindex asc"); } ioCards = IoManager.Instance.GetCards(); this.tableLayoutPanel1.RowCount = dt.Rows.Count + 1; tableLayoutPanel1.ColumnCount = 1; tableLayoutPanel1.RowStyles.Clear(); for(int i=0;i 0) { btnList[0].PerformClick(); } // this.Controls.Add(tableLayoutPanel1); //this.Controls.Add(mainPanel); //tab = new TabControlEx(); //tab.DrawMode = TabDrawMode.OwnerDrawFixed; //tab.ItemSize = new Size(150, 50); //tab.SuspendLayout(); //foreach (IIOCard card in ioCards) //{ // TabPage tp = new TabPage(); // tp.BackColor = Color.FromArgb(11, 16, 36); // tp.Text = card.Name + "_" + card.CardID; // tab.TabPages.Add(tp); // if (card.DIn.Count > 0 && card.DOut.Count > 0) // { // TableLayoutPanel table = new TableLayoutPanel(); // table.Dock = DockStyle.Fill; // //table.BackColor = Color.Red; // table.ColumnCount = 1; // table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); // table.RowCount = 2; // table.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); // table.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); // Panel panel = new Panel(); // panel.Dock = DockStyle.Fill; // table.Controls.Add(panel, 0, 0); // Label lblIn = new Label(); // lblIn.ForeColor = Color.White; // lblIn.Font = new Font("宋体", 20); // lblIn.AutoSize = false; // lblIn.Dock = DockStyle.Top; // lblIn.TextAlign = ContentAlignment.MiddleCenter; // lblIn.Text = "输入"; // lblIn.Height = 50; // lblIn.BackColor = Color.Gray; // FlowLayoutPanel tableLayoutPanel = new FlowLayoutPanel(); // tableLayoutPanel.Dock = DockStyle.Fill; // foreach (IIO io in card.DIn) // { // CreateIoControl(tableLayoutPanel, io); // } // panel.Controls.Add(tableLayoutPanel); // panel.Controls.Add(lblIn); // Panel panel2 = new Panel(); // panel2.Dock = DockStyle.Fill; // table.Controls.Add(panel2, 0, 1); // Label lblOut = new Label(); // lblOut.ForeColor = Color.White; // lblOut.Font = new Font("宋体", 24); // lblOut.AutoSize = false; // lblOut.Dock = DockStyle.Top; // lblOut.TextAlign = ContentAlignment.MiddleCenter; // lblOut.Text = "输出"; // lblOut.Height = 50; // lblOut.BackColor = Color.Gray; // FlowLayoutPanel tableLayoutPane2 = new FlowLayoutPanel(); // tableLayoutPane2.Dock = DockStyle.Fill; // foreach (IIO io in card.DOut) // { // CreateIoControl(tableLayoutPane2, io); // } // panel2.Controls.Add(tableLayoutPane2); // panel2.Controls.Add(lblOut); // tp.Controls.Add(table); // //分上下两部分,均分 // } // else // { // FlowLayoutPanel tableLayoutPanel = new FlowLayoutPanel(); // tableLayoutPanel.Dock = DockStyle.Fill; // foreach (IIO io in card.DOut) // { // CreateIoControl(tableLayoutPanel, io); // tp.Controls.Add(tableLayoutPanel); // } // foreach (IIO io in card.DIn) // { // CreateIoControl(tableLayoutPanel, io); // tp.Controls.Add(tableLayoutPanel); // } // } //} //tab.Dock = DockStyle.Fill; //this.Controls.Add(tab); //timer1.Enabled = true; } private void ClearSelect() { foreach (ButtonEx btn in btnList) { btn.Selected = false; } } private void Button_Click(object sender, EventArgs e) { int btnWidth = (((Screen.PrimaryScreen.WorkingArea.Width - 180) / 2) - 130) / 4; ClearSelect(); ((ButtonEx)sender).Selected = true; //timer1.Enabled = false; panelIn.Controls.Clear(); panelOut.Controls.Clear(); IIOCard card=(IIOCard)(((ButtonEx)sender).Tag); if (card == null) return; ioDicIn.Clear(); ioDicOut.Clear(); if(card.DIn.Count>0) { card.DIn= card.DIn.OrderBy(ob => ob.Disabled).ToList(); foreach (IIO iO in card.DIn) { CreateIoControl(panelIn, iO, true, btnWidth); } } if (card.DOut.Count > 0) { card.DOut = card.DOut.OrderBy(ob => ob.Disabled).ToList(); foreach (IIO iO in card.DOut) { CreateIoControl(panelOut, iO, false, btnWidth); } } //timer1.Enabled = true; //TableLayoutPanel table = new TableLayoutPanel(); //table.Dock = DockStyle.Fill; ////table.BackColor = Color.Red; //table.ColumnCount = 2; //table.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); //table.RowCount = 1; //table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); //table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); //Panel panel = new Panel(); //panel.Dock = DockStyle.Fill; //panel.BackColor = Color.Red; //Button lblIn = new Button(); //lblIn.Height = 150; //lblIn.ForeColor = Color.White; //lblIn.Font = new Font("宋体", 20); //lblIn.AutoSize = false; ////lblIn.Dock = DockStyle.Top; //lblIn.TextAlign = ContentAlignment.MiddleCenter; //lblIn.Text = "输入"; //lblIn.BackColor = Color.Blue; //panel.Controls.Add(lblIn); //table.Controls.Add(panel, 0, 0); //mainPanel.Controls.Add(table); } void CreateIoControl(FlowLayoutPanel panel, IIO io,bool inIo=false,int btnWidth=100) { try { IOStatus iostatus = new IOStatus(); if(inIo==false) { iostatus.Cursor = Cursors.Hand; iostatus.Click += (s, e) => { IOStatus btnIo = (IOStatus)s; IIO _io = (IIO)btnIo.Tag; if (btnIo.Status == 0) IoManager.Instance.WriteOut(_io.Name, 1); else IoManager.Instance.WriteOut(_io.Name, 0); }; } iostatus.Font = new Font("宋体", 10); iostatus.Tag = io; iostatus.Margin = new Padding(15, 10, 15, 10); iostatus.IoNO = io.Index; iostatus.Radius = 10; iostatus.Passed = io.Passed; iostatus.Disabled = io.Disabled; iostatus.AutoSize = false; iostatus.ForeColor = Color.White; iostatus.Size = new Size(btnWidth, 50); iostatus.Status = 0; iostatus.Text = io.Name; iostatus.MouseDown += Iostatus_MouseDown; if(inIo) { if (!ioDicIn.ContainsKey(io.Name)) { ioDicIn.Add(io.Name, iostatus); } } else { if (!ioDicOut.ContainsKey(io.Name)) { ioDicOut.Add(io.Name, iostatus); } } panel.Controls.Add(iostatus); } catch (Exception ex) { } } private void ReloadIoStatus() { ioDicIn.Clear(); ioDicOut.Clear(); foreach (var ioStatus in panelIn.Controls) { IOStatus ios=ioStatus as IOStatus; ioDicIn.Add(ios.Text, ios); } foreach (var ioStatus in panelOut.Controls) { IOStatus ios = ioStatus as IOStatus; ioDicOut.Add(ios.Text, ios); } } private void Iostatus_MouseDown(object sender, MouseEventArgs e) { if(GlobalUser.UserName=="超级用户"|| GlobalUser.UserName == "厂商") { if (e.Button == MouseButtons.Right) { IOStatus io = (IOStatus)sender; selectIOStatus = io; contextMenuStrip1.Show(MousePosition.X, MousePosition.Y); } } } private void timer1_Tick(object sender, EventArgs e) { foreach (KeyValuePair item in ioDicIn) { if (!item.Value.Disabled) { short value = IoManager.Instance.ReadIn(item.Value.Text); ioDicIn[item.Value.Text].Status = value; } } foreach (KeyValuePair item in ioDicOut) { if (!item.Value.Disabled) { short value = IoManager.Instance.ReadOut(item.Value.Text); ioDicOut[item.Value.Text].Status = value; } } //if (tab.SelectedIndex>=0 && tab.Controls.Count>0) //{ // IIOCard card = ioCards[tab.SelectedIndex]; // foreach (IIO iO in card.DIn) // { // if(!iO.Disabled) // { // short value = IoManager.Instance.ReadIn(iO.Name); // if (ioDic.ContainsKey(iO.Name)) // ioDic[iO.Name].Status = value; // } // } // foreach (IIO iO in card.DOut) // { // if(!iO.Disabled) // { // short value = IoManager.Instance.ReadOut(iO.Name); // if (ioDic.ContainsKey(iO.Name)) // ioDic[iO.Name].Status = value; // } // } //} } private void reverseToolStripMenuItem_Click(object sender, EventArgs e) { if(selectIOStatus!=null) { IIO io = (IIO)selectIOStatus.Tag; io.IsReverse=!io.IsReverse; io.Card.Save(); selectIOStatus = null; } } private void checkedToolStripMenuItem_Click(object sender, EventArgs e) { if (selectIOStatus != null) { selectIOStatus.Passed = !selectIOStatus.Passed; IIO io = (IIO)selectIOStatus.Tag; io.Passed = selectIOStatus.Passed; io.Card.Save(); selectIOStatus = null; } } private void disabledToolStripMenuItem_Click(object sender, EventArgs e) { if (selectIOStatus != null) { selectIOStatus.Disabled = !selectIOStatus.Disabled; IIO io = (IIO)selectIOStatus.Tag; io.Disabled = selectIOStatus.Disabled; io.Card.Save(); selectIOStatus = null; } } private void renameToolStripMenuItem_Click(object sender, EventArgs e) { if (selectIOStatus != null) { RenameIO renameIO = new RenameIO(selectIOStatus); renameIO.StartPosition = FormStartPosition.CenterParent; DialogResult dr = renameIO.ShowDialog(); //if(dr == DialogResult.OK) { ReloadIoStatus(); } } } } }